{"version":3,"file":"main.2493d4661c36f0974f00.js","mappings":"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","sources":["webpack:///../../node_modules/@honeybadger-io/js/dist/browser/honeybadger.js","webpack:///../../node_modules/@honeybadger-io/react/dist/honeybadger-react.esm.js","webpack:///../../node_modules/accounting/accounting.js","webpack:///../../config/webpack/availableLocales.js","webpack:///./boot/common/exportReact.js","webpack:///./boot/common/i18nSetup.js","webpack:///./boot/common/reactMount.js","webpack:///./boot/common/setMomentLocale.js","webpack:///./utils/getCookies.js","webpack:///./utils/cookieConsent.js","webpack:///../../node_modules/uuid/dist/esm-browser/stringify.js","webpack:///../../node_modules/uuid/dist/esm-browser/regex.js","webpack:///../../node_modules/uuid/dist/esm-browser/validate.js","webpack:///../../node_modules/uuid/dist/esm-browser/parse.js","webpack:///../../node_modules/uuid/dist/esm-browser/sha1.js","webpack:///../../node_modules/uuid/dist/esm-browser/v5.js","webpack:///../../node_modules/uuid/dist/esm-browser/v35.js","webpack:///./utils/trackingUserId.js","webpack:///./boot/main/globalSetup/analytics/remarketing.js","webpack:///./boot/main/globalSetup/initializeAnalytics.js","webpack:///./boot/main/globalSetup/external-tools.js","webpack:///./boot/main/globalSetup/foundation.js","webpack:///./boot/main/globalSetup/stickySidebar.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/display.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/catchUserErrors.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/monitor.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/utils/polyfills.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/getGlobalObject.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/utils/byteUtils.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/getZoneJsOriginalValue.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/timer.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/utils/functionUtils.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/serialisation/jsonStringify.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/utils/objectUtils.js","webpack:///../../node_modules/@datadog/browser-core/esm/domain/context/customerDataTracker.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/utils/typeUtils.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/mergeInto.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/serialisation/sanitize.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/observable.js","webpack:///../../node_modules/@datadog/browser-core/esm/domain/context/contextManager.js","webpack:///../../node_modules/@datadog/browser-core/esm/domain/trackingConsent.js","webpack:///../../node_modules/@datadog/browser-core/esm/browser/addEventListener.js","webpack:///../../node_modules/@datadog/browser-core/esm/domain/context/storeContextManager.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/encoder.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/stackTrace/computeStackTrace.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/stackTrace/handlingStack.js","webpack:///../../node_modules/@datadog/browser-core/esm/domain/error/error.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/experimentalFeatures.js","webpack:///../../node_modules/@datadog/browser-core/esm/domain/configuration/intakeSites.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/utils/numberUtils.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/utils/timeUtils.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/sendToExtension.js","webpack:///../../node_modules/@datadog/browser-core/esm/domain/connectivity/connectivity.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/utils/arrayUtils.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/boundedBuffer.js","webpack:///../../node_modules/@datadog/browser-core/esm/domain/telemetry/rawTelemetryEvent.types.js","webpack:///../../node_modules/@datadog/browser-core/esm/domain/telemetry/telemetry.js","webpack:///../../node_modules/@datadog/browser-core/esm/domain/user/user.js","webpack:///../../node_modules/@datadog/browser-core/esm/boot/displayAlreadyInitializedError.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/utils/stringUtils.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/vital/vitalCollection.js","webpack:///../../node_modules/@datadog/browser-core/esm/transport/eventBridge.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/instrumentMethod.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/utils/urlPolyfill.js","webpack:///../../node_modules/@datadog/browser-core/esm/browser/fetchObservable.js","webpack:///../../node_modules/@datadog/browser-core/esm/browser/cookie.js","webpack:///../../node_modules/@datadog/browser-core/esm/domain/synthetics/syntheticsWorkerValues.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/utils/browserDetection.js","webpack:///../../node_modules/@datadog/browser-core/esm/domain/session/storeStrategies/sessionStoreStrategy.js","webpack:///../../node_modules/@datadog/browser-core/esm/domain/session/sessionConstants.js","webpack:///../../node_modules/@datadog/browser-core/esm/domain/session/sessionStateValidation.js","webpack:///../../node_modules/@datadog/browser-core/esm/domain/session/sessionState.js","webpack:///../../node_modules/@datadog/browser-core/esm/domain/session/oldCookiesMigration.js","webpack:///../../node_modules/@datadog/browser-core/esm/domain/session/storeStrategies/sessionInCookie.js","webpack:///../../node_modules/@datadog/browser-core/esm/domain/session/storeStrategies/sessionInLocalStorage.js","webpack:///../../node_modules/@datadog/browser-core/esm/domain/session/sessionStoreOperations.js","webpack:///../../node_modules/@datadog/browser-core/esm/domain/session/sessionStore.js","webpack:///../../node_modules/@datadog/browser-core/esm/domain/configuration/endpointBuilder.js","webpack:///../../node_modules/@datadog/browser-core/esm/domain/configuration/tags.js","webpack:///../../node_modules/@datadog/browser-core/esm/domain/configuration/transportConfiguration.js","webpack:///../../node_modules/@datadog/browser-core/esm/domain/configuration/configuration.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/tracing/identifier.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/matchOption.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/browser/crypto.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/tracing/tracer.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/tracing/sampler.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/configuration/configuration.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/configuration/remoteConfiguration.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/boot/preStartRum.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/plugins.js","webpack:///../../node_modules/@datadog/browser-core/esm/browser/pageExitObservable.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/browser/domMutationObservable.js","webpack:///../../node_modules/@datadog/browser-core/esm/domain/error/error.types.js","webpack:///../../node_modules/@datadog/browser-core/esm/domain/eventRateLimiter/createEventRateLimiter.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/contexts/syntheticsContext.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/limitModification.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/assembly.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/abstractLifeCycle.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/lifeCycle.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/valueHistory.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/contexts/viewHistory.js","webpack:///../../node_modules/@datadog/browser-core/esm/browser/xhrObservable.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/resource/resourceUtils.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/requestCollection.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/browser/performanceObservable.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/utils/responseUtils.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/readBytesFromStream.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/discardNegativeDuration.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/trackEventCounts.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/browser/firstInputPolyfill.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/waitPageActivityEnd.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/browser/polyfills.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/browser/htmlDomUtils.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/privacy.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/action/getActionNameFromElement.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/getSelectorFromElement.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/action/clickChain.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/action/listenActionEvents.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/action/computeFrustration.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/action/interactionSelectorCache.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/action/trackClickActions.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/action/actionCollection.js","webpack:///../../node_modules/@datadog/browser-core/esm/domain/error/trackRuntimeError.js","webpack:///../../node_modules/@datadog/browser-core/esm/domain/console/consoleObservable.js","webpack:///../../node_modules/@datadog/browser-core/esm/domain/report/reportObservable.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/error/errorCollection.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/error/trackConsoleError.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/error/trackReportError.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/requestIdleCallback.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/taskQueue.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/resource/matchRequestResourceEntry.js","webpack:///../../node_modules/@datadog/browser-core/esm/browser/runOnReadyState.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/tracing/getDocumentTraceId.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/browser/performanceUtils.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/resource/retrieveInitialDocumentResourceTiming.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/resource/resourceCollection.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/view/viewMetrics/trackFirstContentfulPaint.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/view/viewMetrics/trackNavigationTimings.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/view/viewMetrics/trackLargestContentfulPaint.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/view/viewMetrics/trackFirstHidden.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/view/viewMetrics/trackInitialViewMetrics.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/view/viewMetrics/trackFirstInput.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/view/viewMetrics/trackCumulativeLayoutShift.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/view/viewMetrics/interactionCountPolyfill.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/browser/viewportObservable.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/view/viewMetrics/trackInteractionToNextPaint.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/browser/scroll.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/view/viewMetrics/trackScrollMetrics.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/view/viewMetrics/trackCommonViewMetrics.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/view/viewMetrics/trackLoadingTime.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/view/trackViews.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/view/trackViewEventCounts.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/view/viewCollection.js","webpack:///../../node_modules/@datadog/browser-core/esm/domain/session/sessionManager.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/rumSessionManager.js","webpack:///../../node_modules/@datadog/browser-core/esm/transport/batch.js","webpack:///../../node_modules/@datadog/browser-core/esm/transport/sendWithRetryStrategy.js","webpack:///../../node_modules/@datadog/browser-core/esm/transport/httpRequest.js","webpack:///../../node_modules/@datadog/browser-core/esm/transport/flushController.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/transport/startRumBatch.js","webpack:///../../node_modules/@datadog/browser-core/esm/transport/startBatchWithReplica.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/contexts/urlContexts.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/browser/locationChangeObservable.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/contexts/featureFlagContext.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/startCustomerDataTelemetry.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/contexts/pageStateHistory.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/browser/cookieObservable.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/contexts/ciVisibilityContext.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/getSessionReplayUrl.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/replayStats.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/record/serialization/serializationUtils.js","webpack:///../../node_modules/@datadog/browser-rum/esm/types/sessionReplayConstants.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/record/serialization/serializeStyleSheets.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/record/serialization/serializeAttribute.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/record/serialization/serializeAttributes.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/record/serialization/serializeNode.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/record/serialization/serializeDocument.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/record/eventsUtils.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/record/viewports.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/record/assembly.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/record/trackers/trackMove.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/record/trackers/trackMouseInteraction.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/record/trackers/trackScroll.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/record/trackers/trackViewportResize.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/record/trackers/trackMediaInteraction.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/record/trackers/trackStyleSheet.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/record/trackers/trackFocus.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/record/trackers/trackFrustration.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/record/trackers/trackViewEnd.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/record/trackers/trackInput.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/record/mutationBatch.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/record/trackers/trackMutation.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/record/shadowRootsController.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/record/record.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/record/elementsScrollPositions.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/record/startFullSnapshots.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/record/recordIds.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/segmentCollection/segment.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/segmentCollection/segmentCollection.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/segmentCollection/buildReplayPayload.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/deflate/deflateEncoder.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/deflate/deflateWorker.js","webpack:///../../node_modules/@datadog/browser-rum/esm/boot/isBrowserSupported.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/getSessionReplayLink.js","webpack:///../../node_modules/@datadog/browser-rum/esm/boot/postStartStrategy.js","webpack:///../../node_modules/@datadog/browser-rum/esm/entries/main.js","webpack:///../../node_modules/@datadog/browser-core/esm/boot/init.js","webpack:///../../node_modules/@datadog/browser-rum/esm/boot/recorderApi.js","webpack:///../../node_modules/@datadog/browser-rum/esm/boot/preStartStrategy.js","webpack:///../../node_modules/@datadog/browser-rum/esm/boot/startRecording.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/startRecordBridge.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/boot/rumPublicApi.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/contexts/commonContext.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/boot/startRum.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/transport/startRumEventBridge.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/browser/windowOpenObservable.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/contexts/displayContext.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/longAnimationFrame/longAnimationFrameCollection.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/longTask/longTaskCollection.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/contexts/internalContext.js","webpack:///./boot/main/globalSetup/setupDatadog.js","webpack:///./boot/main/globalSetup/setupHoneybadger.js","webpack:///./boot/main/globalSetup/index.js","webpack:///./admin/instructionVideoEmbed/components/InstructionVideoEmbed.js","webpack:///./boot/main/components.lazy.js","webpack:///./boot/main/exposeComponents.js","webpack:///./boot/main/actionEntryPoints.js","webpack:///./boot/main/hookActionSpecificSetup.js","webpack:///./boot/main/index.js","webpack:///./boot/vendor.js","webpack:///./boot/webpackPublicPath.js","webpack:///./common/components/Button.js","webpack:///./common/components/ErrorComponent.js","webpack:///./common/json/extract/match.js","webpack:///./common/json/extract/array.js","webpack:///./common/json/extract/array/items.js","webpack:///./common/json/extract/object.js","webpack:///./common/json/extract/object/record.js","webpack:///./common/json/extract/object/map.js","webpack:///./common/json/extract/nullable.js","webpack:///./common/json/extract/withDefault.js","webpack:///./common/json/extract/oneOf.js","webpack:///./common/json/extract/exactly.js","webpack:///./common/json/extract/rails/decimal.js","webpack:///./common/json/extract/rails/id.js","webpack:///./common/json/extract/failure.js","webpack:///./common/json/extract/primitive.js","webpack:///./common/json/extract/dates.js","webpack:///./common/json/extract/locale.js","webpack:///./common/json/extract/money.js","webpack:///./common/types/locale.js","webpack:///./common/types/money.js","webpack:///./site/allSites.js","webpack:///./site/currentSite.js","webpack:///./utils/analytics.js","webpack:///./utils/currencyUtils.js","webpack:///./utils/satisfiesMediaQuery.js","webpack:///../../lib/javascript/putki/index.js","webpack:///../../node_modules/i18n-js/app/assets/javascripts/i18n.js","webpack:///../../node_modules/jquery.cookie/jquery.cookie.js","webpack:///../../node_modules/moment/locale/sv.js","webpack:///../../node_modules/moment/moment.js","webpack:///../../node_modules/object-assign/index.js","webpack:///../../node_modules/react-dom/index.js","webpack:///../../node_modules/react/index.js","webpack:///../../node_modules/scheduler/cjs/scheduler.production.min.js","webpack:///../../node_modules/scheduler/index.js","webpack:///../../node_modules/what-input/dist/what-input.js","webpack:///external var \"Modernizr\"","webpack:///external var \"jQuery\"","webpack:///../../node_modules/classnames/index.js"],"sourcesContent":["(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Honeybadger = factory());\n})(this, (function () { 'use strict';\n\n\tvar commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\n\tfunction getDefaultExportFromCjs (x) {\n\t\treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n\t}\n\n\tfunction getAugmentedNamespace(n) {\n\t  var f = n.default;\n\t\tif (typeof f == \"function\") {\n\t\t\tvar a = function () {\n\t\t\t\treturn f.apply(this, arguments);\n\t\t\t};\n\t\t\ta.prototype = f.prototype;\n\t  } else a = {};\n\t  Object.defineProperty(a, '__esModule', {value: true});\n\t\tObject.keys(n).forEach(function (k) {\n\t\t\tvar d = Object.getOwnPropertyDescriptor(n, k);\n\t\t\tObject.defineProperty(a, k, d.get ? d : {\n\t\t\t\tenumerable: true,\n\t\t\t\tget: function () {\n\t\t\t\t\treturn n[k];\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\treturn a;\n\t}\n\n\tvar browser$1 = {};\n\n\tvar src = {};\n\n\tvar events = {};\n\n\tvar util$1 = {};\n\n\tvar UNKNOWN_FUNCTION = '<unknown>';\n\t/**\n\t * This parses the different stack traces and puts them into one format\n\t * This borrows heavily from TraceKit (https://github.com/csnover/TraceKit)\n\t */\n\n\tfunction parse(stackString) {\n\t  var lines = stackString.split('\\n');\n\t  return lines.reduce(function (stack, line) {\n\t    var parseResult = parseChrome(line) || parseWinjs(line) || parseGecko(line) || parseNode(line) || parseJSC(line);\n\n\t    if (parseResult) {\n\t      stack.push(parseResult);\n\t    }\n\n\t    return stack;\n\t  }, []);\n\t}\n\tvar chromeRe = /^\\s*at (.*?) ?\\(((?:file|https?|blob|chrome-extension|native|eval|webpack|<anonymous>|\\/|[a-z]:\\\\|\\\\\\\\).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\n\tvar chromeEvalRe = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\n\n\tfunction parseChrome(line) {\n\t  var parts = chromeRe.exec(line);\n\n\t  if (!parts) {\n\t    return null;\n\t  }\n\n\t  var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line\n\n\t  var isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line\n\n\t  var submatch = chromeEvalRe.exec(parts[2]);\n\n\t  if (isEval && submatch != null) {\n\t    // throw out eval line/column and use top-most line/column number\n\t    parts[2] = submatch[1]; // url\n\n\t    parts[3] = submatch[2]; // line\n\n\t    parts[4] = submatch[3]; // column\n\t  }\n\n\t  return {\n\t    file: !isNative ? parts[2] : null,\n\t    methodName: parts[1] || UNKNOWN_FUNCTION,\n\t    arguments: isNative ? [parts[2]] : [],\n\t    lineNumber: parts[3] ? +parts[3] : null,\n\t    column: parts[4] ? +parts[4] : null\n\t  };\n\t}\n\n\tvar winjsRe = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n\n\tfunction parseWinjs(line) {\n\t  var parts = winjsRe.exec(line);\n\n\t  if (!parts) {\n\t    return null;\n\t  }\n\n\t  return {\n\t    file: parts[2],\n\t    methodName: parts[1] || UNKNOWN_FUNCTION,\n\t    arguments: [],\n\t    lineNumber: +parts[3],\n\t    column: parts[4] ? +parts[4] : null\n\t  };\n\t}\n\n\tvar geckoRe = /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|\\[native).*?|[^@]*bundle)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\n\tvar geckoEvalRe = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\n\n\tfunction parseGecko(line) {\n\t  var parts = geckoRe.exec(line);\n\n\t  if (!parts) {\n\t    return null;\n\t  }\n\n\t  var isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n\t  var submatch = geckoEvalRe.exec(parts[3]);\n\n\t  if (isEval && submatch != null) {\n\t    // throw out eval line/column and use top-most line number\n\t    parts[3] = submatch[1];\n\t    parts[4] = submatch[2];\n\t    parts[5] = null; // no column when eval\n\t  }\n\n\t  return {\n\t    file: parts[3],\n\t    methodName: parts[1] || UNKNOWN_FUNCTION,\n\t    arguments: parts[2] ? parts[2].split(',') : [],\n\t    lineNumber: parts[4] ? +parts[4] : null,\n\t    column: parts[5] ? +parts[5] : null\n\t  };\n\t}\n\n\tvar javaScriptCoreRe = /^\\s*(?:([^@]*)(?:\\((.*?)\\))?@)?(\\S.*?):(\\d+)(?::(\\d+))?\\s*$/i;\n\n\tfunction parseJSC(line) {\n\t  var parts = javaScriptCoreRe.exec(line);\n\n\t  if (!parts) {\n\t    return null;\n\t  }\n\n\t  return {\n\t    file: parts[3],\n\t    methodName: parts[1] || UNKNOWN_FUNCTION,\n\t    arguments: [],\n\t    lineNumber: +parts[4],\n\t    column: parts[5] ? +parts[5] : null\n\t  };\n\t}\n\n\tvar nodeRe = /^\\s*at (?:((?:\\[object object\\])?[^\\\\/]+(?: \\[as \\S+\\])?) )?\\(?(.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n\n\tfunction parseNode(line) {\n\t  var parts = nodeRe.exec(line);\n\n\t  if (!parts) {\n\t    return null;\n\t  }\n\n\t  return {\n\t    file: parts[2],\n\t    methodName: parts[1] || UNKNOWN_FUNCTION,\n\t    arguments: [],\n\t    lineNumber: +parts[3],\n\t    column: parts[4] ? +parts[4] : null\n\t  };\n\t}\n\n\tvar stackTraceParser_esm = /*#__PURE__*/Object.freeze({\n\t\t__proto__: null,\n\t\tparse: parse\n\t});\n\n\tvar require$$0$1 = /*@__PURE__*/getAugmentedNamespace(stackTraceParser_esm);\n\n\t(function (exports) {\n\t\tvar __createBinding = (commonjsGlobal && commonjsGlobal.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n\t\t    if (k2 === undefined) k2 = k;\n\t\t    var desc = Object.getOwnPropertyDescriptor(m, k);\n\t\t    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n\t\t      desc = { enumerable: true, get: function() { return m[k]; } };\n\t\t    }\n\t\t    Object.defineProperty(o, k2, desc);\n\t\t}) : (function(o, m, k, k2) {\n\t\t    if (k2 === undefined) k2 = k;\n\t\t    o[k2] = m[k];\n\t\t}));\n\t\tvar __setModuleDefault = (commonjsGlobal && commonjsGlobal.__setModuleDefault) || (Object.create ? (function(o, v) {\n\t\t    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n\t\t}) : function(o, v) {\n\t\t    o[\"default\"] = v;\n\t\t});\n\t\tvar __importStar = (commonjsGlobal && commonjsGlobal.__importStar) || function (mod) {\n\t\t    if (mod && mod.__esModule) return mod;\n\t\t    var result = {};\n\t\t    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n\t\t    __setModuleDefault(result, mod);\n\t\t    return result;\n\t\t};\n\t\tvar __awaiter = (commonjsGlobal && commonjsGlobal.__awaiter) || function (thisArg, _arguments, P, generator) {\n\t\t    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n\t\t    return new (P || (P = Promise))(function (resolve, reject) {\n\t\t        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n\t\t        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n\t\t        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n\t\t        step((generator = generator.apply(thisArg, _arguments || [])).next());\n\t\t    });\n\t\t};\n\t\tvar __generator = (commonjsGlobal && commonjsGlobal.__generator) || function (thisArg, body) {\n\t\t    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n\t\t    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n\t\t    function verb(n) { return function (v) { return step([n, v]); }; }\n\t\t    function step(op) {\n\t\t        if (f) throw new TypeError(\"Generator is already executing.\");\n\t\t        while (_) try {\n\t\t            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n\t\t            if (y = 0, t) op = [op[0] & 2, t.value];\n\t\t            switch (op[0]) {\n\t\t                case 0: case 1: t = op; break;\n\t\t                case 4: _.label++; return { value: op[1], done: false };\n\t\t                case 5: _.label++; y = op[1]; op = [0]; continue;\n\t\t                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n\t\t                default:\n\t\t                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n\t\t                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n\t\t                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n\t\t                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n\t\t                    if (t[2]) _.ops.pop();\n\t\t                    _.trys.pop(); continue;\n\t\t            }\n\t\t            op = body.call(thisArg, _);\n\t\t        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n\t\t        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n\t\t    }\n\t\t};\n\t\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\t\texports.logDeprecatedMethod = exports.globalThisOrWindow = exports.isBrowserConfig = exports.clone = exports.formatCGIData = exports.filterUrl = exports.filter = exports.generateStackTrace = exports.endpoint = exports.instrumentConsole = exports.instrument = exports.isErrorObject = exports.makeNotice = exports.logger = exports.sanitize = exports.shallowClone = exports.runAfterNotifyHandlers = exports.runBeforeNotifyHandlers = exports.getSourceForBacktrace = exports.getCauses = exports.calculateBacktraceShift = exports.DEFAULT_BACKTRACE_SHIFT = exports.makeBacktrace = exports.objectIsExtensible = exports.objectIsEmpty = exports.mergeNotice = exports.merge = void 0;\n\t\t/* eslint-disable prefer-rest-params */\n\t\tvar stackTraceParser = __importStar(require$$0$1);\n\t\tfunction merge(obj1, obj2) {\n\t\t    var result = {};\n\t\t    for (var k in obj1) {\n\t\t        result[k] = obj1[k];\n\t\t    }\n\t\t    for (var k in obj2) {\n\t\t        result[k] = obj2[k];\n\t\t    }\n\t\t    return result;\n\t\t}\n\t\texports.merge = merge;\n\t\tfunction mergeNotice(notice1, notice2) {\n\t\t    var result = merge(notice1, notice2);\n\t\t    if (notice1.context && notice2.context) {\n\t\t        result.context = merge(notice1.context, notice2.context);\n\t\t    }\n\t\t    return result;\n\t\t}\n\t\texports.mergeNotice = mergeNotice;\n\t\tfunction objectIsEmpty(obj) {\n\t\t    for (var k in obj) {\n\t\t        if (Object.prototype.hasOwnProperty.call(obj, k)) {\n\t\t            return false;\n\t\t        }\n\t\t    }\n\t\t    return true;\n\t\t}\n\t\texports.objectIsEmpty = objectIsEmpty;\n\t\tfunction objectIsExtensible(obj) {\n\t\t    if (typeof Object.isExtensible !== 'function') {\n\t\t        return true;\n\t\t    }\n\t\t    return Object.isExtensible(obj);\n\t\t}\n\t\texports.objectIsExtensible = objectIsExtensible;\n\t\tfunction makeBacktrace(stack, filterHbSourceCode, logger) {\n\t\t    if (filterHbSourceCode === void 0) { filterHbSourceCode = false; }\n\t\t    if (logger === void 0) { logger = console; }\n\t\t    if (!stack) {\n\t\t        return [];\n\t\t    }\n\t\t    try {\n\t\t        var backtrace = stackTraceParser\n\t\t            .parse(stack)\n\t\t            .map(function (line) {\n\t\t            return {\n\t\t                file: line.file,\n\t\t                method: line.methodName,\n\t\t                number: line.lineNumber,\n\t\t                column: line.column\n\t\t            };\n\t\t        });\n\t\t        if (filterHbSourceCode) {\n\t\t            backtrace.splice(0, calculateBacktraceShift(backtrace));\n\t\t        }\n\t\t        return backtrace;\n\t\t    }\n\t\t    catch (err) {\n\t\t        logger.debug(err);\n\t\t        return [];\n\t\t    }\n\t\t}\n\t\texports.makeBacktrace = makeBacktrace;\n\t\tfunction isFrameFromHbSourceCode(frame) {\n\t\t    var hasHbFile = false;\n\t\t    var hasHbMethod = false;\n\t\t    if (frame.file) {\n\t\t        hasHbFile = frame.file.toLowerCase().indexOf('@honeybadger-io') > -1;\n\t\t    }\n\t\t    if (frame.method) {\n\t\t        hasHbMethod = frame.method.toLowerCase().indexOf('@honeybadger-io') > -1;\n\t\t    }\n\t\t    return hasHbFile || hasHbMethod;\n\t\t}\n\t\texports.DEFAULT_BACKTRACE_SHIFT = 3;\n\t\t/**\n\t\t * If {@link generateStackTrace} is used, we want to exclude frames that come from\n\t\t * Honeybadger's source code.\n\t\t *\n\t\t * Logic:\n\t\t * - For each frame, increment the shift if source code is from Honeybadger\n\t\t * - If a frame from an <anonymous> file is encountered increment the shift ONLY if between Honeybadger source code\n\t\t *   (i.e. previous and next frames are from Honeybadger)\n\t\t * - Exit when frame encountered is not from Honeybadger source code\n\t\t *\n\t\t * Note: this will not always work, especially in browser versions where code\n\t\t *       is minified, uglified and bundled.\n\t\t *       For those cases we default to 3:\n\t\t *       - generateStackTrace\n\t\t *       - makeNotice\n\t\t *       - notify\n\t\t */\n\t\tfunction calculateBacktraceShift(backtrace) {\n\t\t    var shift = 0;\n\t\t    for (var i = 0; i < backtrace.length; i++) {\n\t\t        var frame = backtrace[i];\n\t\t        if (isFrameFromHbSourceCode(frame)) {\n\t\t            shift++;\n\t\t            continue;\n\t\t        }\n\t\t        if (!frame.file || frame.file === '<anonymous>') {\n\t\t            var nextFrame = backtrace[i + 1];\n\t\t            if (nextFrame && isFrameFromHbSourceCode(nextFrame)) {\n\t\t                shift++;\n\t\t                continue;\n\t\t            }\n\t\t        }\n\t\t        break;\n\t\t    }\n\t\t    return shift || exports.DEFAULT_BACKTRACE_SHIFT;\n\t\t}\n\t\texports.calculateBacktraceShift = calculateBacktraceShift;\n\t\tfunction getCauses(notice, logger) {\n\t\t    if (notice.cause) {\n\t\t        var causes = [];\n\t\t        var cause = notice;\n\t\t        // @ts-ignore this throws an error if tsconfig.json has strict: true\n\t\t        while (causes.length < 3 && (cause = cause.cause)) {\n\t\t            causes.push({\n\t\t                class: cause.name,\n\t\t                message: cause.message,\n\t\t                backtrace: typeof cause.stack == 'string' ? makeBacktrace(cause.stack, false, logger) : null\n\t\t            });\n\t\t        }\n\t\t        return causes;\n\t\t    }\n\t\t    return [];\n\t\t}\n\t\texports.getCauses = getCauses;\n\t\tfunction getSourceForBacktrace(backtrace, getSourceFileHandler) {\n\t\t    return __awaiter(this, void 0, void 0, function () {\n\t\t        var result, index, trace, fileContent;\n\t\t        return __generator(this, function (_a) {\n\t\t            switch (_a.label) {\n\t\t                case 0:\n\t\t                    result = [];\n\t\t                    if (!getSourceFileHandler || !backtrace || !backtrace.length) {\n\t\t                        return [2 /*return*/, result];\n\t\t                    }\n\t\t                    index = 0;\n\t\t                    _a.label = 1;\n\t\t                case 1:\n\t\t                    if (!backtrace.length) return [3 /*break*/, 3];\n\t\t                    trace = backtrace.splice(0)[index];\n\t\t                    return [4 /*yield*/, getSourceFileHandler(trace.file)];\n\t\t                case 2:\n\t\t                    fileContent = _a.sent();\n\t\t                    result[index] = getSourceCodeSnippet(fileContent, trace.number);\n\t\t                    index++;\n\t\t                    return [3 /*break*/, 1];\n\t\t                case 3: return [2 /*return*/, result];\n\t\t            }\n\t\t        });\n\t\t    });\n\t\t}\n\t\texports.getSourceForBacktrace = getSourceForBacktrace;\n\t\tfunction runBeforeNotifyHandlers(notice, handlers) {\n\t\t    var results = [];\n\t\t    var result = true;\n\t\t    for (var i = 0, len = handlers.length; i < len; i++) {\n\t\t        var handler = handlers[i];\n\t\t        var handlerResult = handler(notice);\n\t\t        if (handlerResult === false) {\n\t\t            result = false;\n\t\t        }\n\t\t        results.push(handlerResult);\n\t\t    }\n\t\t    return {\n\t\t        results: results,\n\t\t        result: result\n\t\t    };\n\t\t}\n\t\texports.runBeforeNotifyHandlers = runBeforeNotifyHandlers;\n\t\tfunction runAfterNotifyHandlers(notice, handlers, error) {\n\t\t    if (notice && notice.afterNotify) {\n\t\t        notice.afterNotify(error, notice);\n\t\t    }\n\t\t    for (var i = 0, len = handlers.length; i < len; i++) {\n\t\t        handlers[i](error, notice);\n\t\t    }\n\t\t    return true;\n\t\t}\n\t\texports.runAfterNotifyHandlers = runAfterNotifyHandlers;\n\t\t// Returns a new object with properties from other object.\n\t\tfunction shallowClone(obj) {\n\t\t    if (typeof (obj) !== 'object' || obj === null) {\n\t\t        return {};\n\t\t    }\n\t\t    var result = {};\n\t\t    for (var k in obj) {\n\t\t        result[k] = obj[k];\n\t\t    }\n\t\t    return result;\n\t\t}\n\t\texports.shallowClone = shallowClone;\n\t\tfunction sanitize(obj, maxDepth) {\n\t\t    if (maxDepth === void 0) { maxDepth = 8; }\n\t\t    var seenObjects = [];\n\t\t    function seen(obj) {\n\t\t        if (!obj || typeof (obj) !== 'object') {\n\t\t            return false;\n\t\t        }\n\t\t        for (var i = 0; i < seenObjects.length; i++) {\n\t\t            var value = seenObjects[i];\n\t\t            if (value === obj) {\n\t\t                return true;\n\t\t            }\n\t\t        }\n\t\t        seenObjects.push(obj);\n\t\t        return false;\n\t\t    }\n\t\t    function canSerialize(obj) {\n\t\t        var typeOfObj = typeof obj;\n\t\t        // Functions are TMI\n\t\t        if (/function/.test(typeOfObj)) {\n\t\t            // Let special toJSON method pass as it's used by JSON.stringify (#722)\n\t\t            return obj.name === 'toJSON';\n\t\t        }\n\t\t        // Symbols can't convert to strings.\n\t\t        if (/symbol/.test(typeOfObj)) {\n\t\t            return false;\n\t\t        }\n\t\t        if (obj === null) {\n\t\t            return false;\n\t\t        }\n\t\t        // No prototype, likely created with `Object.create(null)`.\n\t\t        if (typeof obj === 'object' && typeof obj.hasOwnProperty === 'undefined') {\n\t\t            return false;\n\t\t        }\n\t\t        return true;\n\t\t    }\n\t\t    function serialize(obj, depth) {\n\t\t        if (depth === void 0) { depth = 0; }\n\t\t        if (depth >= maxDepth) {\n\t\t            return '[DEPTH]';\n\t\t        }\n\t\t        // Inspect invalid types\n\t\t        if (!canSerialize(obj)) {\n\t\t            return Object.prototype.toString.call(obj);\n\t\t        }\n\t\t        // Halt circular references\n\t\t        if (seen(obj)) {\n\t\t            return '[RECURSION]';\n\t\t        }\n\t\t        // Serialize inside arrays\n\t\t        if (Array.isArray(obj)) {\n\t\t            return obj.map(function (o) { return safeSerialize(o, depth + 1); });\n\t\t        }\n\t\t        // Serialize inside objects\n\t\t        if (typeof (obj) === 'object') {\n\t\t            var ret = {};\n\t\t            for (var k in obj) {\n\t\t                var v = obj[k];\n\t\t                if (Object.prototype.hasOwnProperty.call(obj, k) && (k != null) && (v != null)) {\n\t\t                    ret[k] = safeSerialize(v, depth + 1);\n\t\t                }\n\t\t            }\n\t\t            return ret;\n\t\t        }\n\t\t        // Return everything else untouched\n\t\t        return obj;\n\t\t    }\n\t\t    function safeSerialize(obj, depth) {\n\t\t        if (depth === void 0) { depth = 0; }\n\t\t        try {\n\t\t            return serialize(obj, depth);\n\t\t        }\n\t\t        catch (e) {\n\t\t            return \"[ERROR] \".concat(e);\n\t\t        }\n\t\t    }\n\t\t    return safeSerialize(obj);\n\t\t}\n\t\texports.sanitize = sanitize;\n\t\tfunction logger(client) {\n\t\t    var log = function (method) {\n\t\t        return function () {\n\t\t            var _a;\n\t\t            var args = [];\n\t\t            for (var _i = 0; _i < arguments.length; _i++) {\n\t\t                args[_i] = arguments[_i];\n\t\t            }\n\t\t            if (method === 'debug') {\n\t\t                if (!client.config.debug) {\n\t\t                    return;\n\t\t                }\n\t\t                // Log at default level so that you don't need to also enable verbose\n\t\t                // logging in Chrome.\n\t\t                method = 'log';\n\t\t            }\n\t\t            args.unshift('[Honeybadger]');\n\t\t            (_a = client.config.logger)[method].apply(_a, args);\n\t\t        };\n\t\t    };\n\t\t    return {\n\t\t        log: log('log'),\n\t\t        info: log('info'),\n\t\t        debug: log('debug'),\n\t\t        warn: log('warn'),\n\t\t        error: log('error')\n\t\t    };\n\t\t}\n\t\texports.logger = logger;\n\t\t/**\n\t\t * Converts any object into a notice object (which at minimum has the same\n\t\t * properties as Error, but supports additional Honeybadger properties.)\n\t\t */\n\t\tfunction makeNotice(thing) {\n\t\t    var notice;\n\t\t    if (!thing) {\n\t\t        notice = {};\n\t\t    }\n\t\t    else if (isErrorObject(thing)) {\n\t\t        var e = thing;\n\t\t        notice = merge(thing, { name: e.name, message: e.message, stack: e.stack, cause: e.cause });\n\t\t    }\n\t\t    else if (typeof thing === 'object') {\n\t\t        notice = shallowClone(thing);\n\t\t    }\n\t\t    else {\n\t\t        var m = String(thing);\n\t\t        notice = { message: m };\n\t\t    }\n\t\t    return notice;\n\t\t}\n\t\texports.makeNotice = makeNotice;\n\t\tfunction isErrorObject(thing) {\n\t\t    return thing instanceof Error\n\t\t        || Object.prototype.toString.call(thing) === '[object Error]'; // Important for cross-realm objects\n\t\t}\n\t\texports.isErrorObject = isErrorObject;\n\t\t/**\n\t\t * Instrument an existing function inside an object (usually global).\n\t\t * @param {!Object} object\n\t\t * @param {!String} name\n\t\t * @param {!Function} replacement\n\t\t */\n\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\tfunction instrument(object, name, replacement) {\n\t\t    if (!object || !name || !replacement || !(name in object)) {\n\t\t        return;\n\t\t    }\n\t\t    try {\n\t\t        var original = object[name];\n\t\t        while (original && original.__hb_original) {\n\t\t            original = original.__hb_original;\n\t\t        }\n\t\t        object[name] = replacement(original);\n\t\t        object[name].__hb_original = original;\n\t\t    }\n\t\t    catch (_e) {\n\t\t        // Ignores errors where \"original\" is a restricted object (see #1001)\n\t\t        // Uncaught Error: Permission denied to access property \"__hb_original\"\n\t\t        // Also ignores:\n\t\t        //   Error: TypeError: Cannot set property onunhandledrejection of [object Object] which has only a getter\n\t\t        //   User-Agent: Mozilla/5.0 (Linux; Android 10; SAMSUNG SM-G960F) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/12.1 Chrome/79.0.3945.136 Mobile Safari/537.36\n\t\t    }\n\t\t}\n\t\texports.instrument = instrument;\n\t\tvar _consoleAlreadyInstrumented = false;\n\t\tvar listeners = [];\n\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\tfunction instrumentConsole(_window, handler) {\n\t\t    if (!_window || !_window.console || !handler) {\n\t\t        return;\n\t\t    }\n\t\t    listeners.push(handler);\n\t\t    if (_consoleAlreadyInstrumented) {\n\t\t        return;\n\t\t    }\n\t\t    _consoleAlreadyInstrumented = true;\n\t\t    ['debug', 'info', 'warn', 'error', 'log'].forEach(function (level) {\n\t\t        instrument(_window.console, level, function hbLogger(original) {\n\t\t            return function () {\n\t\t                var args = Array.prototype.slice.call(arguments);\n\t\t                listeners.forEach(function (listener) {\n\t\t                    try {\n\t\t                        listener(level, args);\n\t\t                    }\n\t\t                    catch (_e) {\n\t\t                        // ignore\n\t\t                        // should never reach here because instrument method already wraps with try/catch block\n\t\t                    }\n\t\t                });\n\t\t                if (typeof original === 'function') {\n\t\t                    Function.prototype.apply.call(original, _window.console, arguments);\n\t\t                }\n\t\t            };\n\t\t        });\n\t\t    });\n\t\t}\n\t\texports.instrumentConsole = instrumentConsole;\n\t\tfunction endpoint(base, path) {\n\t\t    var endpoint = base.trim().replace(/\\/$/, '');\n\t\t    path = path.trim().replace(/(^\\/|\\/$)/g, '');\n\t\t    return \"\".concat(endpoint, \"/\").concat(path);\n\t\t}\n\t\texports.endpoint = endpoint;\n\t\tfunction generateStackTrace() {\n\t\t    try {\n\t\t        throw new Error('');\n\t\t    }\n\t\t    catch (e) {\n\t\t        if (e.stack) {\n\t\t            return e.stack;\n\t\t        }\n\t\t    }\n\t\t    var maxStackSize = 10;\n\t\t    var stack = [];\n\t\t    var curr = arguments.callee;\n\t\t    while (curr && stack.length < maxStackSize) {\n\t\t        if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n\t\t            stack.push(RegExp.$1 || '<anonymous>');\n\t\t        }\n\t\t        else {\n\t\t            stack.push('<anonymous>');\n\t\t        }\n\t\t        try {\n\t\t            curr = curr.caller;\n\t\t        }\n\t\t        catch (e) {\n\t\t            break;\n\t\t        }\n\t\t    }\n\t\t    return stack.join('\\n');\n\t\t}\n\t\texports.generateStackTrace = generateStackTrace;\n\t\tfunction filter(obj, filters) {\n\t\t    if (!is('Object', obj)) {\n\t\t        return;\n\t\t    }\n\t\t    if (!is('Array', filters)) {\n\t\t        filters = [];\n\t\t    }\n\t\t    var seen = [];\n\t\t    function filter(obj) {\n\t\t        var k, newObj;\n\t\t        if (is('Object', obj) || is('Array', obj)) {\n\t\t            if (seen.indexOf(obj) !== -1) {\n\t\t                return '[CIRCULAR DATA STRUCTURE]';\n\t\t            }\n\t\t            seen.push(obj);\n\t\t        }\n\t\t        if (is('Object', obj)) {\n\t\t            newObj = {};\n\t\t            for (k in obj) {\n\t\t                if (filterMatch(k, filters)) {\n\t\t                    newObj[k] = '[FILTERED]';\n\t\t                }\n\t\t                else {\n\t\t                    newObj[k] = filter(obj[k]);\n\t\t                }\n\t\t            }\n\t\t            return newObj;\n\t\t        }\n\t\t        if (is('Array', obj)) {\n\t\t            return obj.map(function (v) {\n\t\t                return filter(v);\n\t\t            });\n\t\t        }\n\t\t        if (is('Function', obj)) {\n\t\t            return '[FUNC]';\n\t\t        }\n\t\t        return obj;\n\t\t    }\n\t\t    return filter(obj);\n\t\t}\n\t\texports.filter = filter;\n\t\tfunction filterMatch(key, filters) {\n\t\t    for (var i = 0; i < filters.length; i++) {\n\t\t        if (key.toLowerCase().indexOf(filters[i].toLowerCase()) !== -1) {\n\t\t            return true;\n\t\t        }\n\t\t    }\n\t\t    return false;\n\t\t}\n\t\tfunction is(type, obj) {\n\t\t    var klass = Object.prototype.toString.call(obj).slice(8, -1);\n\t\t    return obj !== undefined && obj !== null && klass === type;\n\t\t}\n\t\tfunction filterUrl(url, filters) {\n\t\t    if (!filters) {\n\t\t        return url;\n\t\t    }\n\t\t    if (typeof url !== 'string') {\n\t\t        return url;\n\t\t    }\n\t\t    var query = url.split(/\\?/, 2)[1];\n\t\t    if (!query) {\n\t\t        return url;\n\t\t    }\n\t\t    var result = url;\n\t\t    query.split(/[&]\\s?/).forEach(function (pair) {\n\t\t        var _a = pair.split('=', 2), key = _a[0], value = _a[1];\n\t\t        if (filterMatch(key, filters)) {\n\t\t            result = result.replace(\"\".concat(key, \"=\").concat(value), \"\".concat(key, \"=[FILTERED]\"));\n\t\t        }\n\t\t    });\n\t\t    return result;\n\t\t}\n\t\texports.filterUrl = filterUrl;\n\t\tfunction formatCGIData(vars, prefix) {\n\t\t    if (prefix === void 0) { prefix = ''; }\n\t\t    var formattedVars = {};\n\t\t    Object.keys(vars).forEach(function (key) {\n\t\t        var formattedKey = prefix + key.replace(/\\W/g, '_').toUpperCase();\n\t\t        formattedVars[formattedKey] = vars[key];\n\t\t    });\n\t\t    return formattedVars;\n\t\t}\n\t\texports.formatCGIData = formatCGIData;\n\t\tfunction clone(obj) {\n\t\t    return JSON.parse(JSON.stringify(obj));\n\t\t}\n\t\texports.clone = clone;\n\t\tfunction getSourceCodeSnippet(fileData, lineNumber, sourceRadius) {\n\t\t    if (sourceRadius === void 0) { sourceRadius = 2; }\n\t\t    if (!fileData) {\n\t\t        return null;\n\t\t    }\n\t\t    var lines = fileData.split('\\n');\n\t\t    // add one empty line because array index starts from 0, but error line number is counted from 1\n\t\t    lines.unshift('');\n\t\t    var start = lineNumber - sourceRadius;\n\t\t    var end = lineNumber + sourceRadius;\n\t\t    var result = {};\n\t\t    for (var i = start; i <= end; i++) {\n\t\t        var line = lines[i];\n\t\t        if (typeof line === 'string') {\n\t\t            result[i] = line;\n\t\t        }\n\t\t    }\n\t\t    return result;\n\t\t}\n\t\tfunction isBrowserConfig(config) {\n\t\t    return config.async !== undefined;\n\t\t}\n\t\texports.isBrowserConfig = isBrowserConfig;\n\t\t/** globalThis has fairly good support. But just in case, lets check its defined.\n\t\t * @see {https://caniuse.com/?search=globalThis}\n\t\t */\n\t\tfunction globalThisOrWindow() {\n\t\t    if (typeof globalThis !== 'undefined') {\n\t\t        return globalThis;\n\t\t    }\n\t\t    if (typeof self !== 'undefined') {\n\t\t        return self;\n\t\t    }\n\t\t    return window;\n\t\t}\n\t\texports.globalThisOrWindow = globalThisOrWindow;\n\t\tvar _deprecatedMethodCalls = {};\n\t\t/**\n\t\t * Logs a deprecation warning, every X calls to the method.\n\t\t */\n\t\tfunction logDeprecatedMethod(logger, oldMethod, newMethod, callCountThreshold) {\n\t\t    if (callCountThreshold === void 0) { callCountThreshold = 100; }\n\t\t    var key = \"\".concat(oldMethod, \"-\").concat(newMethod);\n\t\t    if (typeof _deprecatedMethodCalls[key] === 'undefined') {\n\t\t        _deprecatedMethodCalls[key] = 0;\n\t\t    }\n\t\t    if (_deprecatedMethodCalls[key] % callCountThreshold !== 0) {\n\t\t        _deprecatedMethodCalls[key]++;\n\t\t        return;\n\t\t    }\n\t\t    var msg = \"Deprecation warning: \".concat(oldMethod, \" has been deprecated; please use \").concat(newMethod, \" instead.\");\n\t\t    logger.warn(msg);\n\t\t    _deprecatedMethodCalls[key]++;\n\t\t}\n\t\texports.logDeprecatedMethod = logDeprecatedMethod;\n\t\t\n\t} (util$1));\n\n\tObject.defineProperty(events, \"__esModule\", { value: true });\n\tvar util_1$4 = util$1;\n\tfunction default_1$4(_window) {\n\t    if (_window === void 0) { _window = (0, util_1$4.globalThisOrWindow)(); }\n\t    return {\n\t        shouldReloadOnConfigure: false,\n\t        load: function (client) {\n\t            function sendEventsToInsights() {\n\t                return client.config.eventsEnabled;\n\t            }\n\t            if (!sendEventsToInsights()) {\n\t                return;\n\t            }\n\t            (0, util_1$4.instrumentConsole)(_window, function (level, args) {\n\t                if (!sendEventsToInsights()) {\n\t                    return;\n\t                }\n\t                if (args.length === 0) {\n\t                    return;\n\t                }\n\t                var data = {\n\t                    severity: level,\n\t                };\n\t                if (typeof args[0] === 'string') {\n\t                    data.message = args[0];\n\t                    data.args = args.slice(1);\n\t                }\n\t                else {\n\t                    data.args = args;\n\t                }\n\t                client.event('log', data);\n\t            });\n\t        }\n\t    };\n\t}\n\tevents.default = default_1$4;\n\n\tvar client = {};\n\n\tvar store = {};\n\n\tObject.defineProperty(store, \"__esModule\", { value: true });\n\tstore.GlobalStore = void 0;\n\tvar util_1$3 = util$1;\n\tvar GlobalStore = /** @class */ (function () {\n\t    function GlobalStore(contents, breadcrumbsLimit) {\n\t        this.contents = contents;\n\t        this.breadcrumbsLimit = breadcrumbsLimit;\n\t    }\n\t    GlobalStore.create = function (contents, breadcrumbsLimit) {\n\t        return new GlobalStore(contents, breadcrumbsLimit);\n\t    };\n\t    GlobalStore.prototype.available = function () {\n\t        return true;\n\t    };\n\t    GlobalStore.prototype.getContents = function (key) {\n\t        var value = key ? this.contents[key] : this.contents;\n\t        return JSON.parse(JSON.stringify(value));\n\t    };\n\t    GlobalStore.prototype.setContext = function (context) {\n\t        this.contents.context = (0, util_1$3.merge)(this.contents.context, context || {});\n\t    };\n\t    GlobalStore.prototype.addBreadcrumb = function (breadcrumb) {\n\t        if (this.contents.breadcrumbs.length == this.breadcrumbsLimit) {\n\t            this.contents.breadcrumbs.shift();\n\t        }\n\t        this.contents.breadcrumbs.push(breadcrumb);\n\t    };\n\t    GlobalStore.prototype.clear = function () {\n\t        this.contents.context = {};\n\t        this.contents.breadcrumbs = [];\n\t    };\n\t    GlobalStore.prototype.run = function (callback) {\n\t        return callback();\n\t    };\n\t    return GlobalStore;\n\t}());\n\tstore.GlobalStore = GlobalStore;\n\n\tvar throttled_events_logger = {};\n\n\tclass NdJson {\n\t    static parse(data) {\n\t        const lines = data.trim().split('\\n');\n\t        return lines.map(line => JSON.parse(line));\n\t    }\n\t    static stringify(data) {\n\t        return data.map(item => JSON.stringify(item)).join('\\n');\n\t    }\n\t}\n\n\tvar module = /*#__PURE__*/Object.freeze({\n\t\t__proto__: null,\n\t\tNdJson: NdJson\n\t});\n\n\tvar require$$0 = /*@__PURE__*/getAugmentedNamespace(module);\n\n\tvar defaults = {};\n\n\tObject.defineProperty(defaults, \"__esModule\", { value: true });\n\tdefaults.CONFIG = void 0;\n\tdefaults.CONFIG = {\n\t    apiKey: null,\n\t    endpoint: 'https://api.honeybadger.io',\n\t    environment: null,\n\t    hostname: null,\n\t    projectRoot: null,\n\t    component: null,\n\t    action: null,\n\t    revision: null,\n\t    reportData: null,\n\t    breadcrumbsEnabled: true,\n\t    // we could decide the value of eventsEnabled based on `env` and `developmentEnvironments`\n\t    eventsEnabled: false,\n\t    maxBreadcrumbs: 40,\n\t    maxObjectDepth: 8,\n\t    logger: console,\n\t    developmentEnvironments: ['dev', 'development', 'test'],\n\t    debug: false,\n\t    tags: null,\n\t    enableUncaught: true,\n\t    enableUnhandledRejection: true,\n\t    afterUncaught: function () { return true; },\n\t    filters: ['creditcard', 'password'],\n\t    __plugins: [],\n\t};\n\n\tvar __assign$2 = (commonjsGlobal && commonjsGlobal.__assign) || function () {\n\t    __assign$2 = Object.assign || function(t) {\n\t        for (var s, i = 1, n = arguments.length; i < n; i++) {\n\t            s = arguments[i];\n\t            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n\t                t[p] = s[p];\n\t        }\n\t        return t;\n\t    };\n\t    return __assign$2.apply(this, arguments);\n\t};\n\tvar __awaiter$2 = (commonjsGlobal && commonjsGlobal.__awaiter) || function (thisArg, _arguments, P, generator) {\n\t    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n\t    return new (P || (P = Promise))(function (resolve, reject) {\n\t        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n\t        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n\t        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n\t        step((generator = generator.apply(thisArg, _arguments || [])).next());\n\t    });\n\t};\n\tvar __generator$2 = (commonjsGlobal && commonjsGlobal.__generator) || function (thisArg, body) {\n\t    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n\t    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n\t    function verb(n) { return function (v) { return step([n, v]); }; }\n\t    function step(op) {\n\t        if (f) throw new TypeError(\"Generator is already executing.\");\n\t        while (_) try {\n\t            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n\t            if (y = 0, t) op = [op[0] & 2, t.value];\n\t            switch (op[0]) {\n\t                case 0: case 1: t = op; break;\n\t                case 4: _.label++; return { value: op[1], done: false };\n\t                case 5: _.label++; y = op[1]; op = [0]; continue;\n\t                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n\t                default:\n\t                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n\t                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n\t                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n\t                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n\t                    if (t[2]) _.ops.pop();\n\t                    _.trys.pop(); continue;\n\t            }\n\t            op = body.call(thisArg, _);\n\t        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n\t        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n\t    }\n\t};\n\tObject.defineProperty(throttled_events_logger, \"__esModule\", { value: true });\n\tthrottled_events_logger.ThrottledEventsLogger = void 0;\n\tvar json_nd_1 = require$$0;\n\tvar util_1$2 = util$1;\n\tvar defaults_1$1 = defaults;\n\tvar ThrottledEventsLogger = /** @class */ (function () {\n\t    function ThrottledEventsLogger(config, transport) {\n\t        this.config = config;\n\t        this.transport = transport;\n\t        this.queue = [];\n\t        this.isProcessing = false;\n\t        this.config = __assign$2(__assign$2({}, defaults_1$1.CONFIG), config);\n\t        this.logger = this.originalLogger();\n\t    }\n\t    ThrottledEventsLogger.prototype.configure = function (opts) {\n\t        for (var k in opts) {\n\t            this.config[k] = opts[k];\n\t        }\n\t    };\n\t    ThrottledEventsLogger.prototype.log = function (payload) {\n\t        this.queue.push(payload);\n\t        if (!this.isProcessing) {\n\t            this.processQueue();\n\t        }\n\t    };\n\t    ThrottledEventsLogger.prototype.flushAsync = function () {\n\t        this.logger.debug('[Honeybadger] Flushing events');\n\t        return this.send();\n\t    };\n\t    ThrottledEventsLogger.prototype.processQueue = function () {\n\t        var _this = this;\n\t        if (this.queue.length === 0 || this.isProcessing) {\n\t            return;\n\t        }\n\t        this.isProcessing = true;\n\t        this.send()\n\t            .then(function () {\n\t            setTimeout(function () {\n\t                _this.isProcessing = false;\n\t                _this.processQueue();\n\t            }, 50);\n\t        })\n\t            .catch(function (error) {\n\t            _this.logger.error('[Honeybadger] Error making HTTP request:', error);\n\t            // Continue processing the queue even if there's an error\n\t            setTimeout(function () {\n\t                _this.isProcessing = false;\n\t                _this.processQueue();\n\t            }, 50);\n\t        });\n\t    };\n\t    ThrottledEventsLogger.prototype.send = function () {\n\t        return __awaiter$2(this, void 0, void 0, function () {\n\t            var eventsData, data;\n\t            return __generator$2(this, function (_a) {\n\t                if (this.queue.length === 0) {\n\t                    return [2 /*return*/];\n\t                }\n\t                eventsData = this.queue.slice();\n\t                this.queue = [];\n\t                data = json_nd_1.NdJson.stringify(eventsData);\n\t                return [2 /*return*/, this.makeHttpRequest(data)];\n\t            });\n\t        });\n\t    };\n\t    ThrottledEventsLogger.prototype.makeHttpRequest = function (data) {\n\t        return __awaiter$2(this, void 0, void 0, function () {\n\t            var _this = this;\n\t            return __generator$2(this, function (_a) {\n\t                return [2 /*return*/, this.transport\n\t                        .send({\n\t                        headers: {\n\t                            'X-API-Key': this.config.apiKey,\n\t                            'Content-Type': 'application/json',\n\t                        },\n\t                        method: 'POST',\n\t                        endpoint: (0, util_1$2.endpoint)(this.config.endpoint, '/v1/events'),\n\t                        maxObjectDepth: this.config.maxObjectDepth,\n\t                        logger: this.logger,\n\t                    }, data)\n\t                        .then(function () {\n\t                        if (_this.config.debug) {\n\t                            _this.logger.debug('[Honeybadger] Events sent successfully');\n\t                        }\n\t                    })\n\t                        .catch(function (err) {\n\t                        _this.logger.error(\"[Honeybadger] Error sending events: \".concat(err.message));\n\t                    })];\n\t            });\n\t        });\n\t    };\n\t    /**\n\t     * todo: improve this\n\t     *\n\t     * The EventsLogger overrides the console methods to enable automatic instrumentation\n\t     * of console logs to the Honeybadger API.\n\t     * So if we want to log something in here we need to use the original methods.\n\t     */\n\t    ThrottledEventsLogger.prototype.originalLogger = function () {\n\t        var _a, _b, _c, _d, _e;\n\t        return {\n\t            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t            log: (_a = console.log.__hb_original) !== null && _a !== void 0 ? _a : console.log,\n\t            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t            info: (_b = console.info.__hb_original) !== null && _b !== void 0 ? _b : console.info,\n\t            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t            debug: (_c = console.debug.__hb_original) !== null && _c !== void 0 ? _c : console.debug,\n\t            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t            warn: (_d = console.warn.__hb_original) !== null && _d !== void 0 ? _d : console.warn,\n\t            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t            error: (_e = console.error.__hb_original) !== null && _e !== void 0 ? _e : console.error,\n\t        };\n\t    };\n\t    return ThrottledEventsLogger;\n\t}());\n\tthrottled_events_logger.ThrottledEventsLogger = ThrottledEventsLogger;\n\n\tvar __assign$1 = (commonjsGlobal && commonjsGlobal.__assign) || function () {\n\t    __assign$1 = Object.assign || function(t) {\n\t        for (var s, i = 1, n = arguments.length; i < n; i++) {\n\t            s = arguments[i];\n\t            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n\t                t[p] = s[p];\n\t        }\n\t        return t;\n\t    };\n\t    return __assign$1.apply(this, arguments);\n\t};\n\tvar __awaiter$1 = (commonjsGlobal && commonjsGlobal.__awaiter) || function (thisArg, _arguments, P, generator) {\n\t    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n\t    return new (P || (P = Promise))(function (resolve, reject) {\n\t        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n\t        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n\t        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n\t        step((generator = generator.apply(thisArg, _arguments || [])).next());\n\t    });\n\t};\n\tvar __generator$1 = (commonjsGlobal && commonjsGlobal.__generator) || function (thisArg, body) {\n\t    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n\t    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n\t    function verb(n) { return function (v) { return step([n, v]); }; }\n\t    function step(op) {\n\t        if (f) throw new TypeError(\"Generator is already executing.\");\n\t        while (_) try {\n\t            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n\t            if (y = 0, t) op = [op[0] & 2, t.value];\n\t            switch (op[0]) {\n\t                case 0: case 1: t = op; break;\n\t                case 4: _.label++; return { value: op[1], done: false };\n\t                case 5: _.label++; y = op[1]; op = [0]; continue;\n\t                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n\t                default:\n\t                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n\t                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n\t                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n\t                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n\t                    if (t[2]) _.ops.pop();\n\t                    _.trys.pop(); continue;\n\t            }\n\t            op = body.call(thisArg, _);\n\t        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n\t        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n\t    }\n\t};\n\tObject.defineProperty(client, \"__esModule\", { value: true });\n\tclient.Client = void 0;\n\tvar util_1$1 = util$1;\n\tvar store_1 = store;\n\tvar throttled_events_logger_1 = throttled_events_logger;\n\tvar defaults_1 = defaults;\n\t// Split at commas and spaces\n\tvar TAG_SEPARATOR = /,|\\s+/;\n\t// Checks for non-blank characters\n\tvar NOT_BLANK = /\\S/;\n\tvar Client = /** @class */ (function () {\n\t    function Client(opts, transport) {\n\t        if (opts === void 0) { opts = {}; }\n\t        this.__pluginsLoaded = false;\n\t        this.__store = null;\n\t        this.__beforeNotifyHandlers = [];\n\t        this.__afterNotifyHandlers = [];\n\t        this.__notifier = {\n\t            name: '@honeybadger-io/core',\n\t            url: 'https://github.com/honeybadger-io/honeybadger-js/tree/master/packages/core',\n\t            version: '6.11.0'\n\t        };\n\t        this.config = __assign$1(__assign$1({}, defaults_1.CONFIG), opts);\n\t        this.__initStore();\n\t        this.__transport = transport;\n\t        this.__eventsLogger = new throttled_events_logger_1.ThrottledEventsLogger(this.config, this.__transport);\n\t        this.logger = (0, util_1$1.logger)(this);\n\t    }\n\t    Client.prototype.getVersion = function () {\n\t        return this.__notifier.version;\n\t    };\n\t    Client.prototype.getNotifier = function () {\n\t        return this.__notifier;\n\t    };\n\t    /**\n\t     * CAREFUL: When adding a new notifier or updating the name of an existing notifier,\n\t     * the Honeybadger rails project may need its mappings updated.\n\t     * See https://github.com/honeybadger-io/honeybadger/blob/master/app/presenters/breadcrumbs_presenter.rb\n\t     *     https://github.com/honeybadger-io/honeybadger/blob/master/app/models/parser/java_script.rb\n\t     *     https://github.com/honeybadger-io/honeybadger/blob/master/app/models/language.rb\n\t     **/\n\t    Client.prototype.setNotifier = function (notifier) {\n\t        this.__notifier = notifier;\n\t    };\n\t    Client.prototype.configure = function (opts) {\n\t        if (opts === void 0) { opts = {}; }\n\t        for (var k in opts) {\n\t            this.config[k] = opts[k];\n\t        }\n\t        this.__eventsLogger.configure(this.config);\n\t        this.loadPlugins();\n\t        return this;\n\t    };\n\t    Client.prototype.loadPlugins = function () {\n\t        var _this = this;\n\t        var pluginsToLoad = this.__pluginsLoaded\n\t            ? this.config.__plugins.filter(function (plugin) { return plugin.shouldReloadOnConfigure; })\n\t            : this.config.__plugins;\n\t        pluginsToLoad.forEach(function (plugin) { return plugin.load(_this); });\n\t        this.__pluginsLoaded = true;\n\t    };\n\t    Client.prototype.__initStore = function () {\n\t        this.__store = new store_1.GlobalStore({ context: {}, breadcrumbs: [] }, this.config.maxBreadcrumbs);\n\t    };\n\t    Client.prototype.beforeNotify = function (handler) {\n\t        this.__beforeNotifyHandlers.push(handler);\n\t        return this;\n\t    };\n\t    Client.prototype.afterNotify = function (handler) {\n\t        this.__afterNotifyHandlers.push(handler);\n\t        return this;\n\t    };\n\t    Client.prototype.setContext = function (context) {\n\t        if (typeof context === 'object' && context != null) {\n\t            this.__store.setContext(context);\n\t        }\n\t        return this;\n\t    };\n\t    Client.prototype.resetContext = function (context) {\n\t        this.logger.warn('Deprecation warning: `Honeybadger.resetContext()` has been deprecated; please use `Honeybadger.clear()` instead.');\n\t        this.__store.clear();\n\t        if (typeof context === 'object' && context !== null) {\n\t            this.__store.setContext(context);\n\t        }\n\t        return this;\n\t    };\n\t    Client.prototype.clear = function () {\n\t        this.__store.clear();\n\t        return this;\n\t    };\n\t    Client.prototype.notify = function (noticeable, name, extra) {\n\t        var _this = this;\n\t        if (name === void 0) { name = undefined; }\n\t        if (extra === void 0) { extra = undefined; }\n\t        var notice = this.makeNotice(noticeable, name, extra);\n\t        // we need to have the source file data before the beforeNotifyHandlers,\n\t        // in case they modify them\n\t        var sourceCodeData = notice && notice.backtrace ? notice.backtrace.map(function (trace) { return (0, util_1$1.shallowClone)(trace); }) : null;\n\t        var preConditionsResult = this.__runPreconditions(notice);\n\t        if (preConditionsResult instanceof Error) {\n\t            (0, util_1$1.runAfterNotifyHandlers)(notice, this.__afterNotifyHandlers, preConditionsResult);\n\t            return false;\n\t        }\n\t        if (preConditionsResult instanceof Promise) {\n\t            preConditionsResult.then(function (result) {\n\t                if (result instanceof Error) {\n\t                    (0, util_1$1.runAfterNotifyHandlers)(notice, _this.__afterNotifyHandlers, result);\n\t                    return false;\n\t                }\n\t                return _this.__send(notice, sourceCodeData);\n\t            });\n\t            return true;\n\t        }\n\t        this.__send(notice, sourceCodeData).catch(function (_err) { });\n\t        return true;\n\t    };\n\t    /**\n\t     * An async version of {@link notify} that resolves only after the notice has been reported to Honeybadger.\n\t     * Implemented using the {@link afterNotify} hook.\n\t     * Rejects if for any reason the report failed to be reported.\n\t     * Useful in serverless environments (AWS Lambda).\n\t     */\n\t    Client.prototype.notifyAsync = function (noticeable, name, extra) {\n\t        var _this = this;\n\t        if (name === void 0) { name = undefined; }\n\t        if (extra === void 0) { extra = undefined; }\n\t        return new Promise(function (resolve, reject) {\n\t            var applyAfterNotify = function (partialNotice) {\n\t                var originalAfterNotify = partialNotice.afterNotify;\n\t                partialNotice.afterNotify = function (err) {\n\t                    originalAfterNotify === null || originalAfterNotify === void 0 ? void 0 : originalAfterNotify.call(_this, err);\n\t                    if (err) {\n\t                        return reject(err);\n\t                    }\n\t                    resolve();\n\t                };\n\t            };\n\t            // We have to respect any afterNotify hooks that come from the arguments\n\t            var objectToOverride;\n\t            if (noticeable.afterNotify) {\n\t                objectToOverride = noticeable;\n\t            }\n\t            else if (name && name.afterNotify) {\n\t                objectToOverride = name;\n\t            }\n\t            else if (extra && extra.afterNotify) {\n\t                objectToOverride = extra;\n\t            }\n\t            else if (name && typeof name === 'object') {\n\t                objectToOverride = name;\n\t            }\n\t            else if (extra) {\n\t                objectToOverride = extra;\n\t            }\n\t            else {\n\t                objectToOverride = name = {};\n\t            }\n\t            applyAfterNotify(objectToOverride);\n\t            _this.notify(noticeable, name, extra);\n\t        });\n\t    };\n\t    Client.prototype.makeNotice = function (noticeable, name, extra) {\n\t        if (name === void 0) { name = undefined; }\n\t        if (extra === void 0) { extra = undefined; }\n\t        var notice = (0, util_1$1.makeNotice)(noticeable);\n\t        if (name && !(typeof name === 'object')) {\n\t            var n = String(name);\n\t            name = { name: n };\n\t        }\n\t        if (name) {\n\t            notice = (0, util_1$1.mergeNotice)(notice, name);\n\t        }\n\t        if (typeof extra === 'object' && extra !== null) {\n\t            notice = (0, util_1$1.mergeNotice)(notice, extra);\n\t        }\n\t        if ((0, util_1$1.objectIsEmpty)(notice)) {\n\t            return null;\n\t        }\n\t        var context = this.__store.getContents('context');\n\t        var noticeTags = this.__constructTags(notice.tags);\n\t        var contextTags = this.__constructTags(context['tags']);\n\t        var configTags = this.__constructTags(this.config.tags);\n\t        // Turning into a Set will remove duplicates\n\t        var tags = noticeTags.concat(contextTags).concat(configTags);\n\t        var uniqueTags = tags.filter(function (item, index) { return tags.indexOf(item) === index; });\n\t        notice = (0, util_1$1.merge)(notice, {\n\t            name: notice.name || 'Error',\n\t            context: (0, util_1$1.merge)(context, notice.context),\n\t            projectRoot: notice.projectRoot || this.config.projectRoot,\n\t            environment: notice.environment || this.config.environment,\n\t            component: notice.component || this.config.component,\n\t            action: notice.action || this.config.action,\n\t            revision: notice.revision || this.config.revision,\n\t            tags: uniqueTags,\n\t        });\n\t        // If we're passed a custom backtrace array, use it\n\t        // Otherwise we make one.\n\t        if (!Array.isArray(notice.backtrace) || !notice.backtrace.length) {\n\t            if (typeof notice.stack !== 'string' || !notice.stack.trim()) {\n\t                notice.stack = (0, util_1$1.generateStackTrace)();\n\t                notice.backtrace = (0, util_1$1.makeBacktrace)(notice.stack, true, this.logger);\n\t            }\n\t            else {\n\t                notice.backtrace = (0, util_1$1.makeBacktrace)(notice.stack, false, this.logger);\n\t            }\n\t        }\n\t        return notice;\n\t    };\n\t    Client.prototype.addBreadcrumb = function (message, opts) {\n\t        if (!this.config.breadcrumbsEnabled) {\n\t            return;\n\t        }\n\t        opts = opts || {};\n\t        var metadata = (0, util_1$1.shallowClone)(opts.metadata);\n\t        var category = opts.category || 'custom';\n\t        var timestamp = new Date().toISOString();\n\t        this.__store.addBreadcrumb({\n\t            category: category,\n\t            message: message,\n\t            metadata: metadata,\n\t            timestamp: timestamp\n\t        });\n\t        return this;\n\t    };\n\t    /**\n\t     * @deprecated Use {@link event} instead.\n\t     */\n\t    Client.prototype.logEvent = function (data) {\n\t        (0, util_1$1.logDeprecatedMethod)(this.logger, 'Honeybadger.logEvent', 'Honeybadger.event');\n\t        this.event('log', data);\n\t    };\n\t    Client.prototype.event = function (type, data) {\n\t        var _a;\n\t        if (typeof type === 'object') {\n\t            data = type;\n\t            type = (_a = type['event_type']) !== null && _a !== void 0 ? _a : undefined;\n\t        }\n\t        this.__eventsLogger.log(__assign$1({ event_type: type, ts: new Date().toISOString() }, data));\n\t    };\n\t    /**\n\t     * This method currently flushes the event (Insights) queue.\n\t     * In the future, it should also flush the error queue (assuming an error throttler is implemented).\n\t     */\n\t    Client.prototype.flushAsync = function () {\n\t        return this.__eventsLogger.flushAsync();\n\t    };\n\t    Client.prototype.__getBreadcrumbs = function () {\n\t        return this.__store.getContents('breadcrumbs').slice();\n\t    };\n\t    Client.prototype.__getContext = function () {\n\t        return this.__store.getContents('context');\n\t    };\n\t    Client.prototype.__developmentMode = function () {\n\t        if (this.config.reportData === true) {\n\t            return false;\n\t        }\n\t        return (this.config.environment && this.config.developmentEnvironments.includes(this.config.environment));\n\t    };\n\t    Client.prototype.__buildPayload = function (notice) {\n\t        var headers = (0, util_1$1.filter)(notice.headers, this.config.filters) || {};\n\t        var cgiData = (0, util_1$1.filter)(__assign$1(__assign$1({}, notice.cgiData), (0, util_1$1.formatCGIData)(headers, 'HTTP_')), this.config.filters);\n\t        return {\n\t            notifier: this.__notifier,\n\t            breadcrumbs: {\n\t                enabled: !!this.config.breadcrumbsEnabled,\n\t                trail: notice.__breadcrumbs || []\n\t            },\n\t            error: {\n\t                class: notice.name,\n\t                message: notice.message,\n\t                backtrace: notice.backtrace,\n\t                fingerprint: notice.fingerprint,\n\t                tags: notice.tags,\n\t                causes: (0, util_1$1.getCauses)(notice, this.logger),\n\t            },\n\t            request: {\n\t                url: (0, util_1$1.filterUrl)(notice.url, this.config.filters),\n\t                component: notice.component,\n\t                action: notice.action,\n\t                context: notice.context,\n\t                cgi_data: cgiData,\n\t                params: (0, util_1$1.filter)(notice.params, this.config.filters) || {},\n\t                session: (0, util_1$1.filter)(notice.session, this.config.filters) || {}\n\t            },\n\t            server: {\n\t                project_root: notice.projectRoot,\n\t                environment_name: notice.environment,\n\t                revision: notice.revision,\n\t                hostname: this.config.hostname,\n\t                time: new Date().toUTCString()\n\t            },\n\t            details: notice.details || {}\n\t        };\n\t    };\n\t    Client.prototype.__constructTags = function (tags) {\n\t        if (!tags) {\n\t            return [];\n\t        }\n\t        return tags.toString().split(TAG_SEPARATOR).filter(function (tag) { return NOT_BLANK.test(tag); });\n\t    };\n\t    Client.prototype.__runPreconditions = function (notice) {\n\t        var _this = this;\n\t        var preConditionError = null;\n\t        if (!notice) {\n\t            this.logger.debug('failed to build error report');\n\t            preConditionError = new Error('failed to build error report');\n\t        }\n\t        if (this.config.reportData === false) {\n\t            this.logger.debug('skipping error report: honeybadger.js is disabled', notice);\n\t            preConditionError = new Error('honeybadger.js is disabled');\n\t        }\n\t        if (this.__developmentMode()) {\n\t            this.logger.log('honeybadger.js is in development mode; the following error report will be sent in production.', notice);\n\t            preConditionError = new Error('honeybadger.js is in development mode');\n\t        }\n\t        if (!this.config.apiKey) {\n\t            this.logger.warn('could not send error report: no API key has been configured', notice);\n\t            preConditionError = new Error('missing API key');\n\t        }\n\t        var beforeNotifyResult = (0, util_1$1.runBeforeNotifyHandlers)(notice, this.__beforeNotifyHandlers);\n\t        if (!preConditionError && !beforeNotifyResult.result) {\n\t            this.logger.debug('skipping error report: one or more beforeNotify handlers returned false', notice);\n\t            preConditionError = new Error('beforeNotify handlers returned false');\n\t        }\n\t        if (beforeNotifyResult.results.length && beforeNotifyResult.results.some(function (result) { return result instanceof Promise; })) {\n\t            return Promise.allSettled(beforeNotifyResult.results)\n\t                .then(function (results) {\n\t                if (!preConditionError && (results.some(function (result) { return result.status === 'rejected' || result.value === false; }))) {\n\t                    _this.logger.debug('skipping error report: one or more beforeNotify handlers returned false', notice);\n\t                    preConditionError = new Error('beforeNotify handlers (async) returned false');\n\t                }\n\t                if (preConditionError) {\n\t                    return preConditionError;\n\t                }\n\t            });\n\t        }\n\t        return preConditionError;\n\t    };\n\t    Client.prototype.__send = function (notice, originalBacktrace) {\n\t        var _this = this;\n\t        if (this.config.breadcrumbsEnabled) {\n\t            this.addBreadcrumb('Honeybadger Notice', {\n\t                category: 'notice',\n\t                metadata: {\n\t                    message: notice.message,\n\t                    name: notice.name,\n\t                    stack: notice.stack\n\t                }\n\t            });\n\t            notice.__breadcrumbs = this.__store.getContents('breadcrumbs');\n\t        }\n\t        else {\n\t            notice.__breadcrumbs = [];\n\t        }\n\t        return (0, util_1$1.getSourceForBacktrace)(originalBacktrace, this.__getSourceFileHandler)\n\t            .then(function (sourcePerTrace) { return __awaiter$1(_this, void 0, void 0, function () {\n\t            var payload;\n\t            return __generator$1(this, function (_a) {\n\t                sourcePerTrace.forEach(function (source, index) {\n\t                    notice.backtrace[index].source = source;\n\t                });\n\t                payload = this.__buildPayload(notice);\n\t                return [2 /*return*/, this.__transport\n\t                        .send({\n\t                        headers: {\n\t                            'X-API-Key': this.config.apiKey,\n\t                            'Content-Type': 'application/json',\n\t                            'Accept': 'text/json, application/json'\n\t                        },\n\t                        method: 'POST',\n\t                        endpoint: (0, util_1$1.endpoint)(this.config.endpoint, '/v1/notices/js'),\n\t                        maxObjectDepth: this.config.maxObjectDepth,\n\t                        logger: this.logger,\n\t                    }, payload)];\n\t            });\n\t        }); })\n\t            .then(function (res) {\n\t            if (res.statusCode !== 201) {\n\t                (0, util_1$1.runAfterNotifyHandlers)(notice, _this.__afterNotifyHandlers, new Error(\"Bad HTTP response: \".concat(res.statusCode)));\n\t                _this.logger.warn(\"Error report failed: unknown response from server. code=\".concat(res.statusCode));\n\t                return false;\n\t            }\n\t            var uuid = JSON.parse(res.body).id;\n\t            (0, util_1$1.runAfterNotifyHandlers)((0, util_1$1.merge)(notice, {\n\t                id: uuid\n\t            }), _this.__afterNotifyHandlers);\n\t            _this.logger.info(\"Error report sent \\u26A1 https://app.honeybadger.io/notice/\".concat(uuid));\n\t            return true;\n\t        })\n\t            .catch(function (err) {\n\t            _this.logger.error('Error report failed: an unknown error occurred.', \"message=\".concat(err.message));\n\t            (0, util_1$1.runAfterNotifyHandlers)(notice, _this.__afterNotifyHandlers, err);\n\t            return false;\n\t        });\n\t    };\n\t    return Client;\n\t}());\n\tclient.Client = Client;\n\n\tvar types = {};\n\n\tObject.defineProperty(types, \"__esModule\", { value: true });\n\n\t(function (exports) {\n\t\tvar __createBinding = (commonjsGlobal && commonjsGlobal.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n\t\t    if (k2 === undefined) k2 = k;\n\t\t    var desc = Object.getOwnPropertyDescriptor(m, k);\n\t\t    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n\t\t      desc = { enumerable: true, get: function() { return m[k]; } };\n\t\t    }\n\t\t    Object.defineProperty(o, k2, desc);\n\t\t}) : (function(o, m, k, k2) {\n\t\t    if (k2 === undefined) k2 = k;\n\t\t    o[k2] = m[k];\n\t\t}));\n\t\tvar __setModuleDefault = (commonjsGlobal && commonjsGlobal.__setModuleDefault) || (Object.create ? (function(o, v) {\n\t\t    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n\t\t}) : function(o, v) {\n\t\t    o[\"default\"] = v;\n\t\t});\n\t\tvar __exportStar = (commonjsGlobal && commonjsGlobal.__exportStar) || function(m, exports) {\n\t\t    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n\t\t};\n\t\tvar __importStar = (commonjsGlobal && commonjsGlobal.__importStar) || function (mod) {\n\t\t    if (mod && mod.__esModule) return mod;\n\t\t    var result = {};\n\t\t    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n\t\t    __setModuleDefault(result, mod);\n\t\t    return result;\n\t\t};\n\t\tvar __importDefault = (commonjsGlobal && commonjsGlobal.__importDefault) || function (mod) {\n\t\t    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n\t\t};\n\t\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\t\texports.Plugins = exports.Util = exports.Types = exports.Client = void 0;\n\t\tvar events_1 = __importDefault(events);\n\t\tvar client_1 = client;\n\t\tObject.defineProperty(exports, \"Client\", { enumerable: true, get: function () { return client_1.Client; } });\n\t\t__exportStar(store, exports);\n\t\texports.Types = __importStar(types);\n\t\texports.Util = __importStar(util$1);\n\t\texports.Plugins = {\n\t\t    events: events_1.default\n\t\t};\n\t\t\n\t} (src));\n\n\tvar util = {};\n\n\tObject.defineProperty(util, \"__esModule\", { value: true });\n\tutil.preferCatch = util.encodeCookie = util.decodeCookie = util.localURLPathname = util.parseURL = util.nativeFetch = util.stringTextOfElement = util.stringSelectorOfElement = util.stringNameOfElement = void 0;\n\tvar core_1$7 = src;\n\tvar globalThisOrWindow$7 = core_1$7.Util.globalThisOrWindow;\n\t/**\n\t * Converts an HTMLElement into a human-readable string.\n\t * @param {!HTMLElement} element\n\t * @return {string}\n\t */\n\tfunction stringNameOfElement(element) {\n\t    if (!element || !element.tagName) {\n\t        return '';\n\t    }\n\t    var name = element.tagName.toLowerCase();\n\t    // Ignore the root <html> element in selectors and events.\n\t    if (name === 'html') {\n\t        return '';\n\t    }\n\t    if (element.id) {\n\t        name += \"#\".concat(element.id);\n\t    }\n\t    var stringClassNames = element.getAttribute('class');\n\t    if (stringClassNames) {\n\t        stringClassNames.split(/\\s+/).forEach(function (className) {\n\t            name += \".\".concat(className);\n\t        });\n\t    }\n\t    ['alt', 'name', 'title', 'type'].forEach(function (attrName) {\n\t        var attr = element.getAttribute(attrName);\n\t        if (attr) {\n\t            name += \"[\".concat(attrName, \"=\\\"\").concat(attr, \"\\\"]\");\n\t        }\n\t    });\n\t    var siblings = getSiblings(element);\n\t    if (siblings.length > 1) {\n\t        name += \":nth-child(\".concat(Array.prototype.indexOf.call(siblings, element) + 1, \")\");\n\t    }\n\t    return name;\n\t}\n\tutil.stringNameOfElement = stringNameOfElement;\n\tfunction stringSelectorOfElement(element) {\n\t    var name = stringNameOfElement(element);\n\t    if (element.parentNode && element.parentNode.tagName) {\n\t        var parentName = stringSelectorOfElement(element.parentNode);\n\t        if (parentName.length > 0) {\n\t            return \"\".concat(parentName, \" > \").concat(name);\n\t        }\n\t    }\n\t    return name;\n\t}\n\tutil.stringSelectorOfElement = stringSelectorOfElement;\n\tfunction stringTextOfElement(element) {\n\t    var text = element.textContent || element.innerText || '';\n\t    if (!text && (element.type === 'submit' || element.type === 'button')) {\n\t        text = element.value;\n\t    }\n\t    return truncate(text.trim(), 300);\n\t}\n\tutil.stringTextOfElement = stringTextOfElement;\n\tfunction nativeFetch() {\n\t    var global = globalThisOrWindow$7();\n\t    if (!global.fetch) {\n\t        return false;\n\t    }\n\t    if (isNative(global.fetch)) {\n\t        return true;\n\t    }\n\t    if (typeof document === 'undefined') {\n\t        return false;\n\t    }\n\t    // If fetch isn't native, it may be wrapped by someone else. Try to get\n\t    // a pristine function from an iframe.\n\t    try {\n\t        var sandbox = document.createElement('iframe');\n\t        sandbox.style.display = 'none';\n\t        document.head.appendChild(sandbox);\n\t        var result = sandbox.contentWindow.fetch && isNative(sandbox.contentWindow.fetch);\n\t        document.head.removeChild(sandbox);\n\t        return result;\n\t    }\n\t    catch (err) {\n\t        if (console && console.warn) {\n\t            console.warn('failed to detect native fetch via iframe: ' + err);\n\t        }\n\t    }\n\t    return false;\n\t}\n\tutil.nativeFetch = nativeFetch;\n\tfunction isNative(func) {\n\t    return func.toString().indexOf('native') !== -1;\n\t}\n\tfunction parseURL(url) {\n\t    // Regexp: https://tools.ietf.org/html/rfc3986#appendix-B\n\t    var match = url.match(/^(([^:/?#]+):)?(\\/\\/([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/) || {};\n\t    return {\n\t        protocol: match[2],\n\t        host: match[4],\n\t        pathname: match[5]\n\t    };\n\t}\n\tutil.parseURL = parseURL;\n\tfunction localURLPathname(url) {\n\t    var parsed = parseURL(url);\n\t    var parsedDocURL = parseURL(document.URL);\n\t    // URL must be relative\n\t    if (!parsed.host || !parsed.protocol) {\n\t        return parsed.pathname;\n\t    }\n\t    // Same domain\n\t    if (parsed.protocol === parsedDocURL.protocol && parsed.host === parsedDocURL.host) {\n\t        return parsed.pathname;\n\t    }\n\t    // x-domain\n\t    return \"\".concat(parsed.protocol, \"://\").concat(parsed.host).concat(parsed.pathname);\n\t}\n\tutil.localURLPathname = localURLPathname;\n\tfunction decodeCookie(string) {\n\t    var result = {};\n\t    string.split(/[;,]\\s?/).forEach(function (pair) {\n\t        var _a = pair.split('=', 2), key = _a[0], value = _a[1];\n\t        result[key] = value;\n\t    });\n\t    return result;\n\t}\n\tutil.decodeCookie = decodeCookie;\n\tfunction encodeCookie(object) {\n\t    if (typeof object !== 'object') {\n\t        return undefined;\n\t    }\n\t    var cookies = [];\n\t    for (var k in object) {\n\t        cookies.push(k + '=' + object[k]);\n\t    }\n\t    return cookies.join(';');\n\t}\n\tutil.encodeCookie = encodeCookie;\n\t// Helpers\n\tfunction getSiblings(element) {\n\t    try {\n\t        var nodes = element.parentNode.childNodes;\n\t        var siblings_1 = [];\n\t        Array.prototype.forEach.call(nodes, function (node) {\n\t            if (node.tagName && node.tagName === element.tagName) {\n\t                siblings_1.push(node);\n\t            }\n\t        });\n\t        return siblings_1;\n\t    }\n\t    catch (e) {\n\t        return [];\n\t    }\n\t}\n\tfunction truncate(string, length) {\n\t    if (string.length > length) {\n\t        string = string.substr(0, length) + '...';\n\t    }\n\t    return string;\n\t}\n\t// Used to decide which error handling method to use when wrapping async\n\t// handlers: try/catch, or `window.onerror`. When available, `window.onerror`\n\t// will provide more information in modern browsers.\n\tutil.preferCatch = (function () {\n\t    var preferCatch = true;\n\t    // In case we're in an environment without access to \"window\", lets make sure theres a window.\n\t    if (typeof window === 'undefined')\n\t        return preferCatch;\n\t    // IE < 10\n\t    if (!window.atob) {\n\t        preferCatch = false;\n\t    }\n\t    // Modern browsers support the full ErrorEvent API\n\t    // See https://developer.mozilla.org/en-US/docs/Web/API/ErrorEvent\n\t    if (window.ErrorEvent) {\n\t        try {\n\t            if ((new window.ErrorEvent('')).colno === 0) {\n\t                preferCatch = false;\n\t            }\n\t            // eslint-disable-next-line no-empty\n\t        }\n\t        catch (_e) { }\n\t    }\n\t    return preferCatch;\n\t})();\n\n\tvar onerror = {};\n\n\tObject.defineProperty(onerror, \"__esModule\", { value: true });\n\tonerror.onError = onerror.ignoreNextOnError = void 0;\n\t/* eslint-disable prefer-rest-params */\n\tvar core_1$6 = src;\n\tvar instrument$4 = core_1$6.Util.instrument, makeNotice = core_1$6.Util.makeNotice, globalThisOrWindow$6 = core_1$6.Util.globalThisOrWindow;\n\tvar ignoreOnError = 0;\n\tvar currentTimeout;\n\tfunction ignoreNextOnError() {\n\t    ignoreOnError += 1;\n\t    clearTimeout(currentTimeout);\n\t    currentTimeout = setTimeout(function () {\n\t        ignoreOnError = 0;\n\t    });\n\t}\n\tonerror.ignoreNextOnError = ignoreNextOnError;\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tfunction onError(_window) {\n\t    if (_window === void 0) { _window = globalThisOrWindow$6(); }\n\t    return {\n\t        load: function (client) {\n\t            instrument$4(_window, 'onerror', function (original) {\n\t                var onerror = function (msg, url, line, col, err) {\n\t                    client.logger.debug('window.onerror callback invoked', arguments);\n\t                    if (ignoreOnError > 0) {\n\t                        client.logger.debug('Ignoring window.onerror (error likely reported earlier)', arguments);\n\t                        ignoreOnError -= 1;\n\t                        return;\n\t                    }\n\t                    // See https://developer.mozilla.org/en/docs/Web/API/GlobalEventHandlers/onerror#Notes\n\t                    if (line === 0 && /Script error\\.?/.test(msg)) {\n\t                        if (client.config.enableUncaught) {\n\t                            // Log only if the user wants to report uncaught errors\n\t                            client.logger.warn('Ignoring cross-domain script error: enable CORS to track these types of errors', arguments);\n\t                        }\n\t                        return;\n\t                    }\n\t                    var notice = makeNotice(err);\n\t                    if (!notice.name) {\n\t                        notice.name = 'window.onerror';\n\t                    }\n\t                    if (!notice.message) {\n\t                        notice.message = msg;\n\t                    }\n\t                    if (!notice.stack) {\n\t                        // Simulate v8 stack\n\t                        notice.stack = [notice.message, '\\n    at ? (', url || 'unknown', ':', line || 0, ':', col || 0, ')'].join('');\n\t                    }\n\t                    client.addBreadcrumb((notice.name === 'window.onerror' || !notice.name) ? 'window.onerror' : \"window.onerror: \".concat(notice.name), {\n\t                        category: 'error',\n\t                        metadata: {\n\t                            name: notice.name,\n\t                            message: notice.message,\n\t                            stack: notice.stack\n\t                        }\n\t                    });\n\t                    if (client.config.enableUncaught) {\n\t                        client.notify(notice);\n\t                    }\n\t                };\n\t                return function (msg, url, line, col, err) {\n\t                    onerror(msg, url, line, col, err);\n\t                    if (typeof original === 'function') {\n\t                        return original.apply(_window, arguments);\n\t                    }\n\t                    return false;\n\t                };\n\t            });\n\t        }\n\t    };\n\t}\n\tonerror.onError = onError;\n\n\tvar onunhandledrejection = {};\n\n\tObject.defineProperty(onunhandledrejection, \"__esModule\", { value: true });\n\t/* eslint-disable prefer-rest-params */\n\tvar core_1$5 = src;\n\tvar instrument$3 = core_1$5.Util.instrument, globalThisOrWindow$5 = core_1$5.Util.globalThisOrWindow;\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tfunction default_1$3(_window) {\n\t    if (_window === void 0) { _window = globalThisOrWindow$5(); }\n\t    return {\n\t        load: function (client) {\n\t            if (!client.config.enableUnhandledRejection) {\n\t                return;\n\t            }\n\t            instrument$3(_window, 'onunhandledrejection', function (original) {\n\t                // See https://developer.mozilla.org/en-US/docs/Web/API/Window/unhandledrejection_event\n\t                function onunhandledrejection(promiseRejectionEvent) {\n\t                    var _a;\n\t                    client.logger.debug('window.onunhandledrejection callback invoked', arguments);\n\t                    if (!client.config.enableUnhandledRejection) {\n\t                        return;\n\t                    }\n\t                    var reason = promiseRejectionEvent.reason;\n\t                    if (reason instanceof Error) {\n\t                        // simulate v8 stack\n\t                        // const fileName = reason.fileName || 'unknown'\n\t                        // const lineNumber = reason.lineNumber || 0\n\t                        var fileName = 'unknown';\n\t                        var lineNumber = 0;\n\t                        var stackFallback = \"\".concat(reason.message, \"\\n    at ? (\").concat(fileName, \":\").concat(lineNumber, \")\");\n\t                        var stack = reason.stack || stackFallback;\n\t                        var err = {\n\t                            name: reason.name,\n\t                            message: \"UnhandledPromiseRejectionWarning: \".concat(reason),\n\t                            stack: stack\n\t                        };\n\t                        client.addBreadcrumb(\"window.onunhandledrejection: \".concat(err.name), {\n\t                            category: 'error',\n\t                            metadata: err\n\t                        });\n\t                        client.notify(err);\n\t                        return;\n\t                    }\n\t                    var message = typeof reason === 'string' ? reason : ((_a = JSON.stringify(reason)) !== null && _a !== void 0 ? _a : 'Unspecified reason');\n\t                    client.notify({\n\t                        name: 'window.onunhandledrejection',\n\t                        message: \"UnhandledPromiseRejectionWarning: \".concat(message)\n\t                    });\n\t                }\n\t                return function (promiseRejectionEvent) {\n\t                    onunhandledrejection(promiseRejectionEvent);\n\t                    if (typeof original === 'function') {\n\t                        original.apply(this, arguments);\n\t                    }\n\t                };\n\t            });\n\t        }\n\t    };\n\t}\n\tonunhandledrejection.default = default_1$3;\n\n\tvar breadcrumbs = {};\n\n\tObject.defineProperty(breadcrumbs, \"__esModule\", { value: true });\n\t/* eslint-disable prefer-rest-params */\n\tvar core_1$4 = src;\n\tvar util_1 = util;\n\tvar sanitize$1 = core_1$4.Util.sanitize, instrument$2 = core_1$4.Util.instrument, instrumentConsole = core_1$4.Util.instrumentConsole, globalThisOrWindow$4 = core_1$4.Util.globalThisOrWindow;\n\tfunction default_1$2(_window) {\n\t    if (_window === void 0) { _window = globalThisOrWindow$4(); }\n\t    return {\n\t        load: function (client) {\n\t            function breadcrumbsEnabled(type) {\n\t                if (client.config.breadcrumbsEnabled === true) {\n\t                    return true;\n\t                }\n\t                if (type) {\n\t                    return client.config.breadcrumbsEnabled[type] === true;\n\t                }\n\t                return client.config.breadcrumbsEnabled !== false;\n\t            }\n\t            // Breadcrumbs: instrument console\n\t            (function () {\n\t                if (!breadcrumbsEnabled('console')) {\n\t                    return;\n\t                }\n\t                function inspectArray(obj) {\n\t                    if (!Array.isArray(obj)) {\n\t                        return '';\n\t                    }\n\t                    return obj.map(function (value) {\n\t                        try {\n\t                            return String(value);\n\t                        }\n\t                        catch (e) {\n\t                            return '[unknown]';\n\t                        }\n\t                    }).join(' ');\n\t                }\n\t                instrumentConsole(_window, function (level, args) {\n\t                    var message = inspectArray(args);\n\t                    var opts = {\n\t                        category: 'log',\n\t                        metadata: {\n\t                            level: level,\n\t                            arguments: sanitize$1(args, 3)\n\t                        }\n\t                    };\n\t                    client.addBreadcrumb(message, opts);\n\t                });\n\t            })();\n\t            // Breadcrumbs: instrument click events\n\t            (function () {\n\t                if (!breadcrumbsEnabled('dom')) {\n\t                    return;\n\t                }\n\t                if (typeof _window.addEventListener !== 'function') {\n\t                    return;\n\t                }\n\t                _window.addEventListener('click', function (event) {\n\t                    var message, selector, text;\n\t                    try {\n\t                        message = (0, util_1.stringNameOfElement)(event.target);\n\t                        selector = (0, util_1.stringSelectorOfElement)(event.target);\n\t                        text = (0, util_1.stringTextOfElement)(event.target);\n\t                    }\n\t                    catch (e) {\n\t                        message = 'UI Click';\n\t                        selector = '[unknown]';\n\t                        text = '[unknown]';\n\t                    }\n\t                    // There's nothing to display\n\t                    if (message.length === 0) {\n\t                        return;\n\t                    }\n\t                    client.addBreadcrumb(message, {\n\t                        category: 'ui.click',\n\t                        metadata: {\n\t                            selector: selector,\n\t                            text: text,\n\t                            event: event\n\t                        }\n\t                    });\n\t                }, _window.location ? true : false); // In CloudFlare workers useCapture must be false. window.location is a hacky way to detect it.\n\t            })();\n\t            // Breadcrumbs: instrument XMLHttpRequest\n\t            (function () {\n\t                if (!breadcrumbsEnabled('network')) {\n\t                    return;\n\t                }\n\t                // Some environments may not support XMLHttpRequest.\n\t                if (typeof XMLHttpRequest === 'undefined') {\n\t                    return;\n\t                }\n\t                // -- On xhr.open: capture initial metadata\n\t                instrument$2(XMLHttpRequest.prototype, 'open', function (original) {\n\t                    return function () {\n\t                        // eslint-disable-next-line @typescript-eslint/no-this-alias\n\t                        var xhr = this;\n\t                        var rawUrl = arguments[1];\n\t                        // in case of url being URL object (which is valid input) we need to stringify it\n\t                        var url = typeof rawUrl === 'string' ? rawUrl : String(rawUrl);\n\t                        var method = typeof arguments[0] === 'string' ? arguments[0].toUpperCase() : arguments[0];\n\t                        var message = \"\".concat(method, \" \").concat((0, util_1.localURLPathname)(url));\n\t                        this.__hb_xhr = {\n\t                            type: 'xhr',\n\t                            method: method,\n\t                            url: url,\n\t                            message: message\n\t                        };\n\t                        if (typeof original === 'function') {\n\t                            original.apply(xhr, arguments);\n\t                        }\n\t                    };\n\t                });\n\t                // -- On xhr.send: set up xhr.onreadystatechange to report breadcrumb\n\t                instrument$2(XMLHttpRequest.prototype, 'send', function (original) {\n\t                    return function () {\n\t                        // eslint-disable-next-line @typescript-eslint/no-this-alias\n\t                        var xhr = this;\n\t                        function onreadystatechangeHandler() {\n\t                            if (xhr.readyState === 4) {\n\t                                var message = void 0;\n\t                                if (xhr.__hb_xhr) {\n\t                                    xhr.__hb_xhr.status_code = xhr.status;\n\t                                    message = xhr.__hb_xhr.message;\n\t                                    delete xhr.__hb_xhr.message;\n\t                                }\n\t                                client.addBreadcrumb(message || 'XMLHttpRequest', {\n\t                                    category: 'request',\n\t                                    metadata: xhr.__hb_xhr\n\t                                });\n\t                            }\n\t                        }\n\t                        if ('onreadystatechange' in xhr && typeof xhr.onreadystatechange === 'function') {\n\t                            instrument$2(xhr, 'onreadystatechange', function (original) {\n\t                                return function () {\n\t                                    onreadystatechangeHandler();\n\t                                    if (typeof original === 'function') {\n\t                                        // eslint-disable-next-line prefer-rest-params\n\t                                        original.apply(this, arguments);\n\t                                    }\n\t                                };\n\t                            });\n\t                        }\n\t                        else {\n\t                            xhr.onreadystatechange = onreadystatechangeHandler;\n\t                        }\n\t                        if (typeof original === 'function') {\n\t                            // eslint-disable-next-line prefer-rest-params\n\t                            original.apply(xhr, arguments);\n\t                        }\n\t                    };\n\t                });\n\t            })();\n\t            // Breadcrumbs: instrument fetch\n\t            (function () {\n\t                if (!breadcrumbsEnabled('network')) {\n\t                    return;\n\t                }\n\t                if (!(0, util_1.nativeFetch)()) {\n\t                    // Polyfills use XHR.\n\t                    return;\n\t                }\n\t                instrument$2(_window, 'fetch', function (original) {\n\t                    return function () {\n\t                        // eslint-disable-next-line prefer-rest-params\n\t                        var input = arguments[0];\n\t                        var method = 'GET';\n\t                        var url;\n\t                        if (typeof input === 'string') {\n\t                            url = input;\n\t                        }\n\t                        else if ('Request' in _window && input instanceof Request) {\n\t                            url = input.url;\n\t                            if (input.method) {\n\t                                method = input.method;\n\t                            }\n\t                        }\n\t                        else {\n\t                            url = String(input);\n\t                        }\n\t                        if (arguments[1] && arguments[1].method) {\n\t                            method = arguments[1].method;\n\t                        }\n\t                        if (typeof method === 'string') {\n\t                            method = method.toUpperCase();\n\t                        }\n\t                        // localURLPathname cant be constructed for CF workers due to reliance on \"document\".\n\t                        var message = \"\".concat(method, \" \").concat(typeof document === 'undefined' ? url : (0, util_1.localURLPathname)(url));\n\t                        var metadata = {\n\t                            type: 'fetch',\n\t                            method: method,\n\t                            url: url\n\t                        };\n\t                        return original\n\t                            .apply(this, arguments)\n\t                            .then(function (response) {\n\t                            metadata['status_code'] = response.status;\n\t                            client.addBreadcrumb(message, {\n\t                                category: 'request',\n\t                                metadata: metadata\n\t                            });\n\t                            return response;\n\t                        })\n\t                            .catch(function (error) {\n\t                            client.addBreadcrumb('fetch error', {\n\t                                category: 'error',\n\t                                metadata: metadata\n\t                            });\n\t                            throw error;\n\t                        });\n\t                    };\n\t                });\n\t            })();\n\t            // Breadcrumbs: instrument navigation\n\t            (function () {\n\t                if (!breadcrumbsEnabled('navigation')) {\n\t                    return;\n\t                }\n\t                if (_window.location == null) {\n\t                    // Most likely in a CF worker, we should be listening to fetch requests instead.\n\t                    return;\n\t                }\n\t                // The last known href of the current page\n\t                var lastHref = _window.location.href;\n\t                function recordUrlChange(from, to) {\n\t                    lastHref = to;\n\t                    client.addBreadcrumb('Page changed', {\n\t                        category: 'navigation',\n\t                        metadata: {\n\t                            from: from,\n\t                            to: to\n\t                        }\n\t                    });\n\t                }\n\t                if (typeof addEventListener === 'function') {\n\t                    addEventListener('popstate', function (_event) {\n\t                        recordUrlChange(lastHref, _window.location.href);\n\t                    });\n\t                }\n\t                if (typeof _window.history === 'undefined') {\n\t                    return;\n\t                }\n\t                // https://developer.mozilla.org/en-US/docs/Web/API/History/pushState\n\t                // https://developer.mozilla.org/en-US/docs/Web/API/History/replaceState\n\t                function historyWrapper(original) {\n\t                    return function () {\n\t                        var url = arguments.length > 2 ? arguments[2] : undefined;\n\t                        if (url) {\n\t                            recordUrlChange(lastHref, String(url));\n\t                        }\n\t                        return original.apply(this, arguments);\n\t                    };\n\t                }\n\t                instrument$2(_window.history, 'pushState', historyWrapper);\n\t                instrument$2(_window.history, 'replaceState', historyWrapper);\n\t            })();\n\t        }\n\t    };\n\t}\n\tbreadcrumbs.default = default_1$2;\n\n\tvar timers = {};\n\n\tObject.defineProperty(timers, \"__esModule\", { value: true });\n\t/* eslint-disable prefer-rest-params */\n\tvar core_1$3 = src;\n\tvar instrument$1 = core_1$3.Util.instrument, globalThisOrWindow$3 = core_1$3.Util.globalThisOrWindow;\n\tfunction default_1$1(_window) {\n\t    if (_window === void 0) { _window = globalThisOrWindow$3(); }\n\t    return {\n\t        load: function (client) {\n\t            // Wrap timers\n\t            (function () {\n\t                function instrumentTimer(wrapOpts) {\n\t                    return function (original) {\n\t                        // See https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setTimeout\n\t                        return function (func, delay) {\n\t                            if (typeof func === 'function') {\n\t                                var args_1 = Array.prototype.slice.call(arguments, 2);\n\t                                func = client.__wrap(func, wrapOpts);\n\t                                return original(function () {\n\t                                    func.apply(void 0, args_1);\n\t                                }, delay);\n\t                            }\n\t                            else {\n\t                                return original(func, delay);\n\t                            }\n\t                        };\n\t                    };\n\t                }\n\t                instrument$1(_window, 'setTimeout', instrumentTimer({ component: 'setTimeout' }));\n\t                instrument$1(_window, 'setInterval', instrumentTimer({ component: 'setInterval' }));\n\t            })();\n\t        }\n\t    };\n\t}\n\ttimers.default = default_1$1;\n\n\tvar event_listeners = {};\n\n\tObject.defineProperty(event_listeners, \"__esModule\", { value: true });\n\tvar core_1$2 = src;\n\tvar instrument = core_1$2.Util.instrument, globalThisOrWindow$2 = core_1$2.Util.globalThisOrWindow;\n\tfunction default_1(_window) {\n\t    if (_window === void 0) { _window = globalThisOrWindow$2(); }\n\t    return {\n\t        load: function (client) {\n\t            // Wrap event listeners\n\t            // Event targets borrowed from bugsnag-js:\n\t            // See https://github.com/bugsnag/bugsnag-js/blob/d55af916a4d3c7757f979d887f9533fe1a04cc93/src/bugsnag.js#L542\n\t            var targets = ['EventTarget', 'Window', 'Node', 'ApplicationCache', 'AudioTrackList', 'ChannelMergerNode', 'CryptoOperation', 'EventSource', 'FileReader', 'HTMLUnknownElement', 'IDBDatabase', 'IDBRequest', 'IDBTransaction', 'KeyOperation', 'MediaController', 'MessagePort', 'ModalWindow', 'Notification', 'SVGElementInstance', 'Screen', 'TextTrack', 'TextTrackCue', 'TextTrackList', 'WebSocket', 'WebSocketWorker', 'Worker', 'XMLHttpRequest', 'XMLHttpRequestEventTarget', 'XMLHttpRequestUpload'];\n\t            targets.forEach(function (prop) {\n\t                var prototype = _window[prop] && _window[prop].prototype;\n\t                if (prototype && Object.prototype.hasOwnProperty.call(prototype, 'addEventListener')) {\n\t                    instrument(prototype, 'addEventListener', function (original) {\n\t                        var wrapOpts = { component: \"\".concat(prop, \".prototype.addEventListener\") };\n\t                        // See https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener\n\t                        return function (type, listener, useCapture, wantsUntrusted) {\n\t                            try {\n\t                                if (listener && listener.handleEvent != null) {\n\t                                    listener.handleEvent = client.__wrap(listener.handleEvent, wrapOpts);\n\t                                }\n\t                            }\n\t                            catch (e) {\n\t                                // Ignore 'Permission denied to access property \"handleEvent\"' errors.\n\t                                client.logger.error(e);\n\t                            }\n\t                            return original.call(this, type, client.__wrap(listener, wrapOpts), useCapture, wantsUntrusted);\n\t                        };\n\t                    });\n\t                    instrument(prototype, 'removeEventListener', function (original) {\n\t                        return function (type, listener, useCapture, wantsUntrusted) {\n\t                            original.call(this, type, listener, useCapture, wantsUntrusted);\n\t                            return original.call(this, type, client.__wrap(listener), useCapture, wantsUntrusted);\n\t                        };\n\t                    });\n\t                }\n\t            });\n\t        }\n\t    };\n\t}\n\tevent_listeners.default = default_1;\n\n\tvar transport = {};\n\n\tvar __awaiter = (commonjsGlobal && commonjsGlobal.__awaiter) || function (thisArg, _arguments, P, generator) {\n\t    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n\t    return new (P || (P = Promise))(function (resolve, reject) {\n\t        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n\t        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n\t        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n\t        step((generator = generator.apply(thisArg, _arguments || [])).next());\n\t    });\n\t};\n\tvar __generator = (commonjsGlobal && commonjsGlobal.__generator) || function (thisArg, body) {\n\t    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n\t    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n\t    function verb(n) { return function (v) { return step([n, v]); }; }\n\t    function step(op) {\n\t        if (f) throw new TypeError(\"Generator is already executing.\");\n\t        while (_) try {\n\t            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n\t            if (y = 0, t) op = [op[0] & 2, t.value];\n\t            switch (op[0]) {\n\t                case 0: case 1: t = op; break;\n\t                case 4: _.label++; return { value: op[1], done: false };\n\t                case 5: _.label++; y = op[1]; op = [0]; continue;\n\t                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n\t                default:\n\t                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n\t                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n\t                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n\t                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n\t                    if (t[2]) _.ops.pop();\n\t                    _.trys.pop(); continue;\n\t            }\n\t            op = body.call(thisArg, _);\n\t        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n\t        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n\t    }\n\t};\n\tObject.defineProperty(transport, \"__esModule\", { value: true });\n\ttransport.BrowserTransport = void 0;\n\tvar core_1$1 = src;\n\tvar sanitize = core_1$1.Util.sanitize, globalThisOrWindow$1 = core_1$1.Util.globalThisOrWindow;\n\t/**\n\t * Helper function to get typesafe Object.entries()\n\t * https://twitter.com/mattpocockuk/status/1502264005251018754?lang=en\n\t */\n\tfunction objectEntries(obj) {\n\t    return Object.entries(obj);\n\t}\n\tvar BrowserTransport = /** @class */ (function () {\n\t    function BrowserTransport(headers) {\n\t        if (headers === void 0) { headers = {}; }\n\t        this.headers = {};\n\t        this.headers = headers;\n\t    }\n\t    BrowserTransport.prototype.defaultHeaders = function () {\n\t        return this.headers;\n\t    };\n\t    BrowserTransport.prototype.send = function (options, payload) {\n\t        return __awaiter(this, void 0, void 0, function () {\n\t            var headerArray, headers, requestInit, response, body;\n\t            return __generator(this, function (_a) {\n\t                switch (_a.label) {\n\t                    case 0:\n\t                        headerArray = options.headers ? objectEntries(options.headers) : [];\n\t                        headers = this.defaultHeaders();\n\t                        headerArray.forEach(function (_a) {\n\t                            var key = _a[0], value = _a[1];\n\t                            if (key != null && value != null) {\n\t                                headers[String(key)] = String(value);\n\t                            }\n\t                        });\n\t                        requestInit = {\n\t                            method: options.method,\n\t                            headers: headers\n\t                        };\n\t                        // GET methods cannot have a body.\n\t                        if (options.method === 'POST' && payload) {\n\t                            requestInit.body = typeof payload === 'string' ? payload : JSON.stringify(sanitize(payload, options.maxObjectDepth));\n\t                        }\n\t                        return [4 /*yield*/, globalThisOrWindow$1().fetch(options.endpoint, requestInit)];\n\t                    case 1:\n\t                        response = _a.sent();\n\t                        return [4 /*yield*/, response.text()];\n\t                    case 2:\n\t                        body = _a.sent();\n\t                        return [2 /*return*/, Promise.resolve({ statusCode: response.status, body: body })];\n\t                }\n\t            });\n\t        });\n\t    };\n\t    return BrowserTransport;\n\t}());\n\ttransport.BrowserTransport = BrowserTransport;\n\n\tvar feedbackForm = {};\n\n\tvar __assign = (commonjsGlobal && commonjsGlobal.__assign) || function () {\n\t    __assign = Object.assign || function(t) {\n\t        for (var s, i = 1, n = arguments.length; i < n; i++) {\n\t            s = arguments[i];\n\t            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n\t                t[p] = s[p];\n\t        }\n\t        return t;\n\t    };\n\t    return __assign.apply(this, arguments);\n\t};\n\tObject.defineProperty(feedbackForm, \"__esModule\", { value: true });\n\tfeedbackForm.BrowserFeedbackForm = void 0;\n\tvar core_1 = src;\n\tvar globalThisOrWindow = core_1.Util.globalThisOrWindow;\n\tvar BrowserFeedbackForm = /** @class */ (function () {\n\t    function BrowserFeedbackForm(config, logger, scriptUrl) {\n\t        this.config = config;\n\t        this.logger = logger;\n\t        this.scriptUrl = scriptUrl;\n\t    }\n\t    /* ROLLUP_STRIP_CODE_CHROME_EXTENSION_START */\n\t    BrowserFeedbackForm.prototype.appendUserFeedbackTag = function (window, options) {\n\t        if (options === void 0) { options = {}; }\n\t        var script = window.document.createElement('script');\n\t        script.setAttribute('src', this.scriptUrl);\n\t        script.setAttribute('async', 'true');\n\t        if (options.onLoad) {\n\t            script.onload = options.onLoad;\n\t        }\n\t        (commonjsGlobal.document.head || commonjsGlobal.document.body).appendChild(script);\n\t    };\n\t    BrowserFeedbackForm.prototype.isUserFeedbackUrlAlreadyVisible = function () {\n\t        var global = globalThisOrWindow();\n\t        var feedbackScriptUrl = this.scriptUrl;\n\t        for (var i = 0; i < global.document.scripts.length; i++) {\n\t            var script = global.document.scripts[i];\n\t            if (script.src === feedbackScriptUrl) {\n\t                return true;\n\t            }\n\t        }\n\t        return false;\n\t    };\n\t    /* ROLLUP_STRIP_CODE_CHROME_EXTENSION_END */\n\t    BrowserFeedbackForm.prototype.show = function (lastNoticeId, options) {\n\t        if (options === void 0) { options = {}; }\n\t        if (typeof (this.appendUserFeedbackTag) !== 'function') {\n\t            this.logger.debug('Feedback form is not available in this environment');\n\t            return;\n\t        }\n\t        if (!this.config || !this.config.apiKey) {\n\t            this.logger.debug('Client not initialized');\n\t            return;\n\t        }\n\t        if (!lastNoticeId) {\n\t            this.logger.debug(\"Can't show user feedback form without a notice already reported\");\n\t            return;\n\t        }\n\t        var global = globalThisOrWindow();\n\t        if (typeof global.document === 'undefined') {\n\t            this.logger.debug('global.document is undefined. Cannot attach script');\n\t            return;\n\t        }\n\t        if (this.isUserFeedbackUrlAlreadyVisible()) {\n\t            this.logger.debug('User feedback form is already visible');\n\t            return;\n\t        }\n\t        global['honeybadgerUserFeedbackOptions'] = __assign(__assign({}, options), { apiKey: this.config.apiKey, endpoint: this.config.userFeedbackEndpoint, noticeId: lastNoticeId });\n\t        this.appendUserFeedbackTag(global, options);\n\t    };\n\t    return BrowserFeedbackForm;\n\t}());\n\tfeedbackForm.BrowserFeedbackForm = BrowserFeedbackForm;\n\n\t(function (exports) {\n\t\tvar __extends = (commonjsGlobal && commonjsGlobal.__extends) || (function () {\n\t\t    var extendStatics = function (d, b) {\n\t\t        extendStatics = Object.setPrototypeOf ||\n\t\t            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t\t            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n\t\t        return extendStatics(d, b);\n\t\t    };\n\t\t    return function (d, b) {\n\t\t        if (typeof b !== \"function\" && b !== null)\n\t\t            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n\t\t        extendStatics(d, b);\n\t\t        function __() { this.constructor = d; }\n\t\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t\t    };\n\t\t})();\n\t\tvar __assign = (commonjsGlobal && commonjsGlobal.__assign) || function () {\n\t\t    __assign = Object.assign || function(t) {\n\t\t        for (var s, i = 1, n = arguments.length; i < n; i++) {\n\t\t            s = arguments[i];\n\t\t            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n\t\t                t[p] = s[p];\n\t\t        }\n\t\t        return t;\n\t\t    };\n\t\t    return __assign.apply(this, arguments);\n\t\t};\n\t\tvar __awaiter = (commonjsGlobal && commonjsGlobal.__awaiter) || function (thisArg, _arguments, P, generator) {\n\t\t    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n\t\t    return new (P || (P = Promise))(function (resolve, reject) {\n\t\t        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n\t\t        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n\t\t        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n\t\t        step((generator = generator.apply(thisArg, _arguments || [])).next());\n\t\t    });\n\t\t};\n\t\tvar __generator = (commonjsGlobal && commonjsGlobal.__generator) || function (thisArg, body) {\n\t\t    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n\t\t    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n\t\t    function verb(n) { return function (v) { return step([n, v]); }; }\n\t\t    function step(op) {\n\t\t        if (f) throw new TypeError(\"Generator is already executing.\");\n\t\t        while (_) try {\n\t\t            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n\t\t            if (y = 0, t) op = [op[0] & 2, t.value];\n\t\t            switch (op[0]) {\n\t\t                case 0: case 1: t = op; break;\n\t\t                case 4: _.label++; return { value: op[1], done: false };\n\t\t                case 5: _.label++; y = op[1]; op = [0]; continue;\n\t\t                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n\t\t                default:\n\t\t                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n\t\t                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n\t\t                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n\t\t                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n\t\t                    if (t[2]) _.ops.pop();\n\t\t                    _.trys.pop(); continue;\n\t\t            }\n\t\t            op = body.call(thisArg, _);\n\t\t        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n\t\t        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n\t\t    }\n\t\t};\n\t\tvar __importDefault = (commonjsGlobal && commonjsGlobal.__importDefault) || function (mod) {\n\t\t    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n\t\t};\n\t\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\t\texports.Types = exports.getUserFeedbackScriptUrl = void 0;\n\t\tvar core_1 = src;\n\t\tvar util_1 = util;\n\t\tvar onerror_1 = onerror;\n\t\tvar onunhandledrejection_1 = __importDefault(onunhandledrejection);\n\t\tvar breadcrumbs_1 = __importDefault(breadcrumbs);\n\t\tvar timers_1 = __importDefault(timers);\n\t\tvar event_listeners_1 = __importDefault(event_listeners);\n\t\tvar transport_1 = transport;\n\t\tvar feedback_form_1 = feedbackForm;\n\t\tvar merge = core_1.Util.merge, filter = core_1.Util.filter, objectIsExtensible = core_1.Util.objectIsExtensible, globalThisOrWindow = core_1.Util.globalThisOrWindow;\n\t\tvar getProjectRoot = function () {\n\t\t    var global = globalThisOrWindow();\n\t\t    var projectRoot = '';\n\t\t    // Cloudflare workers do not have access to location API.\n\t\t    if (global.location != null) {\n\t\t        projectRoot = global.location.protocol + '//' + global.location.host;\n\t\t    }\n\t\t    return projectRoot;\n\t\t};\n\t\tvar getUserFeedbackScriptUrl = function (version) {\n\t\t    var majorMinorVersion = version.split('.').slice(0, 2).join('.');\n\t\t    return \"https://js.honeybadger.io/v\".concat(majorMinorVersion, \"/honeybadger-feedback-form.js\");\n\t\t};\n\t\texports.getUserFeedbackScriptUrl = getUserFeedbackScriptUrl;\n\t\tvar Honeybadger = /** @class */ (function (_super) {\n\t\t    __extends(Honeybadger, _super);\n\t\t    function Honeybadger(opts) {\n\t\t        if (opts === void 0) { opts = {}; }\n\t\t        var _this = _super.call(this, __assign({ userFeedbackEndpoint: 'https://api.honeybadger.io/v2/feedback', async: true, maxErrors: null, projectRoot: getProjectRoot() }, opts), new transport_1.BrowserTransport({\n\t\t            'User-Agent': userAgent(),\n\t\t        })) || this;\n\t\t        /** @internal */\n\t\t        _this.__errorsSent = 0;\n\t\t        /** @internal */\n\t\t        _this.__lastWrapErr = undefined;\n\t\t        /** @internal */\n\t\t        _this.__lastNoticeId = undefined;\n\t\t        /** @internal */\n\t\t        _this.__beforeNotifyHandlers = [\n\t\t            function (notice) {\n\t\t                if (_this.__exceedsMaxErrors()) {\n\t\t                    _this.logger.debug('Dropping notice: max errors exceeded', notice);\n\t\t                    return false;\n\t\t                }\n\t\t                if (notice && !notice.url && typeof document !== 'undefined') {\n\t\t                    notice.url = document.URL;\n\t\t                }\n\t\t                _this.__incrementErrorsCount();\n\t\t                return true;\n\t\t            }\n\t\t        ];\n\t\t        _this.__afterNotifyHandlers = [\n\t\t            function (_error, notice) {\n\t\t                if (notice) {\n\t\t                    _this.__lastNoticeId = notice.id;\n\t\t                }\n\t\t            }\n\t\t        ];\n\t\t        return _this;\n\t\t    }\n\t\t    Honeybadger.prototype.configure = function (opts) {\n\t\t        if (opts === void 0) { opts = {}; }\n\t\t        return _super.prototype.configure.call(this, opts);\n\t\t    };\n\t\t    Honeybadger.prototype.resetMaxErrors = function () {\n\t\t        return (this.__errorsSent = 0);\n\t\t    };\n\t\t    Honeybadger.prototype.factory = function (opts) {\n\t\t        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t        var clone = new Honeybadger(opts);\n\t\t        clone.setNotifier(this.getNotifier());\n\t\t        return clone;\n\t\t    };\n\t\t    Honeybadger.prototype.checkIn = function (_id) {\n\t\t        throw new Error('Honeybadger.checkIn() is not supported on the browser');\n\t\t    };\n\t\t    Honeybadger.prototype.showUserFeedbackForm = function (options) {\n\t\t        if (options === void 0) { options = {}; }\n\t\t        return __awaiter(this, void 0, void 0, function () {\n\t\t            var form;\n\t\t            return __generator(this, function (_a) {\n\t\t                form = new feedback_form_1.BrowserFeedbackForm(this.config, this.logger, this.getUserFeedbackSubmitUrl());\n\t\t                form.show(this.__lastNoticeId, options);\n\t\t                return [2 /*return*/];\n\t\t            });\n\t\t        });\n\t\t    };\n\t\t    Honeybadger.prototype.getUserFeedbackSubmitUrl = function () {\n\t\t        return (0, exports.getUserFeedbackScriptUrl)(this.getVersion());\n\t\t    };\n\t\t    /** @internal */\n\t\t    Honeybadger.prototype.__buildPayload = function (notice) {\n\t\t        var cgiData = {\n\t\t            HTTP_USER_AGENT: undefined,\n\t\t            HTTP_REFERER: undefined,\n\t\t            HTTP_COOKIE: undefined\n\t\t        };\n\t\t        if (typeof navigator !== 'undefined' && navigator.userAgent) {\n\t\t            cgiData.HTTP_USER_AGENT = navigator.userAgent;\n\t\t        }\n\t\t        if (typeof document !== 'undefined' && document.referrer.match(/\\S/)) {\n\t\t            cgiData.HTTP_REFERER = document.referrer;\n\t\t        }\n\t\t        var cookiesObject;\n\t\t        if (typeof notice.cookies === 'string') {\n\t\t            cookiesObject = (0, util_1.decodeCookie)(notice.cookies);\n\t\t        }\n\t\t        else {\n\t\t            cookiesObject = notice.cookies;\n\t\t        }\n\t\t        if (cookiesObject) {\n\t\t            cgiData.HTTP_COOKIE = (0, util_1.encodeCookie)(filter(cookiesObject, this.config.filters));\n\t\t        }\n\t\t        var payload = _super.prototype.__buildPayload.call(this, notice);\n\t\t        payload.request.cgi_data = merge(cgiData, payload.request.cgi_data);\n\t\t        return payload;\n\t\t    };\n\t\t    /**\n\t\t     * wrap always returns the same function so that callbacks can be removed via\n\t\t     * removeEventListener.\n\t\t     * @internal\n\t\t     */\n\t\t    Honeybadger.prototype.__wrap = function (f, opts) {\n\t\t        if (opts === void 0) { opts = {}; }\n\t\t        var func = f;\n\t\t        if (!opts) {\n\t\t            opts = {};\n\t\t        }\n\t\t        try {\n\t\t            if (typeof func !== 'function') {\n\t\t                return func;\n\t\t            }\n\t\t            if (!objectIsExtensible(func)) {\n\t\t                return func;\n\t\t            }\n\t\t            if (!func.___hb) {\n\t\t                // eslint-disable-next-line @typescript-eslint/no-this-alias\n\t\t                var client_1 = this;\n\t\t                func.___hb = function () {\n\t\t                    if (util_1.preferCatch) {\n\t\t                        try {\n\t\t                            // eslint-disable-next-line prefer-rest-params\n\t\t                            return func.apply(this, arguments);\n\t\t                        }\n\t\t                        catch (err) {\n\t\t                            if (client_1.__lastWrapErr === err) {\n\t\t                                throw (err);\n\t\t                            }\n\t\t                            client_1.__lastWrapErr = err;\n\t\t                            (0, onerror_1.ignoreNextOnError)();\n\t\t                            client_1.addBreadcrumb(opts.component ? \"\".concat(opts.component, \": \").concat(err.name) : err.name, {\n\t\t                                category: 'error',\n\t\t                                metadata: {\n\t\t                                    message: err.message,\n\t\t                                    name: err.name,\n\t\t                                    stack: err.stack\n\t\t                                }\n\t\t                            });\n\t\t                            if (client_1.config.enableUncaught) {\n\t\t                                client_1.notify(err);\n\t\t                            }\n\t\t                            throw (err);\n\t\t                        }\n\t\t                    }\n\t\t                    else {\n\t\t                        // eslint-disable-next-line prefer-rest-params\n\t\t                        return func.apply(this, arguments);\n\t\t                    }\n\t\t                };\n\t\t            }\n\t\t            func.___hb.___hb = func.___hb;\n\t\t            return func.___hb;\n\t\t        }\n\t\t        catch (_e) {\n\t\t            return func;\n\t\t        }\n\t\t    };\n\t\t    /** @internal */\n\t\t    Honeybadger.prototype.__incrementErrorsCount = function () {\n\t\t        return this.__errorsSent++;\n\t\t    };\n\t\t    /** @internal */\n\t\t    Honeybadger.prototype.__exceedsMaxErrors = function () {\n\t\t        return this.config.maxErrors && this.__errorsSent >= this.config.maxErrors;\n\t\t    };\n\t\t    return Honeybadger;\n\t\t}(core_1.Client));\n\t\tvar NOTIFIER = {\n\t\t    name: '@honeybadger-io/js',\n\t\t    url: 'https://github.com/honeybadger-io/honeybadger-js/tree/master/packages/js',\n\t\t    version: '6.11.0'\n\t\t};\n\t\tvar userAgent = function () {\n\t\t    if (typeof navigator !== 'undefined') {\n\t\t        return \"Honeybadger JS Browser Client \".concat(NOTIFIER.version, \"; \").concat(navigator.userAgent);\n\t\t    }\n\t\t    return \"Honeybadger JS Browser Client \".concat(NOTIFIER.version, \"; n/a; n/a\");\n\t\t};\n\t\tvar singleton = new Honeybadger({\n\t\t    __plugins: [\n\t\t        (0, onerror_1.onError)(),\n\t\t        (0, onunhandledrejection_1.default)(),\n\t\t        (0, timers_1.default)(),\n\t\t        (0, event_listeners_1.default)(),\n\t\t        (0, breadcrumbs_1.default)(),\n\t\t        core_1.Plugins.events(),\n\t\t    ]\n\t\t});\n\t\tsingleton.setNotifier(NOTIFIER);\n\t\tvar core_2 = src;\n\t\tObject.defineProperty(exports, \"Types\", { enumerable: true, get: function () { return core_2.Types; } });\n\t\texports.default = singleton;\n\t\t\n\t} (browser$1));\n\n\tvar browser = /*@__PURE__*/getDefaultExportFromCjs(browser$1);\n\n\treturn browser;\n\n}));\n//# sourceMappingURL=honeybadger.js.map\n","import Honeybadger from '@honeybadger-io/js';\nexport { default as Honeybadger } from '@honeybadger-io/js';\nimport React, { Component } from 'react';\n\nfunction DefaultErrorComponent({ error, info }) {\n    return (React.createElement(\"div\", { className: 'error' },\n        React.createElement(\"div\", null, \"An Error Occurred\"),\n        React.createElement(\"div\", null, error ? error.toString() : ''),\n        React.createElement(\"div\", null, info ? JSON.stringify(info, null, 2) : '')));\n}\n\nclass HoneybadgerErrorBoundary extends Component {\n    constructor(props) {\n        super(props);\n        this.state = {\n            error: null,\n            info: null,\n            errorOccurred: false\n        };\n    }\n    static getDerivedStateFromError(error) {\n        return { error: error, errorOccurred: true, info: null };\n    }\n    componentDidMount() {\n        this.props.honeybadger.afterNotify((error, _notice) => {\n            if (!error && this.props.showUserFeedbackFormOnError) {\n                this.props.honeybadger.showUserFeedbackForm();\n            }\n        });\n    }\n    componentDidCatch(error, errorInfo) {\n        this.setState({ error, info: errorInfo });\n        this.props.honeybadger.notify(error, { context: errorInfo });\n    }\n    getErrorComponent() {\n        return this.props.ErrorComponent\n            ? React.createElement(this.props.ErrorComponent, { ...this.state })\n            : React.createElement(DefaultErrorComponent, { ...this.state });\n    }\n    render() {\n        return (React.createElement(React.Fragment, null, this.state.errorOccurred\n            ? this.getErrorComponent()\n            : this.props.children));\n    }\n}\nHoneybadgerErrorBoundary.defaultProps = {\n    showUserFeedbackFormOnError: false\n};\n\nconst NOTIFIER = {\n    name: '@honeybadger-io/react',\n    url: 'https://github.com/honeybadger-io/honeybadger-js/tree/master/packages/react',\n    version: '6.1.27'\n};\nHoneybadger.setNotifier(NOTIFIER);\n\nexport { HoneybadgerErrorBoundary };\n//# sourceMappingURL=honeybadger-react.esm.js.map\n","/*!\n * accounting.js v0.4.1\n * Copyright 2014 Open Exchange Rates\n *\n * Freely distributable under the MIT license.\n * Portions of accounting.js are inspired or borrowed from underscore.js\n *\n * Full details and documentation:\n * http://openexchangerates.github.io/accounting.js/\n */\n\n(function(root, undefined) {\n\n\t/* --- Setup --- */\n\n\t// Create the local library object, to be exported or referenced globally later\n\tvar lib = {};\n\n\t// Current version\n\tlib.version = '0.4.1';\n\n\n\t/* --- Exposed settings --- */\n\n\t// The library's settings configuration object. Contains default parameters for\n\t// currency and number formatting\n\tlib.settings = {\n\t\tcurrency: {\n\t\t\tsymbol : \"$\",\t\t// default currency symbol is '$'\n\t\t\tformat : \"%s%v\",\t// controls output: %s = symbol, %v = value (can be object, see docs)\n\t\t\tdecimal : \".\",\t\t// decimal point separator\n\t\t\tthousand : \",\",\t\t// thousands separator\n\t\t\tprecision : 2,\t\t// decimal places\n\t\t\tgrouping : 3\t\t// digit grouping (not implemented yet)\n\t\t},\n\t\tnumber: {\n\t\t\tprecision : 0,\t\t// default precision on numbers is 0\n\t\t\tgrouping : 3,\t\t// digit grouping (not implemented yet)\n\t\t\tthousand : \",\",\n\t\t\tdecimal : \".\"\n\t\t}\n\t};\n\n\n\t/* --- Internal Helper Methods --- */\n\n\t// Store reference to possibly-available ECMAScript 5 methods for later\n\tvar nativeMap = Array.prototype.map,\n\t\tnativeIsArray = Array.isArray,\n\t\ttoString = Object.prototype.toString;\n\n\t/**\n\t * Tests whether supplied parameter is a string\n\t * from underscore.js\n\t */\n\tfunction isString(obj) {\n\t\treturn !!(obj === '' || (obj && obj.charCodeAt && obj.substr));\n\t}\n\n\t/**\n\t * Tests whether supplied parameter is a string\n\t * from underscore.js, delegates to ECMA5's native Array.isArray\n\t */\n\tfunction isArray(obj) {\n\t\treturn nativeIsArray ? nativeIsArray(obj) : toString.call(obj) === '[object Array]';\n\t}\n\n\t/**\n\t * Tests whether supplied parameter is a true object\n\t */\n\tfunction isObject(obj) {\n\t\treturn obj && toString.call(obj) === '[object Object]';\n\t}\n\n\t/**\n\t * Extends an object with a defaults object, similar to underscore's _.defaults\n\t *\n\t * Used for abstracting parameter handling from API methods\n\t */\n\tfunction defaults(object, defs) {\n\t\tvar key;\n\t\tobject = object || {};\n\t\tdefs = defs || {};\n\t\t// Iterate over object non-prototype properties:\n\t\tfor (key in defs) {\n\t\t\tif (defs.hasOwnProperty(key)) {\n\t\t\t\t// Replace values with defaults only if undefined (allow empty/zero values):\n\t\t\t\tif (object[key] == null) object[key] = defs[key];\n\t\t\t}\n\t\t}\n\t\treturn object;\n\t}\n\n\t/**\n\t * Implementation of `Array.map()` for iteration loops\n\t *\n\t * Returns a new Array as a result of calling `iterator` on each array value.\n\t * Defers to native Array.map if available\n\t */\n\tfunction map(obj, iterator, context) {\n\t\tvar results = [], i, j;\n\n\t\tif (!obj) return results;\n\n\t\t// Use native .map method if it exists:\n\t\tif (nativeMap && obj.map === nativeMap) return obj.map(iterator, context);\n\n\t\t// Fallback for native .map:\n\t\tfor (i = 0, j = obj.length; i < j; i++ ) {\n\t\t\tresults[i] = iterator.call(context, obj[i], i, obj);\n\t\t}\n\t\treturn results;\n\t}\n\n\t/**\n\t * Check and normalise the value of precision (must be positive integer)\n\t */\n\tfunction checkPrecision(val, base) {\n\t\tval = Math.round(Math.abs(val));\n\t\treturn isNaN(val)? base : val;\n\t}\n\n\n\t/**\n\t * Parses a format string or object and returns format obj for use in rendering\n\t *\n\t * `format` is either a string with the default (positive) format, or object\n\t * containing `pos` (required), `neg` and `zero` values (or a function returning\n\t * either a string or object)\n\t *\n\t * Either string or format.pos must contain \"%v\" (value) to be valid\n\t */\n\tfunction checkCurrencyFormat(format) {\n\t\tvar defaults = lib.settings.currency.format;\n\n\t\t// Allow function as format parameter (should return string or object):\n\t\tif ( typeof format === \"function\" ) format = format();\n\n\t\t// Format can be a string, in which case `value` (\"%v\") must be present:\n\t\tif ( isString( format ) && format.match(\"%v\") ) {\n\n\t\t\t// Create and return positive, negative and zero formats:\n\t\t\treturn {\n\t\t\t\tpos : format,\n\t\t\t\tneg : format.replace(\"-\", \"\").replace(\"%v\", \"-%v\"),\n\t\t\t\tzero : format\n\t\t\t};\n\n\t\t// If no format, or object is missing valid positive value, use defaults:\n\t\t} else if ( !format || !format.pos || !format.pos.match(\"%v\") ) {\n\n\t\t\t// If defaults is a string, casts it to an object for faster checking next time:\n\t\t\treturn ( !isString( defaults ) ) ? defaults : lib.settings.currency.format = {\n\t\t\t\tpos : defaults,\n\t\t\t\tneg : defaults.replace(\"%v\", \"-%v\"),\n\t\t\t\tzero : defaults\n\t\t\t};\n\n\t\t}\n\t\t// Otherwise, assume format was fine:\n\t\treturn format;\n\t}\n\n\n\t/* --- API Methods --- */\n\n\t/**\n\t * Takes a string/array of strings, removes all formatting/cruft and returns the raw float value\n\t * Alias: `accounting.parse(string)`\n\t *\n\t * Decimal must be included in the regular expression to match floats (defaults to\n\t * accounting.settings.number.decimal), so if the number uses a non-standard decimal \n\t * separator, provide it as the second argument.\n\t *\n\t * Also matches bracketed negatives (eg. \"$ (1.99)\" => -1.99)\n\t *\n\t * Doesn't throw any errors (`NaN`s become 0) but this may change in future\n\t */\n\tvar unformat = lib.unformat = lib.parse = function(value, decimal) {\n\t\t// Recursively unformat arrays:\n\t\tif (isArray(value)) {\n\t\t\treturn map(value, function(val) {\n\t\t\t\treturn unformat(val, decimal);\n\t\t\t});\n\t\t}\n\n\t\t// Fails silently (need decent errors):\n\t\tvalue = value || 0;\n\n\t\t// Return the value as-is if it's already a number:\n\t\tif (typeof value === \"number\") return value;\n\n\t\t// Default decimal point comes from settings, but could be set to eg. \",\" in opts:\n\t\tdecimal = decimal || lib.settings.number.decimal;\n\n\t\t // Build regex to strip out everything except digits, decimal point and minus sign:\n\t\tvar regex = new RegExp(\"[^0-9-\" + decimal + \"]\", [\"g\"]),\n\t\t\tunformatted = parseFloat(\n\t\t\t\t(\"\" + value)\n\t\t\t\t.replace(/\\((.*)\\)/, \"-$1\") // replace bracketed values with negatives\n\t\t\t\t.replace(regex, '')         // strip out any cruft\n\t\t\t\t.replace(decimal, '.')      // make sure decimal point is standard\n\t\t\t);\n\n\t\t// This will fail silently which may cause trouble, let's wait and see:\n\t\treturn !isNaN(unformatted) ? unformatted : 0;\n\t};\n\n\n\t/**\n\t * Implementation of toFixed() that treats floats more like decimals\n\t *\n\t * Fixes binary rounding issues (eg. (0.615).toFixed(2) === \"0.61\") that present\n\t * problems for accounting- and finance-related software.\n\t */\n\tvar toFixed = lib.toFixed = function(value, precision) {\n\t\tprecision = checkPrecision(precision, lib.settings.number.precision);\n\t\tvar power = Math.pow(10, precision);\n\n\t\t// Multiply up by precision, round accurately, then divide and use native toFixed():\n\t\treturn (Math.round(lib.unformat(value) * power) / power).toFixed(precision);\n\t};\n\n\n\t/**\n\t * Format a number, with comma-separated thousands and custom precision/decimal places\n\t * Alias: `accounting.format()`\n\t *\n\t * Localise by overriding the precision and thousand / decimal separators\n\t * 2nd parameter `precision` can be an object matching `settings.number`\n\t */\n\tvar formatNumber = lib.formatNumber = lib.format = function(number, precision, thousand, decimal) {\n\t\t// Resursively format arrays:\n\t\tif (isArray(number)) {\n\t\t\treturn map(number, function(val) {\n\t\t\t\treturn formatNumber(val, precision, thousand, decimal);\n\t\t\t});\n\t\t}\n\n\t\t// Clean up number:\n\t\tnumber = unformat(number);\n\n\t\t// Build options object from second param (if object) or all params, extending defaults:\n\t\tvar opts = defaults(\n\t\t\t\t(isObject(precision) ? precision : {\n\t\t\t\t\tprecision : precision,\n\t\t\t\t\tthousand : thousand,\n\t\t\t\t\tdecimal : decimal\n\t\t\t\t}),\n\t\t\t\tlib.settings.number\n\t\t\t),\n\n\t\t\t// Clean up precision\n\t\t\tusePrecision = checkPrecision(opts.precision),\n\n\t\t\t// Do some calc:\n\t\t\tnegative = number < 0 ? \"-\" : \"\",\n\t\t\tbase = parseInt(toFixed(Math.abs(number || 0), usePrecision), 10) + \"\",\n\t\t\tmod = base.length > 3 ? base.length % 3 : 0;\n\n\t\t// Format the number:\n\t\treturn negative + (mod ? base.substr(0, mod) + opts.thousand : \"\") + base.substr(mod).replace(/(\\d{3})(?=\\d)/g, \"$1\" + opts.thousand) + (usePrecision ? opts.decimal + toFixed(Math.abs(number), usePrecision).split('.')[1] : \"\");\n\t};\n\n\n\t/**\n\t * Format a number into currency\n\t *\n\t * Usage: accounting.formatMoney(number, symbol, precision, thousandsSep, decimalSep, format)\n\t * defaults: (0, \"$\", 2, \",\", \".\", \"%s%v\")\n\t *\n\t * Localise by overriding the symbol, precision, thousand / decimal separators and format\n\t * Second param can be an object matching `settings.currency` which is the easiest way.\n\t *\n\t * To do: tidy up the parameters\n\t */\n\tvar formatMoney = lib.formatMoney = function(number, symbol, precision, thousand, decimal, format) {\n\t\t// Resursively format arrays:\n\t\tif (isArray(number)) {\n\t\t\treturn map(number, function(val){\n\t\t\t\treturn formatMoney(val, symbol, precision, thousand, decimal, format);\n\t\t\t});\n\t\t}\n\n\t\t// Clean up number:\n\t\tnumber = unformat(number);\n\n\t\t// Build options object from second param (if object) or all params, extending defaults:\n\t\tvar opts = defaults(\n\t\t\t\t(isObject(symbol) ? symbol : {\n\t\t\t\t\tsymbol : symbol,\n\t\t\t\t\tprecision : precision,\n\t\t\t\t\tthousand : thousand,\n\t\t\t\t\tdecimal : decimal,\n\t\t\t\t\tformat : format\n\t\t\t\t}),\n\t\t\t\tlib.settings.currency\n\t\t\t),\n\n\t\t\t// Check format (returns object with pos, neg and zero):\n\t\t\tformats = checkCurrencyFormat(opts.format),\n\n\t\t\t// Choose which format to use for this value:\n\t\t\tuseFormat = number > 0 ? formats.pos : number < 0 ? formats.neg : formats.zero;\n\n\t\t// Return with currency symbol added:\n\t\treturn useFormat.replace('%s', opts.symbol).replace('%v', formatNumber(Math.abs(number), checkPrecision(opts.precision), opts.thousand, opts.decimal));\n\t};\n\n\n\t/**\n\t * Format a list of numbers into an accounting column, padding with whitespace\n\t * to line up currency symbols, thousand separators and decimals places\n\t *\n\t * List should be an array of numbers\n\t * Second parameter can be an object containing keys that match the params\n\t *\n\t * Returns array of accouting-formatted number strings of same length\n\t *\n\t * NB: `white-space:pre` CSS rule is required on the list container to prevent\n\t * browsers from collapsing the whitespace in the output strings.\n\t */\n\tlib.formatColumn = function(list, symbol, precision, thousand, decimal, format) {\n\t\tif (!list) return [];\n\n\t\t// Build options object from second param (if object) or all params, extending defaults:\n\t\tvar opts = defaults(\n\t\t\t\t(isObject(symbol) ? symbol : {\n\t\t\t\t\tsymbol : symbol,\n\t\t\t\t\tprecision : precision,\n\t\t\t\t\tthousand : thousand,\n\t\t\t\t\tdecimal : decimal,\n\t\t\t\t\tformat : format\n\t\t\t\t}),\n\t\t\t\tlib.settings.currency\n\t\t\t),\n\n\t\t\t// Check format (returns object with pos, neg and zero), only need pos for now:\n\t\t\tformats = checkCurrencyFormat(opts.format),\n\n\t\t\t// Whether to pad at start of string or after currency symbol:\n\t\t\tpadAfterSymbol = formats.pos.indexOf(\"%s\") < formats.pos.indexOf(\"%v\") ? true : false,\n\n\t\t\t// Store value for the length of the longest string in the column:\n\t\t\tmaxLength = 0,\n\n\t\t\t// Format the list according to options, store the length of the longest string:\n\t\t\tformatted = map(list, function(val, i) {\n\t\t\t\tif (isArray(val)) {\n\t\t\t\t\t// Recursively format columns if list is a multi-dimensional array:\n\t\t\t\t\treturn lib.formatColumn(val, opts);\n\t\t\t\t} else {\n\t\t\t\t\t// Clean up the value\n\t\t\t\t\tval = unformat(val);\n\n\t\t\t\t\t// Choose which format to use for this value (pos, neg or zero):\n\t\t\t\t\tvar useFormat = val > 0 ? formats.pos : val < 0 ? formats.neg : formats.zero,\n\n\t\t\t\t\t\t// Format this value, push into formatted list and save the length:\n\t\t\t\t\t\tfVal = useFormat.replace('%s', opts.symbol).replace('%v', formatNumber(Math.abs(val), checkPrecision(opts.precision), opts.thousand, opts.decimal));\n\n\t\t\t\t\tif (fVal.length > maxLength) maxLength = fVal.length;\n\t\t\t\t\treturn fVal;\n\t\t\t\t}\n\t\t\t});\n\n\t\t// Pad each number in the list and send back the column of numbers:\n\t\treturn map(formatted, function(val, i) {\n\t\t\t// Only if this is a string (not a nested array, which would have already been padded):\n\t\t\tif (isString(val) && val.length < maxLength) {\n\t\t\t\t// Depending on symbol position, pad after symbol or at index 0:\n\t\t\t\treturn padAfterSymbol ? val.replace(opts.symbol, opts.symbol+(new Array(maxLength - val.length + 1).join(\" \"))) : (new Array(maxLength - val.length + 1).join(\" \")) + val;\n\t\t\t}\n\t\t\treturn val;\n\t\t});\n\t};\n\n\n\t/* --- Module Definition --- */\n\n\t// Export accounting for CommonJS. If being loaded as an AMD module, define it as such.\n\t// Otherwise, just add `accounting` to the global object\n\tif (typeof exports !== 'undefined') {\n\t\tif (typeof module !== 'undefined' && module.exports) {\n\t\t\texports = module.exports = lib;\n\t\t}\n\t\texports.accounting = lib;\n\t} else if (typeof define === 'function' && define.amd) {\n\t\t// Return the library as an AMD module:\n\t\tdefine([], function() {\n\t\t\treturn lib;\n\t\t});\n\t} else {\n\t\t// Use accounting.noConflict to restore `accounting` back to its original value.\n\t\t// Returns a reference to the library's `accounting` object;\n\t\t// e.g. `var numbers = accounting.noConflict();`\n\t\tlib.noConflict = (function(oldAccounting) {\n\t\t\treturn function() {\n\t\t\t\t// Reset the value of the root's `accounting` variable:\n\t\t\t\troot.accounting = oldAccounting;\n\t\t\t\t// Delete the noConflict method:\n\t\t\t\tlib.noConflict = undefined;\n\t\t\t\t// Return reference to the library to re-assign it:\n\t\t\t\treturn lib;\n\t\t\t};\n\t\t})(root.accounting);\n\n\t\t// Declare `fx` on the root (global/window) object:\n\t\troot['accounting'] = lib;\n\t}\n\n\t// Root will be `window` in browser or `global` on the server:\n}(this));\n","// @flow\n// NOTE: This file is also imported from frontend JS application so that this\n//       file is the only one acting as the source of truth of what are the\n//       available locales!\n\n// Use a tuple type for locales as that disallows both adding new locales\n// or removing old locales without changing types.\n\n// Note: this file is not auto-formatted with Prettier as it would remove the\n// flow comments\n\nconst locales /*: ['fi', 'sv', 'en', 'da', 'pl', 'es', 'tra'] */ = [\n  'fi',\n  'sv',\n  'en',\n  'da',\n  'pl',\n  'es',\n  'tra'\n];\n\n/*::\nexport type Locale = 'fi' | 'sv' | 'en' | 'da' | 'pl' | 'es' | 'tra';\n\n// This makes sure that all defined locales are specified in Locale type above\n(locales.map(locale => (locale: Locale)));\n*/\n\nmodule.exports = { locales };\n","import * as React from 'react';\nwindow.React = React;\n","import i18nFallbacks from 'railsRoot/config/i18n_fallbacks.json';\nimport I18n from 'i18n-js';\n\nexport default function i18nSetup() {\n  window.I18n = I18n;\n  I18n.locale = __LOCALE__;\n  I18n.defaultLocale = 'fi';\n  I18n.translations = I18N_RUNTIME_TRANSLATIONS;\n  I18n.placeholder = /%\\{(.*?)\\}/gm;\n\n  // Configure runtime I18n.t to test each fallback locale in the\n  // defined order before falling back to the default missing translation\n  // logic -- which most likely would show an error.\n  //\n  // This replicates the logic we see on Rails side.\n  const originalMissingTranslation = I18n.missingTranslation;\n  I18n.missingTranslation = function (scope, options) {\n    // English translation doesn't define fallback locales, so we\n    // default to an empty array of fallback locales to not crash when\n    // fallback locales don't exist.\n    //\n    // This makes a missing translation error show up in case I18n.t\n    // ends up using a translation that doesn't exist and we use English.\n    const fallbackLocales = i18nFallbacks[this.locale] || [];\n    if (options.__usedFallbackLocales >= fallbackLocales.length) {\n      return originalMissingTranslation.call(this, scope, options);\n    }\n    const nextFallbackLocaleIndex =\n      typeof options.__usedFallbackLocales === 'undefined'\n        ? 0\n        : options.__usedFallbackLocales + 1;\n    return I18n.t(scope, {\n      ...options,\n      locale: fallbackLocales[nextFallbackLocaleIndex],\n      __usedFallbackLocales: nextFallbackLocaleIndex\n    });\n  };\n\n  // We want missing placeholders to not output anything in order for the In-Context\n  // translation mode to pick the original translation as it was in the language under\n  // translation -- that is, we want to effectively disable interpolation altogether.\n  if (__LOCALE__ === 'tra') {\n    I18n.missingPlaceholder = placeholder => placeholder;\n  }\n}\n","// @flow\n\nimport * as React from 'react';\nimport ReactDOM from 'react-dom';\nimport Honeybadger from '@honeybadger-io/js';\n\nimport { HoneybadgerErrorBoundary } from '@honeybadger-io/react';\nimport ErrorComponent from 'common/components/ErrorComponent.js';\n\ntype AnyProps = {| [string]: any |};\n\ntype ComponentMap = any;\ntype LazyComponentMap = any;\n\nexport function exposeComponents(mountableComponents: ComponentMap) {\n  window.Venuu.REACT_COMPONENTS = {\n    ...window.Venuu.REACT_COMPONENTS,\n    ...mountableComponents\n  };\n}\n\nexport function exposeLazyComponents(mountableComponents: LazyComponentMap) {\n  window.Venuu.REACT_LAZY_COMPONENTS = {\n    ...window.Venuu.REACT_LAZY_COMPONENTS,\n    ...mountableComponents\n  };\n}\n\nexport function createElement(\n  component: React.ComponentType<AnyProps>,\n  props: AnyProps\n): React.Node {\n  // $FlowFixMe[not-a-function] -- Suppressed during Flow upgrade to 0.241.0. Delete this comment to view the error.\n  return React.createElement(component, props);\n}\n\nconst mountComponentFromNode = (node: HTMLElement) => {\n  const componentName = node.getAttribute('data-react-class');\n  const componentId = node.getAttribute('data-component-id');\n  if (!componentName || !componentId) {\n    throw new Error(\"Can't mount react node\");\n  }\n  const props = window.Venuu.REACT_PROPS[`${componentName}:${componentId}`];\n  mountComponent(componentName, props, node);\n};\n\nfunction mountComponent(\n  componentName: string,\n  props: AnyProps,\n  node: HTMLElement\n) {\n  const normalComponent =\n    window.Venuu.REACT_COMPONENTS &&\n    window.Venuu.REACT_COMPONENTS[componentName];\n  const loadLazyComponent =\n    window.Venuu.REACT_LAZY_COMPONENTS &&\n    window.Venuu.REACT_LAZY_COMPONENTS[componentName];\n\n  if (normalComponent) {\n    render(normalComponent, props, node);\n  } else if (loadLazyComponent) {\n    loadLazyComponent()\n      .then(component => {\n        render(component, props, node);\n      })\n      .catch(err => {\n        // eslint-disable-next-line no-console\n        console.error(err);\n      });\n  } else {\n    throw new Error(\n      `Could not find mountable component ${componentName}. ` +\n        'You need to expose it through REACT_COMPONENTS or REACT_LAZY_COMPONENTS.'\n    );\n  }\n}\n\nfunction render(component: any, props: AnyProps, node: HTMLElement) {\n  try {\n    Honeybadger.setContext({ component: component.name, props });\n    // $FlowFixMe[incompatible-type] createElement() has a too wide potential return type\n    const element: React.Element<React.ElementType> = createElement(\n      component,\n      props\n    );\n    // TODO: Call ReactDOM.hydrate instead when the component has been server-rendered\n    ReactDOM.render(\n      <HoneybadgerErrorBoundary\n        honeybadger={Honeybadger}\n        ErrorComponent={ErrorComponent}\n      >\n        {element}\n      </HoneybadgerErrorBoundary>,\n      node\n    );\n  } finally {\n    Honeybadger.setContext({ component: null, props: null });\n  }\n}\n\nexport function mountAllComponents() {\n  const reactNodes = document.querySelectorAll('[data-react-class]');\n\n  // YYyeah, document.querySelectorAll doesn't return an Array but a NodeList object. And that\n  // fucker naturally doesn't support .map function, because DOM API sucks balls, so we have to\n  // rely on normal for-loop to iterate the nodes.\n  // https://developer.mozilla.org/en-US/docs/Web/API/NodeList#Why_is_NodeList_not_an_Array\n  for (let i = 0; i < reactNodes.length; i++) {\n    mountComponentFromNode(reactNodes[i]);\n  }\n}\n","// Setup moment.js locale bundle-wide\nimport moment from 'moment';\nimport 'moment/locale/current';\nmoment.locale(__LOCALE__ === 'en' ? 'en-gb' : __LOCALE__);\n","/**\n * Function to get cookies as an object of name/value pairs\n *\n * TODO: should we be / are we using jquery.cookie instead?\n */\nexport default function getCookies() {\n  const cookies = {};\n  const all = document.cookie;\n  if (all === '') {\n    return cookies;\n  }\n  const list = all.split('; ');\n  for (let i = 0; i < list.length; i++) {\n    const cookie = list[i];\n    const p = cookie.indexOf('=');\n    const name = cookie.substring(0, p);\n    let value = cookie.substring(p + 1);\n    value = decodeURIComponent(value);\n    cookies[name] = value;\n  }\n  return cookies;\n}\n","// @flow\n\nimport { oneOf } from 'common/json/extract';\n\ntype CookieCategory =\n  | 'necessary'\n  | 'functional'\n  | 'performance'\n  | 'analytics'\n  | 'advertisement'\n  | 'other';\n\nconst cookieCategories: Array<CookieCategory> = [\n  'necessary',\n  'functional',\n  'performance',\n  'analytics',\n  'advertisement',\n  'other'\n];\n\nexport function getConsentedCookieCategories(\n  cookies: string\n): Array<CookieCategory> {\n  const re = new RegExp('cookieyes-consent=([^;]+)');\n  const rawValue = re.exec(cookies);\n  const cookieValue = rawValue !== null ? unescape(rawValue[1]) : null;\n\n  if (cookieValue) {\n    const cookiePairs = cookieValue.split(',').map(pair => pair.trim());\n    const cookieArr = [];\n    cookiePairs.forEach(pair => {\n      const [key, value] = pair.split(':');\n      if (cookieCategories.includes(key) && value === 'yes') {\n        const category = oneOf(cookieCategories)(key);\n        cookieArr.push(category);\n      }\n    });\n\n    return cookieArr;\n  }\n  return [];\n}\n\nexport function consentGivenForCategory(category: CookieCategory): boolean {\n  return getConsentedCookieCategories(document.cookie).includes(category);\n}\n","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nconst byteToHex = [];\n\nfor (let i = 0; i < 256; ++i) {\n  byteToHex.push((i + 0x100).toString(16).slice(1));\n}\n\nexport function unsafeStringify(arr, offset = 0) {\n  // Note: Be careful editing this code!  It's been tuned for performance\n  // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n  return byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]];\n}\n\nfunction stringify(arr, offset = 0) {\n  const uuid = unsafeStringify(arr, offset); // Consistency check for valid UUID.  If this throws, it's likely due to one\n  // of the following:\n  // - One or more input array values don't map to a hex octet (leading to\n  // \"undefined\" in the uuid)\n  // - Invalid input values for the RFC `version` or `variant` fields\n\n  if (!validate(uuid)) {\n    throw TypeError('Stringified UUID is invalid');\n  }\n\n  return uuid;\n}\n\nexport default stringify;","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n  return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","import validate from './validate.js';\n\nfunction parse(uuid) {\n  if (!validate(uuid)) {\n    throw TypeError('Invalid UUID');\n  }\n\n  let v;\n  const arr = new Uint8Array(16); // Parse ########-....-....-....-............\n\n  arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;\n  arr[1] = v >>> 16 & 0xff;\n  arr[2] = v >>> 8 & 0xff;\n  arr[3] = v & 0xff; // Parse ........-####-....-....-............\n\n  arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;\n  arr[5] = v & 0xff; // Parse ........-....-####-....-............\n\n  arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;\n  arr[7] = v & 0xff; // Parse ........-....-....-####-............\n\n  arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;\n  arr[9] = v & 0xff; // Parse ........-....-....-....-############\n  // (Use \"/\" to avoid 32-bit truncation when bit-shifting high-order bytes)\n\n  arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff;\n  arr[11] = v / 0x100000000 & 0xff;\n  arr[12] = v >>> 24 & 0xff;\n  arr[13] = v >>> 16 & 0xff;\n  arr[14] = v >>> 8 & 0xff;\n  arr[15] = v & 0xff;\n  return arr;\n}\n\nexport default parse;","// Adapted from Chris Veness' SHA1 code at\n// http://www.movable-type.co.uk/scripts/sha1.html\nfunction f(s, x, y, z) {\n  switch (s) {\n    case 0:\n      return x & y ^ ~x & z;\n\n    case 1:\n      return x ^ y ^ z;\n\n    case 2:\n      return x & y ^ x & z ^ y & z;\n\n    case 3:\n      return x ^ y ^ z;\n  }\n}\n\nfunction ROTL(x, n) {\n  return x << n | x >>> 32 - n;\n}\n\nfunction sha1(bytes) {\n  const K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6];\n  const H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0];\n\n  if (typeof bytes === 'string') {\n    const msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n\n    bytes = [];\n\n    for (let i = 0; i < msg.length; ++i) {\n      bytes.push(msg.charCodeAt(i));\n    }\n  } else if (!Array.isArray(bytes)) {\n    // Convert Array-like to Array\n    bytes = Array.prototype.slice.call(bytes);\n  }\n\n  bytes.push(0x80);\n  const l = bytes.length / 4 + 2;\n  const N = Math.ceil(l / 16);\n  const M = new Array(N);\n\n  for (let i = 0; i < N; ++i) {\n    const arr = new Uint32Array(16);\n\n    for (let j = 0; j < 16; ++j) {\n      arr[j] = bytes[i * 64 + j * 4] << 24 | bytes[i * 64 + j * 4 + 1] << 16 | bytes[i * 64 + j * 4 + 2] << 8 | bytes[i * 64 + j * 4 + 3];\n    }\n\n    M[i] = arr;\n  }\n\n  M[N - 1][14] = (bytes.length - 1) * 8 / Math.pow(2, 32);\n  M[N - 1][14] = Math.floor(M[N - 1][14]);\n  M[N - 1][15] = (bytes.length - 1) * 8 & 0xffffffff;\n\n  for (let i = 0; i < N; ++i) {\n    const W = new Uint32Array(80);\n\n    for (let t = 0; t < 16; ++t) {\n      W[t] = M[i][t];\n    }\n\n    for (let t = 16; t < 80; ++t) {\n      W[t] = ROTL(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1);\n    }\n\n    let a = H[0];\n    let b = H[1];\n    let c = H[2];\n    let d = H[3];\n    let e = H[4];\n\n    for (let t = 0; t < 80; ++t) {\n      const s = Math.floor(t / 20);\n      const T = ROTL(a, 5) + f(s, b, c, d) + e + K[s] + W[t] >>> 0;\n      e = d;\n      d = c;\n      c = ROTL(b, 30) >>> 0;\n      b = a;\n      a = T;\n    }\n\n    H[0] = H[0] + a >>> 0;\n    H[1] = H[1] + b >>> 0;\n    H[2] = H[2] + c >>> 0;\n    H[3] = H[3] + d >>> 0;\n    H[4] = H[4] + e >>> 0;\n  }\n\n  return [H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff, H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff, H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff, H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff, H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff];\n}\n\nexport default sha1;","import v35 from './v35.js';\nimport sha1 from './sha1.js';\nconst v5 = v35('v5', 0x50, sha1);\nexport default v5;","import { unsafeStringify } from './stringify.js';\nimport parse from './parse.js';\n\nfunction stringToBytes(str) {\n  str = unescape(encodeURIComponent(str)); // UTF8 escape\n\n  const bytes = [];\n\n  for (let i = 0; i < str.length; ++i) {\n    bytes.push(str.charCodeAt(i));\n  }\n\n  return bytes;\n}\n\nexport const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';\nexport const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';\nexport default function v35(name, version, hashfunc) {\n  function generateUUID(value, namespace, buf, offset) {\n    var _namespace;\n\n    if (typeof value === 'string') {\n      value = stringToBytes(value);\n    }\n\n    if (typeof namespace === 'string') {\n      namespace = parse(namespace);\n    }\n\n    if (((_namespace = namespace) === null || _namespace === void 0 ? void 0 : _namespace.length) !== 16) {\n      throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');\n    } // Compute hash of namespace and value, Per 4.3\n    // Future: Use spread syntax when supported on all platforms, e.g. `bytes =\n    // hashfunc([...namespace, ... value])`\n\n\n    let bytes = new Uint8Array(16 + value.length);\n    bytes.set(namespace);\n    bytes.set(value, namespace.length);\n    bytes = hashfunc(bytes);\n    bytes[6] = bytes[6] & 0x0f | version;\n    bytes[8] = bytes[8] & 0x3f | 0x80;\n\n    if (buf) {\n      offset = offset || 0;\n\n      for (let i = 0; i < 16; ++i) {\n        buf[offset + i] = bytes[i];\n      }\n\n      return buf;\n    }\n\n    return unsafeStringify(bytes);\n  } // Function#name is not settable on some platforms (#270)\n\n\n  try {\n    generateUUID.name = name; // eslint-disable-next-line no-empty\n  } catch (err) {} // For CommonJS default export support\n\n\n  generateUUID.DNS = DNS;\n  generateUUID.URL = URL;\n  return generateUUID;\n}","// @flow\n\nimport { v5 as uuidv5 } from 'uuid';\n\n// NOTE: Keep in sync with lib/tracking/user_id.rb\n\n// These are the bytes from string 'Venuu/tracking_d'.\nconst FIRST_16_BYTES = [\n  86, 101, 110, 117, 117, 47, 116, 114, 97, 99, 107, 105, 110, 103, 95, 100\n];\n// This is the remaining part of 'Venuu/tracking_distinct_id' after the first 16 bytes\nconst REMAINING_STRING = 'istinct_id';\n\nexport function generateUserId({ userEmail }: {| userEmail: string |}): string {\n  // We can only provide 16 bytes worth of data as the UUID v5 namespace value\n  // for the `uuid` npm package, so 'istinct_id' part needs to be prepended\n  // to the uuidv5 input value.\n  //\n  // This way we get the same output on JS side as we would get on Ruby side\n  // if we ran this:\n  //\n  // Digest::UUID.uuid_v5('Venuu/tracking_distinct_id', user_email.downcase.to_s)\n  return uuidv5(\n    `${REMAINING_STRING}${userEmail.toLowerCase()}`,\n    FIRST_16_BYTES\n  );\n}\n","// @flow\n\nimport { retrieve } from 'putki';\nimport { object, record, nullable, id, oneOf } from 'common/json/extract';\n\ntype PageType =\n  | 'conversionintent'\n  | 'offerdetail'\n  | 'home'\n  | 'searchresults'\n  | 'others';\n\ntype GoogleTagParams = {|\n  hrental_id: string,\n  hrental_pagetype: PageType,\n  hrental_totalvalue: number\n|};\n\nconst extractRemarketingDetails = nullable(\n  object(\n    record({\n      page: oneOf(['conversionintent', 'offerdetail', 'home', 'searchresults']),\n      id: nullable(id)\n    })\n  )\n);\n\nexport function retrieveRemarketingProperties(): GoogleTagParams {\n  const remarketingDetails = extractRemarketingDetails(\n    retrieve('remarketing_details')\n  ) || {\n    page: 'others'\n  };\n\n  return {\n    hrental_id: remarketingDetails.id || '',\n    hrental_pagetype: remarketingDetails.page,\n    hrental_totalvalue: 0\n  };\n}\n","// @flow\n\nimport $ from 'jquery';\nimport { retrieve } from 'putki';\nimport currentSite from 'site/currentSite';\nimport getCookies from 'utils/getCookies';\nimport { consentGivenForCategory } from 'utils/cookieConsent';\nimport { generateUserId } from 'utils/trackingUserId';\nimport { trackEvent, trackClicksOn } from 'utils/analytics';\nimport {\n  object,\n  record,\n  nullable,\n  string,\n  withDefault\n} from 'common/json/extract';\n\nimport { retrieveRemarketingProperties } from './analytics/remarketing';\n\nfunction loadAnalytics() {\n  window.analytics.load(retrieve('segment_write_key'));\n\n  window.analytics.setAnonymousId(getCookies()['cheekify_a']);\n}\n\nfunction loadAnalyticsOnConsent() {\n  document.addEventListener('cookieyes_consent_update', eventData => {\n    // $FlowIgnore[prop-missing] -- https://www.cookieyes.com/documentation/events-on-cookie-banner-interactions/\n    const data = eventData.detail;\n    if (data.accepted.includes('analytics')) {\n      loadAnalytics();\n    }\n  });\n}\n\n/**\n * Rebinds tracking of anchor elements with data-venuu-t attributes.\n */\nfunction rebindTrackedLinks() {\n  trackClicksOn($('a[data-venuu-t]:not([data-venuu-t-react])'));\n}\n\n/**\n * Sends an \"Arrived from Campaign\" tracking event, if visitor arrived from\n * a Venuu campaign site.\n */\nfunction trackReferringCampaigns() {\n  type CampaignDataObject = {\n    'Campaign Source': string,\n    'Campaign Name': string,\n    'Campaign Medium'?: string,\n    ...\n  };\n\n  const campaignDataFromUrl: string => null | CampaignDataObject = urlParam => {\n    let url;\n    try {\n      // URLs which purl can't parse might throw. Don't throw in that case.\n      // See https://github.com/venuu/venuu/issues/749\n      url = $.url(urlParam);\n    } catch (e) {\n      return null;\n    }\n\n    const soundboard = url.attr('host').match(/(cheek|putous)\\.venuu.fi/i);\n    if (soundboard) {\n      // Real result should be in the second cell of Array returned by match,\n      // but browsers might differ on whether they return the full match as the\n      // first cell or not. Work around that pre-emptively.\n      const campaignName =\n        soundboard.length === 2 ? soundboard[1] : soundboard[0];\n      return {\n        'Campaign Source': 'Soundboard',\n        'Campaign Name': campaignName.toLowerCase()\n      };\n    } else {\n      return null;\n    }\n  };\n\n  const campaignData = campaignDataFromUrl(window.document.referrer);\n  if (campaignData) {\n    campaignData['Campaign Medium'] = 'Referral';\n    window.analytics.identify(campaignData);\n    trackEvent('Arrived from Campaign', campaignData);\n  }\n}\n\nconst extractUserTrackingData = withDefault(\n  object(\n    record({\n      email: nullable(string),\n      customer_type: nullable(string)\n    })\n  ),\n  { email: null, customer_type: null }\n);\n\n/**\n * Persists the gclid parameter from the url or the _gcl_aw-cookie to our own cookie.\n *\n * This is done to ensure that we are not fully dependent on the poorly documented\n * Google conversion linker and the corresponding _gcl_aw cookie.\n */\nfunction persistGclid() {\n  let gclidFromUrl: ?string;\n  try {\n    // URLs which purl can't parse might throw. Don't throw in that case.\n    gclidFromUrl = $.url().param('gclid');\n  } catch (e) {\n    // no-op\n  }\n\n  const gclidCookie: ?string = $.cookie('_gcl_aw');\n  const gclidFromCookie: ?string = gclidCookie && gclidCookie.split('.')[2];\n\n  const gclid = gclidFromUrl || gclidFromCookie;\n\n  if (gclid) {\n    $.cookie('venuu_gclid', gclid, { expires: 90, path: '/' });\n  }\n}\n\nfunction distinctIdFromUrl() {\n  try {\n    // URLs which purl can't parse might throw. Don't throw in that case.\n    // See https://github.com/venuu/venuu/issues/749\n    return $.url().param('distinct_id');\n  } catch (e) {\n    return null;\n  }\n}\n\nfunction emailIdFromUrl() {\n  let rawEmailDistinctId: string | null = null;\n  try {\n    // URLs which purl can't parse might throw. Don't throw in that case.\n    // See https://github.com/venuu/venuu/issues/749\n    rawEmailDistinctId = $.url().param('email_distinct_id');\n  } catch (e) {\n    // no-op\n  }\n  if (!rawEmailDistinctId) {\n    return null;\n  }\n  return generateUserId({ userEmail: rawEmailDistinctId });\n}\n\n/**\n * The following functions are a part of the improved user tracking scheme.\n * ------------------------------------------------\n * Documentation: https://github.com/venuu/venuu/pull/7368\n */\nfunction identifyUser() {\n  const userIdFromUrl = distinctIdFromUrl();\n  const emailUserIdFromUrl = emailIdFromUrl();\n  const userIdFromCookie = getCookies()['cheekify_uid'];\n  const { email, customer_type: customerType } = extractUserTrackingData(\n    retrieve('user_tracking_data')\n  );\n\n  const commonTraits = {\n    'Application Version': retrieve('application_version'),\n    'Site Key': currentSite().key\n  };\n\n  if (userIdFromCookie && email) {\n    const traits = {\n      ...commonTraits,\n      Source: 'Venuu web app',\n      'Customer Type': customerType,\n      email: email\n    };\n    if (traits['Customer Type'] === null) {\n      // $FlowFixMe[incompatible-type] -- Suppressed during Flow upgrade to 0.201.0. Delete this comment to view the error.\n      delete traits['Customer Type'];\n    }\n    window.analytics.identify(userIdFromCookie, traits);\n  } else if (userIdFromUrl) {\n    // These are returning users\n    // so they should customer identification traits set.\n    window.analytics.identify(userIdFromUrl, commonTraits);\n  } else if (emailUserIdFromUrl) {\n    window.analytics.identify(emailUserIdFromUrl, commonTraits);\n  }\n}\n\nexport default function initializeAnalytics() {\n  if (consentGivenForCategory('analytics')) {\n    loadAnalytics();\n  } else {\n    loadAnalyticsOnConsent();\n  }\n\n  identifyUser();\n\n  const pageOpts = retrieveRemarketingProperties();\n\n  window.analytics.page(pageOpts);\n\n  // Track special links\n  rebindTrackedLinks();\n\n  trackReferringCampaigns();\n\n  persistGclid();\n}\n","// Load all social media plugins only after page has been fully loaded. This\n// reduces the payload needed to get the page visible and running -- not any of\n// these plugins is the reason why the user comes to the site, so they should be\n// lazily loaded.\n//\n// Also, these plugins are loaded only on certain pages on the site, so we need\n// to specify those conditions first using a custom callback.\n\nimport { retrieve } from 'putki';\n\nconst socialMediaInitCondition = () => {\n  const controller = retrieve('controller');\n  const action = retrieve('action');\n\n  if (controller === 'price_requests' && action === 'thanks') {\n    return true;\n  } else {\n    // No-one else needs it.\n    return false;\n  }\n};\n\nconst lazyloadPlugins = () => {\n  if (retrieve('disable_external_js')) return;\n\n  $(window).load(() => {\n    // Facebook\n    window.fbAsyncInit = function () {\n      /* global FB */\n      FB.init({\n        xfbml: true\n      });\n    };\n\n    // Disable warnings about copypasta\n    /* eslint-disable prefer-const, one-var */\n    (function (d, s, id) {\n      let js,\n        fjs = d.getElementsByTagName(s)[0];\n      if (d.getElementById(id)) return;\n      js = d.createElement(s);\n      js.id = id;\n      js.async = true;\n      js.src = `https://connect.facebook.net/${__(\n        'locale_and_country_code'\n      )}/all.js`;\n      fjs.parentNode.insertBefore(js, fjs);\n    })(document, 'script', 'facebook-jssdk');\n    /* eslint-enable */\n  });\n};\n\n$(document).ready(() => {\n  if (socialMediaInitCondition()) {\n    lazyloadPlugins();\n  }\n});\n","const initializeFoundation = () => {\n  /*\n   * FIXME: hack to make Magellan work in a sidebar.\n   * Can be replaced by the offset_by_height option in Foundation 5.5.\n   * https://github.com/zurb/foundation/pull/5801\n   */\n  const sidebarMenuHeight = $('[data-magellan-expedition]').outerHeight();\n\n  const BLANK_RE = /^\\s*$/;\n\n  $(document).foundation({\n    'magellan-expedition': {\n      active_class: 'is-current',\n      destination_threshold: -sidebarMenuHeight,\n      throttle_delay: 100\n    },\n    tooltip: {\n      touch_close_text: __('foundation.tooltip.touch_close_text')\n    },\n    abide: {\n      validators: {\n        valuePlaceholder: function (el, required) {\n          // At least one, non-whitespace character should be present in the textarea.\n          // So newlines alone will not be valid.\n          if (required && BLANK_RE.test(el.value)) {\n            return false;\n          } else if (el.value === el.getAttribute('data-placeholder')) {\n            return false;\n          } else {\n            return true;\n          }\n        }\n      }\n    }\n  });\n\n  function toggleSidebarNavigationBasedOnTopbarVisibility() {\n    const $topBar = $('.top-bar').first();\n    const isTopNavigationExpanded = $topBar.hasClass('expanded');\n    $('.m-navigation').toggleClass(\n      'm-navigation--expanded',\n      isTopNavigationExpanded\n    );\n  }\n\n  const originalTopBarToggle = window.Foundation.libs.topbar.toggle;\n  window.Foundation.libs.topbar.toggle = function (...args) {\n    originalTopBarToggle.call(this, ...args);\n    toggleSidebarNavigationBasedOnTopbarVisibility();\n  };\n};\n\nexport default initializeFoundation;\n","import satisfiesMediaQuery from 'utils/satisfiesMediaQuery';\n\n$(() => {\n  if (!$('.m-box-sticky-container').length) {\n    return;\n  }\n\n  const $sidebar = $('.m-box-sticky-container');\n\n  const $footer = $('.js-sticky-sidebar-end, footer').first();\n  const $wrapper = () => $('.sticky-wrapper');\n  const wrapperWidth = () => $wrapper().outerWidth();\n\n  $sidebar.waypoint('sticky', {\n    stuckClass: 'm-box-sticky',\n    offset: 20,\n    handler: () => $sidebar.css({ width: wrapperWidth() })\n  });\n\n  $footer.waypoint(\n    direction => {\n      if (direction === 'down') {\n        const offset =\n          $footer.offset().top -\n          $wrapper().offset().top -\n          $sidebar.outerHeight();\n        $sidebar.css({\n          position: 'absolute',\n          top: offset,\n          width: wrapperWidth()\n        });\n      } else if (direction === 'up') {\n        $sidebar\n          .removeAttr('style')\n          .css({ width: wrapperWidth() })\n          .addClass('m-box-sticky');\n      }\n    },\n    {\n      offset: () => $sidebar.outerHeight() + 20\n    }\n  );\n\n  const resize = function () {\n    if (satisfiesMediaQuery('middle')) {\n      $.waypoints('enable');\n    } else {\n      $sidebar.attr('style', '').removeClass('m-box-sticky');\n      $wrapper().removeAttr('style');\n      $.waypoints('disable');\n    }\n  };\n  $(window).on('resize', resize);\n  resize();\n});\n","/* eslint-disable local-rules/disallow-side-effects */\n/**\n * Keep references on console methods to avoid triggering patched behaviors\n *\n * NB: in some setup, console could already be patched by another SDK.\n * In this case, some display messages can be sent by the other SDK\n * but we should be safe from infinite loop nonetheless.\n */\nexport var ConsoleApiName = {\n    log: 'log',\n    debug: 'debug',\n    info: 'info',\n    warn: 'warn',\n    error: 'error',\n};\n/**\n * When building JS bundles, some users might use a plugin[1] or configuration[2] to remove\n * \"console.*\" references. This causes some issue as we expect `console.*` to be defined.\n * As a workaround, let's use a variable alias, so those expressions won't be taken into account by\n * simple static analysis.\n *\n * [1]: https://babeljs.io/docs/babel-plugin-transform-remove-console/\n * [2]: https://github.com/terser/terser#compress-options (look for drop_console)\n */\nexport var globalConsole = console;\nexport var originalConsoleMethods = {};\nObject.keys(ConsoleApiName).forEach(function (name) {\n    originalConsoleMethods[name] = globalConsole[name];\n});\nvar PREFIX = 'Datadog Browser SDK:';\nexport var display = {\n    debug: originalConsoleMethods.debug.bind(globalConsole, PREFIX),\n    log: originalConsoleMethods.log.bind(globalConsole, PREFIX),\n    info: originalConsoleMethods.info.bind(globalConsole, PREFIX),\n    warn: originalConsoleMethods.warn.bind(globalConsole, PREFIX),\n    error: originalConsoleMethods.error.bind(globalConsole, PREFIX),\n};\nexport var DOCS_ORIGIN = 'https://docs.datadoghq.com';\nexport var DOCS_TROUBLESHOOTING = \"\".concat(DOCS_ORIGIN, \"/real_user_monitoring/browser/troubleshooting\");\nexport var MORE_DETAILS = 'More details:';\n//# sourceMappingURL=display.js.map","import { display } from './display';\nexport function catchUserErrors(fn, errorMsg) {\n    return function () {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        try {\n            return fn.apply(void 0, args);\n        }\n        catch (err) {\n            display.error(errorMsg, err);\n        }\n    };\n}\n//# sourceMappingURL=catchUserErrors.js.map","var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n        if (ar || !(i in from)) {\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n            ar[i] = from[i];\n        }\n    }\n    return to.concat(ar || Array.prototype.slice.call(from));\n};\nimport { display } from './display';\nvar onMonitorErrorCollected;\nvar debugMode = false;\nexport function startMonitorErrorCollection(newOnMonitorErrorCollected) {\n    onMonitorErrorCollected = newOnMonitorErrorCollected;\n}\nexport function setDebugMode(newDebugMode) {\n    debugMode = newDebugMode;\n}\nexport function resetMonitor() {\n    onMonitorErrorCollected = undefined;\n    debugMode = false;\n}\nexport function monitored(_, __, descriptor) {\n    var originalMethod = descriptor.value;\n    descriptor.value = function () {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        var decorated = onMonitorErrorCollected ? monitor(originalMethod) : originalMethod;\n        return decorated.apply(this, args);\n    };\n}\nexport function monitor(fn) {\n    return function () {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n        return callMonitored(fn, this, arguments);\n    }; // consider output type has input type\n}\nexport function callMonitored(fn, context, args) {\n    try {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n        return fn.apply(context, args);\n    }\n    catch (e) {\n        displayIfDebugEnabled(e);\n        if (onMonitorErrorCollected) {\n            try {\n                onMonitorErrorCollected(e);\n            }\n            catch (e) {\n                displayIfDebugEnabled(e);\n            }\n        }\n    }\n}\nexport function displayIfDebugEnabled() {\n    var args = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        args[_i] = arguments[_i];\n    }\n    if (debugMode) {\n        display.error.apply(display, __spreadArray(['[MONITOR]'], args, false));\n    }\n}\n//# sourceMappingURL=monitor.js.map","export function includes(candidate, search) {\n    return candidate.indexOf(search) !== -1;\n}\nexport function arrayFrom(arrayLike) {\n    if (Array.from) {\n        return Array.from(arrayLike);\n    }\n    var array = [];\n    if (arrayLike instanceof Set) {\n        arrayLike.forEach(function (item) { return array.push(item); });\n    }\n    else {\n        for (var i = 0; i < arrayLike.length; i++) {\n            array.push(arrayLike[i]);\n        }\n    }\n    return array;\n}\nexport function find(array, predicate) {\n    for (var i = 0; i < array.length; i += 1) {\n        var item = array[i];\n        if (predicate(item, i)) {\n            return item;\n        }\n    }\n    return undefined;\n}\nexport function findLast(array, predicate) {\n    for (var i = array.length - 1; i >= 0; i -= 1) {\n        var item = array[i];\n        if (predicate(item, i, array)) {\n            return item;\n        }\n    }\n    return undefined;\n}\nexport function forEach(list, callback) {\n    Array.prototype.forEach.call(list, callback);\n}\nexport function objectValues(object) {\n    return Object.keys(object).map(function (key) { return object[key]; });\n}\nexport function objectEntries(object) {\n    return Object.keys(object).map(function (key) { return [key, object[key]]; });\n}\nexport function startsWith(candidate, search) {\n    return candidate.slice(0, search.length) === search;\n}\nexport function endsWith(candidate, search) {\n    return candidate.slice(-search.length) === search;\n}\nexport function assign(target) {\n    var toAssign = [];\n    for (var _i = 1; _i < arguments.length; _i++) {\n        toAssign[_i - 1] = arguments[_i];\n    }\n    toAssign.forEach(function (source) {\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//# sourceMappingURL=polyfills.js.map","/**\n * inspired by https://mathiasbynens.be/notes/globalthis\n */\nexport function getGlobalObject() {\n    if (typeof globalThis === 'object') {\n        return globalThis;\n    }\n    Object.defineProperty(Object.prototype, '_dd_temp_', {\n        get: function () {\n            return this;\n        },\n        configurable: true,\n    });\n    // @ts-ignore _dd_temp is defined using defineProperty\n    var globalObject = _dd_temp_;\n    // @ts-ignore _dd_temp is defined using defineProperty\n    delete Object.prototype._dd_temp_;\n    if (typeof globalObject !== 'object') {\n        // on safari _dd_temp_ is available on window but not globally\n        // fallback on other browser globals check\n        if (typeof self === 'object') {\n            globalObject = self;\n        }\n        else if (typeof window === 'object') {\n            globalObject = window;\n        }\n        else {\n            globalObject = {};\n        }\n    }\n    return globalObject;\n}\n//# sourceMappingURL=getGlobalObject.js.map","export var ONE_KIBI_BYTE = 1024;\nexport var ONE_MEBI_BYTE = 1024 * ONE_KIBI_BYTE;\n// eslint-disable-next-line no-control-regex\nvar HAS_MULTI_BYTES_CHARACTERS = /[^\\u0000-\\u007F]/;\nexport function computeBytesCount(candidate) {\n    // Accurate bytes count computations can degrade performances when there is a lot of events to process\n    if (!HAS_MULTI_BYTES_CHARACTERS.test(candidate)) {\n        return candidate.length;\n    }\n    if (window.TextEncoder !== undefined) {\n        return new TextEncoder().encode(candidate).length;\n    }\n    return new Blob([candidate]).size;\n}\nexport function concatBuffers(buffers) {\n    var length = buffers.reduce(function (total, buffer) { return total + buffer.length; }, 0);\n    var result = new Uint8Array(length);\n    var offset = 0;\n    for (var _i = 0, buffers_1 = buffers; _i < buffers_1.length; _i++) {\n        var buffer = buffers_1[_i];\n        result.set(buffer, offset);\n        offset += buffer.length;\n    }\n    return result;\n}\n//# sourceMappingURL=byteUtils.js.map","import { getGlobalObject } from './getGlobalObject';\n/**\n * Gets the original value for a DOM API that was potentially patched by Zone.js.\n *\n * Zone.js[1] is a library that patches a bunch of JS and DOM APIs. It usually stores the original\n * value of the patched functions/constructors/methods in a hidden property prefixed by\n * __zone_symbol__.\n *\n * In multiple occasions, we observed that Zone.js is the culprit of important issues leading to\n * browser resource exhaustion (memory leak, high CPU usage). This method is used as a workaround to\n * use the original DOM API instead of the one patched by Zone.js.\n *\n * [1]: https://github.com/angular/angular/tree/main/packages/zone.js\n */\nexport function getZoneJsOriginalValue(target, name) {\n    var browserWindow = getGlobalObject();\n    var original;\n    if (browserWindow.Zone && typeof browserWindow.Zone.__symbol__ === 'function') {\n        original = target[browserWindow.Zone.__symbol__(name)];\n    }\n    if (!original) {\n        original = target[name];\n    }\n    return original;\n}\n//# sourceMappingURL=getZoneJsOriginalValue.js.map","import { getZoneJsOriginalValue } from './getZoneJsOriginalValue';\nimport { monitor } from './monitor';\nimport { getGlobalObject } from './getGlobalObject';\nexport function setTimeout(callback, delay) {\n    return getZoneJsOriginalValue(getGlobalObject(), 'setTimeout')(monitor(callback), delay);\n}\nexport function clearTimeout(timeoutId) {\n    getZoneJsOriginalValue(getGlobalObject(), 'clearTimeout')(timeoutId);\n}\nexport function setInterval(callback, delay) {\n    return getZoneJsOriginalValue(getGlobalObject(), 'setInterval')(monitor(callback), delay);\n}\nexport function clearInterval(timeoutId) {\n    getZoneJsOriginalValue(getGlobalObject(), 'clearInterval')(timeoutId);\n}\n//# sourceMappingURL=timer.js.map","import { setTimeout, clearTimeout } from '../timer';\n// use lodash API\nexport function throttle(fn, wait, options) {\n    var needLeadingExecution = options && options.leading !== undefined ? options.leading : true;\n    var needTrailingExecution = options && options.trailing !== undefined ? options.trailing : true;\n    var inWaitPeriod = false;\n    var pendingExecutionWithParameters;\n    var pendingTimeoutId;\n    return {\n        throttled: function () {\n            var parameters = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                parameters[_i] = arguments[_i];\n            }\n            if (inWaitPeriod) {\n                pendingExecutionWithParameters = parameters;\n                return;\n            }\n            if (needLeadingExecution) {\n                fn.apply(void 0, parameters);\n            }\n            else {\n                pendingExecutionWithParameters = parameters;\n            }\n            inWaitPeriod = true;\n            pendingTimeoutId = setTimeout(function () {\n                if (needTrailingExecution && pendingExecutionWithParameters) {\n                    fn.apply(void 0, pendingExecutionWithParameters);\n                }\n                inWaitPeriod = false;\n                pendingExecutionWithParameters = undefined;\n            }, wait);\n        },\n        cancel: function () {\n            clearTimeout(pendingTimeoutId);\n            inWaitPeriod = false;\n            pendingExecutionWithParameters = undefined;\n        },\n    };\n}\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nexport function noop() { }\n//# sourceMappingURL=functionUtils.js.map","import { noop } from '../utils/functionUtils';\n/**\n * Custom implementation of JSON.stringify that ignores some toJSON methods. We need to do that\n * because some sites badly override toJSON on certain objects. Removing all toJSON methods from\n * nested values would be too costly, so we just detach them from the root value, and native classes\n * used to build JSON values (Array and Object).\n *\n * Note: this still assumes that JSON.stringify is correct.\n */\nexport function jsonStringify(value, replacer, space) {\n    if (typeof value !== 'object' || value === null) {\n        return JSON.stringify(value);\n    }\n    // Note: The order matter here. We need to detach toJSON methods on parent classes before their\n    // subclasses.\n    var restoreObjectPrototypeToJson = detachToJsonMethod(Object.prototype);\n    var restoreArrayPrototypeToJson = detachToJsonMethod(Array.prototype);\n    var restoreValuePrototypeToJson = detachToJsonMethod(Object.getPrototypeOf(value));\n    var restoreValueToJson = detachToJsonMethod(value);\n    try {\n        return JSON.stringify(value, replacer, space);\n    }\n    catch (_a) {\n        return '<error: unable to serialize object>';\n    }\n    finally {\n        restoreObjectPrototypeToJson();\n        restoreArrayPrototypeToJson();\n        restoreValuePrototypeToJson();\n        restoreValueToJson();\n    }\n}\nexport function detachToJsonMethod(value) {\n    var object = value;\n    var objectToJson = object.toJSON;\n    if (objectToJson) {\n        delete object.toJSON;\n        return function () {\n            object.toJSON = objectToJson;\n        };\n    }\n    return noop;\n}\n//# sourceMappingURL=jsonStringify.js.map","import { assign } from './polyfills';\nexport function shallowClone(object) {\n    return assign({}, object);\n}\nexport function objectHasValue(object, value) {\n    return Object.keys(object).some(function (key) { return object[key] === value; });\n}\nexport function isEmptyObject(object) {\n    return Object.keys(object).length === 0;\n}\nexport function mapValues(object, fn) {\n    var newObject = {};\n    for (var _i = 0, _a = Object.keys(object); _i < _a.length; _i++) {\n        var key = _a[_i];\n        newObject[key] = fn(object[key]);\n    }\n    return newObject;\n}\n//# sourceMappingURL=objectUtils.js.map","import { ONE_KIBI_BYTE, computeBytesCount } from '../../tools/utils/byteUtils';\nimport { throttle } from '../../tools/utils/functionUtils';\nimport { jsonStringify } from '../../tools/serialisation/jsonStringify';\nimport { DOCS_TROUBLESHOOTING, MORE_DETAILS, display } from '../../tools/display';\nimport { isEmptyObject } from '../../tools/utils/objectUtils';\n// RUM and logs batch bytes limit is 16KB\n// ensure that we leave room for other event attributes and maintain a decent amount of event per batch\n// (3KB (customer data) + 1KB (other attributes)) * 4 (events per batch) = 16KB\nexport var CUSTOMER_DATA_BYTES_LIMIT = 3 * ONE_KIBI_BYTE;\n// We observed that the compression ratio is around 8 in general, but we also want to keep a margin\n// because some data might not be compressed (ex: last view update on page exit). We chose 16KiB\n// because it is also the limit of the 'batchBytesCount' that we use for RUM and Logs data, but this\n// is a bit arbitrary.\nexport var CUSTOMER_COMPRESSED_DATA_BYTES_LIMIT = 16 * ONE_KIBI_BYTE;\nexport var BYTES_COMPUTATION_THROTTLING_DELAY = 200;\nexport function createCustomerDataTrackerManager(compressionStatus) {\n    if (compressionStatus === void 0) { compressionStatus = 2 /* CustomerDataCompressionStatus.Disabled */; }\n    var customerDataTrackers = new Map();\n    var alreadyWarned = false;\n    function checkCustomerDataLimit(initialBytesCount) {\n        if (initialBytesCount === void 0) { initialBytesCount = 0; }\n        if (alreadyWarned || compressionStatus === 0 /* CustomerDataCompressionStatus.Unknown */) {\n            return;\n        }\n        var bytesCountLimit = compressionStatus === 2 /* CustomerDataCompressionStatus.Disabled */\n            ? CUSTOMER_DATA_BYTES_LIMIT\n            : CUSTOMER_COMPRESSED_DATA_BYTES_LIMIT;\n        var bytesCount = initialBytesCount;\n        customerDataTrackers.forEach(function (tracker) {\n            bytesCount += tracker.getBytesCount();\n        });\n        if (bytesCount > bytesCountLimit) {\n            displayCustomerDataLimitReachedWarning(bytesCountLimit);\n            alreadyWarned = true;\n        }\n    }\n    return {\n        /**\n         * Creates a detached tracker. The manager will not store a reference to that tracker, and the\n         * bytes count will be counted independently from other detached trackers.\n         *\n         * This is particularly useful when we don't know when the tracker will be unused, so we don't\n         * leak memory (ex: when used in Logger instances).\n         */\n        createDetachedTracker: function () {\n            var tracker = createCustomerDataTracker(function () { return checkCustomerDataLimit(tracker.getBytesCount()); });\n            return tracker;\n        },\n        /**\n         * Creates a tracker if it doesn't exist, and returns it.\n         */\n        getOrCreateTracker: function (type) {\n            if (!customerDataTrackers.has(type)) {\n                customerDataTrackers.set(type, createCustomerDataTracker(checkCustomerDataLimit));\n            }\n            return customerDataTrackers.get(type);\n        },\n        setCompressionStatus: function (newCompressionStatus) {\n            if (compressionStatus === 0 /* CustomerDataCompressionStatus.Unknown */) {\n                compressionStatus = newCompressionStatus;\n                checkCustomerDataLimit();\n            }\n        },\n        getCompressionStatus: function () { return compressionStatus; },\n        stop: function () {\n            customerDataTrackers.forEach(function (tracker) { return tracker.stop(); });\n            customerDataTrackers.clear();\n        },\n    };\n}\nexport function createCustomerDataTracker(checkCustomerDataLimit) {\n    var bytesCountCache = 0;\n    // Throttle the bytes computation to minimize the impact on performance.\n    // Especially useful if the user call context APIs synchronously multiple times in a row\n    var _a = throttle(function (context) {\n        bytesCountCache = computeBytesCount(jsonStringify(context));\n        checkCustomerDataLimit();\n    }, BYTES_COMPUTATION_THROTTLING_DELAY), computeBytesCountThrottled = _a.throttled, cancelComputeBytesCount = _a.cancel;\n    var resetBytesCount = function () {\n        cancelComputeBytesCount();\n        bytesCountCache = 0;\n    };\n    return {\n        updateCustomerData: function (context) {\n            if (isEmptyObject(context)) {\n                resetBytesCount();\n            }\n            else {\n                computeBytesCountThrottled(context);\n            }\n        },\n        resetCustomerData: resetBytesCount,\n        getBytesCount: function () { return bytesCountCache; },\n        stop: function () {\n            cancelComputeBytesCount();\n        },\n    };\n}\nfunction displayCustomerDataLimitReachedWarning(bytesCountLimit) {\n    display.warn(\"Customer data exceeds the recommended \".concat(bytesCountLimit / ONE_KIBI_BYTE, \"KiB threshold. \").concat(MORE_DETAILS, \" \").concat(DOCS_TROUBLESHOOTING, \"/#customer-data-exceeds-the-recommended-threshold-warning\"));\n}\n//# sourceMappingURL=customerDataTracker.js.map","/**\n * Similar to `typeof`, but distinguish plain objects from `null` and arrays\n */\nexport function getType(value) {\n    if (value === null) {\n        return 'null';\n    }\n    if (Array.isArray(value)) {\n        return 'array';\n    }\n    return typeof value;\n}\n//# sourceMappingURL=typeUtils.js.map","import { getType } from './utils/typeUtils';\n/**\n * Iterate over source and affect its sub values into destination, recursively.\n * If the source and destination can't be merged, return source.\n */\nexport function mergeInto(destination, source, circularReferenceChecker) {\n    if (circularReferenceChecker === void 0) { circularReferenceChecker = createCircularReferenceChecker(); }\n    // ignore the source if it is undefined\n    if (source === undefined) {\n        return destination;\n    }\n    if (typeof source !== 'object' || source === null) {\n        // primitive values - just return source\n        return source;\n    }\n    else if (source instanceof Date) {\n        return new Date(source.getTime());\n    }\n    else if (source instanceof RegExp) {\n        var flags = source.flags ||\n            // old browsers compatibility\n            [\n                source.global ? 'g' : '',\n                source.ignoreCase ? 'i' : '',\n                source.multiline ? 'm' : '',\n                source.sticky ? 'y' : '',\n                source.unicode ? 'u' : '',\n            ].join('');\n        return new RegExp(source.source, flags);\n    }\n    if (circularReferenceChecker.hasAlreadyBeenSeen(source)) {\n        // remove circular references\n        return undefined;\n    }\n    else if (Array.isArray(source)) {\n        var merged_1 = Array.isArray(destination) ? destination : [];\n        for (var i = 0; i < source.length; ++i) {\n            merged_1[i] = mergeInto(merged_1[i], source[i], circularReferenceChecker);\n        }\n        return merged_1;\n    }\n    var merged = getType(destination) === 'object' ? destination : {};\n    for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n            merged[key] = mergeInto(merged[key], source[key], circularReferenceChecker);\n        }\n    }\n    return merged;\n}\n/**\n * A simplistic implementation of a deep clone algorithm.\n * Caveats:\n * - It doesn't maintain prototype chains - don't use with instances of custom classes.\n * - It doesn't handle Map and Set\n */\nexport function deepClone(value) {\n    return mergeInto(undefined, value);\n}\nexport function combine() {\n    var sources = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        sources[_i] = arguments[_i];\n    }\n    var destination;\n    for (var _a = 0, sources_1 = sources; _a < sources_1.length; _a++) {\n        var source = sources_1[_a];\n        // Ignore any undefined or null sources.\n        if (source === undefined || source === null) {\n            continue;\n        }\n        destination = mergeInto(destination, source);\n    }\n    return destination;\n}\nfunction createCircularReferenceChecker() {\n    if (typeof WeakSet !== 'undefined') {\n        var set_1 = new WeakSet();\n        return {\n            hasAlreadyBeenSeen: function (value) {\n                var has = set_1.has(value);\n                if (!has) {\n                    set_1.add(value);\n                }\n                return has;\n            },\n        };\n    }\n    var array = [];\n    return {\n        hasAlreadyBeenSeen: function (value) {\n            var has = array.indexOf(value) >= 0;\n            if (!has) {\n                array.push(value);\n            }\n            return has;\n        },\n    };\n}\n//# sourceMappingURL=mergeInto.js.map","import { display } from '../display';\nimport { ONE_KIBI_BYTE } from '../utils/byteUtils';\nimport { detachToJsonMethod } from './jsonStringify';\n// The maximum size of a single event is 256KiB. By default, we ensure that user-provided data\n// going through sanitize fits inside our events, while leaving room for other contexts, metadata, ...\nvar SANITIZE_DEFAULT_MAX_CHARACTER_COUNT = 220 * ONE_KIBI_BYTE;\n// Symbol for the root element of the JSONPath used for visited objects\nvar JSON_PATH_ROOT_ELEMENT = '$';\n// When serializing (using JSON.stringify) a key of an object, { key: 42 } gets wrapped in quotes as \"key\".\n// With the separator (:), we need to add 3 characters to the count.\nvar KEY_DECORATION_LENGTH = 3;\nexport function sanitize(source, maxCharacterCount) {\n    if (maxCharacterCount === void 0) { maxCharacterCount = SANITIZE_DEFAULT_MAX_CHARACTER_COUNT; }\n    // Unbind any toJSON function we may have on [] or {} prototypes\n    var restoreObjectPrototypeToJson = detachToJsonMethod(Object.prototype);\n    var restoreArrayPrototypeToJson = detachToJsonMethod(Array.prototype);\n    // Initial call to sanitizeProcessor - will populate containerQueue if source is an Array or a plain Object\n    var containerQueue = [];\n    var visitedObjectsWithPath = new WeakMap();\n    var sanitizedData = sanitizeProcessor(source, JSON_PATH_ROOT_ELEMENT, undefined, containerQueue, visitedObjectsWithPath);\n    var serializedSanitizedData = JSON.stringify(sanitizedData);\n    var accumulatedCharacterCount = serializedSanitizedData ? serializedSanitizedData.length : 0;\n    if (accumulatedCharacterCount > maxCharacterCount) {\n        warnOverCharacterLimit(maxCharacterCount, 'discarded', source);\n        return undefined;\n    }\n    while (containerQueue.length > 0 && accumulatedCharacterCount < maxCharacterCount) {\n        var containerToProcess = containerQueue.shift();\n        var separatorLength = 0; // 0 for the first element, 1 for subsequent elements\n        // Arrays and Objects have to be handled distinctly to ensure\n        // we do not pick up non-numerical properties from Arrays\n        if (Array.isArray(containerToProcess.source)) {\n            for (var key = 0; key < containerToProcess.source.length; key++) {\n                var targetData = sanitizeProcessor(containerToProcess.source[key], containerToProcess.path, key, containerQueue, visitedObjectsWithPath);\n                if (targetData !== undefined) {\n                    accumulatedCharacterCount += JSON.stringify(targetData).length;\n                }\n                else {\n                    // When an element of an Array (targetData) is undefined, it is serialized as null:\n                    // JSON.stringify([undefined]) => '[null]' - This accounts for 4 characters\n                    accumulatedCharacterCount += 4;\n                }\n                accumulatedCharacterCount += separatorLength;\n                separatorLength = 1;\n                if (accumulatedCharacterCount > maxCharacterCount) {\n                    warnOverCharacterLimit(maxCharacterCount, 'truncated', source);\n                    break;\n                }\n                ;\n                containerToProcess.target[key] = targetData;\n            }\n        }\n        else {\n            for (var key in containerToProcess.source) {\n                if (Object.prototype.hasOwnProperty.call(containerToProcess.source, key)) {\n                    var targetData = sanitizeProcessor(containerToProcess.source[key], containerToProcess.path, key, containerQueue, visitedObjectsWithPath);\n                    // When a property of an object has an undefined value, it will be dropped during serialization:\n                    // JSON.stringify({a:undefined}) => '{}'\n                    if (targetData !== undefined) {\n                        accumulatedCharacterCount +=\n                            JSON.stringify(targetData).length + separatorLength + key.length + KEY_DECORATION_LENGTH;\n                        separatorLength = 1;\n                    }\n                    if (accumulatedCharacterCount > maxCharacterCount) {\n                        warnOverCharacterLimit(maxCharacterCount, 'truncated', source);\n                        break;\n                    }\n                    ;\n                    containerToProcess.target[key] = targetData;\n                }\n            }\n        }\n    }\n    // Rebind detached toJSON functions\n    restoreObjectPrototypeToJson();\n    restoreArrayPrototypeToJson();\n    return sanitizedData;\n}\n/**\n * Internal function to factorize the process common to the\n * initial call to sanitize, and iterations for Arrays and Objects\n *\n */\nfunction sanitizeProcessor(source, parentPath, key, queue, visitedObjectsWithPath) {\n    // Start by handling toJSON, as we want to sanitize its output\n    var sourceToSanitize = tryToApplyToJSON(source);\n    if (!sourceToSanitize || typeof sourceToSanitize !== 'object') {\n        return sanitizePrimitivesAndFunctions(sourceToSanitize);\n    }\n    var sanitizedSource = sanitizeObjects(sourceToSanitize);\n    if (sanitizedSource !== '[Object]' && sanitizedSource !== '[Array]' && sanitizedSource !== '[Error]') {\n        return sanitizedSource;\n    }\n    // Handle potential cyclic references\n    // We need to use source as sourceToSanitize could be a reference to a new object\n    // At this stage, we know the source is an object type\n    var sourceAsObject = source;\n    if (visitedObjectsWithPath.has(sourceAsObject)) {\n        return \"[Reference seen at \".concat(visitedObjectsWithPath.get(sourceAsObject), \"]\");\n    }\n    // Add processed source to queue\n    var currentPath = key !== undefined ? \"\".concat(parentPath, \".\").concat(key) : parentPath;\n    var target = Array.isArray(sourceToSanitize) ? [] : {};\n    visitedObjectsWithPath.set(sourceAsObject, currentPath);\n    queue.push({ source: sourceToSanitize, target: target, path: currentPath });\n    return target;\n}\n/**\n * Handles sanitization of simple, non-object types\n *\n */\nfunction sanitizePrimitivesAndFunctions(value) {\n    // BigInt cannot be serialized by JSON.stringify(), convert it to a string representation\n    if (typeof value === 'bigint') {\n        return \"[BigInt] \".concat(value.toString());\n    }\n    // Functions cannot be serialized by JSON.stringify(). Moreover, if a faulty toJSON is present, it needs to be converted\n    // so it won't prevent stringify from serializing later\n    if (typeof value === 'function') {\n        return \"[Function] \".concat(value.name || 'unknown');\n    }\n    // JSON.stringify() does not serialize symbols.\n    if (typeof value === 'symbol') {\n        return \"[Symbol] \".concat(value.description || value.toString());\n    }\n    return value;\n}\n/**\n * Handles sanitization of object types\n *\n * LIMITATIONS\n * - If a class defines a toStringTag Symbol, it will fall in the catch-all method and prevent enumeration of properties.\n * To avoid this, a toJSON method can be defined.\n * - IE11 does not return a distinct type for objects such as Map, WeakMap, ... These objects will pass through and their\n * properties enumerated if any.\n *\n */\nfunction sanitizeObjects(value) {\n    try {\n        // Handle events - Keep a simple implementation to avoid breaking changes\n        if (value instanceof Event) {\n            return {\n                isTrusted: value.isTrusted,\n            };\n        }\n        // Handle all remaining object types in a generic way\n        var result = Object.prototype.toString.call(value);\n        var match = result.match(/\\[object (.*)\\]/);\n        if (match && match[1]) {\n            return \"[\".concat(match[1], \"]\");\n        }\n    }\n    catch (_a) {\n        // If the previous serialization attempts failed, and we cannot convert using\n        // Object.prototype.toString, declare the value unserializable\n    }\n    return '[Unserializable]';\n}\n/**\n * Checks if a toJSON function exists and tries to execute it\n *\n */\nfunction tryToApplyToJSON(value) {\n    var object = value;\n    if (object && typeof object.toJSON === 'function') {\n        try {\n            return object.toJSON();\n        }\n        catch (_a) {\n            // If toJSON fails, we continue by trying to serialize the value manually\n        }\n    }\n    return value;\n}\n/**\n * Helper function to display the warning when the accumulated character count is over the limit\n */\nfunction warnOverCharacterLimit(maxCharacterCount, changeType, source) {\n    display.warn(\"The data provided has been \".concat(changeType, \" as it is over the limit of \").concat(maxCharacterCount, \" characters:\"), source);\n}\n//# sourceMappingURL=sanitize.js.map","// eslint-disable-next-line no-restricted-syntax\nvar Observable = /** @class */ (function () {\n    function Observable(onFirstSubscribe) {\n        this.onFirstSubscribe = onFirstSubscribe;\n        this.observers = [];\n    }\n    Observable.prototype.subscribe = function (f) {\n        var _this = this;\n        this.observers.push(f);\n        if (this.observers.length === 1 && this.onFirstSubscribe) {\n            this.onLastUnsubscribe = this.onFirstSubscribe(this) || undefined;\n        }\n        return {\n            unsubscribe: function () {\n                _this.observers = _this.observers.filter(function (other) { return f !== other; });\n                if (!_this.observers.length && _this.onLastUnsubscribe) {\n                    _this.onLastUnsubscribe();\n                }\n            },\n        };\n    };\n    Observable.prototype.notify = function (data) {\n        this.observers.forEach(function (observer) { return observer(data); });\n    };\n    return Observable;\n}());\nexport { Observable };\nexport function mergeObservables() {\n    var observables = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        observables[_i] = arguments[_i];\n    }\n    return new Observable(function (globalObservable) {\n        var subscriptions = observables.map(function (observable) {\n            return observable.subscribe(function (data) { return globalObservable.notify(data); });\n        });\n        return function () { return subscriptions.forEach(function (subscription) { return subscription.unsubscribe(); }); };\n    });\n}\n//# sourceMappingURL=observable.js.map","import { deepClone } from '../../tools/mergeInto';\nimport { getType } from '../../tools/utils/typeUtils';\nimport { sanitize } from '../../tools/serialisation/sanitize';\nimport { Observable } from '../../tools/observable';\nexport function createContextManager(customerDataTracker) {\n    var context = {};\n    var changeObservable = new Observable();\n    var contextManager = {\n        getContext: function () { return deepClone(context); },\n        setContext: function (newContext) {\n            if (getType(newContext) === 'object') {\n                context = sanitize(newContext);\n                customerDataTracker === null || customerDataTracker === void 0 ? void 0 : customerDataTracker.updateCustomerData(context);\n            }\n            else {\n                contextManager.clearContext();\n            }\n            changeObservable.notify();\n        },\n        setContextProperty: function (key, property) {\n            context[key] = sanitize(property);\n            customerDataTracker === null || customerDataTracker === void 0 ? void 0 : customerDataTracker.updateCustomerData(context);\n            changeObservable.notify();\n        },\n        removeContextProperty: function (key) {\n            delete context[key];\n            customerDataTracker === null || customerDataTracker === void 0 ? void 0 : customerDataTracker.updateCustomerData(context);\n            changeObservable.notify();\n        },\n        clearContext: function () {\n            context = {};\n            customerDataTracker === null || customerDataTracker === void 0 ? void 0 : customerDataTracker.resetCustomerData();\n            changeObservable.notify();\n        },\n        changeObservable: changeObservable,\n    };\n    return contextManager;\n}\n//# sourceMappingURL=contextManager.js.map","import { Observable } from '../tools/observable';\nexport var TrackingConsent = {\n    GRANTED: 'granted',\n    NOT_GRANTED: 'not-granted',\n};\nexport function createTrackingConsentState(currentConsent) {\n    var observable = new Observable();\n    return {\n        tryToInit: function (trackingConsent) {\n            if (!currentConsent) {\n                currentConsent = trackingConsent;\n            }\n        },\n        update: function (trackingConsent) {\n            currentConsent = trackingConsent;\n            observable.notify();\n        },\n        isGranted: function () {\n            return currentConsent === TrackingConsent.GRANTED;\n        },\n        observable: observable,\n    };\n}\n//# sourceMappingURL=trackingConsent.js.map","import { monitor } from '../tools/monitor';\nimport { getZoneJsOriginalValue } from '../tools/getZoneJsOriginalValue';\n/**\n * Add an event listener to an event target object (Window, Element, mock object...).  This provides\n * a few conveniences compared to using `element.addEventListener` directly:\n *\n * * supports IE11 by: using an option object only if needed and emulating the `once` option\n *\n * * wraps the listener with a `monitor` function\n *\n * * returns a `stop` function to remove the listener\n */\nexport function addEventListener(configuration, eventTarget, eventName, listener, options) {\n    return addEventListeners(configuration, eventTarget, [eventName], listener, options);\n}\n/**\n * Add event listeners to an event target object (Window, Element, mock object...).  This provides\n * a few conveniences compared to using `element.addEventListener` directly:\n *\n * * supports IE11 by: using an option object only if needed and emulating the `once` option\n *\n * * wraps the listener with a `monitor` function\n *\n * * returns a `stop` function to remove the listener\n *\n * * with `once: true`, the listener will be called at most once, even if different events are listened\n */\nexport function addEventListeners(configuration, eventTarget, eventNames, listener, _a) {\n    var _b = _a === void 0 ? {} : _a, once = _b.once, capture = _b.capture, passive = _b.passive;\n    var listenerWithMonitor = monitor(function (event) {\n        if (!event.isTrusted && !event.__ddIsTrusted && !configuration.allowUntrustedEvents) {\n            return;\n        }\n        if (once) {\n            stop();\n        }\n        listener(event);\n    });\n    var options = passive ? { capture: capture, passive: passive } : capture;\n    // Use the window.EventTarget.prototype when possible to avoid wrong overrides (e.g: https://github.com/salesforce/lwc/issues/1824)\n    var listenerTarget = window.EventTarget && eventTarget instanceof EventTarget ? window.EventTarget.prototype : eventTarget;\n    var add = getZoneJsOriginalValue(listenerTarget, 'addEventListener');\n    eventNames.forEach(function (eventName) { return add.call(eventTarget, eventName, listenerWithMonitor, options); });\n    function stop() {\n        var remove = getZoneJsOriginalValue(listenerTarget, 'removeEventListener');\n        eventNames.forEach(function (eventName) { return remove.call(eventTarget, eventName, listenerWithMonitor, options); });\n    }\n    return {\n        stop: stop,\n    };\n}\n//# sourceMappingURL=addEventListener.js.map","import { addEventListener } from '../../browser/addEventListener';\nimport { combine } from '../../tools/mergeInto';\nvar CONTEXT_STORE_KEY_PREFIX = '_dd_c';\nvar storageListeners = [];\nexport function storeContextManager(configuration, contextManager, productKey, customerDataType) {\n    var storageKey = buildStorageKey(productKey, customerDataType);\n    storageListeners.push(addEventListener(configuration, window, \"storage\" /* DOM_EVENT.STORAGE */, function (_a) {\n        var key = _a.key;\n        if (storageKey === key) {\n            synchronizeWithStorage();\n        }\n    }));\n    contextManager.changeObservable.subscribe(dumpToStorage);\n    contextManager.setContext(combine(getFromStorage(), contextManager.getContext()));\n    function synchronizeWithStorage() {\n        contextManager.setContext(getFromStorage());\n    }\n    function dumpToStorage() {\n        localStorage.setItem(storageKey, JSON.stringify(contextManager.getContext()));\n    }\n    function getFromStorage() {\n        var rawContext = localStorage.getItem(storageKey);\n        return rawContext !== null ? JSON.parse(rawContext) : {};\n    }\n}\nexport function buildStorageKey(productKey, customerDataType) {\n    return \"\".concat(CONTEXT_STORE_KEY_PREFIX, \"_\").concat(productKey, \"_\").concat(customerDataType);\n}\nexport function removeStorageListeners() {\n    storageListeners.map(function (listener) { return listener.stop(); });\n}\n//# sourceMappingURL=storeContextManager.js.map","import { computeBytesCount } from './utils/byteUtils';\nexport function createIdentityEncoder() {\n    var output = '';\n    var outputBytesCount = 0;\n    return {\n        isAsync: false,\n        get isEmpty() {\n            return !output;\n        },\n        write: function (data, callback) {\n            var additionalEncodedBytesCount = computeBytesCount(data);\n            outputBytesCount += additionalEncodedBytesCount;\n            output += data;\n            if (callback) {\n                callback(additionalEncodedBytesCount);\n            }\n        },\n        finish: function (callback) {\n            callback(this.finishSync());\n        },\n        finishSync: function () {\n            var result = {\n                output: output,\n                outputBytesCount: outputBytesCount,\n                rawBytesCount: outputBytesCount,\n                pendingData: '',\n            };\n            output = '';\n            outputBytesCount = 0;\n            return result;\n        },\n        estimateEncodedBytesCount: function (data) {\n            return data.length;\n        },\n    };\n}\n//# sourceMappingURL=encoder.js.map","/**\n * Cross-browser stack trace computation.\n *\n * Reference implementation: https://github.com/csnover/TraceKit/blob/04530298073c3823de72deb0b97e7b38ca7bcb59/tracekit.js\n */\nimport { startsWith } from '../utils/polyfills';\nvar UNKNOWN_FUNCTION = '?';\nexport function computeStackTrace(ex) {\n    var stack = [];\n    var stackProperty = tryToGetString(ex, 'stack');\n    var exString = String(ex);\n    if (stackProperty && startsWith(stackProperty, exString)) {\n        stackProperty = stackProperty.slice(exString.length);\n    }\n    if (stackProperty) {\n        stackProperty.split('\\n').forEach(function (line) {\n            var stackFrame = parseChromeLine(line) || parseChromeAnonymousLine(line) || parseWinLine(line) || parseGeckoLine(line);\n            if (stackFrame) {\n                if (!stackFrame.func && stackFrame.line) {\n                    stackFrame.func = UNKNOWN_FUNCTION;\n                }\n                stack.push(stackFrame);\n            }\n        });\n    }\n    return {\n        message: tryToGetString(ex, 'message'),\n        name: tryToGetString(ex, 'name'),\n        stack: stack,\n    };\n}\nvar fileUrl = '((?:file|https?|blob|chrome-extension|electron|native|eval|webpack|snippet|<anonymous>|\\\\w+\\\\.|\\\\/).*?)';\nvar filePosition = '(?::(\\\\d+))';\nvar CHROME_LINE_RE = new RegExp(\"^\\\\s*at (.*?) ?\\\\(\".concat(fileUrl).concat(filePosition, \"?\").concat(filePosition, \"?\\\\)?\\\\s*$\"), 'i');\nvar CHROME_EVAL_RE = new RegExp(\"\\\\((\\\\S*)\".concat(filePosition).concat(filePosition, \"\\\\)\"));\nfunction parseChromeLine(line) {\n    var parts = CHROME_LINE_RE.exec(line);\n    if (!parts) {\n        return;\n    }\n    var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line\n    var isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line\n    var submatch = CHROME_EVAL_RE.exec(parts[2]);\n    if (isEval && submatch) {\n        // throw out eval line/column and use top-most line/column number\n        parts[2] = submatch[1]; // url\n        parts[3] = submatch[2]; // line\n        parts[4] = submatch[3]; // column\n    }\n    return {\n        args: isNative ? [parts[2]] : [],\n        column: parts[4] ? +parts[4] : undefined,\n        func: parts[1] || UNKNOWN_FUNCTION,\n        line: parts[3] ? +parts[3] : undefined,\n        url: !isNative ? parts[2] : undefined,\n    };\n}\nvar CHROME_ANONYMOUS_FUNCTION_RE = new RegExp(\"^\\\\s*at ?\".concat(fileUrl).concat(filePosition, \"?\").concat(filePosition, \"??\\\\s*$\"), 'i');\nfunction parseChromeAnonymousLine(line) {\n    var parts = CHROME_ANONYMOUS_FUNCTION_RE.exec(line);\n    if (!parts) {\n        return;\n    }\n    return {\n        args: [],\n        column: parts[3] ? +parts[3] : undefined,\n        func: UNKNOWN_FUNCTION,\n        line: parts[2] ? +parts[2] : undefined,\n        url: parts[1],\n    };\n}\nvar WINJS_LINE_RE = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\nfunction parseWinLine(line) {\n    var parts = WINJS_LINE_RE.exec(line);\n    if (!parts) {\n        return;\n    }\n    return {\n        args: [],\n        column: parts[4] ? +parts[4] : undefined,\n        func: parts[1] || UNKNOWN_FUNCTION,\n        line: +parts[3],\n        url: parts[2],\n    };\n}\nvar GECKO_LINE_RE = /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|capacitor|\\[native).*?|[^@]*bundle)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\nvar GECKO_EVAL_RE = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\nfunction parseGeckoLine(line) {\n    var parts = GECKO_LINE_RE.exec(line);\n    if (!parts) {\n        return;\n    }\n    var isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n    var submatch = GECKO_EVAL_RE.exec(parts[3]);\n    if (isEval && submatch) {\n        // throw out eval line/column and use top-most line number\n        parts[3] = submatch[1];\n        parts[4] = submatch[2];\n        parts[5] = undefined; // no column when eval\n    }\n    return {\n        args: parts[2] ? parts[2].split(',') : [],\n        column: parts[5] ? +parts[5] : undefined,\n        func: parts[1] || UNKNOWN_FUNCTION,\n        line: parts[4] ? +parts[4] : undefined,\n        url: parts[3],\n    };\n}\nfunction tryToGetString(candidate, property) {\n    if (typeof candidate !== 'object' || !candidate || !(property in candidate)) {\n        return undefined;\n    }\n    var value = candidate[property];\n    return typeof value === 'string' ? value : undefined;\n}\nexport function computeStackTraceFromOnErrorMessage(messageObj, url, line, column) {\n    var stack = [{ url: url, column: column, line: line }];\n    var _a = tryToParseMessage(messageObj), name = _a.name, message = _a.message;\n    return {\n        name: name,\n        message: message,\n        stack: stack,\n    };\n}\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Error_types\nvar ERROR_TYPES_RE = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?([\\s\\S]*)$/;\nfunction tryToParseMessage(messageObj) {\n    var _a;\n    var name;\n    var message;\n    if ({}.toString.call(messageObj) === '[object String]') {\n        ;\n        _a = ERROR_TYPES_RE.exec(messageObj), name = _a[1], message = _a[2];\n    }\n    return { name: name, message: message };\n}\n//# sourceMappingURL=computeStackTrace.js.map","import { callMonitored } from '../monitor';\nimport { noop } from '../utils/functionUtils';\nimport { computeStackTrace } from './computeStackTrace';\n/**\n * Creates a stacktrace without SDK internal frames.\n * Constraints:\n * - Has to be called at the utmost position of the call stack.\n * - No monitored function should encapsulate it, that is why we need to use callMonitored inside it.\n */\nexport function createHandlingStack() {\n    /**\n     * Skip the two internal frames:\n     * - SDK API (console.error, ...)\n     * - this function\n     * in order to keep only the user calls\n     */\n    var internalFramesToSkip = 2;\n    var error = new Error();\n    var formattedStack;\n    // IE needs to throw the error to fill in the stack trace\n    if (!error.stack) {\n        try {\n            throw error;\n        }\n        catch (_a) {\n            noop();\n        }\n    }\n    callMonitored(function () {\n        var stackTrace = computeStackTrace(error);\n        stackTrace.stack = stackTrace.stack.slice(internalFramesToSkip);\n        formattedStack = toStackTraceString(stackTrace);\n    });\n    return formattedStack;\n}\nexport function toStackTraceString(stack) {\n    var result = formatErrorMessage(stack);\n    stack.stack.forEach(function (frame) {\n        var func = frame.func === '?' ? '<anonymous>' : frame.func;\n        var args = frame.args && frame.args.length > 0 ? \"(\".concat(frame.args.join(', '), \")\") : '';\n        var line = frame.line ? \":\".concat(frame.line) : '';\n        var column = frame.line && frame.column ? \":\".concat(frame.column) : '';\n        result += \"\\n  at \".concat(func).concat(args, \" @ \").concat(frame.url).concat(line).concat(column);\n    });\n    return result;\n}\nexport function formatErrorMessage(stack) {\n    return \"\".concat(stack.name || 'Error', \": \").concat(stack.message);\n}\n//# sourceMappingURL=handlingStack.js.map","import { sanitize } from '../../tools/serialisation/sanitize';\nimport { jsonStringify } from '../../tools/serialisation/jsonStringify';\nimport { computeStackTrace } from '../../tools/stackTrace/computeStackTrace';\nimport { toStackTraceString } from '../../tools/stackTrace/handlingStack';\nexport var NO_ERROR_STACK_PRESENT_MESSAGE = 'No stack, consider using an instance of Error';\nexport function computeRawError(_a) {\n    var stackTrace = _a.stackTrace, originalError = _a.originalError, handlingStack = _a.handlingStack, startClocks = _a.startClocks, nonErrorPrefix = _a.nonErrorPrefix, source = _a.source, handling = _a.handling;\n    var isErrorInstance = isError(originalError);\n    var message = computeMessage(stackTrace, isErrorInstance, nonErrorPrefix, originalError);\n    var stack = hasUsableStack(isErrorInstance, stackTrace)\n        ? toStackTraceString(stackTrace)\n        : NO_ERROR_STACK_PRESENT_MESSAGE;\n    var causes = isErrorInstance ? flattenErrorCauses(originalError, source) : undefined;\n    var type = stackTrace ? stackTrace.name : undefined;\n    var fingerprint = tryToGetFingerprint(originalError);\n    return {\n        startClocks: startClocks,\n        source: source,\n        handling: handling,\n        handlingStack: handlingStack,\n        originalError: originalError,\n        type: type,\n        message: message,\n        stack: stack,\n        causes: causes,\n        fingerprint: fingerprint,\n    };\n}\nfunction computeMessage(stackTrace, isErrorInstance, nonErrorPrefix, originalError) {\n    // Favor stackTrace message only if tracekit has really been able to extract something meaningful (message + name)\n    // TODO rework tracekit integration to avoid scattering error building logic\n    return (stackTrace === null || stackTrace === void 0 ? void 0 : stackTrace.message) && (stackTrace === null || stackTrace === void 0 ? void 0 : stackTrace.name)\n        ? stackTrace.message\n        : !isErrorInstance\n            ? \"\".concat(nonErrorPrefix, \" \").concat(jsonStringify(sanitize(originalError)))\n            : 'Empty message';\n}\nfunction hasUsableStack(isErrorInstance, stackTrace) {\n    if (stackTrace === undefined) {\n        return false;\n    }\n    if (isErrorInstance) {\n        return true;\n    }\n    // handle cases where tracekit return stack = [] or stack = [{url: undefined, line: undefined, column: undefined}]\n    // TODO rework tracekit integration to avoid generating those unusable stack\n    return stackTrace.stack.length > 0 && (stackTrace.stack.length > 1 || stackTrace.stack[0].url !== undefined);\n}\nexport function tryToGetFingerprint(originalError) {\n    return isError(originalError) && 'dd_fingerprint' in originalError ? String(originalError.dd_fingerprint) : undefined;\n}\nexport function getFileFromStackTraceString(stack) {\n    var _a;\n    return (_a = /@ (.+)/.exec(stack)) === null || _a === void 0 ? void 0 : _a[1];\n}\nexport function isError(error) {\n    return error instanceof Error || Object.prototype.toString.call(error) === '[object Error]';\n}\nexport function flattenErrorCauses(error, parentSource) {\n    var currentError = error;\n    var causes = [];\n    while (isError(currentError === null || currentError === void 0 ? void 0 : currentError.cause) && causes.length < 10) {\n        var stackTrace = computeStackTrace(currentError.cause);\n        causes.push({\n            message: currentError.cause.message,\n            source: parentSource,\n            type: stackTrace === null || stackTrace === void 0 ? void 0 : stackTrace.name,\n            stack: stackTrace && toStackTraceString(stackTrace),\n        });\n        currentError = currentError.cause;\n    }\n    return causes.length ? causes : undefined;\n}\n//# sourceMappingURL=error.js.map","/**\n * LIMITATION:\n * For NPM setup, this feature flag singleton is shared between RUM and Logs product.\n * This means that an experimental flag set on the RUM product will be set on the Logs product.\n * So keep in mind that in certain configurations, your experimental feature flag may affect other products.\n *\n * FORMAT:\n * All feature flags should be snake_cased\n */\n// We want to use a real enum (i.e. not a const enum) here, to be able to check whether an arbitrary\n// string is an expected feature flag\nimport { objectHasValue } from './utils/objectUtils';\n// eslint-disable-next-line no-restricted-syntax\nexport var ExperimentalFeature;\n(function (ExperimentalFeature) {\n    ExperimentalFeature[\"WRITABLE_RESOURCE_GRAPHQL\"] = \"writable_resource_graphql\";\n    ExperimentalFeature[\"REMOTE_CONFIGURATION\"] = \"remote_configuration\";\n    ExperimentalFeature[\"LONG_ANIMATION_FRAME\"] = \"long_animation_frame\";\n    ExperimentalFeature[\"ANONYMOUS_USER_TRACKING\"] = \"anonymous_user_tracking\";\n    ExperimentalFeature[\"ACTION_NAME_MASKING\"] = \"action_name_masking\";\n    ExperimentalFeature[\"CONSISTENT_TRACE_SAMPLING\"] = \"consistent_trace_sampling\";\n    ExperimentalFeature[\"DELAY_VIEWPORT_COLLECTION\"] = \"delay_viewport_collection\";\n})(ExperimentalFeature || (ExperimentalFeature = {}));\nvar enabledExperimentalFeatures = new Set();\nexport function initFeatureFlags(enableExperimentalFeatures) {\n    if (Array.isArray(enableExperimentalFeatures)) {\n        addExperimentalFeatures(enableExperimentalFeatures.filter(function (flag) {\n            return objectHasValue(ExperimentalFeature, flag);\n        }));\n    }\n}\nexport function addExperimentalFeatures(enabledFeatures) {\n    enabledFeatures.forEach(function (flag) {\n        enabledExperimentalFeatures.add(flag);\n    });\n}\nexport function isExperimentalFeatureEnabled(featureName) {\n    return enabledExperimentalFeatures.has(featureName);\n}\nexport function resetExperimentalFeatures() {\n    enabledExperimentalFeatures.clear();\n}\nexport function getExperimentalFeatures() {\n    return enabledExperimentalFeatures;\n}\n//# sourceMappingURL=experimentalFeatures.js.map","export var INTAKE_SITE_STAGING = 'datad0g.com';\nexport var INTAKE_SITE_FED_STAGING = 'dd0g-gov.com';\nexport var INTAKE_SITE_US1 = 'datadoghq.com';\nexport var INTAKE_SITE_EU1 = 'datadoghq.eu';\nexport var INTAKE_SITE_US1_FED = 'ddog-gov.com';\nexport var PCI_INTAKE_HOST_US1 = 'pci.browser-intake-datadoghq.com';\nexport var INTAKE_URL_PARAMETERS = ['ddsource', 'ddtags'];\n//# sourceMappingURL=intakeSites.js.map","/**\n * Return true if the draw is successful\n * @param threshold between 0 and 100\n */\nexport function performDraw(threshold) {\n    return threshold !== 0 && Math.random() * 100 <= threshold;\n}\nexport function round(num, decimals) {\n    return +num.toFixed(decimals);\n}\nexport function isPercentage(value) {\n    return isNumber(value) && value >= 0 && value <= 100;\n}\nexport function isNumber(value) {\n    return typeof value === 'number';\n}\n//# sourceMappingURL=numberUtils.js.map","import { isNumber, round } from './numberUtils';\nexport var ONE_SECOND = 1000;\nexport var ONE_MINUTE = 60 * ONE_SECOND;\nexport var ONE_HOUR = 60 * ONE_MINUTE;\nexport var ONE_DAY = 24 * ONE_HOUR;\nexport var ONE_YEAR = 365 * ONE_DAY;\nexport function relativeToClocks(relative) {\n    return { relative: relative, timeStamp: getCorrectedTimeStamp(relative) };\n}\nexport function timeStampToClocks(timeStamp) {\n    return { relative: getRelativeTime(timeStamp), timeStamp: timeStamp };\n}\nfunction getCorrectedTimeStamp(relativeTime) {\n    var correctedOrigin = (dateNow() - performance.now());\n    // apply correction only for positive drift\n    if (correctedOrigin > getNavigationStart()) {\n        return Math.round(addDuration(correctedOrigin, relativeTime));\n    }\n    return getTimeStamp(relativeTime);\n}\nexport function currentDrift() {\n    return Math.round(dateNow() - addDuration(getNavigationStart(), performance.now()));\n}\nexport function toServerDuration(duration) {\n    if (!isNumber(duration)) {\n        return duration;\n    }\n    return round(duration * 1e6, 0);\n}\nexport function dateNow() {\n    // Do not use `Date.now` because sometimes websites are wrongly \"polyfilling\" it. For example, we\n    // had some users using a very old version of `datejs`, which patched `Date.now` to return a Date\n    // instance instead of a timestamp[1]. Those users are unlikely to fix this, so let's handle this\n    // case ourselves.\n    // [1]: https://github.com/datejs/Datejs/blob/97f5c7c58c5bc5accdab8aa7602b6ac56462d778/src/core-debug.js#L14-L16\n    return new Date().getTime();\n}\nexport function timeStampNow() {\n    return dateNow();\n}\nexport function relativeNow() {\n    return performance.now();\n}\nexport function clocksNow() {\n    return { relative: relativeNow(), timeStamp: timeStampNow() };\n}\nexport function clocksOrigin() {\n    return { relative: 0, timeStamp: getNavigationStart() };\n}\nexport function elapsed(start, end) {\n    return (end - start);\n}\nexport function addDuration(a, b) {\n    return a + b;\n}\n/**\n * Get the time since the navigation was started.\n *\n * Note: this does not use `performance.timeOrigin` because it doesn't seem to reflect the actual\n * time on which the navigation has started: it may be much farther in the past, at least in Firefox 71.\n * Related issue in Firefox: https://bugzilla.mozilla.org/show_bug.cgi?id=1429926\n */\nexport function getRelativeTime(timestamp) {\n    return (timestamp - getNavigationStart());\n}\nexport function getTimeStamp(relativeTime) {\n    return Math.round(addDuration(getNavigationStart(), relativeTime));\n}\nexport function looksLikeRelativeTime(time) {\n    return time < ONE_YEAR;\n}\n/**\n * Navigation start slightly change on some rare cases\n */\nvar navigationStart;\nfunction getNavigationStart() {\n    if (navigationStart === undefined) {\n        navigationStart = performance.timing.navigationStart;\n    }\n    return navigationStart;\n}\n//# sourceMappingURL=timeUtils.js.map","export function sendToExtension(type, payload) {\n    var callback = window.__ddBrowserSdkExtensionCallback;\n    if (callback) {\n        callback({ type: type, payload: payload });\n    }\n}\n//# sourceMappingURL=sendToExtension.js.map","export function getConnectivity() {\n    var _a;\n    var navigator = window.navigator;\n    return {\n        status: navigator.onLine ? 'connected' : 'not_connected',\n        interfaces: navigator.connection && navigator.connection.type ? [navigator.connection.type] : undefined,\n        effective_type: (_a = navigator.connection) === null || _a === void 0 ? void 0 : _a.effectiveType,\n    };\n}\n//# sourceMappingURL=connectivity.js.map","import { arrayFrom } from './polyfills';\nexport function removeDuplicates(array) {\n    var set = new Set();\n    array.forEach(function (item) { return set.add(item); });\n    return arrayFrom(set);\n}\nexport function removeItem(array, item) {\n    var index = array.indexOf(item);\n    if (index >= 0) {\n        array.splice(index, 1);\n    }\n}\n//# sourceMappingURL=arrayUtils.js.map","import { removeItem } from './utils/arrayUtils';\nvar BUFFER_LIMIT = 500;\nexport function createBoundedBuffer() {\n    var buffer = [];\n    var add = function (callback) {\n        var length = buffer.push(callback);\n        if (length > BUFFER_LIMIT) {\n            buffer.splice(0, 1);\n        }\n    };\n    var remove = function (callback) {\n        removeItem(buffer, callback);\n    };\n    var drain = function (arg) {\n        buffer.forEach(function (callback) { return callback(arg); });\n        buffer.length = 0;\n    };\n    return {\n        add: add,\n        remove: remove,\n        drain: drain,\n    };\n}\n//# sourceMappingURL=boundedBuffer.js.map","export var TelemetryType = {\n    log: 'log',\n    configuration: 'configuration',\n    usage: 'usage',\n};\n//# sourceMappingURL=rawTelemetryEvent.types.js.map","import { ConsoleApiName } from '../../tools/display';\nimport { NO_ERROR_STACK_PRESENT_MESSAGE, isError } from '../error/error';\nimport { toStackTraceString } from '../../tools/stackTrace/handlingStack';\nimport { getExperimentalFeatures } from '../../tools/experimentalFeatures';\nimport { INTAKE_SITE_STAGING, INTAKE_SITE_US1_FED } from '../configuration';\nimport { Observable } from '../../tools/observable';\nimport { timeStampNow } from '../../tools/utils/timeUtils';\nimport { displayIfDebugEnabled, startMonitorErrorCollection } from '../../tools/monitor';\nimport { sendToExtension } from '../../tools/sendToExtension';\nimport { startsWith, arrayFrom, includes, assign } from '../../tools/utils/polyfills';\nimport { performDraw } from '../../tools/utils/numberUtils';\nimport { jsonStringify } from '../../tools/serialisation/jsonStringify';\nimport { combine } from '../../tools/mergeInto';\nimport { computeStackTrace } from '../../tools/stackTrace/computeStackTrace';\nimport { getConnectivity } from '../connectivity';\nimport { createBoundedBuffer } from '../../tools/boundedBuffer';\nimport { TelemetryType } from './rawTelemetryEvent.types';\nvar ALLOWED_FRAME_URLS = [\n    'https://www.datadoghq-browser-agent.com',\n    'https://www.datad0g-browser-agent.com',\n    'https://d3uc069fcn7uxw.cloudfront.net',\n    'https://d20xtzwzcl0ceb.cloudfront.net',\n    'http://localhost',\n    '<anonymous>',\n];\nvar TELEMETRY_EXCLUDED_SITES = [INTAKE_SITE_US1_FED];\n// eslint-disable-next-line local-rules/disallow-side-effects\nvar preStartTelemetryBuffer = createBoundedBuffer();\nvar onRawTelemetryEventCollected = function (event) {\n    preStartTelemetryBuffer.add(function () { return onRawTelemetryEventCollected(event); });\n};\nexport function startTelemetry(telemetryService, configuration) {\n    var _a;\n    var contextProvider;\n    var observable = new Observable();\n    var alreadySentEvents = new Set();\n    var telemetryEnabled = !includes(TELEMETRY_EXCLUDED_SITES, configuration.site) && performDraw(configuration.telemetrySampleRate);\n    var telemetryEnabledPerType = (_a = {},\n        _a[TelemetryType.log] = telemetryEnabled,\n        _a[TelemetryType.configuration] = telemetryEnabled && performDraw(configuration.telemetryConfigurationSampleRate),\n        _a[TelemetryType.usage] = telemetryEnabled && performDraw(configuration.telemetryUsageSampleRate),\n        _a);\n    var runtimeEnvInfo = getRuntimeEnvInfo();\n    onRawTelemetryEventCollected = function (rawEvent) {\n        var stringifiedEvent = jsonStringify(rawEvent);\n        if (telemetryEnabledPerType[rawEvent.type] &&\n            alreadySentEvents.size < configuration.maxTelemetryEventsPerPage &&\n            !alreadySentEvents.has(stringifiedEvent)) {\n            var event_1 = toTelemetryEvent(telemetryService, rawEvent, runtimeEnvInfo);\n            observable.notify(event_1);\n            sendToExtension('telemetry', event_1);\n            alreadySentEvents.add(stringifiedEvent);\n        }\n    };\n    startMonitorErrorCollection(addTelemetryError);\n    function toTelemetryEvent(telemetryService, event, runtimeEnvInfo) {\n        return combine({\n            type: 'telemetry',\n            date: timeStampNow(),\n            service: telemetryService,\n            version: \"5.35.1\",\n            source: 'browser',\n            _dd: {\n                format_version: 2,\n            },\n            telemetry: combine(event, {\n                runtime_env: runtimeEnvInfo,\n                connectivity: getConnectivity(),\n                sdk_setup: \"npm\",\n            }),\n            experimental_features: arrayFrom(getExperimentalFeatures()),\n        }, contextProvider !== undefined ? contextProvider() : {});\n    }\n    return {\n        setContextProvider: function (provider) {\n            contextProvider = provider;\n        },\n        observable: observable,\n        enabled: telemetryEnabled,\n    };\n}\nfunction getRuntimeEnvInfo() {\n    return {\n        is_local_file: window.location.protocol === 'file:',\n        is_worker: 'WorkerGlobalScope' in self,\n    };\n}\nexport function startFakeTelemetry() {\n    var events = [];\n    onRawTelemetryEventCollected = function (event) {\n        events.push(event);\n    };\n    return events;\n}\n// need to be called after telemetry context is provided and observers are registered\nexport function drainPreStartTelemetry() {\n    preStartTelemetryBuffer.drain();\n}\nexport function resetTelemetry() {\n    preStartTelemetryBuffer = createBoundedBuffer();\n    onRawTelemetryEventCollected = function (event) {\n        preStartTelemetryBuffer.add(function () { return onRawTelemetryEventCollected(event); });\n    };\n}\n/**\n * Avoid mixing telemetry events from different data centers\n * but keep replicating staging events for reliability\n */\nexport function isTelemetryReplicationAllowed(configuration) {\n    return configuration.site === INTAKE_SITE_STAGING;\n}\nexport function addTelemetryDebug(message, context) {\n    displayIfDebugEnabled(ConsoleApiName.debug, message, context);\n    onRawTelemetryEventCollected(assign({\n        type: TelemetryType.log,\n        message: message,\n        status: \"debug\" /* StatusType.debug */,\n    }, context));\n}\nexport function addTelemetryError(e, context) {\n    onRawTelemetryEventCollected(assign({\n        type: TelemetryType.log,\n        status: \"error\" /* StatusType.error */,\n    }, formatError(e), context));\n}\nexport function addTelemetryConfiguration(configuration) {\n    onRawTelemetryEventCollected({\n        type: TelemetryType.configuration,\n        configuration: configuration,\n    });\n}\nexport function addTelemetryUsage(usage) {\n    onRawTelemetryEventCollected({\n        type: TelemetryType.usage,\n        usage: usage,\n    });\n}\nexport function formatError(e) {\n    if (isError(e)) {\n        var stackTrace = computeStackTrace(e);\n        return {\n            error: {\n                kind: stackTrace.name,\n                stack: toStackTraceString(scrubCustomerFrames(stackTrace)),\n            },\n            message: stackTrace.message,\n        };\n    }\n    return {\n        error: {\n            stack: NO_ERROR_STACK_PRESENT_MESSAGE,\n        },\n        message: \"\".concat(\"Uncaught\" /* NonErrorPrefix.UNCAUGHT */, \" \").concat(jsonStringify(e)),\n    };\n}\nexport function scrubCustomerFrames(stackTrace) {\n    stackTrace.stack = stackTrace.stack.filter(function (frame) { return !frame.url || ALLOWED_FRAME_URLS.some(function (allowedFrameUrl) { return startsWith(frame.url, allowedFrameUrl); }); });\n    return stackTrace;\n}\n//# sourceMappingURL=telemetry.js.map","import { display } from '../../tools/display';\nimport { getType } from '../../tools/utils/typeUtils';\nimport { assign } from '../../tools/utils/polyfills';\n/**\n * Clone input data and ensure known user properties (id, name, email)\n * are strings, as defined here:\n * https://docs.datadoghq.com/logs/log_configuration/attributes_naming_convention/#user-related-attributes\n */\nexport function sanitizeUser(newUser) {\n    // We shallow clone only to prevent mutation of user data.\n    var user = assign({}, newUser);\n    var keys = ['id', 'name', 'email'];\n    keys.forEach(function (key) {\n        if (key in user) {\n            /* eslint-disable @typescript-eslint/no-base-to-string */\n            user[key] = String(user[key]);\n        }\n    });\n    return user;\n}\n/**\n * Simple check to ensure user is valid\n */\nexport function checkUser(newUser) {\n    var isValid = getType(newUser) === 'object';\n    if (!isValid) {\n        display.error('Unsupported user:', newUser);\n    }\n    return isValid;\n}\nexport function generateAnonymousId() {\n    return Math.floor(Math.random() * Math.pow(2, 53)).toString(36);\n}\n//# sourceMappingURL=user.js.map","import { display } from '../tools/display';\nexport function displayAlreadyInitializedError(sdkName, initConfiguration) {\n    if (!initConfiguration.silentMultipleInit) {\n        display.error(\"\".concat(sdkName, \" is already initialized.\"));\n    }\n}\n//# sourceMappingURL=displayAlreadyInitializedError.js.map","/**\n * UUID v4\n * from https://gist.github.com/jed/982883\n */\nexport function generateUUID(placeholder) {\n    return placeholder\n        ? // eslint-disable-next-line  no-bitwise\n            (parseInt(placeholder, 10) ^ ((Math.random() * 16) >> (parseInt(placeholder, 10) / 4))).toString(16)\n        : \"\".concat(1e7, \"-\").concat(1e3, \"-\").concat(4e3, \"-\").concat(8e3, \"-\").concat(1e11).replace(/[018]/g, generateUUID);\n}\nvar COMMA_SEPARATED_KEY_VALUE = /([\\w-]+)\\s*=\\s*([^;]+)/g;\nexport function findCommaSeparatedValue(rawString, name) {\n    COMMA_SEPARATED_KEY_VALUE.lastIndex = 0;\n    // eslint-disable-next-line no-constant-condition\n    while (true) {\n        var match = COMMA_SEPARATED_KEY_VALUE.exec(rawString);\n        if (match) {\n            if (match[1] === name) {\n                return match[2];\n            }\n        }\n        else {\n            break;\n        }\n    }\n}\nexport function findCommaSeparatedValues(rawString) {\n    var result = new Map();\n    COMMA_SEPARATED_KEY_VALUE.lastIndex = 0;\n    // eslint-disable-next-line no-constant-condition\n    while (true) {\n        var match = COMMA_SEPARATED_KEY_VALUE.exec(rawString);\n        if (match) {\n            result.set(match[1], match[2]);\n        }\n        else {\n            break;\n        }\n    }\n    return result;\n}\nexport function safeTruncate(candidate, length, suffix) {\n    if (suffix === void 0) { suffix = ''; }\n    var lastChar = candidate.charCodeAt(length - 1);\n    var isLastCharSurrogatePair = lastChar >= 0xd800 && lastChar <= 0xdbff;\n    var correctedLength = isLastCharSurrogatePair ? length + 1 : length;\n    if (candidate.length <= correctedLength) {\n        return candidate;\n    }\n    return \"\".concat(candidate.slice(0, correctedLength)).concat(suffix);\n}\n//# sourceMappingURL=stringUtils.js.map","import { clocksNow, combine, elapsed, generateUUID, toServerDuration } from '@datadog/browser-core';\nexport function createCustomVitalsState() {\n    var vitalsByName = new Map();\n    var vitalsByReference = new WeakMap();\n    return { vitalsByName: vitalsByName, vitalsByReference: vitalsByReference };\n}\nexport function startVitalCollection(lifeCycle, pageStateHistory, customVitalsState) {\n    function isValid(vital) {\n        return !pageStateHistory.wasInPageStateDuringPeriod(\"frozen\" /* PageState.FROZEN */, vital.startClocks.relative, vital.duration);\n    }\n    function addDurationVital(vital) {\n        if (isValid(vital)) {\n            lifeCycle.notify(12 /* LifeCycleEventType.RAW_RUM_EVENT_COLLECTED */, processVital(vital, true));\n        }\n    }\n    return {\n        addDurationVital: addDurationVital,\n        startDurationVital: function (name, options) {\n            if (options === void 0) { options = {}; }\n            return startDurationVital(customVitalsState, name, options);\n        },\n        stopDurationVital: function (nameOrRef, options) {\n            if (options === void 0) { options = {}; }\n            stopDurationVital(addDurationVital, customVitalsState, nameOrRef, options);\n        },\n    };\n}\nexport function startDurationVital(_a, name, options) {\n    var vitalsByName = _a.vitalsByName, vitalsByReference = _a.vitalsByReference;\n    if (options === void 0) { options = {}; }\n    var vital = {\n        name: name,\n        startClocks: clocksNow(),\n        context: options.context,\n        description: options.description,\n    };\n    // To avoid leaking implementation details of the vital, we return a reference to it.\n    var reference = { __dd_vital_reference: true };\n    vitalsByName.set(name, vital);\n    // To avoid memory leaks caused by the creation of numerous references (e.g., from improper useEffect implementations), we use a WeakMap.\n    vitalsByReference.set(reference, vital);\n    return reference;\n}\nexport function stopDurationVital(stopCallback, _a, nameOrRef, options) {\n    var vitalsByName = _a.vitalsByName, vitalsByReference = _a.vitalsByReference;\n    if (options === void 0) { options = {}; }\n    var vitalStart = typeof nameOrRef === 'string' ? vitalsByName.get(nameOrRef) : vitalsByReference.get(nameOrRef);\n    if (!vitalStart) {\n        return;\n    }\n    stopCallback(buildDurationVital(vitalStart, vitalStart.startClocks, options, clocksNow()));\n    if (typeof nameOrRef === 'string') {\n        vitalsByName.delete(nameOrRef);\n    }\n    else {\n        vitalsByReference.delete(nameOrRef);\n    }\n}\nfunction buildDurationVital(vitalStart, startClocks, stopOptions, stopClocks) {\n    var _a;\n    return {\n        name: vitalStart.name,\n        type: \"duration\" /* VitalType.DURATION */,\n        startClocks: startClocks,\n        duration: elapsed(startClocks.timeStamp, stopClocks.timeStamp),\n        context: combine(vitalStart.context, stopOptions.context),\n        description: (_a = stopOptions.description) !== null && _a !== void 0 ? _a : vitalStart.description,\n    };\n}\nfunction processVital(vital, valueComputedBySdk) {\n    var rawRumEvent = {\n        date: vital.startClocks.timeStamp,\n        vital: {\n            id: generateUUID(),\n            type: vital.type,\n            name: vital.name,\n            duration: toServerDuration(vital.duration),\n            description: vital.description,\n        },\n        type: \"vital\" /* RumEventType.VITAL */,\n    };\n    if (valueComputedBySdk) {\n        rawRumEvent._dd = {\n            vital: {\n                computed_value: true,\n            },\n        };\n    }\n    return {\n        rawRumEvent: rawRumEvent,\n        startTime: vital.startClocks.relative,\n        customerContext: vital.context,\n        domainContext: {},\n    };\n}\n//# sourceMappingURL=vitalCollection.js.map","import { endsWith, includes } from '../tools/utils/polyfills';\nimport { getGlobalObject } from '../tools/getGlobalObject';\nexport function getEventBridge() {\n    var eventBridgeGlobal = getEventBridgeGlobal();\n    if (!eventBridgeGlobal) {\n        return;\n    }\n    return {\n        getCapabilities: function () {\n            var _a;\n            return JSON.parse(((_a = eventBridgeGlobal.getCapabilities) === null || _a === void 0 ? void 0 : _a.call(eventBridgeGlobal)) || '[]');\n        },\n        getPrivacyLevel: function () {\n            var _a;\n            return (_a = eventBridgeGlobal.getPrivacyLevel) === null || _a === void 0 ? void 0 : _a.call(eventBridgeGlobal);\n        },\n        getAllowedWebViewHosts: function () {\n            return JSON.parse(eventBridgeGlobal.getAllowedWebViewHosts());\n        },\n        send: function (eventType, event, viewId) {\n            var view = viewId ? { id: viewId } : undefined;\n            eventBridgeGlobal.send(JSON.stringify({ eventType: eventType, event: event, view: view }));\n        },\n    };\n}\nexport function bridgeSupports(capability) {\n    var bridge = getEventBridge();\n    return !!bridge && includes(bridge.getCapabilities(), capability);\n}\nexport function canUseEventBridge(currentHost) {\n    var _a;\n    if (currentHost === void 0) { currentHost = (_a = getGlobalObject().location) === null || _a === void 0 ? void 0 : _a.hostname; }\n    var bridge = getEventBridge();\n    return (!!bridge &&\n        bridge\n            .getAllowedWebViewHosts()\n            .some(function (allowedHost) { return currentHost === allowedHost || endsWith(currentHost, \".\".concat(allowedHost)); }));\n}\nfunction getEventBridgeGlobal() {\n    return getGlobalObject().DatadogEventBridge;\n}\n//# sourceMappingURL=eventBridge.js.map","import { setTimeout } from './timer';\nimport { callMonitored } from './monitor';\nimport { noop } from './utils/functionUtils';\nimport { arrayFrom, startsWith } from './utils/polyfills';\nimport { createHandlingStack } from './stackTrace/handlingStack';\n/**\n * Instruments a method on a object, calling the given callback before the original method is\n * invoked. The callback receives an object with information about the method call.\n *\n * This function makes sure that we are \"good citizens\" regarding third party instrumentations: when\n * removing the instrumentation, the original method is usually restored, but if a third party\n * instrumentation was set after ours, we keep it in place and just replace our instrumentation with\n * a noop.\n *\n * Note: it is generally better to instrument methods that are \"owned\" by the object instead of ones\n * that are inherited from the prototype chain. Example:\n * * do:    `instrumentMethod(Array.prototype, 'push', ...)`\n * * don't: `instrumentMethod([], 'push', ...)`\n *\n * This method is also used to set event handler properties (ex: window.onerror = ...), as it has\n * the same requirements as instrumenting a method:\n * * if the event handler is already set by a third party, we need to call it and not just blindly\n * override it.\n * * if the event handler is set by a third party after us, we need to keep it in place when\n * removing ours.\n *\n * @example\n *\n *  instrumentMethod(window, 'fetch', ({ target, parameters, onPostCall }) => {\n *    console.log('Before calling fetch on', target, 'with parameters', parameters)\n *\n *    onPostCall((result) => {\n *      console.log('After fetch calling on', target, 'with parameters', parameters, 'and result', result)\n *    })\n *  })\n */\nexport function instrumentMethod(targetPrototype, method, onPreCall, _a) {\n    var _b = _a === void 0 ? {} : _a, computeHandlingStack = _b.computeHandlingStack;\n    var original = targetPrototype[method];\n    if (typeof original !== 'function') {\n        if (method in targetPrototype && startsWith(method, 'on')) {\n            original = noop;\n        }\n        else {\n            return { stop: noop };\n        }\n    }\n    var stopped = false;\n    var instrumentation = function () {\n        if (stopped) {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call\n            return original.apply(this, arguments);\n        }\n        var parameters = arrayFrom(arguments);\n        var postCallCallback;\n        callMonitored(onPreCall, null, [\n            {\n                target: this,\n                parameters: parameters,\n                onPostCall: function (callback) {\n                    postCallCallback = callback;\n                },\n                handlingStack: computeHandlingStack ? createHandlingStack() : undefined,\n            },\n        ]);\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n        var result = original.apply(this, parameters);\n        if (postCallCallback) {\n            callMonitored(postCallCallback, null, [result]);\n        }\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n        return result;\n    };\n    targetPrototype[method] = instrumentation;\n    return {\n        stop: function () {\n            stopped = true;\n            // If the instrumentation has been removed by a third party, keep the last one\n            if (targetPrototype[method] === instrumentation) {\n                targetPrototype[method] = original;\n            }\n        },\n    };\n}\nexport function instrumentSetter(targetPrototype, property, after) {\n    var originalDescriptor = Object.getOwnPropertyDescriptor(targetPrototype, property);\n    if (!originalDescriptor || !originalDescriptor.set || !originalDescriptor.configurable) {\n        return { stop: noop };\n    }\n    var stoppedInstrumentation = noop;\n    var instrumentation = function (target, value) {\n        // put hooked setter into event loop to avoid of set latency\n        setTimeout(function () {\n            if (instrumentation !== stoppedInstrumentation) {\n                after(target, value);\n            }\n        }, 0);\n    };\n    var instrumentationWrapper = function (value) {\n        originalDescriptor.set.call(this, value);\n        instrumentation(this, value);\n    };\n    Object.defineProperty(targetPrototype, property, {\n        set: instrumentationWrapper,\n    });\n    return {\n        stop: function () {\n            var _a;\n            if (((_a = Object.getOwnPropertyDescriptor(targetPrototype, property)) === null || _a === void 0 ? void 0 : _a.set) === instrumentationWrapper) {\n                Object.defineProperty(targetPrototype, property, originalDescriptor);\n            }\n            instrumentation = stoppedInstrumentation;\n        },\n    };\n}\n//# sourceMappingURL=instrumentMethod.js.map","import { jsonStringify } from '../serialisation/jsonStringify';\nexport function normalizeUrl(url) {\n    return buildUrl(url, location.href).href;\n}\nexport function isValidUrl(url) {\n    try {\n        return !!buildUrl(url);\n    }\n    catch (_a) {\n        return false;\n    }\n}\nexport function getPathName(url) {\n    var pathname = buildUrl(url).pathname;\n    return pathname[0] === '/' ? pathname : \"/\".concat(pathname);\n}\nexport function buildUrl(url, base) {\n    var supportedURL = getSupportedUrl();\n    if (supportedURL) {\n        try {\n            return base !== undefined ? new supportedURL(url, base) : new supportedURL(url);\n        }\n        catch (error) {\n            throw new Error(\"Failed to construct URL: \".concat(String(error), \" \").concat(jsonStringify({ url: url, base: base })));\n        }\n    }\n    if (base === undefined && !/:/.test(url)) {\n        throw new Error(\"Invalid URL: '\".concat(url, \"'\"));\n    }\n    var doc = document;\n    var anchorElement = doc.createElement('a');\n    if (base !== undefined) {\n        doc = document.implementation.createHTMLDocument('');\n        var baseElement = doc.createElement('base');\n        baseElement.href = base;\n        doc.head.appendChild(baseElement);\n        doc.body.appendChild(anchorElement);\n    }\n    anchorElement.href = url;\n    return anchorElement;\n}\nvar originalURL = URL;\nvar isURLSupported;\nfunction getSupportedUrl() {\n    if (isURLSupported === undefined) {\n        try {\n            var url = new originalURL('http://test/path');\n            isURLSupported = url.href === 'http://test/path';\n        }\n        catch (_a) {\n            isURLSupported = false;\n        }\n    }\n    return isURLSupported ? originalURL : undefined;\n}\n//# sourceMappingURL=urlPolyfill.js.map","import { instrumentMethod } from '../tools/instrumentMethod';\nimport { monitor } from '../tools/monitor';\nimport { Observable } from '../tools/observable';\nimport { assign } from '../tools/utils/polyfills';\nimport { clocksNow } from '../tools/utils/timeUtils';\nimport { normalizeUrl } from '../tools/utils/urlPolyfill';\nvar fetchObservable;\nexport function initFetchObservable() {\n    if (!fetchObservable) {\n        fetchObservable = createFetchObservable();\n    }\n    return fetchObservable;\n}\nexport function resetFetchObservable() {\n    fetchObservable = undefined;\n}\nfunction createFetchObservable() {\n    return new Observable(function (observable) {\n        if (!window.fetch) {\n            return;\n        }\n        var stop = instrumentMethod(window, 'fetch', function (call) { return beforeSend(call, observable); }, {\n            computeHandlingStack: true,\n        }).stop;\n        return stop;\n    });\n}\nfunction beforeSend(_a, observable) {\n    var parameters = _a.parameters, onPostCall = _a.onPostCall, handlingStack = _a.handlingStack;\n    var input = parameters[0], init = parameters[1];\n    var methodFromParams = init && init.method;\n    if (methodFromParams === undefined && input instanceof Request) {\n        methodFromParams = input.method;\n    }\n    var method = methodFromParams !== undefined ? String(methodFromParams).toUpperCase() : 'GET';\n    var url = input instanceof Request ? input.url : normalizeUrl(String(input));\n    var startClocks = clocksNow();\n    var context = {\n        state: 'start',\n        init: init,\n        input: input,\n        method: method,\n        startClocks: startClocks,\n        url: url,\n        handlingStack: handlingStack,\n    };\n    observable.notify(context);\n    // Those properties can be changed by observable subscribers\n    parameters[0] = context.input;\n    parameters[1] = context.init;\n    onPostCall(function (responsePromise) { return afterSend(observable, responsePromise, context); });\n}\nfunction afterSend(observable, responsePromise, startContext) {\n    var context = startContext;\n    function reportFetch(partialContext) {\n        context.state = 'resolve';\n        assign(context, partialContext);\n        observable.notify(context);\n    }\n    responsePromise.then(monitor(function (response) {\n        reportFetch({\n            response: response,\n            responseType: response.type,\n            status: response.status,\n            isAborted: false,\n        });\n    }), monitor(function (error) {\n        var _a, _b;\n        reportFetch({\n            status: 0,\n            isAborted: ((_b = (_a = context.init) === null || _a === void 0 ? void 0 : _a.signal) === null || _b === void 0 ? void 0 : _b.aborted) || (error instanceof DOMException && error.code === DOMException.ABORT_ERR),\n            error: error,\n        });\n    }));\n}\n//# sourceMappingURL=fetchObservable.js.map","import { display } from '../tools/display';\nimport { ONE_MINUTE, ONE_SECOND } from '../tools/utils/timeUtils';\nimport { findCommaSeparatedValue, findCommaSeparatedValues, generateUUID } from '../tools/utils/stringUtils';\nexport function setCookie(name, value, expireDelay, options) {\n    if (expireDelay === void 0) { expireDelay = 0; }\n    var date = new Date();\n    date.setTime(date.getTime() + expireDelay);\n    var expires = \"expires=\".concat(date.toUTCString());\n    var sameSite = options && options.crossSite ? 'none' : 'strict';\n    var domain = options && options.domain ? \";domain=\".concat(options.domain) : '';\n    var secure = options && options.secure ? ';secure' : '';\n    var partitioned = options && options.partitioned ? ';partitioned' : '';\n    document.cookie = \"\".concat(name, \"=\").concat(value, \";\").concat(expires, \";path=/;samesite=\").concat(sameSite).concat(domain).concat(secure).concat(partitioned);\n}\nexport function getCookie(name) {\n    return findCommaSeparatedValue(document.cookie, name);\n}\nvar initCookieParsed;\n/**\n * Returns a cached value of the cookie. Use this during SDK initialization (and whenever possible)\n * to avoid accessing document.cookie multiple times.\n */\nexport function getInitCookie(name) {\n    if (!initCookieParsed) {\n        initCookieParsed = findCommaSeparatedValues(document.cookie);\n    }\n    return initCookieParsed.get(name);\n}\nexport function resetInitCookies() {\n    initCookieParsed = undefined;\n}\nexport function deleteCookie(name, options) {\n    setCookie(name, '', 0, options);\n}\nexport function areCookiesAuthorized(options) {\n    if (document.cookie === undefined || document.cookie === null) {\n        return false;\n    }\n    try {\n        // Use a unique cookie name to avoid issues when the SDK is initialized multiple times during\n        // the test cookie lifetime\n        var testCookieName = \"dd_cookie_test_\".concat(generateUUID());\n        var testCookieValue = 'test';\n        setCookie(testCookieName, testCookieValue, ONE_MINUTE, options);\n        var isCookieCorrectlySet = getCookie(testCookieName) === testCookieValue;\n        deleteCookie(testCookieName, options);\n        return isCookieCorrectlySet;\n    }\n    catch (error) {\n        display.error(error);\n        return false;\n    }\n}\n/**\n * No API to retrieve it, number of levels for subdomain and suffix are unknown\n * strategy: find the minimal domain on which cookies are allowed to be set\n * https://web.dev/same-site-same-origin/#site\n */\nvar getCurrentSiteCache;\nexport function getCurrentSite() {\n    if (getCurrentSiteCache === undefined) {\n        // Use a unique cookie name to avoid issues when the SDK is initialized multiple times during\n        // the test cookie lifetime\n        var testCookieName = \"dd_site_test_\".concat(generateUUID());\n        var testCookieValue = 'test';\n        var domainLevels = window.location.hostname.split('.');\n        var candidateDomain = domainLevels.pop();\n        while (domainLevels.length && !getCookie(testCookieName)) {\n            candidateDomain = \"\".concat(domainLevels.pop(), \".\").concat(candidateDomain);\n            setCookie(testCookieName, testCookieValue, ONE_SECOND, { domain: candidateDomain });\n        }\n        deleteCookie(testCookieName, { domain: candidateDomain });\n        getCurrentSiteCache = candidateDomain;\n    }\n    return getCurrentSiteCache;\n}\n//# sourceMappingURL=cookie.js.map","import { getInitCookie } from '../../browser/cookie';\nexport var SYNTHETICS_TEST_ID_COOKIE_NAME = 'datadog-synthetics-public-id';\nexport var SYNTHETICS_RESULT_ID_COOKIE_NAME = 'datadog-synthetics-result-id';\nexport var SYNTHETICS_INJECTS_RUM_COOKIE_NAME = 'datadog-synthetics-injects-rum';\nexport function willSyntheticsInjectRum() {\n    return Boolean(window._DATADOG_SYNTHETICS_INJECTS_RUM || getInitCookie(SYNTHETICS_INJECTS_RUM_COOKIE_NAME));\n}\nexport function getSyntheticsTestId() {\n    var value = window._DATADOG_SYNTHETICS_PUBLIC_ID || getInitCookie(SYNTHETICS_TEST_ID_COOKIE_NAME);\n    return typeof value === 'string' ? value : undefined;\n}\nexport function getSyntheticsResultId() {\n    var value = window._DATADOG_SYNTHETICS_RESULT_ID || getInitCookie(SYNTHETICS_RESULT_ID_COOKIE_NAME);\n    return typeof value === 'string' ? value : undefined;\n}\n//# sourceMappingURL=syntheticsWorkerValues.js.map","export function isIE() {\n    return detectBrowserCached() === 0 /* Browser.IE */;\n}\nexport function isChromium() {\n    return detectBrowserCached() === 1 /* Browser.CHROMIUM */;\n}\nexport function isSafari() {\n    return detectBrowserCached() === 2 /* Browser.SAFARI */;\n}\nvar browserCache;\nfunction detectBrowserCached() {\n    return browserCache !== null && browserCache !== void 0 ? browserCache : (browserCache = detectBrowser());\n}\n// Exported only for tests\nexport function detectBrowser(browserWindow) {\n    var _a;\n    if (browserWindow === void 0) { browserWindow = window; }\n    var userAgent = browserWindow.navigator.userAgent;\n    if (browserWindow.chrome || /HeadlessChrome/.test(userAgent)) {\n        return 1 /* Browser.CHROMIUM */;\n    }\n    if (\n    // navigator.vendor is deprecated, but it is the most resilient way we found to detect\n    // \"Apple maintained browsers\" (AKA Safari). If one day it gets removed, we still have the\n    // useragent test as a semi-working fallback.\n    ((_a = browserWindow.navigator.vendor) === null || _a === void 0 ? void 0 : _a.indexOf('Apple')) === 0 ||\n        (/safari/i.test(userAgent) && !/chrome|android/i.test(userAgent))) {\n        return 2 /* Browser.SAFARI */;\n    }\n    if (browserWindow.document.documentMode) {\n        return 0 /* Browser.IE */;\n    }\n    return 3 /* Browser.OTHER */;\n}\n//# sourceMappingURL=browserDetection.js.map","export var SESSION_STORE_KEY = '_dd_s';\n//# sourceMappingURL=sessionStoreStrategy.js.map","import { ONE_HOUR, ONE_MINUTE, ONE_YEAR } from '../../tools/utils/timeUtils';\nexport var SESSION_TIME_OUT_DELAY = 4 * ONE_HOUR;\nexport var SESSION_EXPIRATION_DELAY = 15 * ONE_MINUTE;\nexport var SESSION_COOKIE_EXPIRATION_DELAY = ONE_YEAR;\nexport var SessionPersistence = {\n    COOKIE: 'cookie',\n    LOCAL_STORAGE: 'local-storage',\n};\n//# sourceMappingURL=sessionConstants.js.map","export var SESSION_ENTRY_REGEXP = /^([a-zA-Z]+)=([a-z0-9-]+)$/;\nexport var SESSION_ENTRY_SEPARATOR = '&';\nexport function isValidSessionString(sessionString) {\n    return (!!sessionString &&\n        (sessionString.indexOf(SESSION_ENTRY_SEPARATOR) !== -1 || SESSION_ENTRY_REGEXP.test(sessionString)));\n}\n//# sourceMappingURL=sessionStateValidation.js.map","import { ExperimentalFeature, isExperimentalFeatureEnabled } from '../../tools/experimentalFeatures';\nimport { isEmptyObject } from '../../tools/utils/objectUtils';\nimport { objectEntries } from '../../tools/utils/polyfills';\nimport { dateNow } from '../../tools/utils/timeUtils';\nimport { generateAnonymousId } from '../user';\nimport { SESSION_EXPIRATION_DELAY, SESSION_TIME_OUT_DELAY } from './sessionConstants';\nimport { isValidSessionString, SESSION_ENTRY_REGEXP, SESSION_ENTRY_SEPARATOR } from './sessionStateValidation';\nexport var EXPIRED = '1';\nexport function getExpiredSessionState(previousSessionState) {\n    var expiredSessionState = {\n        isExpired: EXPIRED,\n    };\n    if (isExperimentalFeatureEnabled(ExperimentalFeature.ANONYMOUS_USER_TRACKING)) {\n        if (previousSessionState === null || previousSessionState === void 0 ? void 0 : previousSessionState.anonymousId) {\n            expiredSessionState.anonymousId = previousSessionState === null || previousSessionState === void 0 ? void 0 : previousSessionState.anonymousId;\n        }\n        else {\n            expiredSessionState.anonymousId = generateAnonymousId();\n        }\n    }\n    return expiredSessionState;\n}\nexport function isSessionInNotStartedState(session) {\n    return isEmptyObject(session);\n}\nexport function isSessionStarted(session) {\n    return !isSessionInNotStartedState(session);\n}\nexport function isSessionInExpiredState(session) {\n    return session.isExpired !== undefined || !isActiveSession(session);\n}\n// An active session is a session in either `Tracked` or `NotTracked` state\nfunction isActiveSession(sessionState) {\n    // created and expire can be undefined for versions which was not storing them\n    // these checks could be removed when older versions will not be available/live anymore\n    return ((sessionState.created === undefined || dateNow() - Number(sessionState.created) < SESSION_TIME_OUT_DELAY) &&\n        (sessionState.expire === undefined || dateNow() < Number(sessionState.expire)));\n}\nexport function expandSessionState(session) {\n    session.expire = String(dateNow() + SESSION_EXPIRATION_DELAY);\n}\nexport function toSessionString(session) {\n    return (objectEntries(session)\n        // we use `aid` as a key for anonymousId\n        .map(function (_a) {\n        var key = _a[0], value = _a[1];\n        return (key === 'anonymousId' ? \"aid=\".concat(value) : \"\".concat(key, \"=\").concat(value));\n    })\n        .join(SESSION_ENTRY_SEPARATOR));\n}\nexport function toSessionState(sessionString) {\n    var session = {};\n    if (isValidSessionString(sessionString)) {\n        sessionString.split(SESSION_ENTRY_SEPARATOR).forEach(function (entry) {\n            var matches = SESSION_ENTRY_REGEXP.exec(entry);\n            if (matches !== null) {\n                var key = matches[1], value = matches[2];\n                if (key === 'aid') {\n                    // we use `aid` as a key for anonymousId\n                    session.anonymousId = value;\n                }\n                else {\n                    session[key] = value;\n                }\n            }\n        });\n    }\n    return session;\n}\n//# sourceMappingURL=sessionState.js.map","import { getInitCookie } from '../../browser/cookie';\nimport { SESSION_STORE_KEY } from './storeStrategies/sessionStoreStrategy';\nimport { expandSessionState, isSessionStarted } from './sessionState';\nexport var OLD_SESSION_COOKIE_NAME = '_dd';\nexport var OLD_RUM_COOKIE_NAME = '_dd_r';\nexport var OLD_LOGS_COOKIE_NAME = '_dd_l';\n// duplicate values to avoid dependency issues\nexport var RUM_SESSION_KEY = 'rum';\nexport var LOGS_SESSION_KEY = 'logs';\n/**\n * This migration should remain in the codebase as long as older versions are available/live\n * to allow older sdk versions to be upgraded to newer versions without compatibility issues.\n */\nexport function tryOldCookiesMigration(cookieStoreStrategy) {\n    var sessionString = getInitCookie(SESSION_STORE_KEY);\n    if (!sessionString) {\n        var oldSessionId = getInitCookie(OLD_SESSION_COOKIE_NAME);\n        var oldRumType = getInitCookie(OLD_RUM_COOKIE_NAME);\n        var oldLogsType = getInitCookie(OLD_LOGS_COOKIE_NAME);\n        var session = {};\n        if (oldSessionId) {\n            session.id = oldSessionId;\n        }\n        if (oldLogsType && /^[01]$/.test(oldLogsType)) {\n            session[LOGS_SESSION_KEY] = oldLogsType;\n        }\n        if (oldRumType && /^[012]$/.test(oldRumType)) {\n            session[RUM_SESSION_KEY] = oldRumType;\n        }\n        if (isSessionStarted(session)) {\n            expandSessionState(session);\n            cookieStoreStrategy.persistSession(session);\n        }\n    }\n}\n//# sourceMappingURL=oldCookiesMigration.js.map","import { isChromium } from '../../../tools/utils/browserDetection';\nimport { ExperimentalFeature, isExperimentalFeatureEnabled } from '../../../tools/experimentalFeatures';\nimport { getCurrentSite, areCookiesAuthorized, getCookie, setCookie } from '../../../browser/cookie';\nimport { tryOldCookiesMigration } from '../oldCookiesMigration';\nimport { SESSION_COOKIE_EXPIRATION_DELAY, SESSION_EXPIRATION_DELAY, SESSION_TIME_OUT_DELAY, SessionPersistence, } from '../sessionConstants';\nimport { toSessionString, toSessionState, getExpiredSessionState } from '../sessionState';\nimport { SESSION_STORE_KEY } from './sessionStoreStrategy';\nexport function selectCookieStrategy(initConfiguration) {\n    var cookieOptions = buildCookieOptions(initConfiguration);\n    return areCookiesAuthorized(cookieOptions) ? { type: SessionPersistence.COOKIE, cookieOptions: cookieOptions } : undefined;\n}\nexport function initCookieStrategy(cookieOptions) {\n    var cookieStore = {\n        /**\n         * Lock strategy allows mitigating issues due to concurrent access to cookie.\n         * This issue concerns only chromium browsers and enabling this on firefox increases cookie write failures.\n         */\n        isLockEnabled: isChromium(),\n        persistSession: persistSessionCookie(cookieOptions),\n        retrieveSession: retrieveSessionCookie,\n        expireSession: function (sessionState) { return expireSessionCookie(cookieOptions, sessionState); },\n    };\n    tryOldCookiesMigration(cookieStore);\n    return cookieStore;\n}\nfunction persistSessionCookie(options) {\n    return function (session) {\n        setCookie(SESSION_STORE_KEY, toSessionString(session), SESSION_EXPIRATION_DELAY, options);\n    };\n}\nfunction expireSessionCookie(options, sessionState) {\n    var expiredSessionState = getExpiredSessionState(sessionState);\n    setCookie(SESSION_STORE_KEY, toSessionString(expiredSessionState), isExperimentalFeatureEnabled(ExperimentalFeature.ANONYMOUS_USER_TRACKING)\n        ? SESSION_COOKIE_EXPIRATION_DELAY\n        : SESSION_TIME_OUT_DELAY, options);\n}\nfunction retrieveSessionCookie() {\n    var sessionString = getCookie(SESSION_STORE_KEY);\n    var sessionState = toSessionState(sessionString);\n    return sessionState;\n}\nexport function buildCookieOptions(initConfiguration) {\n    var cookieOptions = {};\n    cookieOptions.secure =\n        !!initConfiguration.useSecureSessionCookie ||\n            !!initConfiguration.usePartitionedCrossSiteSessionCookie ||\n            !!initConfiguration.useCrossSiteSessionCookie;\n    cookieOptions.crossSite =\n        !!initConfiguration.usePartitionedCrossSiteSessionCookie || !!initConfiguration.useCrossSiteSessionCookie;\n    cookieOptions.partitioned = !!initConfiguration.usePartitionedCrossSiteSessionCookie;\n    if (initConfiguration.trackSessionAcrossSubdomains) {\n        cookieOptions.domain = getCurrentSite();\n    }\n    return cookieOptions;\n}\n//# sourceMappingURL=sessionInCookie.js.map","import { generateUUID } from '../../../tools/utils/stringUtils';\nimport { SessionPersistence } from '../sessionConstants';\nimport { toSessionString, toSessionState, getExpiredSessionState } from '../sessionState';\nimport { SESSION_STORE_KEY } from './sessionStoreStrategy';\nvar LOCAL_STORAGE_TEST_KEY = '_dd_test_';\nexport function selectLocalStorageStrategy() {\n    try {\n        var id = generateUUID();\n        var testKey = \"\".concat(LOCAL_STORAGE_TEST_KEY).concat(id);\n        localStorage.setItem(testKey, id);\n        var retrievedId = localStorage.getItem(testKey);\n        localStorage.removeItem(testKey);\n        return id === retrievedId ? { type: SessionPersistence.LOCAL_STORAGE } : undefined;\n    }\n    catch (_a) {\n        return undefined;\n    }\n}\nexport function initLocalStorageStrategy() {\n    return {\n        isLockEnabled: false,\n        persistSession: persistInLocalStorage,\n        retrieveSession: retrieveSessionFromLocalStorage,\n        expireSession: expireSessionFromLocalStorage,\n    };\n}\nfunction persistInLocalStorage(sessionState) {\n    localStorage.setItem(SESSION_STORE_KEY, toSessionString(sessionState));\n}\nfunction retrieveSessionFromLocalStorage() {\n    var sessionString = localStorage.getItem(SESSION_STORE_KEY);\n    return toSessionState(sessionString);\n}\nfunction expireSessionFromLocalStorage(previousSessionState) {\n    persistInLocalStorage(getExpiredSessionState(previousSessionState));\n}\n//# sourceMappingURL=sessionInLocalStorage.js.map","import { setTimeout } from '../../tools/timer';\nimport { generateUUID } from '../../tools/utils/stringUtils';\nimport { assign } from '../../tools/utils/polyfills';\nimport { expandSessionState, isSessionInExpiredState } from './sessionState';\nexport var LOCK_RETRY_DELAY = 10;\nexport var LOCK_MAX_TRIES = 100;\nvar bufferedOperations = [];\nvar ongoingOperations;\nexport function processSessionStoreOperations(operations, sessionStoreStrategy, numberOfRetries) {\n    var _a;\n    if (numberOfRetries === void 0) { numberOfRetries = 0; }\n    var isLockEnabled = sessionStoreStrategy.isLockEnabled, persistSession = sessionStoreStrategy.persistSession, expireSession = sessionStoreStrategy.expireSession;\n    var persistWithLock = function (session) { return persistSession(assign({}, session, { lock: currentLock })); };\n    var retrieveStore = function () {\n        var session = sessionStoreStrategy.retrieveSession();\n        var lock = session.lock;\n        if (session.lock) {\n            delete session.lock;\n        }\n        return {\n            session: session,\n            lock: lock,\n        };\n    };\n    if (!ongoingOperations) {\n        ongoingOperations = operations;\n    }\n    if (operations !== ongoingOperations) {\n        bufferedOperations.push(operations);\n        return;\n    }\n    if (isLockEnabled && numberOfRetries >= LOCK_MAX_TRIES) {\n        next(sessionStoreStrategy);\n        return;\n    }\n    var currentLock;\n    var currentStore = retrieveStore();\n    if (isLockEnabled) {\n        // if someone has lock, retry later\n        if (currentStore.lock) {\n            retryLater(operations, sessionStoreStrategy, numberOfRetries);\n            return;\n        }\n        // acquire lock\n        currentLock = generateUUID();\n        persistWithLock(currentStore.session);\n        // if lock is not acquired, retry later\n        currentStore = retrieveStore();\n        if (currentStore.lock !== currentLock) {\n            retryLater(operations, sessionStoreStrategy, numberOfRetries);\n            return;\n        }\n    }\n    var processedSession = operations.process(currentStore.session);\n    if (isLockEnabled) {\n        // if lock corrupted after process, retry later\n        currentStore = retrieveStore();\n        if (currentStore.lock !== currentLock) {\n            retryLater(operations, sessionStoreStrategy, numberOfRetries);\n            return;\n        }\n    }\n    if (processedSession) {\n        if (isSessionInExpiredState(processedSession)) {\n            expireSession(processedSession);\n        }\n        else {\n            expandSessionState(processedSession);\n            if (isLockEnabled) {\n                persistWithLock(processedSession);\n            }\n            else {\n                persistSession(processedSession);\n            }\n        }\n    }\n    if (isLockEnabled) {\n        // correctly handle lock around expiration would require to handle this case properly at several levels\n        // since we don't have evidence of lock issues around expiration, let's just not do the corruption check for it\n        if (!(processedSession && isSessionInExpiredState(processedSession))) {\n            // if lock corrupted after persist, retry later\n            currentStore = retrieveStore();\n            if (currentStore.lock !== currentLock) {\n                retryLater(operations, sessionStoreStrategy, numberOfRetries);\n                return;\n            }\n            persistSession(currentStore.session);\n            processedSession = currentStore.session;\n        }\n    }\n    // call after even if session is not persisted in order to perform operations on\n    // up-to-date session state value => the value could have been modified by another tab\n    (_a = operations.after) === null || _a === void 0 ? void 0 : _a.call(operations, processedSession || currentStore.session);\n    next(sessionStoreStrategy);\n}\nfunction retryLater(operations, sessionStore, currentNumberOfRetries) {\n    setTimeout(function () {\n        processSessionStoreOperations(operations, sessionStore, currentNumberOfRetries + 1);\n    }, LOCK_RETRY_DELAY);\n}\nfunction next(sessionStore) {\n    ongoingOperations = undefined;\n    var nextOperations = bufferedOperations.shift();\n    if (nextOperations) {\n        processSessionStoreOperations(nextOperations, sessionStore);\n    }\n}\n//# sourceMappingURL=sessionStoreOperations.js.map","import { clearInterval, setInterval } from '../../tools/timer';\nimport { Observable } from '../../tools/observable';\nimport { ONE_SECOND, dateNow } from '../../tools/utils/timeUtils';\nimport { throttle } from '../../tools/utils/functionUtils';\nimport { generateUUID } from '../../tools/utils/stringUtils';\nimport { assign } from '../../tools/utils/polyfills';\nimport { display } from '../../tools/display';\nimport { selectCookieStrategy, initCookieStrategy } from './storeStrategies/sessionInCookie';\nimport { getExpiredSessionState, isSessionInExpiredState, isSessionInNotStartedState, isSessionStarted, } from './sessionState';\nimport { initLocalStorageStrategy, selectLocalStorageStrategy } from './storeStrategies/sessionInLocalStorage';\nimport { processSessionStoreOperations } from './sessionStoreOperations';\nimport { SessionPersistence } from './sessionConstants';\n/**\n * Every second, the storage will be polled to check for any change that can occur\n * to the session state in another browser tab, or another window.\n * This value has been determined from our previous cookie-only implementation.\n */\nexport var STORAGE_POLL_DELAY = ONE_SECOND;\n/**\n * Selects the correct session store strategy type based on the configuration and storage\n * availability.\n */\nexport function selectSessionStoreStrategyType(initConfiguration) {\n    switch (initConfiguration.sessionPersistence) {\n        case SessionPersistence.COOKIE:\n            return selectCookieStrategy(initConfiguration);\n        case SessionPersistence.LOCAL_STORAGE:\n            return selectLocalStorageStrategy();\n        case undefined: {\n            var sessionStoreStrategyType = selectCookieStrategy(initConfiguration);\n            if (!sessionStoreStrategyType && initConfiguration.allowFallbackToLocalStorage) {\n                sessionStoreStrategyType = selectLocalStorageStrategy();\n            }\n            return sessionStoreStrategyType;\n        }\n        default:\n            display.error(\"Invalid session persistence '\".concat(String(initConfiguration.sessionPersistence), \"'\"));\n    }\n}\n/**\n * Different session concepts:\n * - tracked, the session has an id and is updated along the user navigation\n * - not tracked, the session does not have an id but it is updated along the user navigation\n * - inactive, no session in store or session expired, waiting for a renew session\n */\nexport function startSessionStore(sessionStoreStrategyType, productKey, computeSessionState) {\n    var renewObservable = new Observable();\n    var expireObservable = new Observable();\n    var sessionStateUpdateObservable = new Observable();\n    var sessionStoreStrategy = sessionStoreStrategyType.type === SessionPersistence.COOKIE\n        ? initCookieStrategy(sessionStoreStrategyType.cookieOptions)\n        : initLocalStorageStrategy();\n    var expireSession = sessionStoreStrategy.expireSession;\n    var watchSessionTimeoutId = setInterval(watchSession, STORAGE_POLL_DELAY);\n    var sessionCache;\n    startSession();\n    var _a = throttle(function () {\n        processSessionStoreOperations({\n            process: function (sessionState) {\n                if (isSessionInNotStartedState(sessionState)) {\n                    return;\n                }\n                var synchronizedSession = synchronizeSession(sessionState);\n                expandOrRenewSessionState(synchronizedSession);\n                return synchronizedSession;\n            },\n            after: function (sessionState) {\n                if (isSessionStarted(sessionState) && !hasSessionInCache()) {\n                    renewSessionInCache(sessionState);\n                }\n                sessionCache = sessionState;\n            },\n        }, sessionStoreStrategy);\n    }, STORAGE_POLL_DELAY), throttledExpandOrRenewSession = _a.throttled, cancelExpandOrRenewSession = _a.cancel;\n    function expandSession() {\n        processSessionStoreOperations({\n            process: function (sessionState) { return (hasSessionInCache() ? synchronizeSession(sessionState) : undefined); },\n        }, sessionStoreStrategy);\n    }\n    /**\n     * allows two behaviors:\n     * - if the session is active, synchronize the session cache without updating the session store\n     * - if the session is not active, clear the session store and expire the session cache\n     */\n    function watchSession() {\n        processSessionStoreOperations({\n            process: function (sessionState) {\n                return isSessionInExpiredState(sessionState) ? getExpiredSessionState(sessionState) : undefined;\n            },\n            after: synchronizeSession,\n        }, sessionStoreStrategy);\n    }\n    function synchronizeSession(sessionState) {\n        if (isSessionInExpiredState(sessionState)) {\n            sessionState = getExpiredSessionState(sessionState);\n        }\n        if (hasSessionInCache()) {\n            if (isSessionInCacheOutdated(sessionState)) {\n                expireSessionInCache();\n            }\n            else {\n                sessionStateUpdateObservable.notify({ previousState: sessionCache, newState: sessionState });\n                sessionCache = sessionState;\n            }\n        }\n        return sessionState;\n    }\n    function startSession() {\n        processSessionStoreOperations({\n            process: function (sessionState) {\n                if (isSessionInNotStartedState(sessionState)) {\n                    return getExpiredSessionState(sessionState);\n                }\n            },\n            after: function (sessionState) {\n                sessionCache = sessionState;\n            },\n        }, sessionStoreStrategy);\n    }\n    function expandOrRenewSessionState(sessionState) {\n        if (isSessionInNotStartedState(sessionState)) {\n            return false;\n        }\n        var _a = computeSessionState(sessionState[productKey]), trackingType = _a.trackingType, isTracked = _a.isTracked;\n        sessionState[productKey] = trackingType;\n        delete sessionState.isExpired;\n        if (isTracked && !sessionState.id) {\n            sessionState.id = generateUUID();\n            sessionState.created = String(dateNow());\n        }\n    }\n    function hasSessionInCache() {\n        return sessionCache[productKey] !== undefined;\n    }\n    function isSessionInCacheOutdated(sessionState) {\n        return sessionCache.id !== sessionState.id || sessionCache[productKey] !== sessionState[productKey];\n    }\n    function expireSessionInCache() {\n        sessionCache = getExpiredSessionState(sessionCache);\n        expireObservable.notify();\n    }\n    function renewSessionInCache(sessionState) {\n        sessionCache = sessionState;\n        renewObservable.notify();\n    }\n    function updateSessionState(partialSessionState) {\n        processSessionStoreOperations({\n            process: function (sessionState) { return assign({}, sessionState, partialSessionState); },\n            after: synchronizeSession,\n        }, sessionStoreStrategy);\n    }\n    return {\n        expandOrRenewSession: throttledExpandOrRenewSession,\n        expandSession: expandSession,\n        getSession: function () { return sessionCache; },\n        renewObservable: renewObservable,\n        expireObservable: expireObservable,\n        sessionStateUpdateObservable: sessionStateUpdateObservable,\n        restartSession: startSession,\n        expire: function () {\n            cancelExpandOrRenewSession();\n            expireSession(sessionCache);\n            synchronizeSession(getExpiredSessionState(sessionCache));\n        },\n        stop: function () {\n            clearInterval(watchSessionTimeoutId);\n        },\n        updateSessionState: updateSessionState,\n    };\n}\n//# sourceMappingURL=sessionStore.js.map","import { timeStampNow } from '../../tools/utils/timeUtils';\nimport { normalizeUrl } from '../../tools/utils/urlPolyfill';\nimport { generateUUID } from '../../tools/utils/stringUtils';\nimport { INTAKE_SITE_US1, INTAKE_SITE_FED_STAGING, PCI_INTAKE_HOST_US1 } from './intakeSites';\nexport function createEndpointBuilder(initConfiguration, trackType, configurationTags) {\n    var buildUrlWithParameters = createEndpointUrlWithParametersBuilder(initConfiguration, trackType);\n    return {\n        build: function (api, payload) {\n            var parameters = buildEndpointParameters(initConfiguration, trackType, configurationTags, api, payload);\n            return buildUrlWithParameters(parameters);\n        },\n        urlPrefix: buildUrlWithParameters(''),\n        trackType: trackType,\n    };\n}\n/**\n * Create a function used to build a full endpoint url from provided parameters. The goal of this\n * function is to pre-compute some parts of the URL to avoid re-computing everything on every\n * request, as only parameters are changing.\n */\nfunction createEndpointUrlWithParametersBuilder(initConfiguration, trackType) {\n    var path = \"/api/v2/\".concat(trackType);\n    var proxy = initConfiguration.proxy;\n    if (typeof proxy === 'string') {\n        var normalizedProxyUrl_1 = normalizeUrl(proxy);\n        return function (parameters) { return \"\".concat(normalizedProxyUrl_1, \"?ddforward=\").concat(encodeURIComponent(\"\".concat(path, \"?\").concat(parameters))); };\n    }\n    if (typeof proxy === 'function') {\n        return function (parameters) { return proxy({ path: path, parameters: parameters }); };\n    }\n    var host = buildEndpointHost(trackType, initConfiguration);\n    return function (parameters) { return \"https://\".concat(host).concat(path, \"?\").concat(parameters); };\n}\nfunction buildEndpointHost(trackType, initConfiguration) {\n    var _a = initConfiguration.site, site = _a === void 0 ? INTAKE_SITE_US1 : _a, internalAnalyticsSubdomain = initConfiguration.internalAnalyticsSubdomain;\n    if (trackType === 'logs' && initConfiguration.usePciIntake && site === INTAKE_SITE_US1) {\n        return PCI_INTAKE_HOST_US1;\n    }\n    if (internalAnalyticsSubdomain && site === INTAKE_SITE_US1) {\n        return \"\".concat(internalAnalyticsSubdomain, \".\").concat(INTAKE_SITE_US1);\n    }\n    if (site === INTAKE_SITE_FED_STAGING) {\n        return \"http-intake.logs.\".concat(site);\n    }\n    var domainParts = site.split('.');\n    var extension = domainParts.pop();\n    return \"browser-intake-\".concat(domainParts.join('-'), \".\").concat(extension);\n}\n/**\n * Build parameters to be used for an intake request. Parameters should be re-built for each\n * request, as they change randomly.\n */\nfunction buildEndpointParameters(_a, trackType, configurationTags, api, _b) {\n    var clientToken = _a.clientToken, internalAnalyticsSubdomain = _a.internalAnalyticsSubdomain;\n    var retry = _b.retry, encoding = _b.encoding;\n    var tags = [\"sdk_version:\".concat(\"5.35.1\"), \"api:\".concat(api)].concat(configurationTags);\n    if (retry) {\n        tags.push(\"retry_count:\".concat(retry.count), \"retry_after:\".concat(retry.lastFailureStatus));\n    }\n    var parameters = [\n        'ddsource=browser',\n        \"ddtags=\".concat(encodeURIComponent(tags.join(','))),\n        \"dd-api-key=\".concat(clientToken),\n        \"dd-evp-origin-version=\".concat(encodeURIComponent(\"5.35.1\")),\n        'dd-evp-origin=browser',\n        \"dd-request-id=\".concat(generateUUID()),\n    ];\n    if (encoding) {\n        parameters.push(\"dd-evp-encoding=\".concat(encoding));\n    }\n    if (trackType === 'rum') {\n        parameters.push(\"batch_time=\".concat(timeStampNow()));\n    }\n    if (internalAnalyticsSubdomain) {\n        parameters.reverse();\n    }\n    return parameters.join('&');\n}\n//# sourceMappingURL=endpointBuilder.js.map","import { DOCS_ORIGIN, MORE_DETAILS, display } from '../../tools/display';\nexport var TAG_SIZE_LIMIT = 200;\nexport function buildTags(configuration) {\n    var env = configuration.env, service = configuration.service, version = configuration.version, datacenter = configuration.datacenter;\n    var tags = [];\n    if (env) {\n        tags.push(buildTag('env', env));\n    }\n    if (service) {\n        tags.push(buildTag('service', service));\n    }\n    if (version) {\n        tags.push(buildTag('version', version));\n    }\n    if (datacenter) {\n        tags.push(buildTag('datacenter', datacenter));\n    }\n    return tags;\n}\nexport function buildTag(key, rawValue) {\n    // See https://docs.datadoghq.com/getting_started/tagging/#defining-tags for tags syntax. Note\n    // that the backend may not follow the exact same rules, so we only want to display an informal\n    // warning.\n    var valueSizeLimit = TAG_SIZE_LIMIT - key.length - 1;\n    if (rawValue.length > valueSizeLimit || hasForbiddenCharacters(rawValue)) {\n        display.warn(\"\".concat(key, \" value doesn't meet tag requirements and will be sanitized. \").concat(MORE_DETAILS, \" \").concat(DOCS_ORIGIN, \"/getting_started/tagging/#defining-tags\"));\n    }\n    // Let the backend do most of the sanitization, but still make sure multiple tags can't be crafted\n    // by forging a value containing commas.\n    var sanitizedValue = rawValue.replace(/,/g, '_');\n    return \"\".concat(key, \":\").concat(sanitizedValue);\n}\nfunction hasForbiddenCharacters(rawValue) {\n    // Unicode property escapes is not supported in all browsers, so we use a try/catch.\n    // Todo: Remove the try/catch when dropping IE11.\n    if (!supportUnicodePropertyEscapes()) {\n        return false;\n    }\n    // We use the Unicode property escapes to match any character that is a letter including other languages like Chinese, Japanese, etc.\n    // p{Ll} matches a lowercase letter.\n    // p{Lo} matches a letter that is neither uppercase nor lowercase (ex: Japanese characters).\n    // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Regular_expressions/Unicode_character_class_escape#unicode_property_escapes_vs._character_classes\n    return new RegExp('[^\\\\p{Ll}\\\\p{Lo}0-9_:./-]', 'u').test(rawValue);\n}\nexport function supportUnicodePropertyEscapes() {\n    try {\n        new RegExp('[\\\\p{Ll}]', 'u');\n        return true;\n    }\n    catch (_a) {\n        return false;\n    }\n}\n//# sourceMappingURL=tags.js.map","import { assign, includes } from '../../tools/utils/polyfills';\nimport { createEndpointBuilder } from './endpointBuilder';\nimport { buildTags } from './tags';\nimport { INTAKE_SITE_US1, INTAKE_URL_PARAMETERS } from './intakeSites';\nexport function computeTransportConfiguration(initConfiguration) {\n    var site = initConfiguration.site || INTAKE_SITE_US1;\n    var tags = buildTags(initConfiguration);\n    var endpointBuilders = computeEndpointBuilders(initConfiguration, tags);\n    var replicaConfiguration = computeReplicaConfiguration(initConfiguration, tags);\n    return assign({\n        replica: replicaConfiguration,\n        site: site,\n    }, endpointBuilders);\n}\nfunction computeEndpointBuilders(initConfiguration, tags) {\n    return {\n        logsEndpointBuilder: createEndpointBuilder(initConfiguration, 'logs', tags),\n        rumEndpointBuilder: createEndpointBuilder(initConfiguration, 'rum', tags),\n        sessionReplayEndpointBuilder: createEndpointBuilder(initConfiguration, 'replay', tags),\n    };\n}\nfunction computeReplicaConfiguration(initConfiguration, tags) {\n    if (!initConfiguration.replica) {\n        return;\n    }\n    var replicaConfiguration = assign({}, initConfiguration, {\n        site: INTAKE_SITE_US1,\n        clientToken: initConfiguration.replica.clientToken,\n    });\n    var replicaEndpointBuilders = {\n        logsEndpointBuilder: createEndpointBuilder(replicaConfiguration, 'logs', tags),\n        rumEndpointBuilder: createEndpointBuilder(replicaConfiguration, 'rum', tags),\n    };\n    return assign({ applicationId: initConfiguration.replica.applicationId }, replicaEndpointBuilders);\n}\nexport function isIntakeUrl(url) {\n    // check if tags is present in the query string\n    return INTAKE_URL_PARAMETERS.every(function (param) { return includes(url, param); });\n}\n//# sourceMappingURL=transportConfiguration.js.map","import { catchUserErrors } from '../../tools/catchUserErrors';\nimport { DOCS_ORIGIN, MORE_DETAILS, display } from '../../tools/display';\nimport { ONE_SECOND } from '../../tools/utils/timeUtils';\nimport { isPercentage } from '../../tools/utils/numberUtils';\nimport { ONE_KIBI_BYTE } from '../../tools/utils/byteUtils';\nimport { objectHasValue } from '../../tools/utils/objectUtils';\nimport { assign } from '../../tools/utils/polyfills';\nimport { selectSessionStoreStrategyType } from '../session/sessionStore';\nimport { TrackingConsent } from '../trackingConsent';\nimport { computeTransportConfiguration } from './transportConfiguration';\nexport var DefaultPrivacyLevel = {\n    ALLOW: 'allow',\n    MASK: 'mask',\n    MASK_USER_INPUT: 'mask-user-input',\n};\nexport var TraceContextInjection = {\n    ALL: 'all',\n    SAMPLED: 'sampled',\n};\nfunction isString(tag, tagName) {\n    if (tag !== undefined && tag !== null && typeof tag !== 'string') {\n        display.error(\"\".concat(tagName, \" must be defined as a string\"));\n        return false;\n    }\n    return true;\n}\nfunction isDatadogSite(site) {\n    if (site && typeof site === 'string' && !/(datadog|ddog|datad0g|dd0g)/.test(site)) {\n        display.error(\"Site should be a valid Datadog site. \".concat(MORE_DETAILS, \" \").concat(DOCS_ORIGIN, \"/getting_started/site/.\"));\n        return false;\n    }\n    return true;\n}\nexport function isSampleRate(sampleRate, name) {\n    if (sampleRate !== undefined && !isPercentage(sampleRate)) {\n        display.error(\"\".concat(name, \" Sample Rate should be a number between 0 and 100\"));\n        return false;\n    }\n    return true;\n}\nexport function validateAndBuildConfiguration(initConfiguration) {\n    var _a, _b, _c, _d, _e;\n    if (!initConfiguration || !initConfiguration.clientToken) {\n        display.error('Client Token is not configured, we will not send any data.');\n        return;\n    }\n    if (!isDatadogSite(initConfiguration.site) ||\n        !isSampleRate(initConfiguration.sessionSampleRate, 'Session') ||\n        !isSampleRate(initConfiguration.telemetrySampleRate, 'Telemetry') ||\n        !isSampleRate(initConfiguration.telemetryConfigurationSampleRate, 'Telemetry Configuration') ||\n        !isSampleRate(initConfiguration.telemetryUsageSampleRate, 'Telemetry Usage') ||\n        !isString(initConfiguration.version, 'Version') ||\n        !isString(initConfiguration.env, 'Env') ||\n        !isString(initConfiguration.service, 'Service')) {\n        return;\n    }\n    if (initConfiguration.trackingConsent !== undefined &&\n        !objectHasValue(TrackingConsent, initConfiguration.trackingConsent)) {\n        display.error('Tracking Consent should be either \"granted\" or \"not-granted\"');\n        return;\n    }\n    return assign({\n        beforeSend: initConfiguration.beforeSend && catchUserErrors(initConfiguration.beforeSend, 'beforeSend threw an error:'),\n        sessionStoreStrategyType: selectSessionStoreStrategyType(initConfiguration),\n        sessionSampleRate: (_a = initConfiguration.sessionSampleRate) !== null && _a !== void 0 ? _a : 100,\n        telemetrySampleRate: (_b = initConfiguration.telemetrySampleRate) !== null && _b !== void 0 ? _b : 20,\n        telemetryConfigurationSampleRate: (_c = initConfiguration.telemetryConfigurationSampleRate) !== null && _c !== void 0 ? _c : 5,\n        telemetryUsageSampleRate: (_d = initConfiguration.telemetryUsageSampleRate) !== null && _d !== void 0 ? _d : 5,\n        service: initConfiguration.service || undefined,\n        silentMultipleInit: !!initConfiguration.silentMultipleInit,\n        allowUntrustedEvents: !!initConfiguration.allowUntrustedEvents,\n        trackingConsent: (_e = initConfiguration.trackingConsent) !== null && _e !== void 0 ? _e : TrackingConsent.GRANTED,\n        storeContextsAcrossPages: !!initConfiguration.storeContextsAcrossPages,\n        /**\n         * beacon payload max queue size implementation is 64kb\n         * ensure that we leave room for logs, rum and potential other users\n         */\n        batchBytesLimit: 16 * ONE_KIBI_BYTE,\n        eventRateLimiterThreshold: 3000,\n        maxTelemetryEventsPerPage: 15,\n        /**\n         * flush automatically, aim to be lower than ALB connection timeout\n         * to maximize connection reuse.\n         */\n        flushTimeout: (30 * ONE_SECOND),\n        /**\n         * Logs intake limit\n         */\n        batchMessagesLimit: 50,\n        messageBytesLimit: 256 * ONE_KIBI_BYTE,\n    }, computeTransportConfiguration(initConfiguration));\n}\nexport function serializeConfiguration(initConfiguration) {\n    return {\n        session_sample_rate: initConfiguration.sessionSampleRate,\n        telemetry_sample_rate: initConfiguration.telemetrySampleRate,\n        telemetry_configuration_sample_rate: initConfiguration.telemetryConfigurationSampleRate,\n        telemetry_usage_sample_rate: initConfiguration.telemetryUsageSampleRate,\n        use_before_send: !!initConfiguration.beforeSend,\n        use_cross_site_session_cookie: initConfiguration.useCrossSiteSessionCookie,\n        use_partitioned_cross_site_session_cookie: initConfiguration.usePartitionedCrossSiteSessionCookie,\n        use_secure_session_cookie: initConfiguration.useSecureSessionCookie,\n        use_proxy: !!initConfiguration.proxy,\n        silent_multiple_init: initConfiguration.silentMultipleInit,\n        track_session_across_subdomains: initConfiguration.trackSessionAcrossSubdomains,\n        session_persistence: initConfiguration.sessionPersistence,\n        allow_fallback_to_local_storage: !!initConfiguration.allowFallbackToLocalStorage,\n        store_contexts_across_pages: !!initConfiguration.storeContextsAcrossPages,\n        allow_untrusted_events: !!initConfiguration.allowUntrustedEvents,\n        tracking_consent: initConfiguration.trackingConsent,\n    };\n}\n//# sourceMappingURL=configuration.js.map","import { ExperimentalFeature, isExperimentalFeatureEnabled } from '@datadog/browser-core';\nimport { getCrypto } from '../../browser/crypto';\nexport function createTraceIdentifier() {\n    return createIdentifier(64);\n}\nexport function createSpanIdentifier() {\n    return createIdentifier(63);\n}\nvar createIdentifierImplementationCache;\nfunction createIdentifier(bits) {\n    if (!createIdentifierImplementationCache) {\n        createIdentifierImplementationCache =\n            isExperimentalFeatureEnabled(ExperimentalFeature.CONSISTENT_TRACE_SAMPLING) && areBigIntIdentifiersSupported()\n                ? createIdentifierUsingBigInt\n                : createIdentifierUsingUint32Array;\n    }\n    return createIdentifierImplementationCache(bits);\n}\nexport function areBigIntIdentifiersSupported() {\n    try {\n        crypto.getRandomValues(new BigUint64Array(1));\n        return true;\n    }\n    catch (_a) {\n        return false;\n    }\n}\nfunction createIdentifierUsingBigInt(bits) {\n    var id = crypto.getRandomValues(new BigUint64Array(1))[0];\n    if (bits === 63) {\n        // eslint-disable-next-line no-bitwise\n        id >>= BigInt('1');\n    }\n    return id;\n}\n// TODO: remove this when all browser we support have BigInt support\nfunction createIdentifierUsingUint32Array(bits) {\n    var buffer = getCrypto().getRandomValues(new Uint32Array(2));\n    if (bits === 63) {\n        // eslint-disable-next-line no-bitwise\n        buffer[buffer.length - 1] >>>= 1; // force 63-bit\n    }\n    return {\n        toString: function (radix) {\n            if (radix === void 0) { radix = 10; }\n            var high = buffer[1];\n            var low = buffer[0];\n            var str = '';\n            do {\n                var mod = (high % radix) * 4294967296 + low;\n                high = Math.floor(high / radix);\n                low = Math.floor(mod / radix);\n                str = (mod % radix).toString(radix) + str;\n            } while (high || low);\n            return str;\n        },\n    };\n}\nexport function toPaddedHexadecimalString(id) {\n    var traceId = id.toString(16);\n    // TODO: replace with String.prototype.padStart when we drop IE11 support\n    return Array(17 - traceId.length).join('0') + traceId;\n}\n//# sourceMappingURL=identifier.js.map","import { startsWith } from './utils/polyfills';\nimport { display } from './display';\nimport { getType } from './utils/typeUtils';\nexport function isMatchOption(item) {\n    var itemType = getType(item);\n    return itemType === 'string' || itemType === 'function' || item instanceof RegExp;\n}\n/**\n * Returns true if value can be matched by at least one of the provided MatchOptions.\n * When comparing strings, setting useStartsWith to true will compare the value with the start of\n * the option, instead of requiring an exact match.\n */\nexport function matchList(list, value, useStartsWith) {\n    if (useStartsWith === void 0) { useStartsWith = false; }\n    return list.some(function (item) {\n        try {\n            if (typeof item === 'function') {\n                return item(value);\n            }\n            else if (item instanceof RegExp) {\n                return item.test(value);\n            }\n            else if (typeof item === 'string') {\n                return useStartsWith ? startsWith(value, item) : item === value;\n            }\n        }\n        catch (e) {\n            display.error(e);\n        }\n        return false;\n    });\n}\n//# sourceMappingURL=matchOption.js.map","export function getCrypto() {\n    // TODO: remove msCrypto when IE11 support is dropped\n    return window.crypto || window.msCrypto;\n}\n//# sourceMappingURL=crypto.js.map","import { objectEntries, shallowClone, assign, find, getType, isMatchOption, matchList, TraceContextInjection, } from '@datadog/browser-core';\nimport { getCrypto } from '../../browser/crypto';\nimport { createSpanIdentifier, createTraceIdentifier, toPaddedHexadecimalString } from './identifier';\nimport { isTraceSampled } from './sampler';\nexport function isTracingOption(item) {\n    var expectedItem = item;\n    return (getType(expectedItem) === 'object' &&\n        isMatchOption(expectedItem.match) &&\n        Array.isArray(expectedItem.propagatorTypes));\n}\n/**\n * Clear tracing information to avoid incomplete traces. Ideally, we should do it when the\n * request did not reach the server, but the browser does not expose this. So, we clear tracing\n * information if the request ended with status 0 without being aborted by the application.\n *\n * Reasoning:\n *\n * * Applications are usually aborting requests after a bit of time, for example when the user is\n * typing (autocompletion) or navigating away (in a SPA). With a performant device and good\n * network conditions, the request is likely to reach the server before being canceled.\n *\n * * Requests aborted otherwise (ex: lack of internet, CORS issue, blocked by a privacy extension)\n * are likely to finish quickly and without reaching the server.\n *\n * Of course, it might not be the case every time, but it should limit having incomplete traces a\n * bit.\n * */\nexport function clearTracingIfNeeded(context) {\n    if (context.status === 0 && !context.isAborted) {\n        context.traceId = undefined;\n        context.spanId = undefined;\n        context.traceSampled = undefined;\n    }\n}\nexport function startTracer(configuration, sessionManager) {\n    return {\n        clearTracingIfNeeded: clearTracingIfNeeded,\n        traceFetch: function (context) {\n            return injectHeadersIfTracingAllowed(configuration, context, sessionManager, function (tracingHeaders) {\n                var _a;\n                if (context.input instanceof Request && !((_a = context.init) === null || _a === void 0 ? void 0 : _a.headers)) {\n                    context.input = new Request(context.input);\n                    Object.keys(tracingHeaders).forEach(function (key) {\n                        ;\n                        context.input.headers.append(key, tracingHeaders[key]);\n                    });\n                }\n                else {\n                    context.init = shallowClone(context.init);\n                    var headers_1 = [];\n                    if (context.init.headers instanceof Headers) {\n                        context.init.headers.forEach(function (value, key) {\n                            headers_1.push([key, value]);\n                        });\n                    }\n                    else if (Array.isArray(context.init.headers)) {\n                        context.init.headers.forEach(function (header) {\n                            headers_1.push(header);\n                        });\n                    }\n                    else if (context.init.headers) {\n                        Object.keys(context.init.headers).forEach(function (key) {\n                            headers_1.push([key, context.init.headers[key]]);\n                        });\n                    }\n                    context.init.headers = headers_1.concat(objectEntries(tracingHeaders));\n                }\n            });\n        },\n        traceXhr: function (context, xhr) {\n            return injectHeadersIfTracingAllowed(configuration, context, sessionManager, function (tracingHeaders) {\n                Object.keys(tracingHeaders).forEach(function (name) {\n                    xhr.setRequestHeader(name, tracingHeaders[name]);\n                });\n            });\n        },\n    };\n}\nfunction injectHeadersIfTracingAllowed(configuration, context, sessionManager, inject) {\n    if (!isTracingSupported() || !sessionManager.findTrackedSession()) {\n        return;\n    }\n    var tracingOption = find(configuration.allowedTracingUrls, function (tracingOption) {\n        return matchList([tracingOption.match], context.url, true);\n    });\n    if (!tracingOption) {\n        return;\n    }\n    var traceId = createTraceIdentifier();\n    context.traceSampled = isTraceSampled(traceId, configuration.traceSampleRate);\n    var shouldInjectHeaders = context.traceSampled || configuration.traceContextInjection === TraceContextInjection.ALL;\n    if (!shouldInjectHeaders) {\n        return;\n    }\n    context.traceId = traceId;\n    context.spanId = createSpanIdentifier();\n    inject(makeTracingHeaders(context.traceId, context.spanId, context.traceSampled, tracingOption.propagatorTypes));\n}\nexport function isTracingSupported() {\n    return getCrypto() !== undefined;\n}\n/**\n * When trace is not sampled, set priority to '0' instead of not adding the tracing headers\n * to prepare the implementation for sampling delegation.\n */\nfunction makeTracingHeaders(traceId, spanId, traceSampled, propagatorTypes) {\n    var tracingHeaders = {};\n    propagatorTypes.forEach(function (propagatorType) {\n        switch (propagatorType) {\n            case 'datadog': {\n                assign(tracingHeaders, {\n                    'x-datadog-origin': 'rum',\n                    'x-datadog-parent-id': spanId.toString(),\n                    'x-datadog-sampling-priority': traceSampled ? '1' : '0',\n                    'x-datadog-trace-id': traceId.toString(),\n                });\n                break;\n            }\n            // https://www.w3.org/TR/trace-context/\n            case 'tracecontext': {\n                assign(tracingHeaders, {\n                    traceparent: \"00-0000000000000000\".concat(toPaddedHexadecimalString(traceId), \"-\").concat(toPaddedHexadecimalString(spanId), \"-0\").concat(traceSampled ? '1' : '0'),\n                });\n                break;\n            }\n            // https://github.com/openzipkin/b3-propagation\n            case 'b3': {\n                assign(tracingHeaders, {\n                    b3: \"\".concat(toPaddedHexadecimalString(traceId), \"-\").concat(toPaddedHexadecimalString(spanId), \"-\").concat(traceSampled ? '1' : '0'),\n                });\n                break;\n            }\n            case 'b3multi': {\n                assign(tracingHeaders, {\n                    'X-B3-TraceId': toPaddedHexadecimalString(traceId),\n                    'X-B3-SpanId': toPaddedHexadecimalString(spanId),\n                    'X-B3-Sampled': traceSampled ? '1' : '0',\n                });\n                break;\n            }\n        }\n    });\n    return tracingHeaders;\n}\n//# sourceMappingURL=tracer.js.map","import { performDraw } from '@datadog/browser-core';\nexport function isTraceSampled(identifier, sampleRate) {\n    // Shortcuts for common cases. This is not strictly necessary, but it makes the code faster for\n    // customers willing to ingest all traces.\n    if (sampleRate === 100) {\n        return true;\n    }\n    if (sampleRate === 0) {\n        return false;\n    }\n    // For simplicity, we don't use consistent sampling for browser that don't support BigInt\n    // TODO: remove this when all browser we support have BigInt support\n    if (typeof identifier !== 'bigint') {\n        return performDraw(sampleRate);\n    }\n    // Offer consistent sampling for the same trace id across different environments. The rule is:\n    //\n    //   (identifier * knuthFactor) % 2^64 < sampleRate * 2^64\n    //\n    // Because JavaScript numbers are 64-bit floats, we can't represent 64-bit integers, and the\n    // modulo would be incorrect. Thus, we are using BigInts here.\n    //\n    // Implementation in other languages:\n    // * Go     https://github.com/DataDog/dd-trace-go/blob/ec6fbb1f2d517b7b8e69961052adf7136f3af773/ddtrace/tracer/sampler.go#L86-L91\n    // * Python https://github.com/DataDog/dd-trace-py/blob/0cee2f066fb6e79aa15947c1514c0f406dea47c5/ddtrace/sampling_rule.py#L197\n    // * Ruby   https://github.com/DataDog/dd-trace-rb/blob/1a6e255cdcb7e7e22235ea5955f90f6dfa91045d/lib/datadog/tracing/sampling/rate_sampler.rb#L42\n    // * C++    https://github.com/DataDog/dd-trace-cpp/blob/159629edc438ae45f2bb318eb7bd51abd05e94b5/src/datadog/trace_sampler.cpp#L58\n    // * Java   https://github.com/DataDog/dd-trace-java/blob/896dd6b380533216e0bdee59614606c8272d313e/dd-trace-core/src/main/java/datadog/trace/common/sampling/DeterministicSampler.java#L48\n    //\n    // Note: All implementations have slight variations. Some of them use '<=' instead of '<', and\n    // use `sampleRate * 2^64 - 1` instead of `sampleRate * 2^64`. The following implementation\n    // should adhere to the spec and is a bit simpler than using a 2^64-1 limit as there are less\n    // BigInt arithmetic to write. In practice this does not matter, as we are using floating point\n    // numbers in the end, and Number(2n**64n-1n) === Number(2n**64n).\n    var knuthFactor = BigInt('1111111111111111111');\n    var twoPow64 = BigInt('0x10000000000000000'); // 2n ** 64n\n    var hash = (identifier * knuthFactor) % twoPow64;\n    return Number(hash) <= (sampleRate / 100) * Number(twoPow64);\n}\n//# sourceMappingURL=sampler.js.map","import { getType, arrayFrom, isMatchOption, serializeConfiguration, assign, DefaultPrivacyLevel, TraceContextInjection, display, objectHasValue, validateAndBuildConfiguration, isSampleRate, isNumber, } from '@datadog/browser-core';\nimport { isTracingOption } from '../tracing/tracer';\nexport var DEFAULT_PROPAGATOR_TYPES = ['tracecontext', 'datadog'];\nexport function validateAndBuildRumConfiguration(initConfiguration) {\n    var _a, _b, _c;\n    if (!initConfiguration.applicationId) {\n        display.error('Application ID is not configured, no RUM data will be collected.');\n        return;\n    }\n    if (!isSampleRate(initConfiguration.sessionReplaySampleRate, 'Session Replay') ||\n        !isSampleRate(initConfiguration.traceSampleRate, 'Trace')) {\n        return;\n    }\n    if (initConfiguration.excludedActivityUrls !== undefined && !Array.isArray(initConfiguration.excludedActivityUrls)) {\n        display.error('Excluded Activity Urls should be an array');\n        return;\n    }\n    var allowedTracingUrls = validateAndBuildTracingOptions(initConfiguration);\n    if (!allowedTracingUrls) {\n        return;\n    }\n    var baseConfiguration = validateAndBuildConfiguration(initConfiguration);\n    if (!baseConfiguration) {\n        return;\n    }\n    var sessionReplaySampleRate = (_a = initConfiguration.sessionReplaySampleRate) !== null && _a !== void 0 ? _a : 0;\n    return assign({\n        applicationId: initConfiguration.applicationId,\n        version: initConfiguration.version || undefined,\n        actionNameAttribute: initConfiguration.actionNameAttribute,\n        sessionReplaySampleRate: sessionReplaySampleRate,\n        startSessionReplayRecordingManually: initConfiguration.startSessionReplayRecordingManually !== undefined\n            ? !!initConfiguration.startSessionReplayRecordingManually\n            : sessionReplaySampleRate === 0,\n        traceSampleRate: (_b = initConfiguration.traceSampleRate) !== null && _b !== void 0 ? _b : 100,\n        rulePsr: isNumber(initConfiguration.traceSampleRate) ? initConfiguration.traceSampleRate / 100 : undefined,\n        allowedTracingUrls: allowedTracingUrls,\n        excludedActivityUrls: (_c = initConfiguration.excludedActivityUrls) !== null && _c !== void 0 ? _c : [],\n        workerUrl: initConfiguration.workerUrl,\n        compressIntakeRequests: !!initConfiguration.compressIntakeRequests,\n        trackUserInteractions: !!initConfiguration.trackUserInteractions,\n        trackViewsManually: !!initConfiguration.trackViewsManually,\n        trackResources: !!initConfiguration.trackResources,\n        trackLongTasks: !!initConfiguration.trackLongTasks,\n        subdomain: initConfiguration.subdomain,\n        defaultPrivacyLevel: objectHasValue(DefaultPrivacyLevel, initConfiguration.defaultPrivacyLevel)\n            ? initConfiguration.defaultPrivacyLevel\n            : DefaultPrivacyLevel.MASK,\n        enablePrivacyForActionName: !!initConfiguration.enablePrivacyForActionName,\n        customerDataTelemetrySampleRate: 1,\n        traceContextInjection: objectHasValue(TraceContextInjection, initConfiguration.traceContextInjection)\n            ? initConfiguration.traceContextInjection\n            : TraceContextInjection.ALL,\n        plugins: initConfiguration.plugins || [],\n    }, baseConfiguration);\n}\n/**\n * Validates allowedTracingUrls and converts match options to tracing options\n */\nfunction validateAndBuildTracingOptions(initConfiguration) {\n    if (initConfiguration.allowedTracingUrls === undefined) {\n        return [];\n    }\n    if (!Array.isArray(initConfiguration.allowedTracingUrls)) {\n        display.error('Allowed Tracing URLs should be an array');\n        return;\n    }\n    if (initConfiguration.allowedTracingUrls.length !== 0 && initConfiguration.service === undefined) {\n        display.error('Service needs to be configured when tracing is enabled');\n        return;\n    }\n    // Convert from (MatchOption | TracingOption) to TracingOption, remove unknown properties\n    var tracingOptions = [];\n    initConfiguration.allowedTracingUrls.forEach(function (option) {\n        if (isMatchOption(option)) {\n            tracingOptions.push({ match: option, propagatorTypes: DEFAULT_PROPAGATOR_TYPES });\n        }\n        else if (isTracingOption(option)) {\n            tracingOptions.push(option);\n        }\n        else {\n            display.warn('Allowed Tracing Urls parameters should be a string, RegExp, function, or an object. Ignoring parameter', option);\n        }\n    });\n    return tracingOptions;\n}\n/**\n * Combines the selected tracing propagators from the different options in allowedTracingUrls\n */\nfunction getSelectedTracingPropagators(configuration) {\n    var usedTracingPropagators = new Set();\n    if (Array.isArray(configuration.allowedTracingUrls) && configuration.allowedTracingUrls.length > 0) {\n        configuration.allowedTracingUrls.forEach(function (option) {\n            if (isMatchOption(option)) {\n                DEFAULT_PROPAGATOR_TYPES.forEach(function (propagatorType) { return usedTracingPropagators.add(propagatorType); });\n            }\n            else if (getType(option) === 'object' && Array.isArray(option.propagatorTypes)) {\n                // Ensure we have an array, as we cannot rely on types yet (configuration is provided by users)\n                option.propagatorTypes.forEach(function (propagatorType) { return usedTracingPropagators.add(propagatorType); });\n            }\n        });\n    }\n    return arrayFrom(usedTracingPropagators);\n}\nexport function serializeRumConfiguration(configuration) {\n    var _a;\n    var baseSerializedConfiguration = serializeConfiguration(configuration);\n    return assign({\n        session_replay_sample_rate: configuration.sessionReplaySampleRate,\n        start_session_replay_recording_manually: configuration.startSessionReplayRecordingManually,\n        trace_sample_rate: configuration.traceSampleRate,\n        trace_context_injection: configuration.traceContextInjection,\n        action_name_attribute: configuration.actionNameAttribute,\n        use_allowed_tracing_urls: Array.isArray(configuration.allowedTracingUrls) && configuration.allowedTracingUrls.length > 0,\n        selected_tracing_propagators: getSelectedTracingPropagators(configuration),\n        default_privacy_level: configuration.defaultPrivacyLevel,\n        enable_privacy_for_action_name: configuration.enablePrivacyForActionName,\n        use_excluded_activity_urls: Array.isArray(configuration.excludedActivityUrls) && configuration.excludedActivityUrls.length > 0,\n        use_worker_url: !!configuration.workerUrl,\n        compress_intake_requests: configuration.compressIntakeRequests,\n        track_views_manually: configuration.trackViewsManually,\n        track_user_interactions: configuration.trackUserInteractions,\n        track_resources: configuration.trackResources,\n        track_long_task: configuration.trackLongTasks,\n        plugins: (_a = configuration.plugins) === null || _a === void 0 ? void 0 : _a.map(function (plugin) { var _a; return assign({ name: plugin.name }, (_a = plugin.getConfigurationTelemetry) === null || _a === void 0 ? void 0 : _a.call(plugin)); }),\n    }, baseSerializedConfiguration);\n}\n//# sourceMappingURL=configuration.js.map","import { display, addEventListener, assign } from '@datadog/browser-core';\nexport var REMOTE_CONFIGURATION_URL = 'https://d3uc069fcn7uxw.cloudfront.net/configuration';\nexport function fetchAndApplyRemoteConfiguration(initConfiguration, callback) {\n    fetchRemoteConfiguration(initConfiguration, function (remoteInitConfiguration) {\n        callback(applyRemoteConfiguration(initConfiguration, remoteInitConfiguration));\n    });\n}\nexport function applyRemoteConfiguration(initConfiguration, remoteInitConfiguration) {\n    return assign({}, initConfiguration, remoteInitConfiguration);\n}\nexport function fetchRemoteConfiguration(configuration, callback) {\n    var xhr = new XMLHttpRequest();\n    addEventListener(configuration, xhr, 'load', function () {\n        if (xhr.status === 200) {\n            callback(JSON.parse(xhr.responseText));\n        }\n        else {\n            displayRemoteConfigurationFetchingError();\n        }\n    });\n    addEventListener(configuration, xhr, 'error', function () {\n        displayRemoteConfigurationFetchingError();\n    });\n    xhr.open('GET', \"\".concat(REMOTE_CONFIGURATION_URL, \"/\").concat(encodeURIComponent(configuration.remoteConfigurationId), \".json\"));\n    xhr.send();\n}\nfunction displayRemoteConfigurationFetchingError() {\n    display.error('Error fetching the remote configuration.');\n}\n//# sourceMappingURL=remoteConfiguration.js.map","import { createBoundedBuffer, display, canUseEventBridge, displayAlreadyInitializedError, willSyntheticsInjectRum, noop, timeStampNow, clocksNow, assign, getEventBridge, ExperimentalFeature, isExperimentalFeatureEnabled, initFeatureFlags, addTelemetryConfiguration, initFetchObservable, } from '@datadog/browser-core';\nimport { validateAndBuildRumConfiguration, } from '../domain/configuration';\nimport { startDurationVital, stopDurationVital } from '../domain/vital/vitalCollection';\nimport { fetchAndApplyRemoteConfiguration, serializeRumConfiguration } from '../domain/configuration';\nimport { callPluginsMethod } from '../domain/plugins';\nexport function createPreStartStrategy(_a, getCommonContext, trackingConsentState, customVitalsState, doStartRum) {\n    var ignoreInitIfSyntheticsWillInjectRum = _a.ignoreInitIfSyntheticsWillInjectRum, startDeflateWorker = _a.startDeflateWorker;\n    var bufferApiCalls = createBoundedBuffer();\n    var firstStartViewCall;\n    var deflateWorker;\n    var cachedInitConfiguration;\n    var cachedConfiguration;\n    var trackingConsentStateSubscription = trackingConsentState.observable.subscribe(tryStartRum);\n    function tryStartRum() {\n        if (!cachedInitConfiguration || !cachedConfiguration || !trackingConsentState.isGranted()) {\n            return;\n        }\n        trackingConsentStateSubscription.unsubscribe();\n        var initialViewOptions;\n        if (cachedConfiguration.trackViewsManually) {\n            if (!firstStartViewCall) {\n                return;\n            }\n            // An initial view is always created when starting RUM.\n            // When tracking views automatically, any startView call before RUM start creates an extra\n            // view.\n            // When tracking views manually, we use the ViewOptions from the first startView call as the\n            // initial view options, and we remove the actual startView call so we don't create an extra\n            // view.\n            bufferApiCalls.remove(firstStartViewCall.callback);\n            initialViewOptions = firstStartViewCall.options;\n        }\n        var startRumResult = doStartRum(cachedConfiguration, deflateWorker, initialViewOptions);\n        bufferApiCalls.drain(startRumResult);\n    }\n    function doInit(initConfiguration) {\n        var eventBridgeAvailable = canUseEventBridge();\n        if (eventBridgeAvailable) {\n            initConfiguration = overrideInitConfigurationForBridge(initConfiguration);\n        }\n        // Update the exposed initConfiguration to reflect the bridge and remote configuration overrides\n        cachedInitConfiguration = initConfiguration;\n        addTelemetryConfiguration(serializeRumConfiguration(initConfiguration));\n        if (cachedConfiguration) {\n            displayAlreadyInitializedError('DD_RUM', initConfiguration);\n            return;\n        }\n        var configuration = validateAndBuildRumConfiguration(initConfiguration);\n        if (!configuration) {\n            return;\n        }\n        if (!eventBridgeAvailable && !configuration.sessionStoreStrategyType) {\n            display.warn('No storage available for session. We will not send any data.');\n            return;\n        }\n        if (configuration.compressIntakeRequests && !eventBridgeAvailable && startDeflateWorker) {\n            deflateWorker = startDeflateWorker(configuration, 'Datadog RUM', \n            // Worker initialization can fail asynchronously, especially in Firefox where even CSP\n            // issues are reported asynchronously. For now, the SDK will continue its execution even if\n            // data won't be sent to Datadog. We could improve this behavior in the future.\n            noop);\n            if (!deflateWorker) {\n                // `startDeflateWorker` should have logged an error message explaining the issue\n                return;\n            }\n        }\n        cachedConfiguration = configuration;\n        // Instrumuent fetch to track network requests\n        // This is needed in case the consent is not granted and some cutsomer\n        // library (Apollo Client) is storing uninstrumented fetch to be used later\n        // The subscrption is needed so that the instrumentation process is completed\n        initFetchObservable().subscribe(noop);\n        trackingConsentState.tryToInit(configuration.trackingConsent);\n        tryStartRum();\n    }\n    var addDurationVital = function (vital) {\n        bufferApiCalls.add(function (startRumResult) { return startRumResult.addDurationVital(vital); });\n    };\n    return {\n        init: function (initConfiguration, publicApi) {\n            if (!initConfiguration) {\n                display.error('Missing configuration');\n                return;\n            }\n            // Set the experimental feature flags as early as possible, so we can use them in most places\n            initFeatureFlags(initConfiguration.enableExperimentalFeatures);\n            // Expose the initial configuration regardless of initialization success.\n            cachedInitConfiguration = initConfiguration;\n            // If we are in a Synthetics test configured to automatically inject a RUM instance, we want\n            // to completely discard the customer application RUM instance by ignoring their init() call.\n            // But, we should not ignore the init() call from the Synthetics-injected RUM instance, so the\n            // internal `ignoreInitIfSyntheticsWillInjectRum` option is here to bypass this condition.\n            if (ignoreInitIfSyntheticsWillInjectRum && willSyntheticsInjectRum()) {\n                return;\n            }\n            callPluginsMethod(initConfiguration.plugins, 'onInit', { initConfiguration: initConfiguration, publicApi: publicApi });\n            if (initConfiguration.remoteConfigurationId &&\n                isExperimentalFeatureEnabled(ExperimentalFeature.REMOTE_CONFIGURATION)) {\n                fetchAndApplyRemoteConfiguration(initConfiguration, doInit);\n            }\n            else {\n                doInit(initConfiguration);\n            }\n        },\n        get initConfiguration() {\n            return cachedInitConfiguration;\n        },\n        getInternalContext: noop,\n        stopSession: noop,\n        addTiming: function (name, time) {\n            if (time === void 0) { time = timeStampNow(); }\n            bufferApiCalls.add(function (startRumResult) { return startRumResult.addTiming(name, time); });\n        },\n        startView: function (options, startClocks) {\n            if (startClocks === void 0) { startClocks = clocksNow(); }\n            var callback = function (startRumResult) {\n                startRumResult.startView(options, startClocks);\n            };\n            bufferApiCalls.add(callback);\n            if (!firstStartViewCall) {\n                firstStartViewCall = { options: options, callback: callback };\n                tryStartRum();\n            }\n        },\n        setViewName: function (name) {\n            bufferApiCalls.add(function (startRumResult) { return startRumResult.setViewName(name); });\n        },\n        setViewContext: function (context) {\n            bufferApiCalls.add(function (startRumResult) { return startRumResult.setViewContext(context); });\n        },\n        setViewContextProperty: function (key, value) {\n            bufferApiCalls.add(function (startRumResult) { return startRumResult.setViewContextProperty(key, value); });\n        },\n        addAction: function (action, commonContext) {\n            if (commonContext === void 0) { commonContext = getCommonContext(); }\n            bufferApiCalls.add(function (startRumResult) { return startRumResult.addAction(action, commonContext); });\n        },\n        addError: function (providedError, commonContext) {\n            if (commonContext === void 0) { commonContext = getCommonContext(); }\n            bufferApiCalls.add(function (startRumResult) { return startRumResult.addError(providedError, commonContext); });\n        },\n        addFeatureFlagEvaluation: function (key, value) {\n            bufferApiCalls.add(function (startRumResult) { return startRumResult.addFeatureFlagEvaluation(key, value); });\n        },\n        startDurationVital: function (name, options) {\n            return startDurationVital(customVitalsState, name, options);\n        },\n        stopDurationVital: function (name, options) {\n            stopDurationVital(addDurationVital, customVitalsState, name, options);\n        },\n        addDurationVital: addDurationVital,\n    };\n}\nfunction overrideInitConfigurationForBridge(initConfiguration) {\n    var _a, _b;\n    return assign({}, initConfiguration, {\n        applicationId: '00000000-aaaa-0000-aaaa-000000000000',\n        clientToken: 'empty',\n        sessionSampleRate: 100,\n        defaultPrivacyLevel: (_a = initConfiguration.defaultPrivacyLevel) !== null && _a !== void 0 ? _a : (_b = getEventBridge()) === null || _b === void 0 ? void 0 : _b.getPrivacyLevel(),\n    });\n}\n//# sourceMappingURL=preStartRum.js.map","export function callPluginsMethod(plugins, methodName, parameter) {\n    if (!plugins) {\n        return;\n    }\n    for (var _i = 0, plugins_1 = plugins; _i < plugins_1.length; _i++) {\n        var plugin = plugins_1[_i];\n        var method = plugin[methodName];\n        if (method) {\n            method(parameter);\n        }\n    }\n}\n//# sourceMappingURL=plugins.js.map","import { Observable } from '../tools/observable';\nimport { objectValues, includes } from '../tools/utils/polyfills';\nimport { addEventListeners, addEventListener } from './addEventListener';\nexport var PageExitReason = {\n    HIDDEN: 'visibility_hidden',\n    UNLOADING: 'before_unload',\n    PAGEHIDE: 'page_hide',\n    FROZEN: 'page_frozen',\n};\nexport function createPageExitObservable(configuration) {\n    return new Observable(function (observable) {\n        var stopListeners = addEventListeners(configuration, window, [\"visibilitychange\" /* DOM_EVENT.VISIBILITY_CHANGE */, \"freeze\" /* DOM_EVENT.FREEZE */], function (event) {\n            if (event.type === \"visibilitychange\" /* DOM_EVENT.VISIBILITY_CHANGE */ && document.visibilityState === 'hidden') {\n                /**\n                 * Only event that guarantee to fire on mobile devices when the page transitions to background state\n                 * (e.g. when user switches to a different application, goes to homescreen, etc), or is being unloaded.\n                 */\n                observable.notify({ reason: PageExitReason.HIDDEN });\n            }\n            else if (event.type === \"freeze\" /* DOM_EVENT.FREEZE */) {\n                /**\n                 * After transitioning in background a tab can be freezed to preserve resources. (cf: https://developer.chrome.com/blog/page-lifecycle-api)\n                 * Allow to collect events happening between hidden and frozen state.\n                 */\n                observable.notify({ reason: PageExitReason.FROZEN });\n            }\n        }, { capture: true }).stop;\n        var stopBeforeUnloadListener = addEventListener(configuration, window, \"beforeunload\" /* DOM_EVENT.BEFORE_UNLOAD */, function () {\n            observable.notify({ reason: PageExitReason.UNLOADING });\n        }).stop;\n        return function () {\n            stopListeners();\n            stopBeforeUnloadListener();\n        };\n    });\n}\nexport function isPageExitReason(reason) {\n    return includes(objectValues(PageExitReason), reason);\n}\n//# sourceMappingURL=pageExitObservable.js.map","import { monitor, noop, Observable, getZoneJsOriginalValue } from '@datadog/browser-core';\nexport function createDOMMutationObservable() {\n    var MutationObserver = getMutationObserverConstructor();\n    return new Observable(function (observable) {\n        if (!MutationObserver) {\n            return;\n        }\n        var observer = new MutationObserver(monitor(function () { return observable.notify(); }));\n        observer.observe(document, {\n            attributes: true,\n            characterData: true,\n            childList: true,\n            subtree: true,\n        });\n        return function () { return observer.disconnect(); };\n    });\n}\nexport function getMutationObserverConstructor() {\n    var constructor;\n    var browserWindow = window;\n    // Angular uses Zone.js to provide a context persisting across async tasks.  Zone.js replaces the\n    // global MutationObserver constructor with a patched version to support the context propagation.\n    // There is an ongoing issue[1][2] with this setup when using a MutationObserver within a Angular\n    // component: on some occasions, the callback is being called in an infinite loop, causing the\n    // page to freeze (even if the callback is completely empty).\n    //\n    // To work around this issue, we try to get the original MutationObserver constructor stored by\n    // Zone.js.\n    //\n    // [1] https://github.com/angular/angular/issues/26948\n    // [2] https://github.com/angular/angular/issues/31712\n    if (browserWindow.Zone) {\n        // Zone.js 0.8.6+ is storing original class constructors into the browser 'window' object[3].\n        //\n        // [3] https://github.com/angular/angular/blob/6375fa79875c0fe7b815efc45940a6e6f5c9c9eb/packages/zone.js/lib/common/utils.ts#L288\n        constructor = getZoneJsOriginalValue(browserWindow, 'MutationObserver');\n        if (browserWindow.MutationObserver && constructor === browserWindow.MutationObserver) {\n            // Anterior Zone.js versions (used in Angular 2) does not expose the original MutationObserver\n            // in the 'window' object. Luckily, the patched MutationObserver class is storing an original\n            // instance in its properties[4]. Let's get the original MutationObserver constructor from\n            // there.\n            //\n            // [4] https://github.com/angular/zone.js/blob/v0.8.5/lib/common/utils.ts#L412\n            var patchedInstance = new browserWindow.MutationObserver(noop);\n            var originalInstance = getZoneJsOriginalValue(patchedInstance, 'originalInstance');\n            constructor = originalInstance && originalInstance.constructor;\n        }\n    }\n    if (!constructor) {\n        constructor = browserWindow.MutationObserver;\n    }\n    return constructor;\n}\n//# sourceMappingURL=domMutationObservable.js.map","export var ErrorSource = {\n    AGENT: 'agent',\n    CONSOLE: 'console',\n    CUSTOM: 'custom',\n    LOGGER: 'logger',\n    NETWORK: 'network',\n    SOURCE: 'source',\n    REPORT: 'report',\n};\n//# sourceMappingURL=error.types.js.map","import { setTimeout } from '../../tools/timer';\nimport { clocksNow, ONE_MINUTE } from '../../tools/utils/timeUtils';\nimport { ErrorSource } from '../error/error.types';\nexport function createEventRateLimiter(eventType, limit, onLimitReached) {\n    var eventCount = 0;\n    var allowNextEvent = false;\n    return {\n        isLimitReached: function () {\n            if (eventCount === 0) {\n                setTimeout(function () {\n                    eventCount = 0;\n                }, ONE_MINUTE);\n            }\n            eventCount += 1;\n            if (eventCount <= limit || allowNextEvent) {\n                allowNextEvent = false;\n                return false;\n            }\n            if (eventCount === limit + 1) {\n                allowNextEvent = true;\n                try {\n                    onLimitReached({\n                        message: \"Reached max number of \".concat(eventType, \"s by minute: \").concat(limit),\n                        source: ErrorSource.AGENT,\n                        startClocks: clocksNow(),\n                    });\n                }\n                finally {\n                    allowNextEvent = false;\n                }\n            }\n            return true;\n        },\n    };\n}\n//# sourceMappingURL=createEventRateLimiter.js.map","import { getSyntheticsResultId, getSyntheticsTestId, willSyntheticsInjectRum } from '@datadog/browser-core';\nexport function getSyntheticsContext() {\n    var testId = getSyntheticsTestId();\n    var resultId = getSyntheticsResultId();\n    if (testId && resultId) {\n        return {\n            test_id: testId,\n            result_id: resultId,\n            injected: willSyntheticsInjectRum(),\n        };\n    }\n}\n//# sourceMappingURL=syntheticsContext.js.map","import { sanitize, deepClone, getType, objectEntries } from '@datadog/browser-core';\n/**\n * Current limitation:\n * - field path do not support array, 'a.b.c' only\n */\nexport function limitModification(object, modifiableFieldPaths, modifier) {\n    var clone = deepClone(object);\n    var result = modifier(clone);\n    objectEntries(modifiableFieldPaths).forEach(function (_a) {\n        var fieldPath = _a[0], fieldType = _a[1];\n        var newValue = get(clone, fieldPath);\n        var newType = getType(newValue);\n        if (newType === fieldType) {\n            set(object, fieldPath, sanitize(newValue));\n        }\n        else if (fieldType === 'object' && (newType === 'undefined' || newType === 'null')) {\n            set(object, fieldPath, {});\n        }\n    });\n    return result;\n}\nfunction get(object, path) {\n    var current = object;\n    for (var _i = 0, _a = path.split('.'); _i < _a.length; _i++) {\n        var field = _a[_i];\n        if (!isValidObjectContaining(current, field)) {\n            return;\n        }\n        current = current[field];\n    }\n    return current;\n}\nfunction set(object, path, value) {\n    var current = object;\n    var fields = path.split('.');\n    for (var i = 0; i < fields.length; i += 1) {\n        var field = fields[i];\n        if (!isValidObject(current)) {\n            return;\n        }\n        if (i !== fields.length - 1) {\n            current = current[field];\n        }\n        else {\n            current[field] = value;\n        }\n    }\n}\nfunction isValidObject(object) {\n    return getType(object) === 'object';\n}\nfunction isValidObjectContaining(object, field) {\n    return isValidObject(object) && Object.prototype.hasOwnProperty.call(object, field);\n}\n//# sourceMappingURL=limitModification.js.map","import { combine, isEmptyObject, timeStampNow, currentDrift, display, createEventRateLimiter, canUseEventBridge, assign, round, isExperimentalFeatureEnabled, ExperimentalFeature, getConnectivity, } from '@datadog/browser-core';\nimport { getSyntheticsContext } from './contexts/syntheticsContext';\nimport { limitModification } from './limitModification';\nvar VIEW_MODIFIABLE_FIELD_PATHS = {\n    'view.name': 'string',\n    'view.url': 'string',\n    'view.referrer': 'string',\n};\nvar USER_CUSTOMIZABLE_FIELD_PATHS = {\n    context: 'object',\n};\nvar ROOT_MODIFIABLE_FIELD_PATHS = {\n    service: 'string',\n    version: 'string',\n};\nvar modifiableFieldPathsByEvent;\nexport function startRumAssembly(configuration, lifeCycle, sessionManager, viewHistory, urlContexts, actionContexts, displayContext, ciVisibilityContext, getCommonContext, reportError) {\n    var _a, _b;\n    modifiableFieldPathsByEvent = (_a = {},\n        _a[\"view\" /* RumEventType.VIEW */] = assign({}, USER_CUSTOMIZABLE_FIELD_PATHS, VIEW_MODIFIABLE_FIELD_PATHS),\n        _a[\"error\" /* RumEventType.ERROR */] = assign({\n            'error.message': 'string',\n            'error.stack': 'string',\n            'error.resource.url': 'string',\n            'error.fingerprint': 'string',\n        }, USER_CUSTOMIZABLE_FIELD_PATHS, VIEW_MODIFIABLE_FIELD_PATHS, ROOT_MODIFIABLE_FIELD_PATHS),\n        _a[\"resource\" /* RumEventType.RESOURCE */] = assign({\n            'resource.url': 'string',\n        }, isExperimentalFeatureEnabled(ExperimentalFeature.WRITABLE_RESOURCE_GRAPHQL)\n            ? {\n                'resource.graphql': 'object',\n            }\n            : {}, USER_CUSTOMIZABLE_FIELD_PATHS, VIEW_MODIFIABLE_FIELD_PATHS, ROOT_MODIFIABLE_FIELD_PATHS),\n        _a[\"action\" /* RumEventType.ACTION */] = assign({\n            'action.target.name': 'string',\n        }, USER_CUSTOMIZABLE_FIELD_PATHS, VIEW_MODIFIABLE_FIELD_PATHS, ROOT_MODIFIABLE_FIELD_PATHS),\n        _a[\"long_task\" /* RumEventType.LONG_TASK */] = assign({}, USER_CUSTOMIZABLE_FIELD_PATHS, VIEW_MODIFIABLE_FIELD_PATHS),\n        _a[\"vital\" /* RumEventType.VITAL */] = assign({}, USER_CUSTOMIZABLE_FIELD_PATHS, VIEW_MODIFIABLE_FIELD_PATHS),\n        _a);\n    var eventRateLimiters = (_b = {},\n        _b[\"error\" /* RumEventType.ERROR */] = createEventRateLimiter(\"error\" /* RumEventType.ERROR */, configuration.eventRateLimiterThreshold, reportError),\n        _b[\"action\" /* RumEventType.ACTION */] = createEventRateLimiter(\"action\" /* RumEventType.ACTION */, configuration.eventRateLimiterThreshold, reportError),\n        _b[\"vital\" /* RumEventType.VITAL */] = createEventRateLimiter(\"vital\" /* RumEventType.VITAL */, configuration.eventRateLimiterThreshold, reportError),\n        _b);\n    var syntheticsContext = getSyntheticsContext();\n    lifeCycle.subscribe(12 /* LifeCycleEventType.RAW_RUM_EVENT_COLLECTED */, function (_a) {\n        var startTime = _a.startTime, rawRumEvent = _a.rawRumEvent, domainContext = _a.domainContext, savedCommonContext = _a.savedCommonContext, customerContext = _a.customerContext;\n        var viewHistoryEntry = viewHistory.findView(startTime);\n        var urlContext = urlContexts.findUrl(startTime);\n        var session = sessionManager.findTrackedSession(startTime);\n        if (session && viewHistoryEntry && urlContext) {\n            var commonContext = savedCommonContext || getCommonContext();\n            var actionId = actionContexts.findActionId(startTime);\n            var rumContext = {\n                _dd: {\n                    format_version: 2,\n                    drift: currentDrift(),\n                    configuration: {\n                        session_sample_rate: round(configuration.sessionSampleRate, 3),\n                        session_replay_sample_rate: round(configuration.sessionReplaySampleRate, 3),\n                    },\n                    browser_sdk_version: canUseEventBridge() ? \"5.35.1\" : undefined,\n                },\n                application: {\n                    id: configuration.applicationId,\n                },\n                date: timeStampNow(),\n                service: viewHistoryEntry.service || configuration.service,\n                version: viewHistoryEntry.version || configuration.version,\n                source: 'browser',\n                session: {\n                    id: session.id,\n                    type: syntheticsContext\n                        ? \"synthetics\" /* SessionType.SYNTHETICS */\n                        : ciVisibilityContext.get()\n                            ? \"ci_test\" /* SessionType.CI_TEST */\n                            : \"user\" /* SessionType.USER */,\n                },\n                view: {\n                    id: viewHistoryEntry.id,\n                    name: viewHistoryEntry.name,\n                    url: urlContext.url,\n                    referrer: urlContext.referrer,\n                },\n                action: needToAssembleWithAction(rawRumEvent) && actionId ? { id: actionId } : undefined,\n                synthetics: syntheticsContext,\n                ci_test: ciVisibilityContext.get(),\n                display: displayContext.get(),\n                connectivity: getConnectivity(),\n            };\n            var serverRumEvent = combine(rumContext, rawRumEvent);\n            serverRumEvent.context = combine(commonContext.context, viewHistoryEntry.context, customerContext);\n            if (!('has_replay' in serverRumEvent.session)) {\n                ;\n                serverRumEvent.session.has_replay = commonContext.hasReplay;\n            }\n            if (serverRumEvent.type === 'view') {\n                ;\n                serverRumEvent.session.sampled_for_replay =\n                    session.sessionReplay === 1 /* SessionReplayState.SAMPLED */;\n            }\n            if (\n            // TODO: remove ff and should always add anonymous user id\n            isExperimentalFeatureEnabled(ExperimentalFeature.ANONYMOUS_USER_TRACKING) &&\n                !commonContext.user.anonymous_id) {\n                commonContext.user.anonymous_id = session.anonymousId;\n            }\n            if (!isEmptyObject(commonContext.user)) {\n                ;\n                serverRumEvent.usr = commonContext.user;\n            }\n            if (shouldSend(serverRumEvent, configuration.beforeSend, domainContext, eventRateLimiters)) {\n                if (isEmptyObject(serverRumEvent.context)) {\n                    delete serverRumEvent.context;\n                }\n                lifeCycle.notify(13 /* LifeCycleEventType.RUM_EVENT_COLLECTED */, serverRumEvent);\n            }\n        }\n    });\n}\nfunction shouldSend(event, beforeSend, domainContext, eventRateLimiters) {\n    var _a;\n    if (beforeSend) {\n        var result = limitModification(event, modifiableFieldPathsByEvent[event.type], function (event) {\n            return beforeSend(event, domainContext);\n        });\n        if (result === false && event.type !== \"view\" /* RumEventType.VIEW */) {\n            return false;\n        }\n        if (result === false) {\n            display.warn(\"Can't dismiss view events using beforeSend!\");\n        }\n    }\n    var rateLimitReached = (_a = eventRateLimiters[event.type]) === null || _a === void 0 ? void 0 : _a.isLimitReached();\n    return !rateLimitReached;\n}\nfunction needToAssembleWithAction(event) {\n    return [\"error\" /* RumEventType.ERROR */, \"resource\" /* RumEventType.RESOURCE */, \"long_task\" /* RumEventType.LONG_TASK */].indexOf(event.type) !== -1;\n}\n//# sourceMappingURL=assembly.js.map","// eslint-disable-next-line no-restricted-syntax\nvar AbstractLifeCycle = /** @class */ (function () {\n    function AbstractLifeCycle() {\n        this.callbacks = {};\n    }\n    AbstractLifeCycle.prototype.notify = function (eventType, data) {\n        var eventCallbacks = this.callbacks[eventType];\n        if (eventCallbacks) {\n            eventCallbacks.forEach(function (callback) { return callback(data); });\n        }\n    };\n    AbstractLifeCycle.prototype.subscribe = function (eventType, callback) {\n        var _this = this;\n        if (!this.callbacks[eventType]) {\n            this.callbacks[eventType] = [];\n        }\n        this.callbacks[eventType].push(callback);\n        return {\n            unsubscribe: function () {\n                _this.callbacks[eventType] = _this.callbacks[eventType].filter(function (other) { return callback !== other; });\n            },\n        };\n    };\n    return AbstractLifeCycle;\n}());\nexport { AbstractLifeCycle };\n//# sourceMappingURL=abstractLifeCycle.js.map","import { AbstractLifeCycle } from '@datadog/browser-core';\nexport var LifeCycle = (AbstractLifeCycle);\n//# sourceMappingURL=lifeCycle.js.map","import { setInterval, clearInterval } from './timer';\nimport { removeItem } from './utils/arrayUtils';\nimport { addDuration, relativeNow, ONE_MINUTE } from './utils/timeUtils';\nvar END_OF_TIMES = Infinity;\nexport var CLEAR_OLD_VALUES_INTERVAL = ONE_MINUTE;\nexport function createValueHistory(_a) {\n    var expireDelay = _a.expireDelay, maxEntries = _a.maxEntries;\n    var entries = [];\n    var clearOldValuesInterval = setInterval(function () { return clearOldValues(); }, CLEAR_OLD_VALUES_INTERVAL);\n    function clearOldValues() {\n        var oldTimeThreshold = relativeNow() - expireDelay;\n        while (entries.length > 0 && entries[entries.length - 1].endTime < oldTimeThreshold) {\n            entries.pop();\n        }\n    }\n    /**\n     * Add a value to the history associated with a start time. Returns a reference to this newly\n     * added entry that can be removed or closed.\n     */\n    function add(value, startTime) {\n        var entry = {\n            value: value,\n            startTime: startTime,\n            endTime: END_OF_TIMES,\n            remove: function () {\n                removeItem(entries, entry);\n            },\n            close: function (endTime) {\n                entry.endTime = endTime;\n            },\n        };\n        if (maxEntries && entries.length >= maxEntries) {\n            entries.pop();\n        }\n        entries.unshift(entry);\n        return entry;\n    }\n    /**\n     * Return the latest value that was active during `startTime`, or the currently active value\n     * if no `startTime` is provided. This method assumes that entries are not overlapping.\n     *\n     * If `option.returnInactive` is true, returns the value at `startTime` (active or not).\n     */\n    function find(startTime, options) {\n        if (startTime === void 0) { startTime = END_OF_TIMES; }\n        if (options === void 0) { options = { returnInactive: false }; }\n        for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {\n            var entry = entries_1[_i];\n            if (entry.startTime <= startTime) {\n                if (options.returnInactive || startTime <= entry.endTime) {\n                    return entry.value;\n                }\n                break;\n            }\n        }\n    }\n    /**\n     * Helper function to close the currently active value, if any. This method assumes that entries\n     * are not overlapping.\n     */\n    function closeActive(endTime) {\n        var latestEntry = entries[0];\n        if (latestEntry && latestEntry.endTime === END_OF_TIMES) {\n            latestEntry.close(endTime);\n        }\n    }\n    /**\n     * Return all values with an active period overlapping with the duration,\n     * or all values that were active during `startTime` if no duration is provided,\n     * or all currently active values if no `startTime` is provided.\n     */\n    function findAll(startTime, duration) {\n        if (startTime === void 0) { startTime = END_OF_TIMES; }\n        if (duration === void 0) { duration = 0; }\n        var endTime = addDuration(startTime, duration);\n        return entries\n            .filter(function (entry) { return entry.startTime <= endTime && startTime <= entry.endTime; })\n            .map(function (entry) { return entry.value; });\n    }\n    /**\n     * Remove all entries from this collection.\n     */\n    function reset() {\n        entries = [];\n    }\n    /**\n     * Stop internal garbage collection of past entries.\n     */\n    function stop() {\n        clearInterval(clearOldValuesInterval);\n    }\n    return { add: add, find: find, closeActive: closeActive, findAll: findAll, reset: reset, stop: stop };\n}\n//# sourceMappingURL=valueHistory.js.map","import { SESSION_TIME_OUT_DELAY, createValueHistory } from '@datadog/browser-core';\nexport var VIEW_CONTEXT_TIME_OUT_DELAY = SESSION_TIME_OUT_DELAY;\nexport function startViewHistory(lifeCycle) {\n    var viewValueHistory = createValueHistory({ expireDelay: VIEW_CONTEXT_TIME_OUT_DELAY });\n    lifeCycle.subscribe(1 /* LifeCycleEventType.BEFORE_VIEW_CREATED */, function (view) {\n        viewValueHistory.add(buildViewHistoryEntry(view), view.startClocks.relative);\n    });\n    lifeCycle.subscribe(6 /* LifeCycleEventType.AFTER_VIEW_ENDED */, function (_a) {\n        var endClocks = _a.endClocks;\n        viewValueHistory.closeActive(endClocks.relative);\n    });\n    lifeCycle.subscribe(3 /* LifeCycleEventType.BEFORE_VIEW_UPDATED */, function (viewUpdate) {\n        var currentView = viewValueHistory.find(viewUpdate.startClocks.relative);\n        if (currentView && viewUpdate.name) {\n            currentView.name = viewUpdate.name;\n        }\n        if (currentView && viewUpdate.context) {\n            currentView.context = viewUpdate.context;\n        }\n    });\n    lifeCycle.subscribe(10 /* LifeCycleEventType.SESSION_RENEWED */, function () {\n        viewValueHistory.reset();\n    });\n    function buildViewHistoryEntry(view) {\n        return {\n            service: view.service,\n            version: view.version,\n            context: view.context,\n            id: view.id,\n            name: view.name,\n            startClocks: view.startClocks,\n        };\n    }\n    return {\n        findView: function (startTime) { return viewValueHistory.find(startTime); },\n        stop: function () {\n            viewValueHistory.stop();\n        },\n    };\n}\n//# sourceMappingURL=viewHistory.js.map","import { instrumentMethod } from '../tools/instrumentMethod';\nimport { Observable } from '../tools/observable';\nimport { elapsed, clocksNow, timeStampNow } from '../tools/utils/timeUtils';\nimport { normalizeUrl } from '../tools/utils/urlPolyfill';\nimport { shallowClone } from '../tools/utils/objectUtils';\nimport { addEventListener } from './addEventListener';\nvar xhrObservable;\nvar xhrContexts = new WeakMap();\nexport function initXhrObservable(configuration) {\n    if (!xhrObservable) {\n        xhrObservable = createXhrObservable(configuration);\n    }\n    return xhrObservable;\n}\nfunction createXhrObservable(configuration) {\n    return new Observable(function (observable) {\n        var stopInstrumentingStart = instrumentMethod(XMLHttpRequest.prototype, 'open', openXhr).stop;\n        var stopInstrumentingSend = instrumentMethod(XMLHttpRequest.prototype, 'send', function (call) {\n            sendXhr(call, configuration, observable);\n        }, { computeHandlingStack: true }).stop;\n        var stopInstrumentingAbort = instrumentMethod(XMLHttpRequest.prototype, 'abort', abortXhr).stop;\n        return function () {\n            stopInstrumentingStart();\n            stopInstrumentingSend();\n            stopInstrumentingAbort();\n        };\n    });\n}\nfunction openXhr(_a) {\n    var xhr = _a.target, _b = _a.parameters, method = _b[0], url = _b[1];\n    xhrContexts.set(xhr, {\n        state: 'open',\n        method: String(method).toUpperCase(),\n        url: normalizeUrl(String(url)),\n    });\n}\nfunction sendXhr(_a, configuration, observable) {\n    var xhr = _a.target, handlingStack = _a.handlingStack;\n    var context = xhrContexts.get(xhr);\n    if (!context) {\n        return;\n    }\n    var startContext = context;\n    startContext.state = 'start';\n    startContext.startClocks = clocksNow();\n    startContext.isAborted = false;\n    startContext.xhr = xhr;\n    startContext.handlingStack = handlingStack;\n    var hasBeenReported = false;\n    var stopInstrumentingOnReadyStateChange = instrumentMethod(xhr, 'onreadystatechange', function () {\n        if (xhr.readyState === XMLHttpRequest.DONE) {\n            // Try to report the XHR as soon as possible, because the XHR may be mutated by the\n            // application during a future event. For example, Angular is calling .abort() on\n            // completed requests during an onreadystatechange event, so the status becomes '0'\n            // before the request is collected.\n            onEnd();\n        }\n    }).stop;\n    var onEnd = function () {\n        unsubscribeLoadEndListener();\n        stopInstrumentingOnReadyStateChange();\n        if (hasBeenReported) {\n            return;\n        }\n        hasBeenReported = true;\n        var completeContext = context;\n        completeContext.state = 'complete';\n        completeContext.duration = elapsed(startContext.startClocks.timeStamp, timeStampNow());\n        completeContext.status = xhr.status;\n        observable.notify(shallowClone(completeContext));\n    };\n    var unsubscribeLoadEndListener = addEventListener(configuration, xhr, 'loadend', onEnd).stop;\n    observable.notify(startContext);\n}\nfunction abortXhr(_a) {\n    var xhr = _a.target;\n    var context = xhrContexts.get(xhr);\n    if (context) {\n        context.isAborted = true;\n    }\n}\n//# sourceMappingURL=xhrObservable.js.map","import { addTelemetryDebug, elapsed, getPathName, includes, isValidUrl, toServerDuration, isIntakeUrl, } from '@datadog/browser-core';\nexport var FAKE_INITIAL_DOCUMENT = 'initial_document';\nvar RESOURCE_TYPES = [\n    [\"document\" /* ResourceType.DOCUMENT */, function (initiatorType) { return FAKE_INITIAL_DOCUMENT === initiatorType; }],\n    [\"xhr\" /* ResourceType.XHR */, function (initiatorType) { return 'xmlhttprequest' === initiatorType; }],\n    [\"fetch\" /* ResourceType.FETCH */, function (initiatorType) { return 'fetch' === initiatorType; }],\n    [\"beacon\" /* ResourceType.BEACON */, function (initiatorType) { return 'beacon' === initiatorType; }],\n    [\"css\" /* ResourceType.CSS */, function (_, path) { return /\\.css$/i.test(path); }],\n    [\"js\" /* ResourceType.JS */, function (_, path) { return /\\.js$/i.test(path); }],\n    [\n        \"image\" /* ResourceType.IMAGE */,\n        function (initiatorType, path) {\n            return includes(['image', 'img', 'icon'], initiatorType) || /\\.(gif|jpg|jpeg|tiff|png|svg|ico)$/i.exec(path) !== null;\n        },\n    ],\n    [\"font\" /* ResourceType.FONT */, function (_, path) { return /\\.(woff|eot|woff2|ttf)$/i.exec(path) !== null; }],\n    [\n        \"media\" /* ResourceType.MEDIA */,\n        function (initiatorType, path) {\n            return includes(['audio', 'video'], initiatorType) || /\\.(mp3|mp4)$/i.exec(path) !== null;\n        },\n    ],\n];\nexport function computeResourceEntryType(entry) {\n    var url = entry.name;\n    if (!isValidUrl(url)) {\n        addTelemetryDebug(\"Failed to construct URL for \\\"\".concat(entry.name, \"\\\"\"));\n        return \"other\" /* ResourceType.OTHER */;\n    }\n    var path = getPathName(url);\n    for (var _i = 0, RESOURCE_TYPES_1 = RESOURCE_TYPES; _i < RESOURCE_TYPES_1.length; _i++) {\n        var _a = RESOURCE_TYPES_1[_i], type = _a[0], isType = _a[1];\n        if (isType(entry.initiatorType, path)) {\n            return type;\n        }\n    }\n    return \"other\" /* ResourceType.OTHER */;\n}\nfunction areInOrder() {\n    var numbers = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        numbers[_i] = arguments[_i];\n    }\n    for (var i = 1; i < numbers.length; i += 1) {\n        if (numbers[i - 1] > numbers[i]) {\n            return false;\n        }\n    }\n    return true;\n}\nexport function isResourceEntryRequestType(entry) {\n    return entry.initiatorType === 'xmlhttprequest' || entry.initiatorType === 'fetch';\n}\nexport function computeResourceEntryDuration(entry) {\n    var duration = entry.duration, startTime = entry.startTime, responseEnd = entry.responseEnd;\n    // Safari duration is always 0 on timings blocked by cross origin policies.\n    if (duration === 0 && startTime < responseEnd) {\n        return toServerDuration(elapsed(startTime, responseEnd));\n    }\n    return toServerDuration(duration);\n}\nexport function computeResourceEntryDetails(entry) {\n    if (!hasValidResourceEntryTimings(entry)) {\n        return undefined;\n    }\n    var startTime = entry.startTime, fetchStart = entry.fetchStart, workerStart = entry.workerStart, redirectStart = entry.redirectStart, redirectEnd = entry.redirectEnd, domainLookupStart = entry.domainLookupStart, domainLookupEnd = entry.domainLookupEnd, connectStart = entry.connectStart, secureConnectionStart = entry.secureConnectionStart, connectEnd = entry.connectEnd, requestStart = entry.requestStart, responseStart = entry.responseStart, responseEnd = entry.responseEnd;\n    var details = {\n        download: formatTiming(startTime, responseStart, responseEnd),\n        first_byte: formatTiming(startTime, requestStart, responseStart),\n    };\n    // Make sure a worker processing time is recorded\n    if (0 < workerStart && workerStart < fetchStart) {\n        details.worker = formatTiming(startTime, workerStart, fetchStart);\n    }\n    // Make sure a connection occurred\n    if (fetchStart < connectEnd) {\n        details.connect = formatTiming(startTime, connectStart, connectEnd);\n        // Make sure a secure connection occurred\n        if (connectStart <= secureConnectionStart && secureConnectionStart <= connectEnd) {\n            details.ssl = formatTiming(startTime, secureConnectionStart, connectEnd);\n        }\n    }\n    // Make sure a domain lookup occurred\n    if (fetchStart < domainLookupEnd) {\n        details.dns = formatTiming(startTime, domainLookupStart, domainLookupEnd);\n    }\n    // Make sure a redirection occurred\n    if (startTime < redirectEnd) {\n        details.redirect = formatTiming(startTime, redirectStart, redirectEnd);\n    }\n    return details;\n}\n/**\n * Entries with negative duration are unexpected and should be dismissed. The intake will ignore RUM\n * Resource events with negative durations anyway.\n * Since Chromium 128, more entries have unexpected negative durations, see\n * https://issues.chromium.org/issues/363031537\n */\nexport function hasValidResourceEntryDuration(entry) {\n    return entry.duration >= 0;\n}\nexport function hasValidResourceEntryTimings(entry) {\n    // Ensure timings are in the right order. On top of filtering out potential invalid\n    // RumPerformanceResourceTiming, it will ignore entries from requests where timings cannot be\n    // collected, for example cross origin requests without a \"Timing-Allow-Origin\" header allowing\n    // it.\n    var areCommonTimingsInOrder = areInOrder(entry.startTime, entry.fetchStart, entry.domainLookupStart, entry.domainLookupEnd, entry.connectStart, entry.connectEnd, entry.requestStart, entry.responseStart, entry.responseEnd);\n    var areRedirectionTimingsInOrder = hasRedirection(entry)\n        ? areInOrder(entry.startTime, entry.redirectStart, entry.redirectEnd, entry.fetchStart)\n        : true;\n    return areCommonTimingsInOrder && areRedirectionTimingsInOrder;\n}\nfunction hasRedirection(entry) {\n    return entry.redirectEnd > entry.startTime;\n}\nfunction formatTiming(origin, start, end) {\n    if (origin <= start && start <= end) {\n        return {\n            duration: toServerDuration(elapsed(start, end)),\n            start: toServerDuration(elapsed(origin, start)),\n        };\n    }\n}\n/**\n * The 'nextHopProtocol' is an empty string for cross-origin resources without CORS headers,\n * meaning the protocol is unknown, and we shouldn't report it.\n * https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming/nextHopProtocol#cross-origin_resources\n */\nexport function computeResourceEntryProtocol(entry) {\n    return entry.nextHopProtocol === '' ? undefined : entry.nextHopProtocol;\n}\n/**\n * Handles the 'deliveryType' property to distinguish between supported values ('cache', 'navigational-prefetch'),\n * undefined (unsupported in some browsers), and other cases ('other' for unknown or unrecognized values).\n * see: https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming/deliveryType\n */\nexport function computeResourceEntryDeliveryType(entry) {\n    return entry.deliveryType === '' ? 'other' : entry.deliveryType;\n}\nexport function computeResourceEntrySize(entry) {\n    // Make sure a request actually occurred\n    if (entry.startTime < entry.responseStart) {\n        var encodedBodySize = entry.encodedBodySize, decodedBodySize = entry.decodedBodySize, transferSize = entry.transferSize;\n        return {\n            size: decodedBodySize,\n            encoded_body_size: encodedBodySize,\n            decoded_body_size: decodedBodySize,\n            transfer_size: transferSize,\n        };\n    }\n    return {\n        size: undefined,\n        encoded_body_size: undefined,\n        decoded_body_size: undefined,\n        transfer_size: undefined,\n    };\n}\nexport function isAllowedRequestUrl(url) {\n    return url && !isIntakeUrl(url);\n}\nvar DATA_URL_REGEX = /data:(.+)?(;base64)?,/g;\nexport var MAX_ATTRIBUTE_VALUE_CHAR_LENGTH = 24000;\nexport function isLongDataUrl(url) {\n    if (url.length <= MAX_ATTRIBUTE_VALUE_CHAR_LENGTH) {\n        return false;\n    }\n    else if (url.substring(0, 5) === 'data:') {\n        // Avoid String.match RangeError: Maximum call stack size exceeded\n        url = url.substring(0, MAX_ATTRIBUTE_VALUE_CHAR_LENGTH);\n        return true;\n    }\n    return false;\n}\nexport function sanitizeDataUrl(url) {\n    return \"\".concat(url.match(DATA_URL_REGEX)[0], \"[...]\");\n}\n//# sourceMappingURL=resourceUtils.js.map","import { initFetchObservable, initXhrObservable, readBytesFromStream, elapsed, timeStampNow, tryToClone, } from '@datadog/browser-core';\nimport { isAllowedRequestUrl } from './resource/resourceUtils';\nimport { startTracer } from './tracing/tracer';\nvar nextRequestIndex = 1;\nexport function startRequestCollection(lifeCycle, configuration, sessionManager) {\n    var tracer = startTracer(configuration, sessionManager);\n    trackXhr(lifeCycle, configuration, tracer);\n    trackFetch(lifeCycle, tracer);\n}\nexport function trackXhr(lifeCycle, configuration, tracer) {\n    var subscription = initXhrObservable(configuration).subscribe(function (rawContext) {\n        var context = rawContext;\n        if (!isAllowedRequestUrl(context.url)) {\n            return;\n        }\n        switch (context.state) {\n            case 'start':\n                tracer.traceXhr(context, context.xhr);\n                context.requestIndex = getNextRequestIndex();\n                lifeCycle.notify(7 /* LifeCycleEventType.REQUEST_STARTED */, {\n                    requestIndex: context.requestIndex,\n                    url: context.url,\n                });\n                break;\n            case 'complete':\n                tracer.clearTracingIfNeeded(context);\n                lifeCycle.notify(8 /* LifeCycleEventType.REQUEST_COMPLETED */, {\n                    duration: context.duration,\n                    method: context.method,\n                    requestIndex: context.requestIndex,\n                    spanId: context.spanId,\n                    startClocks: context.startClocks,\n                    status: context.status,\n                    traceId: context.traceId,\n                    traceSampled: context.traceSampled,\n                    type: \"xhr\" /* RequestType.XHR */,\n                    url: context.url,\n                    xhr: context.xhr,\n                    isAborted: context.isAborted,\n                    handlingStack: context.handlingStack,\n                });\n                break;\n        }\n    });\n    return { stop: function () { return subscription.unsubscribe(); } };\n}\nexport function trackFetch(lifeCycle, tracer) {\n    var subscription = initFetchObservable().subscribe(function (rawContext) {\n        var context = rawContext;\n        if (!isAllowedRequestUrl(context.url)) {\n            return;\n        }\n        switch (context.state) {\n            case 'start':\n                tracer.traceFetch(context);\n                context.requestIndex = getNextRequestIndex();\n                lifeCycle.notify(7 /* LifeCycleEventType.REQUEST_STARTED */, {\n                    requestIndex: context.requestIndex,\n                    url: context.url,\n                });\n                break;\n            case 'resolve':\n                waitForResponseToComplete(context, function (duration) {\n                    tracer.clearTracingIfNeeded(context);\n                    lifeCycle.notify(8 /* LifeCycleEventType.REQUEST_COMPLETED */, {\n                        duration: duration,\n                        method: context.method,\n                        requestIndex: context.requestIndex,\n                        responseType: context.responseType,\n                        spanId: context.spanId,\n                        startClocks: context.startClocks,\n                        status: context.status,\n                        traceId: context.traceId,\n                        traceSampled: context.traceSampled,\n                        type: \"fetch\" /* RequestType.FETCH */,\n                        url: context.url,\n                        response: context.response,\n                        init: context.init,\n                        input: context.input,\n                        isAborted: context.isAborted,\n                        handlingStack: context.handlingStack,\n                    });\n                });\n                break;\n        }\n    });\n    return { stop: function () { return subscription.unsubscribe(); } };\n}\nfunction getNextRequestIndex() {\n    var result = nextRequestIndex;\n    nextRequestIndex += 1;\n    return result;\n}\nfunction waitForResponseToComplete(context, callback) {\n    var clonedResponse = context.response && tryToClone(context.response);\n    if (!clonedResponse || !clonedResponse.body) {\n        // do not try to wait for the response if the clone failed, fetch error or null body\n        callback(elapsed(context.startClocks.timeStamp, timeStampNow()));\n    }\n    else {\n        readBytesFromStream(clonedResponse.body, function () {\n            callback(elapsed(context.startClocks.timeStamp, timeStampNow()));\n        }, {\n            bytesLimit: Number.POSITIVE_INFINITY,\n            collectStreamBody: false,\n        });\n    }\n}\n//# sourceMappingURL=requestCollection.js.map","import { addEventListener, Observable, setTimeout, clearTimeout, monitor, includes } from '@datadog/browser-core';\nimport { hasValidResourceEntryDuration, isAllowedRequestUrl } from '../domain/resource/resourceUtils';\nimport { retrieveFirstInputTiming } from './firstInputPolyfill';\n// We want to use a real enum (i.e. not a const enum) here, to be able to check whether an arbitrary\n// string is an expected performance entry\n// eslint-disable-next-line no-restricted-syntax\nexport var RumPerformanceEntryType;\n(function (RumPerformanceEntryType) {\n    RumPerformanceEntryType[\"EVENT\"] = \"event\";\n    RumPerformanceEntryType[\"FIRST_INPUT\"] = \"first-input\";\n    RumPerformanceEntryType[\"LARGEST_CONTENTFUL_PAINT\"] = \"largest-contentful-paint\";\n    RumPerformanceEntryType[\"LAYOUT_SHIFT\"] = \"layout-shift\";\n    RumPerformanceEntryType[\"LONG_TASK\"] = \"longtask\";\n    RumPerformanceEntryType[\"LONG_ANIMATION_FRAME\"] = \"long-animation-frame\";\n    RumPerformanceEntryType[\"NAVIGATION\"] = \"navigation\";\n    RumPerformanceEntryType[\"PAINT\"] = \"paint\";\n    RumPerformanceEntryType[\"RESOURCE\"] = \"resource\";\n})(RumPerformanceEntryType || (RumPerformanceEntryType = {}));\nexport function createPerformanceObservable(configuration, options) {\n    return new Observable(function (observable) {\n        if (!window.PerformanceObserver) {\n            return;\n        }\n        var handlePerformanceEntries = function (entries) {\n            var rumPerformanceEntries = filterRumPerformanceEntries(entries);\n            if (rumPerformanceEntries.length > 0) {\n                observable.notify(rumPerformanceEntries);\n            }\n        };\n        var timeoutId;\n        var isObserverInitializing = true;\n        var observer = new PerformanceObserver(monitor(function (entries) {\n            // In Safari the performance observer callback is synchronous.\n            // Because the buffered performance entry list can be quite large we delay the computation to prevent the SDK from blocking the main thread on init\n            if (isObserverInitializing) {\n                timeoutId = setTimeout(function () { return handlePerformanceEntries(entries.getEntries()); });\n            }\n            else {\n                handlePerformanceEntries(entries.getEntries());\n            }\n        }));\n        try {\n            observer.observe(options);\n        }\n        catch (_a) {\n            // Some old browser versions (<= chrome 74 ) don't support the PerformanceObserver type and buffered options\n            // In these cases, fallback to getEntriesByType and PerformanceObserver with entryTypes\n            // TODO: remove this fallback in the next major version\n            var fallbackSupportedEntryTypes = [\n                RumPerformanceEntryType.RESOURCE,\n                RumPerformanceEntryType.NAVIGATION,\n                RumPerformanceEntryType.LONG_TASK,\n                RumPerformanceEntryType.PAINT,\n            ];\n            if (includes(fallbackSupportedEntryTypes, options.type)) {\n                if (options.buffered) {\n                    timeoutId = setTimeout(function () { return handlePerformanceEntries(performance.getEntriesByType(options.type)); });\n                }\n                try {\n                    observer.observe({ entryTypes: [options.type] });\n                }\n                catch (_b) {\n                    // Old versions of Safari are throwing \"entryTypes contained only unsupported types\"\n                    // errors when observing only unsupported entry types.\n                    //\n                    // We could use `supportPerformanceTimingEvent` to make sure we don't invoke\n                    // `observer.observe` with an unsupported entry type, but Safari 11 and 12 don't support\n                    // `Performance.supportedEntryTypes`, so doing so would lose support for these versions\n                    // even if they do support the entry type.\n                    return;\n                }\n            }\n        }\n        isObserverInitializing = false;\n        manageResourceTimingBufferFull(configuration);\n        var stopFirstInputTiming;\n        if (!supportPerformanceTimingEvent(RumPerformanceEntryType.FIRST_INPUT) &&\n            options.type === RumPerformanceEntryType.FIRST_INPUT) {\n            ;\n            (stopFirstInputTiming = retrieveFirstInputTiming(configuration, function (timing) {\n                handlePerformanceEntries([timing]);\n            }).stop);\n        }\n        return function () {\n            observer.disconnect();\n            if (stopFirstInputTiming) {\n                stopFirstInputTiming();\n            }\n            clearTimeout(timeoutId);\n        };\n    });\n}\nvar resourceTimingBufferFullListener;\nfunction manageResourceTimingBufferFull(configuration) {\n    if (!resourceTimingBufferFullListener && supportPerformanceObject() && 'addEventListener' in performance) {\n        // https://bugzilla.mozilla.org/show_bug.cgi?id=1559377\n        resourceTimingBufferFullListener = addEventListener(configuration, performance, 'resourcetimingbufferfull', function () {\n            performance.clearResourceTimings();\n        });\n    }\n    return function () {\n        resourceTimingBufferFullListener === null || resourceTimingBufferFullListener === void 0 ? void 0 : resourceTimingBufferFullListener.stop();\n    };\n}\nfunction supportPerformanceObject() {\n    return window.performance !== undefined && 'getEntries' in performance;\n}\nexport function supportPerformanceTimingEvent(entryType) {\n    return (window.PerformanceObserver &&\n        PerformanceObserver.supportedEntryTypes !== undefined &&\n        PerformanceObserver.supportedEntryTypes.includes(entryType));\n}\nfunction filterRumPerformanceEntries(entries) {\n    return entries.filter(function (entry) { return !isForbiddenResource(entry); });\n}\nfunction isForbiddenResource(entry) {\n    return (entry.entryType === RumPerformanceEntryType.RESOURCE &&\n        (!isAllowedRequestUrl(entry.name) || !hasValidResourceEntryDuration(entry)));\n}\n//# sourceMappingURL=performanceObservable.js.map","export function isServerError(status) {\n    return status >= 500;\n}\nexport function tryToClone(response) {\n    try {\n        return response.clone();\n    }\n    catch (_a) {\n        // clone can throw if the response has already been used by another instrumentation or is disturbed\n        return;\n    }\n}\n//# sourceMappingURL=responseUtils.js.map","import { monitor } from './monitor';\nimport { noop } from './utils/functionUtils';\n/**\n * Read bytes from a ReadableStream until at least `limit` bytes have been read (or until the end of\n * the stream). The callback is invoked with the at most `limit` bytes, and indicates that the limit\n * has been exceeded if more bytes were available.\n */\nexport function readBytesFromStream(stream, callback, options) {\n    var reader = stream.getReader();\n    var chunks = [];\n    var readBytesCount = 0;\n    readMore();\n    function readMore() {\n        reader.read().then(monitor(function (result) {\n            if (result.done) {\n                onDone();\n                return;\n            }\n            if (options.collectStreamBody) {\n                chunks.push(result.value);\n            }\n            readBytesCount += result.value.length;\n            if (readBytesCount > options.bytesLimit) {\n                onDone();\n            }\n            else {\n                readMore();\n            }\n        }), monitor(function (error) { return callback(error); }));\n    }\n    function onDone() {\n        reader.cancel().catch(\n        // we don't care if cancel fails, but we still need to catch the error to avoid reporting it\n        // as an unhandled rejection\n        noop);\n        var bytes;\n        var limitExceeded;\n        if (options.collectStreamBody) {\n            var completeBuffer_1;\n            if (chunks.length === 1) {\n                // optimization: if the response is small enough to fit in a single buffer (provided by the browser), just\n                // use it directly.\n                completeBuffer_1 = chunks[0];\n            }\n            else {\n                // else, we need to copy buffers into a larger buffer to concatenate them.\n                completeBuffer_1 = new Uint8Array(readBytesCount);\n                var offset_1 = 0;\n                chunks.forEach(function (chunk) {\n                    completeBuffer_1.set(chunk, offset_1);\n                    offset_1 += chunk.length;\n                });\n            }\n            bytes = completeBuffer_1.slice(0, options.bytesLimit);\n            limitExceeded = completeBuffer_1.length > options.bytesLimit;\n        }\n        callback(undefined, bytes, limitExceeded);\n    }\n}\n//# sourceMappingURL=readBytesFromStream.js.map","import { isNumber } from '@datadog/browser-core';\nexport function discardNegativeDuration(duration) {\n    return isNumber(duration) && duration < 0 ? undefined : duration;\n}\n//# sourceMappingURL=discardNegativeDuration.js.map","import { noop } from '@datadog/browser-core';\nexport function trackEventCounts(_a) {\n    var lifeCycle = _a.lifeCycle, isChildEvent = _a.isChildEvent, _b = _a.onChange, callback = _b === void 0 ? noop : _b;\n    var eventCounts = {\n        errorCount: 0,\n        longTaskCount: 0,\n        resourceCount: 0,\n        actionCount: 0,\n        frustrationCount: 0,\n    };\n    var subscription = lifeCycle.subscribe(13 /* LifeCycleEventType.RUM_EVENT_COLLECTED */, function (event) {\n        var _a;\n        if (event.type === 'view' || event.type === 'vital' || !isChildEvent(event)) {\n            return;\n        }\n        switch (event.type) {\n            case \"error\" /* RumEventType.ERROR */:\n                eventCounts.errorCount += 1;\n                callback();\n                break;\n            case \"action\" /* RumEventType.ACTION */:\n                eventCounts.actionCount += 1;\n                if (event.action.frustration) {\n                    eventCounts.frustrationCount += event.action.frustration.type.length;\n                }\n                callback();\n                break;\n            case \"long_task\" /* RumEventType.LONG_TASK */:\n                eventCounts.longTaskCount += 1;\n                callback();\n                break;\n            case \"resource\" /* RumEventType.RESOURCE */:\n                if (!((_a = event._dd) === null || _a === void 0 ? void 0 : _a.discarded)) {\n                    eventCounts.resourceCount += 1;\n                    callback();\n                }\n                break;\n        }\n    });\n    return {\n        stop: function () {\n            subscription.unsubscribe();\n        },\n        eventCounts: eventCounts,\n    };\n}\n//# sourceMappingURL=trackEventCounts.js.map","import { addEventListeners, dateNow, relativeNow } from '@datadog/browser-core';\n/**\n * first-input timing entry polyfill based on\n * https://github.com/GoogleChrome/web-vitals/blob/master/src/lib/polyfills/firstInputPolyfill.ts\n */\nexport function retrieveFirstInputTiming(configuration, callback) {\n    var startTimeStamp = dateNow();\n    var timingSent = false;\n    var removeEventListeners = addEventListeners(configuration, window, [\"click\" /* DOM_EVENT.CLICK */, \"mousedown\" /* DOM_EVENT.MOUSE_DOWN */, \"keydown\" /* DOM_EVENT.KEY_DOWN */, \"touchstart\" /* DOM_EVENT.TOUCH_START */, \"pointerdown\" /* DOM_EVENT.POINTER_DOWN */], function (evt) {\n        // Only count cancelable events, which should trigger behavior important to the user.\n        if (!evt.cancelable) {\n            return;\n        }\n        // This timing will be used to compute the \"first Input delay\", which is the delta between\n        // when the system received the event (e.g. evt.timeStamp) and when it could run the callback\n        // (e.g. performance.now()).\n        var timing = {\n            entryType: 'first-input',\n            processingStart: relativeNow(),\n            processingEnd: relativeNow(),\n            startTime: evt.timeStamp,\n            duration: 0, // arbitrary value to avoid nullable duration and simplify INP logic\n            name: '',\n            cancelable: false,\n            target: null,\n            toJSON: function () { return ({}); },\n        };\n        if (evt.type === \"pointerdown\" /* DOM_EVENT.POINTER_DOWN */) {\n            sendTimingIfPointerIsNotCancelled(configuration, timing);\n        }\n        else {\n            sendTiming(timing);\n        }\n    }, { passive: true, capture: true }).stop;\n    return { stop: removeEventListeners };\n    /**\n     * Pointer events are a special case, because they can trigger main or compositor thread behavior.\n     * We differentiate these cases based on whether or not we see a pointercancel event, which are\n     * fired when we scroll. If we're scrolling we don't need to report input delay since FID excludes\n     * scrolling and pinch/zooming.\n     */\n    function sendTimingIfPointerIsNotCancelled(configuration, timing) {\n        addEventListeners(configuration, window, [\"pointerup\" /* DOM_EVENT.POINTER_UP */, \"pointercancel\" /* DOM_EVENT.POINTER_CANCEL */], function (event) {\n            if (event.type === \"pointerup\" /* DOM_EVENT.POINTER_UP */) {\n                sendTiming(timing);\n            }\n        }, { once: true });\n    }\n    function sendTiming(timing) {\n        if (!timingSent) {\n            timingSent = true;\n            removeEventListeners();\n            // In some cases the recorded delay is clearly wrong, e.g. it's negative or it's larger than\n            // the time between now and when the page was loaded.\n            // - https://github.com/GoogleChromeLabs/first-input-delay/issues/4\n            // - https://github.com/GoogleChromeLabs/first-input-delay/issues/6\n            // - https://github.com/GoogleChromeLabs/first-input-delay/issues/7\n            var delay = timing.processingStart - timing.startTime;\n            if (delay >= 0 && delay < dateNow() - startTimeStamp) {\n                callback(timing);\n            }\n        }\n    }\n}\n//# sourceMappingURL=firstInputPolyfill.js.map","import { matchList, monitor, Observable, timeStampNow, setTimeout, clearTimeout } from '@datadog/browser-core';\nimport { createPerformanceObservable, RumPerformanceEntryType } from '../browser/performanceObservable';\n// Delay to wait for a page activity to validate the tracking process\nexport var PAGE_ACTIVITY_VALIDATION_DELAY = 100;\n// Delay to wait after a page activity to end the tracking process\nexport var PAGE_ACTIVITY_END_DELAY = 100;\n/**\n * Wait for the page activity end\n *\n * Detection lifecycle:\n * ```\n *                        Wait page activity end\n *              .-------------------'--------------------.\n *              v                                        v\n *     [Wait for a page activity ]          [Wait for a maximum duration]\n *     [timeout: VALIDATION_DELAY]          [  timeout: maxDuration     ]\n *          /                  \\                           |\n *         v                    v                          |\n *  [No page activity]   [Page activity]                   |\n *         |                   |,----------------------.   |\n *         v                   v                       |   |\n *     (Discard)     [Wait for a page activity]        |   |\n *                   [   timeout: END_DELAY   ]        |   |\n *                       /                \\            |   |\n *                      v                  v           |   |\n *             [No page activity]    [Page activity]   |   |\n *                      |                 |            |   |\n *                      |                 '------------'   |\n *                      '-----------. ,--------------------'\n *                                   v\n *                                 (End)\n * ```\n *\n * Note: by assuming that maxDuration is greater than VALIDATION_DELAY, we are sure that if the\n * process is still alive after maxDuration, it has been validated.\n */\nexport function waitPageActivityEnd(lifeCycle, domMutationObservable, windowOpenObservable, configuration, pageActivityEndCallback, maxDuration) {\n    var pageActivityObservable = createPageActivityObservable(lifeCycle, domMutationObservable, windowOpenObservable, configuration);\n    return doWaitPageActivityEnd(pageActivityObservable, pageActivityEndCallback, maxDuration);\n}\nexport function doWaitPageActivityEnd(pageActivityObservable, pageActivityEndCallback, maxDuration) {\n    var pageActivityEndTimeoutId;\n    var hasCompleted = false;\n    var validationTimeoutId = setTimeout(monitor(function () { return complete({ hadActivity: false }); }), PAGE_ACTIVITY_VALIDATION_DELAY);\n    var maxDurationTimeoutId = maxDuration !== undefined\n        ? setTimeout(monitor(function () { return complete({ hadActivity: true, end: timeStampNow() }); }), maxDuration)\n        : undefined;\n    var pageActivitySubscription = pageActivityObservable.subscribe(function (_a) {\n        var isBusy = _a.isBusy;\n        clearTimeout(validationTimeoutId);\n        clearTimeout(pageActivityEndTimeoutId);\n        var lastChangeTime = timeStampNow();\n        if (!isBusy) {\n            pageActivityEndTimeoutId = setTimeout(monitor(function () { return complete({ hadActivity: true, end: lastChangeTime }); }), PAGE_ACTIVITY_END_DELAY);\n        }\n    });\n    var stop = function () {\n        hasCompleted = true;\n        clearTimeout(validationTimeoutId);\n        clearTimeout(pageActivityEndTimeoutId);\n        clearTimeout(maxDurationTimeoutId);\n        pageActivitySubscription.unsubscribe();\n    };\n    function complete(event) {\n        if (hasCompleted) {\n            return;\n        }\n        stop();\n        pageActivityEndCallback(event);\n    }\n    return { stop: stop };\n}\nexport function createPageActivityObservable(lifeCycle, domMutationObservable, windowOpenObservable, configuration) {\n    return new Observable(function (observable) {\n        var subscriptions = [];\n        var firstRequestIndex;\n        var pendingRequestsCount = 0;\n        subscriptions.push(domMutationObservable.subscribe(notifyPageActivity), windowOpenObservable.subscribe(notifyPageActivity), createPerformanceObservable(configuration, { type: RumPerformanceEntryType.RESOURCE }).subscribe(function (entries) {\n            if (entries.some(function (entry) { return !isExcludedUrl(configuration, entry.name); })) {\n                notifyPageActivity();\n            }\n        }), lifeCycle.subscribe(7 /* LifeCycleEventType.REQUEST_STARTED */, function (startEvent) {\n            if (isExcludedUrl(configuration, startEvent.url)) {\n                return;\n            }\n            if (firstRequestIndex === undefined) {\n                firstRequestIndex = startEvent.requestIndex;\n            }\n            pendingRequestsCount += 1;\n            notifyPageActivity();\n        }), lifeCycle.subscribe(8 /* LifeCycleEventType.REQUEST_COMPLETED */, function (request) {\n            if (isExcludedUrl(configuration, request.url) ||\n                firstRequestIndex === undefined ||\n                // If the request started before the tracking start, ignore it\n                request.requestIndex < firstRequestIndex) {\n                return;\n            }\n            pendingRequestsCount -= 1;\n            notifyPageActivity();\n        }));\n        return function () {\n            subscriptions.forEach(function (s) { return s.unsubscribe(); });\n        };\n        function notifyPageActivity() {\n            observable.notify({ isBusy: pendingRequestsCount > 0 });\n        }\n    });\n}\nfunction isExcludedUrl(configuration, requestUrl) {\n    return matchList(configuration.excludedActivityUrls, requestUrl);\n}\n//# sourceMappingURL=waitPageActivityEnd.js.map","// https://github.com/jquery/jquery/blob/a684e6ba836f7c553968d7d026ed7941e1a612d8/src/selector/escapeSelector.js\nexport function cssEscape(str) {\n    if (window.CSS && window.CSS.escape) {\n        return window.CSS.escape(str);\n    }\n    // eslint-disable-next-line no-control-regex\n    return str.replace(/([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g, function (ch, asCodePoint) {\n        if (asCodePoint) {\n            // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n            if (ch === '\\0') {\n                return '\\uFFFD';\n            }\n            // Control characters and (dependent upon position) numbers get escaped as code points\n            return \"\".concat(ch.slice(0, -1), \"\\\\\").concat(ch.charCodeAt(ch.length - 1).toString(16), \" \");\n        }\n        // Other potentially-special ASCII characters get backslash-escaped\n        return \"\\\\\".concat(ch);\n    });\n}\nexport function elementMatches(element, selector) {\n    if (element.matches) {\n        return element.matches(selector);\n    }\n    // IE11 support\n    if (element.msMatchesSelector) {\n        return element.msMatchesSelector(selector);\n    }\n    return false;\n}\n/**\n * Return the parentElement of an node\n *\n * In cases where parentElement is not supported, such as in IE11 for SVG nodes, we fallback to parentNode\n */\nexport function getParentElement(node) {\n    if (node.parentElement) {\n        return node.parentElement;\n    }\n    while (node.parentNode) {\n        if (node.parentNode.nodeType === Node.ELEMENT_NODE) {\n            return node.parentNode;\n        }\n        node = node.parentNode;\n    }\n    return null;\n}\n/**\n * Return the classList of an element or an array of classes if classList is not supported\n *\n * In cases where classList is not supported, such as in IE11 for SVG and MathML elements,\n * we fallback to using element.getAttribute('class').\n * We opt for element.getAttribute('class') over element.className because className returns an SVGAnimatedString for SVG elements.\n */\nexport function getClassList(element) {\n    if (element.classList) {\n        return element.classList;\n    }\n    var classes = (element.getAttribute('class') || '').trim();\n    return classes ? classes.split(/\\s+/) : [];\n}\n// ie11 supports WeakMap but not WeakSet\nvar PLACEHOLDER = 1;\n// eslint-disable-next-line no-restricted-syntax\nvar WeakSet = /** @class */ (function () {\n    function WeakSet(initialValues) {\n        var _this = this;\n        this.map = new WeakMap();\n        if (initialValues) {\n            initialValues.forEach(function (value) { return _this.map.set(value, PLACEHOLDER); });\n        }\n    }\n    WeakSet.prototype.add = function (value) {\n        this.map.set(value, PLACEHOLDER);\n        return this;\n    };\n    WeakSet.prototype.delete = function (value) {\n        return this.map.delete(value);\n    };\n    WeakSet.prototype.has = function (value) {\n        return this.map.has(value);\n    };\n    return WeakSet;\n}());\nexport { WeakSet };\n//# sourceMappingURL=polyfills.js.map","export function isTextNode(node) {\n    return node.nodeType === Node.TEXT_NODE;\n}\nexport function isCommentNode(node) {\n    return node.nodeType === Node.COMMENT_NODE;\n}\nexport function isElementNode(node) {\n    return node.nodeType === Node.ELEMENT_NODE;\n}\nexport function isNodeShadowHost(node) {\n    return isElementNode(node) && Boolean(node.shadowRoot);\n}\nexport function isNodeShadowRoot(node) {\n    var shadowRoot = node;\n    return !!shadowRoot.host && shadowRoot.nodeType === Node.DOCUMENT_FRAGMENT_NODE && isElementNode(shadowRoot.host);\n}\nexport function hasChildNodes(node) {\n    return node.childNodes.length > 0 || isNodeShadowHost(node);\n}\nexport function forEachChildNodes(node, callback) {\n    var child = node.firstChild;\n    while (child) {\n        callback(child);\n        child = child.nextSibling;\n    }\n    if (isNodeShadowHost(node)) {\n        callback(node.shadowRoot);\n    }\n}\n/**\n * Return `host` in case if the current node is a shadow root otherwise will return the `parentNode`\n */\nexport function getParentNode(node) {\n    return isNodeShadowRoot(node) ? node.host : node.parentNode;\n}\n//# sourceMappingURL=htmlDomUtils.js.map","import { DefaultPrivacyLevel } from '@datadog/browser-core';\nimport { isElementNode, getParentNode, isTextNode } from '../browser/htmlDomUtils';\nimport { elementMatches } from '../browser/polyfills';\nexport var NodePrivacyLevel = {\n    IGNORE: 'ignore',\n    HIDDEN: 'hidden',\n    ALLOW: DefaultPrivacyLevel.ALLOW,\n    MASK: DefaultPrivacyLevel.MASK,\n    MASK_USER_INPUT: DefaultPrivacyLevel.MASK_USER_INPUT,\n};\nexport var PRIVACY_ATTR_NAME = 'data-dd-privacy';\n// Privacy Attrs\nexport var PRIVACY_ATTR_VALUE_ALLOW = 'allow';\nexport var PRIVACY_ATTR_VALUE_MASK = 'mask';\nexport var PRIVACY_ATTR_VALUE_MASK_USER_INPUT = 'mask-user-input';\nexport var PRIVACY_ATTR_VALUE_HIDDEN = 'hidden';\n// Privacy Classes - not all customers can set plain HTML attributes, so support classes too\nexport var PRIVACY_CLASS_PREFIX = 'dd-privacy-';\n// Private Replacement Templates\nexport var CENSORED_STRING_MARK = '***';\nexport var CENSORED_IMG_MARK = 'data:image/gif;base64,R0lGODlhAQABAIAAAMLCwgAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==';\nexport var FORM_PRIVATE_TAG_NAMES = {\n    INPUT: true,\n    OUTPUT: true,\n    TEXTAREA: true,\n    SELECT: true,\n    OPTION: true,\n    DATALIST: true,\n    OPTGROUP: true,\n};\nvar TEXT_MASKING_CHAR = 'x';\n/**\n * Get node privacy level by iterating over its ancestors. When the direct parent privacy level is\n * know, it is best to use something like:\n *\n * derivePrivacyLevelGivenParent(getNodeSelfPrivacyLevel(node), parentNodePrivacyLevel)\n */\nexport function getNodePrivacyLevel(node, defaultPrivacyLevel, cache) {\n    if (cache && cache.has(node)) {\n        return cache.get(node);\n    }\n    var parentNode = getParentNode(node);\n    var parentNodePrivacyLevel = parentNode\n        ? getNodePrivacyLevel(parentNode, defaultPrivacyLevel, cache)\n        : defaultPrivacyLevel;\n    var selfNodePrivacyLevel = getNodeSelfPrivacyLevel(node);\n    var nodePrivacyLevel = reducePrivacyLevel(selfNodePrivacyLevel, parentNodePrivacyLevel);\n    if (cache) {\n        cache.set(node, nodePrivacyLevel);\n    }\n    return nodePrivacyLevel;\n}\n/**\n * Reduces the next privacy level based on self + parent privacy levels\n */\nexport function reducePrivacyLevel(childPrivacyLevel, parentNodePrivacyLevel) {\n    switch (parentNodePrivacyLevel) {\n        // These values cannot be overridden\n        case NodePrivacyLevel.HIDDEN:\n        case NodePrivacyLevel.IGNORE:\n            return parentNodePrivacyLevel;\n    }\n    switch (childPrivacyLevel) {\n        case NodePrivacyLevel.ALLOW:\n        case NodePrivacyLevel.MASK:\n        case NodePrivacyLevel.MASK_USER_INPUT:\n        case NodePrivacyLevel.HIDDEN:\n        case NodePrivacyLevel.IGNORE:\n            return childPrivacyLevel;\n        default:\n            return parentNodePrivacyLevel;\n    }\n}\n/**\n * Determines the node's own privacy level without checking for ancestors.\n */\nexport function getNodeSelfPrivacyLevel(node) {\n    // Only Element types can have a privacy level set\n    if (!isElementNode(node)) {\n        return;\n    }\n    // Overrules for replay purpose\n    if (node.tagName === 'BASE') {\n        return NodePrivacyLevel.ALLOW;\n    }\n    // Overrules to enforce end-user protection\n    if (node.tagName === 'INPUT') {\n        var inputElement = node;\n        if (inputElement.type === 'password' || inputElement.type === 'email' || inputElement.type === 'tel') {\n            return NodePrivacyLevel.MASK;\n        }\n        if (inputElement.type === 'hidden') {\n            return NodePrivacyLevel.MASK;\n        }\n        var autocomplete = inputElement.getAttribute('autocomplete');\n        // Handle input[autocomplete=cc-number/cc-csc/cc-exp/cc-exp-month/cc-exp-year/new-password/current-password]\n        if (autocomplete && (autocomplete.startsWith('cc-') || autocomplete.endsWith('-password'))) {\n            return NodePrivacyLevel.MASK;\n        }\n    }\n    // Check HTML privacy attributes and classes\n    if (elementMatches(node, getPrivacySelector(NodePrivacyLevel.HIDDEN))) {\n        return NodePrivacyLevel.HIDDEN;\n    }\n    if (elementMatches(node, getPrivacySelector(NodePrivacyLevel.MASK))) {\n        return NodePrivacyLevel.MASK;\n    }\n    if (elementMatches(node, getPrivacySelector(NodePrivacyLevel.MASK_USER_INPUT))) {\n        return NodePrivacyLevel.MASK_USER_INPUT;\n    }\n    if (elementMatches(node, getPrivacySelector(NodePrivacyLevel.ALLOW))) {\n        return NodePrivacyLevel.ALLOW;\n    }\n    if (shouldIgnoreElement(node)) {\n        return NodePrivacyLevel.IGNORE;\n    }\n}\n/**\n * Helper aiming to unify `mask` and `mask-user-input` privacy levels:\n *\n * In the `mask` case, it is trivial: we should mask the element.\n *\n * In the `mask-user-input` case, we should mask the element only if it is a \"form\" element or the\n * direct parent is a form element for text nodes).\n *\n * Other `shouldMaskNode` cases are edge cases that should not matter too much (ex: should we mask a\n * node if it is ignored or hidden? it doesn't matter since it won't be serialized).\n */\nexport function shouldMaskNode(node, privacyLevel) {\n    switch (privacyLevel) {\n        case NodePrivacyLevel.MASK:\n        case NodePrivacyLevel.HIDDEN:\n        case NodePrivacyLevel.IGNORE:\n            return true;\n        case NodePrivacyLevel.MASK_USER_INPUT:\n            return isTextNode(node) ? isFormElement(node.parentNode) : isFormElement(node);\n        default:\n            return false;\n    }\n}\nfunction isFormElement(node) {\n    if (!node || node.nodeType !== node.ELEMENT_NODE) {\n        return false;\n    }\n    var element = node;\n    if (element.tagName === 'INPUT') {\n        switch (element.type) {\n            case 'button':\n            case 'color':\n            case 'reset':\n            case 'submit':\n                return false;\n        }\n    }\n    return !!FORM_PRIVATE_TAG_NAMES[element.tagName];\n}\n/**\n * Text censoring non-destructively maintains whitespace characters in order to preserve text shape\n * during replay.\n */\nexport var censorText = function (text) { return text.replace(/\\S/g, TEXT_MASKING_CHAR); };\nexport function getTextContent(textNode, ignoreWhiteSpace, parentNodePrivacyLevel) {\n    var _a;\n    // The parent node may not be a html element which has a tagName attribute.\n    // So just let it be undefined which is ok in this use case.\n    var parentTagName = (_a = textNode.parentElement) === null || _a === void 0 ? void 0 : _a.tagName;\n    var textContent = textNode.textContent || '';\n    if (ignoreWhiteSpace && !textContent.trim()) {\n        return;\n    }\n    var nodePrivacyLevel = parentNodePrivacyLevel;\n    var isScript = parentTagName === 'SCRIPT';\n    if (isScript) {\n        // For perf reasons, we don't record script (heuristic)\n        textContent = CENSORED_STRING_MARK;\n    }\n    else if (nodePrivacyLevel === NodePrivacyLevel.HIDDEN) {\n        // Should never occur, but just in case, we set to CENSORED_MARK.\n        textContent = CENSORED_STRING_MARK;\n    }\n    else if (shouldMaskNode(textNode, nodePrivacyLevel)) {\n        if (\n        // Scrambling the child list breaks text nodes for DATALIST/SELECT/OPTGROUP\n        parentTagName === 'DATALIST' ||\n            parentTagName === 'SELECT' ||\n            parentTagName === 'OPTGROUP') {\n            if (!textContent.trim()) {\n                return;\n            }\n        }\n        else if (parentTagName === 'OPTION') {\n            // <Option> has low entropy in charset + text length, so use `CENSORED_STRING_MARK` when masked\n            textContent = CENSORED_STRING_MARK;\n        }\n        else {\n            textContent = censorText(textContent);\n        }\n    }\n    return textContent;\n}\n/**\n * TODO: Preserve CSS element order, and record the presence of the tag, just don't render\n * We don't need this logic on the recorder side.\n * For security related meta's, customer can mask themmanually given they\n * are easy to identify in the HEAD tag.\n */\nexport function shouldIgnoreElement(element) {\n    if (element.nodeName === 'SCRIPT') {\n        return true;\n    }\n    if (element.nodeName === 'LINK') {\n        var relAttribute = getLowerCaseAttribute('rel');\n        return (\n        // Link as script - Ignore only when rel=preload, modulepreload or prefetch\n        (/preload|prefetch/i.test(relAttribute) && getLowerCaseAttribute('as') === 'script') ||\n            // Favicons\n            relAttribute === 'shortcut icon' ||\n            relAttribute === 'icon');\n    }\n    if (element.nodeName === 'META') {\n        var nameAttribute = getLowerCaseAttribute('name');\n        var relAttribute = getLowerCaseAttribute('rel');\n        var propertyAttribute = getLowerCaseAttribute('property');\n        return (\n        // Favicons\n        /^msapplication-tile(image|color)$/.test(nameAttribute) ||\n            nameAttribute === 'application-name' ||\n            relAttribute === 'icon' ||\n            relAttribute === 'apple-touch-icon' ||\n            relAttribute === 'shortcut icon' ||\n            // Description\n            nameAttribute === 'keywords' ||\n            nameAttribute === 'description' ||\n            // Social\n            /^(og|twitter|fb):/.test(propertyAttribute) ||\n            /^(og|twitter):/.test(nameAttribute) ||\n            nameAttribute === 'pinterest' ||\n            // Robots\n            nameAttribute === 'robots' ||\n            nameAttribute === 'googlebot' ||\n            nameAttribute === 'bingbot' ||\n            // Http headers. Ex: X-UA-Compatible, Content-Type, Content-Language, cache-control,\n            // X-Translated-By\n            element.hasAttribute('http-equiv') ||\n            // Authorship\n            nameAttribute === 'author' ||\n            nameAttribute === 'generator' ||\n            nameAttribute === 'framework' ||\n            nameAttribute === 'publisher' ||\n            nameAttribute === 'progid' ||\n            /^article:/.test(propertyAttribute) ||\n            /^product:/.test(propertyAttribute) ||\n            // Verification\n            nameAttribute === 'google-site-verification' ||\n            nameAttribute === 'yandex-verification' ||\n            nameAttribute === 'csrf-token' ||\n            nameAttribute === 'p:domain_verify' ||\n            nameAttribute === 'verify-v1' ||\n            nameAttribute === 'verification' ||\n            nameAttribute === 'shopify-checkout-api-token');\n    }\n    function getLowerCaseAttribute(name) {\n        return (element.getAttribute(name) || '').toLowerCase();\n    }\n    return false;\n}\nexport function getPrivacySelector(privacyLevel) {\n    return \"[\".concat(PRIVACY_ATTR_NAME, \"=\\\"\").concat(privacyLevel, \"\\\"], .\").concat(PRIVACY_CLASS_PREFIX).concat(privacyLevel);\n}\n//# sourceMappingURL=privacy.js.map","import { safeTruncate, isIE, find } from '@datadog/browser-core';\nimport { getParentElement } from '../../browser/polyfills';\nimport { NodePrivacyLevel, getPrivacySelector } from '../privacy';\n/**\n * Get the action name from the attribute 'data-dd-action-name' on the element or any of its parent.\n * It can also be retrieved from a user defined attribute.\n */\nexport var DEFAULT_PROGRAMMATIC_ACTION_NAME_ATTRIBUTE = 'data-dd-action-name';\nexport var ACTION_NAME_PLACEHOLDER = 'Masked Element';\nexport function getActionNameFromElement(element, _a, nodePrivacyLevel) {\n    var enablePrivacyForActionName = _a.enablePrivacyForActionName, userProgrammaticAttribute = _a.actionNameAttribute;\n    // Proceed to get the action name in two steps:\n    // * first, get the name programmatically, explicitly defined by the user.\n    // * then, if privacy is set to mask, return a placeholder for the undefined.\n    // * if privacy is not set to mask, use strategies that are known to return good results.\n    //   Those strategies will be used on the element and a few parents, but it's likely that they won't succeed at all.\n    // * if no name is found this way, use strategies returning less accurate names as a fallback.\n    //   Those are much likely to succeed.\n    var defaultActionName = getActionNameFromElementProgrammatically(element, DEFAULT_PROGRAMMATIC_ACTION_NAME_ATTRIBUTE) ||\n        (userProgrammaticAttribute && getActionNameFromElementProgrammatically(element, userProgrammaticAttribute));\n    if (defaultActionName) {\n        return { name: defaultActionName, nameSource: \"custom_attribute\" /* ActionNameSource.CUSTOM_ATTRIBUTE */ };\n    }\n    else if (nodePrivacyLevel === NodePrivacyLevel.MASK) {\n        return { name: ACTION_NAME_PLACEHOLDER, nameSource: \"mask_placeholder\" /* ActionNameSource.MASK_PLACEHOLDER */ };\n    }\n    return (getActionNameFromElementForStrategies(element, userProgrammaticAttribute, priorityStrategies, enablePrivacyForActionName) ||\n        getActionNameFromElementForStrategies(element, userProgrammaticAttribute, fallbackStrategies, enablePrivacyForActionName) || { name: '', nameSource: \"blank\" /* ActionNameSource.BLANK */ });\n}\nfunction getActionNameFromElementProgrammatically(targetElement, programmaticAttribute) {\n    var elementWithAttribute;\n    // We don't use getActionNameFromElementForStrategies here, because we want to consider all parents,\n    // without limit. It is up to the user to declare a relevant naming strategy.\n    // If available, use element.closest() to match get the attribute from the element or any of its\n    // parent.  Else fallback to a more traditional implementation.\n    if (supportsElementClosest()) {\n        elementWithAttribute = targetElement.closest(\"[\".concat(programmaticAttribute, \"]\"));\n    }\n    else {\n        var element = targetElement;\n        while (element) {\n            if (element.hasAttribute(programmaticAttribute)) {\n                elementWithAttribute = element;\n                break;\n            }\n            element = getParentElement(element);\n        }\n    }\n    if (!elementWithAttribute) {\n        return;\n    }\n    var name = elementWithAttribute.getAttribute(programmaticAttribute);\n    return truncate(normalizeWhitespace(name.trim()));\n}\nvar priorityStrategies = [\n    // associated LABEL text\n    function (element, userProgrammaticAttribute, privacy) {\n        // IE does not support element.labels, so we fallback to a CSS selector based on the element id\n        // instead\n        if (supportsLabelProperty()) {\n            if ('labels' in element && element.labels && element.labels.length > 0) {\n                return getActionNameFromTextualContent(element.labels[0], userProgrammaticAttribute);\n            }\n        }\n        else if (element.id) {\n            var label = element.ownerDocument &&\n                find(element.ownerDocument.querySelectorAll('label'), function (label) { return label.htmlFor === element.id; });\n            return label && getActionNameFromTextualContent(label, userProgrammaticAttribute, privacy);\n        }\n    },\n    // INPUT button (and associated) value\n    function (element) {\n        if (element.nodeName === 'INPUT') {\n            var input = element;\n            var type = input.getAttribute('type');\n            if (type === 'button' || type === 'submit' || type === 'reset') {\n                return { name: input.value, nameSource: \"text_content\" /* ActionNameSource.TEXT_CONTENT */ };\n            }\n        }\n    },\n    // BUTTON, LABEL or button-like element text\n    function (element, userProgrammaticAttribute, privacyEnabledActionName) {\n        if (element.nodeName === 'BUTTON' || element.nodeName === 'LABEL' || element.getAttribute('role') === 'button') {\n            return getActionNameFromTextualContent(element, userProgrammaticAttribute, privacyEnabledActionName);\n        }\n    },\n    function (element) { return getActionNameFromStandardAttribute(element, 'aria-label'); },\n    // associated element text designated by the aria-labelledby attribute\n    function (element, userProgrammaticAttribute, privacyEnabledActionName) {\n        var labelledByAttribute = element.getAttribute('aria-labelledby');\n        if (labelledByAttribute) {\n            return {\n                name: labelledByAttribute\n                    .split(/\\s+/)\n                    .map(function (id) { return getElementById(element, id); })\n                    .filter(function (label) { return Boolean(label); })\n                    .map(function (element) { return getTextualContent(element, userProgrammaticAttribute, privacyEnabledActionName); })\n                    .join(' '),\n                nameSource: \"text_content\" /* ActionNameSource.TEXT_CONTENT */,\n            };\n        }\n    },\n    function (element) { return getActionNameFromStandardAttribute(element, 'alt'); },\n    function (element) { return getActionNameFromStandardAttribute(element, 'name'); },\n    function (element) { return getActionNameFromStandardAttribute(element, 'title'); },\n    function (element) { return getActionNameFromStandardAttribute(element, 'placeholder'); },\n    // SELECT first OPTION text\n    function (element, userProgrammaticAttribute) {\n        if ('options' in element && element.options.length > 0) {\n            return getActionNameFromTextualContent(element.options[0], userProgrammaticAttribute);\n        }\n    },\n];\nvar fallbackStrategies = [\n    function (element, userProgrammaticAttribute, privacyEnabledActionName) {\n        return getActionNameFromTextualContent(element, userProgrammaticAttribute, privacyEnabledActionName);\n    },\n];\n/**\n * Iterates over the target element and its parent, using the strategies list to get an action name.\n * Each strategies are applied on each element, stopping as soon as a non-empty value is returned.\n */\nvar MAX_PARENTS_TO_CONSIDER = 10;\nfunction getActionNameFromElementForStrategies(targetElement, userProgrammaticAttribute, strategies, privacyEnabledActionName) {\n    var element = targetElement;\n    var recursionCounter = 0;\n    while (recursionCounter <= MAX_PARENTS_TO_CONSIDER &&\n        element &&\n        element.nodeName !== 'BODY' &&\n        element.nodeName !== 'HTML' &&\n        element.nodeName !== 'HEAD') {\n        for (var _i = 0, strategies_1 = strategies; _i < strategies_1.length; _i++) {\n            var strategy = strategies_1[_i];\n            var actionName = strategy(element, userProgrammaticAttribute, privacyEnabledActionName);\n            if (actionName) {\n                var name_1 = actionName.name, nameSource = actionName.nameSource;\n                var trimmedName = name_1 && name_1.trim();\n                if (trimmedName) {\n                    return { name: truncate(normalizeWhitespace(trimmedName)), nameSource: nameSource };\n                }\n            }\n        }\n        // Consider a FORM as a contextual limit to get the action name.  This is experimental and may\n        // be reconsidered in the future.\n        if (element.nodeName === 'FORM') {\n            break;\n        }\n        element = getParentElement(element);\n        recursionCounter += 1;\n    }\n}\nfunction normalizeWhitespace(s) {\n    return s.replace(/\\s+/g, ' ');\n}\nfunction truncate(s) {\n    return s.length > 100 ? \"\".concat(safeTruncate(s, 100), \" [...]\") : s;\n}\nfunction getElementById(refElement, id) {\n    // Use the element ownerDocument here, because tests are executed in an iframe, so\n    // document.getElementById won't work.\n    return refElement.ownerDocument ? refElement.ownerDocument.getElementById(id) : null;\n}\nfunction getActionNameFromStandardAttribute(element, attribute) {\n    return {\n        name: element.getAttribute(attribute) || '',\n        nameSource: \"standard_attribute\" /* ActionNameSource.STANDARD_ATTRIBUTE */,\n    };\n}\nfunction getActionNameFromTextualContent(element, userProgrammaticAttribute, privacyEnabledActionName) {\n    return {\n        name: getTextualContent(element, userProgrammaticAttribute, privacyEnabledActionName) || '',\n        nameSource: \"text_content\" /* ActionNameSource.TEXT_CONTENT */,\n    };\n}\nfunction getTextualContent(element, userProgrammaticAttribute, privacyEnabledActionName) {\n    if (element.isContentEditable) {\n        return;\n    }\n    if ('innerText' in element) {\n        var text_1 = element.innerText;\n        var removeTextFromElements = function (query) {\n            var list = element.querySelectorAll(query);\n            for (var index = 0; index < list.length; index += 1) {\n                var element_1 = list[index];\n                if ('innerText' in element_1) {\n                    var textToReplace = element_1.innerText;\n                    if (textToReplace && textToReplace.trim().length > 0) {\n                        text_1 = text_1.replace(textToReplace, '');\n                    }\n                }\n            }\n        };\n        if (!supportsInnerTextScriptAndStyleRemoval()) {\n            // remove the inner text of SCRIPT and STYLES from the result. This is a bit dirty, but should\n            // be relatively fast and work in most cases.\n            removeTextFromElements('script, style');\n        }\n        // remove the text of elements with programmatic attribute value\n        removeTextFromElements(\"[\".concat(DEFAULT_PROGRAMMATIC_ACTION_NAME_ATTRIBUTE, \"]\"));\n        if (userProgrammaticAttribute) {\n            removeTextFromElements(\"[\".concat(userProgrammaticAttribute, \"]\"));\n        }\n        if (privacyEnabledActionName) {\n            // remove the text of elements with privacy override\n            removeTextFromElements(\"\".concat(getPrivacySelector(NodePrivacyLevel.HIDDEN), \", \").concat(getPrivacySelector(NodePrivacyLevel.MASK)));\n        }\n        return text_1;\n    }\n    return element.textContent;\n}\n/**\n * Returns true if element.innerText excludes the text from inline SCRIPT and STYLE element. This\n * should be the case everywhere except on Internet Explorer 10 and 11 (see [1])\n *\n * The innerText property relies on what is actually rendered to compute its output, so to check if\n * it actually excludes SCRIPT and STYLE content, a solution would be to create a style element, set\n * its content to '*', inject it in the document body, and check if the style element innerText\n * property returns '*'. Using a new `document` instance won't work as it is not rendered.\n *\n * This solution requires specific CSP rules (see [2]) to be set by the customer. We want to avoid\n * this, so instead we rely on browser detection. In case of false negative, the impact should be\n * low, since we rely on this result to remove the SCRIPT and STYLE innerText (which will be empty)\n * from a parent element innerText.\n *\n * [1]: https://web.archive.org/web/20210602165716/http://perfectionkills.com/the-poor-misunderstood-innerText/#diff-with-textContent\n * [2]: https://github.com/DataDog/browser-sdk/issues/1084\n */\nfunction supportsInnerTextScriptAndStyleRemoval() {\n    return !isIE();\n}\n/**\n * Returns true if the browser supports the element.labels property.  This should be the case\n * everywhere except on Internet Explorer.\n * Note: The result is computed lazily, because we don't want any DOM access when the SDK is\n * evaluated.\n */\nvar supportsLabelPropertyResult;\nfunction supportsLabelProperty() {\n    if (supportsLabelPropertyResult === undefined) {\n        supportsLabelPropertyResult = 'labels' in HTMLInputElement.prototype;\n    }\n    return supportsLabelPropertyResult;\n}\n/**\n * Returns true if the browser supports the element.closest method.  This should be the case\n * everywhere except on Internet Explorer.\n * Note: The result is computed lazily, because we don't want any DOM access when the SDK is\n * evaluated.\n */\nvar supportsElementClosestResult;\nfunction supportsElementClosest() {\n    if (supportsElementClosestResult === undefined) {\n        supportsElementClosestResult = 'closest' in HTMLElement.prototype;\n    }\n    return supportsElementClosestResult;\n}\n//# sourceMappingURL=getActionNameFromElement.js.map","import { cssEscape, elementMatches, getClassList, getParentElement } from '../browser/polyfills';\nimport { DEFAULT_PROGRAMMATIC_ACTION_NAME_ATTRIBUTE } from './action/getActionNameFromElement';\n/**\n * Stable attributes are attributes that are commonly used to identify parts of a UI (ex:\n * component). Those attribute values should not be generated randomly (hardcoded most of the time)\n * and stay the same across deploys. They are not necessarily unique across the document.\n */\nexport var STABLE_ATTRIBUTES = [\n    DEFAULT_PROGRAMMATIC_ACTION_NAME_ATTRIBUTE,\n    // Common test attributes (list provided by google recorder)\n    'data-testid',\n    'data-test',\n    'data-qa',\n    'data-cy',\n    'data-test-id',\n    'data-qa-id',\n    'data-testing',\n    // FullStory decorator attributes:\n    'data-component',\n    'data-element',\n    'data-source-file',\n];\n// Selectors to use if they target a single element on the whole document. Those selectors are\n// considered as \"stable\" and uniquely identify an element regardless of the page state. If we find\n// one, we should consider the selector \"complete\" and stop iterating over ancestors.\nvar GLOBALLY_UNIQUE_SELECTOR_GETTERS = [getStableAttributeSelector, getIDSelector];\n// Selectors to use if they target a single element among an element descendants. Those selectors\n// are more brittle than \"globally unique\" selectors and should be combined with ancestor selectors\n// to improve specificity.\nvar UNIQUE_AMONG_CHILDREN_SELECTOR_GETTERS = [\n    getStableAttributeSelector,\n    getClassSelector,\n    getTagNameSelector,\n];\nexport function getSelectorFromElement(targetElement, actionNameAttribute) {\n    if (!isConnected(targetElement)) {\n        // We cannot compute a selector for a detached element, as we don't have access to all of its\n        // parents, and we cannot determine if it's unique in the document.\n        return;\n    }\n    var targetElementSelector;\n    var currentElement = targetElement;\n    while (currentElement && currentElement.nodeName !== 'HTML') {\n        var globallyUniqueSelector = findSelector(currentElement, GLOBALLY_UNIQUE_SELECTOR_GETTERS, isSelectorUniqueGlobally, actionNameAttribute, targetElementSelector);\n        if (globallyUniqueSelector) {\n            return globallyUniqueSelector;\n        }\n        var uniqueSelectorAmongChildren = findSelector(currentElement, UNIQUE_AMONG_CHILDREN_SELECTOR_GETTERS, isSelectorUniqueAmongSiblings, actionNameAttribute, targetElementSelector);\n        targetElementSelector =\n            uniqueSelectorAmongChildren || combineSelector(getPositionSelector(currentElement), targetElementSelector);\n        currentElement = getParentElement(currentElement);\n    }\n    return targetElementSelector;\n}\nfunction isGeneratedValue(value) {\n    // To compute the \"URL path group\", the backend replaces every URL path parts as a question mark\n    // if it thinks the part is an identifier. The condition it uses is to checks whether a digit is\n    // present.\n    //\n    // Here, we use the same strategy: if the value contains a digit, we consider it generated. This\n    // strategy might be a bit naive and fail in some cases, but there are many fallbacks to generate\n    // CSS selectors so it should be fine most of the time.\n    return /[0-9]/.test(value);\n}\nfunction getIDSelector(element) {\n    if (element.id && !isGeneratedValue(element.id)) {\n        return \"#\".concat(cssEscape(element.id));\n    }\n}\nfunction getClassSelector(element) {\n    if (element.tagName === 'BODY') {\n        return;\n    }\n    var classList = getClassList(element);\n    for (var i = 0; i < classList.length; i += 1) {\n        var className = classList[i];\n        if (isGeneratedValue(className)) {\n            continue;\n        }\n        return \"\".concat(cssEscape(element.tagName), \".\").concat(cssEscape(className));\n    }\n}\nfunction getTagNameSelector(element) {\n    return cssEscape(element.tagName);\n}\nfunction getStableAttributeSelector(element, actionNameAttribute) {\n    if (actionNameAttribute) {\n        var selector = getAttributeSelector(actionNameAttribute);\n        if (selector) {\n            return selector;\n        }\n    }\n    for (var _i = 0, STABLE_ATTRIBUTES_1 = STABLE_ATTRIBUTES; _i < STABLE_ATTRIBUTES_1.length; _i++) {\n        var attributeName = STABLE_ATTRIBUTES_1[_i];\n        var selector = getAttributeSelector(attributeName);\n        if (selector) {\n            return selector;\n        }\n    }\n    function getAttributeSelector(attributeName) {\n        if (element.hasAttribute(attributeName)) {\n            return \"\".concat(cssEscape(element.tagName), \"[\").concat(attributeName, \"=\\\"\").concat(cssEscape(element.getAttribute(attributeName)), \"\\\"]\");\n        }\n    }\n}\nfunction getPositionSelector(element) {\n    var sibling = getParentElement(element).firstElementChild;\n    var elementIndex = 1;\n    while (sibling && sibling !== element) {\n        if (sibling.tagName === element.tagName) {\n            elementIndex += 1;\n        }\n        sibling = sibling.nextElementSibling;\n    }\n    return \"\".concat(cssEscape(element.tagName), \":nth-of-type(\").concat(elementIndex, \")\");\n}\nfunction findSelector(element, selectorGetters, predicate, actionNameAttribute, childSelector) {\n    for (var _i = 0, selectorGetters_1 = selectorGetters; _i < selectorGetters_1.length; _i++) {\n        var selectorGetter = selectorGetters_1[_i];\n        var elementSelector = selectorGetter(element, actionNameAttribute);\n        if (!elementSelector) {\n            continue;\n        }\n        if (predicate(element, elementSelector, childSelector)) {\n            return combineSelector(elementSelector, childSelector);\n        }\n    }\n}\n/**\n * Check whether the selector is unique among the whole document.\n */\nfunction isSelectorUniqueGlobally(element, elementSelector, childSelector) {\n    return element.ownerDocument.querySelectorAll(combineSelector(elementSelector, childSelector)).length === 1;\n}\n/**\n * Check whether the selector is unique among the element siblings. In other words, it returns true\n * if \"ELEMENT_PARENT > CHILD_SELECTOR\" returns a single element.\n *\n * @param {Element} currentElement - the element being considered while iterating over the target\n * element ancestors.\n *\n * @param {string} currentElementSelector - a selector that matches the current element. That\n * selector is not a composed selector (i.e. it might be a single tag name, class name...).\n *\n * @param {string|undefined} childSelector - child selector is a selector that targets a descendant\n * of the current element. When undefined, the current element is the target element.\n *\n * # Scope selector usage\n *\n * When composed together, the final selector will be joined with `>` operators to make sure we\n * target direct descendants at each level. In this function, we'll use `querySelector` to check if\n * a selector matches descendants of the current element. But by default, the query selector match\n * elements at any level. Example:\n *\n * ```html\n * <main>\n *   <div>\n *     <span></span>\n *   </div>\n *   <marquee>\n *     <div>\n *       <span></span>\n *     </div>\n *   </marquee>\n * </main>\n * ```\n *\n * `sibling.querySelector('DIV > SPAN')` will match both span elements, so we would consider the\n * selector to be not unique, even if it is unique when we'll compose it with the parent with a `>`\n * operator (`MAIN > DIV > SPAN`).\n *\n * To avoid this, we can use the `:scope` selector to make sure the selector starts from the current\n * sibling (i.e. `sibling.querySelector('DIV:scope > SPAN')` will only match the first span).\n *\n * The result will be less accurate on browsers that don't support :scope (i. e. IE): it will check\n * for any element matching the selector contained in the parent (in other words,\n * \"ELEMENT_PARENT CHILD_SELECTOR\" returns a single element), regardless of whether the selector is\n * a direct descendant of the element parent. This should not impact results too much: if it\n * inaccurately returns false, we'll just fall back to another strategy.\n *\n * [1]: https://developer.mozilla.org/fr/docs/Web/CSS/:scope\n *\n * # Performance considerations\n *\n * We compute selectors in performance-critical operations (ex: during a click), so we need to make\n * sure the function is as fast as possible. We observed that naively using `querySelectorAll` to\n * check if the selector matches more than 1 element is quite expensive, so we want to avoid it.\n *\n * Because we are iterating the DOM upward and we use that function at every level, we know the\n * child selector is already unique among the current element children, so we don't need to check\n * for the current element subtree.\n *\n * Instead, we can focus on the current element siblings. If we find a single element matching the\n * selector within a sibling, we know that it's not unique. This allows us to use `querySelector`\n * (or `matches`, when the current element is the target element) instead of `querySelectorAll`.\n */\nexport function isSelectorUniqueAmongSiblings(currentElement, currentElementSelector, childSelector) {\n    var isSiblingMatching;\n    if (childSelector === undefined) {\n        // If the child selector is undefined (meaning `currentElement` is the target element, not one\n        // of its ancestor), we need to use `matches` to check if the sibling is matching the selector,\n        // as `querySelector` only returns a descendant of the element.\n        isSiblingMatching = function (sibling) { return elementMatches(sibling, currentElementSelector); };\n    }\n    else {\n        var scopedSelector_1 = supportScopeSelector()\n            ? combineSelector(\"\".concat(currentElementSelector, \":scope\"), childSelector)\n            : combineSelector(currentElementSelector, childSelector);\n        isSiblingMatching = function (sibling) { return sibling.querySelector(scopedSelector_1) !== null; };\n    }\n    var parent = getParentElement(currentElement);\n    var sibling = parent.firstElementChild;\n    while (sibling) {\n        if (sibling !== currentElement && isSiblingMatching(sibling)) {\n            return false;\n        }\n        sibling = sibling.nextElementSibling;\n    }\n    return true;\n}\nfunction combineSelector(parent, child) {\n    return child ? \"\".concat(parent, \">\").concat(child) : parent;\n}\nvar supportScopeSelectorCache;\nexport function supportScopeSelector() {\n    if (supportScopeSelectorCache === undefined) {\n        try {\n            document.querySelector(':scope');\n            supportScopeSelectorCache = true;\n        }\n        catch (_a) {\n            supportScopeSelectorCache = false;\n        }\n    }\n    return supportScopeSelectorCache;\n}\n/**\n * Polyfill-utility for the `isConnected` property not supported in IE11\n */\nfunction isConnected(element) {\n    if ('isConnected' in\n        // cast is to make sure `element` is not inferred as `never` after the check\n        element) {\n        return element.isConnected;\n    }\n    return element.ownerDocument.documentElement.contains(element);\n}\n//# sourceMappingURL=getSelectorFromElement.js.map","import { ONE_SECOND, clearTimeout, setTimeout } from '@datadog/browser-core';\nexport var MAX_DURATION_BETWEEN_CLICKS = ONE_SECOND;\nexport var MAX_DISTANCE_BETWEEN_CLICKS = 100;\nexport function createClickChain(firstClick, onFinalize) {\n    var bufferedClicks = [];\n    var status = 0 /* ClickChainStatus.WaitingForMoreClicks */;\n    var maxDurationBetweenClicksTimeoutId;\n    appendClick(firstClick);\n    function appendClick(click) {\n        click.stopObservable.subscribe(tryFinalize);\n        bufferedClicks.push(click);\n        clearTimeout(maxDurationBetweenClicksTimeoutId);\n        maxDurationBetweenClicksTimeoutId = setTimeout(dontAcceptMoreClick, MAX_DURATION_BETWEEN_CLICKS);\n    }\n    function tryFinalize() {\n        if (status === 1 /* ClickChainStatus.WaitingForClicksToStop */ && bufferedClicks.every(function (click) { return click.isStopped(); })) {\n            status = 2 /* ClickChainStatus.Finalized */;\n            onFinalize(bufferedClicks);\n        }\n    }\n    function dontAcceptMoreClick() {\n        clearTimeout(maxDurationBetweenClicksTimeoutId);\n        if (status === 0 /* ClickChainStatus.WaitingForMoreClicks */) {\n            status = 1 /* ClickChainStatus.WaitingForClicksToStop */;\n            tryFinalize();\n        }\n    }\n    return {\n        tryAppend: function (click) {\n            if (status !== 0 /* ClickChainStatus.WaitingForMoreClicks */) {\n                return false;\n            }\n            if (bufferedClicks.length > 0 &&\n                !areEventsSimilar(bufferedClicks[bufferedClicks.length - 1].event, click.event)) {\n                dontAcceptMoreClick();\n                return false;\n            }\n            appendClick(click);\n            return true;\n        },\n        stop: function () {\n            dontAcceptMoreClick();\n        },\n    };\n}\n/**\n * Checks whether two events are similar by comparing their target, position and timestamp\n */\nfunction areEventsSimilar(first, second) {\n    return (first.target === second.target &&\n        mouseEventDistance(first, second) <= MAX_DISTANCE_BETWEEN_CLICKS &&\n        first.timeStamp - second.timeStamp <= MAX_DURATION_BETWEEN_CLICKS);\n}\nfunction mouseEventDistance(origin, other) {\n    return Math.sqrt(Math.pow(origin.clientX - other.clientX, 2) + Math.pow(origin.clientY - other.clientY, 2));\n}\n//# sourceMappingURL=clickChain.js.map","import { addEventListener } from '@datadog/browser-core';\nexport function listenActionEvents(configuration, _a) {\n    var onPointerDown = _a.onPointerDown, onPointerUp = _a.onPointerUp;\n    var selectionEmptyAtPointerDown;\n    var userActivity = {\n        selection: false,\n        input: false,\n        scroll: false,\n    };\n    var clickContext;\n    var listeners = [\n        addEventListener(configuration, window, \"pointerdown\" /* DOM_EVENT.POINTER_DOWN */, function (event) {\n            if (isValidPointerEvent(event)) {\n                selectionEmptyAtPointerDown = isSelectionEmpty();\n                userActivity = {\n                    selection: false,\n                    input: false,\n                    scroll: false,\n                };\n                clickContext = onPointerDown(event);\n            }\n        }, { capture: true }),\n        addEventListener(configuration, window, \"selectionchange\" /* DOM_EVENT.SELECTION_CHANGE */, function () {\n            if (!selectionEmptyAtPointerDown || !isSelectionEmpty()) {\n                userActivity.selection = true;\n            }\n        }, { capture: true }),\n        addEventListener(configuration, window, \"scroll\" /* DOM_EVENT.SCROLL */, function () {\n            userActivity.scroll = true;\n        }, { capture: true, passive: true }),\n        addEventListener(configuration, window, \"pointerup\" /* DOM_EVENT.POINTER_UP */, function (event) {\n            if (isValidPointerEvent(event) && clickContext) {\n                // Use a scoped variable to make sure the value is not changed by other clicks\n                var localUserActivity_1 = userActivity;\n                onPointerUp(clickContext, event, function () { return localUserActivity_1; });\n                clickContext = undefined;\n            }\n        }, { capture: true }),\n        addEventListener(configuration, window, \"input\" /* DOM_EVENT.INPUT */, function () {\n            userActivity.input = true;\n        }, { capture: true }),\n    ];\n    return {\n        stop: function () {\n            listeners.forEach(function (listener) { return listener.stop(); });\n        },\n    };\n}\nfunction isSelectionEmpty() {\n    var selection = window.getSelection();\n    return !selection || selection.isCollapsed;\n}\nfunction isValidPointerEvent(event) {\n    return (event.target instanceof Element &&\n        // Only consider 'primary' pointer events for now. Multi-touch support could be implemented in\n        // the future.\n        event.isPrimary !== false);\n}\n//# sourceMappingURL=listenActionEvents.js.map","import { ONE_SECOND } from '@datadog/browser-core';\nimport { elementMatches } from '../../browser/polyfills';\nvar MIN_CLICKS_PER_SECOND_TO_CONSIDER_RAGE = 3;\nexport function computeFrustration(clicks, rageClick) {\n    if (isRage(clicks)) {\n        rageClick.addFrustration(\"rage_click\" /* FrustrationType.RAGE_CLICK */);\n        if (clicks.some(isDead)) {\n            rageClick.addFrustration(\"dead_click\" /* FrustrationType.DEAD_CLICK */);\n        }\n        if (rageClick.hasError) {\n            rageClick.addFrustration(\"error_click\" /* FrustrationType.ERROR_CLICK */);\n        }\n        return { isRage: true };\n    }\n    var hasSelectionChanged = clicks.some(function (click) { return click.getUserActivity().selection; });\n    clicks.forEach(function (click) {\n        if (click.hasError) {\n            click.addFrustration(\"error_click\" /* FrustrationType.ERROR_CLICK */);\n        }\n        if (isDead(click) &&\n            // Avoid considering clicks part of a double-click or triple-click selections as dead clicks\n            !hasSelectionChanged) {\n            click.addFrustration(\"dead_click\" /* FrustrationType.DEAD_CLICK */);\n        }\n    });\n    return { isRage: false };\n}\nexport function isRage(clicks) {\n    if (clicks.some(function (click) { return click.getUserActivity().selection || click.getUserActivity().scroll; })) {\n        return false;\n    }\n    for (var i = 0; i < clicks.length - (MIN_CLICKS_PER_SECOND_TO_CONSIDER_RAGE - 1); i += 1) {\n        if (clicks[i + MIN_CLICKS_PER_SECOND_TO_CONSIDER_RAGE - 1].event.timeStamp - clicks[i].event.timeStamp <=\n            ONE_SECOND) {\n            return true;\n        }\n    }\n    return false;\n}\nvar DEAD_CLICK_EXCLUDE_SELECTOR = \n// inputs that don't trigger a meaningful event like \"input\" when clicked, including textual\n// inputs (using a negative selector is shorter here)\n'input:not([type=\"checkbox\"]):not([type=\"radio\"]):not([type=\"button\"]):not([type=\"submit\"]):not([type=\"reset\"]):not([type=\"range\"]),' +\n    'textarea,' +\n    'select,' +\n    // contenteditable and their descendants don't always trigger meaningful changes when manipulated\n    '[contenteditable],' +\n    '[contenteditable] *,' +\n    // canvas, as there is no good way to detect activity occurring on them\n    'canvas,' +\n    // links that are interactive (have an href attribute) or any of their descendants, as they can\n    // open a new tab or navigate to a hash without triggering a meaningful event\n    'a[href],' +\n    'a[href] *';\nexport function isDead(click) {\n    if (click.hasPageActivity || click.getUserActivity().input || click.getUserActivity().scroll) {\n        return false;\n    }\n    return !elementMatches(click.event.target, DEAD_CLICK_EXCLUDE_SELECTOR);\n}\n//# sourceMappingURL=computeFrustration.js.map","import { elapsed, ONE_SECOND, relativeNow } from '@datadog/browser-core';\n// Maximum duration for click actions\nexport var CLICK_ACTION_MAX_DURATION = 10 * ONE_SECOND;\nexport var interactionSelectorCache = new Map();\nexport function getInteractionSelector(relativeTimestamp) {\n    var selector = interactionSelectorCache.get(relativeTimestamp);\n    interactionSelectorCache.delete(relativeTimestamp);\n    return selector;\n}\nexport function updateInteractionSelector(relativeTimestamp, selector) {\n    interactionSelectorCache.set(relativeTimestamp, selector);\n    interactionSelectorCache.forEach(function (_, relativeTimestamp) {\n        if (elapsed(relativeTimestamp, relativeNow()) > CLICK_ACTION_MAX_DURATION) {\n            interactionSelectorCache.delete(relativeTimestamp);\n        }\n    });\n}\n//# sourceMappingURL=interactionSelectorCache.js.map","import { includes, timeStampNow, Observable, assign, getRelativeTime, ONE_MINUTE, generateUUID, clocksNow, elapsed, createValueHistory, } from '@datadog/browser-core';\nimport { trackEventCounts } from '../trackEventCounts';\nimport { PAGE_ACTIVITY_VALIDATION_DELAY, waitPageActivityEnd } from '../waitPageActivityEnd';\nimport { getSelectorFromElement } from '../getSelectorFromElement';\nimport { getNodePrivacyLevel, NodePrivacyLevel } from '../privacy';\nimport { createClickChain } from './clickChain';\nimport { getActionNameFromElement } from './getActionNameFromElement';\nimport { listenActionEvents } from './listenActionEvents';\nimport { computeFrustration } from './computeFrustration';\nimport { CLICK_ACTION_MAX_DURATION, updateInteractionSelector } from './interactionSelectorCache';\nexport var ACTION_CONTEXT_TIME_OUT_DELAY = 5 * ONE_MINUTE; // arbitrary\nexport function trackClickActions(lifeCycle, domMutationObservable, windowOpenObservable, configuration) {\n    var history = createValueHistory({ expireDelay: ACTION_CONTEXT_TIME_OUT_DELAY });\n    var stopObservable = new Observable();\n    var currentClickChain;\n    lifeCycle.subscribe(10 /* LifeCycleEventType.SESSION_RENEWED */, function () {\n        history.reset();\n    });\n    lifeCycle.subscribe(5 /* LifeCycleEventType.VIEW_ENDED */, stopClickChain);\n    var stopActionEventsListener = listenActionEvents(configuration, {\n        onPointerDown: function (pointerDownEvent) {\n            return processPointerDown(configuration, lifeCycle, domMutationObservable, pointerDownEvent, windowOpenObservable);\n        },\n        onPointerUp: function (_a, startEvent, getUserActivity) {\n            var clickActionBase = _a.clickActionBase, hadActivityOnPointerDown = _a.hadActivityOnPointerDown;\n            startClickAction(configuration, lifeCycle, domMutationObservable, windowOpenObservable, history, stopObservable, appendClickToClickChain, clickActionBase, startEvent, getUserActivity, hadActivityOnPointerDown);\n        },\n    }).stop;\n    var actionContexts = {\n        findActionId: function (startTime) { return history.findAll(startTime); },\n    };\n    return {\n        stop: function () {\n            stopClickChain();\n            stopObservable.notify();\n            stopActionEventsListener();\n        },\n        actionContexts: actionContexts,\n    };\n    function appendClickToClickChain(click) {\n        if (!currentClickChain || !currentClickChain.tryAppend(click)) {\n            var rageClick_1 = click.clone();\n            currentClickChain = createClickChain(click, function (clicks) {\n                finalizeClicks(clicks, rageClick_1);\n            });\n        }\n    }\n    function stopClickChain() {\n        if (currentClickChain) {\n            currentClickChain.stop();\n        }\n    }\n}\nfunction processPointerDown(configuration, lifeCycle, domMutationObservable, pointerDownEvent, windowOpenObservable) {\n    var nodePrivacyLevel = configuration.enablePrivacyForActionName\n        ? getNodePrivacyLevel(pointerDownEvent.target, configuration.defaultPrivacyLevel)\n        : NodePrivacyLevel.ALLOW;\n    if (nodePrivacyLevel === NodePrivacyLevel.HIDDEN) {\n        return undefined;\n    }\n    var clickActionBase = computeClickActionBase(pointerDownEvent, nodePrivacyLevel, configuration);\n    var hadActivityOnPointerDown = false;\n    waitPageActivityEnd(lifeCycle, domMutationObservable, windowOpenObservable, configuration, function (pageActivityEndEvent) {\n        hadActivityOnPointerDown = pageActivityEndEvent.hadActivity;\n    }, \n    // We don't care about the activity duration, we just want to know whether an activity did happen\n    // within the \"validation delay\" or not. Limit the duration so the callback is called sooner.\n    PAGE_ACTIVITY_VALIDATION_DELAY);\n    return { clickActionBase: clickActionBase, hadActivityOnPointerDown: function () { return hadActivityOnPointerDown; } };\n}\nfunction startClickAction(configuration, lifeCycle, domMutationObservable, windowOpenObservable, history, stopObservable, appendClickToClickChain, clickActionBase, startEvent, getUserActivity, hadActivityOnPointerDown) {\n    var _a;\n    var click = newClick(lifeCycle, history, getUserActivity, clickActionBase, startEvent);\n    appendClickToClickChain(click);\n    var selector = (_a = clickActionBase === null || clickActionBase === void 0 ? void 0 : clickActionBase.target) === null || _a === void 0 ? void 0 : _a.selector;\n    if (selector) {\n        updateInteractionSelector(startEvent.timeStamp, selector);\n    }\n    var stopWaitPageActivityEnd = waitPageActivityEnd(lifeCycle, domMutationObservable, windowOpenObservable, configuration, function (pageActivityEndEvent) {\n        if (pageActivityEndEvent.hadActivity && pageActivityEndEvent.end < click.startClocks.timeStamp) {\n            // If the clock is looking weird, just discard the click\n            click.discard();\n        }\n        else {\n            if (pageActivityEndEvent.hadActivity) {\n                click.stop(pageActivityEndEvent.end);\n            }\n            else if (hadActivityOnPointerDown()) {\n                click.stop(\n                // using the click start as activity end, so the click will have some activity but its\n                // duration will be 0 (as the activity started before the click start)\n                click.startClocks.timeStamp);\n            }\n            else {\n                click.stop();\n            }\n        }\n    }, CLICK_ACTION_MAX_DURATION).stop;\n    var viewEndedSubscription = lifeCycle.subscribe(5 /* LifeCycleEventType.VIEW_ENDED */, function (_a) {\n        var endClocks = _a.endClocks;\n        click.stop(endClocks.timeStamp);\n    });\n    var stopSubscription = stopObservable.subscribe(function () {\n        click.stop();\n    });\n    click.stopObservable.subscribe(function () {\n        viewEndedSubscription.unsubscribe();\n        stopWaitPageActivityEnd();\n        stopSubscription.unsubscribe();\n    });\n}\nfunction computeClickActionBase(event, nodePrivacyLevel, configuration) {\n    var rect = event.target.getBoundingClientRect();\n    var selector = getSelectorFromElement(event.target, configuration.actionNameAttribute);\n    if (selector) {\n        updateInteractionSelector(event.timeStamp, selector);\n    }\n    var actionName = getActionNameFromElement(event.target, configuration, nodePrivacyLevel);\n    return {\n        type: \"click\" /* ActionType.CLICK */,\n        target: {\n            width: Math.round(rect.width),\n            height: Math.round(rect.height),\n            selector: selector,\n        },\n        position: {\n            // Use clientX and Y because for SVG element offsetX and Y are relatives to the <svg> element\n            x: Math.round(event.clientX - rect.left),\n            y: Math.round(event.clientY - rect.top),\n        },\n        name: actionName.name,\n        nameSource: actionName.nameSource,\n    };\n}\nfunction newClick(lifeCycle, history, getUserActivity, clickActionBase, startEvent) {\n    var id = generateUUID();\n    var startClocks = clocksNow();\n    var historyEntry = history.add(id, startClocks.relative);\n    var eventCountsSubscription = trackEventCounts({\n        lifeCycle: lifeCycle,\n        isChildEvent: function (event) {\n            return event.action !== undefined &&\n                (Array.isArray(event.action.id) ? includes(event.action.id, id) : event.action.id === id);\n        },\n    });\n    var status = 0 /* ClickStatus.ONGOING */;\n    var activityEndTime;\n    var frustrationTypes = [];\n    var stopObservable = new Observable();\n    function stop(newActivityEndTime) {\n        if (status !== 0 /* ClickStatus.ONGOING */) {\n            return;\n        }\n        activityEndTime = newActivityEndTime;\n        status = 1 /* ClickStatus.STOPPED */;\n        if (activityEndTime) {\n            historyEntry.close(getRelativeTime(activityEndTime));\n        }\n        else {\n            historyEntry.remove();\n        }\n        eventCountsSubscription.stop();\n        stopObservable.notify();\n    }\n    return {\n        event: startEvent,\n        stop: stop,\n        stopObservable: stopObservable,\n        get hasError() {\n            return eventCountsSubscription.eventCounts.errorCount > 0;\n        },\n        get hasPageActivity() {\n            return activityEndTime !== undefined;\n        },\n        getUserActivity: getUserActivity,\n        addFrustration: function (frustrationType) {\n            frustrationTypes.push(frustrationType);\n        },\n        startClocks: startClocks,\n        isStopped: function () { return status === 1 /* ClickStatus.STOPPED */ || status === 2 /* ClickStatus.FINALIZED */; },\n        clone: function () { return newClick(lifeCycle, history, getUserActivity, clickActionBase, startEvent); },\n        validate: function (domEvents) {\n            stop();\n            if (status !== 1 /* ClickStatus.STOPPED */) {\n                return;\n            }\n            var _a = eventCountsSubscription.eventCounts, resourceCount = _a.resourceCount, errorCount = _a.errorCount, longTaskCount = _a.longTaskCount;\n            var clickAction = assign({\n                type: \"click\" /* ActionType.CLICK */,\n                duration: activityEndTime && elapsed(startClocks.timeStamp, activityEndTime),\n                startClocks: startClocks,\n                id: id,\n                frustrationTypes: frustrationTypes,\n                counts: {\n                    resourceCount: resourceCount,\n                    errorCount: errorCount,\n                    longTaskCount: longTaskCount,\n                },\n                events: domEvents !== null && domEvents !== void 0 ? domEvents : [startEvent],\n                event: startEvent,\n            }, clickActionBase);\n            lifeCycle.notify(0 /* LifeCycleEventType.AUTO_ACTION_COMPLETED */, clickAction);\n            status = 2 /* ClickStatus.FINALIZED */;\n        },\n        discard: function () {\n            stop();\n            status = 2 /* ClickStatus.FINALIZED */;\n        },\n    };\n}\nexport function finalizeClicks(clicks, rageClick) {\n    var isRage = computeFrustration(clicks, rageClick).isRage;\n    if (isRage) {\n        clicks.forEach(function (click) { return click.discard(); });\n        rageClick.stop(timeStampNow());\n        rageClick.validate(clicks.map(function (click) { return click.event; }));\n    }\n    else {\n        rageClick.discard();\n        clicks.forEach(function (click) { return click.validate(); });\n    }\n}\n//# sourceMappingURL=trackClickActions.js.map","import { noop, assign, combine, toServerDuration, generateUUID, ExperimentalFeature, isExperimentalFeatureEnabled, } from '@datadog/browser-core';\nimport { discardNegativeDuration } from '../discardNegativeDuration';\nimport { trackClickActions } from './trackClickActions';\nexport function startActionCollection(lifeCycle, domMutationObservable, windowOpenObservable, configuration, pageStateHistory) {\n    var _a;\n    lifeCycle.subscribe(0 /* LifeCycleEventType.AUTO_ACTION_COMPLETED */, function (action) {\n        return lifeCycle.notify(12 /* LifeCycleEventType.RAW_RUM_EVENT_COLLECTED */, processAction(action, pageStateHistory));\n    });\n    var actionContexts = { findActionId: noop };\n    var stop = noop;\n    if (configuration.trackUserInteractions) {\n        ;\n        (_a = trackClickActions(lifeCycle, domMutationObservable, windowOpenObservable, configuration), actionContexts = _a.actionContexts, stop = _a.stop);\n    }\n    return {\n        addAction: function (action, savedCommonContext) {\n            lifeCycle.notify(12 /* LifeCycleEventType.RAW_RUM_EVENT_COLLECTED */, assign({\n                savedCommonContext: savedCommonContext,\n            }, processAction(action, pageStateHistory)));\n        },\n        actionContexts: actionContexts,\n        stop: stop,\n    };\n}\nfunction processAction(action, pageStateHistory) {\n    var autoActionProperties = isAutoAction(action)\n        ? {\n            action: {\n                id: action.id,\n                loading_time: discardNegativeDuration(toServerDuration(action.duration)),\n                frustration: {\n                    type: action.frustrationTypes,\n                },\n                error: {\n                    count: action.counts.errorCount,\n                },\n                long_task: {\n                    count: action.counts.longTaskCount,\n                },\n                resource: {\n                    count: action.counts.resourceCount,\n                },\n            },\n            _dd: {\n                action: {\n                    target: action.target,\n                    position: action.position,\n                    name_source: isExperimentalFeatureEnabled(ExperimentalFeature.ACTION_NAME_MASKING)\n                        ? action.nameSource\n                        : undefined,\n                },\n            },\n        }\n        : undefined;\n    var customerContext = !isAutoAction(action) ? action.context : undefined;\n    var actionEvent = combine({\n        action: {\n            id: generateUUID(),\n            target: {\n                name: action.name,\n            },\n            type: action.type,\n        },\n        date: action.startClocks.timeStamp,\n        type: \"action\" /* RumEventType.ACTION */,\n        view: { in_foreground: pageStateHistory.wasInPageStateAt(\"active\" /* PageState.ACTIVE */, action.startClocks.relative) },\n    }, autoActionProperties);\n    var domainContext = isAutoAction(action) ? { events: action.events } : {};\n    if (!isAutoAction(action) && action.handlingStack) {\n        domainContext.handlingStack = action.handlingStack;\n    }\n    return {\n        customerContext: customerContext,\n        rawRumEvent: actionEvent,\n        startTime: action.startClocks.relative,\n        domainContext: domainContext,\n    };\n}\nfunction isAutoAction(action) {\n    return action.type !== \"custom\" /* ActionType.CUSTOM */;\n}\n//# sourceMappingURL=actionCollection.js.map","import { instrumentMethod } from '../../tools/instrumentMethod';\nimport { clocksNow } from '../../tools/utils/timeUtils';\nimport { computeStackTrace, computeStackTraceFromOnErrorMessage } from '../../tools/stackTrace/computeStackTrace';\nimport { computeRawError, isError } from './error';\nimport { ErrorSource } from './error.types';\nexport function trackRuntimeError(errorObservable) {\n    var handleRuntimeError = function (stackTrace, originalError) {\n        var rawError = computeRawError({\n            stackTrace: stackTrace,\n            originalError: originalError,\n            startClocks: clocksNow(),\n            nonErrorPrefix: \"Uncaught\" /* NonErrorPrefix.UNCAUGHT */,\n            source: ErrorSource.SOURCE,\n            handling: \"unhandled\" /* ErrorHandling.UNHANDLED */,\n        });\n        errorObservable.notify(rawError);\n    };\n    var stopInstrumentingOnError = instrumentOnError(handleRuntimeError).stop;\n    var stopInstrumentingOnUnhandledRejection = instrumentUnhandledRejection(handleRuntimeError).stop;\n    return {\n        stop: function () {\n            stopInstrumentingOnError();\n            stopInstrumentingOnUnhandledRejection();\n        },\n    };\n}\nexport function instrumentOnError(callback) {\n    return instrumentMethod(window, 'onerror', function (_a) {\n        var _b = _a.parameters, messageObj = _b[0], url = _b[1], line = _b[2], column = _b[3], errorObj = _b[4];\n        var stackTrace;\n        if (isError(errorObj)) {\n            stackTrace = computeStackTrace(errorObj);\n        }\n        else {\n            stackTrace = computeStackTraceFromOnErrorMessage(messageObj, url, line, column);\n        }\n        callback(stackTrace, errorObj !== null && errorObj !== void 0 ? errorObj : messageObj);\n    });\n}\nexport function instrumentUnhandledRejection(callback) {\n    return instrumentMethod(window, 'onunhandledrejection', function (_a) {\n        var e = _a.parameters[0];\n        var reason = e.reason || 'Empty reason';\n        var stack = computeStackTrace(reason);\n        callback(stack, reason);\n    });\n}\n//# sourceMappingURL=trackRuntimeError.js.map","import { flattenErrorCauses, isError, tryToGetFingerprint } from '../error/error';\nimport { mergeObservables, Observable } from '../../tools/observable';\nimport { ConsoleApiName, globalConsole } from '../../tools/display';\nimport { callMonitored } from '../../tools/monitor';\nimport { sanitize } from '../../tools/serialisation/sanitize';\nimport { find } from '../../tools/utils/polyfills';\nimport { jsonStringify } from '../../tools/serialisation/jsonStringify';\nimport { ErrorSource } from '../error/error.types';\nimport { computeStackTrace } from '../../tools/stackTrace/computeStackTrace';\nimport { createHandlingStack, toStackTraceString, formatErrorMessage } from '../../tools/stackTrace/handlingStack';\nimport { clocksNow } from '../../tools/utils/timeUtils';\nvar consoleObservablesByApi = {};\nexport function initConsoleObservable(apis) {\n    var consoleObservables = apis.map(function (api) {\n        if (!consoleObservablesByApi[api]) {\n            consoleObservablesByApi[api] = createConsoleObservable(api); // we are sure that the observable created for this api will yield the expected ConsoleLog type\n        }\n        return consoleObservablesByApi[api];\n    });\n    return mergeObservables.apply(void 0, consoleObservables);\n}\nexport function resetConsoleObservable() {\n    consoleObservablesByApi = {};\n}\nfunction createConsoleObservable(api) {\n    return new Observable(function (observable) {\n        var originalConsoleApi = globalConsole[api];\n        globalConsole[api] = function () {\n            var params = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                params[_i] = arguments[_i];\n            }\n            originalConsoleApi.apply(console, params);\n            var handlingStack = createHandlingStack();\n            callMonitored(function () {\n                observable.notify(buildConsoleLog(params, api, handlingStack));\n            });\n        };\n        return function () {\n            globalConsole[api] = originalConsoleApi;\n        };\n    });\n}\nfunction buildConsoleLog(params, api, handlingStack) {\n    var message = params.map(function (param) { return formatConsoleParameters(param); }).join(' ');\n    var error;\n    if (api === ConsoleApiName.error) {\n        var firstErrorParam = find(params, isError);\n        error = {\n            stack: firstErrorParam ? toStackTraceString(computeStackTrace(firstErrorParam)) : undefined,\n            fingerprint: tryToGetFingerprint(firstErrorParam),\n            causes: firstErrorParam ? flattenErrorCauses(firstErrorParam, 'console') : undefined,\n            startClocks: clocksNow(),\n            message: message,\n            source: ErrorSource.CONSOLE,\n            handling: \"handled\" /* ErrorHandling.HANDLED */,\n            handlingStack: handlingStack,\n        };\n    }\n    return {\n        api: api,\n        message: message,\n        error: error,\n        handlingStack: handlingStack,\n    };\n}\nfunction formatConsoleParameters(param) {\n    if (typeof param === 'string') {\n        return sanitize(param);\n    }\n    if (isError(param)) {\n        return formatErrorMessage(computeStackTrace(param));\n    }\n    return jsonStringify(sanitize(param), undefined, 2);\n}\n//# sourceMappingURL=consoleObservable.js.map","import { toStackTraceString } from '../../tools/stackTrace/handlingStack';\nimport { monitor } from '../../tools/monitor';\nimport { mergeObservables, Observable } from '../../tools/observable';\nimport { addEventListener } from '../../browser/addEventListener';\nimport { assign, includes } from '../../tools/utils/polyfills';\nimport { safeTruncate } from '../../tools/utils/stringUtils';\nimport { ErrorSource } from '../error/error.types';\nimport { clocksNow } from '../../tools/utils/timeUtils';\nexport var RawReportType = {\n    intervention: 'intervention',\n    deprecation: 'deprecation',\n    cspViolation: 'csp_violation',\n};\nexport function initReportObservable(configuration, apis) {\n    var observables = [];\n    if (includes(apis, RawReportType.cspViolation)) {\n        observables.push(createCspViolationReportObservable(configuration));\n    }\n    var reportTypes = apis.filter(function (api) { return api !== RawReportType.cspViolation; });\n    if (reportTypes.length) {\n        observables.push(createReportObservable(reportTypes));\n    }\n    return mergeObservables.apply(void 0, observables);\n}\nfunction createReportObservable(reportTypes) {\n    return new Observable(function (observable) {\n        if (!window.ReportingObserver) {\n            return;\n        }\n        var handleReports = monitor(function (reports, _) {\n            return reports.forEach(function (report) { return observable.notify(buildRawReportErrorFromReport(report)); });\n        });\n        var observer = new window.ReportingObserver(handleReports, {\n            types: reportTypes,\n            buffered: true,\n        });\n        observer.observe();\n        return function () {\n            observer.disconnect();\n        };\n    });\n}\nfunction createCspViolationReportObservable(configuration) {\n    return new Observable(function (observable) {\n        var stop = addEventListener(configuration, document, \"securitypolicyviolation\" /* DOM_EVENT.SECURITY_POLICY_VIOLATION */, function (event) {\n            observable.notify(buildRawReportErrorFromCspViolation(event));\n        }).stop;\n        return stop;\n    });\n}\nfunction buildRawReportErrorFromReport(report) {\n    var type = report.type, body = report.body;\n    return buildRawReportError({\n        type: body.id,\n        message: \"\".concat(type, \": \").concat(body.message),\n        originalError: report,\n        stack: buildStack(body.id, body.message, body.sourceFile, body.lineNumber, body.columnNumber),\n    });\n}\nfunction buildRawReportErrorFromCspViolation(event) {\n    var message = \"'\".concat(event.blockedURI, \"' blocked by '\").concat(event.effectiveDirective, \"' directive\");\n    return buildRawReportError({\n        type: event.effectiveDirective,\n        message: \"\".concat(RawReportType.cspViolation, \": \").concat(message),\n        originalError: event,\n        csp: {\n            disposition: event.disposition,\n        },\n        stack: buildStack(event.effectiveDirective, event.originalPolicy\n            ? \"\".concat(message, \" of the policy \\\"\").concat(safeTruncate(event.originalPolicy, 100, '...'), \"\\\"\")\n            : 'no policy', event.sourceFile, event.lineNumber, event.columnNumber),\n    });\n}\nfunction buildRawReportError(partial) {\n    return assign({\n        startClocks: clocksNow(),\n        source: ErrorSource.REPORT,\n        handling: \"unhandled\" /* ErrorHandling.UNHANDLED */,\n    }, partial);\n}\nfunction buildStack(name, message, sourceFile, lineNumber, columnNumber) {\n    return sourceFile\n        ? toStackTraceString({\n            name: name,\n            message: message,\n            stack: [\n                {\n                    func: '?',\n                    url: sourceFile,\n                    line: lineNumber !== null && lineNumber !== void 0 ? lineNumber : undefined,\n                    column: columnNumber !== null && columnNumber !== void 0 ? columnNumber : undefined,\n                },\n            ],\n        })\n        : undefined;\n}\n//# sourceMappingURL=reportObservable.js.map","import { isEmptyObject, assign, ErrorSource, generateUUID, computeRawError, computeStackTrace, Observable, trackRuntimeError, isError, } from '@datadog/browser-core';\nimport { trackConsoleError } from './trackConsoleError';\nimport { trackReportError } from './trackReportError';\nexport function startErrorCollection(lifeCycle, configuration, pageStateHistory, featureFlagContexts) {\n    var errorObservable = new Observable();\n    trackConsoleError(errorObservable);\n    trackRuntimeError(errorObservable);\n    trackReportError(configuration, errorObservable);\n    errorObservable.subscribe(function (error) { return lifeCycle.notify(14 /* LifeCycleEventType.RAW_ERROR_COLLECTED */, { error: error }); });\n    return doStartErrorCollection(lifeCycle, pageStateHistory, featureFlagContexts);\n}\nexport function doStartErrorCollection(lifeCycle, pageStateHistory, featureFlagContexts) {\n    lifeCycle.subscribe(14 /* LifeCycleEventType.RAW_ERROR_COLLECTED */, function (_a) {\n        var error = _a.error, customerContext = _a.customerContext, savedCommonContext = _a.savedCommonContext;\n        lifeCycle.notify(12 /* LifeCycleEventType.RAW_RUM_EVENT_COLLECTED */, assign({\n            customerContext: customerContext,\n            savedCommonContext: savedCommonContext,\n        }, processError(error, pageStateHistory, featureFlagContexts)));\n    });\n    return {\n        addError: function (_a, savedCommonContext) {\n            var error = _a.error, handlingStack = _a.handlingStack, startClocks = _a.startClocks, customerContext = _a.context;\n            var stackTrace = isError(error) ? computeStackTrace(error) : undefined;\n            var rawError = computeRawError({\n                stackTrace: stackTrace,\n                originalError: error,\n                handlingStack: handlingStack,\n                startClocks: startClocks,\n                nonErrorPrefix: \"Provided\" /* NonErrorPrefix.PROVIDED */,\n                source: ErrorSource.CUSTOM,\n                handling: \"handled\" /* ErrorHandling.HANDLED */,\n            });\n            lifeCycle.notify(14 /* LifeCycleEventType.RAW_ERROR_COLLECTED */, {\n                customerContext: customerContext,\n                savedCommonContext: savedCommonContext,\n                error: rawError,\n            });\n        },\n    };\n}\nfunction processError(error, pageStateHistory, featureFlagContexts) {\n    var rawRumEvent = {\n        date: error.startClocks.timeStamp,\n        error: {\n            id: generateUUID(),\n            message: error.message,\n            source: error.source,\n            stack: error.stack,\n            handling_stack: error.handlingStack,\n            type: error.type,\n            handling: error.handling,\n            causes: error.causes,\n            source_type: 'browser',\n            fingerprint: error.fingerprint,\n            csp: error.csp,\n        },\n        type: \"error\" /* RumEventType.ERROR */,\n        view: { in_foreground: pageStateHistory.wasInPageStateAt(\"active\" /* PageState.ACTIVE */, error.startClocks.relative) },\n    };\n    var featureFlagContext = featureFlagContexts.findFeatureFlagEvaluations(error.startClocks.relative);\n    if (featureFlagContext && !isEmptyObject(featureFlagContext)) {\n        rawRumEvent.feature_flags = featureFlagContext;\n    }\n    var domainContext = {\n        error: error.originalError,\n        handlingStack: error.handlingStack,\n    };\n    return {\n        rawRumEvent: rawRumEvent,\n        startTime: error.startClocks.relative,\n        domainContext: domainContext,\n    };\n}\n//# sourceMappingURL=errorCollection.js.map","import { initConsoleObservable, ConsoleApiName } from '@datadog/browser-core';\nexport function trackConsoleError(errorObservable) {\n    var subscription = initConsoleObservable([ConsoleApiName.error]).subscribe(function (consoleLog) {\n        return errorObservable.notify(consoleLog.error);\n    });\n    return {\n        stop: function () {\n            subscription.unsubscribe();\n        },\n    };\n}\n//# sourceMappingURL=trackConsoleError.js.map","import { initReportObservable, RawReportType } from '@datadog/browser-core';\nexport function trackReportError(configuration, errorObservable) {\n    var subscription = initReportObservable(configuration, [\n        RawReportType.cspViolation,\n        RawReportType.intervention,\n    ]).subscribe(function (rawError) { return errorObservable.notify(rawError); });\n    return {\n        stop: function () {\n            subscription.unsubscribe();\n        },\n    };\n}\n//# sourceMappingURL=trackReportError.js.map","import { setTimeout, clearTimeout } from './timer';\nimport { monitor } from './monitor';\nimport { dateNow } from './utils/timeUtils';\n/**\n * 'requestIdleCallback' with a shim.\n */\nexport function requestIdleCallback(callback, opts) {\n    // Note: check both 'requestIdleCallback' and 'cancelIdleCallback' existence because some polyfills only implement 'requestIdleCallback'.\n    if (window.requestIdleCallback && window.cancelIdleCallback) {\n        var id_1 = window.requestIdleCallback(monitor(callback), opts);\n        return function () { return window.cancelIdleCallback(id_1); };\n    }\n    return requestIdleCallbackShim(callback);\n}\nexport var MAX_TASK_TIME = 50;\n/*\n * Shim from https://developer.chrome.com/blog/using-requestidlecallback#checking_for_requestidlecallback\n * Note: there is no simple way to support the \"timeout\" option, so we ignore it.\n */\nexport function requestIdleCallbackShim(callback) {\n    var start = dateNow();\n    var timeoutId = setTimeout(function () {\n        callback({\n            didTimeout: false,\n            timeRemaining: function () { return Math.max(0, MAX_TASK_TIME - (dateNow() - start)); },\n        });\n    }, 0);\n    return function () { return clearTimeout(timeoutId); };\n}\n//# sourceMappingURL=requestIdleCallback.js.map","import { ONE_SECOND } from './utils/timeUtils';\nimport { requestIdleCallback } from './requestIdleCallback';\n/**\n * Maximum delay before starting to execute tasks in the queue. We don't want to wait too long\n * before running tasks, as it might hurt reliability (ex: if the user navigates away, we might lose\n * the opportunity to send some data). We also don't want to run tasks too often, as it might hurt\n * performance.\n */\nvar IDLE_CALLBACK_TIMEOUT = ONE_SECOND;\n/**\n * Maximum amount of time allocated to running tasks when a timeout (`IDLE_CALLBACK_TIMEOUT`) is\n * reached. We should not run tasks for too long as it will hurt performance, but we should still\n * run some tasks to avoid postponing them forever.\n *\n * Rational: Running tasks for 30ms every second (IDLE_CALLBACK_TIMEOUT) should be acceptable.\n */\nexport var MAX_EXECUTION_TIME_ON_TIMEOUT = 30;\nexport function createTaskQueue() {\n    var pendingTasks = [];\n    function run(deadline) {\n        var executionTimeRemaining;\n        if (deadline.didTimeout) {\n            var start_1 = performance.now();\n            executionTimeRemaining = function () { return MAX_EXECUTION_TIME_ON_TIMEOUT - (performance.now() - start_1); };\n        }\n        else {\n            executionTimeRemaining = deadline.timeRemaining.bind(deadline);\n        }\n        while (executionTimeRemaining() > 0 && pendingTasks.length) {\n            pendingTasks.shift()();\n        }\n        if (pendingTasks.length) {\n            scheduleNextRun();\n        }\n    }\n    function scheduleNextRun() {\n        requestIdleCallback(run, { timeout: IDLE_CALLBACK_TIMEOUT });\n    }\n    return {\n        push: function (task) {\n            if (pendingTasks.push(task) === 1) {\n                scheduleNextRun();\n            }\n        },\n    };\n}\n//# sourceMappingURL=taskQueue.js.map","import { addDuration } from '@datadog/browser-core';\nimport { WeakSet } from '../../browser/polyfills';\nimport { hasValidResourceEntryDuration, hasValidResourceEntryTimings } from './resourceUtils';\nvar alreadyMatchedEntries = new WeakSet();\n/**\n * Look for corresponding timing in resource timing buffer\n *\n * Observations:\n * - Timing (start, end) are nested inside the request (start, end)\n * - Some timing can be not exactly nested, being off by < 1 ms\n *\n * Strategy:\n * - from valid nested entries (with 1 ms error margin)\n * - filter out timing that were already matched to a request\n * - then, if a single timing match, return the timing\n * - otherwise we can't decide, return undefined\n */\nexport function matchRequestResourceEntry(request) {\n    if (!performance || !('getEntriesByName' in performance)) {\n        return;\n    }\n    var sameNameEntries = performance.getEntriesByName(request.url, 'resource');\n    if (!sameNameEntries.length || !('toJSON' in sameNameEntries[0])) {\n        return;\n    }\n    var candidates = sameNameEntries\n        .filter(function (entry) { return !alreadyMatchedEntries.has(entry); })\n        .filter(function (entry) { return hasValidResourceEntryDuration(entry) && hasValidResourceEntryTimings(entry); })\n        .filter(function (entry) {\n        return isBetween(entry, request.startClocks.relative, endTime({ startTime: request.startClocks.relative, duration: request.duration }));\n    });\n    if (candidates.length === 1) {\n        alreadyMatchedEntries.add(candidates[0]);\n        return candidates[0].toJSON();\n    }\n    return;\n}\nfunction endTime(timing) {\n    return addDuration(timing.startTime, timing.duration);\n}\nfunction isBetween(timing, start, end) {\n    var errorMargin = 1;\n    return timing.startTime >= start - errorMargin && endTime(timing) <= addDuration(end, errorMargin);\n}\n//# sourceMappingURL=matchRequestResourceEntry.js.map","import { noop } from '../tools/utils/functionUtils';\nimport { addEventListener } from './addEventListener';\nexport function runOnReadyState(configuration, expectedReadyState, callback) {\n    if (document.readyState === expectedReadyState || document.readyState === 'complete') {\n        callback();\n        return { stop: noop };\n    }\n    var eventName = expectedReadyState === 'complete' ? \"load\" /* DOM_EVENT.LOAD */ : \"DOMContentLoaded\" /* DOM_EVENT.DOM_CONTENT_LOADED */;\n    return addEventListener(configuration, window, eventName, callback, { once: true });\n}\n//# sourceMappingURL=runOnReadyState.js.map","import { dateNow, findCommaSeparatedValue, ONE_MINUTE } from '@datadog/browser-core';\nimport { isCommentNode, isTextNode } from '../../browser/htmlDomUtils';\nexport var INITIAL_DOCUMENT_OUTDATED_TRACE_ID_THRESHOLD = 2 * ONE_MINUTE;\nexport function getDocumentTraceId(document) {\n    var data = getDocumentTraceDataFromMeta(document) || getDocumentTraceDataFromComment(document);\n    if (!data || data.traceTime <= dateNow() - INITIAL_DOCUMENT_OUTDATED_TRACE_ID_THRESHOLD) {\n        return undefined;\n    }\n    return data.traceId;\n}\nexport function getDocumentTraceDataFromMeta(document) {\n    var traceIdMeta = document.querySelector('meta[name=dd-trace-id]');\n    var traceTimeMeta = document.querySelector('meta[name=dd-trace-time]');\n    return createDocumentTraceData(traceIdMeta && traceIdMeta.content, traceTimeMeta && traceTimeMeta.content);\n}\nexport function getDocumentTraceDataFromComment(document) {\n    var comment = findTraceComment(document);\n    if (!comment) {\n        return undefined;\n    }\n    return createDocumentTraceData(findCommaSeparatedValue(comment, 'trace-id'), findCommaSeparatedValue(comment, 'trace-time'));\n}\nexport function createDocumentTraceData(traceId, rawTraceTime) {\n    var traceTime = rawTraceTime && Number(rawTraceTime);\n    if (!traceId || !traceTime) {\n        return undefined;\n    }\n    return {\n        traceId: traceId,\n        traceTime: traceTime,\n    };\n}\nexport function findTraceComment(document) {\n    // 1. Try to find the comment as a direct child of the document\n    // Note: TSLint advises to use a 'for of', but TS doesn't allow to use 'for of' if the iterated\n    // value is not an array or string (here, a NodeList).\n    for (var i = 0; i < document.childNodes.length; i += 1) {\n        var comment = getTraceCommentFromNode(document.childNodes[i]);\n        if (comment) {\n            return comment;\n        }\n    }\n    // 2. If the comment is placed after the </html> tag, but have some space or new lines before or\n    // after, the DOM parser will lift it (and the surrounding text) at the end of the <body> tag.\n    // Try to look for the comment at the end of the <body> by by iterating over its child nodes in\n    // reverse order, stopping if we come across a non-text node.\n    if (document.body) {\n        for (var i = document.body.childNodes.length - 1; i >= 0; i -= 1) {\n            var node = document.body.childNodes[i];\n            var comment = getTraceCommentFromNode(node);\n            if (comment) {\n                return comment;\n            }\n            if (!isTextNode(node)) {\n                break;\n            }\n        }\n    }\n}\nfunction getTraceCommentFromNode(node) {\n    if (node && isCommentNode(node)) {\n        var match = /^\\s*DATADOG;(.*?)\\s*$/.exec(node.data);\n        if (match) {\n            return match[1];\n        }\n    }\n}\n//# sourceMappingURL=getDocumentTraceId.js.map","import { assign, getRelativeTime, isNumber } from '@datadog/browser-core';\nimport { RumPerformanceEntryType, supportPerformanceTimingEvent, } from './performanceObservable';\nexport function getNavigationEntry() {\n    if (supportPerformanceTimingEvent(RumPerformanceEntryType.NAVIGATION)) {\n        var navigationEntry = performance.getEntriesByType(RumPerformanceEntryType.NAVIGATION)[0];\n        if (navigationEntry) {\n            return navigationEntry;\n        }\n    }\n    var timings = computeTimingsFromDeprecatedPerformanceTiming();\n    var entry = assign({\n        entryType: RumPerformanceEntryType.NAVIGATION,\n        initiatorType: 'navigation',\n        name: window.location.href,\n        startTime: 0,\n        duration: timings.responseEnd,\n        decodedBodySize: 0,\n        encodedBodySize: 0,\n        transferSize: 0,\n        workerStart: 0,\n        toJSON: function () { return assign({}, entry, { toJSON: undefined }); },\n    }, timings);\n    return entry;\n}\nexport function computeTimingsFromDeprecatedPerformanceTiming() {\n    var result = {};\n    var timing = performance.timing;\n    for (var key in timing) {\n        if (isNumber(timing[key])) {\n            var numberKey = key;\n            var timingElement = timing[numberKey];\n            result[numberKey] = timingElement === 0 ? 0 : getRelativeTime(timingElement);\n        }\n    }\n    return result;\n}\n//# sourceMappingURL=performanceUtils.js.map","import { assign, runOnReadyState } from '@datadog/browser-core';\nimport { RumPerformanceEntryType } from '../../browser/performanceObservable';\nimport { getDocumentTraceId } from '../tracing/getDocumentTraceId';\nimport { getNavigationEntry } from '../../browser/performanceUtils';\nimport { FAKE_INITIAL_DOCUMENT } from './resourceUtils';\nexport function retrieveInitialDocumentResourceTiming(configuration, callback) {\n    runOnReadyState(configuration, 'interactive', function () {\n        var entry = assign(getNavigationEntry().toJSON(), {\n            entryType: RumPerformanceEntryType.RESOURCE,\n            initiatorType: FAKE_INITIAL_DOCUMENT,\n            traceId: getDocumentTraceId(document),\n            toJSON: function () { return assign({}, entry, { toJSON: undefined }); },\n        });\n        callback(entry);\n    });\n}\n//# sourceMappingURL=retrieveInitialDocumentResourceTiming.js.map","import { combine, generateUUID, toServerDuration, relativeToClocks, assign, createTaskQueue, } from '@datadog/browser-core';\nimport { RumPerformanceEntryType, createPerformanceObservable, } from '../../browser/performanceObservable';\nimport { createSpanIdentifier } from '../tracing/identifier';\nimport { matchRequestResourceEntry } from './matchRequestResourceEntry';\nimport { computeResourceEntryDetails, computeResourceEntryDuration, computeResourceEntryType, computeResourceEntrySize, computeResourceEntryProtocol, computeResourceEntryDeliveryType, isResourceEntryRequestType, isLongDataUrl, sanitizeDataUrl, } from './resourceUtils';\nimport { retrieveInitialDocumentResourceTiming } from './retrieveInitialDocumentResourceTiming';\nexport function startResourceCollection(lifeCycle, configuration, pageStateHistory, taskQueue, retrieveInitialDocumentResourceTimingImpl) {\n    if (taskQueue === void 0) { taskQueue = createTaskQueue(); }\n    if (retrieveInitialDocumentResourceTimingImpl === void 0) { retrieveInitialDocumentResourceTimingImpl = retrieveInitialDocumentResourceTiming; }\n    lifeCycle.subscribe(8 /* LifeCycleEventType.REQUEST_COMPLETED */, function (request) {\n        handleResource(function () { return processRequest(request, configuration, pageStateHistory); });\n    });\n    var performanceResourceSubscription = createPerformanceObservable(configuration, {\n        type: RumPerformanceEntryType.RESOURCE,\n        buffered: true,\n    }).subscribe(function (entries) {\n        var _loop_1 = function (entry) {\n            if (!isResourceEntryRequestType(entry)) {\n                handleResource(function () { return processResourceEntry(entry, configuration); });\n            }\n        };\n        for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {\n            var entry = entries_1[_i];\n            _loop_1(entry);\n        }\n    });\n    retrieveInitialDocumentResourceTimingImpl(configuration, function (timing) {\n        handleResource(function () { return processResourceEntry(timing, configuration); });\n    });\n    function handleResource(computeRawEvent) {\n        taskQueue.push(function () {\n            var rawEvent = computeRawEvent();\n            if (rawEvent) {\n                lifeCycle.notify(12 /* LifeCycleEventType.RAW_RUM_EVENT_COLLECTED */, rawEvent);\n            }\n        });\n    }\n    return {\n        stop: function () {\n            performanceResourceSubscription.unsubscribe();\n        },\n    };\n}\nfunction processRequest(request, configuration, pageStateHistory) {\n    var matchingTiming = matchRequestResourceEntry(request);\n    var startClocks = matchingTiming ? relativeToClocks(matchingTiming.startTime) : request.startClocks;\n    var tracingInfo = computeRequestTracingInfo(request, configuration);\n    if (!configuration.trackResources && !tracingInfo) {\n        return;\n    }\n    var type = request.type === \"xhr\" /* RequestType.XHR */ ? \"xhr\" /* ResourceType.XHR */ : \"fetch\" /* ResourceType.FETCH */;\n    var correspondingTimingOverrides = matchingTiming ? computeResourceEntryMetrics(matchingTiming) : undefined;\n    var duration = computeRequestDuration(pageStateHistory, startClocks, request.duration);\n    var resourceEvent = combine({\n        date: startClocks.timeStamp,\n        resource: {\n            id: generateUUID(),\n            type: type,\n            duration: duration,\n            method: request.method,\n            status_code: request.status,\n            protocol: matchingTiming && computeResourceEntryProtocol(matchingTiming),\n            url: isLongDataUrl(request.url) ? sanitizeDataUrl(request.url) : request.url,\n            delivery_type: matchingTiming && computeResourceEntryDeliveryType(matchingTiming),\n        },\n        type: \"resource\" /* RumEventType.RESOURCE */,\n        _dd: {\n            discarded: !configuration.trackResources,\n        },\n    }, tracingInfo, correspondingTimingOverrides);\n    return {\n        startTime: startClocks.relative,\n        rawRumEvent: resourceEvent,\n        domainContext: {\n            performanceEntry: matchingTiming,\n            xhr: request.xhr,\n            response: request.response,\n            requestInput: request.input,\n            requestInit: request.init,\n            error: request.error,\n            isAborted: request.isAborted,\n            handlingStack: request.handlingStack,\n        },\n    };\n}\nfunction processResourceEntry(entry, configuration) {\n    var startClocks = relativeToClocks(entry.startTime);\n    var tracingInfo = computeResourceEntryTracingInfo(entry, configuration);\n    if (!configuration.trackResources && !tracingInfo) {\n        return;\n    }\n    var type = computeResourceEntryType(entry);\n    var entryMetrics = computeResourceEntryMetrics(entry);\n    var resourceEvent = combine({\n        date: startClocks.timeStamp,\n        resource: {\n            id: generateUUID(),\n            type: type,\n            url: entry.name,\n            status_code: discardZeroStatus(entry.responseStatus),\n            protocol: computeResourceEntryProtocol(entry),\n            delivery_type: computeResourceEntryDeliveryType(entry),\n        },\n        type: \"resource\" /* RumEventType.RESOURCE */,\n        _dd: {\n            discarded: !configuration.trackResources,\n        },\n    }, tracingInfo, entryMetrics);\n    return {\n        startTime: startClocks.relative,\n        rawRumEvent: resourceEvent,\n        domainContext: {\n            performanceEntry: entry,\n        },\n    };\n}\nfunction computeResourceEntryMetrics(entry) {\n    var renderBlockingStatus = entry.renderBlockingStatus;\n    return {\n        resource: assign({\n            duration: computeResourceEntryDuration(entry),\n            render_blocking_status: renderBlockingStatus,\n        }, computeResourceEntrySize(entry), computeResourceEntryDetails(entry)),\n    };\n}\nfunction computeRequestTracingInfo(request, configuration) {\n    var hasBeenTraced = request.traceSampled && request.traceId && request.spanId;\n    if (!hasBeenTraced) {\n        return undefined;\n    }\n    return {\n        _dd: {\n            span_id: request.spanId.toString(),\n            trace_id: request.traceId.toString(),\n            rule_psr: configuration.rulePsr,\n        },\n    };\n}\nfunction computeResourceEntryTracingInfo(entry, configuration) {\n    var hasBeenTraced = entry.traceId;\n    if (!hasBeenTraced) {\n        return undefined;\n    }\n    return {\n        _dd: {\n            trace_id: entry.traceId,\n            span_id: createSpanIdentifier().toString(),\n            rule_psr: configuration.rulePsr,\n        },\n    };\n}\nfunction computeRequestDuration(pageStateHistory, startClocks, duration) {\n    return !pageStateHistory.wasInPageStateDuringPeriod(\"frozen\" /* PageState.FROZEN */, startClocks.relative, duration)\n        ? toServerDuration(duration)\n        : undefined;\n}\n/**\n * The status is 0 for cross-origin resources without CORS headers, so the status is meaningless, and we shouldn't report it\n * https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming/responseStatus#cross-origin_response_status_codes\n */\nfunction discardZeroStatus(statusCode) {\n    return statusCode === 0 ? undefined : statusCode;\n}\n//# sourceMappingURL=resourceCollection.js.map","import { ONE_MINUTE, find } from '@datadog/browser-core';\nimport { createPerformanceObservable, RumPerformanceEntryType } from '../../../browser/performanceObservable';\n// Discard FCP timings above a certain delay to avoid incorrect data\n// It happens in some cases like sleep mode or some browser implementations\nexport var FCP_MAXIMUM_DELAY = 10 * ONE_MINUTE;\nexport function trackFirstContentfulPaint(configuration, firstHidden, callback) {\n    var performanceSubscription = createPerformanceObservable(configuration, {\n        type: RumPerformanceEntryType.PAINT,\n        buffered: true,\n    }).subscribe(function (entries) {\n        var fcpEntry = find(entries, function (entry) {\n            return entry.name === 'first-contentful-paint' &&\n                entry.startTime < firstHidden.timeStamp &&\n                entry.startTime < FCP_MAXIMUM_DELAY;\n        });\n        if (fcpEntry) {\n            callback(fcpEntry.startTime);\n        }\n    });\n    return {\n        stop: performanceSubscription.unsubscribe,\n    };\n}\n//# sourceMappingURL=trackFirstContentfulPaint.js.map","import { setTimeout, relativeNow, runOnReadyState, clearTimeout } from '@datadog/browser-core';\nimport { getNavigationEntry } from '../../../browser/performanceUtils';\nexport function trackNavigationTimings(configuration, callback, getNavigationEntryImpl) {\n    if (getNavigationEntryImpl === void 0) { getNavigationEntryImpl = getNavigationEntry; }\n    return waitAfterLoadEvent(configuration, function () {\n        var entry = getNavigationEntryImpl();\n        if (!isIncompleteNavigation(entry)) {\n            callback(processNavigationEntry(entry));\n        }\n    });\n}\nfunction processNavigationEntry(entry) {\n    return {\n        domComplete: entry.domComplete,\n        domContentLoaded: entry.domContentLoadedEventEnd,\n        domInteractive: entry.domInteractive,\n        loadEvent: entry.loadEventEnd,\n        // In some cases the value reported is negative or is larger\n        // than the current page time. Ignore these cases:\n        // https://github.com/GoogleChrome/web-vitals/issues/137\n        // https://github.com/GoogleChrome/web-vitals/issues/162\n        firstByte: entry.responseStart >= 0 && entry.responseStart <= relativeNow() ? entry.responseStart : undefined,\n    };\n}\nfunction isIncompleteNavigation(entry) {\n    return entry.loadEventEnd <= 0;\n}\nfunction waitAfterLoadEvent(configuration, callback) {\n    var timeoutId;\n    var stopOnReadyState = runOnReadyState(configuration, 'complete', function () {\n        // Invoke the callback a bit after the actual load event, so the \"loadEventEnd\" timing is accurate\n        timeoutId = setTimeout(function () { return callback(); });\n    }).stop;\n    return {\n        stop: function () {\n            stopOnReadyState();\n            clearTimeout(timeoutId);\n        },\n    };\n}\n//# sourceMappingURL=trackNavigationTimings.js.map","import { ONE_MINUTE, addEventListeners, findLast } from '@datadog/browser-core';\nimport { createPerformanceObservable, RumPerformanceEntryType } from '../../../browser/performanceObservable';\nimport { getSelectorFromElement } from '../../getSelectorFromElement';\n// Discard LCP timings above a certain delay to avoid incorrect data\n// It happens in some cases like sleep mode or some browser implementations\nexport var LCP_MAXIMUM_DELAY = 10 * ONE_MINUTE;\n/**\n * Track the largest contentful paint (LCP) occurring during the initial View.  This can yield\n * multiple values, only the most recent one should be used.\n * Documentation: https://web.dev/lcp/\n * Reference implementation: https://github.com/GoogleChrome/web-vitals/blob/master/src/onLCP.ts\n */\nexport function trackLargestContentfulPaint(configuration, firstHidden, eventTarget, callback) {\n    // Ignore entries that come after the first user interaction. According to the documentation, the\n    // browser should not send largest-contentful-paint entries after a user interact with the page,\n    // but the web-vitals reference implementation uses this as a safeguard.\n    var firstInteractionTimestamp = Infinity;\n    var stopEventListener = addEventListeners(configuration, eventTarget, [\"pointerdown\" /* DOM_EVENT.POINTER_DOWN */, \"keydown\" /* DOM_EVENT.KEY_DOWN */], function (event) {\n        firstInteractionTimestamp = event.timeStamp;\n    }, { capture: true, once: true }).stop;\n    var biggestLcpSize = 0;\n    var performanceLcpSubscription = createPerformanceObservable(configuration, {\n        type: RumPerformanceEntryType.LARGEST_CONTENTFUL_PAINT,\n        buffered: true,\n    }).subscribe(function (entries) {\n        var lcpEntry = findLast(entries, function (entry) {\n            return entry.entryType === RumPerformanceEntryType.LARGEST_CONTENTFUL_PAINT &&\n                entry.startTime < firstInteractionTimestamp &&\n                entry.startTime < firstHidden.timeStamp &&\n                entry.startTime < LCP_MAXIMUM_DELAY &&\n                // Ensure to get the LCP entry with the biggest size, see\n                // https://bugs.chromium.org/p/chromium/issues/detail?id=1516655\n                entry.size > biggestLcpSize;\n        });\n        if (lcpEntry) {\n            var lcpTargetSelector = void 0;\n            if (lcpEntry.element) {\n                lcpTargetSelector = getSelectorFromElement(lcpEntry.element, configuration.actionNameAttribute);\n            }\n            callback({\n                value: lcpEntry.startTime,\n                targetSelector: lcpTargetSelector,\n            });\n            biggestLcpSize = lcpEntry.size;\n        }\n    });\n    return {\n        stop: function () {\n            stopEventListener();\n            performanceLcpSubscription.unsubscribe();\n        },\n    };\n}\n//# sourceMappingURL=trackLargestContentfulPaint.js.map","import { addEventListeners } from '@datadog/browser-core';\nexport function trackFirstHidden(configuration, eventTarget) {\n    if (eventTarget === void 0) { eventTarget = window; }\n    var timeStamp;\n    var stopListeners;\n    if (document.visibilityState === 'hidden') {\n        timeStamp = 0;\n    }\n    else {\n        timeStamp = Infinity;\n        (stopListeners = addEventListeners(configuration, eventTarget, [\"pagehide\" /* DOM_EVENT.PAGE_HIDE */, \"visibilitychange\" /* DOM_EVENT.VISIBILITY_CHANGE */], function (event) {\n            if (event.type === \"pagehide\" /* DOM_EVENT.PAGE_HIDE */ || document.visibilityState === 'hidden') {\n                timeStamp = event.timeStamp;\n                stopListeners();\n            }\n        }, { capture: true }).stop);\n    }\n    return {\n        get timeStamp() {\n            return timeStamp;\n        },\n        stop: function () {\n            stopListeners === null || stopListeners === void 0 ? void 0 : stopListeners();\n        },\n    };\n}\n//# sourceMappingURL=trackFirstHidden.js.map","import { trackFirstContentfulPaint } from './trackFirstContentfulPaint';\nimport { trackFirstInput } from './trackFirstInput';\nimport { trackNavigationTimings } from './trackNavigationTimings';\nimport { trackLargestContentfulPaint } from './trackLargestContentfulPaint';\nimport { trackFirstHidden } from './trackFirstHidden';\nexport function trackInitialViewMetrics(configuration, setLoadEvent, scheduleViewUpdate) {\n    var initialViewMetrics = {};\n    var stopNavigationTracking = trackNavigationTimings(configuration, function (navigationTimings) {\n        setLoadEvent(navigationTimings.loadEvent);\n        initialViewMetrics.navigationTimings = navigationTimings;\n        scheduleViewUpdate();\n    }).stop;\n    var firstHidden = trackFirstHidden(configuration);\n    var stopFCPTracking = trackFirstContentfulPaint(configuration, firstHidden, function (firstContentfulPaint) {\n        initialViewMetrics.firstContentfulPaint = firstContentfulPaint;\n        scheduleViewUpdate();\n    }).stop;\n    var stopLCPTracking = trackLargestContentfulPaint(configuration, firstHidden, window, function (largestContentfulPaint) {\n        initialViewMetrics.largestContentfulPaint = largestContentfulPaint;\n        scheduleViewUpdate();\n    }).stop;\n    var stopFIDTracking = trackFirstInput(configuration, firstHidden, function (firstInput) {\n        initialViewMetrics.firstInput = firstInput;\n        scheduleViewUpdate();\n    }).stop;\n    function stop() {\n        stopNavigationTracking();\n        stopFCPTracking();\n        stopLCPTracking();\n        stopFIDTracking();\n        firstHidden.stop();\n    }\n    return {\n        stop: stop,\n        initialViewMetrics: initialViewMetrics,\n    };\n}\n//# sourceMappingURL=trackInitialViewMetrics.js.map","import { elapsed, find } from '@datadog/browser-core';\nimport { isElementNode } from '../../../browser/htmlDomUtils';\nimport { createPerformanceObservable, RumPerformanceEntryType } from '../../../browser/performanceObservable';\nimport { getSelectorFromElement } from '../../getSelectorFromElement';\n/**\n * Track the first input occurring during the initial View to return:\n * - First Input Delay\n * - First Input Time\n * Callback is called at most one time.\n * Documentation: https://web.dev/fid/\n * Reference implementation: https://github.com/GoogleChrome/web-vitals/blob/master/src/getFID.ts\n */\nexport function trackFirstInput(configuration, firstHidden, callback) {\n    var performanceFirstInputSubscription = createPerformanceObservable(configuration, {\n        type: RumPerformanceEntryType.FIRST_INPUT,\n        buffered: true,\n    }).subscribe(function (entries) {\n        var firstInputEntry = find(entries, function (entry) { return entry.startTime < firstHidden.timeStamp; });\n        if (firstInputEntry) {\n            var firstInputDelay = elapsed(firstInputEntry.startTime, firstInputEntry.processingStart);\n            var firstInputTargetSelector = void 0;\n            if (firstInputEntry.target && isElementNode(firstInputEntry.target)) {\n                firstInputTargetSelector = getSelectorFromElement(firstInputEntry.target, configuration.actionNameAttribute);\n            }\n            callback({\n                // Ensure firstInputDelay to be positive, see\n                // https://bugs.chromium.org/p/chromium/issues/detail?id=1185815\n                delay: firstInputDelay >= 0 ? firstInputDelay : 0,\n                time: firstInputEntry.startTime,\n                targetSelector: firstInputTargetSelector,\n            });\n        }\n    });\n    return {\n        stop: function () {\n            performanceFirstInputSubscription.unsubscribe();\n        },\n    };\n}\n//# sourceMappingURL=trackFirstInput.js.map","import { round, find, ONE_SECOND, noop, elapsed } from '@datadog/browser-core';\nimport { isElementNode } from '../../../browser/htmlDomUtils';\nimport { supportPerformanceTimingEvent, RumPerformanceEntryType, createPerformanceObservable, } from '../../../browser/performanceObservable';\nimport { getSelectorFromElement } from '../../getSelectorFromElement';\n/**\n * Track the cumulative layout shifts (CLS).\n * Layout shifts are grouped into session windows.\n * The minimum gap between session windows is 1 second.\n * The maximum duration of a session window is 5 second.\n * The session window layout shift value is the sum of layout shifts inside it.\n * The CLS value is the max of session windows values.\n *\n * This yields a new value whenever the CLS value is updated (a higher session window value is computed).\n *\n * See isLayoutShiftSupported to check for browser support.\n *\n * Documentation:\n * https://web.dev/cls/\n * https://web.dev/evolving-cls/\n * Reference implementation: https://github.com/GoogleChrome/web-vitals/blob/master/src/getCLS.ts\n */\nexport function trackCumulativeLayoutShift(configuration, viewStart, callback) {\n    if (!isLayoutShiftSupported()) {\n        return {\n            stop: noop,\n        };\n    }\n    var maxClsValue = 0;\n    var maxClsTarget;\n    var maxClsStartTime;\n    // if no layout shift happen the value should be reported as 0\n    callback({\n        value: 0,\n    });\n    var window = slidingSessionWindow();\n    var performanceSubscription = createPerformanceObservable(configuration, {\n        type: RumPerformanceEntryType.LAYOUT_SHIFT,\n        buffered: true,\n    }).subscribe(function (entries) {\n        for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {\n            var entry = entries_1[_i];\n            if (entry.hadRecentInput || entry.startTime < viewStart) {\n                continue;\n            }\n            var _a = window.update(entry), cumulatedValue = _a.cumulatedValue, isMaxValue = _a.isMaxValue;\n            if (isMaxValue) {\n                var target = getTargetFromSource(entry.sources);\n                maxClsTarget = target ? new WeakRef(target) : undefined;\n                maxClsStartTime = elapsed(viewStart, entry.startTime);\n            }\n            if (cumulatedValue > maxClsValue) {\n                maxClsValue = cumulatedValue;\n                var target = maxClsTarget === null || maxClsTarget === void 0 ? void 0 : maxClsTarget.deref();\n                callback({\n                    value: round(maxClsValue, 4),\n                    targetSelector: target && getSelectorFromElement(target, configuration.actionNameAttribute),\n                    time: maxClsStartTime,\n                });\n            }\n        }\n    });\n    return {\n        stop: function () {\n            performanceSubscription.unsubscribe();\n        },\n    };\n}\nfunction getTargetFromSource(sources) {\n    var _a;\n    if (!sources) {\n        return;\n    }\n    return (_a = find(sources, function (source) { return !!source.node && isElementNode(source.node); })) === null || _a === void 0 ? void 0 : _a.node;\n}\nexport var MAX_WINDOW_DURATION = 5 * ONE_SECOND;\nvar MAX_UPDATE_GAP = ONE_SECOND;\nfunction slidingSessionWindow() {\n    var cumulatedValue = 0;\n    var startTime;\n    var endTime;\n    var maxValue = 0;\n    return {\n        update: function (entry) {\n            var shouldCreateNewWindow = startTime === undefined ||\n                entry.startTime - endTime >= MAX_UPDATE_GAP ||\n                entry.startTime - startTime >= MAX_WINDOW_DURATION;\n            var isMaxValue;\n            if (shouldCreateNewWindow) {\n                startTime = endTime = entry.startTime;\n                maxValue = cumulatedValue = entry.value;\n                isMaxValue = true;\n            }\n            else {\n                cumulatedValue += entry.value;\n                endTime = entry.startTime;\n                isMaxValue = entry.value > maxValue;\n                if (isMaxValue) {\n                    maxValue = entry.value;\n                }\n            }\n            return {\n                cumulatedValue: cumulatedValue,\n                isMaxValue: isMaxValue,\n            };\n        },\n    };\n}\n/**\n * Check whether `layout-shift` is supported by the browser.\n */\nexport function isLayoutShiftSupported() {\n    return supportPerformanceTimingEvent(RumPerformanceEntryType.LAYOUT_SHIFT) && 'WeakRef' in window;\n}\n//# sourceMappingURL=trackCumulativeLayoutShift.js.map","/**\n * performance.interactionCount polyfill\n *\n * The interactionCount is an integer which counts the total number of distinct user interactions,\n * for which there was a unique interactionId.\n *\n * The interactionCount polyfill is an estimate based on a convention specific to Chrome. Cf: https://github.com/GoogleChrome/web-vitals/pull/213\n * This is currently not an issue as the polyfill is only used for INP which is currently only supported on Chrome.\n * Hopefully when/if other browsers will support INP, they will also implement performance.interactionCount at the same time, so we won't need that polyfill.\n *\n * Reference implementation: https://github.com/GoogleChrome/web-vitals/blob/main/src/lib/polyfills/interactionCountPolyfill.ts\n */\nimport { monitor } from '@datadog/browser-core';\nvar observer;\nvar interactionCountEstimate = 0;\nvar minKnownInteractionId = Infinity;\nvar maxKnownInteractionId = 0;\nexport function initInteractionCountPolyfill() {\n    if ('interactionCount' in performance || observer) {\n        return;\n    }\n    observer = new window.PerformanceObserver(monitor(function (entries) {\n        entries.getEntries().forEach(function (e) {\n            var entry = e;\n            if (entry.interactionId) {\n                minKnownInteractionId = Math.min(minKnownInteractionId, entry.interactionId);\n                maxKnownInteractionId = Math.max(maxKnownInteractionId, entry.interactionId);\n                interactionCountEstimate = (maxKnownInteractionId - minKnownInteractionId) / 7 + 1;\n            }\n        });\n    }));\n    observer.observe({ type: 'event', buffered: true, durationThreshold: 0 });\n}\n/**\n * Returns the `interactionCount` value using the native API (if available)\n * or the polyfill estimate in this module.\n */\nexport var getInteractionCount = function () {\n    return observer ? interactionCountEstimate : window.performance.interactionCount || 0;\n};\n//# sourceMappingURL=interactionCountPolyfill.js.map","import { Observable, throttle, addEventListener } from '@datadog/browser-core';\nvar viewportObservable;\nexport function initViewportObservable(configuration) {\n    if (!viewportObservable) {\n        viewportObservable = createViewportObservable(configuration);\n    }\n    return viewportObservable;\n}\nexport function createViewportObservable(configuration) {\n    return new Observable(function (observable) {\n        var updateDimension = throttle(function () {\n            observable.notify(getViewportDimension());\n        }, 200).throttled;\n        return addEventListener(configuration, window, \"resize\" /* DOM_EVENT.RESIZE */, updateDimension, { capture: true, passive: true })\n            .stop;\n    });\n}\n// excludes the width and height of any rendered classic scrollbar that is fixed to the visual viewport\nexport function getViewportDimension() {\n    var visual = window.visualViewport;\n    if (visual) {\n        return {\n            width: Number(visual.width * visual.scale),\n            height: Number(visual.height * visual.scale),\n        };\n    }\n    return {\n        width: Number(window.innerWidth || 0),\n        height: Number(window.innerHeight || 0),\n    };\n}\n//# sourceMappingURL=viewportObservable.js.map","import { elapsed, noop, ONE_MINUTE } from '@datadog/browser-core';\nimport { createPerformanceObservable, RumPerformanceEntryType, supportPerformanceTimingEvent, } from '../../../browser/performanceObservable';\nimport { getSelectorFromElement } from '../../getSelectorFromElement';\nimport { isElementNode } from '../../../browser/htmlDomUtils';\nimport { getInteractionSelector } from '../../action/interactionSelectorCache';\nimport { getInteractionCount, initInteractionCountPolyfill } from './interactionCountPolyfill';\n// Arbitrary value to prevent unnecessary memory usage on views with lots of interactions.\nvar MAX_INTERACTION_ENTRIES = 10;\n// Arbitrary value to cap INP outliers\nexport var MAX_INP_VALUE = (1 * ONE_MINUTE);\n/**\n * Track the interaction to next paint (INP).\n * To avoid outliers, return the p98 worst interaction of the view.\n * Documentation: https://web.dev/inp/\n * Reference implementation: https://github.com/GoogleChrome/web-vitals/blob/main/src/onINP.ts\n */\nexport function trackInteractionToNextPaint(configuration, viewStart, viewLoadingType) {\n    if (!isInteractionToNextPaintSupported()) {\n        return {\n            getInteractionToNextPaint: function () { return undefined; },\n            setViewEnd: noop,\n            stop: noop,\n        };\n    }\n    var _a = trackViewInteractionCount(viewLoadingType), getViewInteractionCount = _a.getViewInteractionCount, stopViewInteractionCount = _a.stopViewInteractionCount;\n    var viewEnd = Infinity;\n    var longestInteractions = trackLongestInteractions(getViewInteractionCount);\n    var interactionToNextPaint = -1;\n    var interactionToNextPaintTargetSelector;\n    var interactionToNextPaintStartTime;\n    function handleEntries(entries) {\n        for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {\n            var entry = entries_1[_i];\n            if (entry.interactionId &&\n                // Check the entry start time is inside the view bounds because some view interactions can be reported after the view end (if long duration).\n                entry.startTime >= viewStart &&\n                entry.startTime <= viewEnd) {\n                longestInteractions.process(entry);\n            }\n        }\n        var newInteraction = longestInteractions.estimateP98Interaction();\n        if (newInteraction && newInteraction.duration !== interactionToNextPaint) {\n            interactionToNextPaint = newInteraction.duration;\n            interactionToNextPaintStartTime = elapsed(viewStart, newInteraction.startTime);\n            interactionToNextPaintTargetSelector = getInteractionSelector(newInteraction.startTime);\n            if (!interactionToNextPaintTargetSelector && newInteraction.target && isElementNode(newInteraction.target)) {\n                interactionToNextPaintTargetSelector = getSelectorFromElement(newInteraction.target, configuration.actionNameAttribute);\n            }\n        }\n    }\n    var firstInputSubscription = createPerformanceObservable(configuration, {\n        type: RumPerformanceEntryType.FIRST_INPUT,\n        buffered: true,\n    }).subscribe(handleEntries);\n    var eventSubscription = createPerformanceObservable(configuration, {\n        type: RumPerformanceEntryType.EVENT,\n        // durationThreshold only impact PerformanceEventTiming entries used for INP computation which requires a threshold at 40 (default is 104ms)\n        // cf: https://github.com/GoogleChrome/web-vitals/blob/3806160ffbc93c3c4abf210a167b81228172b31c/src/onINP.ts#L202-L210\n        durationThreshold: 40,\n        buffered: true,\n    }).subscribe(handleEntries);\n    return {\n        getInteractionToNextPaint: function () {\n            // If no INP duration where captured because of the performanceObserver 40ms threshold\n            // but the view interaction count > 0 then report 0\n            if (interactionToNextPaint >= 0) {\n                return {\n                    value: Math.min(interactionToNextPaint, MAX_INP_VALUE),\n                    targetSelector: interactionToNextPaintTargetSelector,\n                    time: interactionToNextPaintStartTime,\n                };\n            }\n            else if (getViewInteractionCount()) {\n                return {\n                    value: 0,\n                };\n            }\n        },\n        setViewEnd: function (viewEndTime) {\n            viewEnd = viewEndTime;\n            stopViewInteractionCount();\n        },\n        stop: function () {\n            eventSubscription.unsubscribe();\n            firstInputSubscription.unsubscribe();\n        },\n    };\n}\nfunction trackLongestInteractions(getViewInteractionCount) {\n    var longestInteractions = [];\n    function sortAndTrimLongestInteractions() {\n        longestInteractions.sort(function (a, b) { return b.duration - a.duration; }).splice(MAX_INTERACTION_ENTRIES);\n    }\n    return {\n        /**\n         * Process the performance entry:\n         * - if its duration is long enough, add the performance entry to the list of worst interactions\n         * - if an entry with the same interaction id exists and its duration is lower than the new one, then replace it in the list of worst interactions\n         */\n        process: function (entry) {\n            var interactionIndex = longestInteractions.findIndex(function (interaction) { return entry.interactionId === interaction.interactionId; });\n            var minLongestInteraction = longestInteractions[longestInteractions.length - 1];\n            if (interactionIndex !== -1) {\n                if (entry.duration > longestInteractions[interactionIndex].duration) {\n                    longestInteractions[interactionIndex] = entry;\n                    sortAndTrimLongestInteractions();\n                }\n            }\n            else if (longestInteractions.length < MAX_INTERACTION_ENTRIES ||\n                entry.duration > minLongestInteraction.duration) {\n                longestInteractions.push(entry);\n                sortAndTrimLongestInteractions();\n            }\n        },\n        /**\n         * Compute the p98 longest interaction.\n         * For better performance the computation is based on 10 longest interactions and the interaction count of the current view.\n         */\n        estimateP98Interaction: function () {\n            var interactionIndex = Math.min(longestInteractions.length - 1, Math.floor(getViewInteractionCount() / 50));\n            return longestInteractions[interactionIndex];\n        },\n    };\n}\nexport function trackViewInteractionCount(viewLoadingType) {\n    initInteractionCountPolyfill();\n    var previousInteractionCount = viewLoadingType === \"initial_load\" /* ViewLoadingType.INITIAL_LOAD */ ? 0 : getInteractionCount();\n    var state = { stopped: false };\n    function computeViewInteractionCount() {\n        return getInteractionCount() - previousInteractionCount;\n    }\n    return {\n        getViewInteractionCount: function () {\n            if (state.stopped) {\n                return state.interactionCount;\n            }\n            return computeViewInteractionCount();\n        },\n        stopViewInteractionCount: function () {\n            state = { stopped: true, interactionCount: computeViewInteractionCount() };\n        },\n    };\n}\nexport function isInteractionToNextPaintSupported() {\n    return (supportPerformanceTimingEvent(RumPerformanceEntryType.EVENT) &&\n        window.PerformanceEventTiming &&\n        'interactionId' in PerformanceEventTiming.prototype);\n}\n//# sourceMappingURL=trackInteractionToNextPaint.js.map","export function getScrollX() {\n    var scrollX;\n    var visual = window.visualViewport;\n    if (visual) {\n        scrollX = visual.pageLeft - visual.offsetLeft;\n    }\n    else if (window.scrollX !== undefined) {\n        scrollX = window.scrollX;\n    }\n    else {\n        scrollX = window.pageXOffset || 0;\n    }\n    return Math.round(scrollX);\n}\nexport function getScrollY() {\n    var scrollY;\n    var visual = window.visualViewport;\n    if (visual) {\n        scrollY = visual.pageTop - visual.offsetTop;\n    }\n    else if (window.scrollY !== undefined) {\n        scrollY = window.scrollY;\n    }\n    else {\n        scrollY = window.pageYOffset || 0;\n    }\n    return Math.round(scrollY);\n}\n//# sourceMappingURL=scroll.js.map","import { Observable, ONE_SECOND, elapsed, relativeNow, throttle, addEventListener, monitor, } from '@datadog/browser-core';\nimport { getScrollY } from '../../../browser/scroll';\nimport { getViewportDimension } from '../../../browser/viewportObservable';\n/** Arbitrary scroll throttle duration */\nexport var THROTTLE_SCROLL_DURATION = ONE_SECOND;\nexport function trackScrollMetrics(configuration, viewStart, callback, scrollValues) {\n    if (scrollValues === void 0) { scrollValues = createScrollValuesObservable(configuration); }\n    var maxScrollDepth = 0;\n    var maxScrollHeight = 0;\n    var maxScrollHeightTime = 0;\n    var subscription = scrollValues.subscribe(function (_a) {\n        var scrollDepth = _a.scrollDepth, scrollTop = _a.scrollTop, scrollHeight = _a.scrollHeight;\n        var shouldUpdate = false;\n        if (scrollDepth > maxScrollDepth) {\n            maxScrollDepth = scrollDepth;\n            shouldUpdate = true;\n        }\n        if (scrollHeight > maxScrollHeight) {\n            maxScrollHeight = scrollHeight;\n            var now = relativeNow();\n            maxScrollHeightTime = elapsed(viewStart.relative, now);\n            shouldUpdate = true;\n        }\n        if (shouldUpdate) {\n            callback({\n                maxDepth: Math.min(maxScrollDepth, maxScrollHeight),\n                maxDepthScrollTop: scrollTop,\n                maxScrollHeight: maxScrollHeight,\n                maxScrollHeightTime: maxScrollHeightTime,\n            });\n        }\n    });\n    return {\n        stop: function () { return subscription.unsubscribe(); },\n    };\n}\nexport function computeScrollValues() {\n    var scrollTop = getScrollY();\n    var height = getViewportDimension().height;\n    var scrollHeight = Math.round((document.scrollingElement || document.documentElement).scrollHeight);\n    var scrollDepth = Math.round(height + scrollTop);\n    return {\n        scrollHeight: scrollHeight,\n        scrollDepth: scrollDepth,\n        scrollTop: scrollTop,\n    };\n}\nexport function createScrollValuesObservable(configuration, throttleDuration) {\n    if (throttleDuration === void 0) { throttleDuration = THROTTLE_SCROLL_DURATION; }\n    return new Observable(function (observable) {\n        function notify() {\n            observable.notify(computeScrollValues());\n        }\n        if (window.ResizeObserver) {\n            var throttledNotify_1 = throttle(notify, throttleDuration, {\n                leading: false,\n                trailing: true,\n            });\n            var observerTarget = document.scrollingElement || document.documentElement;\n            var resizeObserver_1 = new ResizeObserver(monitor(throttledNotify_1.throttled));\n            if (observerTarget) {\n                resizeObserver_1.observe(observerTarget);\n            }\n            var eventListener_1 = addEventListener(configuration, window, \"scroll\" /* DOM_EVENT.SCROLL */, throttledNotify_1.throttled, {\n                passive: true,\n            });\n            return function () {\n                throttledNotify_1.cancel();\n                resizeObserver_1.disconnect();\n                eventListener_1.stop();\n            };\n        }\n    });\n}\n//# sourceMappingURL=trackScrollMetrics.js.map","import { trackCumulativeLayoutShift } from './trackCumulativeLayoutShift';\nimport { trackInteractionToNextPaint } from './trackInteractionToNextPaint';\nimport { trackLoadingTime } from './trackLoadingTime';\nimport { trackScrollMetrics } from './trackScrollMetrics';\nexport function trackCommonViewMetrics(lifeCycle, domMutationObservable, windowOpenObservable, configuration, scheduleViewUpdate, loadingType, viewStart) {\n    var commonViewMetrics = {};\n    var _a = trackLoadingTime(lifeCycle, domMutationObservable, windowOpenObservable, configuration, loadingType, viewStart, function (newLoadingTime) {\n        commonViewMetrics.loadingTime = newLoadingTime;\n        scheduleViewUpdate();\n    }), stopLoadingTimeTracking = _a.stop, setLoadEvent = _a.setLoadEvent;\n    var stopScrollMetricsTracking = trackScrollMetrics(configuration, viewStart, function (newScrollMetrics) {\n        commonViewMetrics.scroll = newScrollMetrics;\n    }).stop;\n    var stopCLSTracking = trackCumulativeLayoutShift(configuration, viewStart.relative, function (cumulativeLayoutShift) {\n        commonViewMetrics.cumulativeLayoutShift = cumulativeLayoutShift;\n        scheduleViewUpdate();\n    }).stop;\n    var _b = trackInteractionToNextPaint(configuration, viewStart.relative, loadingType), stopINPTracking = _b.stop, getInteractionToNextPaint = _b.getInteractionToNextPaint, setViewEnd = _b.setViewEnd;\n    return {\n        stop: function () {\n            stopLoadingTimeTracking();\n            stopCLSTracking();\n            stopScrollMetricsTracking();\n        },\n        stopINPTracking: stopINPTracking,\n        setLoadEvent: setLoadEvent,\n        setViewEnd: setViewEnd,\n        getCommonViewMetrics: function () {\n            commonViewMetrics.interactionToNextPaint = getInteractionToNextPaint();\n            return commonViewMetrics;\n        },\n    };\n}\n//# sourceMappingURL=trackCommonViewMetrics.js.map","import { elapsed } from '@datadog/browser-core';\nimport { waitPageActivityEnd } from '../../waitPageActivityEnd';\nimport { trackFirstHidden } from './trackFirstHidden';\nexport function trackLoadingTime(lifeCycle, domMutationObservable, windowOpenObservable, configuration, loadType, viewStart, callback) {\n    var isWaitingForLoadEvent = loadType === \"initial_load\" /* ViewLoadingType.INITIAL_LOAD */;\n    var isWaitingForActivityLoadingTime = true;\n    var loadingTimeCandidates = [];\n    var firstHidden = trackFirstHidden(configuration);\n    function invokeCallbackIfAllCandidatesAreReceived() {\n        if (!isWaitingForActivityLoadingTime && !isWaitingForLoadEvent && loadingTimeCandidates.length > 0) {\n            var loadingTime = Math.max.apply(Math, loadingTimeCandidates);\n            if (loadingTime < firstHidden.timeStamp) {\n                callback(loadingTime);\n            }\n        }\n    }\n    var stop = waitPageActivityEnd(lifeCycle, domMutationObservable, windowOpenObservable, configuration, function (event) {\n        if (isWaitingForActivityLoadingTime) {\n            isWaitingForActivityLoadingTime = false;\n            if (event.hadActivity) {\n                loadingTimeCandidates.push(elapsed(viewStart.timeStamp, event.end));\n            }\n            invokeCallbackIfAllCandidatesAreReceived();\n        }\n    }).stop;\n    return {\n        stop: function () {\n            stop();\n            firstHidden.stop();\n        },\n        setLoadEvent: function (loadEvent) {\n            if (isWaitingForLoadEvent) {\n                isWaitingForLoadEvent = false;\n                loadingTimeCandidates.push(loadEvent);\n                invokeCallbackIfAllCandidatesAreReceived();\n            }\n        },\n    };\n}\n//# sourceMappingURL=trackLoadingTime.js.map","import { noop, PageExitReason, shallowClone, elapsed, generateUUID, ONE_MINUTE, throttle, clocksNow, clocksOrigin, timeStampNow, display, looksLikeRelativeTime, setInterval, clearInterval, setTimeout, Observable, createContextManager, } from '@datadog/browser-core';\nimport { trackViewEventCounts } from './trackViewEventCounts';\nimport { trackInitialViewMetrics } from './viewMetrics/trackInitialViewMetrics';\nimport { trackCommonViewMetrics } from './viewMetrics/trackCommonViewMetrics';\nexport var THROTTLE_VIEW_UPDATE_PERIOD = 3000;\nexport var SESSION_KEEP_ALIVE_INTERVAL = 5 * ONE_MINUTE;\n// Some events or metrics can be captured after the end of the view. To avoid missing those;\n// an arbitrary delay is added for stopping their tracking after the view ends.\n//\n// Ideally, we would not stop and keep tracking events or metrics until the end of the session.\n// But this might have a small performance impact if there are many many views.\n// So let's have a fairly short delay improving the situation in most cases and avoid impacting performances too much.\nexport var KEEP_TRACKING_AFTER_VIEW_DELAY = 5 * ONE_MINUTE;\nexport function trackViews(location, lifeCycle, domMutationObservable, windowOpenObservable, configuration, locationChangeObservable, areViewsTrackedAutomatically, initialViewOptions) {\n    var activeViews = new Set();\n    var currentView = startNewView(\"initial_load\" /* ViewLoadingType.INITIAL_LOAD */, clocksOrigin(), initialViewOptions);\n    startViewLifeCycle();\n    var locationChangeSubscription;\n    if (areViewsTrackedAutomatically) {\n        locationChangeSubscription = renewViewOnLocationChange(locationChangeObservable);\n    }\n    function startNewView(loadingType, startClocks, viewOptions) {\n        var newlyCreatedView = newView(lifeCycle, domMutationObservable, windowOpenObservable, configuration, location, loadingType, startClocks, viewOptions);\n        activeViews.add(newlyCreatedView);\n        newlyCreatedView.stopObservable.subscribe(function () {\n            activeViews.delete(newlyCreatedView);\n        });\n        return newlyCreatedView;\n    }\n    function startViewLifeCycle() {\n        lifeCycle.subscribe(10 /* LifeCycleEventType.SESSION_RENEWED */, function () {\n            // Renew view on session renewal\n            currentView = startNewView(\"route_change\" /* ViewLoadingType.ROUTE_CHANGE */, undefined, {\n                name: currentView.name,\n                service: currentView.service,\n                version: currentView.version,\n                context: currentView.contextManager.getContext(),\n            });\n        });\n        lifeCycle.subscribe(9 /* LifeCycleEventType.SESSION_EXPIRED */, function () {\n            currentView.end({ sessionIsActive: false });\n        });\n        // End the current view on page unload\n        lifeCycle.subscribe(11 /* LifeCycleEventType.PAGE_EXITED */, function (pageExitEvent) {\n            if (pageExitEvent.reason === PageExitReason.UNLOADING) {\n                currentView.end();\n            }\n        });\n    }\n    function renewViewOnLocationChange(locationChangeObservable) {\n        return locationChangeObservable.subscribe(function (_a) {\n            var oldLocation = _a.oldLocation, newLocation = _a.newLocation;\n            if (areDifferentLocation(oldLocation, newLocation)) {\n                currentView.end();\n                currentView = startNewView(\"route_change\" /* ViewLoadingType.ROUTE_CHANGE */);\n            }\n        });\n    }\n    return {\n        addTiming: function (name, time) {\n            if (time === void 0) { time = timeStampNow(); }\n            currentView.addTiming(name, time);\n        },\n        startView: function (options, startClocks) {\n            currentView.end({ endClocks: startClocks });\n            currentView = startNewView(\"route_change\" /* ViewLoadingType.ROUTE_CHANGE */, startClocks, options);\n        },\n        setViewContext: function (context) {\n            currentView.contextManager.setContext(context);\n        },\n        setViewContextProperty: function (key, value) {\n            currentView.contextManager.setContextProperty(key, value);\n        },\n        setViewName: function (name) {\n            currentView.setViewName(name);\n        },\n        stop: function () {\n            if (locationChangeSubscription) {\n                locationChangeSubscription.unsubscribe();\n            }\n            currentView.end();\n            activeViews.forEach(function (view) { return view.stop(); });\n        },\n    };\n}\nfunction newView(lifeCycle, domMutationObservable, windowOpenObservable, configuration, initialLocation, loadingType, startClocks, viewOptions) {\n    if (startClocks === void 0) { startClocks = clocksNow(); }\n    // Setup initial values\n    var id = generateUUID();\n    var stopObservable = new Observable();\n    var customTimings = {};\n    var documentVersion = 0;\n    var endClocks;\n    var location = shallowClone(initialLocation);\n    var contextManager = createContextManager();\n    var sessionIsActive = true;\n    var name;\n    var service;\n    var version;\n    var context;\n    if (viewOptions) {\n        name = viewOptions.name;\n        service = viewOptions.service || undefined;\n        version = viewOptions.version || undefined;\n        if (viewOptions.context) {\n            context = viewOptions.context;\n            // use ContextManager to update the context so we always sanitize it\n            contextManager.setContext(context);\n        }\n    }\n    var viewCreatedEvent = {\n        id: id,\n        name: name,\n        startClocks: startClocks,\n        service: service,\n        version: version,\n        context: context,\n    };\n    lifeCycle.notify(1 /* LifeCycleEventType.BEFORE_VIEW_CREATED */, viewCreatedEvent);\n    lifeCycle.notify(2 /* LifeCycleEventType.VIEW_CREATED */, viewCreatedEvent);\n    // Update the view every time the measures are changing\n    var _a = throttle(triggerViewUpdate, THROTTLE_VIEW_UPDATE_PERIOD, {\n        leading: false,\n    }), scheduleViewUpdate = _a.throttled, cancelScheduleViewUpdate = _a.cancel;\n    var _b = trackCommonViewMetrics(lifeCycle, domMutationObservable, windowOpenObservable, configuration, scheduleViewUpdate, loadingType, startClocks), setLoadEvent = _b.setLoadEvent, setViewEnd = _b.setViewEnd, stopCommonViewMetricsTracking = _b.stop, stopINPTracking = _b.stopINPTracking, getCommonViewMetrics = _b.getCommonViewMetrics;\n    var _c = loadingType === \"initial_load\" /* ViewLoadingType.INITIAL_LOAD */\n        ? trackInitialViewMetrics(configuration, setLoadEvent, scheduleViewUpdate)\n        : { stop: noop, initialViewMetrics: {} }, stopInitialViewMetricsTracking = _c.stop, initialViewMetrics = _c.initialViewMetrics;\n    var _d = trackViewEventCounts(lifeCycle, id, scheduleViewUpdate), stopEventCountsTracking = _d.stop, eventCounts = _d.eventCounts;\n    // Session keep alive\n    var keepAliveIntervalId = setInterval(triggerViewUpdate, SESSION_KEEP_ALIVE_INTERVAL);\n    // Initial view update\n    triggerViewUpdate();\n    // View context update should always be throttled\n    contextManager.changeObservable.subscribe(function () {\n        lifeCycle.notify(3 /* LifeCycleEventType.BEFORE_VIEW_UPDATED */, {\n            id: id,\n            name: name,\n            context: contextManager.getContext(),\n            startClocks: startClocks,\n        });\n        scheduleViewUpdate();\n    });\n    function triggerViewUpdate() {\n        cancelScheduleViewUpdate();\n        documentVersion += 1;\n        var currentEnd = endClocks === undefined ? timeStampNow() : endClocks.timeStamp;\n        lifeCycle.notify(4 /* LifeCycleEventType.VIEW_UPDATED */, {\n            customTimings: customTimings,\n            documentVersion: documentVersion,\n            id: id,\n            name: name,\n            service: service,\n            version: version,\n            context: contextManager.getContext(),\n            loadingType: loadingType,\n            location: location,\n            startClocks: startClocks,\n            commonViewMetrics: getCommonViewMetrics(),\n            initialViewMetrics: initialViewMetrics,\n            duration: elapsed(startClocks.timeStamp, currentEnd),\n            isActive: endClocks === undefined,\n            sessionIsActive: sessionIsActive,\n            eventCounts: eventCounts,\n        });\n    }\n    return {\n        get name() {\n            return name;\n        },\n        service: service,\n        version: version,\n        contextManager: contextManager,\n        stopObservable: stopObservable,\n        end: function (options) {\n            var _this = this;\n            var _a, _b;\n            if (options === void 0) { options = {}; }\n            if (endClocks) {\n                // view already ended\n                return;\n            }\n            endClocks = (_a = options.endClocks) !== null && _a !== void 0 ? _a : clocksNow();\n            sessionIsActive = (_b = options.sessionIsActive) !== null && _b !== void 0 ? _b : true;\n            lifeCycle.notify(5 /* LifeCycleEventType.VIEW_ENDED */, { endClocks: endClocks });\n            lifeCycle.notify(6 /* LifeCycleEventType.AFTER_VIEW_ENDED */, { endClocks: endClocks });\n            clearInterval(keepAliveIntervalId);\n            setViewEnd(endClocks.relative);\n            stopCommonViewMetricsTracking();\n            triggerViewUpdate();\n            setTimeout(function () {\n                _this.stop();\n            }, KEEP_TRACKING_AFTER_VIEW_DELAY);\n        },\n        stop: function () {\n            stopInitialViewMetricsTracking();\n            stopEventCountsTracking();\n            stopINPTracking();\n            stopObservable.notify();\n        },\n        addTiming: function (name, time) {\n            if (endClocks) {\n                return;\n            }\n            var relativeTime = looksLikeRelativeTime(time) ? time : elapsed(startClocks.timeStamp, time);\n            customTimings[sanitizeTiming(name)] = relativeTime;\n            scheduleViewUpdate();\n        },\n        setViewName: function (updatedName) {\n            name = updatedName;\n            triggerViewUpdate();\n        },\n    };\n}\n/**\n * Timing name is used as facet path that must contain only letters, digits, or the characters - _ . @ $\n */\nfunction sanitizeTiming(name) {\n    var sanitized = name.replace(/[^a-zA-Z0-9-_.@$]/g, '_');\n    if (sanitized !== name) {\n        display.warn(\"Invalid timing name: \".concat(name, \", sanitized to: \").concat(sanitized));\n    }\n    return sanitized;\n}\nfunction areDifferentLocation(currentLocation, otherLocation) {\n    return (currentLocation.pathname !== otherLocation.pathname ||\n        (!isHashAnAnchor(otherLocation.hash) &&\n            getPathFromHash(otherLocation.hash) !== getPathFromHash(currentLocation.hash)));\n}\nfunction isHashAnAnchor(hash) {\n    var correspondingId = hash.substring(1);\n    // check if the correspondingId is empty because on Firefox an empty string passed to getElementById() prints a consol warning\n    return correspondingId !== '' && !!document.getElementById(correspondingId);\n}\nfunction getPathFromHash(hash) {\n    var index = hash.indexOf('?');\n    return index < 0 ? hash : hash.slice(0, index);\n}\n//# sourceMappingURL=trackViews.js.map","import { trackEventCounts } from '../trackEventCounts';\nexport function trackViewEventCounts(lifeCycle, viewId, onChange) {\n    var _a = trackEventCounts({\n        lifeCycle: lifeCycle,\n        isChildEvent: function (event) { return event.view.id === viewId; },\n        onChange: onChange,\n    }), stop = _a.stop, eventCounts = _a.eventCounts;\n    return {\n        stop: stop,\n        eventCounts: eventCounts,\n    };\n}\n//# sourceMappingURL=trackViewEventCounts.js.map","import { isEmptyObject, mapValues, toServerDuration } from '@datadog/browser-core';\nimport { discardNegativeDuration } from '../discardNegativeDuration';\nimport { trackViews } from './trackViews';\nexport function startViewCollection(lifeCycle, configuration, location, domMutationObservable, pageOpenObserable, locationChangeObservable, featureFlagContexts, pageStateHistory, recorderApi, initialViewOptions) {\n    lifeCycle.subscribe(4 /* LifeCycleEventType.VIEW_UPDATED */, function (view) {\n        return lifeCycle.notify(12 /* LifeCycleEventType.RAW_RUM_EVENT_COLLECTED */, processViewUpdate(view, configuration, featureFlagContexts, recorderApi, pageStateHistory));\n    });\n    return trackViews(location, lifeCycle, domMutationObservable, pageOpenObserable, configuration, locationChangeObservable, !configuration.trackViewsManually, initialViewOptions);\n}\nfunction processViewUpdate(view, configuration, featureFlagContexts, recorderApi, pageStateHistory) {\n    var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r;\n    var replayStats = recorderApi.getReplayStats(view.id);\n    var featureFlagContext = featureFlagContexts.findFeatureFlagEvaluations(view.startClocks.relative);\n    var pageStates = pageStateHistory.findAll(view.startClocks.relative, view.duration);\n    var viewEvent = {\n        _dd: {\n            document_version: view.documentVersion,\n            replay_stats: replayStats,\n            page_states: pageStates,\n            configuration: {\n                start_session_replay_recording_manually: configuration.startSessionReplayRecordingManually,\n            },\n        },\n        date: view.startClocks.timeStamp,\n        type: \"view\" /* RumEventType.VIEW */,\n        view: {\n            action: {\n                count: view.eventCounts.actionCount,\n            },\n            frustration: {\n                count: view.eventCounts.frustrationCount,\n            },\n            cumulative_layout_shift: (_a = view.commonViewMetrics.cumulativeLayoutShift) === null || _a === void 0 ? void 0 : _a.value,\n            cumulative_layout_shift_time: toServerDuration((_b = view.commonViewMetrics.cumulativeLayoutShift) === null || _b === void 0 ? void 0 : _b.time),\n            cumulative_layout_shift_target_selector: (_c = view.commonViewMetrics.cumulativeLayoutShift) === null || _c === void 0 ? void 0 : _c.targetSelector,\n            first_byte: toServerDuration((_d = view.initialViewMetrics.navigationTimings) === null || _d === void 0 ? void 0 : _d.firstByte),\n            dom_complete: toServerDuration((_e = view.initialViewMetrics.navigationTimings) === null || _e === void 0 ? void 0 : _e.domComplete),\n            dom_content_loaded: toServerDuration((_f = view.initialViewMetrics.navigationTimings) === null || _f === void 0 ? void 0 : _f.domContentLoaded),\n            dom_interactive: toServerDuration((_g = view.initialViewMetrics.navigationTimings) === null || _g === void 0 ? void 0 : _g.domInteractive),\n            error: {\n                count: view.eventCounts.errorCount,\n            },\n            first_contentful_paint: toServerDuration(view.initialViewMetrics.firstContentfulPaint),\n            first_input_delay: toServerDuration((_h = view.initialViewMetrics.firstInput) === null || _h === void 0 ? void 0 : _h.delay),\n            first_input_time: toServerDuration((_j = view.initialViewMetrics.firstInput) === null || _j === void 0 ? void 0 : _j.time),\n            first_input_target_selector: (_k = view.initialViewMetrics.firstInput) === null || _k === void 0 ? void 0 : _k.targetSelector,\n            interaction_to_next_paint: toServerDuration((_l = view.commonViewMetrics.interactionToNextPaint) === null || _l === void 0 ? void 0 : _l.value),\n            interaction_to_next_paint_time: toServerDuration((_m = view.commonViewMetrics.interactionToNextPaint) === null || _m === void 0 ? void 0 : _m.time),\n            interaction_to_next_paint_target_selector: (_o = view.commonViewMetrics.interactionToNextPaint) === null || _o === void 0 ? void 0 : _o.targetSelector,\n            is_active: view.isActive,\n            name: view.name,\n            largest_contentful_paint: toServerDuration((_p = view.initialViewMetrics.largestContentfulPaint) === null || _p === void 0 ? void 0 : _p.value),\n            largest_contentful_paint_target_selector: (_q = view.initialViewMetrics.largestContentfulPaint) === null || _q === void 0 ? void 0 : _q.targetSelector,\n            load_event: toServerDuration((_r = view.initialViewMetrics.navigationTimings) === null || _r === void 0 ? void 0 : _r.loadEvent),\n            loading_time: discardNegativeDuration(toServerDuration(view.commonViewMetrics.loadingTime)),\n            loading_type: view.loadingType,\n            long_task: {\n                count: view.eventCounts.longTaskCount,\n            },\n            resource: {\n                count: view.eventCounts.resourceCount,\n            },\n            time_spent: toServerDuration(view.duration),\n        },\n        feature_flags: featureFlagContext && !isEmptyObject(featureFlagContext) ? featureFlagContext : undefined,\n        display: view.commonViewMetrics.scroll\n            ? {\n                scroll: {\n                    max_depth: view.commonViewMetrics.scroll.maxDepth,\n                    max_depth_scroll_top: view.commonViewMetrics.scroll.maxDepthScrollTop,\n                    max_scroll_height: view.commonViewMetrics.scroll.maxScrollHeight,\n                    max_scroll_height_time: toServerDuration(view.commonViewMetrics.scroll.maxScrollHeightTime),\n                },\n            }\n            : undefined,\n        session: {\n            has_replay: replayStats ? true : undefined,\n            is_active: view.sessionIsActive ? undefined : false,\n        },\n        privacy: {\n            replay_level: configuration.defaultPrivacyLevel,\n        },\n    };\n    if (!isEmptyObject(view.customTimings)) {\n        viewEvent.view.custom_timings = mapValues(view.customTimings, toServerDuration);\n    }\n    return {\n        rawRumEvent: viewEvent,\n        startTime: view.startClocks.relative,\n        domainContext: {\n            location: view.location,\n        },\n    };\n}\n//# sourceMappingURL=viewCollection.js.map","import { Observable } from '../../tools/observable';\nimport { createValueHistory } from '../../tools/valueHistory';\nimport { relativeNow, clocksOrigin, ONE_MINUTE } from '../../tools/utils/timeUtils';\nimport { addEventListener, addEventListeners } from '../../browser/addEventListener';\nimport { clearInterval, setInterval } from '../../tools/timer';\nimport { SESSION_TIME_OUT_DELAY } from './sessionConstants';\nimport { startSessionStore } from './sessionStore';\nexport var VISIBILITY_CHECK_DELAY = ONE_MINUTE;\nvar SESSION_CONTEXT_TIMEOUT_DELAY = SESSION_TIME_OUT_DELAY;\nvar stopCallbacks = [];\nexport function startSessionManager(configuration, productKey, computeSessionState, trackingConsentState) {\n    var renewObservable = new Observable();\n    var expireObservable = new Observable();\n    // TODO - Improve configuration type and remove assertion\n    var sessionStore = startSessionStore(configuration.sessionStoreStrategyType, productKey, computeSessionState);\n    stopCallbacks.push(function () { return sessionStore.stop(); });\n    var sessionContextHistory = createValueHistory({\n        expireDelay: SESSION_CONTEXT_TIMEOUT_DELAY,\n    });\n    stopCallbacks.push(function () { return sessionContextHistory.stop(); });\n    sessionStore.renewObservable.subscribe(function () {\n        sessionContextHistory.add(buildSessionContext(), relativeNow());\n        renewObservable.notify();\n    });\n    sessionStore.expireObservable.subscribe(function () {\n        expireObservable.notify();\n        sessionContextHistory.closeActive(relativeNow());\n    });\n    // We expand/renew session unconditionally as tracking consent is always granted when the session\n    // manager is started.\n    sessionStore.expandOrRenewSession();\n    sessionContextHistory.add(buildSessionContext(), clocksOrigin().relative);\n    trackingConsentState.observable.subscribe(function () {\n        if (trackingConsentState.isGranted()) {\n            sessionStore.expandOrRenewSession();\n        }\n        else {\n            sessionStore.expire();\n        }\n    });\n    trackActivity(configuration, function () {\n        if (trackingConsentState.isGranted()) {\n            sessionStore.expandOrRenewSession();\n        }\n    });\n    trackVisibility(configuration, function () { return sessionStore.expandSession(); });\n    trackResume(configuration, function () { return sessionStore.restartSession(); });\n    function buildSessionContext() {\n        return {\n            id: sessionStore.getSession().id,\n            trackingType: sessionStore.getSession()[productKey],\n            isReplayForced: !!sessionStore.getSession().forcedReplay,\n            anonymousId: sessionStore.getSession().anonymousId,\n        };\n    }\n    return {\n        findSession: function (startTime, options) { return sessionContextHistory.find(startTime, options); },\n        renewObservable: renewObservable,\n        expireObservable: expireObservable,\n        sessionStateUpdateObservable: sessionStore.sessionStateUpdateObservable,\n        expire: sessionStore.expire,\n        updateSessionState: sessionStore.updateSessionState,\n    };\n}\nexport function stopSessionManager() {\n    stopCallbacks.forEach(function (e) { return e(); });\n    stopCallbacks = [];\n}\nfunction trackActivity(configuration, expandOrRenewSession) {\n    var stop = addEventListeners(configuration, window, [\"click\" /* DOM_EVENT.CLICK */, \"touchstart\" /* DOM_EVENT.TOUCH_START */, \"keydown\" /* DOM_EVENT.KEY_DOWN */, \"scroll\" /* DOM_EVENT.SCROLL */], expandOrRenewSession, { capture: true, passive: true }).stop;\n    stopCallbacks.push(stop);\n}\nfunction trackVisibility(configuration, expandSession) {\n    var expandSessionWhenVisible = function () {\n        if (document.visibilityState === 'visible') {\n            expandSession();\n        }\n    };\n    var stop = addEventListener(configuration, document, \"visibilitychange\" /* DOM_EVENT.VISIBILITY_CHANGE */, expandSessionWhenVisible).stop;\n    stopCallbacks.push(stop);\n    var visibilityCheckInterval = setInterval(expandSessionWhenVisible, VISIBILITY_CHECK_DELAY);\n    stopCallbacks.push(function () {\n        clearInterval(visibilityCheckInterval);\n    });\n}\nfunction trackResume(configuration, cb) {\n    var stop = addEventListener(configuration, window, \"resume\" /* DOM_EVENT.RESUME */, cb, { capture: true }).stop;\n    stopCallbacks.push(stop);\n}\n//# sourceMappingURL=sessionManager.js.map","import { Observable, bridgeSupports, noop, performDraw, startSessionManager, } from '@datadog/browser-core';\nexport var RUM_SESSION_KEY = 'rum';\nexport function startRumSessionManager(configuration, lifeCycle, trackingConsentState) {\n    var sessionManager = startSessionManager(configuration, RUM_SESSION_KEY, function (rawTrackingType) { return computeSessionState(configuration, rawTrackingType); }, trackingConsentState);\n    sessionManager.expireObservable.subscribe(function () {\n        lifeCycle.notify(9 /* LifeCycleEventType.SESSION_EXPIRED */);\n    });\n    sessionManager.renewObservable.subscribe(function () {\n        lifeCycle.notify(10 /* LifeCycleEventType.SESSION_RENEWED */);\n    });\n    sessionManager.sessionStateUpdateObservable.subscribe(function (_a) {\n        var previousState = _a.previousState, newState = _a.newState;\n        if (!previousState.forcedReplay && newState.forcedReplay) {\n            var sessionEntity = sessionManager.findSession();\n            if (sessionEntity) {\n                sessionEntity.isReplayForced = true;\n            }\n        }\n    });\n    return {\n        findTrackedSession: function (startTime) {\n            var session = sessionManager.findSession(startTime);\n            if (!session || !isTypeTracked(session.trackingType)) {\n                return;\n            }\n            return {\n                id: session.id,\n                sessionReplay: session.trackingType === \"1\" /* RumTrackingType.TRACKED_WITH_SESSION_REPLAY */\n                    ? 1 /* SessionReplayState.SAMPLED */\n                    : session.isReplayForced\n                        ? 2 /* SessionReplayState.FORCED */\n                        : 0 /* SessionReplayState.OFF */,\n                anonymousId: session.anonymousId,\n            };\n        },\n        expire: sessionManager.expire,\n        expireObservable: sessionManager.expireObservable,\n        setForcedReplay: function () { return sessionManager.updateSessionState({ forcedReplay: '1' }); },\n    };\n}\n/**\n * Start a tracked replay session stub\n */\nexport function startRumSessionManagerStub() {\n    var session = {\n        id: '00000000-aaaa-0000-aaaa-000000000000',\n        sessionReplay: bridgeSupports(\"records\" /* BridgeCapability.RECORDS */) ? 1 /* SessionReplayState.SAMPLED */ : 0 /* SessionReplayState.OFF */,\n    };\n    return {\n        findTrackedSession: function () { return session; },\n        expire: noop,\n        expireObservable: new Observable(),\n        setForcedReplay: noop,\n    };\n}\nfunction computeSessionState(configuration, rawTrackingType) {\n    var trackingType;\n    if (hasValidRumSession(rawTrackingType)) {\n        trackingType = rawTrackingType;\n    }\n    else if (!performDraw(configuration.sessionSampleRate)) {\n        trackingType = \"0\" /* RumTrackingType.NOT_TRACKED */;\n    }\n    else if (!performDraw(configuration.sessionReplaySampleRate)) {\n        trackingType = \"2\" /* RumTrackingType.TRACKED_WITHOUT_SESSION_REPLAY */;\n    }\n    else {\n        trackingType = \"1\" /* RumTrackingType.TRACKED_WITH_SESSION_REPLAY */;\n    }\n    return {\n        trackingType: trackingType,\n        isTracked: isTypeTracked(trackingType),\n    };\n}\nfunction hasValidRumSession(trackingType) {\n    return (trackingType === \"0\" /* RumTrackingType.NOT_TRACKED */ ||\n        trackingType === \"1\" /* RumTrackingType.TRACKED_WITH_SESSION_REPLAY */ ||\n        trackingType === \"2\" /* RumTrackingType.TRACKED_WITHOUT_SESSION_REPLAY */);\n}\nfunction isTypeTracked(rumSessionType) {\n    return (rumSessionType === \"2\" /* RumTrackingType.TRACKED_WITHOUT_SESSION_REPLAY */ ||\n        rumSessionType === \"1\" /* RumTrackingType.TRACKED_WITH_SESSION_REPLAY */);\n}\n//# sourceMappingURL=rumSessionManager.js.map","import { DOCS_TROUBLESHOOTING, MORE_DETAILS, display } from '../tools/display';\nimport { objectValues } from '../tools/utils/polyfills';\nimport { isPageExitReason } from '../browser/pageExitObservable';\nimport { jsonStringify } from '../tools/serialisation/jsonStringify';\nimport { computeBytesCount } from '../tools/utils/byteUtils';\nexport function createBatch(_a) {\n    var encoder = _a.encoder, request = _a.request, flushController = _a.flushController, messageBytesLimit = _a.messageBytesLimit;\n    var upsertBuffer = {};\n    var flushSubscription = flushController.flushObservable.subscribe(function (event) { return flush(event); });\n    function push(serializedMessage, estimatedMessageBytesCount, key) {\n        flushController.notifyBeforeAddMessage(estimatedMessageBytesCount);\n        if (key !== undefined) {\n            upsertBuffer[key] = serializedMessage;\n            flushController.notifyAfterAddMessage();\n        }\n        else {\n            encoder.write(encoder.isEmpty ? serializedMessage : \"\\n\".concat(serializedMessage), function (realMessageBytesCount) {\n                flushController.notifyAfterAddMessage(realMessageBytesCount - estimatedMessageBytesCount);\n            });\n        }\n    }\n    function hasMessageFor(key) {\n        return key !== undefined && upsertBuffer[key] !== undefined;\n    }\n    function remove(key) {\n        var removedMessage = upsertBuffer[key];\n        delete upsertBuffer[key];\n        var messageBytesCount = encoder.estimateEncodedBytesCount(removedMessage);\n        flushController.notifyAfterRemoveMessage(messageBytesCount);\n    }\n    function addOrUpdate(message, key) {\n        var serializedMessage = jsonStringify(message);\n        var estimatedMessageBytesCount = encoder.estimateEncodedBytesCount(serializedMessage);\n        if (estimatedMessageBytesCount >= messageBytesLimit) {\n            display.warn(\"Discarded a message whose size was bigger than the maximum allowed size \".concat(messageBytesLimit, \"KB. \").concat(MORE_DETAILS, \" \").concat(DOCS_TROUBLESHOOTING, \"/#technical-limitations\"));\n            return;\n        }\n        if (hasMessageFor(key)) {\n            remove(key);\n        }\n        push(serializedMessage, estimatedMessageBytesCount, key);\n    }\n    function flush(event) {\n        var upsertMessages = objectValues(upsertBuffer).join('\\n');\n        upsertBuffer = {};\n        var isPageExit = isPageExitReason(event.reason);\n        var send = isPageExit ? request.sendOnExit : request.send;\n        if (isPageExit &&\n            // Note: checking that the encoder is async is not strictly needed, but it's an optimization:\n            // if the encoder is async we need to send two requests in some cases (one for encoded data\n            // and the other for non-encoded data). But if it's not async, we don't have to worry about\n            // it and always send a single request.\n            encoder.isAsync) {\n            var encoderResult = encoder.finishSync();\n            // Send encoded messages\n            if (encoderResult.outputBytesCount) {\n                send(formatPayloadFromEncoder(encoderResult));\n            }\n            // Send messages that are not yet encoded at this point\n            var pendingMessages = [encoderResult.pendingData, upsertMessages].filter(Boolean).join('\\n');\n            if (pendingMessages) {\n                send({\n                    data: pendingMessages,\n                    bytesCount: computeBytesCount(pendingMessages),\n                });\n            }\n        }\n        else {\n            if (upsertMessages) {\n                encoder.write(encoder.isEmpty ? upsertMessages : \"\\n\".concat(upsertMessages));\n            }\n            encoder.finish(function (encoderResult) {\n                send(formatPayloadFromEncoder(encoderResult));\n            });\n        }\n    }\n    return {\n        flushController: flushController,\n        add: addOrUpdate,\n        upsert: addOrUpdate,\n        stop: flushSubscription.unsubscribe,\n    };\n}\nfunction formatPayloadFromEncoder(encoderResult) {\n    var data;\n    if (typeof encoderResult.output === 'string') {\n        data = encoderResult.output;\n    }\n    else {\n        data = new Blob([encoderResult.output], {\n            // This will set the 'Content-Type: text/plain' header. Reasoning:\n            // * The intake rejects the request if there is no content type.\n            // * The browser will issue CORS preflight requests if we set it to 'application/json', which\n            // could induce higher intake load (and maybe has other impacts).\n            // * Also it's not quite JSON, since we are concatenating multiple JSON objects separated by\n            // new lines.\n            type: 'text/plain',\n        });\n    }\n    return {\n        data: data,\n        bytesCount: encoderResult.outputBytesCount,\n        encoding: encoderResult.encoding,\n    };\n}\n//# sourceMappingURL=batch.js.map","import { setTimeout } from '../tools/timer';\nimport { clocksNow, ONE_MINUTE, ONE_SECOND } from '../tools/utils/timeUtils';\nimport { ONE_MEBI_BYTE, ONE_KIBI_BYTE } from '../tools/utils/byteUtils';\nimport { isServerError } from '../tools/utils/responseUtils';\nimport { ErrorSource } from '../domain/error/error.types';\nexport var MAX_ONGOING_BYTES_COUNT = 80 * ONE_KIBI_BYTE;\nexport var MAX_ONGOING_REQUESTS = 32;\nexport var MAX_QUEUE_BYTES_COUNT = 3 * ONE_MEBI_BYTE;\nexport var MAX_BACKOFF_TIME = ONE_MINUTE;\nexport var INITIAL_BACKOFF_TIME = ONE_SECOND;\nexport function sendWithRetryStrategy(payload, state, sendStrategy, trackType, reportError) {\n    if (state.transportStatus === 0 /* TransportStatus.UP */ &&\n        state.queuedPayloads.size() === 0 &&\n        state.bandwidthMonitor.canHandle(payload)) {\n        send(payload, state, sendStrategy, {\n            onSuccess: function () { return retryQueuedPayloads(0 /* RetryReason.AFTER_SUCCESS */, state, sendStrategy, trackType, reportError); },\n            onFailure: function () {\n                state.queuedPayloads.enqueue(payload);\n                scheduleRetry(state, sendStrategy, trackType, reportError);\n            },\n        });\n    }\n    else {\n        state.queuedPayloads.enqueue(payload);\n    }\n}\nfunction scheduleRetry(state, sendStrategy, trackType, reportError) {\n    if (state.transportStatus !== 2 /* TransportStatus.DOWN */) {\n        return;\n    }\n    setTimeout(function () {\n        var payload = state.queuedPayloads.first();\n        send(payload, state, sendStrategy, {\n            onSuccess: function () {\n                state.queuedPayloads.dequeue();\n                state.currentBackoffTime = INITIAL_BACKOFF_TIME;\n                retryQueuedPayloads(1 /* RetryReason.AFTER_RESUME */, state, sendStrategy, trackType, reportError);\n            },\n            onFailure: function () {\n                state.currentBackoffTime = Math.min(MAX_BACKOFF_TIME, state.currentBackoffTime * 2);\n                scheduleRetry(state, sendStrategy, trackType, reportError);\n            },\n        });\n    }, state.currentBackoffTime);\n}\nfunction send(payload, state, sendStrategy, _a) {\n    var onSuccess = _a.onSuccess, onFailure = _a.onFailure;\n    state.bandwidthMonitor.add(payload);\n    sendStrategy(payload, function (response) {\n        state.bandwidthMonitor.remove(payload);\n        if (!shouldRetryRequest(response)) {\n            state.transportStatus = 0 /* TransportStatus.UP */;\n            onSuccess();\n        }\n        else {\n            // do not consider transport down if another ongoing request could succeed\n            state.transportStatus =\n                state.bandwidthMonitor.ongoingRequestCount > 0 ? 1 /* TransportStatus.FAILURE_DETECTED */ : 2 /* TransportStatus.DOWN */;\n            payload.retry = {\n                count: payload.retry ? payload.retry.count + 1 : 1,\n                lastFailureStatus: response.status,\n            };\n            onFailure();\n        }\n    });\n}\nfunction retryQueuedPayloads(reason, state, sendStrategy, trackType, reportError) {\n    if (reason === 0 /* RetryReason.AFTER_SUCCESS */ && state.queuedPayloads.isFull() && !state.queueFullReported) {\n        reportError({\n            message: \"Reached max \".concat(trackType, \" events size queued for upload: \").concat(MAX_QUEUE_BYTES_COUNT / ONE_MEBI_BYTE, \"MiB\"),\n            source: ErrorSource.AGENT,\n            startClocks: clocksNow(),\n        });\n        state.queueFullReported = true;\n    }\n    var previousQueue = state.queuedPayloads;\n    state.queuedPayloads = newPayloadQueue();\n    while (previousQueue.size() > 0) {\n        sendWithRetryStrategy(previousQueue.dequeue(), state, sendStrategy, trackType, reportError);\n    }\n}\nfunction shouldRetryRequest(response) {\n    return (response.type !== 'opaque' &&\n        ((response.status === 0 && !navigator.onLine) ||\n            response.status === 408 ||\n            response.status === 429 ||\n            isServerError(response.status)));\n}\nexport function newRetryState() {\n    return {\n        transportStatus: 0 /* TransportStatus.UP */,\n        currentBackoffTime: INITIAL_BACKOFF_TIME,\n        bandwidthMonitor: newBandwidthMonitor(),\n        queuedPayloads: newPayloadQueue(),\n        queueFullReported: false,\n    };\n}\nfunction newPayloadQueue() {\n    var queue = [];\n    return {\n        bytesCount: 0,\n        enqueue: function (payload) {\n            if (this.isFull()) {\n                return;\n            }\n            queue.push(payload);\n            this.bytesCount += payload.bytesCount;\n        },\n        first: function () {\n            return queue[0];\n        },\n        dequeue: function () {\n            var payload = queue.shift();\n            if (payload) {\n                this.bytesCount -= payload.bytesCount;\n            }\n            return payload;\n        },\n        size: function () {\n            return queue.length;\n        },\n        isFull: function () {\n            return this.bytesCount >= MAX_QUEUE_BYTES_COUNT;\n        },\n    };\n}\nfunction newBandwidthMonitor() {\n    return {\n        ongoingRequestCount: 0,\n        ongoingByteCount: 0,\n        canHandle: function (payload) {\n            return (this.ongoingRequestCount === 0 ||\n                (this.ongoingByteCount + payload.bytesCount <= MAX_ONGOING_BYTES_COUNT &&\n                    this.ongoingRequestCount < MAX_ONGOING_REQUESTS));\n        },\n        add: function (payload) {\n            this.ongoingRequestCount += 1;\n            this.ongoingByteCount += payload.bytesCount;\n        },\n        remove: function (payload) {\n            this.ongoingRequestCount -= 1;\n            this.ongoingByteCount -= payload.bytesCount;\n        },\n    };\n}\n//# sourceMappingURL=sendWithRetryStrategy.js.map","import { addTelemetryError } from '../domain/telemetry';\nimport { monitor } from '../tools/monitor';\nimport { addEventListener } from '../browser/addEventListener';\nimport { newRetryState, sendWithRetryStrategy } from './sendWithRetryStrategy';\nexport function createHttpRequest(endpointBuilder, bytesLimit, reportError) {\n    var retryState = newRetryState();\n    var sendStrategyForRetry = function (payload, onResponse) {\n        return fetchKeepAliveStrategy(endpointBuilder, bytesLimit, payload, onResponse);\n    };\n    return {\n        send: function (payload) {\n            sendWithRetryStrategy(payload, retryState, sendStrategyForRetry, endpointBuilder.trackType, reportError);\n        },\n        /**\n         * Since fetch keepalive behaves like regular fetch on Firefox,\n         * keep using sendBeaconStrategy on exit\n         */\n        sendOnExit: function (payload) {\n            sendBeaconStrategy(endpointBuilder, bytesLimit, payload);\n        },\n    };\n}\nfunction sendBeaconStrategy(endpointBuilder, bytesLimit, payload) {\n    var canUseBeacon = !!navigator.sendBeacon && payload.bytesCount < bytesLimit;\n    if (canUseBeacon) {\n        try {\n            var beaconUrl = endpointBuilder.build('beacon', payload);\n            var isQueued = navigator.sendBeacon(beaconUrl, payload.data);\n            if (isQueued) {\n                return;\n            }\n        }\n        catch (e) {\n            reportBeaconError(e);\n        }\n    }\n    var xhrUrl = endpointBuilder.build('xhr', payload);\n    sendXHR(xhrUrl, payload.data);\n}\nvar hasReportedBeaconError = false;\nfunction reportBeaconError(e) {\n    if (!hasReportedBeaconError) {\n        hasReportedBeaconError = true;\n        addTelemetryError(e);\n    }\n}\nexport function fetchKeepAliveStrategy(endpointBuilder, bytesLimit, payload, onResponse) {\n    var canUseKeepAlive = isKeepAliveSupported() && payload.bytesCount < bytesLimit;\n    if (canUseKeepAlive) {\n        var fetchUrl = endpointBuilder.build('fetch', payload);\n        fetch(fetchUrl, { method: 'POST', body: payload.data, keepalive: true, mode: 'cors' }).then(monitor(function (response) { return onResponse === null || onResponse === void 0 ? void 0 : onResponse({ status: response.status, type: response.type }); }), monitor(function () {\n            var xhrUrl = endpointBuilder.build('xhr', payload);\n            // failed to queue the request\n            sendXHR(xhrUrl, payload.data, onResponse);\n        }));\n    }\n    else {\n        var xhrUrl = endpointBuilder.build('xhr', payload);\n        sendXHR(xhrUrl, payload.data, onResponse);\n    }\n}\nfunction isKeepAliveSupported() {\n    // Request can throw, cf https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#errors\n    try {\n        return window.Request && 'keepalive' in new Request('http://a');\n    }\n    catch (_a) {\n        return false;\n    }\n}\nexport function sendXHR(url, data, onResponse) {\n    var request = new XMLHttpRequest();\n    request.open('POST', url, true);\n    if (data instanceof Blob) {\n        // When using a Blob instance, IE does not use its 'type' to define the 'Content-Type' header\n        // automatically, so the intake request ends up being rejected with an HTTP status 415\n        // Defining the header manually fixes this issue.\n        request.setRequestHeader('Content-Type', data.type);\n    }\n    addEventListener(\n    // allow untrusted event to acount for synthetic event dispatched by third party xhr wrapper\n    { allowUntrustedEvents: true }, request, 'loadend', function () {\n        onResponse === null || onResponse === void 0 ? void 0 : onResponse({ status: request.status });\n    }, {\n        // prevent multiple onResponse callbacks\n        // if the xhr instance is reused by a third party\n        once: true,\n    });\n    request.send(data);\n}\n//# sourceMappingURL=httpRequest.js.map","import { Observable } from '../tools/observable';\nimport { clearTimeout, setTimeout } from '../tools/timer';\n/**\n * Returns a \"flush controller\", responsible of notifying when flushing a pool of pending data needs\n * to happen. The implementation is designed to support both synchronous and asynchronous usages,\n * but relies on invariants described in each method documentation to keep a coherent state.\n */\nexport function createFlushController(_a) {\n    var messagesLimit = _a.messagesLimit, bytesLimit = _a.bytesLimit, durationLimit = _a.durationLimit, pageExitObservable = _a.pageExitObservable, sessionExpireObservable = _a.sessionExpireObservable;\n    var pageExitSubscription = pageExitObservable.subscribe(function (event) { return flush(event.reason); });\n    var sessionExpireSubscription = sessionExpireObservable.subscribe(function () { return flush('session_expire'); });\n    var flushObservable = new Observable(function () { return function () {\n        pageExitSubscription.unsubscribe();\n        sessionExpireSubscription.unsubscribe();\n    }; });\n    var currentBytesCount = 0;\n    var currentMessagesCount = 0;\n    function flush(flushReason) {\n        if (currentMessagesCount === 0) {\n            return;\n        }\n        var messagesCount = currentMessagesCount;\n        var bytesCount = currentBytesCount;\n        currentMessagesCount = 0;\n        currentBytesCount = 0;\n        cancelDurationLimitTimeout();\n        flushObservable.notify({\n            reason: flushReason,\n            messagesCount: messagesCount,\n            bytesCount: bytesCount,\n        });\n    }\n    var durationLimitTimeoutId;\n    function scheduleDurationLimitTimeout() {\n        if (durationLimitTimeoutId === undefined) {\n            durationLimitTimeoutId = setTimeout(function () {\n                flush('duration_limit');\n            }, durationLimit);\n        }\n    }\n    function cancelDurationLimitTimeout() {\n        clearTimeout(durationLimitTimeoutId);\n        durationLimitTimeoutId = undefined;\n    }\n    return {\n        flushObservable: flushObservable,\n        get messagesCount() {\n            return currentMessagesCount;\n        },\n        /**\n         * Notifies that a message will be added to a pool of pending messages waiting to be flushed.\n         *\n         * This function needs to be called synchronously, right before adding the message, so no flush\n         * event can happen after `notifyBeforeAddMessage` and before adding the message.\n         *\n         * @param estimatedMessageBytesCount: an estimation of the message bytes count once it is\n         * actually added.\n         */\n        notifyBeforeAddMessage: function (estimatedMessageBytesCount) {\n            if (currentBytesCount + estimatedMessageBytesCount >= bytesLimit) {\n                flush('bytes_limit');\n            }\n            // Consider the message to be added now rather than in `notifyAfterAddMessage`, because if no\n            // message was added yet and `notifyAfterAddMessage` is called asynchronously, we still want\n            // to notify when a flush is needed (for example on page exit).\n            currentMessagesCount += 1;\n            currentBytesCount += estimatedMessageBytesCount;\n            scheduleDurationLimitTimeout();\n        },\n        /**\n         * Notifies that a message *was* added to a pool of pending messages waiting to be flushed.\n         *\n         * This function can be called asynchronously after the message was added, but in this case it\n         * should not be called if a flush event occurred in between.\n         *\n         * @param messageBytesCountDiff: the difference between the estimated message bytes count and\n         * its actual bytes count once added to the pool.\n         */\n        notifyAfterAddMessage: function (messageBytesCountDiff) {\n            if (messageBytesCountDiff === void 0) { messageBytesCountDiff = 0; }\n            currentBytesCount += messageBytesCountDiff;\n            if (currentMessagesCount >= messagesLimit) {\n                flush('messages_limit');\n            }\n            else if (currentBytesCount >= bytesLimit) {\n                flush('bytes_limit');\n            }\n        },\n        /**\n         * Notifies that a message was removed from a pool of pending messages waiting to be flushed.\n         *\n         * This function needs to be called synchronously, right after removing the message, so no flush\n         * event can happen after removing the message and before `notifyAfterRemoveMessage`.\n         *\n         * @param messageBytesCount: the message bytes count that was added to the pool. Should\n         * correspond to the sum of bytes counts passed to `notifyBeforeAddMessage` and\n         * `notifyAfterAddMessage`.\n         */\n        notifyAfterRemoveMessage: function (messageBytesCount) {\n            currentBytesCount -= messageBytesCount;\n            currentMessagesCount -= 1;\n            if (currentMessagesCount === 0) {\n                cancelDurationLimitTimeout();\n            }\n        },\n    };\n}\n//# sourceMappingURL=flushController.js.map","import { combine, isTelemetryReplicationAllowed, startBatchWithReplica, } from '@datadog/browser-core';\nexport function startRumBatch(configuration, lifeCycle, telemetryEventObservable, reportError, pageExitObservable, sessionExpireObservable, createEncoder) {\n    var replica = configuration.replica;\n    var batch = startBatchWithReplica(configuration, {\n        endpoint: configuration.rumEndpointBuilder,\n        encoder: createEncoder(2 /* DeflateEncoderStreamId.RUM */),\n    }, replica && {\n        endpoint: replica.rumEndpointBuilder,\n        transformMessage: function (message) { return combine(message, { application: { id: replica.applicationId } }); },\n        encoder: createEncoder(3 /* DeflateEncoderStreamId.RUM_REPLICA */),\n    }, reportError, pageExitObservable, sessionExpireObservable);\n    lifeCycle.subscribe(13 /* LifeCycleEventType.RUM_EVENT_COLLECTED */, function (serverRumEvent) {\n        if (serverRumEvent.type === \"view\" /* RumEventType.VIEW */) {\n            batch.upsert(serverRumEvent, serverRumEvent.view.id);\n        }\n        else {\n            batch.add(serverRumEvent);\n        }\n    });\n    telemetryEventObservable.subscribe(function (event) { return batch.add(event, isTelemetryReplicationAllowed(configuration)); });\n    return batch;\n}\n//# sourceMappingURL=startRumBatch.js.map","import { createBatch } from './batch';\nimport { createHttpRequest } from './httpRequest';\nimport { createFlushController } from './flushController';\nexport function startBatchWithReplica(configuration, primary, replica, reportError, pageExitObservable, sessionExpireObservable, batchFactoryImp) {\n    if (batchFactoryImp === void 0) { batchFactoryImp = createBatch; }\n    var primaryBatch = createBatchFromConfig(configuration, primary);\n    var replicaBatch = replica && createBatchFromConfig(configuration, replica);\n    function createBatchFromConfig(configuration, _a) {\n        var endpoint = _a.endpoint, encoder = _a.encoder;\n        return batchFactoryImp({\n            encoder: encoder,\n            request: createHttpRequest(endpoint, configuration.batchBytesLimit, reportError),\n            flushController: createFlushController({\n                messagesLimit: configuration.batchMessagesLimit,\n                bytesLimit: configuration.batchBytesLimit,\n                durationLimit: configuration.flushTimeout,\n                pageExitObservable: pageExitObservable,\n                sessionExpireObservable: sessionExpireObservable,\n            }),\n            messageBytesLimit: configuration.messageBytesLimit,\n        });\n    }\n    return {\n        flushObservable: primaryBatch.flushController.flushObservable,\n        add: function (message, replicated) {\n            if (replicated === void 0) { replicated = true; }\n            primaryBatch.add(message);\n            if (replicaBatch && replicated) {\n                replicaBatch.add(replica.transformMessage ? replica.transformMessage(message) : message);\n            }\n        },\n        upsert: function (message, key) {\n            primaryBatch.upsert(message, key);\n            if (replicaBatch) {\n                replicaBatch.upsert(replica.transformMessage ? replica.transformMessage(message) : message, key);\n            }\n        },\n        stop: function () {\n            primaryBatch.stop();\n            if (replicaBatch) {\n                replicaBatch.stop();\n            }\n        },\n    };\n}\n//# sourceMappingURL=startBatchWithReplica.js.map","import { SESSION_TIME_OUT_DELAY, relativeNow, createValueHistory } from '@datadog/browser-core';\n/**\n * We want to attach to an event:\n * - the url corresponding to its start\n * - the referrer corresponding to the previous view url (or document referrer for initial view)\n */\nexport var URL_CONTEXT_TIME_OUT_DELAY = SESSION_TIME_OUT_DELAY;\nexport function startUrlContexts(lifeCycle, locationChangeObservable, location) {\n    var urlContextHistory = createValueHistory({ expireDelay: URL_CONTEXT_TIME_OUT_DELAY });\n    var previousViewUrl;\n    lifeCycle.subscribe(1 /* LifeCycleEventType.BEFORE_VIEW_CREATED */, function (_a) {\n        var startClocks = _a.startClocks;\n        var viewUrl = location.href;\n        urlContextHistory.add(buildUrlContext({\n            url: viewUrl,\n            referrer: !previousViewUrl ? document.referrer : previousViewUrl,\n        }), startClocks.relative);\n        previousViewUrl = viewUrl;\n    });\n    lifeCycle.subscribe(6 /* LifeCycleEventType.AFTER_VIEW_ENDED */, function (_a) {\n        var endClocks = _a.endClocks;\n        urlContextHistory.closeActive(endClocks.relative);\n    });\n    var locationChangeSubscription = locationChangeObservable.subscribe(function (_a) {\n        var newLocation = _a.newLocation;\n        var current = urlContextHistory.find();\n        if (current) {\n            var changeTime = relativeNow();\n            urlContextHistory.closeActive(changeTime);\n            urlContextHistory.add(buildUrlContext({\n                url: newLocation.href,\n                referrer: current.referrer,\n            }), changeTime);\n        }\n    });\n    function buildUrlContext(_a) {\n        var url = _a.url, referrer = _a.referrer;\n        return {\n            url: url,\n            referrer: referrer,\n        };\n    }\n    return {\n        findUrl: function (startTime) { return urlContextHistory.find(startTime); },\n        stop: function () {\n            locationChangeSubscription.unsubscribe();\n            urlContextHistory.stop();\n        },\n    };\n}\n//# sourceMappingURL=urlContexts.js.map","import { addEventListener, instrumentMethod, Observable, shallowClone } from '@datadog/browser-core';\nexport function createLocationChangeObservable(configuration, location) {\n    var currentLocation = shallowClone(location);\n    return new Observable(function (observable) {\n        var stopHistoryTracking = trackHistory(configuration, onLocationChange).stop;\n        var stopHashTracking = trackHash(configuration, onLocationChange).stop;\n        function onLocationChange() {\n            if (currentLocation.href === location.href) {\n                return;\n            }\n            var newLocation = shallowClone(location);\n            observable.notify({\n                newLocation: newLocation,\n                oldLocation: currentLocation,\n            });\n            currentLocation = newLocation;\n        }\n        return function () {\n            stopHistoryTracking();\n            stopHashTracking();\n        };\n    });\n}\nfunction trackHistory(configuration, onHistoryChange) {\n    var stopInstrumentingPushState = instrumentMethod(getHistoryInstrumentationTarget('pushState'), 'pushState', function (_a) {\n        var onPostCall = _a.onPostCall;\n        onPostCall(onHistoryChange);\n    }).stop;\n    var stopInstrumentingReplaceState = instrumentMethod(getHistoryInstrumentationTarget('replaceState'), 'replaceState', function (_a) {\n        var onPostCall = _a.onPostCall;\n        onPostCall(onHistoryChange);\n    }).stop;\n    var removeListener = addEventListener(configuration, window, \"popstate\" /* DOM_EVENT.POP_STATE */, onHistoryChange).stop;\n    return {\n        stop: function () {\n            stopInstrumentingPushState();\n            stopInstrumentingReplaceState();\n            removeListener();\n        },\n    };\n}\nfunction trackHash(configuration, onHashChange) {\n    return addEventListener(configuration, window, \"hashchange\" /* DOM_EVENT.HASH_CHANGE */, onHashChange);\n}\nfunction getHistoryInstrumentationTarget(methodName) {\n    // Ideally we should always instument the method on the prototype, however some frameworks (e.g [Next.js](https://github.com/vercel/next.js/blob/d3f5532065f3e3bb84fb54bd2dfd1a16d0f03a21/packages/next/src/client/components/app-router.tsx#L429))\n    // are wrapping the instance method. In that case we should also wrap the instance method.\n    return Object.prototype.hasOwnProperty.call(history, methodName) ? history : History.prototype;\n}\n//# sourceMappingURL=locationChangeObservable.js.map","import { SESSION_TIME_OUT_DELAY, createValueHistory } from '@datadog/browser-core';\nexport var FEATURE_FLAG_CONTEXT_TIME_OUT_DELAY = SESSION_TIME_OUT_DELAY;\nexport var BYTES_COMPUTATION_THROTTLING_DELAY = 200;\n/**\n * Start feature flag contexts\n *\n * Feature flag contexts follow the life of views.\n * A new context is added when a view is created and ended when the view is ended\n *\n * Note: we choose not to add a new context at each evaluation to save memory\n */\nexport function startFeatureFlagContexts(lifeCycle, customerDataTracker) {\n    var featureFlagContexts = createValueHistory({\n        expireDelay: FEATURE_FLAG_CONTEXT_TIME_OUT_DELAY,\n    });\n    lifeCycle.subscribe(1 /* LifeCycleEventType.BEFORE_VIEW_CREATED */, function (_a) {\n        var startClocks = _a.startClocks;\n        featureFlagContexts.add({}, startClocks.relative);\n        customerDataTracker.resetCustomerData();\n    });\n    lifeCycle.subscribe(6 /* LifeCycleEventType.AFTER_VIEW_ENDED */, function (_a) {\n        var endClocks = _a.endClocks;\n        featureFlagContexts.closeActive(endClocks.relative);\n    });\n    return {\n        findFeatureFlagEvaluations: function (startTime) { return featureFlagContexts.find(startTime); },\n        addFeatureFlagEvaluation: function (key, value) {\n            var currentContext = featureFlagContexts.find();\n            if (currentContext) {\n                currentContext[key] = value;\n                customerDataTracker.updateCustomerData(currentContext);\n            }\n        },\n        stop: function () { return customerDataTracker.stop(); },\n    };\n}\n//# sourceMappingURL=featureFlagContext.js.map","import { includes, performDraw, ONE_SECOND, addTelemetryDebug, setInterval, } from '@datadog/browser-core';\nexport var MEASURES_PERIOD_DURATION = 10 * ONE_SECOND;\nvar currentPeriodMeasures;\nvar currentBatchMeasures;\nvar batchHasRumEvent;\nexport function startCustomerDataTelemetry(configuration, telemetry, lifeCycle, customerDataTrackerManager, batchFlushObservable) {\n    var customerDataTelemetryEnabled = telemetry.enabled && performDraw(configuration.customerDataTelemetrySampleRate);\n    if (!customerDataTelemetryEnabled) {\n        return;\n    }\n    initCurrentPeriodMeasures();\n    initCurrentBatchMeasures();\n    // We measure the data of every view updates even if there could only be one per batch due to the upsert\n    // It means that contexts bytes count sums can be higher than it really is\n    lifeCycle.subscribe(13 /* LifeCycleEventType.RUM_EVENT_COLLECTED */, function (event) {\n        batchHasRumEvent = true;\n        updateMeasure(currentBatchMeasures.globalContextBytes, customerDataTrackerManager.getOrCreateTracker(2 /* CustomerDataType.GlobalContext */).getBytesCount());\n        updateMeasure(currentBatchMeasures.userContextBytes, customerDataTrackerManager.getOrCreateTracker(1 /* CustomerDataType.User */).getBytesCount());\n        updateMeasure(currentBatchMeasures.featureFlagBytes, includes([\"view\" /* RumEventType.VIEW */, \"error\" /* RumEventType.ERROR */], event.type)\n            ? customerDataTrackerManager.getOrCreateTracker(0 /* CustomerDataType.FeatureFlag */).getBytesCount()\n            : 0);\n    });\n    batchFlushObservable.subscribe(function (_a) {\n        var bytesCount = _a.bytesCount, messagesCount = _a.messagesCount;\n        // Don't measure batch that only contains telemetry events to avoid batch sending loop\n        // It could happen because after each batch we are adding a customer data measures telemetry event to the next one\n        if (!batchHasRumEvent) {\n            return;\n        }\n        currentPeriodMeasures.batchCount += 1;\n        updateMeasure(currentPeriodMeasures.batchBytesCount, bytesCount);\n        updateMeasure(currentPeriodMeasures.batchMessagesCount, messagesCount);\n        mergeMeasure(currentPeriodMeasures.globalContextBytes, currentBatchMeasures.globalContextBytes);\n        mergeMeasure(currentPeriodMeasures.userContextBytes, currentBatchMeasures.userContextBytes);\n        mergeMeasure(currentPeriodMeasures.featureFlagBytes, currentBatchMeasures.featureFlagBytes);\n        initCurrentBatchMeasures();\n    });\n    setInterval(sendCurrentPeriodMeasures, MEASURES_PERIOD_DURATION);\n}\nfunction sendCurrentPeriodMeasures() {\n    if (currentPeriodMeasures.batchCount === 0) {\n        return;\n    }\n    addTelemetryDebug('Customer data measures', currentPeriodMeasures);\n    initCurrentPeriodMeasures();\n}\nfunction createMeasure() {\n    return { min: Infinity, max: 0, sum: 0 };\n}\nfunction updateMeasure(measure, value) {\n    measure.sum += value;\n    measure.min = Math.min(measure.min, value);\n    measure.max = Math.max(measure.max, value);\n}\nfunction mergeMeasure(target, source) {\n    target.sum += source.sum;\n    target.min = Math.min(target.min, source.min);\n    target.max = Math.max(target.max, source.max);\n}\nfunction initCurrentPeriodMeasures() {\n    currentPeriodMeasures = {\n        batchCount: 0,\n        batchBytesCount: createMeasure(),\n        batchMessagesCount: createMeasure(),\n        globalContextBytes: createMeasure(),\n        userContextBytes: createMeasure(),\n        featureFlagBytes: createMeasure(),\n    };\n}\nfunction initCurrentBatchMeasures() {\n    batchHasRumEvent = false;\n    currentBatchMeasures = {\n        globalContextBytes: createMeasure(),\n        userContextBytes: createMeasure(),\n        featureFlagBytes: createMeasure(),\n    };\n}\n//# sourceMappingURL=startCustomerDataTelemetry.js.map","import { elapsed, createValueHistory, SESSION_TIME_OUT_DELAY, toServerDuration, addEventListeners, relativeNow, } from '@datadog/browser-core';\n// Arbitrary value to cap number of element for memory consumption in the browser\nexport var MAX_PAGE_STATE_ENTRIES = 4000;\n// Arbitrary value to cap number of element for backend & to save bandwidth\nexport var MAX_PAGE_STATE_ENTRIES_SELECTABLE = 500;\nexport var PAGE_STATE_CONTEXT_TIME_OUT_DELAY = SESSION_TIME_OUT_DELAY;\nexport function startPageStateHistory(configuration, maxPageStateEntriesSelectable) {\n    if (maxPageStateEntriesSelectable === void 0) { maxPageStateEntriesSelectable = MAX_PAGE_STATE_ENTRIES_SELECTABLE; }\n    var pageStateEntryHistory = createValueHistory({\n        expireDelay: PAGE_STATE_CONTEXT_TIME_OUT_DELAY,\n        maxEntries: MAX_PAGE_STATE_ENTRIES,\n    });\n    var currentPageState;\n    addPageState(getPageState(), relativeNow());\n    var stopEventListeners = addEventListeners(configuration, window, [\n        \"pageshow\" /* DOM_EVENT.PAGE_SHOW */,\n        \"focus\" /* DOM_EVENT.FOCUS */,\n        \"blur\" /* DOM_EVENT.BLUR */,\n        \"visibilitychange\" /* DOM_EVENT.VISIBILITY_CHANGE */,\n        \"resume\" /* DOM_EVENT.RESUME */,\n        \"freeze\" /* DOM_EVENT.FREEZE */,\n        \"pagehide\" /* DOM_EVENT.PAGE_HIDE */,\n    ], function (event) {\n        addPageState(computePageState(event), event.timeStamp);\n    }, { capture: true }).stop;\n    function addPageState(nextPageState, startTime) {\n        if (startTime === void 0) { startTime = relativeNow(); }\n        if (nextPageState === currentPageState) {\n            return;\n        }\n        currentPageState = nextPageState;\n        pageStateEntryHistory.closeActive(startTime);\n        pageStateEntryHistory.add({ state: currentPageState, startTime: startTime }, startTime);\n    }\n    var pageStateHistory = {\n        findAll: function (eventStartTime, duration) {\n            var pageStateEntries = pageStateEntryHistory.findAll(eventStartTime, duration);\n            if (pageStateEntries.length === 0) {\n                return;\n            }\n            var pageStateServerEntries = [];\n            // limit the number of entries to return\n            var limit = Math.max(0, pageStateEntries.length - maxPageStateEntriesSelectable);\n            // loop page state entries backward to return the selected ones in desc order\n            for (var index = pageStateEntries.length - 1; index >= limit; index--) {\n                var pageState = pageStateEntries[index];\n                // compute the start time relative to the event start time (ex: to be relative to the view start time)\n                var relativeStartTime = elapsed(eventStartTime, pageState.startTime);\n                pageStateServerEntries.push({\n                    state: pageState.state,\n                    start: toServerDuration(relativeStartTime),\n                });\n            }\n            return pageStateServerEntries;\n        },\n        wasInPageStateAt: function (state, startTime) {\n            return pageStateHistory.wasInPageStateDuringPeriod(state, startTime, 0);\n        },\n        wasInPageStateDuringPeriod: function (state, startTime, duration) {\n            return pageStateEntryHistory.findAll(startTime, duration).some(function (pageState) { return pageState.state === state; });\n        },\n        addPageState: addPageState,\n        stop: function () {\n            stopEventListeners();\n            pageStateEntryHistory.stop();\n        },\n    };\n    return pageStateHistory;\n}\nfunction computePageState(event) {\n    if (event.type === \"freeze\" /* DOM_EVENT.FREEZE */) {\n        return \"frozen\" /* PageState.FROZEN */;\n    }\n    else if (event.type === \"pagehide\" /* DOM_EVENT.PAGE_HIDE */) {\n        return event.persisted ? \"frozen\" /* PageState.FROZEN */ : \"terminated\" /* PageState.TERMINATED */;\n    }\n    return getPageState();\n}\nfunction getPageState() {\n    if (document.visibilityState === 'hidden') {\n        return \"hidden\" /* PageState.HIDDEN */;\n    }\n    if (document.hasFocus()) {\n        return \"active\" /* PageState.ACTIVE */;\n    }\n    return \"passive\" /* PageState.PASSIVE */;\n}\n//# sourceMappingURL=pageStateHistory.js.map","import { setInterval, clearInterval, Observable, addEventListener, ONE_SECOND, findCommaSeparatedValue, find, } from '@datadog/browser-core';\nexport function createCookieObservable(configuration, cookieName) {\n    var detectCookieChangeStrategy = window.cookieStore\n        ? listenToCookieStoreChange(configuration)\n        : watchCookieFallback;\n    return new Observable(function (observable) {\n        return detectCookieChangeStrategy(cookieName, function (event) { return observable.notify(event); });\n    });\n}\nfunction listenToCookieStoreChange(configuration) {\n    return function (cookieName, callback) {\n        var listener = addEventListener(configuration, window.cookieStore, \"change\" /* DOM_EVENT.CHANGE */, function (event) {\n            // Based on our experimentation, we're assuming that entries for the same cookie cannot be in both the 'changed' and 'deleted' arrays.\n            // However, due to ambiguity in the specification, we asked for clarification: https://github.com/WICG/cookie-store/issues/226\n            var changeEvent = find(event.changed, function (event) { return event.name === cookieName; }) ||\n                find(event.deleted, function (event) { return event.name === cookieName; });\n            if (changeEvent) {\n                callback(changeEvent.value);\n            }\n        });\n        return listener.stop;\n    };\n}\nexport var WATCH_COOKIE_INTERVAL_DELAY = ONE_SECOND;\nfunction watchCookieFallback(cookieName, callback) {\n    var previousCookieValue = findCommaSeparatedValue(document.cookie, cookieName);\n    var watchCookieIntervalId = setInterval(function () {\n        var cookieValue = findCommaSeparatedValue(document.cookie, cookieName);\n        if (cookieValue !== previousCookieValue) {\n            callback(cookieValue);\n        }\n    }, WATCH_COOKIE_INTERVAL_DELAY);\n    return function () {\n        clearInterval(watchCookieIntervalId);\n    };\n}\n//# sourceMappingURL=cookieObservable.js.map","import { getInitCookie } from '@datadog/browser-core';\nimport { createCookieObservable } from '../../browser/cookieObservable';\nexport var CI_VISIBILITY_TEST_ID_COOKIE_NAME = 'datadog-ci-visibility-test-execution-id';\nexport function startCiVisibilityContext(configuration, cookieObservable) {\n    var _a;\n    if (cookieObservable === void 0) { cookieObservable = createCookieObservable(configuration, CI_VISIBILITY_TEST_ID_COOKIE_NAME); }\n    var testExecutionId = getInitCookie(CI_VISIBILITY_TEST_ID_COOKIE_NAME) || ((_a = window.Cypress) === null || _a === void 0 ? void 0 : _a.env('traceId'));\n    var cookieObservableSubscription = cookieObservable.subscribe(function (value) {\n        testExecutionId = value;\n    });\n    return {\n        get: function () {\n            if (typeof testExecutionId === 'string') {\n                return {\n                    test_execution_id: testExecutionId,\n                };\n            }\n        },\n        stop: function () { return cookieObservableSubscription.unsubscribe(); },\n    };\n}\n//# sourceMappingURL=ciVisibilityContext.js.map","import { INTAKE_SITE_STAGING, INTAKE_SITE_US1, INTAKE_SITE_EU1 } from '@datadog/browser-core';\nexport function getSessionReplayUrl(configuration, _a) {\n    var session = _a.session, viewContext = _a.viewContext, errorType = _a.errorType;\n    var sessionId = session ? session.id : 'no-session-id';\n    var parameters = [];\n    if (errorType !== undefined) {\n        parameters.push(\"error-type=\".concat(errorType));\n    }\n    if (viewContext) {\n        parameters.push(\"seed=\".concat(viewContext.id));\n        parameters.push(\"from=\".concat(viewContext.startClocks.timeStamp));\n    }\n    var origin = getDatadogSiteUrl(configuration);\n    var path = \"/rum/replay/sessions/\".concat(sessionId);\n    return \"\".concat(origin).concat(path, \"?\").concat(parameters.join('&'));\n}\nexport function getDatadogSiteUrl(rumConfiguration) {\n    var site = rumConfiguration.site;\n    var subdomain = rumConfiguration.subdomain || getSiteDefaultSubdomain(rumConfiguration);\n    return \"https://\".concat(subdomain ? \"\".concat(subdomain, \".\") : '').concat(site);\n}\nfunction getSiteDefaultSubdomain(configuration) {\n    switch (configuration.site) {\n        case INTAKE_SITE_US1:\n        case INTAKE_SITE_EU1:\n            return 'app';\n        case INTAKE_SITE_STAGING:\n            return 'dd';\n        default:\n            return undefined;\n    }\n}\n//# sourceMappingURL=getSessionReplayUrl.js.map","export var MAX_STATS_HISTORY = 10;\nvar statsPerView;\nexport function getSegmentsCount(viewId) {\n    return getOrCreateReplayStats(viewId).segments_count;\n}\nexport function addSegment(viewId) {\n    getOrCreateReplayStats(viewId).segments_count += 1;\n}\nexport function addRecord(viewId) {\n    getOrCreateReplayStats(viewId).records_count += 1;\n}\nexport function addWroteData(viewId, additionalBytesCount) {\n    getOrCreateReplayStats(viewId).segments_total_raw_size += additionalBytesCount;\n}\nexport function getReplayStats(viewId) {\n    return statsPerView === null || statsPerView === void 0 ? void 0 : statsPerView.get(viewId);\n}\nexport function resetReplayStats() {\n    statsPerView = undefined;\n}\nfunction getOrCreateReplayStats(viewId) {\n    if (!statsPerView) {\n        statsPerView = new Map();\n    }\n    var replayStats;\n    if (statsPerView.has(viewId)) {\n        replayStats = statsPerView.get(viewId);\n    }\n    else {\n        replayStats = {\n            records_count: 0,\n            segments_count: 0,\n            segments_total_raw_size: 0,\n        };\n        statsPerView.set(viewId, replayStats);\n        if (statsPerView.size > MAX_STATS_HISTORY) {\n            deleteOldestStats();\n        }\n    }\n    return replayStats;\n}\nfunction deleteOldestStats() {\n    if (!statsPerView) {\n        return;\n    }\n    if (statsPerView.keys) {\n        var toDelete = statsPerView.keys().next().value;\n        if (toDelete) {\n            statsPerView.delete(toDelete);\n        }\n    }\n    else {\n        // IE11 doesn't support map.keys\n        var isFirst_1 = true;\n        statsPerView.forEach(function (_value, key) {\n            if (isFirst_1) {\n                statsPerView.delete(key);\n                isFirst_1 = false;\n            }\n        });\n    }\n}\n//# sourceMappingURL=replayStats.js.map","import { buildUrl } from '@datadog/browser-core';\nimport { getParentNode, isNodeShadowRoot, CENSORED_STRING_MARK, shouldMaskNode } from '@datadog/browser-rum-core';\nvar serializedNodeIds = new WeakMap();\nexport function hasSerializedNode(node) {\n    return serializedNodeIds.has(node);\n}\nexport function nodeAndAncestorsHaveSerializedNode(node) {\n    var current = node;\n    while (current) {\n        if (!hasSerializedNode(current) && !isNodeShadowRoot(current)) {\n            return false;\n        }\n        current = getParentNode(current);\n    }\n    return true;\n}\nexport function getSerializedNodeId(node) {\n    return serializedNodeIds.get(node);\n}\nexport function setSerializedNodeId(node, serializeNodeId) {\n    serializedNodeIds.set(node, serializeNodeId);\n}\n/**\n * Get the element \"value\" to be serialized as an attribute or an input update record. It respects\n * the input privacy mode of the element.\n * PERFROMANCE OPTIMIZATION: Assumes that privacy level `HIDDEN` is never encountered because of earlier checks.\n */\nexport function getElementInputValue(element, nodePrivacyLevel) {\n    /*\n     BROWSER SPEC NOTE: <input>, <select>\n     For some <input> elements, the `value` is an exceptional property/attribute that has the\n     value synced between el.value and el.getAttribute()\n     input[type=button,checkbox,hidden,image,radio,reset,submit]\n     */\n    var tagName = element.tagName;\n    var value = element.value;\n    if (shouldMaskNode(element, nodePrivacyLevel)) {\n        var type = element.type;\n        if (tagName === 'INPUT' && (type === 'button' || type === 'submit' || type === 'reset')) {\n            // Overrule `MASK` privacy level for button-like element values, as they are used during replay\n            // to display their label. They can still be hidden via the \"hidden\" privacy attribute or class name.\n            return value;\n        }\n        else if (!value || tagName === 'OPTION') {\n            // <Option> value provides no benefit\n            return;\n        }\n        return CENSORED_STRING_MARK;\n    }\n    if (tagName === 'OPTION' || tagName === 'SELECT') {\n        return element.value;\n    }\n    if (tagName !== 'INPUT' && tagName !== 'TEXTAREA') {\n        return;\n    }\n    return value;\n}\nexport var URL_IN_CSS_REF = /url\\((?:(')([^']*)'|(\")([^\"]*)\"|([^)]*))\\)/gm;\nexport var ABSOLUTE_URL = /^[A-Za-z]+:|^\\/\\//;\nexport var DATA_URI = /^data:.*,/i;\nexport function switchToAbsoluteUrl(cssText, cssHref) {\n    return cssText.replace(URL_IN_CSS_REF, function (matchingSubstring, singleQuote, urlWrappedInSingleQuotes, doubleQuote, urlWrappedInDoubleQuotes, urlNotWrappedInQuotes) {\n        var url = urlWrappedInSingleQuotes || urlWrappedInDoubleQuotes || urlNotWrappedInQuotes;\n        if (!cssHref || !url || ABSOLUTE_URL.test(url) || DATA_URI.test(url)) {\n            return matchingSubstring;\n        }\n        var quote = singleQuote || doubleQuote || '';\n        return \"url(\".concat(quote).concat(makeUrlAbsolute(url, cssHref)).concat(quote, \")\");\n    });\n}\nexport function makeUrlAbsolute(url, baseUrl) {\n    try {\n        return buildUrl(url, baseUrl).href;\n    }\n    catch (_a) {\n        return url;\n    }\n}\nvar TAG_NAME_REGEX = /[^a-z1-6-_]/;\nexport function getValidTagName(tagName) {\n    var processedTagName = tagName.toLowerCase().trim();\n    if (TAG_NAME_REGEX.test(processedTagName)) {\n        // if the tag name is odd and we cannot extract\n        // anything from the string, then we return a\n        // generic div\n        return 'div';\n    }\n    return processedTagName;\n}\nexport function censoredImageForSize(width, height) {\n    return \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='\".concat(width, \"' height='\").concat(height, \"' style='background-color:silver'%3E%3C/svg%3E\");\n}\n//# sourceMappingURL=serializationUtils.js.map","export var RecordType = {\n    FullSnapshot: 2,\n    IncrementalSnapshot: 3,\n    Meta: 4,\n    Focus: 6,\n    ViewEnd: 7,\n    VisualViewport: 8,\n    FrustrationRecord: 9,\n};\nexport var NodeType = {\n    Document: 0,\n    DocumentType: 1,\n    Element: 2,\n    Text: 3,\n    CDATA: 4,\n    DocumentFragment: 11,\n};\nexport var IncrementalSource = {\n    Mutation: 0,\n    MouseMove: 1,\n    MouseInteraction: 2,\n    Scroll: 3,\n    ViewportResize: 4,\n    Input: 5,\n    TouchMove: 6,\n    MediaInteraction: 7,\n    StyleSheetRule: 8,\n    // CanvasMutation : 9,\n    // Font : 10,\n};\nexport var MouseInteractionType = {\n    MouseUp: 0,\n    MouseDown: 1,\n    Click: 2,\n    ContextMenu: 3,\n    DblClick: 4,\n    Focus: 5,\n    Blur: 6,\n    TouchStart: 7,\n    TouchEnd: 9,\n};\nexport var MediaInteractionType = {\n    Play: 0,\n    Pause: 1,\n};\n//# sourceMappingURL=sessionReplayConstants.js.map","export function serializeStyleSheets(cssStyleSheets) {\n    if (cssStyleSheets === undefined || cssStyleSheets.length === 0) {\n        return undefined;\n    }\n    return cssStyleSheets.map(function (cssStyleSheet) {\n        var rules = cssStyleSheet.cssRules || cssStyleSheet.rules;\n        var cssRules = Array.from(rules, function (cssRule) { return cssRule.cssText; });\n        var styleSheet = {\n            cssRules: cssRules,\n            disabled: cssStyleSheet.disabled || undefined,\n            media: cssStyleSheet.media.length > 0 ? Array.from(cssStyleSheet.media) : undefined,\n        };\n        return styleSheet;\n    });\n}\n//# sourceMappingURL=serializeStyleSheets.js.map","import { startsWith } from '@datadog/browser-core';\nimport { NodePrivacyLevel, PRIVACY_ATTR_NAME, CENSORED_STRING_MARK, CENSORED_IMG_MARK, STABLE_ATTRIBUTES, isLongDataUrl, sanitizeDataUrl, } from '@datadog/browser-rum-core';\nimport { censoredImageForSize } from './serializationUtils';\nexport function serializeAttribute(element, nodePrivacyLevel, attributeName, configuration) {\n    if (nodePrivacyLevel === NodePrivacyLevel.HIDDEN) {\n        // dup condition for direct access case\n        return null;\n    }\n    var attributeValue = element.getAttribute(attributeName);\n    if (nodePrivacyLevel === NodePrivacyLevel.MASK &&\n        attributeName !== PRIVACY_ATTR_NAME &&\n        !STABLE_ATTRIBUTES.includes(attributeName) &&\n        attributeName !== configuration.actionNameAttribute) {\n        var tagName = element.tagName;\n        switch (attributeName) {\n            // Mask Attribute text content\n            case 'title':\n            case 'alt':\n            case 'placeholder':\n                return CENSORED_STRING_MARK;\n        }\n        // mask image URLs\n        if (tagName === 'IMG' && (attributeName === 'src' || attributeName === 'srcset')) {\n            // generate image with similar dimension than the original to have the same rendering behaviour\n            var image = element;\n            if (image.naturalWidth > 0) {\n                return censoredImageForSize(image.naturalWidth, image.naturalHeight);\n            }\n            var _a = element.getBoundingClientRect(), width = _a.width, height = _a.height;\n            if (width > 0 || height > 0) {\n                return censoredImageForSize(width, height);\n            }\n            // if we can't get the image size, fallback to the censored image\n            return CENSORED_IMG_MARK;\n        }\n        // mask source URLs\n        if (tagName === 'SOURCE' && (attributeName === 'src' || attributeName === 'srcset')) {\n            return CENSORED_IMG_MARK;\n        }\n        // mask <a> URLs\n        if (tagName === 'A' && attributeName === 'href') {\n            return CENSORED_STRING_MARK;\n        }\n        // mask data-* attributes\n        if (attributeValue && startsWith(attributeName, 'data-')) {\n            // Exception: it's safe to reveal the `${PRIVACY_ATTR_NAME}` attr\n            return CENSORED_STRING_MARK;\n        }\n        // mask iframe srcdoc\n        if (tagName === 'IFRAME' && attributeName === 'srcdoc') {\n            return CENSORED_STRING_MARK;\n        }\n    }\n    if (!attributeValue || typeof attributeValue !== 'string') {\n        return attributeValue;\n    }\n    // Minimum Fix for customer.\n    if (isLongDataUrl(attributeValue)) {\n        return sanitizeDataUrl(attributeValue);\n    }\n    return attributeValue;\n}\n//# sourceMappingURL=serializeAttribute.js.map","import { NodePrivacyLevel, shouldMaskNode } from '@datadog/browser-rum-core';\nimport { isSafari } from '@datadog/browser-core';\nimport { getElementInputValue, switchToAbsoluteUrl, getValidTagName } from './serializationUtils';\nimport { serializeAttribute } from './serializeAttribute';\nexport function serializeAttributes(element, nodePrivacyLevel, options) {\n    var _a;\n    if (nodePrivacyLevel === NodePrivacyLevel.HIDDEN) {\n        return {};\n    }\n    var safeAttrs = {};\n    var tagName = getValidTagName(element.tagName);\n    var doc = element.ownerDocument;\n    for (var i = 0; i < element.attributes.length; i += 1) {\n        var attribute = element.attributes.item(i);\n        var attributeName = attribute.name;\n        var attributeValue = serializeAttribute(element, nodePrivacyLevel, attributeName, options.configuration);\n        if (attributeValue !== null) {\n            safeAttrs[attributeName] = attributeValue;\n        }\n    }\n    if (element.value &&\n        (tagName === 'textarea' || tagName === 'select' || tagName === 'option' || tagName === 'input')) {\n        var formValue = getElementInputValue(element, nodePrivacyLevel);\n        if (formValue !== undefined) {\n            safeAttrs.value = formValue;\n        }\n    }\n    /**\n     * <Option> can be selected, which occurs if its `value` matches ancestor `<Select>.value`\n     */\n    if (tagName === 'option' && nodePrivacyLevel === NodePrivacyLevel.ALLOW) {\n        // For privacy=`MASK`, all the values would be the same, so skip.\n        var optionElement = element;\n        if (optionElement.selected) {\n            safeAttrs.selected = optionElement.selected;\n        }\n    }\n    // remote css\n    if (tagName === 'link') {\n        var stylesheet = Array.from(doc.styleSheets).find(function (s) { return s.href === element.href; });\n        var cssText = getCssRulesString(stylesheet);\n        if (cssText && stylesheet) {\n            safeAttrs._cssText = cssText;\n        }\n    }\n    // dynamic stylesheet\n    if (tagName === 'style' && element.sheet) {\n        var cssText = getCssRulesString(element.sheet);\n        if (cssText) {\n            safeAttrs._cssText = cssText;\n        }\n    }\n    /**\n     * Forms: input[type=checkbox,radio]\n     * The `checked` property for <input> is a little bit special:\n     * 1. el.checked is a setter that returns if truthy.\n     * 2. getAttribute returns the string value\n     * getAttribute('checked') does not sync with `Element.checked`, so use JS property\n     * NOTE: `checked` property exists on `HTMLInputElement`. For serializer assumptions, we check for type=radio|check.\n     */\n    var inputElement = element;\n    if (tagName === 'input' && (inputElement.type === 'radio' || inputElement.type === 'checkbox')) {\n        if (nodePrivacyLevel === NodePrivacyLevel.ALLOW) {\n            safeAttrs.checked = !!inputElement.checked;\n        }\n        else if (shouldMaskNode(inputElement, nodePrivacyLevel)) {\n            delete safeAttrs.checked;\n        }\n    }\n    /**\n     * Serialize the media playback state\n     */\n    if (tagName === 'audio' || tagName === 'video') {\n        var mediaElement = element;\n        safeAttrs.rr_mediaState = mediaElement.paused ? 'paused' : 'played';\n    }\n    /**\n     * Serialize the scroll state for each element only for full snapshot\n     */\n    var scrollTop;\n    var scrollLeft;\n    var serializationContext = options.serializationContext;\n    switch (serializationContext.status) {\n        case 0 /* SerializationContextStatus.INITIAL_FULL_SNAPSHOT */:\n            scrollTop = Math.round(element.scrollTop);\n            scrollLeft = Math.round(element.scrollLeft);\n            if (scrollTop || scrollLeft) {\n                serializationContext.elementsScrollPositions.set(element, { scrollTop: scrollTop, scrollLeft: scrollLeft });\n            }\n            break;\n        case 1 /* SerializationContextStatus.SUBSEQUENT_FULL_SNAPSHOT */:\n            if (serializationContext.elementsScrollPositions.has(element)) {\n                ;\n                (_a = serializationContext.elementsScrollPositions.get(element), scrollTop = _a.scrollTop, scrollLeft = _a.scrollLeft);\n            }\n            break;\n    }\n    if (scrollLeft) {\n        safeAttrs.rr_scrollLeft = scrollLeft;\n    }\n    if (scrollTop) {\n        safeAttrs.rr_scrollTop = scrollTop;\n    }\n    return safeAttrs;\n}\nexport function getCssRulesString(cssStyleSheet) {\n    if (!cssStyleSheet) {\n        return null;\n    }\n    var rules;\n    try {\n        rules = cssStyleSheet.rules || cssStyleSheet.cssRules;\n    }\n    catch (_a) {\n        // if css is protected by CORS we cannot access cssRules see: https://www.w3.org/TR/cssom-1/#the-cssstylesheet-interface\n    }\n    if (!rules) {\n        return null;\n    }\n    var styleSheetCssText = Array.from(rules, isSafari() ? getCssRuleStringForSafari : getCssRuleString).join('');\n    return switchToAbsoluteUrl(styleSheetCssText, cssStyleSheet.href);\n}\nfunction getCssRuleStringForSafari(rule) {\n    // Safari does not escape attribute selectors containing : properly\n    // https://bugs.webkit.org/show_bug.cgi?id=184604\n    if (isCSSStyleRule(rule) && rule.selectorText.includes(':')) {\n        // This regex replaces [foo:bar] by [foo\\\\:bar]\n        var escapeColon = /(\\[[\\w-]+[^\\\\])(:[^\\]]+\\])/g;\n        return rule.cssText.replace(escapeColon, '$1\\\\$2');\n    }\n    return getCssRuleString(rule);\n}\nfunction getCssRuleString(rule) {\n    // If it's an @import rule, try to inline sub-rules recursively with `getCssRulesString`. This\n    // operation can fail if the imported stylesheet is protected by CORS, in which case we fallback\n    // to the @import rule CSS text.\n    return (isCSSImportRule(rule) && getCssRulesString(rule.styleSheet)) || rule.cssText;\n}\nfunction isCSSImportRule(rule) {\n    return 'styleSheet' in rule;\n}\nfunction isCSSStyleRule(rule) {\n    return 'selectorText' in rule;\n}\n//# sourceMappingURL=serializeAttributes.js.map","import { reducePrivacyLevel, getNodeSelfPrivacyLevel, getTextContent, isNodeShadowRoot, hasChildNodes, forEachChildNodes, NodePrivacyLevel, PRIVACY_ATTR_NAME, PRIVACY_ATTR_VALUE_HIDDEN, } from '@datadog/browser-rum-core';\nimport { assign } from '@datadog/browser-core';\nimport { NodeType } from '../../../types';\nimport { getSerializedNodeId, getValidTagName, setSerializedNodeId } from './serializationUtils';\nimport { serializeStyleSheets } from './serializeStyleSheets';\nimport { serializeAttributes } from './serializeAttributes';\nexport function serializeNodeWithId(node, options) {\n    var serializedNode = serializeNode(node, options);\n    if (!serializedNode) {\n        return null;\n    }\n    // Try to reuse the previous id\n    var id = getSerializedNodeId(node) || generateNextId();\n    var serializedNodeWithId = serializedNode;\n    serializedNodeWithId.id = id;\n    setSerializedNodeId(node, id);\n    if (options.serializedNodeIds) {\n        options.serializedNodeIds.add(id);\n    }\n    return serializedNodeWithId;\n}\nvar _nextId = 1;\nexport function generateNextId() {\n    return _nextId++;\n}\nexport function serializeChildNodes(node, options) {\n    var result = [];\n    forEachChildNodes(node, function (childNode) {\n        var serializedChildNode = serializeNodeWithId(childNode, options);\n        if (serializedChildNode) {\n            result.push(serializedChildNode);\n        }\n    });\n    return result;\n}\nfunction serializeNode(node, options) {\n    switch (node.nodeType) {\n        case node.DOCUMENT_NODE:\n            return serializeDocumentNode(node, options);\n        case node.DOCUMENT_FRAGMENT_NODE:\n            return serializeDocumentFragmentNode(node, options);\n        case node.DOCUMENT_TYPE_NODE:\n            return serializeDocumentTypeNode(node);\n        case node.ELEMENT_NODE:\n            return serializeElementNode(node, options);\n        case node.TEXT_NODE:\n            return serializeTextNode(node, options);\n        case node.CDATA_SECTION_NODE:\n            return serializeCDataNode();\n    }\n}\nexport function serializeDocumentNode(document, options) {\n    return {\n        type: NodeType.Document,\n        childNodes: serializeChildNodes(document, options),\n        adoptedStyleSheets: serializeStyleSheets(document.adoptedStyleSheets),\n    };\n}\nfunction serializeDocumentFragmentNode(element, options) {\n    var isShadowRoot = isNodeShadowRoot(element);\n    if (isShadowRoot) {\n        options.serializationContext.shadowRootsController.addShadowRoot(element);\n    }\n    return {\n        type: NodeType.DocumentFragment,\n        childNodes: serializeChildNodes(element, options),\n        isShadowRoot: isShadowRoot,\n        adoptedStyleSheets: isShadowRoot ? serializeStyleSheets(element.adoptedStyleSheets) : undefined,\n    };\n}\nfunction serializeDocumentTypeNode(documentType) {\n    return {\n        type: NodeType.DocumentType,\n        name: documentType.name,\n        publicId: documentType.publicId,\n        systemId: documentType.systemId,\n    };\n}\n/**\n * Serializing Element nodes involves capturing:\n * 1. HTML ATTRIBUTES:\n * 2. JS STATE:\n * - scroll offsets\n * - Form fields (input value, checkbox checked, option selection, range)\n * - Canvas state,\n * - Media (video/audio) play mode + currentTime\n * - iframe contents\n * - webcomponents\n * 3. CUSTOM PROPERTIES:\n * - height+width for when `hidden` to cover the element\n * 4. EXCLUDED INTERACTION STATE:\n * - focus (possible, but not worth perf impact)\n * - hover (tracked only via mouse activity)\n * - fullscreen mode\n */\nfunction serializeElementNode(element, options) {\n    var _a;\n    var tagName = getValidTagName(element.tagName);\n    var isSVG = isSVGElement(element) || undefined;\n    // For performance reason, we don't use getNodePrivacyLevel directly: we leverage the\n    // parentNodePrivacyLevel option to avoid iterating over all parents\n    var nodePrivacyLevel = reducePrivacyLevel(getNodeSelfPrivacyLevel(element), options.parentNodePrivacyLevel);\n    if (nodePrivacyLevel === NodePrivacyLevel.HIDDEN) {\n        var _b = element.getBoundingClientRect(), width = _b.width, height = _b.height;\n        return {\n            type: NodeType.Element,\n            tagName: tagName,\n            attributes: (_a = {\n                    rr_width: \"\".concat(width, \"px\"),\n                    rr_height: \"\".concat(height, \"px\")\n                },\n                _a[PRIVACY_ATTR_NAME] = PRIVACY_ATTR_VALUE_HIDDEN,\n                _a),\n            childNodes: [],\n            isSVG: isSVG,\n        };\n    }\n    // Ignore Elements like Script and some Link, Metas\n    if (nodePrivacyLevel === NodePrivacyLevel.IGNORE) {\n        return;\n    }\n    var attributes = serializeAttributes(element, nodePrivacyLevel, options);\n    var childNodes = [];\n    if (hasChildNodes(element) &&\n        // Do not serialize style children as the css rules are already in the _cssText attribute\n        tagName !== 'style') {\n        // OBJECT POOLING OPTIMIZATION:\n        // We should not create a new object systematically as it could impact performances. Try to reuse\n        // the same object as much as possible, and clone it only if we need to.\n        var childNodesSerializationOptions = void 0;\n        if (options.parentNodePrivacyLevel === nodePrivacyLevel && options.ignoreWhiteSpace === (tagName === 'head')) {\n            childNodesSerializationOptions = options;\n        }\n        else {\n            childNodesSerializationOptions = assign({}, options, {\n                parentNodePrivacyLevel: nodePrivacyLevel,\n                ignoreWhiteSpace: tagName === 'head',\n            });\n        }\n        childNodes = serializeChildNodes(element, childNodesSerializationOptions);\n    }\n    return {\n        type: NodeType.Element,\n        tagName: tagName,\n        attributes: attributes,\n        childNodes: childNodes,\n        isSVG: isSVG,\n    };\n}\nfunction isSVGElement(el) {\n    return el.tagName === 'svg' || el instanceof SVGElement;\n}\n/**\n * Text Nodes are dependant on Element nodes\n * Privacy levels are set on elements so we check the parentElement of a text node\n * for privacy level.\n */\nfunction serializeTextNode(textNode, options) {\n    var textContent = getTextContent(textNode, options.ignoreWhiteSpace || false, options.parentNodePrivacyLevel);\n    if (textContent === undefined) {\n        return;\n    }\n    return {\n        type: NodeType.Text,\n        textContent: textContent,\n    };\n}\nfunction serializeCDataNode() {\n    return {\n        type: NodeType.CDATA,\n        textContent: '',\n    };\n}\n//# sourceMappingURL=serializeNode.js.map","import { serializeNodeWithId } from './serializeNode';\nexport function serializeDocument(document, configuration, serializationContext) {\n    // We are sure that Documents are never ignored, so this function never returns null\n    return serializeNodeWithId(document, {\n        serializationContext: serializationContext,\n        parentNodePrivacyLevel: configuration.defaultPrivacyLevel,\n        configuration: configuration,\n    });\n}\n//# sourceMappingURL=serializeDocument.js.map","import { isNodeShadowHost } from '@datadog/browser-rum-core';\nexport function isTouchEvent(event) {\n    return Boolean(event.changedTouches);\n}\nexport function getEventTarget(event) {\n    if (event.composed === true && isNodeShadowHost(event.target)) {\n        return event.composedPath()[0];\n    }\n    return event.target;\n}\n//# sourceMappingURL=eventsUtils.js.map","/**\n * Browsers have not standardized various dimension properties. Mobile devices typically report\n * dimensions in reference to the visual viewport, while desktop uses the layout viewport. For example,\n * Mobile Chrome will change innerWidth when a pinch zoom takes place, while Chrome Desktop (mac) will not.\n *\n * With the new Viewport API, we now calculate and normalize dimension properties to the layout viewport.\n * If the VisualViewport API is not supported by a browser, it isn't reasonably possible to detect or normalize\n * which viewport is being measured. Therefore these exported functions will fallback to assuming that the layout\n * viewport is being measured by the browser\n */\n// Scrollbar widths vary across properties on different devices and browsers\nvar TOLERANCE = 25;\n/**\n * Use the Visual Viewport API's properties to measure scrollX/Y in reference to the layout viewport\n * in order to determine if window.scrollX/Y is measuring the layout or visual viewport.\n * This finding corresponds to which viewport mouseEvent.clientX/Y and window.innerWidth/Height measures.\n */\nfunction isVisualViewportFactoredIn(visualViewport) {\n    return (Math.abs(visualViewport.pageTop - visualViewport.offsetTop - window.scrollY) > TOLERANCE ||\n        Math.abs(visualViewport.pageLeft - visualViewport.offsetLeft - window.scrollX) > TOLERANCE);\n}\nexport var convertMouseEventToLayoutCoordinates = function (clientX, clientY) {\n    var visualViewport = window.visualViewport;\n    var normalized = {\n        layoutViewportX: clientX,\n        layoutViewportY: clientY,\n        visualViewportX: clientX,\n        visualViewportY: clientY,\n    };\n    if (!visualViewport) {\n        // On old browsers, we cannot normalize, so fallback to clientX/Y\n        return normalized;\n    }\n    else if (isVisualViewportFactoredIn(visualViewport)) {\n        // Typically Mobile Devices\n        normalized.layoutViewportX = Math.round(clientX + visualViewport.offsetLeft);\n        normalized.layoutViewportY = Math.round(clientY + visualViewport.offsetTop);\n    }\n    else {\n        // Typically Desktop Devices\n        normalized.visualViewportX = Math.round(clientX - visualViewport.offsetLeft);\n        normalized.visualViewportY = Math.round(clientY - visualViewport.offsetTop);\n    }\n    return normalized;\n};\nexport var getVisualViewport = function (visualViewport) { return ({\n    scale: visualViewport.scale,\n    offsetLeft: visualViewport.offsetLeft,\n    offsetTop: visualViewport.offsetTop,\n    pageLeft: visualViewport.pageLeft,\n    pageTop: visualViewport.pageTop,\n    height: visualViewport.height,\n    width: visualViewport.width,\n}); };\n//# sourceMappingURL=viewports.js.map","import { assign, timeStampNow } from '@datadog/browser-core';\nimport { RecordType } from '../../types';\nexport function assembleIncrementalSnapshot(source, data) {\n    return {\n        data: assign({\n            source: source,\n        }, data),\n        type: RecordType.IncrementalSnapshot,\n        timestamp: timeStampNow(),\n    };\n}\n//# sourceMappingURL=assembly.js.map","import { addEventListeners, addTelemetryDebug, throttle } from '@datadog/browser-core';\nimport { getSerializedNodeId, hasSerializedNode } from '../serialization';\nimport { IncrementalSource } from '../../../types';\nimport { getEventTarget, isTouchEvent } from '../eventsUtils';\nimport { convertMouseEventToLayoutCoordinates } from '../viewports';\nimport { assembleIncrementalSnapshot } from '../assembly';\nvar MOUSE_MOVE_OBSERVER_THRESHOLD = 50;\nexport function trackMove(configuration, moveCb) {\n    var _a = throttle(function (event) {\n        var target = getEventTarget(event);\n        if (hasSerializedNode(target)) {\n            var coordinates = tryToComputeCoordinates(event);\n            if (!coordinates) {\n                return;\n            }\n            var position = {\n                id: getSerializedNodeId(target),\n                timeOffset: 0,\n                x: coordinates.x,\n                y: coordinates.y,\n            };\n            moveCb(assembleIncrementalSnapshot(isTouchEvent(event) ? IncrementalSource.TouchMove : IncrementalSource.MouseMove, { positions: [position] }));\n        }\n    }, MOUSE_MOVE_OBSERVER_THRESHOLD, {\n        trailing: false,\n    }), updatePosition = _a.throttled, cancelThrottle = _a.cancel;\n    var removeListener = addEventListeners(configuration, document, [\"mousemove\" /* DOM_EVENT.MOUSE_MOVE */, \"touchmove\" /* DOM_EVENT.TOUCH_MOVE */], updatePosition, {\n        capture: true,\n        passive: true,\n    }).stop;\n    return {\n        stop: function () {\n            removeListener();\n            cancelThrottle();\n        },\n    };\n}\nexport function tryToComputeCoordinates(event) {\n    var _a = isTouchEvent(event) ? event.changedTouches[0] : event, x = _a.clientX, y = _a.clientY;\n    if (window.visualViewport) {\n        var _b = convertMouseEventToLayoutCoordinates(x, y), visualViewportX = _b.visualViewportX, visualViewportY = _b.visualViewportY;\n        x = visualViewportX;\n        y = visualViewportY;\n    }\n    if (!Number.isFinite(x) || !Number.isFinite(y)) {\n        if (event.isTrusted) {\n            addTelemetryDebug('mouse/touch event without x/y');\n        }\n        return undefined;\n    }\n    return { x: x, y: y };\n}\n//# sourceMappingURL=trackMove.js.map","var _a;\nimport { assign, addEventListeners } from '@datadog/browser-core';\nimport { getNodePrivacyLevel, NodePrivacyLevel } from '@datadog/browser-rum-core';\nimport { IncrementalSource, MouseInteractionType } from '../../../types';\nimport { assembleIncrementalSnapshot } from '../assembly';\nimport { getEventTarget } from '../eventsUtils';\nimport { getSerializedNodeId, hasSerializedNode } from '../serialization';\nimport { tryToComputeCoordinates } from './trackMove';\nvar eventTypeToMouseInteraction = (_a = {},\n    // Listen for pointerup DOM events instead of mouseup for MouseInteraction/MouseUp records. This\n    // allows to reference such records from Frustration records.\n    //\n    // In the context of supporting Mobile Session Replay, we introduced `PointerInteraction` records\n    // used by the Mobile SDKs in place of `MouseInteraction`. In the future, we should replace\n    // `MouseInteraction` by `PointerInteraction` in the Browser SDK so we have an uniform way to\n    // convey such interaction. This would cleanly solve the issue since we would have\n    // `PointerInteraction/Up` records that we could reference from `Frustration` records.\n    _a[\"pointerup\" /* DOM_EVENT.POINTER_UP */] = MouseInteractionType.MouseUp,\n    _a[\"mousedown\" /* DOM_EVENT.MOUSE_DOWN */] = MouseInteractionType.MouseDown,\n    _a[\"click\" /* DOM_EVENT.CLICK */] = MouseInteractionType.Click,\n    _a[\"contextmenu\" /* DOM_EVENT.CONTEXT_MENU */] = MouseInteractionType.ContextMenu,\n    _a[\"dblclick\" /* DOM_EVENT.DBL_CLICK */] = MouseInteractionType.DblClick,\n    _a[\"focus\" /* DOM_EVENT.FOCUS */] = MouseInteractionType.Focus,\n    _a[\"blur\" /* DOM_EVENT.BLUR */] = MouseInteractionType.Blur,\n    _a[\"touchstart\" /* DOM_EVENT.TOUCH_START */] = MouseInteractionType.TouchStart,\n    _a[\"touchend\" /* DOM_EVENT.TOUCH_END */] = MouseInteractionType.TouchEnd,\n    _a);\nexport function trackMouseInteraction(configuration, mouseInteractionCb, recordIds) {\n    var handler = function (event) {\n        var target = getEventTarget(event);\n        if (getNodePrivacyLevel(target, configuration.defaultPrivacyLevel) === NodePrivacyLevel.HIDDEN ||\n            !hasSerializedNode(target)) {\n            return;\n        }\n        var id = getSerializedNodeId(target);\n        var type = eventTypeToMouseInteraction[event.type];\n        var interaction;\n        if (type !== MouseInteractionType.Blur && type !== MouseInteractionType.Focus) {\n            var coordinates = tryToComputeCoordinates(event);\n            if (!coordinates) {\n                return;\n            }\n            interaction = { id: id, type: type, x: coordinates.x, y: coordinates.y };\n        }\n        else {\n            interaction = { id: id, type: type };\n        }\n        var record = assign({ id: recordIds.getIdForEvent(event) }, assembleIncrementalSnapshot(IncrementalSource.MouseInteraction, interaction));\n        mouseInteractionCb(record);\n    };\n    return addEventListeners(configuration, document, Object.keys(eventTypeToMouseInteraction), handler, {\n        capture: true,\n        passive: true,\n    });\n}\n//# sourceMappingURL=trackMouseInteraction.js.map","import { throttle, addEventListener } from '@datadog/browser-core';\nimport { getScrollX, getScrollY, getNodePrivacyLevel, NodePrivacyLevel } from '@datadog/browser-rum-core';\nimport { getEventTarget } from '../eventsUtils';\nimport { getSerializedNodeId, hasSerializedNode } from '../serialization';\nimport { IncrementalSource } from '../../../types';\nimport { assembleIncrementalSnapshot } from '../assembly';\nvar SCROLL_OBSERVER_THRESHOLD = 100;\nexport function trackScroll(configuration, scrollCb, elementsScrollPositions, target) {\n    if (target === void 0) { target = document; }\n    var _a = throttle(function (event) {\n        var target = getEventTarget(event);\n        if (!target ||\n            getNodePrivacyLevel(target, configuration.defaultPrivacyLevel) === NodePrivacyLevel.HIDDEN ||\n            !hasSerializedNode(target)) {\n            return;\n        }\n        var id = getSerializedNodeId(target);\n        var scrollPositions = target === document\n            ? {\n                scrollTop: getScrollY(),\n                scrollLeft: getScrollX(),\n            }\n            : {\n                scrollTop: Math.round(target.scrollTop),\n                scrollLeft: Math.round(target.scrollLeft),\n            };\n        elementsScrollPositions.set(target, scrollPositions);\n        scrollCb(assembleIncrementalSnapshot(IncrementalSource.Scroll, {\n            id: id,\n            x: scrollPositions.scrollLeft,\n            y: scrollPositions.scrollTop,\n        }));\n    }, SCROLL_OBSERVER_THRESHOLD), updatePosition = _a.throttled, cancelThrottle = _a.cancel;\n    var removeListener = addEventListener(configuration, target, \"scroll\" /* DOM_EVENT.SCROLL */, updatePosition, {\n        capture: true,\n        passive: true,\n    }).stop;\n    return {\n        stop: function () {\n            removeListener();\n            cancelThrottle();\n        },\n    };\n}\n//# sourceMappingURL=trackScroll.js.map","import { throttle, addEventListeners, timeStampNow, noop } from '@datadog/browser-core';\nimport { initViewportObservable } from '@datadog/browser-rum-core';\nimport { IncrementalSource, RecordType } from '../../../types';\nimport { getVisualViewport } from '../viewports';\nimport { assembleIncrementalSnapshot } from '../assembly';\nvar VISUAL_VIEWPORT_OBSERVER_THRESHOLD = 200;\nexport function trackViewportResize(configuration, viewportResizeCb) {\n    var viewportResizeSubscription = initViewportObservable(configuration).subscribe(function (data) {\n        viewportResizeCb(assembleIncrementalSnapshot(IncrementalSource.ViewportResize, data));\n    });\n    return {\n        stop: function () {\n            viewportResizeSubscription.unsubscribe();\n        },\n    };\n}\nexport function trackVisualViewportResize(configuration, visualViewportResizeCb) {\n    var visualViewport = window.visualViewport;\n    if (!visualViewport) {\n        return { stop: noop };\n    }\n    var _a = throttle(function () {\n        visualViewportResizeCb({\n            data: getVisualViewport(visualViewport),\n            type: RecordType.VisualViewport,\n            timestamp: timeStampNow(),\n        });\n    }, VISUAL_VIEWPORT_OBSERVER_THRESHOLD, {\n        trailing: false,\n    }), updateDimension = _a.throttled, cancelThrottle = _a.cancel;\n    var removeListener = addEventListeners(configuration, visualViewport, [\"resize\" /* DOM_EVENT.RESIZE */, \"scroll\" /* DOM_EVENT.SCROLL */], updateDimension, {\n        capture: true,\n        passive: true,\n    }).stop;\n    return {\n        stop: function () {\n            removeListener();\n            cancelThrottle();\n        },\n    };\n}\n//# sourceMappingURL=trackViewportResize.js.map","import { addEventListeners } from '@datadog/browser-core';\nimport { NodePrivacyLevel, getNodePrivacyLevel } from '@datadog/browser-rum-core';\nimport { IncrementalSource, MediaInteractionType } from '../../../types';\nimport { getEventTarget } from '../eventsUtils';\nimport { getSerializedNodeId, hasSerializedNode } from '../serialization';\nimport { assembleIncrementalSnapshot } from '../assembly';\nexport function trackMediaInteraction(configuration, mediaInteractionCb) {\n    return addEventListeners(configuration, document, [\"play\" /* DOM_EVENT.PLAY */, \"pause\" /* DOM_EVENT.PAUSE */], function (event) {\n        var target = getEventTarget(event);\n        if (!target ||\n            getNodePrivacyLevel(target, configuration.defaultPrivacyLevel) === NodePrivacyLevel.HIDDEN ||\n            !hasSerializedNode(target)) {\n            return;\n        }\n        mediaInteractionCb(assembleIncrementalSnapshot(IncrementalSource.MediaInteraction, {\n            id: getSerializedNodeId(target),\n            type: event.type === \"play\" /* DOM_EVENT.PLAY */ ? MediaInteractionType.Play : MediaInteractionType.Pause,\n        }));\n    }, {\n        capture: true,\n        passive: true,\n    });\n}\n//# sourceMappingURL=trackMediaInteraction.js.map","import { instrumentMethod } from '@datadog/browser-core';\nimport { IncrementalSource } from '../../../types';\nimport { getSerializedNodeId, hasSerializedNode } from '../serialization';\nimport { assembleIncrementalSnapshot } from '../assembly';\nexport function trackStyleSheet(styleSheetCb) {\n    function checkStyleSheetAndCallback(styleSheet, callback) {\n        if (styleSheet && hasSerializedNode(styleSheet.ownerNode)) {\n            callback(getSerializedNodeId(styleSheet.ownerNode));\n        }\n    }\n    var instrumentationStoppers = [\n        instrumentMethod(CSSStyleSheet.prototype, 'insertRule', function (_a) {\n            var styleSheet = _a.target, _b = _a.parameters, rule = _b[0], index = _b[1];\n            checkStyleSheetAndCallback(styleSheet, function (id) {\n                return styleSheetCb(assembleIncrementalSnapshot(IncrementalSource.StyleSheetRule, {\n                    id: id,\n                    adds: [{ rule: rule, index: index }],\n                }));\n            });\n        }),\n        instrumentMethod(CSSStyleSheet.prototype, 'deleteRule', function (_a) {\n            var styleSheet = _a.target, index = _a.parameters[0];\n            checkStyleSheetAndCallback(styleSheet, function (id) {\n                return styleSheetCb(assembleIncrementalSnapshot(IncrementalSource.StyleSheetRule, {\n                    id: id,\n                    removes: [{ index: index }],\n                }));\n            });\n        }),\n    ];\n    if (typeof CSSGroupingRule !== 'undefined') {\n        instrumentGroupingCSSRuleClass(CSSGroupingRule);\n    }\n    else {\n        instrumentGroupingCSSRuleClass(CSSMediaRule);\n        instrumentGroupingCSSRuleClass(CSSSupportsRule);\n    }\n    function instrumentGroupingCSSRuleClass(cls) {\n        instrumentationStoppers.push(instrumentMethod(cls.prototype, 'insertRule', function (_a) {\n            var styleSheet = _a.target, _b = _a.parameters, rule = _b[0], index = _b[1];\n            checkStyleSheetAndCallback(styleSheet.parentStyleSheet, function (id) {\n                var path = getPathToNestedCSSRule(styleSheet);\n                if (path) {\n                    path.push(index || 0);\n                    styleSheetCb(assembleIncrementalSnapshot(IncrementalSource.StyleSheetRule, {\n                        id: id,\n                        adds: [{ rule: rule, index: path }],\n                    }));\n                }\n            });\n        }), instrumentMethod(cls.prototype, 'deleteRule', function (_a) {\n            var styleSheet = _a.target, index = _a.parameters[0];\n            checkStyleSheetAndCallback(styleSheet.parentStyleSheet, function (id) {\n                var path = getPathToNestedCSSRule(styleSheet);\n                if (path) {\n                    path.push(index);\n                    styleSheetCb(assembleIncrementalSnapshot(IncrementalSource.StyleSheetRule, {\n                        id: id,\n                        removes: [{ index: path }],\n                    }));\n                }\n            });\n        }));\n    }\n    return {\n        stop: function () {\n            instrumentationStoppers.forEach(function (stopper) { return stopper.stop(); });\n        },\n    };\n}\nexport function getPathToNestedCSSRule(rule) {\n    var path = [];\n    var currentRule = rule;\n    while (currentRule.parentRule) {\n        var rules_1 = Array.from(currentRule.parentRule.cssRules);\n        var index_1 = rules_1.indexOf(currentRule);\n        path.unshift(index_1);\n        currentRule = currentRule.parentRule;\n    }\n    // A rule may not be attached to a stylesheet\n    if (!currentRule.parentStyleSheet) {\n        return;\n    }\n    var rules = Array.from(currentRule.parentStyleSheet.cssRules);\n    var index = rules.indexOf(currentRule);\n    path.unshift(index);\n    return path;\n}\n//# sourceMappingURL=trackStyleSheet.js.map","import { addEventListeners, timeStampNow } from '@datadog/browser-core';\nimport { RecordType } from '../../../types';\nexport function trackFocus(configuration, focusCb) {\n    return addEventListeners(configuration, window, [\"focus\" /* DOM_EVENT.FOCUS */, \"blur\" /* DOM_EVENT.BLUR */], function () {\n        focusCb({\n            data: { has_focus: document.hasFocus() },\n            type: RecordType.Focus,\n            timestamp: timeStampNow(),\n        });\n    });\n}\n//# sourceMappingURL=trackFocus.js.map","import { RecordType } from '../../../types';\nexport function trackFrustration(lifeCycle, frustrationCb, recordIds) {\n    var frustrationSubscription = lifeCycle.subscribe(12 /* LifeCycleEventType.RAW_RUM_EVENT_COLLECTED */, function (data) {\n        var _a, _b;\n        if (data.rawRumEvent.type === \"action\" /* RumEventType.ACTION */ &&\n            data.rawRumEvent.action.type === \"click\" /* ActionType.CLICK */ &&\n            ((_b = (_a = data.rawRumEvent.action.frustration) === null || _a === void 0 ? void 0 : _a.type) === null || _b === void 0 ? void 0 : _b.length) &&\n            'events' in data.domainContext &&\n            data.domainContext.events &&\n            data.domainContext.events.length) {\n            frustrationCb({\n                timestamp: data.rawRumEvent.date,\n                type: RecordType.FrustrationRecord,\n                data: {\n                    frustrationTypes: data.rawRumEvent.action.frustration.type,\n                    recordIds: data.domainContext.events.map(function (e) { return recordIds.getIdForEvent(e); }),\n                },\n            });\n        }\n    });\n    return {\n        stop: function () {\n            frustrationSubscription.unsubscribe();\n        },\n    };\n}\n//# sourceMappingURL=trackFrustration.js.map","import { timeStampNow } from '@datadog/browser-core';\nimport { RecordType } from '../../../types';\nexport function trackViewEnd(lifeCycle, viewEndCb) {\n    var viewEndSubscription = lifeCycle.subscribe(5 /* LifeCycleEventType.VIEW_ENDED */, function () {\n        viewEndCb({\n            timestamp: timeStampNow(),\n            type: RecordType.ViewEnd,\n        });\n    });\n    return {\n        stop: function () {\n            viewEndSubscription.unsubscribe();\n        },\n    };\n}\n//# sourceMappingURL=trackViewEnd.js.map","import { instrumentSetter, assign, addEventListeners, forEach, noop } from '@datadog/browser-core';\nimport { NodePrivacyLevel, getNodePrivacyLevel, shouldMaskNode, cssEscape } from '@datadog/browser-rum-core';\nimport { IncrementalSource } from '../../../types';\nimport { getEventTarget } from '../eventsUtils';\nimport { getElementInputValue, getSerializedNodeId, hasSerializedNode } from '../serialization';\nimport { assembleIncrementalSnapshot } from '../assembly';\nexport function trackInput(configuration, inputCb, target) {\n    if (target === void 0) { target = document; }\n    var defaultPrivacyLevel = configuration.defaultPrivacyLevel;\n    var lastInputStateMap = new WeakMap();\n    var isShadowRoot = target !== document;\n    var stopEventListeners = addEventListeners(configuration, target, \n    // The 'input' event bubbles across shadow roots, so we don't have to listen for it on shadow\n    // roots since it will be handled by the event listener that we did add to the document. Only\n    // the 'change' event is blocked and needs to be handled on shadow roots.\n    isShadowRoot ? [\"change\" /* DOM_EVENT.CHANGE */] : [\"input\" /* DOM_EVENT.INPUT */, \"change\" /* DOM_EVENT.CHANGE */], function (event) {\n        var target = getEventTarget(event);\n        if (target instanceof HTMLInputElement ||\n            target instanceof HTMLTextAreaElement ||\n            target instanceof HTMLSelectElement) {\n            onElementChange(target);\n        }\n    }, {\n        capture: true,\n        passive: true,\n    }).stop;\n    var stopPropertySetterInstrumentation;\n    if (!isShadowRoot) {\n        var instrumentationStoppers_1 = [\n            instrumentSetter(HTMLInputElement.prototype, 'value', onElementChange),\n            instrumentSetter(HTMLInputElement.prototype, 'checked', onElementChange),\n            instrumentSetter(HTMLSelectElement.prototype, 'value', onElementChange),\n            instrumentSetter(HTMLTextAreaElement.prototype, 'value', onElementChange),\n            instrumentSetter(HTMLSelectElement.prototype, 'selectedIndex', onElementChange),\n        ];\n        stopPropertySetterInstrumentation = function () {\n            instrumentationStoppers_1.forEach(function (stopper) { return stopper.stop(); });\n        };\n    }\n    else {\n        stopPropertySetterInstrumentation = noop;\n    }\n    return {\n        stop: function () {\n            stopPropertySetterInstrumentation();\n            stopEventListeners();\n        },\n    };\n    function onElementChange(target) {\n        var nodePrivacyLevel = getNodePrivacyLevel(target, defaultPrivacyLevel);\n        if (nodePrivacyLevel === NodePrivacyLevel.HIDDEN) {\n            return;\n        }\n        var type = target.type;\n        var inputState;\n        if (type === 'radio' || type === 'checkbox') {\n            if (shouldMaskNode(target, nodePrivacyLevel)) {\n                return;\n            }\n            inputState = { isChecked: target.checked };\n        }\n        else {\n            var value = getElementInputValue(target, nodePrivacyLevel);\n            if (value === undefined) {\n                return;\n            }\n            inputState = { text: value };\n        }\n        // Can be multiple changes on the same node within the same batched mutation observation.\n        cbWithDedup(target, inputState);\n        // If a radio was checked, other radios with the same name attribute will be unchecked.\n        var name = target.name;\n        if (type === 'radio' && name && target.checked) {\n            forEach(document.querySelectorAll(\"input[type=\\\"radio\\\"][name=\\\"\".concat(cssEscape(name), \"\\\"]\")), function (el) {\n                if (el !== target) {\n                    // TODO: Consider the privacy implications for various differing input privacy levels\n                    cbWithDedup(el, { isChecked: false });\n                }\n            });\n        }\n    }\n    /**\n     * There can be multiple changes on the same node within the same batched mutation observation.\n     */\n    function cbWithDedup(target, inputState) {\n        if (!hasSerializedNode(target)) {\n            return;\n        }\n        var lastInputState = lastInputStateMap.get(target);\n        if (!lastInputState ||\n            lastInputState.text !== inputState.text ||\n            lastInputState.isChecked !== inputState.isChecked) {\n            lastInputStateMap.set(target, inputState);\n            inputCb(assembleIncrementalSnapshot(IncrementalSource.Input, assign({\n                id: getSerializedNodeId(target),\n            }, inputState)));\n        }\n    }\n}\n//# sourceMappingURL=trackInput.js.map","import { noop, throttle, requestIdleCallback } from '@datadog/browser-core';\n/**\n * Maximum duration to wait before processing mutations. If the browser is idle, mutations will be\n * processed more quickly. If the browser is busy executing small tasks (ex: rendering frames), the\n * mutations will wait MUTATION_PROCESS_MAX_DELAY milliseconds before being processed. If the\n * browser is busy executing a longer task, mutations will be processed after this task.\n */\nvar MUTATION_PROCESS_MAX_DELAY = 100;\n/**\n * Minimum duration to wait before processing mutations. This is used to batch mutations together\n * and be able to deduplicate them to save processing time and bandwidth.\n * 16ms is the duration of a frame at 60fps that ensure fluid UI.\n */\nexport var MUTATION_PROCESS_MIN_DELAY = 16;\nexport function createMutationBatch(processMutationBatch) {\n    var cancelScheduledFlush = noop;\n    var pendingMutations = [];\n    function flush() {\n        cancelScheduledFlush();\n        processMutationBatch(pendingMutations);\n        pendingMutations = [];\n    }\n    var _a = throttle(flush, MUTATION_PROCESS_MIN_DELAY, {\n        leading: false,\n    }), throttledFlush = _a.throttled, cancelThrottle = _a.cancel;\n    return {\n        addMutations: function (mutations) {\n            if (pendingMutations.length === 0) {\n                cancelScheduledFlush = requestIdleCallback(throttledFlush, { timeout: MUTATION_PROCESS_MAX_DELAY });\n            }\n            pendingMutations.push.apply(pendingMutations, mutations);\n        },\n        flush: flush,\n        stop: function () {\n            cancelScheduledFlush();\n            cancelThrottle();\n        },\n    };\n}\n//# sourceMappingURL=mutationBatch.js.map","import { monitor, noop } from '@datadog/browser-core';\nimport { isNodeShadowHost, getMutationObserverConstructor, getParentNode, forEachChildNodes, getNodePrivacyLevel, getTextContent, NodePrivacyLevel, } from '@datadog/browser-rum-core';\nimport { IncrementalSource } from '../../../types';\nimport { getElementInputValue, getSerializedNodeId, hasSerializedNode, nodeAndAncestorsHaveSerializedNode, serializeNodeWithId, serializeAttribute, } from '../serialization';\nimport { createMutationBatch } from '../mutationBatch';\nimport { assembleIncrementalSnapshot } from '../assembly';\n/**\n * Buffers and aggregate mutations generated by a MutationObserver into MutationPayload\n */\nexport function trackMutation(mutationCallback, configuration, shadowRootsController, target) {\n    var MutationObserver = getMutationObserverConstructor();\n    if (!MutationObserver) {\n        return { stop: noop, flush: noop };\n    }\n    var mutationBatch = createMutationBatch(function (mutations) {\n        processMutations(mutations.concat(observer.takeRecords()), mutationCallback, configuration, shadowRootsController);\n    });\n    var observer = new MutationObserver(monitor(mutationBatch.addMutations));\n    observer.observe(target, {\n        attributeOldValue: true,\n        attributes: true,\n        characterData: true,\n        characterDataOldValue: true,\n        childList: true,\n        subtree: true,\n    });\n    return {\n        stop: function () {\n            observer.disconnect();\n            mutationBatch.stop();\n        },\n        flush: function () {\n            mutationBatch.flush();\n        },\n    };\n}\nfunction processMutations(mutations, mutationCallback, configuration, shadowRootsController) {\n    var nodePrivacyLevelCache = new Map();\n    mutations\n        .filter(function (mutation) { return mutation.type === 'childList'; })\n        .forEach(function (mutation) {\n        mutation.removedNodes.forEach(function (removedNode) {\n            traverseRemovedShadowDom(removedNode, shadowRootsController.removeShadowRoot);\n        });\n    });\n    // Discard any mutation with a 'target' node that:\n    // * isn't injected in the current document or isn't known/serialized yet: those nodes are likely\n    // part of a mutation occurring in a parent Node\n    // * should be hidden or ignored\n    var filteredMutations = mutations.filter(function (mutation) {\n        return mutation.target.isConnected &&\n            nodeAndAncestorsHaveSerializedNode(mutation.target) &&\n            getNodePrivacyLevel(mutation.target, configuration.defaultPrivacyLevel, nodePrivacyLevelCache) !==\n                NodePrivacyLevel.HIDDEN;\n    });\n    var _a = processChildListMutations(filteredMutations.filter(function (mutation) { return mutation.type === 'childList'; }), configuration, shadowRootsController, nodePrivacyLevelCache), adds = _a.adds, removes = _a.removes, hasBeenSerialized = _a.hasBeenSerialized;\n    var texts = processCharacterDataMutations(filteredMutations.filter(function (mutation) {\n        return mutation.type === 'characterData' && !hasBeenSerialized(mutation.target);\n    }), configuration, nodePrivacyLevelCache);\n    var attributes = processAttributesMutations(filteredMutations.filter(function (mutation) {\n        return mutation.type === 'attributes' && !hasBeenSerialized(mutation.target);\n    }), configuration, nodePrivacyLevelCache);\n    if (!texts.length && !attributes.length && !removes.length && !adds.length) {\n        return;\n    }\n    mutationCallback(assembleIncrementalSnapshot(IncrementalSource.Mutation, { adds: adds, removes: removes, texts: texts, attributes: attributes }));\n}\nfunction processChildListMutations(mutations, configuration, shadowRootsController, nodePrivacyLevelCache) {\n    // First, we iterate over mutations to collect:\n    //\n    // * nodes that have been added in the document and not removed by a subsequent mutation\n    // * nodes that have been removed from the document but were not added in a previous mutation\n    //\n    // For this second category, we also collect their previous parent (mutation.target) because we'll\n    // need it to emit a 'remove' mutation.\n    //\n    // Those two categories may overlap: if a node moved from a position to another, it is reported as\n    // two mutation records, one with a \"removedNodes\" and the other with \"addedNodes\". In this case,\n    // the node will be in both sets.\n    var addedAndMovedNodes = new Set();\n    var removedNodes = new Map();\n    var _loop_1 = function (mutation) {\n        mutation.addedNodes.forEach(function (node) {\n            addedAndMovedNodes.add(node);\n        });\n        mutation.removedNodes.forEach(function (node) {\n            if (!addedAndMovedNodes.has(node)) {\n                removedNodes.set(node, mutation.target);\n            }\n            addedAndMovedNodes.delete(node);\n        });\n    };\n    for (var _i = 0, mutations_1 = mutations; _i < mutations_1.length; _i++) {\n        var mutation = mutations_1[_i];\n        _loop_1(mutation);\n    }\n    // Then, we sort nodes that are still in the document by topological order, for two reasons:\n    //\n    // * We will serialize each added nodes with their descendants. We don't want to serialize a node\n    // twice, so we need to iterate over the parent nodes first and skip any node that is contained in\n    // a precedent node.\n    //\n    // * To emit \"add\" mutations, we need references to the parent and potential next sibling of each\n    // added node. So we need to iterate over the parent nodes first, and when multiple nodes are\n    // siblings, we want to iterate from last to first. This will ensure that any \"next\" node is\n    // already serialized and have an id.\n    var sortedAddedAndMovedNodes = Array.from(addedAndMovedNodes);\n    sortAddedAndMovedNodes(sortedAddedAndMovedNodes);\n    // Then, we iterate over our sorted node sets to emit mutations. We collect the newly serialized\n    // node ids in a set to be able to skip subsequent related mutations.\n    var serializedNodeIds = new Set();\n    var addedNodeMutations = [];\n    for (var _a = 0, sortedAddedAndMovedNodes_1 = sortedAddedAndMovedNodes; _a < sortedAddedAndMovedNodes_1.length; _a++) {\n        var node = sortedAddedAndMovedNodes_1[_a];\n        if (hasBeenSerialized(node)) {\n            continue;\n        }\n        var parentNodePrivacyLevel = getNodePrivacyLevel(node.parentNode, configuration.defaultPrivacyLevel, nodePrivacyLevelCache);\n        if (parentNodePrivacyLevel === NodePrivacyLevel.HIDDEN || parentNodePrivacyLevel === NodePrivacyLevel.IGNORE) {\n            continue;\n        }\n        var serializedNode = serializeNodeWithId(node, {\n            serializedNodeIds: serializedNodeIds,\n            parentNodePrivacyLevel: parentNodePrivacyLevel,\n            serializationContext: { status: 2 /* SerializationContextStatus.MUTATION */, shadowRootsController: shadowRootsController },\n            configuration: configuration,\n        });\n        if (!serializedNode) {\n            continue;\n        }\n        var parentNode = getParentNode(node);\n        addedNodeMutations.push({\n            nextId: getNextSibling(node),\n            parentId: getSerializedNodeId(parentNode),\n            node: serializedNode,\n        });\n    }\n    // Finally, we emit remove mutations.\n    var removedNodeMutations = [];\n    removedNodes.forEach(function (parent, node) {\n        if (hasSerializedNode(node)) {\n            removedNodeMutations.push({\n                parentId: getSerializedNodeId(parent),\n                id: getSerializedNodeId(node),\n            });\n        }\n    });\n    return { adds: addedNodeMutations, removes: removedNodeMutations, hasBeenSerialized: hasBeenSerialized };\n    function hasBeenSerialized(node) {\n        return hasSerializedNode(node) && serializedNodeIds.has(getSerializedNodeId(node));\n    }\n    function getNextSibling(node) {\n        var nextSibling = node.nextSibling;\n        while (nextSibling) {\n            if (hasSerializedNode(nextSibling)) {\n                return getSerializedNodeId(nextSibling);\n            }\n            nextSibling = nextSibling.nextSibling;\n        }\n        return null;\n    }\n}\nfunction processCharacterDataMutations(mutations, configuration, nodePrivacyLevelCache) {\n    var _a;\n    var textMutations = [];\n    // Deduplicate mutations based on their target node\n    var handledNodes = new Set();\n    var filteredMutations = mutations.filter(function (mutation) {\n        if (handledNodes.has(mutation.target)) {\n            return false;\n        }\n        handledNodes.add(mutation.target);\n        return true;\n    });\n    // Emit mutations\n    for (var _i = 0, filteredMutations_1 = filteredMutations; _i < filteredMutations_1.length; _i++) {\n        var mutation = filteredMutations_1[_i];\n        var value = mutation.target.textContent;\n        if (value === mutation.oldValue) {\n            continue;\n        }\n        var parentNodePrivacyLevel = getNodePrivacyLevel(getParentNode(mutation.target), configuration.defaultPrivacyLevel, nodePrivacyLevelCache);\n        if (parentNodePrivacyLevel === NodePrivacyLevel.HIDDEN || parentNodePrivacyLevel === NodePrivacyLevel.IGNORE) {\n            continue;\n        }\n        textMutations.push({\n            id: getSerializedNodeId(mutation.target),\n            // TODO: pass a valid \"ignoreWhiteSpace\" argument\n            value: (_a = getTextContent(mutation.target, false, parentNodePrivacyLevel)) !== null && _a !== void 0 ? _a : null,\n        });\n    }\n    return textMutations;\n}\nfunction processAttributesMutations(mutations, configuration, nodePrivacyLevelCache) {\n    var attributeMutations = [];\n    // Deduplicate mutations based on their target node and changed attribute\n    var handledElements = new Map();\n    var filteredMutations = mutations.filter(function (mutation) {\n        var handledAttributes = handledElements.get(mutation.target);\n        if (handledAttributes && handledAttributes.has(mutation.attributeName)) {\n            return false;\n        }\n        if (!handledAttributes) {\n            handledElements.set(mutation.target, new Set([mutation.attributeName]));\n        }\n        else {\n            handledAttributes.add(mutation.attributeName);\n        }\n        return true;\n    });\n    // Emit mutations\n    var emittedMutations = new Map();\n    for (var _i = 0, filteredMutations_2 = filteredMutations; _i < filteredMutations_2.length; _i++) {\n        var mutation = filteredMutations_2[_i];\n        var uncensoredValue = mutation.target.getAttribute(mutation.attributeName);\n        if (uncensoredValue === mutation.oldValue) {\n            continue;\n        }\n        var privacyLevel = getNodePrivacyLevel(mutation.target, configuration.defaultPrivacyLevel, nodePrivacyLevelCache);\n        var attributeValue = serializeAttribute(mutation.target, privacyLevel, mutation.attributeName, configuration);\n        var transformedValue = void 0;\n        if (mutation.attributeName === 'value') {\n            var inputValue = getElementInputValue(mutation.target, privacyLevel);\n            if (inputValue === undefined) {\n                continue;\n            }\n            transformedValue = inputValue;\n        }\n        else if (typeof attributeValue === 'string') {\n            transformedValue = attributeValue;\n        }\n        else {\n            transformedValue = null;\n        }\n        var emittedMutation = emittedMutations.get(mutation.target);\n        if (!emittedMutation) {\n            emittedMutation = {\n                id: getSerializedNodeId(mutation.target),\n                attributes: {},\n            };\n            attributeMutations.push(emittedMutation);\n            emittedMutations.set(mutation.target, emittedMutation);\n        }\n        emittedMutation.attributes[mutation.attributeName] = transformedValue;\n    }\n    return attributeMutations;\n}\nexport function sortAddedAndMovedNodes(nodes) {\n    nodes.sort(function (a, b) {\n        var position = a.compareDocumentPosition(b);\n        /* eslint-disable no-bitwise */\n        if (position & Node.DOCUMENT_POSITION_CONTAINED_BY) {\n            return -1;\n        }\n        else if (position & Node.DOCUMENT_POSITION_CONTAINS) {\n            return 1;\n        }\n        else if (position & Node.DOCUMENT_POSITION_FOLLOWING) {\n            return 1;\n        }\n        else if (position & Node.DOCUMENT_POSITION_PRECEDING) {\n            return -1;\n        }\n        /* eslint-enable no-bitwise */\n        return 0;\n    });\n}\nfunction traverseRemovedShadowDom(removedNode, shadowDomRemovedCallback) {\n    if (isNodeShadowHost(removedNode)) {\n        shadowDomRemovedCallback(removedNode.shadowRoot);\n    }\n    forEachChildNodes(removedNode, function (childNode) { return traverseRemovedShadowDom(childNode, shadowDomRemovedCallback); });\n}\n//# sourceMappingURL=trackMutation.js.map","import { trackInput, trackMutation, trackScroll } from './trackers';\nexport var initShadowRootsController = function (configuration, callback, elementsScrollPositions) {\n    var controllerByShadowRoot = new Map();\n    var shadowRootsController = {\n        addShadowRoot: function (shadowRoot) {\n            if (controllerByShadowRoot.has(shadowRoot)) {\n                return;\n            }\n            var mutationTracker = trackMutation(callback, configuration, shadowRootsController, shadowRoot);\n            // The change event does not bubble up across the shadow root, we have to listen on the shadow root\n            var inputTracker = trackInput(configuration, callback, shadowRoot);\n            // The scroll event does not bubble up across the shadow root, we have to listen on the shadow root\n            var scrollTracker = trackScroll(configuration, callback, elementsScrollPositions, shadowRoot);\n            controllerByShadowRoot.set(shadowRoot, {\n                flush: function () { return mutationTracker.flush(); },\n                stop: function () {\n                    mutationTracker.stop();\n                    inputTracker.stop();\n                    scrollTracker.stop();\n                },\n            });\n        },\n        removeShadowRoot: function (shadowRoot) {\n            var entry = controllerByShadowRoot.get(shadowRoot);\n            if (!entry) {\n                // unidentified root cause: observed in some cases with shadow DOM added by browser extensions\n                return;\n            }\n            entry.stop();\n            controllerByShadowRoot.delete(shadowRoot);\n        },\n        stop: function () {\n            controllerByShadowRoot.forEach(function (_a) {\n                var stop = _a.stop;\n                return stop();\n            });\n        },\n        flush: function () {\n            controllerByShadowRoot.forEach(function (_a) {\n                var flush = _a.flush;\n                return flush();\n            });\n        },\n    };\n    return shadowRootsController;\n};\n//# sourceMappingURL=shadowRootsController.js.map","import { sendToExtension } from '@datadog/browser-core';\nimport * as replayStats from '../replayStats';\nimport { trackFocus, trackFrustration, trackInput, trackMediaInteraction, trackMouseInteraction, trackMove, trackMutation, trackScroll, trackStyleSheet, trackViewEnd, trackViewportResize, trackVisualViewportResize, } from './trackers';\nimport { createElementsScrollPositions } from './elementsScrollPositions';\nimport { initShadowRootsController } from './shadowRootsController';\nimport { startFullSnapshots } from './startFullSnapshots';\nimport { initRecordIds } from './recordIds';\nexport function record(options) {\n    var emit = options.emit, configuration = options.configuration, lifeCycle = options.lifeCycle;\n    // runtime checks for user options\n    if (!emit) {\n        throw new Error('emit function is required');\n    }\n    var emitAndComputeStats = function (record) {\n        emit(record);\n        sendToExtension('record', { record: record });\n        var view = options.viewHistory.findView();\n        replayStats.addRecord(view.id);\n    };\n    var elementsScrollPositions = createElementsScrollPositions();\n    var shadowRootsController = initShadowRootsController(configuration, emitAndComputeStats, elementsScrollPositions);\n    var stopFullSnapshots = startFullSnapshots(elementsScrollPositions, shadowRootsController, lifeCycle, configuration, flushMutations, function (records) { return records.forEach(function (record) { return emitAndComputeStats(record); }); }).stop;\n    function flushMutations() {\n        shadowRootsController.flush();\n        mutationTracker.flush();\n    }\n    var recordIds = initRecordIds();\n    var mutationTracker = trackMutation(emitAndComputeStats, configuration, shadowRootsController, document);\n    var trackers = [\n        mutationTracker,\n        trackMove(configuration, emitAndComputeStats),\n        trackMouseInteraction(configuration, emitAndComputeStats, recordIds),\n        trackScroll(configuration, emitAndComputeStats, elementsScrollPositions, document),\n        trackViewportResize(configuration, emitAndComputeStats),\n        trackInput(configuration, emitAndComputeStats),\n        trackMediaInteraction(configuration, emitAndComputeStats),\n        trackStyleSheet(emitAndComputeStats),\n        trackFocus(configuration, emitAndComputeStats),\n        trackVisualViewportResize(configuration, emitAndComputeStats),\n        trackFrustration(lifeCycle, emitAndComputeStats, recordIds),\n        trackViewEnd(lifeCycle, function (viewEndRecord) {\n            flushMutations();\n            emitAndComputeStats(viewEndRecord);\n        }),\n    ];\n    return {\n        stop: function () {\n            shadowRootsController.stop();\n            trackers.forEach(function (tracker) { return tracker.stop(); });\n            stopFullSnapshots();\n        },\n        flushMutations: flushMutations,\n        shadowRootsController: shadowRootsController,\n    };\n}\n//# sourceMappingURL=record.js.map","export function createElementsScrollPositions() {\n    var scrollPositionsByElement = new WeakMap();\n    return {\n        set: function (element, scrollPositions) {\n            if (element === document && !document.scrollingElement) {\n                // cf https://drafts.csswg.org/cssom-view/#dom-document-scrollingelement,\n                // in some cases scrolling elements can not be defined, we don't support those for now\n                return;\n            }\n            scrollPositionsByElement.set(element === document ? document.scrollingElement : element, scrollPositions);\n        },\n        get: function (element) {\n            return scrollPositionsByElement.get(element);\n        },\n        has: function (element) {\n            return scrollPositionsByElement.has(element);\n        },\n    };\n}\n//# sourceMappingURL=elementsScrollPositions.js.map","import { getScrollX, getScrollY, getViewportDimension } from '@datadog/browser-rum-core';\nimport { timeStampNow } from '@datadog/browser-core';\nimport { RecordType } from '../../types';\nimport { serializeDocument } from './serialization';\nimport { getVisualViewport } from './viewports';\nexport function startFullSnapshots(elementsScrollPositions, shadowRootsController, lifeCycle, configuration, flushMutations, fullSnapshotCallback) {\n    var takeFullSnapshot = function (timestamp, serializationContext) {\n        if (timestamp === void 0) { timestamp = timeStampNow(); }\n        if (serializationContext === void 0) { serializationContext = {\n            status: 0 /* SerializationContextStatus.INITIAL_FULL_SNAPSHOT */,\n            elementsScrollPositions: elementsScrollPositions,\n            shadowRootsController: shadowRootsController,\n        }; }\n        var _a = getViewportDimension(), width = _a.width, height = _a.height;\n        var records = [\n            {\n                data: {\n                    height: height,\n                    href: window.location.href,\n                    width: width,\n                },\n                type: RecordType.Meta,\n                timestamp: timestamp,\n            },\n            {\n                data: {\n                    has_focus: document.hasFocus(),\n                },\n                type: RecordType.Focus,\n                timestamp: timestamp,\n            },\n            {\n                data: {\n                    node: serializeDocument(document, configuration, serializationContext),\n                    initialOffset: {\n                        left: getScrollX(),\n                        top: getScrollY(),\n                    },\n                },\n                type: RecordType.FullSnapshot,\n                timestamp: timestamp,\n            },\n        ];\n        if (window.visualViewport) {\n            records.push({\n                data: getVisualViewport(window.visualViewport),\n                type: RecordType.VisualViewport,\n                timestamp: timestamp,\n            });\n        }\n        return records;\n    };\n    fullSnapshotCallback(takeFullSnapshot());\n    var unsubscribe = lifeCycle.subscribe(2 /* LifeCycleEventType.VIEW_CREATED */, function (view) {\n        flushMutations();\n        fullSnapshotCallback(takeFullSnapshot(view.startClocks.timeStamp, {\n            shadowRootsController: shadowRootsController,\n            status: 1 /* SerializationContextStatus.SUBSEQUENT_FULL_SNAPSHOT */,\n            elementsScrollPositions: elementsScrollPositions,\n        }));\n    }).unsubscribe;\n    return {\n        stop: unsubscribe,\n    };\n}\n//# sourceMappingURL=startFullSnapshots.js.map","export function initRecordIds() {\n    var recordIds = new WeakMap();\n    var nextId = 1;\n    return {\n        getIdForEvent: function (event) {\n            if (!recordIds.has(event)) {\n                recordIds.set(event, nextId++);\n            }\n            return recordIds.get(event);\n        },\n    };\n}\n//# sourceMappingURL=recordIds.js.map","import { assign } from '@datadog/browser-core';\nimport { RecordType } from '../../types';\nimport * as replayStats from '../replayStats';\nexport function createSegment(_a) {\n    var context = _a.context, creationReason = _a.creationReason, encoder = _a.encoder;\n    var encodedBytesCount = 0;\n    var viewId = context.view.id;\n    var metadata = assign({\n        start: Infinity,\n        end: -Infinity,\n        creation_reason: creationReason,\n        records_count: 0,\n        has_full_snapshot: false,\n        index_in_view: replayStats.getSegmentsCount(viewId),\n        source: 'browser',\n    }, context);\n    replayStats.addSegment(viewId);\n    function addRecord(record, callback) {\n        metadata.start = Math.min(metadata.start, record.timestamp);\n        metadata.end = Math.max(metadata.end, record.timestamp);\n        metadata.records_count += 1;\n        metadata.has_full_snapshot || (metadata.has_full_snapshot = record.type === RecordType.FullSnapshot);\n        var prefix = encoder.isEmpty ? '{\"records\":[' : ',';\n        encoder.write(prefix + JSON.stringify(record), function (additionalEncodedBytesCount) {\n            encodedBytesCount += additionalEncodedBytesCount;\n            callback(encodedBytesCount);\n        });\n    }\n    function flush(callback) {\n        if (encoder.isEmpty) {\n            throw new Error('Empty segment flushed');\n        }\n        encoder.write(\"],\".concat(JSON.stringify(metadata).slice(1), \"\\n\"));\n        encoder.finish(function (encoderResult) {\n            replayStats.addWroteData(metadata.view.id, encoderResult.rawBytesCount);\n            callback(metadata, encoderResult);\n        });\n    }\n    return { addRecord: addRecord, flush: flush };\n}\n//# sourceMappingURL=segment.js.map","import { isPageExitReason, ONE_SECOND, clearTimeout, setTimeout } from '@datadog/browser-core';\nimport { buildReplayPayload } from './buildReplayPayload';\nimport { createSegment } from './segment';\nexport var SEGMENT_DURATION_LIMIT = 5 * ONE_SECOND;\n/**\n * beacon payload max queue size implementation is 64kb\n * ensure that we leave room for logs, rum and potential other users\n */\nexport var SEGMENT_BYTES_LIMIT = 60000;\n// Segments are the main data structure for session replays. They contain context information used\n// for indexing or UI needs, and a list of records (RRWeb 'events', renamed to avoid confusing\n// namings). They are stored without any processing from the intake, and fetched one after the\n// other while a session is being replayed. Their encoding (deflate) are carefully crafted to allow\n// concatenating multiple segments together. Segments have a size overhead (metadata), so our goal is to\n// build segments containing as many records as possible while complying with the various flush\n// strategies to guarantee a good replay quality.\n//\n// When the recording starts, a segment is initially created.  The segment is flushed (finalized and\n// sent) based on various events (non-exhaustive list):\n//\n// * the page visibility change or becomes to unload\n// * the segment duration reaches a limit\n// * the encoded segment bytes count reaches a limit\n// * ...\n//\n// A segment cannot be created without its context.  If the RUM session ends and no session id is\n// available when creating a new segment, records will be ignored, until the session is renewed and\n// a new session id is available.\n//\n// Empty segments (segments with no record) aren't useful and should be ignored.\n//\n// To help investigate session replays issues, each segment is created with a \"creation reason\",\n// indicating why the session has been created.\nexport function startSegmentCollection(lifeCycle, configuration, sessionManager, viewHistory, httpRequest, encoder) {\n    return doStartSegmentCollection(lifeCycle, function () { return computeSegmentContext(configuration.applicationId, sessionManager, viewHistory); }, httpRequest, encoder);\n}\nexport function doStartSegmentCollection(lifeCycle, getSegmentContext, httpRequest, encoder) {\n    var state = {\n        status: 0 /* SegmentCollectionStatus.WaitingForInitialRecord */,\n        nextSegmentCreationReason: 'init',\n    };\n    var unsubscribeViewCreated = lifeCycle.subscribe(2 /* LifeCycleEventType.VIEW_CREATED */, function () {\n        flushSegment('view_change');\n    }).unsubscribe;\n    var unsubscribePageExited = lifeCycle.subscribe(11 /* LifeCycleEventType.PAGE_EXITED */, function (pageExitEvent) {\n        flushSegment(pageExitEvent.reason);\n    }).unsubscribe;\n    function flushSegment(flushReason) {\n        if (state.status === 1 /* SegmentCollectionStatus.SegmentPending */) {\n            state.segment.flush(function (metadata, encoderResult) {\n                var payload = buildReplayPayload(encoderResult.output, metadata, encoderResult.rawBytesCount);\n                if (isPageExitReason(flushReason)) {\n                    httpRequest.sendOnExit(payload);\n                }\n                else {\n                    httpRequest.send(payload);\n                }\n            });\n            clearTimeout(state.expirationTimeoutId);\n        }\n        if (flushReason !== 'stop') {\n            state = {\n                status: 0 /* SegmentCollectionStatus.WaitingForInitialRecord */,\n                nextSegmentCreationReason: flushReason,\n            };\n        }\n        else {\n            state = {\n                status: 2 /* SegmentCollectionStatus.Stopped */,\n            };\n        }\n    }\n    return {\n        addRecord: function (record) {\n            if (state.status === 2 /* SegmentCollectionStatus.Stopped */) {\n                return;\n            }\n            if (state.status === 0 /* SegmentCollectionStatus.WaitingForInitialRecord */) {\n                var context = getSegmentContext();\n                if (!context) {\n                    return;\n                }\n                state = {\n                    status: 1 /* SegmentCollectionStatus.SegmentPending */,\n                    segment: createSegment({ encoder: encoder, context: context, creationReason: state.nextSegmentCreationReason }),\n                    expirationTimeoutId: setTimeout(function () {\n                        flushSegment('segment_duration_limit');\n                    }, SEGMENT_DURATION_LIMIT),\n                };\n            }\n            state.segment.addRecord(record, function (encodedBytesCount) {\n                if (encodedBytesCount > SEGMENT_BYTES_LIMIT) {\n                    flushSegment('segment_bytes_limit');\n                }\n            });\n        },\n        stop: function () {\n            flushSegment('stop');\n            unsubscribeViewCreated();\n            unsubscribePageExited();\n        },\n    };\n}\nexport function computeSegmentContext(applicationId, sessionManager, viewHistory) {\n    var session = sessionManager.findTrackedSession();\n    var viewContext = viewHistory.findView();\n    if (!session || !viewContext) {\n        return undefined;\n    }\n    return {\n        application: {\n            id: applicationId,\n        },\n        session: {\n            id: session.id,\n        },\n        view: {\n            id: viewContext.id,\n        },\n    };\n}\nexport function setSegmentBytesLimit(newSegmentBytesLimit) {\n    if (newSegmentBytesLimit === void 0) { newSegmentBytesLimit = 60000; }\n    SEGMENT_BYTES_LIMIT = newSegmentBytesLimit;\n}\n//# sourceMappingURL=segmentCollection.js.map","import { assign } from '@datadog/browser-core';\nexport function buildReplayPayload(data, metadata, rawSegmentBytesCount) {\n    var formData = new FormData();\n    formData.append('segment', new Blob([data], {\n        type: 'application/octet-stream',\n    }), \"\".concat(metadata.session.id, \"-\").concat(metadata.start));\n    var metadataAndSegmentSizes = assign({\n        raw_segment_size: rawSegmentBytesCount,\n        compressed_segment_size: data.byteLength,\n    }, metadata);\n    var serializedMetadataAndSegmentSizes = JSON.stringify(metadataAndSegmentSizes);\n    formData.append('event', new Blob([serializedMetadataAndSegmentSizes], { type: 'application/json' }));\n    return { data: formData, bytesCount: data.byteLength };\n}\n//# sourceMappingURL=buildReplayPayload.js.map","import { addEventListener, addTelemetryDebug, assign, concatBuffers } from '@datadog/browser-core';\nexport function createDeflateEncoder(configuration, worker, streamId) {\n    var rawBytesCount = 0;\n    var compressedData = [];\n    var compressedDataTrailer;\n    var nextWriteActionId = 0;\n    var pendingWriteActions = [];\n    var removeMessageListener = addEventListener(configuration, worker, 'message', function (_a) {\n        var workerResponse = _a.data;\n        if (workerResponse.type !== 'wrote' || workerResponse.streamId !== streamId) {\n            return;\n        }\n        rawBytesCount += workerResponse.additionalBytesCount;\n        compressedData.push(workerResponse.result);\n        compressedDataTrailer = workerResponse.trailer;\n        var nextPendingAction = pendingWriteActions.shift();\n        if (nextPendingAction && nextPendingAction.id === workerResponse.id) {\n            if (nextPendingAction.writeCallback) {\n                nextPendingAction.writeCallback(workerResponse.result.byteLength);\n            }\n            else if (nextPendingAction.finishCallback) {\n                nextPendingAction.finishCallback();\n            }\n        }\n        else {\n            removeMessageListener();\n            addTelemetryDebug('Worker responses received out of order.');\n        }\n    }).stop;\n    function consumeResult() {\n        var output = compressedData.length === 0 ? new Uint8Array(0) : concatBuffers(compressedData.concat(compressedDataTrailer));\n        var result = {\n            rawBytesCount: rawBytesCount,\n            output: output,\n            outputBytesCount: output.byteLength,\n            encoding: 'deflate',\n        };\n        rawBytesCount = 0;\n        compressedData = [];\n        return result;\n    }\n    function sendResetIfNeeded() {\n        if (nextWriteActionId > 0) {\n            worker.postMessage({\n                action: 'reset',\n                streamId: streamId,\n            });\n            nextWriteActionId = 0;\n        }\n    }\n    return {\n        isAsync: true,\n        get isEmpty() {\n            return nextWriteActionId === 0;\n        },\n        write: function (data, callback) {\n            worker.postMessage({\n                action: 'write',\n                id: nextWriteActionId,\n                data: data,\n                streamId: streamId,\n            });\n            pendingWriteActions.push({\n                id: nextWriteActionId,\n                writeCallback: callback,\n                data: data,\n            });\n            nextWriteActionId += 1;\n        },\n        finish: function (callback) {\n            sendResetIfNeeded();\n            if (!pendingWriteActions.length) {\n                callback(consumeResult());\n            }\n            else {\n                // Make sure we do not call any write callback\n                pendingWriteActions.forEach(function (pendingWriteAction) {\n                    delete pendingWriteAction.writeCallback;\n                });\n                // Wait for the last action to finish before calling the finish callback\n                pendingWriteActions[pendingWriteActions.length - 1].finishCallback = function () { return callback(consumeResult()); };\n            }\n        },\n        finishSync: function () {\n            sendResetIfNeeded();\n            var pendingData = pendingWriteActions\n                .map(function (pendingWriteAction) {\n                // Make sure we do not call any write or finish callback\n                delete pendingWriteAction.writeCallback;\n                delete pendingWriteAction.finishCallback;\n                return pendingWriteAction.data;\n            })\n                .join('');\n            return assign(consumeResult(), {\n                pendingData: pendingData,\n            });\n        },\n        estimateEncodedBytesCount: function (data) {\n            // This is a rough estimation of the data size once it'll be encoded by deflate. We observed\n            // that if it's the first chunk of data pushed to the stream, the ratio is lower (3-4), but\n            // after that the ratio is greater (10+). We chose 8 here, which (on average) seems to produce\n            // requests of the expected size.\n            return data.length / 8;\n        },\n        stop: function () {\n            removeMessageListener();\n        },\n    };\n}\n//# sourceMappingURL=deflateEncoder.js.map","import { addTelemetryError, display, includes, addEventListener, setTimeout, ONE_SECOND, DOCS_ORIGIN, } from '@datadog/browser-core';\nexport var INITIALIZATION_TIME_OUT_DELAY = 30 * ONE_SECOND;\nfunction createDeflateWorker(configuration) {\n    return new Worker(configuration.workerUrl || URL.createObjectURL(new Blob([\"!function(){\\\"use strict\\\";function t(t){for(var e=t.reduce((function(t,e){return t+e.length}),0),a=new Uint8Array(e),n=0,r=0,i=t;r<i.length;r++){var s=i[r];a.set(s,n),n+=s.length}return a}function e(t){for(var e=t.length;--e>=0;)t[e]=0}var a=256,n=286,r=30,i=15,s=new Uint8Array([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]),h=new Uint8Array([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]),l=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]),_=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),o=new Array(576);e(o);var d=new Array(60);e(d);var u=new Array(512);e(u);var f=new Array(256);e(f);var c=new Array(29);e(c);var p,g,w,v=new Array(r);function b(t,e,a,n,r){this.static_tree=t,this.extra_bits=e,this.extra_base=a,this.elems=n,this.max_length=r,this.has_stree=t&&t.length}function m(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e}e(v);var y=function(t){return t<256?u[t]:u[256+(t>>>7)]},k=function(t,e){t.pending_buf[t.pending++]=255&e,t.pending_buf[t.pending++]=e>>>8&255},z=function(t,e,a){t.bi_valid>16-a?(t.bi_buf|=e<<t.bi_valid&65535,k(t,t.bi_buf),t.bi_buf=e>>16-t.bi_valid,t.bi_valid+=a-16):(t.bi_buf|=e<<t.bi_valid&65535,t.bi_valid+=a)},x=function(t,e,a){z(t,a[2*e],a[2*e+1])},A=function(t,e){var a=0;do{a|=1&t,t>>>=1,a<<=1}while(--e>0);return a>>>1},U=function(t,e,a){var n,r,s=new Array(16),h=0;for(n=1;n<=i;n++)s[n]=h=h+a[n-1]<<1;for(r=0;r<=e;r++){var l=t[2*r+1];0!==l&&(t[2*r]=A(s[l]++,l))}},I=function(t){var e;for(e=0;e<n;e++)t.dyn_ltree[2*e]=0;for(e=0;e<r;e++)t.dyn_dtree[2*e]=0;for(e=0;e<19;e++)t.bl_tree[2*e]=0;t.dyn_ltree[512]=1,t.opt_len=t.static_len=0,t.last_lit=t.matches=0},B=function(t){t.bi_valid>8?k(t,t.bi_buf):t.bi_valid>0&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0},E=function(t,e,a,n){var r=2*e,i=2*a;return t[r]<t[i]||t[r]===t[i]&&n[e]<=n[a]},S=function(t,e,a){for(var n=t.heap[a],r=a<<1;r<=t.heap_len&&(r<t.heap_len&&E(e,t.heap[r+1],t.heap[r],t.depth)&&r++,!E(e,n,t.heap[r],t.depth));)t.heap[a]=t.heap[r],a=r,r<<=1;t.heap[a]=n},C=function(t,e,n){var r,i,l,_,o=0;if(0!==t.last_lit)do{r=t.pending_buf[t.d_buf+2*o]<<8|t.pending_buf[t.d_buf+2*o+1],i=t.pending_buf[t.l_buf+o],o++,0===r?x(t,i,e):(l=f[i],x(t,l+a+1,e),0!==(_=s[l])&&(i-=c[l],z(t,i,_)),r--,l=y(r),x(t,l,n),0!==(_=h[l])&&(r-=v[l],z(t,r,_)))}while(o<t.last_lit);x(t,256,e)},D=function(t,e){var a,n,r,s=e.dyn_tree,h=e.stat_desc.static_tree,l=e.stat_desc.has_stree,_=e.stat_desc.elems,o=-1;for(t.heap_len=0,t.heap_max=573,a=0;a<_;a++)0!==s[2*a]?(t.heap[++t.heap_len]=o=a,t.depth[a]=0):s[2*a+1]=0;for(;t.heap_len<2;)s[2*(r=t.heap[++t.heap_len]=o<2?++o:0)]=1,t.depth[r]=0,t.opt_len--,l&&(t.static_len-=h[2*r+1]);for(e.max_code=o,a=t.heap_len>>1;a>=1;a--)S(t,s,a);r=_;do{a=t.heap[1],t.heap[1]=t.heap[t.heap_len--],S(t,s,1),n=t.heap[1],t.heap[--t.heap_max]=a,t.heap[--t.heap_max]=n,s[2*r]=s[2*a]+s[2*n],t.depth[r]=(t.depth[a]>=t.depth[n]?t.depth[a]:t.depth[n])+1,s[2*a+1]=s[2*n+1]=r,t.heap[1]=r++,S(t,s,1)}while(t.heap_len>=2);t.heap[--t.heap_max]=t.heap[1],function(t,e){var a,n,r,s,h,l,_=e.dyn_tree,o=e.max_code,d=e.stat_desc.static_tree,u=e.stat_desc.has_stree,f=e.stat_desc.extra_bits,c=e.stat_desc.extra_base,p=e.stat_desc.max_length,g=0;for(s=0;s<=i;s++)t.bl_count[s]=0;for(_[2*t.heap[t.heap_max]+1]=0,a=t.heap_max+1;a<573;a++)(s=_[2*_[2*(n=t.heap[a])+1]+1]+1)>p&&(s=p,g++),_[2*n+1]=s,n>o||(t.bl_count[s]++,h=0,n>=c&&(h=f[n-c]),l=_[2*n],t.opt_len+=l*(s+h),u&&(t.static_len+=l*(d[2*n+1]+h)));if(0!==g){do{for(s=p-1;0===t.bl_count[s];)s--;t.bl_count[s]--,t.bl_count[s+1]+=2,t.bl_count[p]--,g-=2}while(g>0);for(s=p;0!==s;s--)for(n=t.bl_count[s];0!==n;)(r=t.heap[--a])>o||(_[2*r+1]!==s&&(t.opt_len+=(s-_[2*r+1])*_[2*r],_[2*r+1]=s),n--)}}(t,e),U(s,o,t.bl_count)},j=function(t,e,a){var n,r,i=-1,s=e[1],h=0,l=7,_=4;for(0===s&&(l=138,_=3),e[2*(a+1)+1]=65535,n=0;n<=a;n++)r=s,s=e[2*(n+1)+1],++h<l&&r===s||(h<_?t.bl_tree[2*r]+=h:0!==r?(r!==i&&t.bl_tree[2*r]++,t.bl_tree[32]++):h<=10?t.bl_tree[34]++:t.bl_tree[36]++,h=0,i=r,0===s?(l=138,_=3):r===s?(l=6,_=3):(l=7,_=4))},M=function(t,e,a){var n,r,i=-1,s=e[1],h=0,l=7,_=4;for(0===s&&(l=138,_=3),n=0;n<=a;n++)if(r=s,s=e[2*(n+1)+1],!(++h<l&&r===s)){if(h<_)do{x(t,r,t.bl_tree)}while(0!=--h);else 0!==r?(r!==i&&(x(t,r,t.bl_tree),h--),x(t,16,t.bl_tree),z(t,h-3,2)):h<=10?(x(t,17,t.bl_tree),z(t,h-3,3)):(x(t,18,t.bl_tree),z(t,h-11,7));h=0,i=r,0===s?(l=138,_=3):r===s?(l=6,_=3):(l=7,_=4)}},L=!1,T=function(t,e,a,n){z(t,0+(n?1:0),3),function(t,e,a,n){B(t),n&&(k(t,a),k(t,~a)),t.pending_buf.set(t.window.subarray(e,e+a),t.pending),t.pending+=a}(t,e,a,!0)},H=function(t,e,n,r){var i,s,h=0;t.level>0?(2===t.strm.data_type&&(t.strm.data_type=function(t){var e,n=4093624447;for(e=0;e<=31;e++,n>>>=1)if(1&n&&0!==t.dyn_ltree[2*e])return 0;if(0!==t.dyn_ltree[18]||0!==t.dyn_ltree[20]||0!==t.dyn_ltree[26])return 1;for(e=32;e<a;e++)if(0!==t.dyn_ltree[2*e])return 1;return 0}(t)),D(t,t.l_desc),D(t,t.d_desc),h=function(t){var e;for(j(t,t.dyn_ltree,t.l_desc.max_code),j(t,t.dyn_dtree,t.d_desc.max_code),D(t,t.bl_desc),e=18;e>=3&&0===t.bl_tree[2*_[e]+1];e--);return t.opt_len+=3*(e+1)+5+5+4,e}(t),i=t.opt_len+3+7>>>3,(s=t.static_len+3+7>>>3)<=i&&(i=s)):i=s=n+5,n+4<=i&&-1!==e?T(t,e,n,r):4===t.strategy||s===i?(z(t,2+(r?1:0),3),C(t,o,d)):(z(t,4+(r?1:0),3),function(t,e,a,n){var r;for(z(t,e-257,5),z(t,a-1,5),z(t,n-4,4),r=0;r<n;r++)z(t,t.bl_tree[2*_[r]+1],3);M(t,t.dyn_ltree,e-1),M(t,t.dyn_dtree,a-1)}(t,t.l_desc.max_code+1,t.d_desc.max_code+1,h+1),C(t,t.dyn_ltree,t.dyn_dtree)),I(t),r&&B(t)},R={_tr_init:function(t){L||(!function(){var t,e,a,_,m,y=new Array(16);for(a=0,_=0;_<28;_++)for(c[_]=a,t=0;t<1<<s[_];t++)f[a++]=_;for(f[a-1]=_,m=0,_=0;_<16;_++)for(v[_]=m,t=0;t<1<<h[_];t++)u[m++]=_;for(m>>=7;_<r;_++)for(v[_]=m<<7,t=0;t<1<<h[_]-7;t++)u[256+m++]=_;for(e=0;e<=i;e++)y[e]=0;for(t=0;t<=143;)o[2*t+1]=8,t++,y[8]++;for(;t<=255;)o[2*t+1]=9,t++,y[9]++;for(;t<=279;)o[2*t+1]=7,t++,y[7]++;for(;t<=287;)o[2*t+1]=8,t++,y[8]++;for(U(o,287,y),t=0;t<r;t++)d[2*t+1]=5,d[2*t]=A(t,5);p=new b(o,s,257,n,i),g=new b(d,h,0,r,i),w=new b(new Array(0),l,0,19,7)}(),L=!0),t.l_desc=new m(t.dyn_ltree,p),t.d_desc=new m(t.dyn_dtree,g),t.bl_desc=new m(t.bl_tree,w),t.bi_buf=0,t.bi_valid=0,I(t)},_tr_stored_block:T,_tr_flush_block:H,_tr_tally:function(t,e,n){return t.pending_buf[t.d_buf+2*t.last_lit]=e>>>8&255,t.pending_buf[t.d_buf+2*t.last_lit+1]=255&e,t.pending_buf[t.l_buf+t.last_lit]=255&n,t.last_lit++,0===e?t.dyn_ltree[2*n]++:(t.matches++,e--,t.dyn_ltree[2*(f[n]+a+1)]++,t.dyn_dtree[2*y(e)]++),t.last_lit===t.lit_bufsize-1},_tr_align:function(t){z(t,2,3),x(t,256,o),function(t){16===t.bi_valid?(k(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):t.bi_valid>=8&&(t.pending_buf[t.pending++]=255&t.bi_buf,t.bi_buf>>=8,t.bi_valid-=8)}(t)}},K=function(t,e,a,n){for(var r=65535&t,i=t>>>16&65535,s=0;0!==a;){a-=s=a>2e3?2e3:a;do{i=i+(r=r+e[n++]|0)|0}while(--s);r%=65521,i%=65521}return r|i<<16},N=new Uint32Array(function(){for(var t,e=[],a=0;a<256;a++){t=a;for(var n=0;n<8;n++)t=1&t?3988292384^t>>>1:t>>>1;e[a]=t}return e}()),O=function(t,e,a,n){var r=N,i=n+a;t^=-1;for(var s=n;s<i;s++)t=t>>>8^r[255&(t^e[s])];return~t},q={2:\\\"need dictionary\\\",1:\\\"stream end\\\",0:\\\"\\\",\\\"-1\\\":\\\"file error\\\",\\\"-2\\\":\\\"stream error\\\",\\\"-3\\\":\\\"data error\\\",\\\"-4\\\":\\\"insufficient memory\\\",\\\"-5\\\":\\\"buffer error\\\",\\\"-6\\\":\\\"incompatible version\\\"},F=0,G=2,J=3,P=4,Q=0,V=1,W=-1,X=0,Y=8,Z=R._tr_init,$=R._tr_stored_block,tt=R._tr_flush_block,et=R._tr_tally,at=R._tr_align,nt=F,rt=1,it=J,st=P,ht=5,lt=Q,_t=V,ot=-2,dt=-3,ut=-5,ft=W,ct=1,pt=2,gt=3,wt=4,vt=X,bt=2,mt=Y,yt=258,kt=262,zt=103,xt=113,At=666,Ut=function(t,e){return t.msg=q[e],e},It=function(t){return(t<<1)-(t>4?9:0)},Bt=function(t){for(var e=t.length;--e>=0;)t[e]=0},Et=function(t,e,a){return(e<<t.hash_shift^a)&t.hash_mask},St=function(t){var e=t.state,a=e.pending;a>t.avail_out&&(a=t.avail_out),0!==a&&(t.output.set(e.pending_buf.subarray(e.pending_out,e.pending_out+a),t.next_out),t.next_out+=a,e.pending_out+=a,t.total_out+=a,t.avail_out-=a,e.pending-=a,0===e.pending&&(e.pending_out=0))},Ct=function(t,e){tt(t,t.block_start>=0?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,St(t.strm)},Dt=function(t,e){t.pending_buf[t.pending++]=e},jt=function(t,e){t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=255&e},Mt=function(t,e){var a,n,r=t.max_chain_length,i=t.strstart,s=t.prev_length,h=t.nice_match,l=t.strstart>t.w_size-kt?t.strstart-(t.w_size-kt):0,_=t.window,o=t.w_mask,d=t.prev,u=t.strstart+yt,f=_[i+s-1],c=_[i+s];t.prev_length>=t.good_match&&(r>>=2),h>t.lookahead&&(h=t.lookahead);do{if(_[(a=e)+s]===c&&_[a+s-1]===f&&_[a]===_[i]&&_[++a]===_[i+1]){i+=2,a++;do{}while(_[++i]===_[++a]&&_[++i]===_[++a]&&_[++i]===_[++a]&&_[++i]===_[++a]&&_[++i]===_[++a]&&_[++i]===_[++a]&&_[++i]===_[++a]&&_[++i]===_[++a]&&i<u);if(n=yt-(u-i),i=u-yt,n>s){if(t.match_start=e,s=n,n>=h)break;f=_[i+s-1],c=_[i+s]}}}while((e=d[e&o])>l&&0!=--r);return s<=t.lookahead?s:t.lookahead},Lt=function(t){var e,a,n,r,i,s,h,l,_,o,d=t.w_size;do{if(r=t.window_size-t.lookahead-t.strstart,t.strstart>=d+(d-kt)){t.window.set(t.window.subarray(d,d+d),0),t.match_start-=d,t.strstart-=d,t.block_start-=d,e=a=t.hash_size;do{n=t.head[--e],t.head[e]=n>=d?n-d:0}while(--a);e=a=d;do{n=t.prev[--e],t.prev[e]=n>=d?n-d:0}while(--a);r+=d}if(0===t.strm.avail_in)break;if(s=t.strm,h=t.window,l=t.strstart+t.lookahead,_=r,o=void 0,(o=s.avail_in)>_&&(o=_),a=0===o?0:(s.avail_in-=o,h.set(s.input.subarray(s.next_in,s.next_in+o),l),1===s.state.wrap?s.adler=K(s.adler,h,o,l):2===s.state.wrap&&(s.adler=O(s.adler,h,o,l)),s.next_in+=o,s.total_in+=o,o),t.lookahead+=a,t.lookahead+t.insert>=3)for(i=t.strstart-t.insert,t.ins_h=t.window[i],t.ins_h=Et(t,t.ins_h,t.window[i+1]);t.insert&&(t.ins_h=Et(t,t.ins_h,t.window[i+3-1]),t.prev[i&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=i,i++,t.insert--,!(t.lookahead+t.insert<3)););}while(t.lookahead<kt&&0!==t.strm.avail_in)},Tt=function(t,e){for(var a,n;;){if(t.lookahead<kt){if(Lt(t),t.lookahead<kt&&e===nt)return 1;if(0===t.lookahead)break}if(a=0,t.lookahead>=3&&(t.ins_h=Et(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),0!==a&&t.strstart-a<=t.w_size-kt&&(t.match_length=Mt(t,a)),t.match_length>=3)if(n=et(t,t.strstart-t.match_start,t.match_length-3),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=3){t.match_length--;do{t.strstart++,t.ins_h=Et(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart}while(0!=--t.match_length);t.strstart++}else t.strstart+=t.match_length,t.match_length=0,t.ins_h=t.window[t.strstart],t.ins_h=Et(t,t.ins_h,t.window[t.strstart+1]);else n=et(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++;if(n&&(Ct(t,!1),0===t.strm.avail_out))return 1}return t.insert=t.strstart<2?t.strstart:2,e===st?(Ct(t,!0),0===t.strm.avail_out?3:4):t.last_lit&&(Ct(t,!1),0===t.strm.avail_out)?1:2},Ht=function(t,e){for(var a,n,r;;){if(t.lookahead<kt){if(Lt(t),t.lookahead<kt&&e===nt)return 1;if(0===t.lookahead)break}if(a=0,t.lookahead>=3&&(t.ins_h=Et(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),t.prev_length=t.match_length,t.prev_match=t.match_start,t.match_length=2,0!==a&&t.prev_length<t.max_lazy_match&&t.strstart-a<=t.w_size-kt&&(t.match_length=Mt(t,a),t.match_length<=5&&(t.strategy===ct||3===t.match_length&&t.strstart-t.match_start>4096)&&(t.match_length=2)),t.prev_length>=3&&t.match_length<=t.prev_length){r=t.strstart+t.lookahead-3,n=et(t,t.strstart-1-t.prev_match,t.prev_length-3),t.lookahead-=t.prev_length-1,t.prev_length-=2;do{++t.strstart<=r&&(t.ins_h=Et(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart)}while(0!=--t.prev_length);if(t.match_available=0,t.match_length=2,t.strstart++,n&&(Ct(t,!1),0===t.strm.avail_out))return 1}else if(t.match_available){if((n=et(t,0,t.window[t.strstart-1]))&&Ct(t,!1),t.strstart++,t.lookahead--,0===t.strm.avail_out)return 1}else t.match_available=1,t.strstart++,t.lookahead--}return t.match_available&&(n=et(t,0,t.window[t.strstart-1]),t.match_available=0),t.insert=t.strstart<2?t.strstart:2,e===st?(Ct(t,!0),0===t.strm.avail_out?3:4):t.last_lit&&(Ct(t,!1),0===t.strm.avail_out)?1:2};function Rt(t,e,a,n,r){this.good_length=t,this.max_lazy=e,this.nice_length=a,this.max_chain=n,this.func=r}var Kt=[new Rt(0,0,0,0,(function(t,e){var a=65535;for(a>t.pending_buf_size-5&&(a=t.pending_buf_size-5);;){if(t.lookahead<=1){if(Lt(t),0===t.lookahead&&e===nt)return 1;if(0===t.lookahead)break}t.strstart+=t.lookahead,t.lookahead=0;var n=t.block_start+a;if((0===t.strstart||t.strstart>=n)&&(t.lookahead=t.strstart-n,t.strstart=n,Ct(t,!1),0===t.strm.avail_out))return 1;if(t.strstart-t.block_start>=t.w_size-kt&&(Ct(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===st?(Ct(t,!0),0===t.strm.avail_out?3:4):(t.strstart>t.block_start&&(Ct(t,!1),t.strm.avail_out),1)})),new Rt(4,4,8,4,Tt),new Rt(4,5,16,8,Tt),new Rt(4,6,32,32,Tt),new Rt(4,4,16,16,Ht),new Rt(8,16,32,32,Ht),new Rt(8,16,128,128,Ht),new Rt(8,32,128,256,Ht),new Rt(32,128,258,1024,Ht),new Rt(32,258,258,4096,Ht)];function Nt(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=mt,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new Uint16Array(1146),this.dyn_dtree=new Uint16Array(122),this.bl_tree=new Uint16Array(78),Bt(this.dyn_ltree),Bt(this.dyn_dtree),Bt(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new Uint16Array(16),this.heap=new Uint16Array(573),Bt(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Uint16Array(573),Bt(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}var Ot=function(t){if(!t||!t.state)return Ut(t,ot);t.total_in=t.total_out=0,t.data_type=bt;var e=t.state;return e.pending=0,e.pending_out=0,e.wrap<0&&(e.wrap=-e.wrap),e.status=e.wrap?42:xt,t.adler=2===e.wrap?0:1,e.last_flush=nt,Z(e),lt},qt=function(t){var e,a=Ot(t);return a===lt&&((e=t.state).window_size=2*e.w_size,Bt(e.head),e.max_lazy_match=Kt[e.level].max_lazy,e.good_match=Kt[e.level].good_length,e.nice_match=Kt[e.level].nice_length,e.max_chain_length=Kt[e.level].max_chain,e.strstart=0,e.block_start=0,e.lookahead=0,e.insert=0,e.match_length=e.prev_length=2,e.match_available=0,e.ins_h=0),a},Ft=function(t,e,a,n,r,i){if(!t)return ot;var s=1;if(e===ft&&(e=6),n<0?(s=0,n=-n):n>15&&(s=2,n-=16),r<1||r>9||a!==mt||n<8||n>15||e<0||e>9||i<0||i>wt)return Ut(t,ot);8===n&&(n=9);var h=new Nt;return t.state=h,h.strm=t,h.wrap=s,h.gzhead=null,h.w_bits=n,h.w_size=1<<h.w_bits,h.w_mask=h.w_size-1,h.hash_bits=r+7,h.hash_size=1<<h.hash_bits,h.hash_mask=h.hash_size-1,h.hash_shift=~~((h.hash_bits+3-1)/3),h.window=new Uint8Array(2*h.w_size),h.head=new Uint16Array(h.hash_size),h.prev=new Uint16Array(h.w_size),h.lit_bufsize=1<<r+6,h.pending_buf_size=4*h.lit_bufsize,h.pending_buf=new Uint8Array(h.pending_buf_size),h.d_buf=1*h.lit_bufsize,h.l_buf=3*h.lit_bufsize,h.level=e,h.strategy=i,h.method=a,qt(t)},Gt={deflateInit:function(t,e){return Ft(t,e,mt,15,8,vt)},deflateInit2:Ft,deflateReset:qt,deflateResetKeep:Ot,deflateSetHeader:function(t,e){return t&&t.state?2!==t.state.wrap?ot:(t.state.gzhead=e,lt):ot},deflate:function(t,e){var a,n;if(!t||!t.state||e>ht||e<0)return t?Ut(t,ot):ot;var r=t.state;if(!t.output||!t.input&&0!==t.avail_in||r.status===At&&e!==st)return Ut(t,0===t.avail_out?ut:ot);r.strm=t;var i=r.last_flush;if(r.last_flush=e,42===r.status)if(2===r.wrap)t.adler=0,Dt(r,31),Dt(r,139),Dt(r,8),r.gzhead?(Dt(r,(r.gzhead.text?1:0)+(r.gzhead.hcrc?2:0)+(r.gzhead.extra?4:0)+(r.gzhead.name?8:0)+(r.gzhead.comment?16:0)),Dt(r,255&r.gzhead.time),Dt(r,r.gzhead.time>>8&255),Dt(r,r.gzhead.time>>16&255),Dt(r,r.gzhead.time>>24&255),Dt(r,9===r.level?2:r.strategy>=pt||r.level<2?4:0),Dt(r,255&r.gzhead.os),r.gzhead.extra&&r.gzhead.extra.length&&(Dt(r,255&r.gzhead.extra.length),Dt(r,r.gzhead.extra.length>>8&255)),r.gzhead.hcrc&&(t.adler=O(t.adler,r.pending_buf,r.pending,0)),r.gzindex=0,r.status=69):(Dt(r,0),Dt(r,0),Dt(r,0),Dt(r,0),Dt(r,0),Dt(r,9===r.level?2:r.strategy>=pt||r.level<2?4:0),Dt(r,3),r.status=xt);else{var s=mt+(r.w_bits-8<<4)<<8;s|=(r.strategy>=pt||r.level<2?0:r.level<6?1:6===r.level?2:3)<<6,0!==r.strstart&&(s|=32),s+=31-s%31,r.status=xt,jt(r,s),0!==r.strstart&&(jt(r,t.adler>>>16),jt(r,65535&t.adler)),t.adler=1}if(69===r.status)if(r.gzhead.extra){for(a=r.pending;r.gzindex<(65535&r.gzhead.extra.length)&&(r.pending!==r.pending_buf_size||(r.gzhead.hcrc&&r.pending>a&&(t.adler=O(t.adler,r.pending_buf,r.pending-a,a)),St(t),a=r.pending,r.pending!==r.pending_buf_size));)Dt(r,255&r.gzhead.extra[r.gzindex]),r.gzindex++;r.gzhead.hcrc&&r.pending>a&&(t.adler=O(t.adler,r.pending_buf,r.pending-a,a)),r.gzindex===r.gzhead.extra.length&&(r.gzindex=0,r.status=73)}else r.status=73;if(73===r.status)if(r.gzhead.name){a=r.pending;do{if(r.pending===r.pending_buf_size&&(r.gzhead.hcrc&&r.pending>a&&(t.adler=O(t.adler,r.pending_buf,r.pending-a,a)),St(t),a=r.pending,r.pending===r.pending_buf_size)){n=1;break}n=r.gzindex<r.gzhead.name.length?255&r.gzhead.name.charCodeAt(r.gzindex++):0,Dt(r,n)}while(0!==n);r.gzhead.hcrc&&r.pending>a&&(t.adler=O(t.adler,r.pending_buf,r.pending-a,a)),0===n&&(r.gzindex=0,r.status=91)}else r.status=91;if(91===r.status)if(r.gzhead.comment){a=r.pending;do{if(r.pending===r.pending_buf_size&&(r.gzhead.hcrc&&r.pending>a&&(t.adler=O(t.adler,r.pending_buf,r.pending-a,a)),St(t),a=r.pending,r.pending===r.pending_buf_size)){n=1;break}n=r.gzindex<r.gzhead.comment.length?255&r.gzhead.comment.charCodeAt(r.gzindex++):0,Dt(r,n)}while(0!==n);r.gzhead.hcrc&&r.pending>a&&(t.adler=O(t.adler,r.pending_buf,r.pending-a,a)),0===n&&(r.status=zt)}else r.status=zt;if(r.status===zt&&(r.gzhead.hcrc?(r.pending+2>r.pending_buf_size&&St(t),r.pending+2<=r.pending_buf_size&&(Dt(r,255&t.adler),Dt(r,t.adler>>8&255),t.adler=0,r.status=xt)):r.status=xt),0!==r.pending){if(St(t),0===t.avail_out)return r.last_flush=-1,lt}else if(0===t.avail_in&&It(e)<=It(i)&&e!==st)return Ut(t,ut);if(r.status===At&&0!==t.avail_in)return Ut(t,ut);if(0!==t.avail_in||0!==r.lookahead||e!==nt&&r.status!==At){var h=r.strategy===pt?function(t,e){for(var a;;){if(0===t.lookahead&&(Lt(t),0===t.lookahead)){if(e===nt)return 1;break}if(t.match_length=0,a=et(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,a&&(Ct(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===st?(Ct(t,!0),0===t.strm.avail_out?3:4):t.last_lit&&(Ct(t,!1),0===t.strm.avail_out)?1:2}(r,e):r.strategy===gt?function(t,e){for(var a,n,r,i,s=t.window;;){if(t.lookahead<=yt){if(Lt(t),t.lookahead<=yt&&e===nt)return 1;if(0===t.lookahead)break}if(t.match_length=0,t.lookahead>=3&&t.strstart>0&&(n=s[r=t.strstart-1])===s[++r]&&n===s[++r]&&n===s[++r]){i=t.strstart+yt;do{}while(n===s[++r]&&n===s[++r]&&n===s[++r]&&n===s[++r]&&n===s[++r]&&n===s[++r]&&n===s[++r]&&n===s[++r]&&r<i);t.match_length=yt-(i-r),t.match_length>t.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=3?(a=et(t,1,t.match_length-3),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(a=et(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),a&&(Ct(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===st?(Ct(t,!0),0===t.strm.avail_out?3:4):t.last_lit&&(Ct(t,!1),0===t.strm.avail_out)?1:2}(r,e):Kt[r.level].func(r,e);if(3!==h&&4!==h||(r.status=At),1===h||3===h)return 0===t.avail_out&&(r.last_flush=-1),lt;if(2===h&&(e===rt?at(r):e!==ht&&($(r,0,0,!1),e===it&&(Bt(r.head),0===r.lookahead&&(r.strstart=0,r.block_start=0,r.insert=0))),St(t),0===t.avail_out))return r.last_flush=-1,lt}return e!==st?lt:r.wrap<=0?_t:(2===r.wrap?(Dt(r,255&t.adler),Dt(r,t.adler>>8&255),Dt(r,t.adler>>16&255),Dt(r,t.adler>>24&255),Dt(r,255&t.total_in),Dt(r,t.total_in>>8&255),Dt(r,t.total_in>>16&255),Dt(r,t.total_in>>24&255)):(jt(r,t.adler>>>16),jt(r,65535&t.adler)),St(t),r.wrap>0&&(r.wrap=-r.wrap),0!==r.pending?lt:_t)},deflateEnd:function(t){if(!t||!t.state)return ot;var e=t.state.status;return 42!==e&&69!==e&&73!==e&&91!==e&&e!==zt&&e!==xt&&e!==At?Ut(t,ot):(t.state=null,e===xt?Ut(t,dt):lt)},deflateSetDictionary:function(t,e){var a=e.length;if(!t||!t.state)return ot;var n=t.state,r=n.wrap;if(2===r||1===r&&42!==n.status||n.lookahead)return ot;if(1===r&&(t.adler=K(t.adler,e,a,0)),n.wrap=0,a>=n.w_size){0===r&&(Bt(n.head),n.strstart=0,n.block_start=0,n.insert=0);var i=new Uint8Array(n.w_size);i.set(e.subarray(a-n.w_size,a),0),e=i,a=n.w_size}var s=t.avail_in,h=t.next_in,l=t.input;for(t.avail_in=a,t.next_in=0,t.input=e,Lt(n);n.lookahead>=3;){var _=n.strstart,o=n.lookahead-2;do{n.ins_h=Et(n,n.ins_h,n.window[_+3-1]),n.prev[_&n.w_mask]=n.head[n.ins_h],n.head[n.ins_h]=_,_++}while(--o);n.strstart=_,n.lookahead=2,Lt(n)}return n.strstart+=n.lookahead,n.block_start=n.strstart,n.insert=n.lookahead,n.lookahead=0,n.match_length=n.prev_length=2,n.match_available=0,t.next_in=h,t.input=l,t.avail_in=s,n.wrap=r,lt},deflateInfo:\\\"pako deflate (from Nodeca project)\\\"};for(var Jt=new Uint8Array(256),Pt=0;Pt<256;Pt++)Jt[Pt]=Pt>=252?6:Pt>=248?5:Pt>=240?4:Pt>=224?3:Pt>=192?2:1;Jt[254]=Jt[254]=1;var Qt=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg=\\\"\\\",this.state=null,this.data_type=2,this.adler=0},Vt=Object.prototype.toString,Wt=F,Xt=G,Yt=J,Zt=P,$t=Q,te=V,ee=W,ae=X,ne=Y;function re(){this.options={level:ee,method:ne,chunkSize:16384,windowBits:15,memLevel:8,strategy:ae};var t=this.options;t.raw&&t.windowBits>0?t.windowBits=-t.windowBits:t.gzip&&t.windowBits>0&&t.windowBits<16&&(t.windowBits+=16),this.err=0,this.msg=\\\"\\\",this.ended=!1,this.chunks=[],this.strm=new Qt,this.strm.avail_out=0;var e=Gt.deflateInit2(this.strm,t.level,t.method,t.windowBits,t.memLevel,t.strategy);if(e!==$t)throw new Error(q[e]);if(t.header&&Gt.deflateSetHeader(this.strm,t.header),t.dictionary){var a;if(a=\\\"[object ArrayBuffer]\\\"===Vt.call(t.dictionary)?new Uint8Array(t.dictionary):t.dictionary,(e=Gt.deflateSetDictionary(this.strm,a))!==$t)throw new Error(q[e]);this._dict_set=!0}}function ie(t,e,a){try{t.postMessage({type:\\\"errored\\\",error:e,streamId:a})}catch(n){t.postMessage({type:\\\"errored\\\",error:String(e),streamId:a})}}function se(t){var e=t.strm.adler;return new Uint8Array([3,0,e>>>24&255,e>>>16&255,e>>>8&255,255&e])}re.prototype.push=function(t,e){var a,n,r=this.strm,i=this.options.chunkSize;if(this.ended)return!1;for(n=e===~~e?e:!0===e?Zt:Wt,\\\"[object ArrayBuffer]\\\"===Vt.call(t)?r.input=new Uint8Array(t):r.input=t,r.next_in=0,r.avail_in=r.input.length;;)if(0===r.avail_out&&(r.output=new Uint8Array(i),r.next_out=0,r.avail_out=i),(n===Xt||n===Yt)&&r.avail_out<=6)this.onData(r.output.subarray(0,r.next_out)),r.avail_out=0;else{if((a=Gt.deflate(r,n))===te)return r.next_out>0&&this.onData(r.output.subarray(0,r.next_out)),a=Gt.deflateEnd(this.strm),this.onEnd(a),this.ended=!0,a===$t;if(0!==r.avail_out){if(n>0&&r.next_out>0)this.onData(r.output.subarray(0,r.next_out)),r.avail_out=0;else if(0===r.avail_in)break}else this.onData(r.output)}return!0},re.prototype.onData=function(t){this.chunks.push(t)},re.prototype.onEnd=function(t){t===$t&&(this.result=function(t){for(var e=0,a=0,n=t.length;a<n;a++)e+=t[a].length;for(var r=new Uint8Array(e),i=0,s=0,h=t.length;i<h;i++){var l=t[i];r.set(l,s),s+=l.length}return r}(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg},function(e){void 0===e&&(e=self);try{var a=new Map;e.addEventListener(\\\"message\\\",(function(n){try{var r=function(e,a){switch(a.action){case\\\"init\\\":return{type:\\\"initialized\\\",version:\\\"5.35.1\\\"};case\\\"write\\\":var n=e.get(a.streamId);n||(n=new re,e.set(a.streamId,n));var r=n.chunks.length,i=function(t){if(\\\"function\\\"==typeof TextEncoder&&TextEncoder.prototype.encode)return(new TextEncoder).encode(t);var e,a,n,r,i,s=t.length,h=0;for(r=0;r<s;r++)55296==(64512&(a=t.charCodeAt(r)))&&r+1<s&&56320==(64512&(n=t.charCodeAt(r+1)))&&(a=65536+(a-55296<<10)+(n-56320),r++),h+=a<128?1:a<2048?2:a<65536?3:4;for(e=new Uint8Array(h),i=0,r=0;i<h;r++)55296==(64512&(a=t.charCodeAt(r)))&&r+1<s&&56320==(64512&(n=t.charCodeAt(r+1)))&&(a=65536+(a-55296<<10)+(n-56320),r++),a<128?e[i++]=a:a<2048?(e[i++]=192|a>>>6,e[i++]=128|63&a):a<65536?(e[i++]=224|a>>>12,e[i++]=128|a>>>6&63,e[i++]=128|63&a):(e[i++]=240|a>>>18,e[i++]=128|a>>>12&63,e[i++]=128|a>>>6&63,e[i++]=128|63&a);return e}(a.data);return n.push(i,G),{type:\\\"wrote\\\",id:a.id,streamId:a.streamId,result:t(n.chunks.slice(r)),trailer:se(n),additionalBytesCount:i.length};case\\\"reset\\\":e.delete(a.streamId)}}(a,n.data);r&&e.postMessage(r)}catch(t){ie(e,t,n.data&&\\\"streamId\\\"in n.data?n.data.streamId:void 0)}}))}catch(t){ie(e,t)}}()}();\"])));\n}\nvar state = { status: 0 /* DeflateWorkerStatus.Nil */ };\nexport function startDeflateWorker(configuration, source, onInitializationFailure, createDeflateWorkerImpl) {\n    if (createDeflateWorkerImpl === void 0) { createDeflateWorkerImpl = createDeflateWorker; }\n    if (state.status === 0 /* DeflateWorkerStatus.Nil */) {\n        // doStartDeflateWorker updates the state to \"loading\" or \"error\"\n        doStartDeflateWorker(configuration, source, createDeflateWorkerImpl);\n    }\n    switch (state.status) {\n        case 1 /* DeflateWorkerStatus.Loading */:\n            state.initializationFailureCallbacks.push(onInitializationFailure);\n            return state.worker;\n        case 3 /* DeflateWorkerStatus.Initialized */:\n            return state.worker;\n    }\n}\nexport function resetDeflateWorkerState() {\n    if (state.status === 3 /* DeflateWorkerStatus.Initialized */ || state.status === 1 /* DeflateWorkerStatus.Loading */) {\n        state.stop();\n    }\n    state = { status: 0 /* DeflateWorkerStatus.Nil */ };\n}\nexport function getDeflateWorkerStatus() {\n    return state.status;\n}\n/**\n * Starts the deflate worker and handle messages and errors\n *\n * The spec allow browsers to handle worker errors differently:\n * - Chromium throws an exception\n * - Firefox fires an error event\n *\n * more details: https://bugzilla.mozilla.org/show_bug.cgi?id=1736865#c2\n */\nexport function doStartDeflateWorker(configuration, source, createDeflateWorkerImpl) {\n    if (createDeflateWorkerImpl === void 0) { createDeflateWorkerImpl = createDeflateWorker; }\n    try {\n        var worker = createDeflateWorkerImpl(configuration);\n        var removeErrorListener_1 = addEventListener(configuration, worker, 'error', function (error) {\n            onError(configuration, source, error);\n        }).stop;\n        var removeMessageListener_1 = addEventListener(configuration, worker, 'message', function (_a) {\n            var data = _a.data;\n            if (data.type === 'errored') {\n                onError(configuration, source, data.error, data.streamId);\n            }\n            else if (data.type === 'initialized') {\n                onInitialized(data.version);\n            }\n        }).stop;\n        worker.postMessage({ action: 'init' });\n        setTimeout(function () { return onTimeout(source); }, INITIALIZATION_TIME_OUT_DELAY);\n        var stop_1 = function () {\n            removeErrorListener_1();\n            removeMessageListener_1();\n        };\n        state = { status: 1 /* DeflateWorkerStatus.Loading */, worker: worker, stop: stop_1, initializationFailureCallbacks: [] };\n    }\n    catch (error) {\n        onError(configuration, source, error);\n    }\n}\nfunction onTimeout(source) {\n    if (state.status === 1 /* DeflateWorkerStatus.Loading */) {\n        display.error(\"\".concat(source, \" failed to start: a timeout occurred while initializing the Worker\"));\n        state.initializationFailureCallbacks.forEach(function (callback) { return callback(); });\n        state = { status: 2 /* DeflateWorkerStatus.Error */ };\n    }\n}\nfunction onInitialized(version) {\n    if (state.status === 1 /* DeflateWorkerStatus.Loading */) {\n        state = { status: 3 /* DeflateWorkerStatus.Initialized */, worker: state.worker, stop: state.stop, version: version };\n    }\n}\nfunction onError(configuration, source, error, streamId) {\n    if (state.status === 1 /* DeflateWorkerStatus.Loading */ || state.status === 0 /* DeflateWorkerStatus.Nil */) {\n        display.error(\"\".concat(source, \" failed to start: an error occurred while creating the Worker:\"), error);\n        if (error instanceof Event || (error instanceof Error && isMessageCspRelated(error.message))) {\n            var baseMessage = void 0;\n            if (configuration.workerUrl) {\n                baseMessage = \"Please make sure the Worker URL \".concat(configuration.workerUrl, \" is correct and CSP is correctly configured.\");\n            }\n            else {\n                baseMessage = 'Please make sure CSP is correctly configured.';\n            }\n            display.error(\"\".concat(baseMessage, \" See documentation at \").concat(DOCS_ORIGIN, \"/integrations/content_security_policy_logs/#use-csp-with-real-user-monitoring-and-session-replay\"));\n        }\n        else {\n            addTelemetryError(error);\n        }\n        if (state.status === 1 /* DeflateWorkerStatus.Loading */) {\n            state.initializationFailureCallbacks.forEach(function (callback) { return callback(); });\n        }\n        state = { status: 2 /* DeflateWorkerStatus.Error */ };\n    }\n    else {\n        addTelemetryError(error, {\n            worker_version: state.status === 3 /* DeflateWorkerStatus.Initialized */ && state.version,\n            stream_id: streamId,\n        });\n    }\n}\nfunction isMessageCspRelated(message) {\n    return (includes(message, 'Content Security Policy') ||\n        // Related to `require-trusted-types-for` CSP: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/require-trusted-types-for\n        includes(message, \"requires 'TrustedScriptURL'\"));\n}\n//# sourceMappingURL=deflateWorker.js.map","/**\n * Test for Browser features used while recording\n */\nexport function isBrowserSupported() {\n    return (\n    // Array.from is a bit less supported by browsers than CSSSupportsRule, but has higher chances\n    // to be polyfilled. Test for both to be more confident. We could add more things if we find out\n    // this test is not sufficient.\n    typeof Array.from === 'function' &&\n        typeof CSSSupportsRule === 'function' &&\n        typeof URL.createObjectURL === 'function' &&\n        'forEach' in NodeList.prototype);\n}\n//# sourceMappingURL=isBrowserSupported.js.map","import { getSessionReplayUrl } from '@datadog/browser-rum-core';\nimport { isBrowserSupported } from '../boot/isBrowserSupported';\nexport function getSessionReplayLink(configuration, sessionManager, viewHistory, isRecordingStarted) {\n    var session = sessionManager.findTrackedSession();\n    var errorType = getErrorType(session, isRecordingStarted);\n    var viewContext = viewHistory.findView();\n    return getSessionReplayUrl(configuration, {\n        viewContext: viewContext,\n        errorType: errorType,\n        session: session,\n    });\n}\nfunction getErrorType(session, isRecordingStarted) {\n    if (!isBrowserSupported()) {\n        return 'browser-not-supported';\n    }\n    if (!session) {\n        // possibilities:\n        // - rum sampled out\n        // - session expired (edge case)\n        return 'rum-not-tracked';\n    }\n    if (session.sessionReplay === 0 /* SessionReplayState.OFF */) {\n        // possibilities\n        // - replay sampled out\n        return 'incorrect-session-plan';\n    }\n    if (!isRecordingStarted) {\n        return 'replay-not-started';\n    }\n}\n//# sourceMappingURL=getSessionReplayLink.js.map","import { PageExitReason, runOnReadyState } from '@datadog/browser-core';\nimport { getSessionReplayLink } from '../domain/getSessionReplayLink';\nexport function createPostStartStrategy(configuration, lifeCycle, sessionManager, viewHistory, startRecordingImpl, getOrCreateDeflateEncoder) {\n    var status = 0 /* RecorderStatus.Stopped */;\n    lifeCycle.subscribe(9 /* LifeCycleEventType.SESSION_EXPIRED */, function () {\n        if (status === 2 /* RecorderStatus.Starting */ || status === 3 /* RecorderStatus.Started */) {\n            stop();\n            status = 1 /* RecorderStatus.IntentToStart */;\n        }\n    });\n    // Stop the recorder on page unload to avoid sending records after the page is ended.\n    lifeCycle.subscribe(11 /* LifeCycleEventType.PAGE_EXITED */, function (pageExitEvent) {\n        if (pageExitEvent.reason === PageExitReason.UNLOADING) {\n            stop();\n        }\n    });\n    lifeCycle.subscribe(10 /* LifeCycleEventType.SESSION_RENEWED */, function () {\n        if (status === 1 /* RecorderStatus.IntentToStart */) {\n            start();\n        }\n    });\n    function start(options) {\n        var session = sessionManager.findTrackedSession();\n        if (canStartRecording(session, options)) {\n            status = 1 /* RecorderStatus.IntentToStart */;\n            return;\n        }\n        if (isRecordingInProgress(status)) {\n            return;\n        }\n        status = 2 /* RecorderStatus.Starting */;\n        runOnReadyState(configuration, 'interactive', function () {\n            if (status !== 2 /* RecorderStatus.Starting */) {\n                return;\n            }\n            var deflateEncoder = getOrCreateDeflateEncoder();\n            if (!deflateEncoder) {\n                status = 0 /* RecorderStatus.Stopped */;\n                return;\n            }\n            ;\n            (stopRecording = startRecordingImpl(lifeCycle, configuration, sessionManager, viewHistory, deflateEncoder).stop);\n            status = 3 /* RecorderStatus.Started */;\n        });\n        if (shouldForceReplay(session, options)) {\n            sessionManager.setForcedReplay();\n        }\n    }\n    function stop() {\n        if (status !== 0 /* RecorderStatus.Stopped */ && status === 3 /* RecorderStatus.Started */) {\n            stopRecording === null || stopRecording === void 0 ? void 0 : stopRecording();\n        }\n        status = 0 /* RecorderStatus.Stopped */;\n    }\n    var stopRecording;\n    return {\n        start: start,\n        stop: stop,\n        getSessionReplayLink: function () {\n            return getSessionReplayLink(configuration, sessionManager, viewHistory, status !== 0 /* RecorderStatus.Stopped */);\n        },\n        isRecording: function () { return status === 3 /* RecorderStatus.Started */; },\n    };\n}\nfunction canStartRecording(session, options) {\n    return !session || (session.sessionReplay === 0 /* SessionReplayState.OFF */ && (!options || !options.force));\n}\nfunction isRecordingInProgress(status) {\n    return status === 2 /* RecorderStatus.Starting */ || status === 3 /* RecorderStatus.Started */;\n}\nfunction shouldForceReplay(session, options) {\n    return options && options.force && session.sessionReplay === 0 /* SessionReplayState.OFF */;\n}\n//# sourceMappingURL=postStartStrategy.js.map","// Keep the following in sync with packages/rum-slim/src/entries/main.ts\nimport { defineGlobal, getGlobalObject } from '@datadog/browser-core';\nimport { makeRumPublicApi, startRum } from '@datadog/browser-rum-core';\nimport { startRecording } from '../boot/startRecording';\nimport { makeRecorderApi } from '../boot/recorderApi';\nimport { createDeflateEncoder, startDeflateWorker } from '../domain/deflate';\nexport { DefaultPrivacyLevel } from '@datadog/browser-core';\nvar recorderApi = makeRecorderApi(startRecording);\nexport var datadogRum = makeRumPublicApi(startRum, recorderApi, { startDeflateWorker: startDeflateWorker, createDeflateEncoder: createDeflateEncoder });\ndefineGlobal(getGlobalObject(), 'DD_RUM', datadogRum);\n//# sourceMappingURL=main.js.map","import { catchUserErrors } from '../tools/catchUserErrors';\nimport { setDebugMode } from '../tools/monitor';\nimport { assign } from '../tools/utils/polyfills';\nimport { display } from '../tools/display';\nexport function makePublicApi(stub) {\n    var publicApi = assign({\n        version: \"5.35.1\",\n        // This API method is intentionally not monitored, since the only thing executed is the\n        // user-provided 'callback'.  All SDK usages executed in the callback should be monitored, and\n        // we don't want to interfere with the user uncaught exceptions.\n        onReady: function (callback) {\n            callback();\n        },\n    }, stub);\n    // Add a \"hidden\" property to set debug mode. We define it that way to hide it\n    // as much as possible but of course it's not a real protection.\n    Object.defineProperty(publicApi, '_setDebug', {\n        get: function () {\n            return setDebugMode;\n        },\n        enumerable: false,\n    });\n    return publicApi;\n}\nexport function defineGlobal(global, name, api) {\n    var existingGlobalVariable = global[name];\n    if (existingGlobalVariable && !existingGlobalVariable.q && existingGlobalVariable.version) {\n        display.warn('SDK is loaded more than once. This is unsupported and might have unexpected behavior.');\n    }\n    global[name] = api;\n    if (existingGlobalVariable && existingGlobalVariable.q) {\n        existingGlobalVariable.q.forEach(function (fn) { return catchUserErrors(fn, 'onReady callback threw an error:')(); });\n    }\n}\n//# sourceMappingURL=init.js.map","import { canUseEventBridge, noop, bridgeSupports, } from '@datadog/browser-core';\nimport { getReplayStats as getReplayStatsImpl } from '../domain/replayStats';\nimport { createDeflateEncoder, getDeflateWorkerStatus, startDeflateWorker, } from '../domain/deflate';\nimport { isBrowserSupported } from './isBrowserSupported';\nimport { createPostStartStrategy } from './postStartStrategy';\nimport { createPreStartStrategy } from './preStartStrategy';\nexport function makeRecorderApi(startRecordingImpl, createDeflateWorkerImpl) {\n    if ((canUseEventBridge() && !bridgeSupports(\"records\" /* BridgeCapability.RECORDS */)) || !isBrowserSupported()) {\n        return {\n            start: noop,\n            stop: noop,\n            getReplayStats: function () { return undefined; },\n            onRumStart: noop,\n            isRecording: function () { return false; },\n            getSessionReplayLink: function () { return undefined; },\n        };\n    }\n    // eslint-disable-next-line prefer-const\n    var _a = createPreStartStrategy(), strategy = _a.strategy, shouldStartImmediately = _a.shouldStartImmediately;\n    return {\n        start: function (options) { return strategy.start(options); },\n        stop: function () { return strategy.stop(); },\n        getSessionReplayLink: function () { return strategy.getSessionReplayLink(); },\n        onRumStart: onRumStart,\n        isRecording: function () {\n            // The worker is started optimistically, meaning we could have started to record but its\n            // initialization fails a bit later. This could happen when:\n            // * the worker URL (blob or plain URL) is blocked by CSP in Firefox only (Chromium and Safari\n            // throw an exception when instantiating the worker, and IE doesn't care about CSP)\n            // * the browser fails to load the worker in case the workerUrl is used\n            // * an unexpected error occurs in the Worker before initialization, ex:\n            //   * a runtime exception collected by monitor()\n            //   * a syntax error notified by the browser via an error event\n            // * the worker is unresponsive for some reason and timeouts\n            //\n            // It is not expected to happen often. Nonetheless, the \"replayable\" status on RUM events is\n            // an important part of the Datadog App:\n            // * If we have a false positive (we set has_replay: true even if no replay data is present),\n            // we might display broken links to the Session Replay player.\n            // * If we have a false negative (we don't set has_replay: true even if replay data is\n            // available), it is less noticeable because no link will be displayed.\n            //\n            // Thus, it is better to have false negative, so let's make sure the worker is correctly\n            // initialized before advertizing that we are recording.\n            //\n            // In the future, when the compression worker will also be used for RUM data, this will be\n            // less important since no RUM event will be sent when the worker fails to initialize.\n            return getDeflateWorkerStatus() === 3 /* DeflateWorkerStatus.Initialized */ && strategy.isRecording();\n        },\n        getReplayStats: function (viewId) {\n            return getDeflateWorkerStatus() === 3 /* DeflateWorkerStatus.Initialized */ ? getReplayStatsImpl(viewId) : undefined;\n        },\n    };\n    function onRumStart(lifeCycle, configuration, sessionManager, viewHistory, worker) {\n        var cachedDeflateEncoder;\n        function getOrCreateDeflateEncoder() {\n            if (!cachedDeflateEncoder) {\n                worker !== null && worker !== void 0 ? worker : (worker = startDeflateWorker(configuration, 'Datadog Session Replay', function () {\n                    strategy.stop();\n                }, createDeflateWorkerImpl));\n                if (worker) {\n                    cachedDeflateEncoder = createDeflateEncoder(configuration, worker, 1 /* DeflateEncoderStreamId.REPLAY */);\n                }\n            }\n            return cachedDeflateEncoder;\n        }\n        strategy = createPostStartStrategy(configuration, lifeCycle, sessionManager, viewHistory, startRecordingImpl, getOrCreateDeflateEncoder);\n        if (shouldStartImmediately(configuration)) {\n            strategy.start();\n        }\n    }\n}\n//# sourceMappingURL=recorderApi.js.map","import { noop } from '@datadog/browser-core';\nexport function createPreStartStrategy() {\n    var status = 0 /* PreStartRecorderStatus.None */;\n    return {\n        strategy: {\n            start: function () {\n                status = 1 /* PreStartRecorderStatus.HadManualStart */;\n            },\n            stop: function () {\n                status = 2 /* PreStartRecorderStatus.HadManualStop */;\n            },\n            isRecording: function () { return false; },\n            getSessionReplayLink: noop,\n        },\n        shouldStartImmediately: function (configuration) {\n            return (status === 1 /* PreStartRecorderStatus.HadManualStart */ ||\n                (status === 0 /* PreStartRecorderStatus.None */ && !configuration.startSessionReplayRecordingManually));\n        },\n    };\n}\n//# sourceMappingURL=preStartStrategy.js.map","import { createHttpRequest, addTelemetryDebug, canUseEventBridge } from '@datadog/browser-core';\nimport { record } from '../domain/record';\nimport { startSegmentCollection, SEGMENT_BYTES_LIMIT } from '../domain/segmentCollection';\nimport { startRecordBridge } from '../domain/startRecordBridge';\nexport function startRecording(lifeCycle, configuration, sessionManager, viewHistory, encoder, httpRequest) {\n    var cleanupTasks = [];\n    var reportError = function (error) {\n        lifeCycle.notify(14 /* LifeCycleEventType.RAW_ERROR_COLLECTED */, { error: error });\n        addTelemetryDebug('Error reported to customer', { 'error.message': error.message });\n    };\n    var replayRequest = httpRequest || createHttpRequest(configuration.sessionReplayEndpointBuilder, SEGMENT_BYTES_LIMIT, reportError);\n    var addRecord;\n    if (!canUseEventBridge()) {\n        var segmentCollection = startSegmentCollection(lifeCycle, configuration, sessionManager, viewHistory, replayRequest, encoder);\n        addRecord = segmentCollection.addRecord;\n        cleanupTasks.push(segmentCollection.stop);\n    }\n    else {\n        ;\n        (addRecord = startRecordBridge(viewHistory).addRecord);\n    }\n    var stopRecording = record({\n        emit: addRecord,\n        configuration: configuration,\n        lifeCycle: lifeCycle,\n        viewHistory: viewHistory,\n    }).stop;\n    cleanupTasks.push(stopRecording);\n    return {\n        stop: function () {\n            cleanupTasks.forEach(function (task) { return task(); });\n        },\n    };\n}\n//# sourceMappingURL=startRecording.js.map","import { getEventBridge } from '@datadog/browser-core';\nexport function startRecordBridge(viewHistory) {\n    var bridge = getEventBridge();\n    return {\n        addRecord: function (record) {\n            // Get the current active view, not at the time of the record, aligning with the segment logic.\n            // This approach could potentially associate the record to an incorrect view, in case the record date is in the past (e.g. frustration records).\n            // However the risk is minimal. We could address the issue when potential negative impact are identified.\n            var view = viewHistory.findView();\n            bridge.send('record', record, view.id);\n        },\n    };\n}\n//# sourceMappingURL=startRecordBridge.js.map","import { addTelemetryUsage, assign, createContextManager, deepClone, makePublicApi, monitor, clocksNow, callMonitored, createHandlingStack, checkUser, sanitizeUser, sanitize, createIdentityEncoder, createCustomerDataTrackerManager, storeContextManager, displayAlreadyInitializedError, createTrackingConsentState, timeStampToClocks, } from '@datadog/browser-core';\nimport { buildCommonContext } from '../domain/contexts/commonContext';\nimport { createCustomVitalsState } from '../domain/vital/vitalCollection';\nimport { createPreStartStrategy } from './preStartRum';\nvar RUM_STORAGE_KEY = 'rum';\nexport function makeRumPublicApi(startRumImpl, recorderApi, options) {\n    if (options === void 0) { options = {}; }\n    var customerDataTrackerManager = createCustomerDataTrackerManager(0 /* CustomerDataCompressionStatus.Unknown */);\n    var globalContextManager = createContextManager(customerDataTrackerManager.getOrCreateTracker(2 /* CustomerDataType.GlobalContext */));\n    var userContextManager = createContextManager(customerDataTrackerManager.getOrCreateTracker(1 /* CustomerDataType.User */));\n    var trackingConsentState = createTrackingConsentState();\n    var customVitalsState = createCustomVitalsState();\n    function getCommonContext() {\n        return buildCommonContext(globalContextManager, userContextManager, recorderApi);\n    }\n    var strategy = createPreStartStrategy(options, getCommonContext, trackingConsentState, customVitalsState, function (configuration, deflateWorker, initialViewOptions) {\n        if (configuration.storeContextsAcrossPages) {\n            storeContextManager(configuration, globalContextManager, RUM_STORAGE_KEY, 2 /* CustomerDataType.GlobalContext */);\n            storeContextManager(configuration, userContextManager, RUM_STORAGE_KEY, 1 /* CustomerDataType.User */);\n        }\n        customerDataTrackerManager.setCompressionStatus(deflateWorker ? 1 /* CustomerDataCompressionStatus.Enabled */ : 2 /* CustomerDataCompressionStatus.Disabled */);\n        var startRumResult = startRumImpl(configuration, recorderApi, customerDataTrackerManager, getCommonContext, initialViewOptions, deflateWorker && options.createDeflateEncoder\n            ? function (streamId) { return options.createDeflateEncoder(configuration, deflateWorker, streamId); }\n            : createIdentityEncoder, trackingConsentState, customVitalsState);\n        recorderApi.onRumStart(startRumResult.lifeCycle, configuration, startRumResult.session, startRumResult.viewHistory, deflateWorker);\n        strategy = createPostStartStrategy(strategy, startRumResult);\n        return startRumResult;\n    });\n    var startView = monitor(function (options) {\n        var sanitizedOptions = typeof options === 'object' ? options : { name: options };\n        if (sanitizedOptions.context) {\n            customerDataTrackerManager.getOrCreateTracker(3 /* CustomerDataType.View */).updateCustomerData(sanitizedOptions.context);\n        }\n        strategy.startView(sanitizedOptions);\n        addTelemetryUsage({ feature: 'start-view' });\n    });\n    var rumPublicApi = makePublicApi({\n        init: monitor(function (initConfiguration) {\n            strategy.init(initConfiguration, rumPublicApi);\n        }),\n        setTrackingConsent: monitor(function (trackingConsent) {\n            trackingConsentState.update(trackingConsent);\n            addTelemetryUsage({ feature: 'set-tracking-consent', tracking_consent: trackingConsent });\n        }),\n        setViewName: monitor(function (name) {\n            strategy.setViewName(name);\n        }),\n        setViewContext: monitor(function (context) {\n            strategy.setViewContext(context);\n        }),\n        setViewContextProperty: monitor(function (key, value) {\n            strategy.setViewContextProperty(key, value);\n        }),\n        setGlobalContext: monitor(function (context) {\n            globalContextManager.setContext(context);\n            addTelemetryUsage({ feature: 'set-global-context' });\n        }),\n        getGlobalContext: monitor(function () { return globalContextManager.getContext(); }),\n        setGlobalContextProperty: monitor(function (key, value) {\n            globalContextManager.setContextProperty(key, value);\n            addTelemetryUsage({ feature: 'set-global-context' });\n        }),\n        removeGlobalContextProperty: monitor(function (key) { return globalContextManager.removeContextProperty(key); }),\n        clearGlobalContext: monitor(function () { return globalContextManager.clearContext(); }),\n        getInternalContext: monitor(function (startTime) { return strategy.getInternalContext(startTime); }),\n        getInitConfiguration: monitor(function () { return deepClone(strategy.initConfiguration); }),\n        addAction: function (name, context) {\n            var handlingStack = createHandlingStack();\n            callMonitored(function () {\n                strategy.addAction({\n                    name: sanitize(name),\n                    context: sanitize(context),\n                    startClocks: clocksNow(),\n                    type: \"custom\" /* ActionType.CUSTOM */,\n                    handlingStack: handlingStack,\n                });\n                addTelemetryUsage({ feature: 'add-action' });\n            });\n        },\n        addError: function (error, context) {\n            var handlingStack = createHandlingStack();\n            callMonitored(function () {\n                strategy.addError({\n                    error: error, // Do not sanitize error here, it is needed unserialized by computeRawError()\n                    handlingStack: handlingStack,\n                    context: sanitize(context),\n                    startClocks: clocksNow(),\n                });\n                addTelemetryUsage({ feature: 'add-error' });\n            });\n        },\n        addTiming: monitor(function (name, time) {\n            // TODO: next major decide to drop relative time support or update its behaviour\n            strategy.addTiming(sanitize(name), time);\n        }),\n        setUser: monitor(function (newUser) {\n            if (checkUser(newUser)) {\n                userContextManager.setContext(sanitizeUser(newUser));\n            }\n            addTelemetryUsage({ feature: 'set-user' });\n        }),\n        getUser: monitor(function () { return userContextManager.getContext(); }),\n        setUserProperty: monitor(function (key, property) {\n            var _a;\n            var sanitizedProperty = sanitizeUser((_a = {}, _a[key] = property, _a))[key];\n            userContextManager.setContextProperty(key, sanitizedProperty);\n            addTelemetryUsage({ feature: 'set-user' });\n        }),\n        removeUserProperty: monitor(function (key) { return userContextManager.removeContextProperty(key); }),\n        clearUser: monitor(function () { return userContextManager.clearContext(); }),\n        startView: startView,\n        stopSession: monitor(function () {\n            strategy.stopSession();\n            addTelemetryUsage({ feature: 'stop-session' });\n        }),\n        addFeatureFlagEvaluation: monitor(function (key, value) {\n            strategy.addFeatureFlagEvaluation(sanitize(key), sanitize(value));\n            addTelemetryUsage({ feature: 'add-feature-flag-evaluation' });\n        }),\n        getSessionReplayLink: monitor(function () { return recorderApi.getSessionReplayLink(); }),\n        startSessionReplayRecording: monitor(function (options) {\n            recorderApi.start(options);\n            addTelemetryUsage({ feature: 'start-session-replay-recording', force: options && options.force });\n        }),\n        stopSessionReplayRecording: monitor(function () { return recorderApi.stop(); }),\n        addDurationVital: monitor(function (name, options) {\n            addTelemetryUsage({ feature: 'add-duration-vital' });\n            strategy.addDurationVital({\n                name: sanitize(name),\n                type: \"duration\" /* VitalType.DURATION */,\n                startClocks: timeStampToClocks(options.startTime),\n                duration: options.duration,\n                context: sanitize(options && options.context),\n                description: sanitize(options && options.description),\n            });\n        }),\n        startDurationVital: monitor(function (name, options) {\n            addTelemetryUsage({ feature: 'start-duration-vital' });\n            return strategy.startDurationVital(sanitize(name), {\n                context: sanitize(options && options.context),\n                description: sanitize(options && options.description),\n            });\n        }),\n        stopDurationVital: monitor(function (nameOrRef, options) {\n            addTelemetryUsage({ feature: 'stop-duration-vital' });\n            strategy.stopDurationVital(typeof nameOrRef === 'string' ? sanitize(nameOrRef) : nameOrRef, {\n                context: sanitize(options && options.context),\n                description: sanitize(options && options.description),\n            });\n        }),\n    });\n    return rumPublicApi;\n}\nfunction createPostStartStrategy(preStartStrategy, startRumResult) {\n    return assign({\n        init: function (initConfiguration) {\n            displayAlreadyInitializedError('DD_RUM', initConfiguration);\n        },\n        initConfiguration: preStartStrategy.initConfiguration,\n    }, startRumResult);\n}\n//# sourceMappingURL=rumPublicApi.js.map","export function buildCommonContext(globalContextManager, userContextManager, recorderApi) {\n    return {\n        context: globalContextManager.getContext(),\n        user: userContextManager.getContext(),\n        hasReplay: recorderApi.isRecording() ? true : undefined,\n    };\n}\n//# sourceMappingURL=commonContext.js.map","import { sendToExtension, createPageExitObservable, startTelemetry, canUseEventBridge, getEventBridge, addTelemetryDebug, drainPreStartTelemetry, isExperimentalFeatureEnabled, ExperimentalFeature, } from '@datadog/browser-core';\nimport { createDOMMutationObservable } from '../browser/domMutationObservable';\nimport { createWindowOpenObservable } from '../browser/windowOpenObservable';\nimport { startRumAssembly } from '../domain/assembly';\nimport { startInternalContext } from '../domain/contexts/internalContext';\nimport { LifeCycle } from '../domain/lifeCycle';\nimport { startViewHistory } from '../domain/contexts/viewHistory';\nimport { startRequestCollection } from '../domain/requestCollection';\nimport { startActionCollection } from '../domain/action/actionCollection';\nimport { startErrorCollection } from '../domain/error/errorCollection';\nimport { startLongTaskCollection } from '../domain/longTask/longTaskCollection';\nimport { startResourceCollection } from '../domain/resource/resourceCollection';\nimport { startViewCollection } from '../domain/view/viewCollection';\nimport { startRumSessionManager, startRumSessionManagerStub } from '../domain/rumSessionManager';\nimport { startRumBatch } from '../transport/startRumBatch';\nimport { startRumEventBridge } from '../transport/startRumEventBridge';\nimport { startUrlContexts } from '../domain/contexts/urlContexts';\nimport { createLocationChangeObservable } from '../browser/locationChangeObservable';\nimport { startFeatureFlagContexts } from '../domain/contexts/featureFlagContext';\nimport { startCustomerDataTelemetry } from '../domain/startCustomerDataTelemetry';\nimport { startPageStateHistory } from '../domain/contexts/pageStateHistory';\nimport { startDisplayContext } from '../domain/contexts/displayContext';\nimport { startVitalCollection } from '../domain/vital/vitalCollection';\nimport { startCiVisibilityContext } from '../domain/contexts/ciVisibilityContext';\nimport { startLongAnimationFrameCollection } from '../domain/longAnimationFrame/longAnimationFrameCollection';\nexport function startRum(configuration, recorderApi, customerDataTrackerManager, getCommonContext, initialViewOptions, createEncoder, \n// `startRum` and its subcomponents assume tracking consent is granted initially and starts\n// collecting logs unconditionally. As such, `startRum` should be called with a\n// `trackingConsentState` set to \"granted\".\ntrackingConsentState, customVitalsState) {\n    var cleanupTasks = [];\n    var lifeCycle = new LifeCycle();\n    lifeCycle.subscribe(13 /* LifeCycleEventType.RUM_EVENT_COLLECTED */, function (event) { return sendToExtension('rum', event); });\n    var telemetry = startRumTelemetry(configuration);\n    telemetry.setContextProvider(function () {\n        var _a, _b;\n        return ({\n            application: {\n                id: configuration.applicationId,\n            },\n            session: {\n                id: (_a = session.findTrackedSession()) === null || _a === void 0 ? void 0 : _a.id,\n            },\n            view: {\n                id: (_b = viewHistory.findView()) === null || _b === void 0 ? void 0 : _b.id,\n            },\n            action: {\n                id: actionContexts.findActionId(),\n            },\n        });\n    });\n    var reportError = function (error) {\n        lifeCycle.notify(14 /* LifeCycleEventType.RAW_ERROR_COLLECTED */, { error: error });\n        addTelemetryDebug('Error reported to customer', { 'error.message': error.message });\n    };\n    var featureFlagContexts = startFeatureFlagContexts(lifeCycle, customerDataTrackerManager.getOrCreateTracker(0 /* CustomerDataType.FeatureFlag */));\n    var pageExitObservable = createPageExitObservable(configuration);\n    var pageExitSubscription = pageExitObservable.subscribe(function (event) {\n        lifeCycle.notify(11 /* LifeCycleEventType.PAGE_EXITED */, event);\n    });\n    cleanupTasks.push(function () { return pageExitSubscription.unsubscribe(); });\n    var session = !canUseEventBridge()\n        ? startRumSessionManager(configuration, lifeCycle, trackingConsentState)\n        : startRumSessionManagerStub();\n    if (!canUseEventBridge()) {\n        var batch_1 = startRumBatch(configuration, lifeCycle, telemetry.observable, reportError, pageExitObservable, session.expireObservable, createEncoder);\n        cleanupTasks.push(function () { return batch_1.stop(); });\n        startCustomerDataTelemetry(configuration, telemetry, lifeCycle, customerDataTrackerManager, batch_1.flushObservable);\n    }\n    else {\n        startRumEventBridge(lifeCycle);\n    }\n    var domMutationObservable = createDOMMutationObservable();\n    var locationChangeObservable = createLocationChangeObservable(configuration, location);\n    var pageStateHistory = startPageStateHistory(configuration);\n    var _a = createWindowOpenObservable(), windowOpenObservable = _a.observable, stopWindowOpen = _a.stop;\n    cleanupTasks.push(stopWindowOpen);\n    var _b = startRumEventCollection(lifeCycle, configuration, location, session, pageStateHistory, locationChangeObservable, domMutationObservable, windowOpenObservable, getCommonContext, reportError), viewHistory = _b.viewHistory, urlContexts = _b.urlContexts, actionContexts = _b.actionContexts, addAction = _b.addAction, stopRumEventCollection = _b.stop;\n    cleanupTasks.push(stopRumEventCollection);\n    drainPreStartTelemetry();\n    var _c = startViewCollection(lifeCycle, configuration, location, domMutationObservable, windowOpenObservable, locationChangeObservable, featureFlagContexts, pageStateHistory, recorderApi, initialViewOptions), addTiming = _c.addTiming, startView = _c.startView, setViewName = _c.setViewName, setViewContext = _c.setViewContext, setViewContextProperty = _c.setViewContextProperty, stopViewCollection = _c.stop;\n    cleanupTasks.push(stopViewCollection);\n    var stopResourceCollection = startResourceCollection(lifeCycle, configuration, pageStateHistory).stop;\n    cleanupTasks.push(stopResourceCollection);\n    if (isExperimentalFeatureEnabled(ExperimentalFeature.LONG_ANIMATION_FRAME)) {\n        if (configuration.trackLongTasks) {\n            var stopLongAnimationFrameCollection = startLongAnimationFrameCollection(lifeCycle, configuration).stop;\n            cleanupTasks.push(stopLongAnimationFrameCollection);\n        }\n    }\n    else {\n        startLongTaskCollection(lifeCycle, configuration);\n    }\n    var addError = startErrorCollection(lifeCycle, configuration, pageStateHistory, featureFlagContexts).addError;\n    startRequestCollection(lifeCycle, configuration, session);\n    var vitalCollection = startVitalCollection(lifeCycle, pageStateHistory, customVitalsState);\n    var internalContext = startInternalContext(configuration.applicationId, session, viewHistory, actionContexts, urlContexts);\n    return {\n        addAction: addAction,\n        addError: addError,\n        addTiming: addTiming,\n        addFeatureFlagEvaluation: featureFlagContexts.addFeatureFlagEvaluation,\n        startView: startView,\n        setViewContext: setViewContext,\n        setViewContextProperty: setViewContextProperty,\n        setViewName: setViewName,\n        lifeCycle: lifeCycle,\n        viewHistory: viewHistory,\n        session: session,\n        stopSession: function () { return session.expire(); },\n        getInternalContext: internalContext.get,\n        startDurationVital: vitalCollection.startDurationVital,\n        stopDurationVital: vitalCollection.stopDurationVital,\n        addDurationVital: vitalCollection.addDurationVital,\n        stop: function () {\n            cleanupTasks.forEach(function (task) { return task(); });\n        },\n    };\n}\nfunction startRumTelemetry(configuration) {\n    var telemetry = startTelemetry(\"browser-rum-sdk\" /* TelemetryService.RUM */, configuration);\n    if (canUseEventBridge()) {\n        var bridge_1 = getEventBridge();\n        telemetry.observable.subscribe(function (event) { return bridge_1.send('internal_telemetry', event); });\n    }\n    return telemetry;\n}\nexport function startRumEventCollection(lifeCycle, configuration, location, sessionManager, pageStateHistory, locationChangeObservable, domMutationObservable, windowOpenObservable, getCommonContext, reportError) {\n    var viewHistory = startViewHistory(lifeCycle);\n    var urlContexts = startUrlContexts(lifeCycle, locationChangeObservable, location);\n    var actionCollection = startActionCollection(lifeCycle, domMutationObservable, windowOpenObservable, configuration, pageStateHistory);\n    var displayContext = startDisplayContext(configuration);\n    var ciVisibilityContext = startCiVisibilityContext(configuration);\n    startRumAssembly(configuration, lifeCycle, sessionManager, viewHistory, urlContexts, actionCollection.actionContexts, displayContext, ciVisibilityContext, getCommonContext, reportError);\n    return {\n        viewHistory: viewHistory,\n        pageStateHistory: pageStateHistory,\n        urlContexts: urlContexts,\n        addAction: actionCollection.addAction,\n        actionContexts: actionCollection.actionContexts,\n        stop: function () {\n            actionCollection.stop();\n            ciVisibilityContext.stop();\n            displayContext.stop();\n            urlContexts.stop();\n            viewHistory.stop();\n            pageStateHistory.stop();\n        },\n    };\n}\n//# sourceMappingURL=startRum.js.map","import { getEventBridge } from '@datadog/browser-core';\nexport function startRumEventBridge(lifeCycle) {\n    var bridge = getEventBridge();\n    lifeCycle.subscribe(13 /* LifeCycleEventType.RUM_EVENT_COLLECTED */, function (serverRumEvent) {\n        bridge.send('rum', serverRumEvent);\n    });\n}\n//# sourceMappingURL=startRumEventBridge.js.map","import { instrumentMethod, Observable } from '@datadog/browser-core';\nexport function createWindowOpenObservable() {\n    var observable = new Observable();\n    var stop = instrumentMethod(window, 'open', function () { return observable.notify(); }).stop;\n    return { observable: observable, stop: stop };\n}\n//# sourceMappingURL=windowOpenObservable.js.map","import { ExperimentalFeature, isExperimentalFeatureEnabled } from '@datadog/browser-core';\nimport { getViewportDimension, initViewportObservable } from '../../browser/viewportObservable';\nexport function startDisplayContext(configuration) {\n    var viewport;\n    var animationFrameId;\n    if (isExperimentalFeatureEnabled(ExperimentalFeature.DELAY_VIEWPORT_COLLECTION)) {\n        // Use requestAnimationFrame to delay the calculation of viewport dimensions until after SDK initialization, preventing long tasks.\n        animationFrameId = requestAnimationFrame(function () {\n            viewport = getViewportDimension();\n        });\n    }\n    else {\n        viewport = getViewportDimension();\n    }\n    var unsubscribeViewport = initViewportObservable(configuration).subscribe(function (viewportDimension) {\n        viewport = viewportDimension;\n    }).unsubscribe;\n    return {\n        get: function () { return (viewport ? { viewport: viewport } : undefined); },\n        stop: function () {\n            unsubscribeViewport();\n            if (animationFrameId) {\n                cancelAnimationFrame(animationFrameId);\n            }\n        },\n    };\n}\n//# sourceMappingURL=displayContext.js.map","import { toServerDuration, relativeToClocks, generateUUID } from '@datadog/browser-core';\nimport { createPerformanceObservable, RumPerformanceEntryType } from '../../browser/performanceObservable';\nexport function startLongAnimationFrameCollection(lifeCycle, configuration) {\n    var performanceResourceSubscription = createPerformanceObservable(configuration, {\n        type: RumPerformanceEntryType.LONG_ANIMATION_FRAME,\n        buffered: true,\n    }).subscribe(function (entries) {\n        for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {\n            var entry = entries_1[_i];\n            var startClocks = relativeToClocks(entry.startTime);\n            var rawRumEvent = {\n                date: startClocks.timeStamp,\n                long_task: {\n                    id: generateUUID(),\n                    entry_type: \"long-animation-frame\" /* RumLongTaskEntryType.LONG_ANIMATION_FRAME */,\n                    duration: toServerDuration(entry.duration),\n                    blocking_duration: toServerDuration(entry.blockingDuration),\n                    first_ui_event_timestamp: toServerDuration(entry.firstUIEventTimestamp),\n                    render_start: toServerDuration(entry.renderStart),\n                    style_and_layout_start: toServerDuration(entry.styleAndLayoutStart),\n                    start_time: toServerDuration(entry.startTime),\n                    scripts: entry.scripts.map(function (script) { return ({\n                        duration: toServerDuration(script.duration),\n                        pause_duration: toServerDuration(script.pauseDuration),\n                        forced_style_and_layout_duration: toServerDuration(script.forcedStyleAndLayoutDuration),\n                        start_time: toServerDuration(script.startTime),\n                        execution_start: toServerDuration(script.executionStart),\n                        source_url: script.sourceURL,\n                        source_function_name: script.sourceFunctionName,\n                        source_char_position: script.sourceCharPosition,\n                        invoker: script.invoker,\n                        invoker_type: script.invokerType,\n                        window_attribution: script.windowAttribution,\n                    }); }),\n                },\n                type: \"long_task\" /* RumEventType.LONG_TASK */,\n                _dd: {\n                    discarded: false,\n                },\n            };\n            lifeCycle.notify(12 /* LifeCycleEventType.RAW_RUM_EVENT_COLLECTED */, {\n                rawRumEvent: rawRumEvent,\n                startTime: startClocks.relative,\n                domainContext: { performanceEntry: entry },\n            });\n        }\n    });\n    return {\n        stop: function () { return performanceResourceSubscription.unsubscribe(); },\n    };\n}\n//# sourceMappingURL=longAnimationFrameCollection.js.map","import { toServerDuration, relativeToClocks, generateUUID } from '@datadog/browser-core';\nimport { createPerformanceObservable, RumPerformanceEntryType } from '../../browser/performanceObservable';\nexport function startLongTaskCollection(lifeCycle, configuration) {\n    var performanceLongTaskSubscription = createPerformanceObservable(configuration, {\n        type: RumPerformanceEntryType.LONG_TASK,\n        buffered: true,\n    }).subscribe(function (entries) {\n        for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {\n            var entry = entries_1[_i];\n            if (entry.entryType !== RumPerformanceEntryType.LONG_TASK) {\n                break;\n            }\n            if (!configuration.trackLongTasks) {\n                break;\n            }\n            var startClocks = relativeToClocks(entry.startTime);\n            var rawRumEvent = {\n                date: startClocks.timeStamp,\n                long_task: {\n                    id: generateUUID(),\n                    entry_type: \"long-task\" /* RumLongTaskEntryType.LONG_TASK */,\n                    duration: toServerDuration(entry.duration),\n                },\n                type: \"long_task\" /* RumEventType.LONG_TASK */,\n                _dd: {\n                    discarded: false,\n                },\n            };\n            lifeCycle.notify(12 /* LifeCycleEventType.RAW_RUM_EVENT_COLLECTED */, {\n                rawRumEvent: rawRumEvent,\n                startTime: startClocks.relative,\n                domainContext: { performanceEntry: entry },\n            });\n        }\n    });\n    return {\n        stop: function () {\n            performanceLongTaskSubscription.unsubscribe();\n        },\n    };\n}\n//# sourceMappingURL=longTaskCollection.js.map","/**\n * Internal context keep returning v1 format\n * to not break compatibility with logs data format\n */\nexport function startInternalContext(applicationId, sessionManager, viewHistory, actionContexts, urlContexts) {\n    return {\n        get: function (startTime) {\n            var viewContext = viewHistory.findView(startTime);\n            var urlContext = urlContexts.findUrl(startTime);\n            var session = sessionManager.findTrackedSession(startTime);\n            if (session && viewContext && urlContext) {\n                var actionId = actionContexts.findActionId(startTime);\n                return {\n                    application_id: applicationId,\n                    session_id: session.id,\n                    user_action: actionId ? { id: actionId } : undefined,\n                    view: { id: viewContext.id, name: viewContext.name, referrer: urlContext.referrer, url: urlContext.url },\n                };\n            }\n        },\n    };\n}\n//# sourceMappingURL=internalContext.js.map","// @flow\n\nimport { datadogRum } from '@datadog/browser-rum';\nimport { retrieve } from 'putki';\nimport { consentGivenForCategory } from 'utils/cookieConsent';\n\nconst environment = window.__ENVIRONMENT__;\n\nlet initialized = false;\nfunction initializeDatadogRum() {\n  if (initialized) return;\n  initialized = true;\n\n  // sessionSampleRate:\n  //   The percentage of sessions to track: 100 for all, 0 for none. Only\n  //   tracked sessions send RUM events. For more details about\n  //   sessionSampleRate, see the sampling configuration.\n  //    -> https://docs.datadoghq.com/real_user_monitoring/guide/sampling-browser-plans/\n  //\n  // sessionReplaySampleRate:\n  //   The percentage of tracked sessions with Browser RUM & Session Replay\n  //   pricing features: 100 for all, 0 for none. For more details about\n  //   sessionReplaySampleRate, see the sampling configuration.\n  //    -> https://www.datadoghq.com/pricing/?product=real-user-monitoring--session-replay#real-user-monitoring--session-replay\n  //    -> https://docs.datadoghq.com/real_user_monitoring/guide/sampling-browser-plans/\n\n  const { sessionSampleRate, sessionReplaySampleRate } = (() => {\n    switch (environment) {\n      case 'test':\n        // We don't want test environment to send any RUM events but we do\n        // want our app to crash in test if for some reason the Datadog RUM\n        // code messes up our application.\n        return { sessionSampleRate: 0, sessionReplaySampleRate: 0 };\n      case 'development':\n        // We don't want to incur pricing costs in development.\n        // This number can be changed when we want to test the RUM code.\n        return { sessionSampleRate: 0, sessionReplaySampleRate: 0 };\n      default:\n        // We only want a very small portion of our users triggering this\n        // as it might prove to be really costly.\n        //\n        // We are not using session replays, though, so we disable that.\n        return { sessionSampleRate: 5, sessionReplaySampleRate: 0 };\n    }\n  })();\n\n  const controller = retrieve('controller');\n  const action = retrieve('action');\n  datadogRum.init({\n    applicationId: '1b89e864-e532-4578-a391-cf29b0edb549',\n    clientToken: 'pubf765aeae3809f6105bb0c168ce3687bd',\n    site: 'datadoghq.eu',\n    service: 'venuu',\n    env: environment,\n    version: retrieve('application_version_git'),\n    sessionSampleRate,\n    sessionReplaySampleRate,\n    allowedTracingUrls: [/^https:\\/\\/(?:dev\\.|staging\\.)?venuu\\.(?:fi|se|com)/],\n    trackUserInteractions: true,\n    trackResources: true,\n    trackLongTasks: true,\n    beforeSend: event => {\n      if (typeof controller === 'string' && typeof action === 'string') {\n        // Datadog shows this in RUM session explorer for view names:\n        //\n        // > RUM SDK supports custom view names, which can be used to override\n        // > `url_path_group`. If not specified, it will have the same content\n        // > of `view.url_path_group`.\n        //\n        // So in order for venue pages, search pages etc. to be monitorable as\n        // their own groups, we can set up a custom view name that uses the\n        // Rails controller name and actions.\n        //\n        // This way, regardless of how pretty our URLs are, the grouping will\n        // match the way we write our pages. And we can finally monitor how long\n        // venue profile pages take to load.\n        event.view.name = `${controller}#${action}`;\n      }\n    },\n    defaultPrivacyLevel: 'mask-user-input'\n  });\n\n  datadogRum.startSessionReplayRecording();\n}\n\ndocument.addEventListener('cookieyes_consent_update', eventData => {\n  // $FlowIgnore[prop-missing] -- https://www.cookieyes.com/documentation/events-on-cookie-banner-interactions/\n  const data = eventData.detail;\n  if (data.accepted.includes('performance')) {\n    initializeDatadogRum();\n  }\n});\n\nif (consentGivenForCategory('performance') || environment === 'test') {\n  initializeDatadogRum();\n}\n","// @flow\n\nimport Honeybadger from '@honeybadger-io/js';\nimport { retrieve } from 'putki';\n\nconst environment = window.__ENVIRONMENT__;\n\nHoneybadger.configure({\n  apiKey: '087b96bb',\n  environment: environment,\n  revision: retrieve('application_version_git'),\n  // Paths inside our sourcemaps start with `webpack:///./` and to make Honeybadger\n  // be able to link the errors to our actual source files, we need to define the\n  // `projectRoot` as documented here:\n  // https://docs.honeybadger.io/lib/javascript/guides/using-source-maps/#improving-error-grouping-and-linking-to-source-code\n  projectRoot: 'webpack:///./',\n  enableUncaught: false,\n  // Reporting unhandled Promise rejections causes massive noise in our Honeybadger\n  // and is almost always non-actionable. Rather than reporting them, let's not.\n  enableUnhandledRejection: false\n});\n\nHoneybadger.beforeNotify(notice => {\n  if (suppressCurrentUserAgent()) {\n    return false;\n  }\n\n  notice.component = retrieve('controller');\n  notice.action = retrieve('action');\n  console.warn('[Honeybadger]', notice); // eslint-disable-line no-console\n\n  return true;\n});\n\nfunction suppressCurrentUserAgent() {\n  if (!window.navigator) return false;\n  return window.navigator.userAgent.includes('BingPreview');\n}\n","import initializeAnalytics from './initializeAnalytics';\n$(document).ready(initializeAnalytics);\n\nimport './external-tools';\nimport initializeFoundation from './foundation';\nimport './stickySidebar';\nimport './setupDatadog';\nimport './setupHoneybadger';\nimport './whatInput';\n\n$(document).ready(initializeFoundation);\n","// @flow\n\nimport * as React from 'react';\n\nimport styles from './InstructionVideoEmbed.scss';\n\ntype Props = {|\n  title: string,\n  embedUrl: string\n|};\n\nexport default function InstructionVideoEmbed(props: Props): React.Node {\n  return (\n    <div className={styles.container}>\n      <h3 className={styles.heading}>{props.title}</h3>\n      <div className={styles.frameResizer}>\n        <div className={styles.frame}>\n          <iframe src={props.embedUrl} frameBorder=\"0\" allowFullScreen />\n        </div>\n      </div>\n    </div>\n  );\n}\n","// @flow\n\nimport * as React from 'react';\nimport type { JSONProps } from 'common/types';\n\ntype LazyComponent = Promise<React.ComponentType<JSONProps<any>>>;\n\nexport async function OldMeetingPackageListApp(): LazyComponent {\n  return (await import('packages/oldShow')).OldMeetingPackageListApp;\n}\n\nexport async function OldCelebrationPackageListApp(): LazyComponent {\n  return (await import('packages/oldShow')).OldCelebrationPackageListApp;\n}\n\nexport async function OldExperiencePackageListApp(): LazyComponent {\n  return (await import('packages/oldShow')).OldExperiencePackageListApp;\n}\n\nexport async function OldVenuePackageListApp(): LazyComponent {\n  return (await import('packages/oldShow')).OldVenuePackageListApp;\n}\n\nexport async function ProfileEditRichTextEditor(): LazyComponent {\n  return (\n    await import(\n      'profiles/common/edit/components/ProfileEditRichTextEditor.rails'\n    )\n  ).default;\n}\n\nexport async function AvailabilitySourceForm(): LazyComponent {\n  return (await import('reservations/components/AvailabilitySourceForm'))\n    .default;\n}\n\nexport async function PhoneNumberForm(): LazyComponent {\n  return (await import('phoneNumbers/components/PhoneNumberForm')).default;\n}\n\nexport async function VenueMobileCTAs(): LazyComponent {\n  return (await import('phoneNumbers/components/VenueMobileCTAs.rails'))\n    .default;\n}\n\nexport async function OldSiblingGroupPreviewApp(): LazyComponent {\n  return (\n    await import(\n      'groups/venues/show/components/OldSiblingGroupPreviewApp.rails'\n    )\n  ).default;\n}\n\nexport async function OldSimilarVenueList(): LazyComponent {\n  return (\n    await import(\n      'profiles/venues/show/components/similarVenues/OldSimilarVenueList.rails'\n    )\n  ).default;\n}\n\nexport async function Rating(): LazyComponent {\n  return (await import('common/components/Rating')).default;\n}\n\nexport async function RatingBoxAccordion(): LazyComponent {\n  return (await import('common/components/accordion/RatingBoxAccordion'))\n    .default;\n}\n\nexport async function AccordionPanel(): LazyComponent {\n  return (await import('common/components/accordion/AccordionPanel')).default;\n}\n\nexport async function CommissionRoot(): LazyComponent {\n  return (await import('commission/components/CommissionRoot.rails')).default;\n}\n\nexport async function PackageEditorRoot(): LazyComponent {\n  return (await import('packages/edit/components/PackageEditorRoot.rails'))\n    .default;\n}\n\nexport async function VenueInquiryConversationRoot(): LazyComponent {\n  return (\n    await import(\n      'conversations/show/components/venueInquiry/conversation/ConversationRoot.rails'\n    )\n  ).default;\n}\n\nexport async function CateringInquiryConversationApp(): LazyComponent {\n  return (\n    await import(\n      'conversations/show/components/cateringInquiry/ConversationApp.rails'\n    )\n  ).default;\n}\n\nexport async function ReadOnlyVenueInquiryConversationApp(): LazyComponent {\n  return (\n    await import(\n      'conversations/show/components/venueInquiry/readOnly/ConversationApp.rails'\n    )\n  ).default;\n}\n\nexport async function MarkAsRepliedRoot(): LazyComponent {\n  return (\n    await import(\n      'conversations/show/components/venueInquiry/markAsReplied/MarkAsRepliedRoot.rails'\n    )\n  ).default;\n}\n\nexport async function VenueGroupEditorApp(): LazyComponent {\n  return (\n    await import('groups/venues/edit/components/VenueGroupEditorApp.rails')\n  ).default;\n}\n\nexport async function OldTranslatedVenueDescription(): LazyComponent {\n  return (\n    await import(\n      'profiles/venues/show/components/OldTranslatedVenueDescription'\n    )\n  ).default;\n}\n\nexport async function OldMoveToSearchLinks(): LazyComponent {\n  return (\n    await import('profiles/venues/show/components/OldMoveToSearchLinks.rails')\n  ).default;\n}\n\nexport async function SendCopy(): LazyComponent {\n  return (await import('thanks/components/SendCopy')).default;\n}\n\nexport async function MessageTemplateEditorApp(): LazyComponent {\n  return (\n    await import('messageTemplates/components/MessageTemplateEditorApp.rails')\n  ).default;\n}\n\nexport async function MultiSelect(): LazyComponent {\n  return (await import('common/components/MultiSelect.rails')).default;\n}\n\nexport async function VenuePageInquiryFormNew(): LazyComponent {\n  return (await import('inquiry/components/VenuePageInquiryForm.rails'))\n    .default;\n}\n\nexport async function MultiVenueInquiryForm(): LazyComponent {\n  return (await import('inquiry/components/MultiVenueInquiryForm.rails'))\n    .default;\n}\n\nexport async function SearchableInquiryIndex(): LazyComponent {\n  return (\n    await import('conversations/index/components/SearchableInquiryIndex.rails')\n  ).default;\n}\n\nexport async function FeaturedEventTypeField(): LazyComponent {\n  return (\n    await import('staff/featuredVenuesEdit/components/FeaturedEventTypeField')\n  ).default;\n}\n\nexport async function FeaturedVenuesInventory(): LazyComponent {\n  return (\n    await import(\n      'staff/featuredVenuesInventory/components/FeaturedVenuesInventory.rails'\n    )\n  ).default;\n}\n\nexport async function EditOrganizationTabs(): LazyComponent {\n  return (await import('staff/organization/components/EditOrganizationTabs'))\n    .default;\n}\n\nexport async function SpamInquiriesTabs(): LazyComponent {\n  return (await import('staff/spamInquiries/components/SpamInquiriesTabs'))\n    .default;\n}\n\nexport async function EditVenueServices(): LazyComponent {\n  return (await import('staff/organization/components/EditVenueServices'))\n    .default;\n}\n\nexport async function EditVenueTypes(): LazyComponent {\n  return (await import('staff/organization/components/EditVenueTypes')).default;\n}\n\nexport async function ProfileAnnouncementsEditorApp(): LazyComponent {\n  return (\n    await import(\n      'staff/organization/components/ProfileAnnouncementsEditorApp.rails'\n    )\n  ).default;\n}\n\nexport async function CateringSearch(): LazyComponent {\n  return (await import('catering/search/components/CateringSearch.rails'))\n    .default;\n}\n\n// ============================================= START PROFILE PAGE RELATED COMPONENTS\n\nexport async function VenueProfileGallery(): LazyComponent {\n  return (\n    await import('profiles/venues/show/components/VenueProfileGallery.rails')\n  ).default;\n}\n\nexport async function VenueWishlistButton(): LazyComponent {\n  return (\n    await import(\n      'profiles/venues/show/components/venueProfileGallery/VenueWishlistButton.rails'\n    )\n  ).default;\n}\n\nexport async function VenueProfileLocation(): LazyComponent {\n  return (\n    await import('profiles/venues/show/components/VenueProfileLocation.rails')\n  ).default;\n}\n\nexport async function VenueProfileVideoSection(): LazyComponent {\n  return (\n    await import(\n      'profiles/venues/show/components/VenueProfileVideoSection.rails'\n    )\n  ).default;\n}\n\nexport async function VenueProfileVirtualTourSection(): LazyComponent {\n  return (\n    await import(\n      'profiles/venues/show/components/VenueProfileVirtualTourSection.rails'\n    )\n  ).default;\n}\n\nexport async function VenueProfileStoriesOfPastEvents(): LazyComponent {\n  return (\n    await import(\n      'profiles/venues/show/components/VenueProfileStoriesOfPastEvents.rails'\n    )\n  ).default;\n}\n\nexport async function VenueProfileCapacityDetails(): LazyComponent {\n  return (\n    await import(\n      'profiles/venues/show/components/VenueProfileCapacityDetails.rails'\n    )\n  ).default;\n}\n\nexport async function VenueProfileOtherSpacesInSameLocation(): LazyComponent {\n  return (\n    await import(\n      'profiles/venues/show/components/VenueProfileOtherSpacesInSameLocation.rails'\n    )\n  ).default;\n}\n\nexport async function VenueProfileReviewList(): LazyComponent {\n  return (\n    await import('profiles/venues/show/components/VenueProfileReviewList.rails')\n  ).default;\n}\n\nexport async function VenueProfileServicesAndFacilities(): LazyComponent {\n  return (\n    await import(\n      'profiles/venues/show/components/VenueProfileServicesAndFacilities.rails'\n    )\n  ).default;\n}\n\nexport async function VenueProfileSimilarVenues(): LazyComponent {\n  return (\n    await import(\n      'profiles/venues/show/components/VenueProfileSimilarVenues.rails'\n    )\n  ).default;\n}\n\nexport async function VenueProfilePricingSection(): LazyComponent {\n  return (\n    await import(\n      'profiles/venues/show/components/VenueProfilePricingSection.rails'\n    )\n  ).default;\n}\n\nexport async function VenueProfileAvailabilitySection(): LazyComponent {\n  return (\n    await import(\n      'profiles/venues/show/components/VenueProfileAvailabilitySection.rails'\n    )\n  ).default;\n}\n\nexport async function VenueProfileBasicInformation(): LazyComponent {\n  return (\n    await import(\n      'profiles/venues/show/components/VenueProfileBasicInformation.rails'\n    )\n  ).default;\n}\n\nexport async function VenueProfileTranslatedDescription(): LazyComponent {\n  return (\n    await import(\n      'profiles/venues/show/components/VenueProfileTranslatedDescription.rails'\n    )\n  ).default;\n}\n\nexport async function CateringBasicInformation(): LazyComponent {\n  return (await import('profiles/catering/show/cateringComponents.rails'))\n    .CateringBasicInformation;\n}\nexport async function CateringDetailedInformation(): LazyComponent {\n  return (await import('profiles/catering/show/cateringComponents.rails'))\n    .CateringDetailedInformation;\n}\nexport async function CateringHeading(): LazyComponent {\n  return (await import('profiles/catering/show/cateringComponents.rails'))\n    .CateringHeading;\n}\nexport async function ProfileImageCarousel(): LazyComponent {\n  return (\n    await import('profiles/common/show/components/ProfileImageCarousel.rails')\n  ).default;\n}\nexport async function CateringInquiry(): LazyComponent {\n  return (await import('profiles/catering/show/cateringComponents.rails'))\n    .CateringInquiry;\n}\nexport async function CateringServicesAndPricing(): LazyComponent {\n  return (await import('profiles/catering/show/cateringComponents.rails'))\n    .CateringServicesAndPricing;\n}\nexport async function CateringMenuList(): LazyComponent {\n  return (await import('profiles/catering/show/cateringComponents.rails'))\n    .CateringMenuList;\n}\n\nexport async function SupplierProfileServicesAndPricing(): LazyComponent {\n  return (\n    await import(\n      'profiles/suppliers/show/components/SupplierProfileServicesAndPricing.rails'\n    )\n  ).default;\n}\nexport async function SupplierProfileHeading(): LazyComponent {\n  return (\n    await import(\n      'profiles/suppliers/show/components/SupplierProfileHeading.rails'\n    )\n  ).default;\n}\nexport async function SupplierProfileContactInformation(): LazyComponent {\n  return (\n    await import(\n      'profiles/suppliers/show/components/SupplierProfileContactInformation.rails'\n    )\n  ).default;\n}\nexport async function SupplierProfileVideo(): LazyComponent {\n  return (\n    await import(\n      'profiles/suppliers/show/components/SupplierProfileVideo.rails'\n    )\n  ).default;\n}\nexport async function SupplierProfileInquiry(): LazyComponent {\n  return (\n    await import(\n      'profiles/suppliers/show/components/SupplierProfileInquiry.rails'\n    )\n  ).default;\n}\nexport async function SupplierProfileContactImage(): LazyComponent {\n  return (\n    await import(\n      'profiles/suppliers/show/components/SupplierProfileContactImage.rails'\n    )\n  ).default;\n}\nexport async function SupplierProfileBasicInformation(): LazyComponent {\n  return (\n    await import(\n      'profiles/suppliers/show/components/SupplierProfileBasicInformation.rails'\n    )\n  ).default;\n}\n\n// ============================================= END PROFILE PAGE RELATED COMPONENTS\n\nexport async function SupplierSearch(): LazyComponent {\n  return (\n    await import('profiles/suppliers/search/components/SupplierSearch.rails')\n  ).default;\n}\n\nexport async function LegalNotice(): LazyComponent {\n  return (await import('common/components/inquiry/legalNotice/LegalNotice'))\n    .default;\n}\n\nexport async function PipedriveIntegrationStatus(): LazyComponent {\n  return (\n    await import(\n      'staff/organization/components/pipedriveIntegrationStatus/PipedriveIntegrationStatus.rails'\n    )\n  ).default;\n}\n\nexport async function BillingDetails(): LazyComponent {\n  return (\n    await import('billing/admin/billingDetails/components/BillingDetails.rails')\n  ).default;\n}\nexport async function TinField(): LazyComponent {\n  return (await import('billing/admin/tin/components/TinField.rails')).default;\n}\nexport async function InvoicesOfDayStates(): LazyComponent {\n  return (\n    await import(\n      'billing/staff/dailyInvoices/components/InvoicesOfDayStates.rails'\n    )\n  ).default;\n}\nexport async function InvoicingFields(): LazyComponent {\n  return (\n    await import(\n      'billing/admin/invoicingFields/components/InvoicingFields.rails'\n    )\n  ).default;\n}\nexport async function OrganizationInvoices(): LazyComponent {\n  return (\n    await import(\n      'billing/staff/organizationInvoices/components/OrganizationInvoices.rails'\n    )\n  ).default;\n}\nexport async function StripeCustomerStatus(): LazyComponent {\n  return (\n    await import(\n      'billing/staff/stripeCustomerStatus/components/StripeCustomerStatus.rails'\n    )\n  ).default;\n}\n\nexport async function OutcomeFeedback(): LazyComponent {\n  return (await import('outcomes/thanks/components/OutcomeFeedback.rails'))\n    .default;\n}\n","// @flow\n\nimport { exposeComponents, exposeLazyComponents } from 'boot/common/reactMount';\nimport * as components from './components';\nimport * as lazyComponents from './components.lazy';\n\nexposeComponents(components);\nexposeLazyComponents(lazyComponents);\n","// @flow\n\ntype ModuleWithDefaultExport = { +default: () => void, ... };\n\nconst actionEntryPoints: {\n  [actionName: string]: void | (() => Promise<ModuleWithDefaultExport>),\n  ...\n} = {\n  frontPageIndex: () => import('./actionSpecificSetup/frontPageIndex'),\n  landingPagesShow: () => import('./actionSpecificSetup/landingPagesShow'),\n  listsShow: () => import('./actionSpecificSetup/listsShow'),\n  reviewsEdit: () => import('./actionSpecificSetup/reviewsEdit'),\n  reviewsNew: () => import('./actionSpecificSetup/reviewsNew'),\n  'profiles/reviewsNew': () => import('./actionSpecificSetup/reviewsNew'),\n  'profiles/venueProfilesShow': () =>\n    import('./actionSpecificSetup/profiles/venueProfilesShow'),\n\n  'profiles/admin/cateringProfilesEdit': () =>\n    import('./actionSpecificSetup/profiles/admin/cateringProfilesEdit'),\n  'catering/admin/menusIndex': () =>\n    import('./actionSpecificSetup/catering/admin/menusIndex'),\n\n  'admin/archives': () => import('./actionSpecificSetup/admin/archives'),\n  'profiles/admin/venueProfilesEdit': () =>\n    import('./actionSpecificSetup/profiles/admin/venueProfilesEdit'),\n  'profiles/admin/venueProfilesIndex': () =>\n    import('./actionSpecificSetup/profiles/admin/venueProfilesIndex'),\n\n  'profiles/supplierProfilesEdit': () =>\n    import('./actionSpecificSetup/profiles/supplierProfilesEdit'),\n\n  'staff/imagesIndex': () => import('./actionSpecificSetup/staff/imagesIndex'),\n  'staff/prospectsIndex': () =>\n    import('./actionSpecificSetup/staff/prospectsIndex'),\n  'staff/invoicesNew': () => import('./actionSpecificSetup/staff/invoicesNew'),\n  'staff/organizationsEdit': () =>\n    import('./actionSpecificSetup/staff/organizationsEdit'),\n  'staff/landingPagesEdit': () =>\n    import('./actionSpecificSetup/staff/landingPagesEdit.js'),\n  'users/registrationsEdit': () =>\n    import('./actionSpecificSetup/users/registrationsEdit')\n};\n\nexport default actionEntryPoints;\n","// @flow\n\nimport Honeybadger from '@honeybadger-io/js';\nimport { retrieve } from 'putki';\nimport actionEntryPoints from './actionEntryPoints';\nimport $ from 'jquery';\n\nfunction buildModuleName(controller: string, action: string) {\n  const camelCaseController = controller.replace(/(_\\w)/g, match =>\n    match[1].toUpperCase()\n  );\n  const upcaseAction = action.replace(/^./, match => match.toUpperCase());\n  return `${camelCaseController}${upcaseAction}`;\n}\n\nfunction actionAlias(action: string): string {\n  const crudAliases: { [string]: ?string } = {\n    update: 'edit',\n    create: 'new'\n  };\n  return crudAliases[action] || action;\n}\n\nfunction findScript(controller: string, action: string) {\n  const moduleNameWithAction = buildModuleName(controller, actionAlias(action));\n  const moduleNameWithoutAction = buildModuleName(controller, '');\n\n  if (typeof actionEntryPoints[moduleNameWithAction] === 'function') {\n    const actionFunc = actionEntryPoints[moduleNameWithAction];\n    return actionFunc();\n  }\n\n  if (typeof actionEntryPoints[moduleNameWithoutAction] === 'function') {\n    const actionFunc = actionEntryPoints[moduleNameWithoutAction];\n    return actionFunc();\n  }\n\n  return Promise.resolve({ default: () => {} });\n}\n\nconst controller = retrieve('controller');\nconst action = retrieve('action');\n\nif (typeof controller === 'string' && typeof action === 'string') {\n  findScript(controller, action)\n    .then(module => module.default)\n    .then(initializer => {\n      $(document).ready(() => {\n        try {\n          initializer();\n        } catch (err) {\n          Honeybadger.notify(err);\n          // The error is thrown as that was what honeybadger-js v2.x used to do when\n          // we were wrapping the initializer with Honeybadger.wrap().\n          //\n          // It doesn't make much sense as nothing is going to catch this error.\n          //\n          // TODO: Handle an initializer error gracefully.\n          throw err;\n        }\n      });\n    })\n    .catch(err => {\n      // eslint-disable-next-line no-console\n      console.error(err);\n    });\n}\n","import 'boot/webpackPublicPath';\nimport 'boot/vendor';\nimport 'vendorized-fonts/font-awesome-v6-kit-f11102cc8a/font-awesome-v6-fonts.global.scss';\nimport 'boot/common/setMomentLocale';\nimport 'boot/common/exportReact';\n\nimport './globalSetup';\n\nimport './exposeComponents';\n\nimport { mountAllComponents } from 'boot/common/reactMount';\n$(document).ready(mountAllComponents);\n\nimport './hookActionSpecificSetup';\n\nimport i18nSetup from 'boot/common/i18nSetup';\ni18nSetup();\n","/**\n * Imports that used to come via Rails assets pipeline.\n *\n * We must use `require` to get the jQuery global registered before\n * loading scripts that rely on the global `jQuery` to be present\n */\nrequire('vendorJS/modernizr');\n\nconst jQuery = require('vendorJS/jquery');\nwindow.jQuery = jQuery;\nwindow.$ = jQuery;\n\nrequire('vendorJS/jquery_ujs');\nrequire('jquery.cookie');\nrequire('vendorJS/purl');\nrequire('vendorJS/waypoints');\nrequire('vendorJS/waypoints-sticky');\nrequire('vendorJS/cocoon');\n\nrequire('foundation-sites/js/foundation/foundation');\nrequire('foundation-sites/js/foundation/foundation.alert');\nrequire('foundation-sites/js/foundation/foundation.equalizer');\n// require('foundation-sites/js/foundation/foundation.clearing');\n// require('foundation-sites/js/foundation/foundation.cookie');\n// require('foundation-sites/js/foundation/foundation.dropdown');\n// require('foundation-sites/js/foundation/foundation.joyride');\nrequire('foundation-sites/js/foundation/foundation.magellan');\n// require('foundation-sites/js/foundation/foundation.orbit');\nrequire('foundation-sites/js/foundation/foundation.reveal');\nrequire('foundation-sites/js/foundation/foundation.tooltip');\nrequire('foundation-sites/js/foundation/foundation.topbar');\nrequire('foundation-sites/js/foundation/foundation.tab');\n// require('foundation-sites/js/foundation/foundation.interchange');\n// require('foundation-sites/js/foundation/foundation.placeholder');\nrequire('vendorJS/foundation.abide');\nrequire('vendorJS/foundation.topbar');\n","// https://webpack.js.org/configuration/output/#output-publicpath\n//\n// > In cases where the publicPath of output files can't be known at compile time, it can be\n// > left blank and set dynamically at runtime in the entry file using the free variable\n// > __webpack_public_path__\n\nimport { retrieve } from 'putki';\n\n// On server side, we set the public path as a global variable\n// instead of going through Putki as the value needs to be known\n// before Putki has been populated.\nif (typeof SERVER_RENDERER_PUBLIC_PATH === 'string') {\n  // eslint-disable-next-line no-undef, camelcase\n  __webpack_public_path__ = SERVER_RENDERER_PUBLIC_PATH;\n} else {\n  // On client side, though, we know the public path via Putki.\n\n  // eslint-disable-next-line no-undef, camelcase\n  __webpack_public_path__ = retrieve('webpack_public_path');\n}\n","// @flow\n\nimport * as React from 'react';\nimport classnames from 'classnames';\n\nimport styles from './Button.scss';\n\nexport type Props = {\n  children: React.Node,\n  className?: string,\n  type?: 'default' | 'success' | 'primary' | 'danger' | 'link' | 'text',\n  disabled?: boolean,\n  submit?: boolean,\n  onClick?: Event => mixed,\n  ...\n};\n\nexport default function Button(props: Props): React.Node {\n  const {\n    children,\n    onClick,\n    className,\n    type = 'default',\n    disabled = false,\n    submit,\n    ...otherProps\n  } = props;\n  const buttonClassName = classnames(className, styles[type]);\n\n  const handleClick = (e: Event) => {\n    if (onClick) {\n      e.preventDefault();\n      onClick(e);\n    }\n  };\n\n  return (\n    <button\n      {...otherProps}\n      type={submit ? 'submit' : 'button'}\n      onClick={handleClick}\n      className={buttonClassName}\n      tabIndex={props.disabled ? '-1' : '0'}\n      disabled={disabled}\n    >\n      {children}\n    </button>\n  );\n}\n","// @flow\n\n// This component is to be passed down as prop to\n// the HoneybadgerErrorBoundary component\n\nimport * as React from 'react';\nimport Button from 'common/components/Button';\nimport styles from './ErrorComponent.scss';\n\nexport default function ErrorComponent(): React.Node {\n  return (\n    <div>\n      <p className={styles.errorMessage}>{__('error.something_went_wrong')}</p>\n      <Button\n        onClick={() => {\n          window.location.reload();\n        }}\n        type=\"primary\"\n      >\n        {__('error.reload')}\n      </Button>\n    </div>\n  );\n}\n","// @flow\n\nimport type { JSONObject } from 'common/types';\n\nexport default function match<\n  Branches: { [string | boolean]: (JSONObject) => any, ... },\n  BranchValues: $Values<$ObjMap<Branches, <V>((any) => V) => V>>\n>(sentinelProperty: string, branches: Branches): JSONObject => BranchValues {\n  return (jsonObject: JSONObject): BranchValues => {\n    const type = jsonObject[sentinelProperty];\n    if (typeof type !== 'string' && typeof type !== 'boolean') {\n      throw new Error(\n        `Expected type of property \"${sentinelProperty}\" to be a string or boolean with value being one of [${Object.keys(\n          branches\n        ).join(\n          ', '\n        )}]. Received \"${sentinelProperty}\" typeof was: ${typeof type}.`\n      );\n    }\n    if (typeof branches[type] === 'undefined') {\n      throw new Error(\n        `Expected value of property \"${sentinelProperty}\" to be one of [${Object.keys(\n          branches\n        ).join(', ')}]. Received \"${sentinelProperty}\": ${String(type)}.`\n      );\n    }\n    return branches[type](jsonObject);\n  };\n}\n","// @flow\n\nimport type { JSONValue, JSONArray } from 'common/types';\nimport { failure } from 'common/json/extract';\n\nexport default function array<V>(extract: JSONArray => V): JSONValue => V {\n  return json => {\n    if (!Array.isArray(json)) {\n      return failure(\n        `Expecting an array, got ${\n          json === null ? 'null' : typeof json\n        } instead`,\n        () => extract([])\n      );\n    }\n    return extract(json);\n  };\n}\n","// @flow\n\nimport type { JSONValue, JSONArray } from 'common/types';\n\nexport default function items<V>(\n  extract: JSONValue => V\n): JSONArray => Array<V> {\n  return array => array.map(extract);\n}\n","// @flow\n\nimport type { JSONValue, JSONObject } from 'common/types';\nimport { failure } from 'common/json/extract';\n\nexport default function object<V>(extract: JSONObject => V): JSONValue => V {\n  return json => {\n    if (!json) {\n      return failure('Expecting an object, got a falsy value instead', () =>\n        extract({})\n      );\n    }\n    if (typeof json !== 'object') {\n      return failure(`Expecting an object, got ${typeof json} instead`, () =>\n        extract({})\n      );\n    }\n    if (Array.isArray(json)) {\n      return failure('Expecting an object, got an array instead', () =>\n        extract({})\n      );\n    }\n    return extract(json);\n  };\n}\n","// @flow\n\nimport type { JSONValue, JSONObject } from 'common/types';\n\nexport type ExtractValues<Shape: { ... }> = $ObjMap<\n  Shape,\n  <V>(extractor: (JSONValue) => V) => V\n>;\n\nexport default function record<Shape: { ... }>(\n  shape: Shape\n): JSONObject => ExtractValues<Shape> {\n  return (json: JSONObject) => {\n    return Object.keys(shape).reduce<{ [empty]: any }>((result, key) => {\n      result[key] = shape[key](json[key]);\n      return result;\n    }, {});\n  };\n}\n","// @flow\n\nimport type { JSONValue, JSONObject } from 'common/types';\n\ntype Map<K, V> = { [key: K]: V, ... };\ntype AnyObject = { +[key: string]: any, ... };\n\nexport default function map<K, V>(\n  extractKey: JSONValue => K,\n  extractValue: JSONValue => V\n): JSONObject => Map<K, V> {\n  return json =>\n    Object.keys((json: AnyObject)).reduce((m: Map<K, V>, key): Map<K, V> => {\n      m[extractKey(key)] = extractValue(json[key]);\n      return m;\n    }, {});\n}\n","// @flow\n\nimport type { JSONValue } from 'common/types';\n\nexport default function nullable<V>(\n  extract: JSONValue => V\n): JSONValue => V | null {\n  return json => {\n    if (json === null || typeof json === 'undefined') {\n      return null;\n    }\n    return extract(json);\n  };\n}\n","// @flow\n\nimport type { JSONValue } from 'common/types';\n\nexport default function withDefault<V>(\n  extract: JSONValue => V,\n  defaultValue: V\n): JSONValue => V {\n  return json => {\n    if (json === null || typeof json === 'undefined') {\n      return defaultValue;\n    }\n    return extract(json);\n  };\n}\n","// @flow\n\nimport type { JSONValue } from 'common/types';\nimport { failure } from 'common/json/extract';\n\nexport default function oneOf<Enum: JSONValue>(\n  values: Array<Enum> | $ReadOnlyArray<Enum>\n): JSONValue => Enum {\n  return (json: JSONValue) => {\n    const index = values.indexOf(json);\n    if (index !== -1) {\n      return values[index];\n    }\n    return failure(\n      `Expecting one of [${values.join(', ')}], got ${String(json)}`,\n      () => values[0]\n    );\n  };\n}\n","// @flow\n\nimport type { JSONValue } from 'common/types';\nimport { failure } from 'common/json/extract';\n\nexport default function <V>(value: V): JSONValue => V {\n  return (json: JSONValue) => {\n    if (json === value) {\n      return value;\n    }\n    return failure(\n      `Expecting specific value of type ${typeof value}, got another value of type ${typeof json}`,\n      () => value\n    );\n  };\n}\n","// @flow\n\nimport type { JSONValue } from 'common/types';\nimport { failure } from 'common/json/extract';\n\nconst decimal: JSONValue => number = (json: JSONValue) => {\n  if (typeof json === 'number') {\n    return json;\n  } else if (typeof json === 'string') {\n    return Number(json);\n  }\n  return failure(\n    `Expecting decimal (number or string), got ${\n      json === null ? 'null' : typeof json\n    }`,\n    () => Number(json)\n  );\n};\n\nexport default decimal;\n","// @flow\n\nimport type { JSONValue } from 'common/types';\nimport { failure } from 'common/json/extract';\n\nconst id: JSONValue => string = (json: JSONValue) => {\n  if (typeof json === 'string') {\n    return json;\n  } else if (typeof json === 'number') {\n    return String(json);\n  }\n  return failure(\n    `Expecting id (number or string), got ${\n      json === null ? 'null' : typeof json\n    }`,\n    () => String(json)\n  );\n};\n\nexport default id;\n","// @flow\n\nimport Honeybadger from '@honeybadger-io/js';\nimport type { JSONValue } from 'common/types';\n\nconst failureStack: Array<string> = [];\nlet usingFailureStack = false;\n// Wrap root-level extraction with this higher order function to get neat error\n// handling behavior\nexport function withFailureHandler<V>(extract: JSONValue => V): JSONValue => V {\n  return json => {\n    // Allow `failure` extractor to customize its logic based on whether the\n    // extraction has been wrapped with this function or not.\n    usingFailureStack = true;\n    try {\n      const returnValue = extract(json);\n      // Now `failureStack` should be populated if any errors happened when extracting.\n      //\n      // Do not handle this on the server side, though, as we get better error\n      // messages on browser side and debugging is also easier in the browser.\n      // Failures will be handled again when React mounts, and debugging extractor\n      // failures on browser-side is waaay easier than debugging an error\n      // raised when rendering a component on the server side.\n      if (failureStack.length > 0 && typeof document !== 'undefined') {\n        // Make a deep clone of the failure stack to ensure that the\n        // failureStack doesn't get modified from under us\n        const snapshotStack = JSON.parse(JSON.stringify(failureStack));\n\n        const error = new Error('Extraction error');\n\n        if (__DEV__) {\n          // Without the setTimeout, the console log can fail for some unknown reason\n          /* eslint-disable no-alert, no-console */\n          setTimeout(() => {\n            console.group('Extraction error');\n            console.error(snapshotStack.join('\\n* '), {\n              json\n            });\n            console.trace();\n            console.groupEnd();\n          }, 0);\n\n          alert('Extraction error! Check console for more information');\n          /* eslint-enable no-alert, no-console */\n        } else {\n          Honeybadger.notify(error, {\n            message: failureStack.join(', '),\n            context: { json }\n          });\n        }\n      }\n      return returnValue;\n    } catch (e) {\n      // Any errors that get here are result of real runtime errors, and we should\n      // not handle them.\n      throw e;\n    } finally {\n      // Reset the state regardless if there was an error or not\n      usingFailureStack = false;\n      failureStack.length = 0;\n    }\n  };\n}\n\nexport function failure<V>(errorMessage: string, fallback: () => V): V {\n  if (!usingFailureStack) {\n    // This situation means that the extraction pipeline for this particular case\n    // has not been wrapped with the failure handler function.\n    //\n    // In that case, handle the failures as before.\n    const error = new Error(errorMessage);\n    if (__DEV__) {\n      throw error;\n    } else {\n      Honeybadger.notify(error);\n      return fallback();\n    }\n  }\n  // This extraction pipeline has been wrapped with a failure handling pipeline.\n  // The failure handler will handle all errors received during extraction.\n  failureStack.push(errorMessage);\n  return fallback();\n}\n","// @flow\n\nimport type { JSONValue } from 'common/types';\nimport { failure } from 'common/json/extract';\n\nexport const boolean: JSONValue => boolean = (json: JSONValue) => {\n  if (typeof json === 'boolean') {\n    return json;\n  }\n  return failure(\n    `Expecting boolean, got ${json === null ? 'null' : typeof json}`,\n    () => Boolean(json)\n  );\n};\n\nexport const string: JSONValue => string = (json: JSONValue) => {\n  if (typeof json === 'string') {\n    return json;\n  }\n  return failure(\n    `Expecting string, got ${json === null ? 'null' : typeof json}`,\n    () => String(json)\n  );\n};\n\nexport const number: JSONValue => number = (json: JSONValue) => {\n  if (typeof json === 'number') {\n    return json;\n  }\n  return failure(\n    `Expecting number, got ${json === null ? 'null' : typeof json}`,\n    () => Number(json)\n  );\n};\n\nexport const mixed: JSONValue => mixed = (json: JSONValue) => {\n  return json;\n};\n","// @flow\n\nimport moment from 'moment';\n\nimport type { JSONValue } from 'common/types';\nimport { failure } from 'common/json/extract';\n\nexport opaque type DateString<DateFormat: string>: string = string;\n\nexport function dateString<DateFormat: string>(\n  format: DateFormat\n): JSONValue => DateString<DateFormat> {\n  return (json: JSONValue) => {\n    if (typeof json === 'string') {\n      if (moment.utc(json, format, true).isValid()) {\n        return json;\n      }\n      return failure(\n        `Expecting dateString (string with format ${format}), got a string \"${json}\"`,\n        () => String(json)\n      );\n    }\n    return failure(\n      `Expecting dateString (string with format ${format}), got ${\n        json === null ? 'null' : typeof json\n      }`,\n      () => String(json)\n    );\n  };\n}\n","// @flow\n\nimport type { JSONValue } from 'common/types';\nimport { type Locale, locales } from 'common/types/locale';\nimport { oneOf } from 'common/json/extract';\n\nexport const locale: JSONValue => Locale = oneOf(locales);\n","// @flow\n\nimport type { JSONValue } from 'common/types';\nimport { type Money, money } from 'common/types/money';\nimport { object, record, decimal, locale } from 'common/json/extract';\n\nconst extractValues = object(\n  record({\n    currency: locale,\n    amount: decimal\n  })\n);\n\nexport default function moneyExtract(json: JSONValue): Money {\n  const extractedMoney = extractValues(json);\n  return money(extractedMoney.currency, extractedMoney.amount);\n}\n","// @flow\n\nimport {\n  type Locale,\n  locales as webpackLocales\n} from 'railsRoot/config/webpack/availableLocales';\nexport type { Locale } from 'railsRoot/config/webpack/availableLocales';\nexport const locales: $ReadOnlyArray<Locale> = webpackLocales;\n\nexport opaque type Localizable<LocalizableValue> = {|\n  locale: Locale,\n  value: LocalizableValue\n|};\n\nexport opaque type Localized<LocalizedValue>: LocalizedValue = LocalizedValue;\n\nexport function localizable<Value>(\n  locale: Locale,\n  value: Value\n): Localizable<Value> {\n  return {\n    locale,\n    value\n  };\n}\n\nexport function localize<Input, Output>(\n  { locale, value }: Localizable<Input>,\n  f: (Locale, Input) => Output\n): Localized<Output> {\n  return f(locale, value);\n}\n","// @flow\nimport { formatPrice } from 'utils/currencyUtils';\n\nimport {\n  type Locale,\n  type Localizable,\n  type Localized,\n  localizable,\n  localize\n} from './locale';\n\nexport opaque type RawMoney: number = number;\n\nexport function rawMoney(n: number): RawMoney {\n  return n;\n}\n\nexport type Money = Localizable<RawMoney>;\n\nexport function money(currency: Locale, n: number): Money {\n  return localizable(currency, n);\n}\n\nexport opaque type FormattedMoney: string = Localized<string>;\n\nexport type FormatMoneyOptions = {|\n  alwaysShowDecimals?: boolean\n|};\nconst defaultFormatMoneyOptions: FormatMoneyOptions = Object.freeze({});\n\nexport function formatMoney(\n  fm: Money,\n  options?: FormatMoneyOptions = defaultFormatMoneyOptions\n): FormattedMoney {\n  return localize(fm, (locale, number) => {\n    // If the price is a round number, leave the decimals out\n    if (!options.alwaysShowDecimals && Number.isInteger(number)) {\n      return formatPrice(number, { precision: 0, locale: locale });\n    }\n    // Otherwise render with locale specific precision\n    return formatPrice(number, { locale: locale });\n  });\n}\n\nexport function isEqual(a: Money, b: Money): boolean {\n  return JSON.stringify(a) === JSON.stringify(b);\n}\n","// @flow\n\nimport type {\n  Site,\n  PartnerSupport,\n  SalesPerson,\n  Bounds,\n  EInvoiceOperator\n} from './types';\nimport type { JSONObject, JSONValue } from 'common/types';\nimport {\n  object,\n  record,\n  string,\n  number,\n  locale,\n  nullable,\n  array,\n  items\n} from 'common/json/extract';\n\ntype SitesJSON = { [key: string]: JSONObject, ... };\nconst sitesJSON: SitesJSON = require('railsRoot/config/sites.json');\n\nexport default function allSites(): Array<Site> {\n  return Object.keys(sitesJSON).map(key => {\n    return siteFromJSON(key, sitesJSON[key]);\n  });\n}\n\nconst extractPartnerSupport: JSONValue => PartnerSupport = object(\n  record({\n    mail: string,\n    phone: nullable(string)\n  })\n);\n\nconst extractSalesPerson: JSONValue => SalesPerson = object(\n  record({\n    team_mail: string,\n    first_name: string,\n    image: string,\n    mail: string,\n    name: string,\n    phone: nullable(string)\n  })\n);\n\nconst requiredBounds: JSONValue => Bounds = object(\n  record({\n    south: number,\n    west: number,\n    north: number,\n    east: number\n  })\n);\n\nconst eInvoiceOperator: JSONValue => EInvoiceOperator = object(\n  record({\n    name: string,\n    id: string\n  })\n);\n\nconst extractEInvoiceoperators: JSONValue => Array<EInvoiceOperator> = array(\n  items(eInvoiceOperator)\n);\n\nfunction siteFromJSON(key: string, json: JSONObject): Site {\n  return {\n    key: key,\n    locale: locale(json.locale),\n    baseDomain: requiredString(json.base_domain),\n    countryInPath: optionalString(json.country_in_path),\n    defaultOgImage: optionalString(json.default_og_image),\n    defaultSearchBounds: requiredBounds(json.default_search_bounds),\n    defaultMapCenter: requiredLocation(json.default_map_center),\n    iso31661Alpha2: optionalString(json.iso_3166_1_alpha_2),\n    iso31661Alpha3: optionalString(json.iso_3166_1_alpha_3),\n    profileTimeZone: requiredString(json.profile_time_zone),\n    partnerSupport: extractPartnerSupport(json.partner_support),\n    salesPerson: extractSalesPerson(json.sales_person),\n    eInvoiceOperators: extractEInvoiceoperators(json.e_invoice_operators)\n  };\n}\n\nfunction requiredString(maybeString: JSONValue): string {\n  if (typeof maybeString !== 'string') {\n    throw new Error(\n      `Expected string, got ${typeof maybeString}: ${String(maybeString)}`\n    );\n  }\n  return maybeString;\n}\n\nfunction optionalString(maybeString: JSONValue): string | null {\n  if (typeof maybeString !== 'string') {\n    return null;\n  }\n  return maybeString;\n}\n\nfunction requiredLocation(maybeLocation: JSONValue): [number, number] {\n  // $FlowFixMe[incompatible-return]\n  return maybeLocation;\n}\n","// @flow\n\nimport type { Site } from './types';\nimport allSites from './allSites';\nimport { retrieve } from 'putki';\n\nexport default function currentSite(): Site {\n  const sites = allSites();\n  const key = retrieve('current_site');\n\n  const site = sites.find(s => s.key === key);\n  return site || sites[0];\n}\n","// @flow\n\nimport { retrieve } from 'putki';\nimport $ from 'jquery';\n\nimport { type JSONObject } from 'common/types';\nimport currentSite from 'site/currentSite';\n\nfunction getSocialMedia(input: string) {\n  switch (false) {\n    case input.indexOf('facebook.com') === -1:\n      return 'Facebook';\n    case input.indexOf('t.co') === -1:\n      return 'Twitter';\n    case input.indexOf('twitter.com') === -1:\n      return 'Twitter';\n    default:\n      return null;\n  }\n}\n\n// Copied from Mixpanel JS source code\n// https://github.com/mixpanel/mixpanel-js/blob/8ac526e5cb8563d11e2206046ab986c6491ac6d7/src/utils.js#L1571-L1593\nfunction inferOperatingSystem() {\n  const a = navigator.userAgent;\n  if (/Windows/i.test(a)) {\n    if (/Phone/.test(a) || /WPDesktop/.test(a)) {\n      return 'Windows Phone';\n    }\n    return 'Windows';\n  } else if (/(iPhone|iPad|iPod)/.test(a)) {\n    return 'iOS';\n  } else if (/Android/.test(a)) {\n    return 'Android';\n  } else if (/(BlackBerry|PlayBook|BB10)/i.test(a)) {\n    return 'BlackBerry';\n  } else if (/Mac/i.test(a)) {\n    return 'Mac OS X';\n  } else if (/Linux/.test(a)) {\n    return 'Linux';\n  } else if (/CrOS/.test(a)) {\n    return 'Chrome OS';\n  } else {\n    return '';\n  }\n}\n\nfunction defaultProperties() {\n  const site = currentSite();\n  const controller = String(retrieve('controller'));\n  const action = String(retrieve('action'));\n  return {\n    Path: document.location.pathname,\n    'Social Media': getSocialMedia(window.document.referrer),\n    Locale: __LOCALE__,\n    'Site Key': site.key,\n    // Use specifically `category` to set \"Event Category\" in Google Analytics.\n    category: site.key,\n    // Use specifically `label` to set \"Event Label\" in Google Analytics.\n    label: __LOCALE__,\n    'Is Language Version Active': site.locale !== __LOCALE__,\n    'Action ID': `${controller}#${action}`,\n    $os: inferOperatingSystem()\n  };\n}\n\nfunction defaultContext() {\n  return {\n    locale: __LOCALE__\n  };\n}\n\nconst propertiesFromTrackedLink = (link: HTMLElement) => {\n  const $link = $(link);\n  const linkData = $link.data('venuu-t') || {};\n  return {\n    ...defaultProperties(),\n    ...linkData,\n    'Link Text': $link.text().trim(),\n    URL: $link.attr('href')\n  };\n};\n\nconst allHaveData = ($elements: any, dataKey: string) => {\n  return $elements\n    .map(function (this: HTMLElement) {\n      return $(this).data(dataKey);\n    })\n    .get()\n    .every(data => !!data);\n};\n\nexport function venueAnalyticsProps(): JSONObject {\n  const dataFromBackend = retrieve('analytics');\n  if (\n    dataFromBackend !== null &&\n    typeof dataFromBackend === 'object' &&\n    !Array.isArray(dataFromBackend)\n  ) {\n    return dataFromBackend;\n  }\n  return {};\n}\n\n/**\n * Tracks clicks on the given element/s.\n *\n * @throws TypeError if all elements do not have a proper data-venuu-t attribute\n * @throws TypeError if all elements do not have a proper data-venuu-t-name attribute\n */\nexport function trackClicksOn(elements: HTMLElement | Array<HTMLElement>) {\n  const $elements = $(elements);\n\n  if ($elements.length === 0) {\n    return;\n  }\n\n  if (!allHaveData($elements, 'venuu-t')) {\n    throw new TypeError(\n      'trackClicksOn requires all elements to have a \"venuu-t\" data attribute'\n    );\n  }\n\n  if (!allHaveData($elements, 'venuu-t-name')) {\n    throw new TypeError(\n      'trackClicksOn requires all elements to have a \"venuu-t-name\" data attribute'\n    );\n  }\n\n  window.analytics.trackLink(\n    elements,\n    link => $(link).data('venuu-t-name'),\n    propertiesFromTrackedLink\n  );\n}\n\n/**\n * Removes the click tracking from the given element.\n *\n * @param {HTMLElement} element - The element which has its clicks tracked\n */\nexport function untrackClicksOn(_element: HTMLElement) {\n  // FIXME: is there any way to disable window.analytics.trackLink?\n}\n\n/**\n * Remember update the server-side matchers (lib/tracking/actor_inference.rb)\n * if you make changes here.\n */\nexport function isBot(userAgent: string): boolean {\n  const BOT_MATCHERS = [\n    /google web preview/i,\n    /baiduspider/i,\n    /yahoo! slurp/i,\n    /rsiteauditor/i,\n    // This matches most currently known bots and likely future bots as well.\n    /bot/i\n  ];\n  return BOT_MATCHERS.some(matcher => {\n    return matcher.test(userAgent);\n  });\n}\n\n/**\n * Tracks a single event.\n *\n * This function also adds some default properties to the event for convenience.\n *\n * @param {String} eventName - The name of the event\n * @param {Object} properties - Extra properties associated with the event\n */\nexport function trackEvent(eventName: string, properties: Object = {}) {\n  if (isBot(navigator.userAgent)) return;\n\n  window.analytics.track(\n    eventName,\n    {\n      ...defaultProperties(),\n      ...properties\n    },\n    defaultContext()\n  );\n}\n","// @flow\n\nimport accounting from 'accounting';\n\nexport function formatPrice(\n  number: string | number,\n  options: Object = {}\n): string {\n  const translatedOptions = {\n    precision: I18n.t('number.currency.format.precision', options),\n    thousand: I18n.t('number.currency.format.delimiter', options),\n    decimal: I18n.t('number.currency.format.separator', options),\n    format: I18n.t('number.currency.format.accounting.format', options),\n    symbol: I18n.t('number.currency.format.unit', options),\n    ...options\n  };\n  return accounting.formatMoney(number, translatedOptions);\n}\n","import Modernizr from 'modernizr';\n\nconst mediaTypesToMediaQueries = {\n  // Same as Foundation ones, plus middle added by Venuu\n  small: 'only screen',\n  middle: 'only screen and (min-width: 1024px)',\n  medium: 'only screen and (min-width: 40.063em)',\n  large: 'only screen and (min-width: 64.063em)',\n  xlarge: 'only screen and (min-width: 90.063em)',\n  xxlarge: 'only screen and (min-width: 120.063em)',\n  smallDevice: 'only screen and (min-device-width: 768px)',\n  topbar: 'only screen and (min-width: 48em)'\n};\n\nexport default function satisfiesMediaQuery(mediaType) {\n  if (typeof mediaType !== 'string') {\n    throw new TypeError('Media type was not a string');\n  }\n  const mediaQuery = mediaTypesToMediaQueries[mediaType];\n  if (!mediaQuery) {\n    throw new TypeError(`Unknown media type \"${mediaType}\"`);\n  }\n  return Modernizr.mq(mediaQuery);\n}\n","// @flow\n\nimport type { JSONValue } from 'common/types';\n\nexport function retrieve(identifier: string): JSONValue {\n  const value = base()[identifier];\n\n  if (typeof value === 'undefined') {\n    return null;\n  }\n  return value;\n}\n\nfunction base() {\n  return (window && window.Putki) || {};\n}\n","// I18n.js\n// =======\n//\n// This small library provides the Rails I18n API on the Javascript.\n// You don't actually have to use Rails (or even Ruby) to use I18n.js.\n// Just make sure you export all translations in an object like this:\n//\n//     I18n.translations.en = {\n//       hello: \"Hello World\"\n//     };\n//\n// See tests for specific formatting like numbers and dates.\n//\n\n// Using UMD pattern from\n// https://github.com/umdjs/umd#regular-module\n// `returnExports.js` version\n;(function (root, factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module.\n    define(\"i18n\", function(){ return factory(root);});\n  } else if (typeof module === 'object' && module.exports) {\n    // Node. Does not work with strict CommonJS, but\n    // only CommonJS-like environments that support module.exports,\n    // like Node.\n    module.exports = factory(root);\n  } else {\n    // Browser globals (root is window)\n    root.I18n = factory(root);\n  }\n}(this, function(global) {\n  \"use strict\";\n\n  // Use previously defined object if exists in current scope\n  var I18n = global && global.I18n || {};\n\n  // Just cache the Array#slice function.\n  var slice = Array.prototype.slice;\n\n  // Apply number padding.\n  var padding = function(number) {\n    return (\"0\" + number.toString()).substr(-2);\n  };\n\n  // Improved toFixed number rounding function with support for unprecise floating points\n  // JavaScript's standard toFixed function does not round certain numbers correctly (for example 0.105 with precision 2).\n  var toFixed = function(number, precision) {\n    return decimalAdjust('round', number, -precision).toFixed(precision);\n  };\n\n  // Is a given variable an object?\n  // Borrowed from Underscore.js\n  var isObject = function(obj) {\n    var type = typeof obj;\n    return type === 'function' || type === 'object'\n  };\n\n  var isFunction = function(func) {\n    var type = typeof func;\n    return type === 'function'\n  };\n\n  // Check if value is different than undefined and null;\n  var isSet = function(value) {\n    return typeof(value) !== 'undefined' && value !== null;\n  };\n\n  // Is a given value an array?\n  // Borrowed from Underscore.js\n  var isArray = function(val) {\n    if (Array.isArray) {\n      return Array.isArray(val);\n    }\n    return Object.prototype.toString.call(val) === '[object Array]';\n  };\n\n  var isString = function(val) {\n    return typeof val === 'string' || Object.prototype.toString.call(val) === '[object String]';\n  };\n\n  var isNumber = function(val) {\n    return typeof val === 'number' || Object.prototype.toString.call(val) === '[object Number]';\n  };\n\n  var isBoolean = function(val) {\n    return val === true || val === false;\n  };\n\n  var isNull = function(val) {\n    return val === null;\n  };\n\n  var decimalAdjust = function(type, value, exp) {\n    // If the exp is undefined or zero...\n    if (typeof exp === 'undefined' || +exp === 0) {\n      return Math[type](value);\n    }\n    value = +value;\n    exp = +exp;\n    // If the value is not a number or the exp is not an integer...\n    if (isNaN(value) || !(typeof exp === 'number' && exp % 1 === 0)) {\n      return NaN;\n    }\n    // Shift\n    value = value.toString().split('e');\n    value = Math[type](+(value[0] + 'e' + (value[1] ? (+value[1] - exp) : -exp)));\n    // Shift back\n    value = value.toString().split('e');\n    return +(value[0] + 'e' + (value[1] ? (+value[1] + exp) : exp));\n  };\n\n  var lazyEvaluate = function(message, scope) {\n    if (isFunction(message)) {\n      return message(scope);\n    } else {\n      return message;\n    }\n  };\n\n  var merge = function (dest, obj) {\n    var key, value;\n    for (key in obj) if (obj.hasOwnProperty(key)) {\n      value = obj[key];\n      if (isString(value) || isNumber(value) || isBoolean(value) || isArray(value) || isNull(value)) {\n        dest[key] = value;\n      } else {\n        if (dest[key] == null) dest[key] = {};\n        merge(dest[key], value);\n      }\n    }\n    return dest;\n  };\n\n  // Set default days/months translations.\n  var DATE = {\n      day_names: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]\n    , abbr_day_names: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]\n    , month_names: [null, \"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]\n    , abbr_month_names: [null, \"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n    , meridian: [\"AM\", \"PM\"]\n  };\n\n  // Set default number format.\n  var NUMBER_FORMAT = {\n      precision: 3\n    , separator: \".\"\n    , delimiter: \",\"\n    , strip_insignificant_zeros: false\n  };\n\n  // Set default currency format.\n  var CURRENCY_FORMAT = {\n      unit: \"$\"\n    , precision: 2\n    , format: \"%u%n\"\n    , sign_first: true\n    , delimiter: \",\"\n    , separator: \".\"\n  };\n\n  // Set default percentage format.\n  var PERCENTAGE_FORMAT = {\n      unit: \"%\"\n    , precision: 3\n    , format: \"%n%u\"\n    , separator: \".\"\n    , delimiter: \"\"\n  };\n\n  // Set default size units.\n  var SIZE_UNITS = [null, \"kb\", \"mb\", \"gb\", \"tb\"];\n\n  // Other default options\n  var DEFAULT_OPTIONS = {\n    // Set default locale. This locale will be used when fallback is enabled and\n    // the translation doesn't exist in a particular locale.\n      defaultLocale: \"en\"\n    // Set the current locale to `en`.\n    , locale: \"en\"\n    // Set the translation key separator.\n    , defaultSeparator: \".\"\n    // Set the placeholder format. Accepts `{{placeholder}}` and `%{placeholder}`.\n    , placeholder: /(?:\\{\\{|%\\{)(.*?)(?:\\}\\}?)/gm\n    // Set if engine should fallback to the default locale when a translation\n    // is missing.\n    , fallbacks: false\n    // Set the default translation object.\n    , translations: {}\n    // Set missing translation behavior. 'message' will display a message\n    // that the translation is missing, 'guess' will try to guess the string\n    , missingBehaviour: 'message'\n    // if you use missingBehaviour with 'message', but want to know that the\n    // string is actually missing for testing purposes, you can prefix the\n    // guessed string by setting the value here. By default, no prefix!\n    , missingTranslationPrefix: ''\n  };\n\n  // Set default locale. This locale will be used when fallback is enabled and\n  // the translation doesn't exist in a particular locale.\n  I18n.reset = function() {\n    var key;\n    for (key in DEFAULT_OPTIONS) {\n      this[key] = DEFAULT_OPTIONS[key];\n    }\n  };\n\n  // Much like `reset`, but only assign options if not already assigned\n  I18n.initializeOptions = function() {\n    var key;\n    for (key in DEFAULT_OPTIONS) if (!isSet(this[key])) {\n      this[key] = DEFAULT_OPTIONS[key];\n    }\n  };\n  I18n.initializeOptions();\n\n  // Return a list of all locales that must be tried before returning the\n  // missing translation message. By default, this will consider the inline option,\n  // current locale and fallback locale.\n  //\n  //     I18n.locales.get(\"de-DE\");\n  //     // [\"de-DE\", \"de\", \"en\"]\n  //\n  // You can define custom rules for any locale. Just make sure you return a array\n  // containing all locales.\n  //\n  //     // Default the Wookie locale to English.\n  //     I18n.locales[\"wk\"] = function(locale) {\n  //       return [\"en\"];\n  //     };\n  //\n  I18n.locales = {};\n\n  // Retrieve locales based on inline locale, current locale or default to\n  // I18n's detection.\n  I18n.locales.get = function(locale) {\n    var result = this[locale] || this[I18n.locale] || this[\"default\"];\n\n    if (isFunction(result)) {\n      result = result(locale);\n    }\n\n    if (isArray(result) === false) {\n      result = [result];\n    }\n\n    return result;\n  };\n\n  // The default locale list.\n  I18n.locales[\"default\"] = function(locale) {\n    var locales = []\n      , list = []\n    ;\n\n    // Handle the inline locale option that can be provided to\n    // the `I18n.t` options.\n    if (locale) {\n      locales.push(locale);\n    }\n\n    // Add the current locale to the list.\n    if (!locale && I18n.locale) {\n      locales.push(I18n.locale);\n    }\n\n    // Add the default locale if fallback strategy is enabled.\n    if (I18n.fallbacks && I18n.defaultLocale) {\n      locales.push(I18n.defaultLocale);\n    }\n\n    // Locale code format 1:\n    // According to RFC4646 (https://www.ietf.org/rfc/rfc4646.txt)\n    // language codes for Traditional Chinese should be `zh-Hant`\n    //\n    // But due to backward compatibility\n    // We use older version of IETF language tag\n    // @see https://www.w3.org/TR/html401/struct/dirlang.html\n    // @see https://en.wikipedia.org/wiki/IETF_language_tag\n    //\n    // Format: `language-code = primary-code ( \"-\" subcode )*`\n    //\n    // primary-code uses ISO639-1\n    // @see https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes\n    // @see https://www.iso.org/iso/home/standards/language_codes.htm\n    //\n    // subcode uses ISO 3166-1 alpha-2\n    // @see https://en.wikipedia.org/wiki/ISO_3166\n    // @see https://www.iso.org/iso/country_codes.htm\n    //\n    // @note\n    //   subcode can be in upper case or lower case\n    //   defining it in upper case is a convention only\n\n\n    // Locale code format 2:\n    // Format: `code = primary-code ( \"-\" region-code )*`\n    // primary-code uses ISO 639-1\n    // script-code uses ISO 15924\n    // region-code uses ISO 3166-1 alpha-2\n    // Example: zh-Hant-TW, en-HK, zh-Hant-CN\n    //\n    // It is similar to RFC4646 (or actually the same),\n    // but seems to be limited to language, script, region\n\n    // Compute each locale with its country code.\n    // So this will return an array containing\n    // `de-DE` and `de`\n    // or\n    // `zh-hans-tw`, `zh-hans`, `zh`\n    // locales.\n    locales.forEach(function(locale) {\n      var localeParts = locale.split(\"-\");\n      var firstFallback = null;\n      var secondFallback = null;\n      if (localeParts.length === 3) {\n        firstFallback = [\n          localeParts[0],\n          localeParts[1]\n        ].join(\"-\");\n        secondFallback = localeParts[0];\n      }\n      else if (localeParts.length === 2) {\n        firstFallback = localeParts[0];\n      }\n\n      if (list.indexOf(locale) === -1) {\n        list.push(locale);\n      }\n\n      if (! I18n.fallbacks) {\n        return;\n      }\n\n      [\n        firstFallback,\n        secondFallback\n      ].forEach(function(nullableFallbackLocale) {\n        // We don't want null values\n        if (typeof nullableFallbackLocale === \"undefined\") { return; }\n        if (nullableFallbackLocale === null) { return; }\n        // We don't want duplicate values\n        //\n        // Comparing with `locale` first is faster than\n        // checking whether value's presence in the list\n        if (nullableFallbackLocale === locale) { return; }\n        if (list.indexOf(nullableFallbackLocale) !== -1) { return; }\n\n        list.push(nullableFallbackLocale);\n      });\n    });\n\n    // No locales set? English it is.\n    if (!locales.length) {\n      locales.push(\"en\");\n    }\n\n    return list;\n  };\n\n  // Hold pluralization rules.\n  I18n.pluralization = {};\n\n  // Return the pluralizer for a specific locale.\n  // If no specify locale is found, then I18n's default will be used.\n  I18n.pluralization.get = function(locale) {\n    return this[locale] || this[I18n.locale] || this[\"default\"];\n  };\n\n  // The default pluralizer rule.\n  // It detects the `zero`, `one`, and `other` scopes.\n  I18n.pluralization[\"default\"] = function(count) {\n    switch (count) {\n      case 0: return [\"zero\", \"other\"];\n      case 1: return [\"one\"];\n      default: return [\"other\"];\n    }\n  };\n\n  // Return current locale. If no locale has been set, then\n  // the current locale will be the default locale.\n  I18n.currentLocale = function() {\n    return this.locale || this.defaultLocale;\n  };\n\n  // Check if value is different than undefined and null;\n  I18n.isSet = isSet;\n\n  // Find and process the translation using the provided scope and options.\n  // This is used internally by some functions and should not be used as an\n  // public API.\n  I18n.lookup = function(scope, options) {\n    options = options || {};\n\n    var locales = this.locales.get(options.locale).slice()\n      , locale\n      , scopes\n      , fullScope\n      , translations\n    ;\n\n    fullScope = this.getFullScope(scope, options);\n\n    while (locales.length) {\n      locale = locales.shift();\n      scopes = fullScope.split(options.separator || this.defaultSeparator);\n      translations = this.translations[locale];\n\n      if (!translations) {\n        continue;\n      }\n      while (scopes.length) {\n        translations = translations[scopes.shift()];\n\n        if (translations === undefined || translations === null) {\n          break;\n        }\n      }\n\n      if (translations !== undefined && translations !== null) {\n        return translations;\n      }\n    }\n\n    if (isSet(options.defaultValue)) {\n      return lazyEvaluate(options.defaultValue, scope);\n    }\n  };\n\n  // lookup pluralization rule key into translations\n  I18n.pluralizationLookupWithoutFallback = function(count, locale, translations) {\n    var pluralizer = this.pluralization.get(locale)\n      , pluralizerKeys = pluralizer(count)\n      , pluralizerKey\n      , message;\n\n    if (translations && isObject(translations)) {\n      while (pluralizerKeys.length) {\n        pluralizerKey = pluralizerKeys.shift();\n        if (isSet(translations[pluralizerKey])) {\n          message = translations[pluralizerKey];\n          break;\n        }\n      }\n    }\n\n    return message;\n  };\n\n  // Lookup dedicated to pluralization\n  I18n.pluralizationLookup = function(count, scope, options) {\n    options = options || {};\n    var locales = this.locales.get(options.locale).slice()\n      , locale\n      , scopes\n      , translations\n      , message\n    ;\n    scope = this.getFullScope(scope, options);\n\n    while (locales.length) {\n      locale = locales.shift();\n      scopes = scope.split(options.separator || this.defaultSeparator);\n      translations = this.translations[locale];\n\n      if (!translations) {\n        continue;\n      }\n\n      while (scopes.length) {\n        translations = translations[scopes.shift()];\n        if (!isObject(translations)) {\n          break;\n        }\n        if (scopes.length === 0) {\n          message = this.pluralizationLookupWithoutFallback(count, locale, translations);\n        }\n      }\n      if (typeof message !== \"undefined\" && message !== null) {\n        break;\n      }\n    }\n\n    if (typeof message === \"undefined\" || message === null) {\n      if (isSet(options.defaultValue)) {\n        if (isObject(options.defaultValue)) {\n          message = this.pluralizationLookupWithoutFallback(count, options.locale, options.defaultValue);\n        } else {\n          message = options.defaultValue;\n        }\n        translations = options.defaultValue;\n      }\n    }\n\n    return { message: message, translations: translations };\n  };\n\n  // Rails changed the way the meridian is stored.\n  // It started with `date.meridian` returning an array,\n  // then it switched to `time.am` and `time.pm`.\n  // This function abstracts this difference and returns\n  // the correct meridian or the default value when none is provided.\n  I18n.meridian = function() {\n    var time = this.lookup(\"time\");\n    var date = this.lookup(\"date\");\n\n    if (time && time.am && time.pm) {\n      return [time.am, time.pm];\n    } else if (date && date.meridian) {\n      return date.meridian;\n    } else {\n      return DATE.meridian;\n    }\n  };\n\n  // Merge serveral hash options, checking if value is set before\n  // overwriting any value. The precedence is from left to right.\n  //\n  //     I18n.prepareOptions({name: \"John Doe\"}, {name: \"Mary Doe\", role: \"user\"});\n  //     #=> {name: \"John Doe\", role: \"user\"}\n  //\n  I18n.prepareOptions = function() {\n    var args = slice.call(arguments)\n      , options = {}\n      , subject\n    ;\n\n    while (args.length) {\n      subject = args.shift();\n\n      if (typeof(subject) != \"object\") {\n        continue;\n      }\n\n      for (var attr in subject) {\n        if (!subject.hasOwnProperty(attr)) {\n          continue;\n        }\n\n        if (isSet(options[attr])) {\n          continue;\n        }\n\n        options[attr] = subject[attr];\n      }\n    }\n\n    return options;\n  };\n\n  // Generate a list of translation options for default fallbacks.\n  // `defaultValue` is also deleted from options as it is returned as part of\n  // the translationOptions array.\n  I18n.createTranslationOptions = function(scope, options) {\n    var translationOptions = [{scope: scope}];\n\n    // Defaults should be an array of hashes containing either\n    // fallback scopes or messages\n    if (isSet(options.defaults)) {\n      translationOptions = translationOptions.concat(options.defaults);\n    }\n\n    // Maintain support for defaultValue. Since it is always a message\n    // insert it in to the translation options as such.\n    if (isSet(options.defaultValue)) {\n      translationOptions.push({ message: options.defaultValue });\n    }\n\n    return translationOptions;\n  };\n\n  // Translate the given scope with the provided options.\n  I18n.translate = function(scope, options) {\n    options = options || {};\n\n    var translationOptions = this.createTranslationOptions(scope, options);\n\n    var translation;\n    var usedScope = scope;\n\n    var optionsWithoutDefault = this.prepareOptions(options)\n    delete optionsWithoutDefault.defaultValue\n\n    // Iterate through the translation options until a translation\n    // or message is found.\n    var translationFound =\n      translationOptions.some(function(translationOption) {\n        if (isSet(translationOption.scope)) {\n          usedScope = translationOption.scope;\n          translation = this.lookup(usedScope, optionsWithoutDefault);\n        } else if (isSet(translationOption.message)) {\n          translation = lazyEvaluate(translationOption.message, scope);\n        }\n\n        if (translation !== undefined && translation !== null) {\n          return true;\n        }\n      }, this);\n\n    if (!translationFound) {\n      return this.missingTranslation(scope, options);\n    }\n\n    if (typeof(translation) === \"string\") {\n      translation = this.interpolate(translation, options);\n    } else if (isArray(translation)) {\n      translation = translation.map(function(t) {\n        return (typeof(t) === \"string\" ? this.interpolate(t, options) : t);\n      }, this);\n    } else if (isObject(translation) && isSet(options.count)) {\n      translation = this.pluralize(options.count, usedScope, options);\n    }\n\n    return translation;\n  };\n\n  // This function interpolates the all variables in the given message.\n  I18n.interpolate = function(message, options) {\n    if (message == null) {\n      return message;\n    }\n\n    options = options || {};\n    var matches = message.match(this.placeholder)\n      , placeholder\n      , value\n      , name\n      , regex\n    ;\n\n    if (!matches) {\n      return message;\n    }\n\n    while (matches.length) {\n      placeholder = matches.shift();\n      name = placeholder.replace(this.placeholder, \"$1\");\n\n      if (isSet(options[name])) {\n        value = options[name].toString().replace(/\\$/gm, \"_#$#_\");\n      } else if (name in options) {\n        value = this.nullPlaceholder(placeholder, message, options);\n      } else {\n        value = this.missingPlaceholder(placeholder, message, options);\n      }\n\n      regex = new RegExp(placeholder.replace(/{/gm, \"\\\\{\").replace(/}/gm, \"\\\\}\"));\n      message = message.replace(regex, value);\n    }\n\n    return message.replace(/_#\\$#_/g, \"$\");\n  };\n\n  // Pluralize the given scope using the `count` value.\n  // The pluralized translation may have other placeholders,\n  // which will be retrieved from `options`.\n  I18n.pluralize = function(count, scope, options) {\n    options = this.prepareOptions({count: String(count)}, options)\n    var pluralizer, result;\n\n    result = this.pluralizationLookup(count, scope, options);\n    if (typeof result.translations === \"undefined\" || result.translations == null) {\n      return this.missingTranslation(scope, options);\n    }\n\n    if (typeof result.message !== \"undefined\" && result.message != null) {\n      return this.interpolate(result.message, options);\n    }\n    else {\n      pluralizer = this.pluralization.get(options.locale);\n      return this.missingTranslation(scope + '.' + pluralizer(count)[0], options);\n    }\n  };\n\n  // Return a missing translation message for the given parameters.\n  I18n.missingTranslation = function(scope, options) {\n    //guess intended string\n    if(this.missingBehaviour === 'guess'){\n      //get only the last portion of the scope\n      var s = scope.split('.').slice(-1)[0];\n      //replace underscore with space && camelcase with space and lowercase letter\n      return (this.missingTranslationPrefix.length > 0 ? this.missingTranslationPrefix : '') +\n          s.replace(/_/g,' ').replace(/([a-z])([A-Z])/g,\n          function(match, p1, p2) {return p1 + ' ' + p2.toLowerCase()} );\n    }\n\n    var localeForTranslation = (options != null && options.locale != null) ? options.locale : this.currentLocale();\n    var fullScope           = this.getFullScope(scope, options);\n    var fullScopeWithLocale = [localeForTranslation, fullScope].join(options.separator || this.defaultSeparator);\n\n    return '[missing \"' + fullScopeWithLocale + '\" translation]';\n  };\n\n  // Return a missing placeholder message for given parameters\n  I18n.missingPlaceholder = function(placeholder, message, options) {\n    return \"[missing \" + placeholder + \" value]\";\n  };\n\n  I18n.nullPlaceholder = function() {\n    return I18n.missingPlaceholder.apply(I18n, arguments);\n  };\n\n  // Format number using localization rules.\n  // The options will be retrieved from the `number.format` scope.\n  // If this isn't present, then the following options will be used:\n  //\n  // - `precision`: `3`\n  // - `separator`: `\".\"`\n  // - `delimiter`: `\",\"`\n  // - `strip_insignificant_zeros`: `false`\n  //\n  // You can also override these options by providing the `options` argument.\n  //\n  I18n.toNumber = function(number, options) {\n    options = this.prepareOptions(\n        options\n      , this.lookup(\"number.format\")\n      , NUMBER_FORMAT\n    );\n\n    var negative = number < 0\n      , string = toFixed(Math.abs(number), options.precision).toString()\n      , parts = string.split(\".\")\n      , precision\n      , buffer = []\n      , formattedNumber\n      , format = options.format || \"%n\"\n      , sign = negative ? \"-\" : \"\"\n    ;\n\n    number = parts[0];\n    precision = parts[1];\n\n    while (number.length > 0) {\n      buffer.unshift(number.substr(Math.max(0, number.length - 3), 3));\n      number = number.substr(0, number.length -3);\n    }\n\n    formattedNumber = buffer.join(options.delimiter);\n\n    if (options.strip_insignificant_zeros && precision) {\n      precision = precision.replace(/0+$/, \"\");\n    }\n\n    if (options.precision > 0 && precision) {\n      formattedNumber += options.separator + precision;\n    }\n\n    if (options.sign_first) {\n      format = \"%s\" + format;\n    }\n    else {\n      format = format.replace(\"%n\", \"%s%n\");\n    }\n\n    formattedNumber = format\n      .replace(\"%u\", options.unit)\n      .replace(\"%n\", formattedNumber)\n      .replace(\"%s\", sign)\n    ;\n\n    return formattedNumber;\n  };\n\n  // Format currency with localization rules.\n  // The options will be retrieved from the `number.currency.format` and\n  // `number.format` scopes, in that order.\n  //\n  // Any missing option will be retrieved from the `I18n.toNumber` defaults and\n  // the following options:\n  //\n  // - `unit`: `\"$\"`\n  // - `precision`: `2`\n  // - `format`: `\"%u%n\"`\n  // - `delimiter`: `\",\"`\n  // - `separator`: `\".\"`\n  //\n  // You can also override these options by providing the `options` argument.\n  //\n  I18n.toCurrency = function(number, options) {\n    options = this.prepareOptions(\n        options\n      , this.lookup(\"number.currency.format\", options)\n      , this.lookup(\"number.format\", options)\n      , CURRENCY_FORMAT\n    );\n\n    return this.toNumber(number, options);\n  };\n\n  // Localize several values.\n  // You can provide the following scopes: `currency`, `number`, or `percentage`.\n  // If you provide a scope that matches the `/^(date|time)/` regular expression\n  // then the `value` will be converted by using the `I18n.toTime` function.\n  //\n  // It will default to the value's `toString` function.\n  //\n  I18n.localize = function(scope, value, options) {\n    options || (options = {});\n\n    switch (scope) {\n      case \"currency\":\n        return this.toCurrency(value, options);\n      case \"number\":\n        scope = this.lookup(\"number.format\", options);\n        return this.toNumber(value, scope);\n      case \"percentage\":\n        return this.toPercentage(value, options);\n      default:\n        var localizedValue;\n\n        if (scope.match(/^(date|time)/)) {\n          localizedValue = this.toTime(scope, value, options);\n        } else {\n          localizedValue = value.toString();\n        }\n\n        return this.interpolate(localizedValue, options);\n    }\n  };\n\n  // Parse a given `date` string into a JavaScript Date object.\n  // This function is time zone aware.\n  //\n  // The following string formats are recognized:\n  //\n  //    yyyy-mm-dd\n  //    yyyy-mm-dd[ T]hh:mm::ss\n  //    yyyy-mm-dd[ T]hh:mm::ss\n  //    yyyy-mm-dd[ T]hh:mm::ssZ\n  //    yyyy-mm-dd[ T]hh:mm::ss+0000\n  //    yyyy-mm-dd[ T]hh:mm::ss+00:00\n  //    yyyy-mm-dd[ T]hh:mm::ss.123Z\n  //\n  I18n.parseDate = function(date) {\n    var matches, convertedDate, fraction;\n    // A date input of `null` or `undefined` will be returned as-is\n    if (date == null) {\n      return date;\n    }\n    // we have a date, so just return it.\n    if (typeof(date) === \"object\") {\n      return date;\n    }\n\n    matches = date.toString().match(/(\\d{4})-(\\d{2})-(\\d{2})(?:[ T](\\d{2}):(\\d{2}):(\\d{2})([\\.,]\\d{1,3})?)?(Z|\\+00:?00)?/);\n\n    if (matches) {\n      for (var i = 1; i <= 6; i++) {\n        matches[i] = parseInt(matches[i], 10) || 0;\n      }\n\n      // month starts on 0\n      matches[2] -= 1;\n\n      fraction = matches[7] ? 1000 * (\"0\" + matches[7]) : null;\n\n      if (matches[8]) {\n        convertedDate = new Date(Date.UTC(matches[1], matches[2], matches[3], matches[4], matches[5], matches[6], fraction));\n      } else {\n        convertedDate = new Date(matches[1], matches[2], matches[3], matches[4], matches[5], matches[6], fraction);\n      }\n    } else if (typeof(date) == \"number\") {\n      // UNIX timestamp\n      convertedDate = new Date();\n      convertedDate.setTime(date);\n    } else if (date.match(/([A-Z][a-z]{2}) ([A-Z][a-z]{2}) (\\d+) (\\d+:\\d+:\\d+) ([+-]\\d+) (\\d+)/)) {\n      // This format `Wed Jul 20 13:03:39 +0000 2011` is parsed by\n      // webkit/firefox, but not by IE, so we must parse it manually.\n      convertedDate = new Date();\n      convertedDate.setTime(Date.parse([\n        RegExp.$1, RegExp.$2, RegExp.$3, RegExp.$6, RegExp.$4, RegExp.$5\n      ].join(\" \")));\n    } else if (date.match(/\\d+ \\d+:\\d+:\\d+ [+-]\\d+ \\d+/)) {\n      // a valid javascript format with timezone info\n      convertedDate = new Date();\n      convertedDate.setTime(Date.parse(date));\n    } else {\n      // an arbitrary javascript string\n      convertedDate = new Date();\n      convertedDate.setTime(Date.parse(date));\n    }\n\n    return convertedDate;\n  };\n\n  // Formats time according to the directives in the given format string.\n  // The directives begins with a percent (%) character. Any text not listed as a\n  // directive will be passed through to the output string.\n  //\n  // The accepted formats are:\n  //\n  //     %a     - The abbreviated weekday name (Sun)\n  //     %A     - The full weekday name (Sunday)\n  //     %b     - The abbreviated month name (Jan)\n  //     %B     - The full month name (January)\n  //     %c     - The preferred local date and time representation\n  //     %d     - Day of the month (01..31)\n  //     %-d    - Day of the month (1..31)\n  //     %H     - Hour of the day, 24-hour clock (00..23)\n  //     %-H/%k - Hour of the day, 24-hour clock (0..23)\n  //     %I     - Hour of the day, 12-hour clock (01..12)\n  //     %-I/%l - Hour of the day, 12-hour clock (1..12)\n  //     %m     - Month of the year (01..12)\n  //     %-m    - Month of the year (1..12)\n  //     %M     - Minute of the hour (00..59)\n  //     %-M    - Minute of the hour (0..59)\n  //     %p     - Meridian indicator (AM  or  PM)\n  //     %P     - Meridian indicator (am  or  pm)\n  //     %S     - Second of the minute (00..60)\n  //     %-S    - Second of the minute (0..60)\n  //     %w     - Day of the week (Sunday is 0, 0..6)\n  //     %y     - Year without a century (00..99)\n  //     %-y    - Year without a century (0..99)\n  //     %Y     - Year with century\n  //     %z/%Z  - Timezone offset (+0545)\n  //\n  I18n.strftime = function(date, format, options) {\n    var options = this.lookup(\"date\", options)\n      , meridianOptions = I18n.meridian()\n    ;\n\n    if (!options) {\n      options = {};\n    }\n\n    options = this.prepareOptions(options, DATE);\n\n    if (isNaN(date.getTime())) {\n      throw new Error('I18n.strftime() requires a valid date object, but received an invalid date.');\n    }\n\n    var weekDay = date.getDay()\n      , day = date.getDate()\n      , year = date.getFullYear()\n      , month = date.getMonth() + 1\n      , hour = date.getHours()\n      , hour12 = hour\n      , meridian = hour > 11 ? 1 : 0\n      , secs = date.getSeconds()\n      , mins = date.getMinutes()\n      , offset = date.getTimezoneOffset()\n      , absOffsetHours = Math.floor(Math.abs(offset / 60))\n      , absOffsetMinutes = Math.abs(offset) - (absOffsetHours * 60)\n      , timezoneoffset = (offset > 0 ? \"-\" : \"+\") +\n          (absOffsetHours.toString().length < 2 ? \"0\" + absOffsetHours : absOffsetHours) +\n          (absOffsetMinutes.toString().length < 2 ? \"0\" + absOffsetMinutes : absOffsetMinutes)\n    ;\n\n    if (hour12 > 12) {\n      hour12 = hour12 - 12;\n    } else if (hour12 === 0) {\n      hour12 = 12;\n    }\n\n    format = format.replace(\"%a\", options.abbr_day_names[weekDay]);\n    format = format.replace(\"%A\", options.day_names[weekDay]);\n    format = format.replace(\"%b\", options.abbr_month_names[month]);\n    format = format.replace(\"%B\", options.month_names[month]);\n    format = format.replace(\"%d\", padding(day));\n    format = format.replace(\"%e\", day);\n    format = format.replace(\"%-d\", day);\n    format = format.replace(\"%H\", padding(hour));\n    format = format.replace(\"%-H\", hour);\n    format = format.replace(\"%k\", hour);\n    format = format.replace(\"%I\", padding(hour12));\n    format = format.replace(\"%-I\", hour12);\n    format = format.replace(\"%l\", hour12);\n    format = format.replace(\"%m\", padding(month));\n    format = format.replace(\"%-m\", month);\n    format = format.replace(\"%M\", padding(mins));\n    format = format.replace(\"%-M\", mins);\n    format = format.replace(\"%p\", meridianOptions[meridian]);\n    format = format.replace(\"%P\", meridianOptions[meridian].toLowerCase());\n    format = format.replace(\"%S\", padding(secs));\n    format = format.replace(\"%-S\", secs);\n    format = format.replace(\"%w\", weekDay);\n    format = format.replace(\"%y\", padding(year));\n    format = format.replace(\"%-y\", padding(year).replace(/^0+/, \"\"));\n    format = format.replace(\"%Y\", year);\n    format = format.replace(\"%z\", timezoneoffset);\n    format = format.replace(\"%Z\", timezoneoffset);\n\n    return format;\n  };\n\n  // Convert the given dateString into a formatted date.\n  I18n.toTime = function(scope, dateString, options) {\n    var date = this.parseDate(dateString)\n      , format = this.lookup(scope, options)\n    ;\n\n    // A date input of `null` or `undefined` will be returned as-is\n    if (date == null) {\n      return date;\n    }\n\n    var date_string = date.toString()\n    if (date_string.match(/invalid/i)) {\n      return date_string;\n    }\n\n    if (!format) {\n      return date_string;\n    }\n\n    return this.strftime(date, format, options);\n  };\n\n  // Convert a number into a formatted percentage value.\n  I18n.toPercentage = function(number, options) {\n    options = this.prepareOptions(\n        options\n      , this.lookup(\"number.percentage.format\", options)\n      , this.lookup(\"number.format\", options)\n      , PERCENTAGE_FORMAT\n    );\n\n    return this.toNumber(number, options);\n  };\n\n  // Convert a number into a readable size representation.\n  I18n.toHumanSize = function(number, options) {\n    var kb = 1024\n      , size = number\n      , iterations = 0\n      , unit\n      , precision\n      , fullScope\n    ;\n\n    while (size >= kb && iterations < 4) {\n      size = size / kb;\n      iterations += 1;\n    }\n\n    if (iterations === 0) {\n      fullScope = this.getFullScope(\"number.human.storage_units.units.byte\", options);\n      unit = this.t(fullScope, {count: size});\n      precision = 0;\n    } else {\n      fullScope = this.getFullScope(\"number.human.storage_units.units.\" + SIZE_UNITS[iterations], options);\n      unit = this.t(fullScope);\n      precision = (size - Math.floor(size) === 0) ? 0 : 1;\n    }\n\n    options = this.prepareOptions(\n        options\n      , {unit: unit, precision: precision, format: \"%n%u\", delimiter: \"\"}\n    );\n\n    return this.toNumber(size, options);\n  };\n\n  I18n.getFullScope = function(scope, options) {\n    options = options || {};\n\n    // Deal with the scope as an array.\n    if (isArray(scope)) {\n      scope = scope.join(options.separator || this.defaultSeparator);\n    }\n\n    // Deal with the scope option provided through the second argument.\n    //\n    //    I18n.t('hello', {scope: 'greetings'});\n    //\n    if (options.scope) {\n      scope = [options.scope, scope].join(options.separator || this.defaultSeparator);\n    }\n\n    return scope;\n  };\n  /**\n   * Merge obj1 with obj2 (shallow merge), without modifying inputs\n   * @param {Object} obj1\n   * @param {Object} obj2\n   * @returns {Object} Merged values of obj1 and obj2\n   *\n   * In order to support ES3, `Object.prototype.hasOwnProperty.call` is used\n   * Idea is from:\n   * https://stackoverflow.com/questions/8157700/object-has-no-hasownproperty-method-i-e-its-undefined-ie8\n   */\n  I18n.extend = function ( obj1, obj2 ) {\n    if (typeof(obj1) === \"undefined\" && typeof(obj2) === \"undefined\") {\n      return {};\n    }\n    return merge(obj1, obj2);\n  };\n\n  // Set aliases, so we can save some typing.\n  I18n.t = I18n.translate.bind(I18n);\n  I18n.l = I18n.localize.bind(I18n);\n  I18n.p = I18n.pluralize.bind(I18n);\n\n  return I18n;\n}));\n","/*!\n * jQuery Cookie Plugin v1.4.1\n * https://github.com/carhartl/jquery-cookie\n *\n * Copyright 2013 Klaus Hartl\n * Released under the MIT license\n */\n(function (factory) {\n\tif (typeof define === 'function' && define.amd) {\n\t\t// AMD\n\t\tdefine(['jquery'], factory);\n\t} else if (typeof exports === 'object') {\n\t\t// CommonJS\n\t\tfactory(require('jquery'));\n\t} else {\n\t\t// Browser globals\n\t\tfactory(jQuery);\n\t}\n}(function ($) {\n\n\tvar pluses = /\\+/g;\n\n\tfunction encode(s) {\n\t\treturn config.raw ? s : encodeURIComponent(s);\n\t}\n\n\tfunction decode(s) {\n\t\treturn config.raw ? s : decodeURIComponent(s);\n\t}\n\n\tfunction stringifyCookieValue(value) {\n\t\treturn encode(config.json ? JSON.stringify(value) : String(value));\n\t}\n\n\tfunction parseCookieValue(s) {\n\t\tif (s.indexOf('\"') === 0) {\n\t\t\t// This is a quoted cookie as according to RFC2068, unescape...\n\t\t\ts = s.slice(1, -1).replace(/\\\\\"/g, '\"').replace(/\\\\\\\\/g, '\\\\');\n\t\t}\n\n\t\ttry {\n\t\t\t// Replace server-side written pluses with spaces.\n\t\t\t// If we can't decode the cookie, ignore it, it's unusable.\n\t\t\t// If we can't parse the cookie, ignore it, it's unusable.\n\t\t\ts = decodeURIComponent(s.replace(pluses, ' '));\n\t\t\treturn config.json ? JSON.parse(s) : s;\n\t\t} catch(e) {}\n\t}\n\n\tfunction read(s, converter) {\n\t\tvar value = config.raw ? s : parseCookieValue(s);\n\t\treturn $.isFunction(converter) ? converter(value) : value;\n\t}\n\n\tvar config = $.cookie = function (key, value, options) {\n\n\t\t// Write\n\n\t\tif (value !== undefined && !$.isFunction(value)) {\n\t\t\toptions = $.extend({}, config.defaults, options);\n\n\t\t\tif (typeof options.expires === 'number') {\n\t\t\t\tvar days = options.expires, t = options.expires = new Date();\n\t\t\t\tt.setTime(+t + days * 864e+5);\n\t\t\t}\n\n\t\t\treturn (document.cookie = [\n\t\t\t\tencode(key), '=', stringifyCookieValue(value),\n\t\t\t\toptions.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE\n\t\t\t\toptions.path    ? '; path=' + options.path : '',\n\t\t\t\toptions.domain  ? '; domain=' + options.domain : '',\n\t\t\t\toptions.secure  ? '; secure' : ''\n\t\t\t].join(''));\n\t\t}\n\n\t\t// Read\n\n\t\tvar result = key ? undefined : {};\n\n\t\t// To prevent the for loop in the first place assign an empty array\n\t\t// in case there are no cookies at all. Also prevents odd result when\n\t\t// calling $.cookie().\n\t\tvar cookies = document.cookie ? document.cookie.split('; ') : [];\n\n\t\tfor (var i = 0, l = cookies.length; i < l; i++) {\n\t\t\tvar parts = cookies[i].split('=');\n\t\t\tvar name = decode(parts.shift());\n\t\t\tvar cookie = parts.join('=');\n\n\t\t\tif (key && key === name) {\n\t\t\t\t// If second argument (value) is a function it's a converter...\n\t\t\t\tresult = read(cookie, value);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Prevent storing a cookie that we couldn't decode.\n\t\t\tif (!key && (cookie = read(cookie)) !== undefined) {\n\t\t\t\tresult[name] = cookie;\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t};\n\n\tconfig.defaults = {};\n\n\t$.removeCookie = function (key, options) {\n\t\tif ($.cookie(key) === undefined) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Must not alter options, thus extending a fresh object...\n\t\t$.cookie(key, '', $.extend({}, options, { expires: -1 }));\n\t\treturn !$.cookie(key);\n\t};\n\n}));\n","//! moment.js locale configuration\n//! locale : Swedish [sv]\n//! author : Jens Alm : https://github.com/ulmus\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var sv = moment.defineLocale('sv', {\n        months: 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split(\n            '_'\n        ),\n        monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n        weekdays: 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'),\n        weekdaysShort: 'sön_mån_tis_ons_tor_fre_lör'.split('_'),\n        weekdaysMin: 'sö_må_ti_on_to_fr_lö'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY [kl.] HH:mm',\n            LLLL: 'dddd D MMMM YYYY [kl.] HH:mm',\n            lll: 'D MMM YYYY HH:mm',\n            llll: 'ddd D MMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Idag] LT',\n            nextDay: '[Imorgon] LT',\n            lastDay: '[Igår] LT',\n            nextWeek: '[På] dddd LT',\n            lastWeek: '[I] dddd[s] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'om %s',\n            past: 'för %s sedan',\n            s: 'några sekunder',\n            ss: '%d sekunder',\n            m: 'en minut',\n            mm: '%d minuter',\n            h: 'en timme',\n            hh: '%d timmar',\n            d: 'en dag',\n            dd: '%d dagar',\n            M: 'en månad',\n            MM: '%d månader',\n            y: 'ett år',\n            yy: '%d år',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(\\:e|\\:a)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? ':e'\n                        : b === 1\n                        ? ':a'\n                        : b === 2\n                        ? ':a'\n                        : b === 3\n                        ? ':e'\n                        : ':e';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return sv;\n\n})));\n","//! moment.js\n//! version : 2.29.4\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\n;(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n    typeof define === 'function' && define.amd ? define(factory) :\n    global.moment = factory()\n}(this, (function () { 'use strict';\n\n    var hookCallback;\n\n    function hooks() {\n        return hookCallback.apply(null, arguments);\n    }\n\n    // This is done to register the method called with moment()\n    // without creating circular dependencies.\n    function setHookCallback(callback) {\n        hookCallback = callback;\n    }\n\n    function isArray(input) {\n        return (\n            input instanceof Array ||\n            Object.prototype.toString.call(input) === '[object Array]'\n        );\n    }\n\n    function isObject(input) {\n        // IE8 will treat undefined and null as object if it wasn't for\n        // input != null\n        return (\n            input != null &&\n            Object.prototype.toString.call(input) === '[object Object]'\n        );\n    }\n\n    function hasOwnProp(a, b) {\n        return Object.prototype.hasOwnProperty.call(a, b);\n    }\n\n    function isObjectEmpty(obj) {\n        if (Object.getOwnPropertyNames) {\n            return Object.getOwnPropertyNames(obj).length === 0;\n        } else {\n            var k;\n            for (k in obj) {\n                if (hasOwnProp(obj, k)) {\n                    return false;\n                }\n            }\n            return true;\n        }\n    }\n\n    function isUndefined(input) {\n        return input === void 0;\n    }\n\n    function isNumber(input) {\n        return (\n            typeof input === 'number' ||\n            Object.prototype.toString.call(input) === '[object Number]'\n        );\n    }\n\n    function isDate(input) {\n        return (\n            input instanceof Date ||\n            Object.prototype.toString.call(input) === '[object Date]'\n        );\n    }\n\n    function map(arr, fn) {\n        var res = [],\n            i,\n            arrLen = arr.length;\n        for (i = 0; i < arrLen; ++i) {\n            res.push(fn(arr[i], i));\n        }\n        return res;\n    }\n\n    function extend(a, b) {\n        for (var i in b) {\n            if (hasOwnProp(b, i)) {\n                a[i] = b[i];\n            }\n        }\n\n        if (hasOwnProp(b, 'toString')) {\n            a.toString = b.toString;\n        }\n\n        if (hasOwnProp(b, 'valueOf')) {\n            a.valueOf = b.valueOf;\n        }\n\n        return a;\n    }\n\n    function createUTC(input, format, locale, strict) {\n        return createLocalOrUTC(input, format, locale, strict, true).utc();\n    }\n\n    function defaultParsingFlags() {\n        // We need to deep clone this object.\n        return {\n            empty: false,\n            unusedTokens: [],\n            unusedInput: [],\n            overflow: -2,\n            charsLeftOver: 0,\n            nullInput: false,\n            invalidEra: null,\n            invalidMonth: null,\n            invalidFormat: false,\n            userInvalidated: false,\n            iso: false,\n            parsedDateParts: [],\n            era: null,\n            meridiem: null,\n            rfc2822: false,\n            weekdayMismatch: false,\n        };\n    }\n\n    function getParsingFlags(m) {\n        if (m._pf == null) {\n            m._pf = defaultParsingFlags();\n        }\n        return m._pf;\n    }\n\n    var some;\n    if (Array.prototype.some) {\n        some = Array.prototype.some;\n    } else {\n        some = function (fun) {\n            var t = Object(this),\n                len = t.length >>> 0,\n                i;\n\n            for (i = 0; i < len; i++) {\n                if (i in t && fun.call(this, t[i], i, t)) {\n                    return true;\n                }\n            }\n\n            return false;\n        };\n    }\n\n    function isValid(m) {\n        if (m._isValid == null) {\n            var flags = getParsingFlags(m),\n                parsedParts = some.call(flags.parsedDateParts, function (i) {\n                    return i != null;\n                }),\n                isNowValid =\n                    !isNaN(m._d.getTime()) &&\n                    flags.overflow < 0 &&\n                    !flags.empty &&\n                    !flags.invalidEra &&\n                    !flags.invalidMonth &&\n                    !flags.invalidWeekday &&\n                    !flags.weekdayMismatch &&\n                    !flags.nullInput &&\n                    !flags.invalidFormat &&\n                    !flags.userInvalidated &&\n                    (!flags.meridiem || (flags.meridiem && parsedParts));\n\n            if (m._strict) {\n                isNowValid =\n                    isNowValid &&\n                    flags.charsLeftOver === 0 &&\n                    flags.unusedTokens.length === 0 &&\n                    flags.bigHour === undefined;\n            }\n\n            if (Object.isFrozen == null || !Object.isFrozen(m)) {\n                m._isValid = isNowValid;\n            } else {\n                return isNowValid;\n            }\n        }\n        return m._isValid;\n    }\n\n    function createInvalid(flags) {\n        var m = createUTC(NaN);\n        if (flags != null) {\n            extend(getParsingFlags(m), flags);\n        } else {\n            getParsingFlags(m).userInvalidated = true;\n        }\n\n        return m;\n    }\n\n    // Plugins that add properties should also add the key here (null value),\n    // so we can properly clone ourselves.\n    var momentProperties = (hooks.momentProperties = []),\n        updateInProgress = false;\n\n    function copyConfig(to, from) {\n        var i,\n            prop,\n            val,\n            momentPropertiesLen = momentProperties.length;\n\n        if (!isUndefined(from._isAMomentObject)) {\n            to._isAMomentObject = from._isAMomentObject;\n        }\n        if (!isUndefined(from._i)) {\n            to._i = from._i;\n        }\n        if (!isUndefined(from._f)) {\n            to._f = from._f;\n        }\n        if (!isUndefined(from._l)) {\n            to._l = from._l;\n        }\n        if (!isUndefined(from._strict)) {\n            to._strict = from._strict;\n        }\n        if (!isUndefined(from._tzm)) {\n            to._tzm = from._tzm;\n        }\n        if (!isUndefined(from._isUTC)) {\n            to._isUTC = from._isUTC;\n        }\n        if (!isUndefined(from._offset)) {\n            to._offset = from._offset;\n        }\n        if (!isUndefined(from._pf)) {\n            to._pf = getParsingFlags(from);\n        }\n        if (!isUndefined(from._locale)) {\n            to._locale = from._locale;\n        }\n\n        if (momentPropertiesLen > 0) {\n            for (i = 0; i < momentPropertiesLen; i++) {\n                prop = momentProperties[i];\n                val = from[prop];\n                if (!isUndefined(val)) {\n                    to[prop] = val;\n                }\n            }\n        }\n\n        return to;\n    }\n\n    // Moment prototype object\n    function Moment(config) {\n        copyConfig(this, config);\n        this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n        if (!this.isValid()) {\n            this._d = new Date(NaN);\n        }\n        // Prevent infinite loop in case updateOffset creates new moment\n        // objects.\n        if (updateInProgress === false) {\n            updateInProgress = true;\n            hooks.updateOffset(this);\n            updateInProgress = false;\n        }\n    }\n\n    function isMoment(obj) {\n        return (\n            obj instanceof Moment || (obj != null && obj._isAMomentObject != null)\n        );\n    }\n\n    function warn(msg) {\n        if (\n            hooks.suppressDeprecationWarnings === false &&\n            typeof console !== 'undefined' &&\n            console.warn\n        ) {\n            console.warn('Deprecation warning: ' + msg);\n        }\n    }\n\n    function deprecate(msg, fn) {\n        var firstTime = true;\n\n        return extend(function () {\n            if (hooks.deprecationHandler != null) {\n                hooks.deprecationHandler(null, msg);\n            }\n            if (firstTime) {\n                var args = [],\n                    arg,\n                    i,\n                    key,\n                    argLen = arguments.length;\n                for (i = 0; i < argLen; i++) {\n                    arg = '';\n                    if (typeof arguments[i] === 'object') {\n                        arg += '\\n[' + i + '] ';\n                        for (key in arguments[0]) {\n                            if (hasOwnProp(arguments[0], key)) {\n                                arg += key + ': ' + arguments[0][key] + ', ';\n                            }\n                        }\n                        arg = arg.slice(0, -2); // Remove trailing comma and space\n                    } else {\n                        arg = arguments[i];\n                    }\n                    args.push(arg);\n                }\n                warn(\n                    msg +\n                        '\\nArguments: ' +\n                        Array.prototype.slice.call(args).join('') +\n                        '\\n' +\n                        new Error().stack\n                );\n                firstTime = false;\n            }\n            return fn.apply(this, arguments);\n        }, fn);\n    }\n\n    var deprecations = {};\n\n    function deprecateSimple(name, msg) {\n        if (hooks.deprecationHandler != null) {\n            hooks.deprecationHandler(name, msg);\n        }\n        if (!deprecations[name]) {\n            warn(msg);\n            deprecations[name] = true;\n        }\n    }\n\n    hooks.suppressDeprecationWarnings = false;\n    hooks.deprecationHandler = null;\n\n    function isFunction(input) {\n        return (\n            (typeof Function !== 'undefined' && input instanceof Function) ||\n            Object.prototype.toString.call(input) === '[object Function]'\n        );\n    }\n\n    function set(config) {\n        var prop, i;\n        for (i in config) {\n            if (hasOwnProp(config, i)) {\n                prop = config[i];\n                if (isFunction(prop)) {\n                    this[i] = prop;\n                } else {\n                    this['_' + i] = prop;\n                }\n            }\n        }\n        this._config = config;\n        // Lenient ordinal parsing accepts just a number in addition to\n        // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n        // TODO: Remove \"ordinalParse\" fallback in next major release.\n        this._dayOfMonthOrdinalParseLenient = new RegExp(\n            (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n                '|' +\n                /\\d{1,2}/.source\n        );\n    }\n\n    function mergeConfigs(parentConfig, childConfig) {\n        var res = extend({}, parentConfig),\n            prop;\n        for (prop in childConfig) {\n            if (hasOwnProp(childConfig, prop)) {\n                if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n                    res[prop] = {};\n                    extend(res[prop], parentConfig[prop]);\n                    extend(res[prop], childConfig[prop]);\n                } else if (childConfig[prop] != null) {\n                    res[prop] = childConfig[prop];\n                } else {\n                    delete res[prop];\n                }\n            }\n        }\n        for (prop in parentConfig) {\n            if (\n                hasOwnProp(parentConfig, prop) &&\n                !hasOwnProp(childConfig, prop) &&\n                isObject(parentConfig[prop])\n            ) {\n                // make sure changes to properties don't modify parent config\n                res[prop] = extend({}, res[prop]);\n            }\n        }\n        return res;\n    }\n\n    function Locale(config) {\n        if (config != null) {\n            this.set(config);\n        }\n    }\n\n    var keys;\n\n    if (Object.keys) {\n        keys = Object.keys;\n    } else {\n        keys = function (obj) {\n            var i,\n                res = [];\n            for (i in obj) {\n                if (hasOwnProp(obj, i)) {\n                    res.push(i);\n                }\n            }\n            return res;\n        };\n    }\n\n    var defaultCalendar = {\n        sameDay: '[Today at] LT',\n        nextDay: '[Tomorrow at] LT',\n        nextWeek: 'dddd [at] LT',\n        lastDay: '[Yesterday at] LT',\n        lastWeek: '[Last] dddd [at] LT',\n        sameElse: 'L',\n    };\n\n    function calendar(key, mom, now) {\n        var output = this._calendar[key] || this._calendar['sameElse'];\n        return isFunction(output) ? output.call(mom, now) : output;\n    }\n\n    function zeroFill(number, targetLength, forceSign) {\n        var absNumber = '' + Math.abs(number),\n            zerosToFill = targetLength - absNumber.length,\n            sign = number >= 0;\n        return (\n            (sign ? (forceSign ? '+' : '') : '-') +\n            Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +\n            absNumber\n        );\n    }\n\n    var formattingTokens =\n            /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,\n        localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,\n        formatFunctions = {},\n        formatTokenFunctions = {};\n\n    // token:    'M'\n    // padded:   ['MM', 2]\n    // ordinal:  'Mo'\n    // callback: function () { this.month() + 1 }\n    function addFormatToken(token, padded, ordinal, callback) {\n        var func = callback;\n        if (typeof callback === 'string') {\n            func = function () {\n                return this[callback]();\n            };\n        }\n        if (token) {\n            formatTokenFunctions[token] = func;\n        }\n        if (padded) {\n            formatTokenFunctions[padded[0]] = function () {\n                return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n            };\n        }\n        if (ordinal) {\n            formatTokenFunctions[ordinal] = function () {\n                return this.localeData().ordinal(\n                    func.apply(this, arguments),\n                    token\n                );\n            };\n        }\n    }\n\n    function removeFormattingTokens(input) {\n        if (input.match(/\\[[\\s\\S]/)) {\n            return input.replace(/^\\[|\\]$/g, '');\n        }\n        return input.replace(/\\\\/g, '');\n    }\n\n    function makeFormatFunction(format) {\n        var array = format.match(formattingTokens),\n            i,\n            length;\n\n        for (i = 0, length = array.length; i < length; i++) {\n            if (formatTokenFunctions[array[i]]) {\n                array[i] = formatTokenFunctions[array[i]];\n            } else {\n                array[i] = removeFormattingTokens(array[i]);\n            }\n        }\n\n        return function (mom) {\n            var output = '',\n                i;\n            for (i = 0; i < length; i++) {\n                output += isFunction(array[i])\n                    ? array[i].call(mom, format)\n                    : array[i];\n            }\n            return output;\n        };\n    }\n\n    // format date using native date object\n    function formatMoment(m, format) {\n        if (!m.isValid()) {\n            return m.localeData().invalidDate();\n        }\n\n        format = expandFormat(format, m.localeData());\n        formatFunctions[format] =\n            formatFunctions[format] || makeFormatFunction(format);\n\n        return formatFunctions[format](m);\n    }\n\n    function expandFormat(format, locale) {\n        var i = 5;\n\n        function replaceLongDateFormatTokens(input) {\n            return locale.longDateFormat(input) || input;\n        }\n\n        localFormattingTokens.lastIndex = 0;\n        while (i >= 0 && localFormattingTokens.test(format)) {\n            format = format.replace(\n                localFormattingTokens,\n                replaceLongDateFormatTokens\n            );\n            localFormattingTokens.lastIndex = 0;\n            i -= 1;\n        }\n\n        return format;\n    }\n\n    var defaultLongDateFormat = {\n        LTS: 'h:mm:ss A',\n        LT: 'h:mm A',\n        L: 'MM/DD/YYYY',\n        LL: 'MMMM D, YYYY',\n        LLL: 'MMMM D, YYYY h:mm A',\n        LLLL: 'dddd, MMMM D, YYYY h:mm A',\n    };\n\n    function longDateFormat(key) {\n        var format = this._longDateFormat[key],\n            formatUpper = this._longDateFormat[key.toUpperCase()];\n\n        if (format || !formatUpper) {\n            return format;\n        }\n\n        this._longDateFormat[key] = formatUpper\n            .match(formattingTokens)\n            .map(function (tok) {\n                if (\n                    tok === 'MMMM' ||\n                    tok === 'MM' ||\n                    tok === 'DD' ||\n                    tok === 'dddd'\n                ) {\n                    return tok.slice(1);\n                }\n                return tok;\n            })\n            .join('');\n\n        return this._longDateFormat[key];\n    }\n\n    var defaultInvalidDate = 'Invalid date';\n\n    function invalidDate() {\n        return this._invalidDate;\n    }\n\n    var defaultOrdinal = '%d',\n        defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n    function ordinal(number) {\n        return this._ordinal.replace('%d', number);\n    }\n\n    var defaultRelativeTime = {\n        future: 'in %s',\n        past: '%s ago',\n        s: 'a few seconds',\n        ss: '%d seconds',\n        m: 'a minute',\n        mm: '%d minutes',\n        h: 'an hour',\n        hh: '%d hours',\n        d: 'a day',\n        dd: '%d days',\n        w: 'a week',\n        ww: '%d weeks',\n        M: 'a month',\n        MM: '%d months',\n        y: 'a year',\n        yy: '%d years',\n    };\n\n    function relativeTime(number, withoutSuffix, string, isFuture) {\n        var output = this._relativeTime[string];\n        return isFunction(output)\n            ? output(number, withoutSuffix, string, isFuture)\n            : output.replace(/%d/i, number);\n    }\n\n    function pastFuture(diff, output) {\n        var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n        return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n    }\n\n    var aliases = {};\n\n    function addUnitAlias(unit, shorthand) {\n        var lowerCase = unit.toLowerCase();\n        aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n    }\n\n    function normalizeUnits(units) {\n        return typeof units === 'string'\n            ? aliases[units] || aliases[units.toLowerCase()]\n            : undefined;\n    }\n\n    function normalizeObjectUnits(inputObject) {\n        var normalizedInput = {},\n            normalizedProp,\n            prop;\n\n        for (prop in inputObject) {\n            if (hasOwnProp(inputObject, prop)) {\n                normalizedProp = normalizeUnits(prop);\n                if (normalizedProp) {\n                    normalizedInput[normalizedProp] = inputObject[prop];\n                }\n            }\n        }\n\n        return normalizedInput;\n    }\n\n    var priorities = {};\n\n    function addUnitPriority(unit, priority) {\n        priorities[unit] = priority;\n    }\n\n    function getPrioritizedUnits(unitsObj) {\n        var units = [],\n            u;\n        for (u in unitsObj) {\n            if (hasOwnProp(unitsObj, u)) {\n                units.push({ unit: u, priority: priorities[u] });\n            }\n        }\n        units.sort(function (a, b) {\n            return a.priority - b.priority;\n        });\n        return units;\n    }\n\n    function isLeapYear(year) {\n        return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n    }\n\n    function absFloor(number) {\n        if (number < 0) {\n            // -0 -> 0\n            return Math.ceil(number) || 0;\n        } else {\n            return Math.floor(number);\n        }\n    }\n\n    function toInt(argumentForCoercion) {\n        var coercedNumber = +argumentForCoercion,\n            value = 0;\n\n        if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n            value = absFloor(coercedNumber);\n        }\n\n        return value;\n    }\n\n    function makeGetSet(unit, keepTime) {\n        return function (value) {\n            if (value != null) {\n                set$1(this, unit, value);\n                hooks.updateOffset(this, keepTime);\n                return this;\n            } else {\n                return get(this, unit);\n            }\n        };\n    }\n\n    function get(mom, unit) {\n        return mom.isValid()\n            ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]()\n            : NaN;\n    }\n\n    function set$1(mom, unit, value) {\n        if (mom.isValid() && !isNaN(value)) {\n            if (\n                unit === 'FullYear' &&\n                isLeapYear(mom.year()) &&\n                mom.month() === 1 &&\n                mom.date() === 29\n            ) {\n                value = toInt(value);\n                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](\n                    value,\n                    mom.month(),\n                    daysInMonth(value, mom.month())\n                );\n            } else {\n                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function stringGet(units) {\n        units = normalizeUnits(units);\n        if (isFunction(this[units])) {\n            return this[units]();\n        }\n        return this;\n    }\n\n    function stringSet(units, value) {\n        if (typeof units === 'object') {\n            units = normalizeObjectUnits(units);\n            var prioritized = getPrioritizedUnits(units),\n                i,\n                prioritizedLen = prioritized.length;\n            for (i = 0; i < prioritizedLen; i++) {\n                this[prioritized[i].unit](units[prioritized[i].unit]);\n            }\n        } else {\n            units = normalizeUnits(units);\n            if (isFunction(this[units])) {\n                return this[units](value);\n            }\n        }\n        return this;\n    }\n\n    var match1 = /\\d/, //       0 - 9\n        match2 = /\\d\\d/, //      00 - 99\n        match3 = /\\d{3}/, //     000 - 999\n        match4 = /\\d{4}/, //    0000 - 9999\n        match6 = /[+-]?\\d{6}/, // -999999 - 999999\n        match1to2 = /\\d\\d?/, //       0 - 99\n        match3to4 = /\\d\\d\\d\\d?/, //     999 - 9999\n        match5to6 = /\\d\\d\\d\\d\\d\\d?/, //   99999 - 999999\n        match1to3 = /\\d{1,3}/, //       0 - 999\n        match1to4 = /\\d{1,4}/, //       0 - 9999\n        match1to6 = /[+-]?\\d{1,6}/, // -999999 - 999999\n        matchUnsigned = /\\d+/, //       0 - inf\n        matchSigned = /[+-]?\\d+/, //    -inf - inf\n        matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi, // +00:00 -00:00 +0000 -0000 or Z\n        matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n        matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/, // 123456789 123456789.123\n        // any word (or two) characters or numbers including two/three word month in arabic.\n        // includes scottish gaelic two word and hyphenated months\n        matchWord =\n            /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,\n        regexes;\n\n    regexes = {};\n\n    function addRegexToken(token, regex, strictRegex) {\n        regexes[token] = isFunction(regex)\n            ? regex\n            : function (isStrict, localeData) {\n                  return isStrict && strictRegex ? strictRegex : regex;\n              };\n    }\n\n    function getParseRegexForToken(token, config) {\n        if (!hasOwnProp(regexes, token)) {\n            return new RegExp(unescapeFormat(token));\n        }\n\n        return regexes[token](config._strict, config._locale);\n    }\n\n    // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n    function unescapeFormat(s) {\n        return regexEscape(\n            s\n                .replace('\\\\', '')\n                .replace(\n                    /\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,\n                    function (matched, p1, p2, p3, p4) {\n                        return p1 || p2 || p3 || p4;\n                    }\n                )\n        );\n    }\n\n    function regexEscape(s) {\n        return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n    }\n\n    var tokens = {};\n\n    function addParseToken(token, callback) {\n        var i,\n            func = callback,\n            tokenLen;\n        if (typeof token === 'string') {\n            token = [token];\n        }\n        if (isNumber(callback)) {\n            func = function (input, array) {\n                array[callback] = toInt(input);\n            };\n        }\n        tokenLen = token.length;\n        for (i = 0; i < tokenLen; i++) {\n            tokens[token[i]] = func;\n        }\n    }\n\n    function addWeekParseToken(token, callback) {\n        addParseToken(token, function (input, array, config, token) {\n            config._w = config._w || {};\n            callback(input, config._w, config, token);\n        });\n    }\n\n    function addTimeToArrayFromToken(token, input, config) {\n        if (input != null && hasOwnProp(tokens, token)) {\n            tokens[token](input, config._a, config, token);\n        }\n    }\n\n    var YEAR = 0,\n        MONTH = 1,\n        DATE = 2,\n        HOUR = 3,\n        MINUTE = 4,\n        SECOND = 5,\n        MILLISECOND = 6,\n        WEEK = 7,\n        WEEKDAY = 8;\n\n    function mod(n, x) {\n        return ((n % x) + x) % x;\n    }\n\n    var indexOf;\n\n    if (Array.prototype.indexOf) {\n        indexOf = Array.prototype.indexOf;\n    } else {\n        indexOf = function (o) {\n            // I know\n            var i;\n            for (i = 0; i < this.length; ++i) {\n                if (this[i] === o) {\n                    return i;\n                }\n            }\n            return -1;\n        };\n    }\n\n    function daysInMonth(year, month) {\n        if (isNaN(year) || isNaN(month)) {\n            return NaN;\n        }\n        var modMonth = mod(month, 12);\n        year += (month - modMonth) / 12;\n        return modMonth === 1\n            ? isLeapYear(year)\n                ? 29\n                : 28\n            : 31 - ((modMonth % 7) % 2);\n    }\n\n    // FORMATTING\n\n    addFormatToken('M', ['MM', 2], 'Mo', function () {\n        return this.month() + 1;\n    });\n\n    addFormatToken('MMM', 0, 0, function (format) {\n        return this.localeData().monthsShort(this, format);\n    });\n\n    addFormatToken('MMMM', 0, 0, function (format) {\n        return this.localeData().months(this, format);\n    });\n\n    // ALIASES\n\n    addUnitAlias('month', 'M');\n\n    // PRIORITY\n\n    addUnitPriority('month', 8);\n\n    // PARSING\n\n    addRegexToken('M', match1to2);\n    addRegexToken('MM', match1to2, match2);\n    addRegexToken('MMM', function (isStrict, locale) {\n        return locale.monthsShortRegex(isStrict);\n    });\n    addRegexToken('MMMM', function (isStrict, locale) {\n        return locale.monthsRegex(isStrict);\n    });\n\n    addParseToken(['M', 'MM'], function (input, array) {\n        array[MONTH] = toInt(input) - 1;\n    });\n\n    addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n        var month = config._locale.monthsParse(input, token, config._strict);\n        // if we didn't find a month name, mark the date as invalid.\n        if (month != null) {\n            array[MONTH] = month;\n        } else {\n            getParsingFlags(config).invalidMonth = input;\n        }\n    });\n\n    // LOCALES\n\n    var defaultLocaleMonths =\n            'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n                '_'\n            ),\n        defaultLocaleMonthsShort =\n            'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,\n        defaultMonthsShortRegex = matchWord,\n        defaultMonthsRegex = matchWord;\n\n    function localeMonths(m, format) {\n        if (!m) {\n            return isArray(this._months)\n                ? this._months\n                : this._months['standalone'];\n        }\n        return isArray(this._months)\n            ? this._months[m.month()]\n            : this._months[\n                  (this._months.isFormat || MONTHS_IN_FORMAT).test(format)\n                      ? 'format'\n                      : 'standalone'\n              ][m.month()];\n    }\n\n    function localeMonthsShort(m, format) {\n        if (!m) {\n            return isArray(this._monthsShort)\n                ? this._monthsShort\n                : this._monthsShort['standalone'];\n        }\n        return isArray(this._monthsShort)\n            ? this._monthsShort[m.month()]\n            : this._monthsShort[\n                  MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'\n              ][m.month()];\n    }\n\n    function handleStrictParse(monthName, format, strict) {\n        var i,\n            ii,\n            mom,\n            llc = monthName.toLocaleLowerCase();\n        if (!this._monthsParse) {\n            // this is not used\n            this._monthsParse = [];\n            this._longMonthsParse = [];\n            this._shortMonthsParse = [];\n            for (i = 0; i < 12; ++i) {\n                mom = createUTC([2000, i]);\n                this._shortMonthsParse[i] = this.monthsShort(\n                    mom,\n                    ''\n                ).toLocaleLowerCase();\n                this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n            }\n        }\n\n        if (strict) {\n            if (format === 'MMM') {\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._longMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        } else {\n            if (format === 'MMM') {\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._longMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._longMonthsParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        }\n    }\n\n    function localeMonthsParse(monthName, format, strict) {\n        var i, mom, regex;\n\n        if (this._monthsParseExact) {\n            return handleStrictParse.call(this, monthName, format, strict);\n        }\n\n        if (!this._monthsParse) {\n            this._monthsParse = [];\n            this._longMonthsParse = [];\n            this._shortMonthsParse = [];\n        }\n\n        // TODO: add sorting\n        // Sorting makes sure if one month (or abbr) is a prefix of another\n        // see sorting in computeMonthsParse\n        for (i = 0; i < 12; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, i]);\n            if (strict && !this._longMonthsParse[i]) {\n                this._longMonthsParse[i] = new RegExp(\n                    '^' + this.months(mom, '').replace('.', '') + '$',\n                    'i'\n                );\n                this._shortMonthsParse[i] = new RegExp(\n                    '^' + this.monthsShort(mom, '').replace('.', '') + '$',\n                    'i'\n                );\n            }\n            if (!strict && !this._monthsParse[i]) {\n                regex =\n                    '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n                this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n            }\n            // test the regex\n            if (\n                strict &&\n                format === 'MMMM' &&\n                this._longMonthsParse[i].test(monthName)\n            ) {\n                return i;\n            } else if (\n                strict &&\n                format === 'MMM' &&\n                this._shortMonthsParse[i].test(monthName)\n            ) {\n                return i;\n            } else if (!strict && this._monthsParse[i].test(monthName)) {\n                return i;\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function setMonth(mom, value) {\n        var dayOfMonth;\n\n        if (!mom.isValid()) {\n            // No op\n            return mom;\n        }\n\n        if (typeof value === 'string') {\n            if (/^\\d+$/.test(value)) {\n                value = toInt(value);\n            } else {\n                value = mom.localeData().monthsParse(value);\n                // TODO: Another silent failure?\n                if (!isNumber(value)) {\n                    return mom;\n                }\n            }\n        }\n\n        dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n        mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\n        return mom;\n    }\n\n    function getSetMonth(value) {\n        if (value != null) {\n            setMonth(this, value);\n            hooks.updateOffset(this, true);\n            return this;\n        } else {\n            return get(this, 'Month');\n        }\n    }\n\n    function getDaysInMonth() {\n        return daysInMonth(this.year(), this.month());\n    }\n\n    function monthsShortRegex(isStrict) {\n        if (this._monthsParseExact) {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                computeMonthsParse.call(this);\n            }\n            if (isStrict) {\n                return this._monthsShortStrictRegex;\n            } else {\n                return this._monthsShortRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_monthsShortRegex')) {\n                this._monthsShortRegex = defaultMonthsShortRegex;\n            }\n            return this._monthsShortStrictRegex && isStrict\n                ? this._monthsShortStrictRegex\n                : this._monthsShortRegex;\n        }\n    }\n\n    function monthsRegex(isStrict) {\n        if (this._monthsParseExact) {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                computeMonthsParse.call(this);\n            }\n            if (isStrict) {\n                return this._monthsStrictRegex;\n            } else {\n                return this._monthsRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                this._monthsRegex = defaultMonthsRegex;\n            }\n            return this._monthsStrictRegex && isStrict\n                ? this._monthsStrictRegex\n                : this._monthsRegex;\n        }\n    }\n\n    function computeMonthsParse() {\n        function cmpLenRev(a, b) {\n            return b.length - a.length;\n        }\n\n        var shortPieces = [],\n            longPieces = [],\n            mixedPieces = [],\n            i,\n            mom;\n        for (i = 0; i < 12; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, i]);\n            shortPieces.push(this.monthsShort(mom, ''));\n            longPieces.push(this.months(mom, ''));\n            mixedPieces.push(this.months(mom, ''));\n            mixedPieces.push(this.monthsShort(mom, ''));\n        }\n        // Sorting makes sure if one month (or abbr) is a prefix of another it\n        // will match the longer piece.\n        shortPieces.sort(cmpLenRev);\n        longPieces.sort(cmpLenRev);\n        mixedPieces.sort(cmpLenRev);\n        for (i = 0; i < 12; i++) {\n            shortPieces[i] = regexEscape(shortPieces[i]);\n            longPieces[i] = regexEscape(longPieces[i]);\n        }\n        for (i = 0; i < 24; i++) {\n            mixedPieces[i] = regexEscape(mixedPieces[i]);\n        }\n\n        this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._monthsShortRegex = this._monthsRegex;\n        this._monthsStrictRegex = new RegExp(\n            '^(' + longPieces.join('|') + ')',\n            'i'\n        );\n        this._monthsShortStrictRegex = new RegExp(\n            '^(' + shortPieces.join('|') + ')',\n            'i'\n        );\n    }\n\n    // FORMATTING\n\n    addFormatToken('Y', 0, 0, function () {\n        var y = this.year();\n        return y <= 9999 ? zeroFill(y, 4) : '+' + y;\n    });\n\n    addFormatToken(0, ['YY', 2], 0, function () {\n        return this.year() % 100;\n    });\n\n    addFormatToken(0, ['YYYY', 4], 0, 'year');\n    addFormatToken(0, ['YYYYY', 5], 0, 'year');\n    addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n    // ALIASES\n\n    addUnitAlias('year', 'y');\n\n    // PRIORITIES\n\n    addUnitPriority('year', 1);\n\n    // PARSING\n\n    addRegexToken('Y', matchSigned);\n    addRegexToken('YY', match1to2, match2);\n    addRegexToken('YYYY', match1to4, match4);\n    addRegexToken('YYYYY', match1to6, match6);\n    addRegexToken('YYYYYY', match1to6, match6);\n\n    addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n    addParseToken('YYYY', function (input, array) {\n        array[YEAR] =\n            input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n    });\n    addParseToken('YY', function (input, array) {\n        array[YEAR] = hooks.parseTwoDigitYear(input);\n    });\n    addParseToken('Y', function (input, array) {\n        array[YEAR] = parseInt(input, 10);\n    });\n\n    // HELPERS\n\n    function daysInYear(year) {\n        return isLeapYear(year) ? 366 : 365;\n    }\n\n    // HOOKS\n\n    hooks.parseTwoDigitYear = function (input) {\n        return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n    };\n\n    // MOMENTS\n\n    var getSetYear = makeGetSet('FullYear', true);\n\n    function getIsLeapYear() {\n        return isLeapYear(this.year());\n    }\n\n    function createDate(y, m, d, h, M, s, ms) {\n        // can't just apply() to create a date:\n        // https://stackoverflow.com/q/181348\n        var date;\n        // the date constructor remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            date = new Date(y + 400, m, d, h, M, s, ms);\n            if (isFinite(date.getFullYear())) {\n                date.setFullYear(y);\n            }\n        } else {\n            date = new Date(y, m, d, h, M, s, ms);\n        }\n\n        return date;\n    }\n\n    function createUTCDate(y) {\n        var date, args;\n        // the Date.UTC function remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            args = Array.prototype.slice.call(arguments);\n            // preserve leap years using a full 400 year cycle, then reset\n            args[0] = y + 400;\n            date = new Date(Date.UTC.apply(null, args));\n            if (isFinite(date.getUTCFullYear())) {\n                date.setUTCFullYear(y);\n            }\n        } else {\n            date = new Date(Date.UTC.apply(null, arguments));\n        }\n\n        return date;\n    }\n\n    // start-of-first-week - start-of-year\n    function firstWeekOffset(year, dow, doy) {\n        var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n            fwd = 7 + dow - doy,\n            // first-week day local weekday -- which local weekday is fwd\n            fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n        return -fwdlw + fwd - 1;\n    }\n\n    // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n    function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n        var localWeekday = (7 + weekday - dow) % 7,\n            weekOffset = firstWeekOffset(year, dow, doy),\n            dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n            resYear,\n            resDayOfYear;\n\n        if (dayOfYear <= 0) {\n            resYear = year - 1;\n            resDayOfYear = daysInYear(resYear) + dayOfYear;\n        } else if (dayOfYear > daysInYear(year)) {\n            resYear = year + 1;\n            resDayOfYear = dayOfYear - daysInYear(year);\n        } else {\n            resYear = year;\n            resDayOfYear = dayOfYear;\n        }\n\n        return {\n            year: resYear,\n            dayOfYear: resDayOfYear,\n        };\n    }\n\n    function weekOfYear(mom, dow, doy) {\n        var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n            week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n            resWeek,\n            resYear;\n\n        if (week < 1) {\n            resYear = mom.year() - 1;\n            resWeek = week + weeksInYear(resYear, dow, doy);\n        } else if (week > weeksInYear(mom.year(), dow, doy)) {\n            resWeek = week - weeksInYear(mom.year(), dow, doy);\n            resYear = mom.year() + 1;\n        } else {\n            resYear = mom.year();\n            resWeek = week;\n        }\n\n        return {\n            week: resWeek,\n            year: resYear,\n        };\n    }\n\n    function weeksInYear(year, dow, doy) {\n        var weekOffset = firstWeekOffset(year, dow, doy),\n            weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n        return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n    }\n\n    // FORMATTING\n\n    addFormatToken('w', ['ww', 2], 'wo', 'week');\n    addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n    // ALIASES\n\n    addUnitAlias('week', 'w');\n    addUnitAlias('isoWeek', 'W');\n\n    // PRIORITIES\n\n    addUnitPriority('week', 5);\n    addUnitPriority('isoWeek', 5);\n\n    // PARSING\n\n    addRegexToken('w', match1to2);\n    addRegexToken('ww', match1to2, match2);\n    addRegexToken('W', match1to2);\n    addRegexToken('WW', match1to2, match2);\n\n    addWeekParseToken(\n        ['w', 'ww', 'W', 'WW'],\n        function (input, week, config, token) {\n            week[token.substr(0, 1)] = toInt(input);\n        }\n    );\n\n    // HELPERS\n\n    // LOCALES\n\n    function localeWeek(mom) {\n        return weekOfYear(mom, this._week.dow, this._week.doy).week;\n    }\n\n    var defaultLocaleWeek = {\n        dow: 0, // Sunday is the first day of the week.\n        doy: 6, // The week that contains Jan 6th is the first week of the year.\n    };\n\n    function localeFirstDayOfWeek() {\n        return this._week.dow;\n    }\n\n    function localeFirstDayOfYear() {\n        return this._week.doy;\n    }\n\n    // MOMENTS\n\n    function getSetWeek(input) {\n        var week = this.localeData().week(this);\n        return input == null ? week : this.add((input - week) * 7, 'd');\n    }\n\n    function getSetISOWeek(input) {\n        var week = weekOfYear(this, 1, 4).week;\n        return input == null ? week : this.add((input - week) * 7, 'd');\n    }\n\n    // FORMATTING\n\n    addFormatToken('d', 0, 'do', 'day');\n\n    addFormatToken('dd', 0, 0, function (format) {\n        return this.localeData().weekdaysMin(this, format);\n    });\n\n    addFormatToken('ddd', 0, 0, function (format) {\n        return this.localeData().weekdaysShort(this, format);\n    });\n\n    addFormatToken('dddd', 0, 0, function (format) {\n        return this.localeData().weekdays(this, format);\n    });\n\n    addFormatToken('e', 0, 0, 'weekday');\n    addFormatToken('E', 0, 0, 'isoWeekday');\n\n    // ALIASES\n\n    addUnitAlias('day', 'd');\n    addUnitAlias('weekday', 'e');\n    addUnitAlias('isoWeekday', 'E');\n\n    // PRIORITY\n    addUnitPriority('day', 11);\n    addUnitPriority('weekday', 11);\n    addUnitPriority('isoWeekday', 11);\n\n    // PARSING\n\n    addRegexToken('d', match1to2);\n    addRegexToken('e', match1to2);\n    addRegexToken('E', match1to2);\n    addRegexToken('dd', function (isStrict, locale) {\n        return locale.weekdaysMinRegex(isStrict);\n    });\n    addRegexToken('ddd', function (isStrict, locale) {\n        return locale.weekdaysShortRegex(isStrict);\n    });\n    addRegexToken('dddd', function (isStrict, locale) {\n        return locale.weekdaysRegex(isStrict);\n    });\n\n    addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n        var weekday = config._locale.weekdaysParse(input, token, config._strict);\n        // if we didn't get a weekday name, mark the date as invalid\n        if (weekday != null) {\n            week.d = weekday;\n        } else {\n            getParsingFlags(config).invalidWeekday = input;\n        }\n    });\n\n    addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n        week[token] = toInt(input);\n    });\n\n    // HELPERS\n\n    function parseWeekday(input, locale) {\n        if (typeof input !== 'string') {\n            return input;\n        }\n\n        if (!isNaN(input)) {\n            return parseInt(input, 10);\n        }\n\n        input = locale.weekdaysParse(input);\n        if (typeof input === 'number') {\n            return input;\n        }\n\n        return null;\n    }\n\n    function parseIsoWeekday(input, locale) {\n        if (typeof input === 'string') {\n            return locale.weekdaysParse(input) % 7 || 7;\n        }\n        return isNaN(input) ? null : input;\n    }\n\n    // LOCALES\n    function shiftWeekdays(ws, n) {\n        return ws.slice(n, 7).concat(ws.slice(0, n));\n    }\n\n    var defaultLocaleWeekdays =\n            'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n        defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        defaultWeekdaysRegex = matchWord,\n        defaultWeekdaysShortRegex = matchWord,\n        defaultWeekdaysMinRegex = matchWord;\n\n    function localeWeekdays(m, format) {\n        var weekdays = isArray(this._weekdays)\n            ? this._weekdays\n            : this._weekdays[\n                  m && m !== true && this._weekdays.isFormat.test(format)\n                      ? 'format'\n                      : 'standalone'\n              ];\n        return m === true\n            ? shiftWeekdays(weekdays, this._week.dow)\n            : m\n            ? weekdays[m.day()]\n            : weekdays;\n    }\n\n    function localeWeekdaysShort(m) {\n        return m === true\n            ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n            : m\n            ? this._weekdaysShort[m.day()]\n            : this._weekdaysShort;\n    }\n\n    function localeWeekdaysMin(m) {\n        return m === true\n            ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n            : m\n            ? this._weekdaysMin[m.day()]\n            : this._weekdaysMin;\n    }\n\n    function handleStrictParse$1(weekdayName, format, strict) {\n        var i,\n            ii,\n            mom,\n            llc = weekdayName.toLocaleLowerCase();\n        if (!this._weekdaysParse) {\n            this._weekdaysParse = [];\n            this._shortWeekdaysParse = [];\n            this._minWeekdaysParse = [];\n\n            for (i = 0; i < 7; ++i) {\n                mom = createUTC([2000, 1]).day(i);\n                this._minWeekdaysParse[i] = this.weekdaysMin(\n                    mom,\n                    ''\n                ).toLocaleLowerCase();\n                this._shortWeekdaysParse[i] = this.weekdaysShort(\n                    mom,\n                    ''\n                ).toLocaleLowerCase();\n                this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n            }\n        }\n\n        if (strict) {\n            if (format === 'dddd') {\n                ii = indexOf.call(this._weekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else if (format === 'ddd') {\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        } else {\n            if (format === 'dddd') {\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else if (format === 'ddd') {\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        }\n    }\n\n    function localeWeekdaysParse(weekdayName, format, strict) {\n        var i, mom, regex;\n\n        if (this._weekdaysParseExact) {\n            return handleStrictParse$1.call(this, weekdayName, format, strict);\n        }\n\n        if (!this._weekdaysParse) {\n            this._weekdaysParse = [];\n            this._minWeekdaysParse = [];\n            this._shortWeekdaysParse = [];\n            this._fullWeekdaysParse = [];\n        }\n\n        for (i = 0; i < 7; i++) {\n            // make the regex if we don't have it already\n\n            mom = createUTC([2000, 1]).day(i);\n            if (strict && !this._fullWeekdaysParse[i]) {\n                this._fullWeekdaysParse[i] = new RegExp(\n                    '^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$',\n                    'i'\n                );\n                this._shortWeekdaysParse[i] = new RegExp(\n                    '^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$',\n                    'i'\n                );\n                this._minWeekdaysParse[i] = new RegExp(\n                    '^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$',\n                    'i'\n                );\n            }\n            if (!this._weekdaysParse[i]) {\n                regex =\n                    '^' +\n                    this.weekdays(mom, '') +\n                    '|^' +\n                    this.weekdaysShort(mom, '') +\n                    '|^' +\n                    this.weekdaysMin(mom, '');\n                this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n            }\n            // test the regex\n            if (\n                strict &&\n                format === 'dddd' &&\n                this._fullWeekdaysParse[i].test(weekdayName)\n            ) {\n                return i;\n            } else if (\n                strict &&\n                format === 'ddd' &&\n                this._shortWeekdaysParse[i].test(weekdayName)\n            ) {\n                return i;\n            } else if (\n                strict &&\n                format === 'dd' &&\n                this._minWeekdaysParse[i].test(weekdayName)\n            ) {\n                return i;\n            } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n                return i;\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function getSetDayOfWeek(input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\n        if (input != null) {\n            input = parseWeekday(input, this.localeData());\n            return this.add(input - day, 'd');\n        } else {\n            return day;\n        }\n    }\n\n    function getSetLocaleDayOfWeek(input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n        return input == null ? weekday : this.add(input - weekday, 'd');\n    }\n\n    function getSetISODayOfWeek(input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n\n        // behaves the same as moment#day except\n        // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n        // as a setter, sunday should belong to the previous week.\n\n        if (input != null) {\n            var weekday = parseIsoWeekday(input, this.localeData());\n            return this.day(this.day() % 7 ? weekday : weekday - 7);\n        } else {\n            return this.day() || 7;\n        }\n    }\n\n    function weekdaysRegex(isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysStrictRegex;\n            } else {\n                return this._weekdaysRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                this._weekdaysRegex = defaultWeekdaysRegex;\n            }\n            return this._weekdaysStrictRegex && isStrict\n                ? this._weekdaysStrictRegex\n                : this._weekdaysRegex;\n        }\n    }\n\n    function weekdaysShortRegex(isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysShortStrictRegex;\n            } else {\n                return this._weekdaysShortRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n                this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n            }\n            return this._weekdaysShortStrictRegex && isStrict\n                ? this._weekdaysShortStrictRegex\n                : this._weekdaysShortRegex;\n        }\n    }\n\n    function weekdaysMinRegex(isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysMinStrictRegex;\n            } else {\n                return this._weekdaysMinRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n                this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n            }\n            return this._weekdaysMinStrictRegex && isStrict\n                ? this._weekdaysMinStrictRegex\n                : this._weekdaysMinRegex;\n        }\n    }\n\n    function computeWeekdaysParse() {\n        function cmpLenRev(a, b) {\n            return b.length - a.length;\n        }\n\n        var minPieces = [],\n            shortPieces = [],\n            longPieces = [],\n            mixedPieces = [],\n            i,\n            mom,\n            minp,\n            shortp,\n            longp;\n        for (i = 0; i < 7; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, 1]).day(i);\n            minp = regexEscape(this.weekdaysMin(mom, ''));\n            shortp = regexEscape(this.weekdaysShort(mom, ''));\n            longp = regexEscape(this.weekdays(mom, ''));\n            minPieces.push(minp);\n            shortPieces.push(shortp);\n            longPieces.push(longp);\n            mixedPieces.push(minp);\n            mixedPieces.push(shortp);\n            mixedPieces.push(longp);\n        }\n        // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n        // will match the longer piece.\n        minPieces.sort(cmpLenRev);\n        shortPieces.sort(cmpLenRev);\n        longPieces.sort(cmpLenRev);\n        mixedPieces.sort(cmpLenRev);\n\n        this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._weekdaysShortRegex = this._weekdaysRegex;\n        this._weekdaysMinRegex = this._weekdaysRegex;\n\n        this._weekdaysStrictRegex = new RegExp(\n            '^(' + longPieces.join('|') + ')',\n            'i'\n        );\n        this._weekdaysShortStrictRegex = new RegExp(\n            '^(' + shortPieces.join('|') + ')',\n            'i'\n        );\n        this._weekdaysMinStrictRegex = new RegExp(\n            '^(' + minPieces.join('|') + ')',\n            'i'\n        );\n    }\n\n    // FORMATTING\n\n    function hFormat() {\n        return this.hours() % 12 || 12;\n    }\n\n    function kFormat() {\n        return this.hours() || 24;\n    }\n\n    addFormatToken('H', ['HH', 2], 0, 'hour');\n    addFormatToken('h', ['hh', 2], 0, hFormat);\n    addFormatToken('k', ['kk', 2], 0, kFormat);\n\n    addFormatToken('hmm', 0, 0, function () {\n        return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n    });\n\n    addFormatToken('hmmss', 0, 0, function () {\n        return (\n            '' +\n            hFormat.apply(this) +\n            zeroFill(this.minutes(), 2) +\n            zeroFill(this.seconds(), 2)\n        );\n    });\n\n    addFormatToken('Hmm', 0, 0, function () {\n        return '' + this.hours() + zeroFill(this.minutes(), 2);\n    });\n\n    addFormatToken('Hmmss', 0, 0, function () {\n        return (\n            '' +\n            this.hours() +\n            zeroFill(this.minutes(), 2) +\n            zeroFill(this.seconds(), 2)\n        );\n    });\n\n    function meridiem(token, lowercase) {\n        addFormatToken(token, 0, 0, function () {\n            return this.localeData().meridiem(\n                this.hours(),\n                this.minutes(),\n                lowercase\n            );\n        });\n    }\n\n    meridiem('a', true);\n    meridiem('A', false);\n\n    // ALIASES\n\n    addUnitAlias('hour', 'h');\n\n    // PRIORITY\n    addUnitPriority('hour', 13);\n\n    // PARSING\n\n    function matchMeridiem(isStrict, locale) {\n        return locale._meridiemParse;\n    }\n\n    addRegexToken('a', matchMeridiem);\n    addRegexToken('A', matchMeridiem);\n    addRegexToken('H', match1to2);\n    addRegexToken('h', match1to2);\n    addRegexToken('k', match1to2);\n    addRegexToken('HH', match1to2, match2);\n    addRegexToken('hh', match1to2, match2);\n    addRegexToken('kk', match1to2, match2);\n\n    addRegexToken('hmm', match3to4);\n    addRegexToken('hmmss', match5to6);\n    addRegexToken('Hmm', match3to4);\n    addRegexToken('Hmmss', match5to6);\n\n    addParseToken(['H', 'HH'], HOUR);\n    addParseToken(['k', 'kk'], function (input, array, config) {\n        var kInput = toInt(input);\n        array[HOUR] = kInput === 24 ? 0 : kInput;\n    });\n    addParseToken(['a', 'A'], function (input, array, config) {\n        config._isPm = config._locale.isPM(input);\n        config._meridiem = input;\n    });\n    addParseToken(['h', 'hh'], function (input, array, config) {\n        array[HOUR] = toInt(input);\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('hmm', function (input, array, config) {\n        var pos = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos));\n        array[MINUTE] = toInt(input.substr(pos));\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('hmmss', function (input, array, config) {\n        var pos1 = input.length - 4,\n            pos2 = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos1));\n        array[MINUTE] = toInt(input.substr(pos1, 2));\n        array[SECOND] = toInt(input.substr(pos2));\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('Hmm', function (input, array, config) {\n        var pos = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos));\n        array[MINUTE] = toInt(input.substr(pos));\n    });\n    addParseToken('Hmmss', function (input, array, config) {\n        var pos1 = input.length - 4,\n            pos2 = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos1));\n        array[MINUTE] = toInt(input.substr(pos1, 2));\n        array[SECOND] = toInt(input.substr(pos2));\n    });\n\n    // LOCALES\n\n    function localeIsPM(input) {\n        // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n        // Using charAt should be more compatible.\n        return (input + '').toLowerCase().charAt(0) === 'p';\n    }\n\n    var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i,\n        // Setting the hour should keep the time, because the user explicitly\n        // specified which hour they want. So trying to maintain the same hour (in\n        // a new timezone) makes sense. Adding/subtracting hours does not follow\n        // this rule.\n        getSetHour = makeGetSet('Hours', true);\n\n    function localeMeridiem(hours, minutes, isLower) {\n        if (hours > 11) {\n            return isLower ? 'pm' : 'PM';\n        } else {\n            return isLower ? 'am' : 'AM';\n        }\n    }\n\n    var baseConfig = {\n        calendar: defaultCalendar,\n        longDateFormat: defaultLongDateFormat,\n        invalidDate: defaultInvalidDate,\n        ordinal: defaultOrdinal,\n        dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n        relativeTime: defaultRelativeTime,\n\n        months: defaultLocaleMonths,\n        monthsShort: defaultLocaleMonthsShort,\n\n        week: defaultLocaleWeek,\n\n        weekdays: defaultLocaleWeekdays,\n        weekdaysMin: defaultLocaleWeekdaysMin,\n        weekdaysShort: defaultLocaleWeekdaysShort,\n\n        meridiemParse: defaultLocaleMeridiemParse,\n    };\n\n    // internal storage for locale config files\n    var locales = {},\n        localeFamilies = {},\n        globalLocale;\n\n    function commonPrefix(arr1, arr2) {\n        var i,\n            minl = Math.min(arr1.length, arr2.length);\n        for (i = 0; i < minl; i += 1) {\n            if (arr1[i] !== arr2[i]) {\n                return i;\n            }\n        }\n        return minl;\n    }\n\n    function normalizeLocale(key) {\n        return key ? key.toLowerCase().replace('_', '-') : key;\n    }\n\n    // pick the locale from the array\n    // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n    // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n    function chooseLocale(names) {\n        var i = 0,\n            j,\n            next,\n            locale,\n            split;\n\n        while (i < names.length) {\n            split = normalizeLocale(names[i]).split('-');\n            j = split.length;\n            next = normalizeLocale(names[i + 1]);\n            next = next ? next.split('-') : null;\n            while (j > 0) {\n                locale = loadLocale(split.slice(0, j).join('-'));\n                if (locale) {\n                    return locale;\n                }\n                if (\n                    next &&\n                    next.length >= j &&\n                    commonPrefix(split, next) >= j - 1\n                ) {\n                    //the next array item is better than a shallower substring of this one\n                    break;\n                }\n                j--;\n            }\n            i++;\n        }\n        return globalLocale;\n    }\n\n    function isLocaleNameSane(name) {\n        // Prevent names that look like filesystem paths, i.e contain '/' or '\\'\n        return name.match('^[^/\\\\\\\\]*$') != null;\n    }\n\n    function loadLocale(name) {\n        var oldLocale = null,\n            aliasedRequire;\n        // TODO: Find a better way to register and load all the locales in Node\n        if (\n            locales[name] === undefined &&\n            typeof module !== 'undefined' &&\n            module &&\n            module.exports &&\n            isLocaleNameSane(name)\n        ) {\n            try {\n                oldLocale = globalLocale._abbr;\n                aliasedRequire = require;\n                aliasedRequire('./locale/' + name);\n                getSetGlobalLocale(oldLocale);\n            } catch (e) {\n                // mark as not found to avoid repeating expensive file require call causing high CPU\n                // when trying to find en-US, en_US, en-us for every format call\n                locales[name] = null; // null means not found\n            }\n        }\n        return locales[name];\n    }\n\n    // This function will load locale and then set the global locale.  If\n    // no arguments are passed in, it will simply return the current global\n    // locale key.\n    function getSetGlobalLocale(key, values) {\n        var data;\n        if (key) {\n            if (isUndefined(values)) {\n                data = getLocale(key);\n            } else {\n                data = defineLocale(key, values);\n            }\n\n            if (data) {\n                // moment.duration._locale = moment._locale = data;\n                globalLocale = data;\n            } else {\n                if (typeof console !== 'undefined' && console.warn) {\n                    //warn user if arguments are passed but the locale could not be set\n                    console.warn(\n                        'Locale ' + key + ' not found. Did you forget to load it?'\n                    );\n                }\n            }\n        }\n\n        return globalLocale._abbr;\n    }\n\n    function defineLocale(name, config) {\n        if (config !== null) {\n            var locale,\n                parentConfig = baseConfig;\n            config.abbr = name;\n            if (locales[name] != null) {\n                deprecateSimple(\n                    'defineLocaleOverride',\n                    'use moment.updateLocale(localeName, config) to change ' +\n                        'an existing locale. moment.defineLocale(localeName, ' +\n                        'config) should only be used for creating a new locale ' +\n                        'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'\n                );\n                parentConfig = locales[name]._config;\n            } else if (config.parentLocale != null) {\n                if (locales[config.parentLocale] != null) {\n                    parentConfig = locales[config.parentLocale]._config;\n                } else {\n                    locale = loadLocale(config.parentLocale);\n                    if (locale != null) {\n                        parentConfig = locale._config;\n                    } else {\n                        if (!localeFamilies[config.parentLocale]) {\n                            localeFamilies[config.parentLocale] = [];\n                        }\n                        localeFamilies[config.parentLocale].push({\n                            name: name,\n                            config: config,\n                        });\n                        return null;\n                    }\n                }\n            }\n            locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n            if (localeFamilies[name]) {\n                localeFamilies[name].forEach(function (x) {\n                    defineLocale(x.name, x.config);\n                });\n            }\n\n            // backwards compat for now: also set the locale\n            // make sure we set the locale AFTER all child locales have been\n            // created, so we won't end up with the child locale set.\n            getSetGlobalLocale(name);\n\n            return locales[name];\n        } else {\n            // useful for testing\n            delete locales[name];\n            return null;\n        }\n    }\n\n    function updateLocale(name, config) {\n        if (config != null) {\n            var locale,\n                tmpLocale,\n                parentConfig = baseConfig;\n\n            if (locales[name] != null && locales[name].parentLocale != null) {\n                // Update existing child locale in-place to avoid memory-leaks\n                locales[name].set(mergeConfigs(locales[name]._config, config));\n            } else {\n                // MERGE\n                tmpLocale = loadLocale(name);\n                if (tmpLocale != null) {\n                    parentConfig = tmpLocale._config;\n                }\n                config = mergeConfigs(parentConfig, config);\n                if (tmpLocale == null) {\n                    // updateLocale is called for creating a new locale\n                    // Set abbr so it will have a name (getters return\n                    // undefined otherwise).\n                    config.abbr = name;\n                }\n                locale = new Locale(config);\n                locale.parentLocale = locales[name];\n                locales[name] = locale;\n            }\n\n            // backwards compat for now: also set the locale\n            getSetGlobalLocale(name);\n        } else {\n            // pass null for config to unupdate, useful for tests\n            if (locales[name] != null) {\n                if (locales[name].parentLocale != null) {\n                    locales[name] = locales[name].parentLocale;\n                    if (name === getSetGlobalLocale()) {\n                        getSetGlobalLocale(name);\n                    }\n                } else if (locales[name] != null) {\n                    delete locales[name];\n                }\n            }\n        }\n        return locales[name];\n    }\n\n    // returns locale data\n    function getLocale(key) {\n        var locale;\n\n        if (key && key._locale && key._locale._abbr) {\n            key = key._locale._abbr;\n        }\n\n        if (!key) {\n            return globalLocale;\n        }\n\n        if (!isArray(key)) {\n            //short-circuit everything else\n            locale = loadLocale(key);\n            if (locale) {\n                return locale;\n            }\n            key = [key];\n        }\n\n        return chooseLocale(key);\n    }\n\n    function listLocales() {\n        return keys(locales);\n    }\n\n    function checkOverflow(m) {\n        var overflow,\n            a = m._a;\n\n        if (a && getParsingFlags(m).overflow === -2) {\n            overflow =\n                a[MONTH] < 0 || a[MONTH] > 11\n                    ? MONTH\n                    : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])\n                    ? DATE\n                    : a[HOUR] < 0 ||\n                      a[HOUR] > 24 ||\n                      (a[HOUR] === 24 &&\n                          (a[MINUTE] !== 0 ||\n                              a[SECOND] !== 0 ||\n                              a[MILLISECOND] !== 0))\n                    ? HOUR\n                    : a[MINUTE] < 0 || a[MINUTE] > 59\n                    ? MINUTE\n                    : a[SECOND] < 0 || a[SECOND] > 59\n                    ? SECOND\n                    : a[MILLISECOND] < 0 || a[MILLISECOND] > 999\n                    ? MILLISECOND\n                    : -1;\n\n            if (\n                getParsingFlags(m)._overflowDayOfYear &&\n                (overflow < YEAR || overflow > DATE)\n            ) {\n                overflow = DATE;\n            }\n            if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n                overflow = WEEK;\n            }\n            if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n                overflow = WEEKDAY;\n            }\n\n            getParsingFlags(m).overflow = overflow;\n        }\n\n        return m;\n    }\n\n    // iso 8601 regex\n    // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n    var extendedIsoRegex =\n            /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n        basicIsoRegex =\n            /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n        tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/,\n        isoDates = [\n            ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n            ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n            ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n            ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n            ['YYYY-DDD', /\\d{4}-\\d{3}/],\n            ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n            ['YYYYYYMMDD', /[+-]\\d{10}/],\n            ['YYYYMMDD', /\\d{8}/],\n            ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n            ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n            ['YYYYDDD', /\\d{7}/],\n            ['YYYYMM', /\\d{6}/, false],\n            ['YYYY', /\\d{4}/, false],\n        ],\n        // iso time formats and regexes\n        isoTimes = [\n            ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n            ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n            ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n            ['HH:mm', /\\d\\d:\\d\\d/],\n            ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n            ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n            ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n            ['HHmm', /\\d\\d\\d\\d/],\n            ['HH', /\\d\\d/],\n        ],\n        aspNetJsonRegex = /^\\/?Date\\((-?\\d+)/i,\n        // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n        rfc2822 =\n            /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,\n        obsOffsets = {\n            UT: 0,\n            GMT: 0,\n            EDT: -4 * 60,\n            EST: -5 * 60,\n            CDT: -5 * 60,\n            CST: -6 * 60,\n            MDT: -6 * 60,\n            MST: -7 * 60,\n            PDT: -7 * 60,\n            PST: -8 * 60,\n        };\n\n    // date from iso format\n    function configFromISO(config) {\n        var i,\n            l,\n            string = config._i,\n            match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n            allowTime,\n            dateFormat,\n            timeFormat,\n            tzFormat,\n            isoDatesLen = isoDates.length,\n            isoTimesLen = isoTimes.length;\n\n        if (match) {\n            getParsingFlags(config).iso = true;\n            for (i = 0, l = isoDatesLen; i < l; i++) {\n                if (isoDates[i][1].exec(match[1])) {\n                    dateFormat = isoDates[i][0];\n                    allowTime = isoDates[i][2] !== false;\n                    break;\n                }\n            }\n            if (dateFormat == null) {\n                config._isValid = false;\n                return;\n            }\n            if (match[3]) {\n                for (i = 0, l = isoTimesLen; i < l; i++) {\n                    if (isoTimes[i][1].exec(match[3])) {\n                        // match[2] should be 'T' or space\n                        timeFormat = (match[2] || ' ') + isoTimes[i][0];\n                        break;\n                    }\n                }\n                if (timeFormat == null) {\n                    config._isValid = false;\n                    return;\n                }\n            }\n            if (!allowTime && timeFormat != null) {\n                config._isValid = false;\n                return;\n            }\n            if (match[4]) {\n                if (tzRegex.exec(match[4])) {\n                    tzFormat = 'Z';\n                } else {\n                    config._isValid = false;\n                    return;\n                }\n            }\n            config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n            configFromStringAndFormat(config);\n        } else {\n            config._isValid = false;\n        }\n    }\n\n    function extractFromRFC2822Strings(\n        yearStr,\n        monthStr,\n        dayStr,\n        hourStr,\n        minuteStr,\n        secondStr\n    ) {\n        var result = [\n            untruncateYear(yearStr),\n            defaultLocaleMonthsShort.indexOf(monthStr),\n            parseInt(dayStr, 10),\n            parseInt(hourStr, 10),\n            parseInt(minuteStr, 10),\n        ];\n\n        if (secondStr) {\n            result.push(parseInt(secondStr, 10));\n        }\n\n        return result;\n    }\n\n    function untruncateYear(yearStr) {\n        var year = parseInt(yearStr, 10);\n        if (year <= 49) {\n            return 2000 + year;\n        } else if (year <= 999) {\n            return 1900 + year;\n        }\n        return year;\n    }\n\n    function preprocessRFC2822(s) {\n        // Remove comments and folding whitespace and replace multiple-spaces with a single space\n        return s\n            .replace(/\\([^()]*\\)|[\\n\\t]/g, ' ')\n            .replace(/(\\s\\s+)/g, ' ')\n            .replace(/^\\s\\s*/, '')\n            .replace(/\\s\\s*$/, '');\n    }\n\n    function checkWeekday(weekdayStr, parsedInput, config) {\n        if (weekdayStr) {\n            // TODO: Replace the vanilla JS Date object with an independent day-of-week check.\n            var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n                weekdayActual = new Date(\n                    parsedInput[0],\n                    parsedInput[1],\n                    parsedInput[2]\n                ).getDay();\n            if (weekdayProvided !== weekdayActual) {\n                getParsingFlags(config).weekdayMismatch = true;\n                config._isValid = false;\n                return false;\n            }\n        }\n        return true;\n    }\n\n    function calculateOffset(obsOffset, militaryOffset, numOffset) {\n        if (obsOffset) {\n            return obsOffsets[obsOffset];\n        } else if (militaryOffset) {\n            // the only allowed military tz is Z\n            return 0;\n        } else {\n            var hm = parseInt(numOffset, 10),\n                m = hm % 100,\n                h = (hm - m) / 100;\n            return h * 60 + m;\n        }\n    }\n\n    // date and time from ref 2822 format\n    function configFromRFC2822(config) {\n        var match = rfc2822.exec(preprocessRFC2822(config._i)),\n            parsedArray;\n        if (match) {\n            parsedArray = extractFromRFC2822Strings(\n                match[4],\n                match[3],\n                match[2],\n                match[5],\n                match[6],\n                match[7]\n            );\n            if (!checkWeekday(match[1], parsedArray, config)) {\n                return;\n            }\n\n            config._a = parsedArray;\n            config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n            config._d = createUTCDate.apply(null, config._a);\n            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n            getParsingFlags(config).rfc2822 = true;\n        } else {\n            config._isValid = false;\n        }\n    }\n\n    // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict\n    function configFromString(config) {\n        var matched = aspNetJsonRegex.exec(config._i);\n        if (matched !== null) {\n            config._d = new Date(+matched[1]);\n            return;\n        }\n\n        configFromISO(config);\n        if (config._isValid === false) {\n            delete config._isValid;\n        } else {\n            return;\n        }\n\n        configFromRFC2822(config);\n        if (config._isValid === false) {\n            delete config._isValid;\n        } else {\n            return;\n        }\n\n        if (config._strict) {\n            config._isValid = false;\n        } else {\n            // Final attempt, use Input Fallback\n            hooks.createFromInputFallback(config);\n        }\n    }\n\n    hooks.createFromInputFallback = deprecate(\n        'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n            'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n            'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n        function (config) {\n            config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n        }\n    );\n\n    // Pick the first defined of two or three arguments.\n    function defaults(a, b, c) {\n        if (a != null) {\n            return a;\n        }\n        if (b != null) {\n            return b;\n        }\n        return c;\n    }\n\n    function currentDateArray(config) {\n        // hooks is actually the exported moment object\n        var nowValue = new Date(hooks.now());\n        if (config._useUTC) {\n            return [\n                nowValue.getUTCFullYear(),\n                nowValue.getUTCMonth(),\n                nowValue.getUTCDate(),\n            ];\n        }\n        return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n    }\n\n    // convert an array to a date.\n    // the array should mirror the parameters below\n    // note: all values past the year are optional and will default to the lowest possible value.\n    // [year, month, day , hour, minute, second, millisecond]\n    function configFromArray(config) {\n        var i,\n            date,\n            input = [],\n            currentDate,\n            expectedWeekday,\n            yearToUse;\n\n        if (config._d) {\n            return;\n        }\n\n        currentDate = currentDateArray(config);\n\n        //compute day of the year from weeks and weekdays\n        if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n            dayOfYearFromWeekInfo(config);\n        }\n\n        //if the day of the year is set, figure out what it is\n        if (config._dayOfYear != null) {\n            yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n            if (\n                config._dayOfYear > daysInYear(yearToUse) ||\n                config._dayOfYear === 0\n            ) {\n                getParsingFlags(config)._overflowDayOfYear = true;\n            }\n\n            date = createUTCDate(yearToUse, 0, config._dayOfYear);\n            config._a[MONTH] = date.getUTCMonth();\n            config._a[DATE] = date.getUTCDate();\n        }\n\n        // Default to current date.\n        // * if no year, month, day of month are given, default to today\n        // * if day of month is given, default month and year\n        // * if month is given, default only year\n        // * if year is given, don't default anything\n        for (i = 0; i < 3 && config._a[i] == null; ++i) {\n            config._a[i] = input[i] = currentDate[i];\n        }\n\n        // Zero out whatever was not defaulted, including time\n        for (; i < 7; i++) {\n            config._a[i] = input[i] =\n                config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];\n        }\n\n        // Check for 24:00:00.000\n        if (\n            config._a[HOUR] === 24 &&\n            config._a[MINUTE] === 0 &&\n            config._a[SECOND] === 0 &&\n            config._a[MILLISECOND] === 0\n        ) {\n            config._nextDay = true;\n            config._a[HOUR] = 0;\n        }\n\n        config._d = (config._useUTC ? createUTCDate : createDate).apply(\n            null,\n            input\n        );\n        expectedWeekday = config._useUTC\n            ? config._d.getUTCDay()\n            : config._d.getDay();\n\n        // Apply timezone offset from input. The actual utcOffset can be changed\n        // with parseZone.\n        if (config._tzm != null) {\n            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n        }\n\n        if (config._nextDay) {\n            config._a[HOUR] = 24;\n        }\n\n        // check for mismatching day of week\n        if (\n            config._w &&\n            typeof config._w.d !== 'undefined' &&\n            config._w.d !== expectedWeekday\n        ) {\n            getParsingFlags(config).weekdayMismatch = true;\n        }\n    }\n\n    function dayOfYearFromWeekInfo(config) {\n        var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;\n\n        w = config._w;\n        if (w.GG != null || w.W != null || w.E != null) {\n            dow = 1;\n            doy = 4;\n\n            // TODO: We need to take the current isoWeekYear, but that depends on\n            // how we interpret now (local, utc, fixed offset). So create\n            // a now version of current config (take local/utc/offset flags, and\n            // create now).\n            weekYear = defaults(\n                w.GG,\n                config._a[YEAR],\n                weekOfYear(createLocal(), 1, 4).year\n            );\n            week = defaults(w.W, 1);\n            weekday = defaults(w.E, 1);\n            if (weekday < 1 || weekday > 7) {\n                weekdayOverflow = true;\n            }\n        } else {\n            dow = config._locale._week.dow;\n            doy = config._locale._week.doy;\n\n            curWeek = weekOfYear(createLocal(), dow, doy);\n\n            weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n            // Default to current week.\n            week = defaults(w.w, curWeek.week);\n\n            if (w.d != null) {\n                // weekday -- low day numbers are considered next week\n                weekday = w.d;\n                if (weekday < 0 || weekday > 6) {\n                    weekdayOverflow = true;\n                }\n            } else if (w.e != null) {\n                // local weekday -- counting starts from beginning of week\n                weekday = w.e + dow;\n                if (w.e < 0 || w.e > 6) {\n                    weekdayOverflow = true;\n                }\n            } else {\n                // default to beginning of week\n                weekday = dow;\n            }\n        }\n        if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n            getParsingFlags(config)._overflowWeeks = true;\n        } else if (weekdayOverflow != null) {\n            getParsingFlags(config)._overflowWeekday = true;\n        } else {\n            temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n            config._a[YEAR] = temp.year;\n            config._dayOfYear = temp.dayOfYear;\n        }\n    }\n\n    // constant that refers to the ISO standard\n    hooks.ISO_8601 = function () {};\n\n    // constant that refers to the RFC 2822 form\n    hooks.RFC_2822 = function () {};\n\n    // date from string and format string\n    function configFromStringAndFormat(config) {\n        // TODO: Move this to another part of the creation flow to prevent circular deps\n        if (config._f === hooks.ISO_8601) {\n            configFromISO(config);\n            return;\n        }\n        if (config._f === hooks.RFC_2822) {\n            configFromRFC2822(config);\n            return;\n        }\n        config._a = [];\n        getParsingFlags(config).empty = true;\n\n        // This array is used to make a Date, either with `new Date` or `Date.UTC`\n        var string = '' + config._i,\n            i,\n            parsedInput,\n            tokens,\n            token,\n            skipped,\n            stringLength = string.length,\n            totalParsedInputLength = 0,\n            era,\n            tokenLen;\n\n        tokens =\n            expandFormat(config._f, config._locale).match(formattingTokens) || [];\n        tokenLen = tokens.length;\n        for (i = 0; i < tokenLen; i++) {\n            token = tokens[i];\n            parsedInput = (string.match(getParseRegexForToken(token, config)) ||\n                [])[0];\n            if (parsedInput) {\n                skipped = string.substr(0, string.indexOf(parsedInput));\n                if (skipped.length > 0) {\n                    getParsingFlags(config).unusedInput.push(skipped);\n                }\n                string = string.slice(\n                    string.indexOf(parsedInput) + parsedInput.length\n                );\n                totalParsedInputLength += parsedInput.length;\n            }\n            // don't parse if it's not a known token\n            if (formatTokenFunctions[token]) {\n                if (parsedInput) {\n                    getParsingFlags(config).empty = false;\n                } else {\n                    getParsingFlags(config).unusedTokens.push(token);\n                }\n                addTimeToArrayFromToken(token, parsedInput, config);\n            } else if (config._strict && !parsedInput) {\n                getParsingFlags(config).unusedTokens.push(token);\n            }\n        }\n\n        // add remaining unparsed input length to the string\n        getParsingFlags(config).charsLeftOver =\n            stringLength - totalParsedInputLength;\n        if (string.length > 0) {\n            getParsingFlags(config).unusedInput.push(string);\n        }\n\n        // clear _12h flag if hour is <= 12\n        if (\n            config._a[HOUR] <= 12 &&\n            getParsingFlags(config).bigHour === true &&\n            config._a[HOUR] > 0\n        ) {\n            getParsingFlags(config).bigHour = undefined;\n        }\n\n        getParsingFlags(config).parsedDateParts = config._a.slice(0);\n        getParsingFlags(config).meridiem = config._meridiem;\n        // handle meridiem\n        config._a[HOUR] = meridiemFixWrap(\n            config._locale,\n            config._a[HOUR],\n            config._meridiem\n        );\n\n        // handle era\n        era = getParsingFlags(config).era;\n        if (era !== null) {\n            config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);\n        }\n\n        configFromArray(config);\n        checkOverflow(config);\n    }\n\n    function meridiemFixWrap(locale, hour, meridiem) {\n        var isPm;\n\n        if (meridiem == null) {\n            // nothing to do\n            return hour;\n        }\n        if (locale.meridiemHour != null) {\n            return locale.meridiemHour(hour, meridiem);\n        } else if (locale.isPM != null) {\n            // Fallback\n            isPm = locale.isPM(meridiem);\n            if (isPm && hour < 12) {\n                hour += 12;\n            }\n            if (!isPm && hour === 12) {\n                hour = 0;\n            }\n            return hour;\n        } else {\n            // this is not supposed to happen\n            return hour;\n        }\n    }\n\n    // date from string and array of format strings\n    function configFromStringAndArray(config) {\n        var tempConfig,\n            bestMoment,\n            scoreToBeat,\n            i,\n            currentScore,\n            validFormatFound,\n            bestFormatIsValid = false,\n            configfLen = config._f.length;\n\n        if (configfLen === 0) {\n            getParsingFlags(config).invalidFormat = true;\n            config._d = new Date(NaN);\n            return;\n        }\n\n        for (i = 0; i < configfLen; i++) {\n            currentScore = 0;\n            validFormatFound = false;\n            tempConfig = copyConfig({}, config);\n            if (config._useUTC != null) {\n                tempConfig._useUTC = config._useUTC;\n            }\n            tempConfig._f = config._f[i];\n            configFromStringAndFormat(tempConfig);\n\n            if (isValid(tempConfig)) {\n                validFormatFound = true;\n            }\n\n            // if there is any input that was not parsed add a penalty for that format\n            currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n            //or tokens\n            currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n            getParsingFlags(tempConfig).score = currentScore;\n\n            if (!bestFormatIsValid) {\n                if (\n                    scoreToBeat == null ||\n                    currentScore < scoreToBeat ||\n                    validFormatFound\n                ) {\n                    scoreToBeat = currentScore;\n                    bestMoment = tempConfig;\n                    if (validFormatFound) {\n                        bestFormatIsValid = true;\n                    }\n                }\n            } else {\n                if (currentScore < scoreToBeat) {\n                    scoreToBeat = currentScore;\n                    bestMoment = tempConfig;\n                }\n            }\n        }\n\n        extend(config, bestMoment || tempConfig);\n    }\n\n    function configFromObject(config) {\n        if (config._d) {\n            return;\n        }\n\n        var i = normalizeObjectUnits(config._i),\n            dayOrDate = i.day === undefined ? i.date : i.day;\n        config._a = map(\n            [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],\n            function (obj) {\n                return obj && parseInt(obj, 10);\n            }\n        );\n\n        configFromArray(config);\n    }\n\n    function createFromConfig(config) {\n        var res = new Moment(checkOverflow(prepareConfig(config)));\n        if (res._nextDay) {\n            // Adding is smart enough around DST\n            res.add(1, 'd');\n            res._nextDay = undefined;\n        }\n\n        return res;\n    }\n\n    function prepareConfig(config) {\n        var input = config._i,\n            format = config._f;\n\n        config._locale = config._locale || getLocale(config._l);\n\n        if (input === null || (format === undefined && input === '')) {\n            return createInvalid({ nullInput: true });\n        }\n\n        if (typeof input === 'string') {\n            config._i = input = config._locale.preparse(input);\n        }\n\n        if (isMoment(input)) {\n            return new Moment(checkOverflow(input));\n        } else if (isDate(input)) {\n            config._d = input;\n        } else if (isArray(format)) {\n            configFromStringAndArray(config);\n        } else if (format) {\n            configFromStringAndFormat(config);\n        } else {\n            configFromInput(config);\n        }\n\n        if (!isValid(config)) {\n            config._d = null;\n        }\n\n        return config;\n    }\n\n    function configFromInput(config) {\n        var input = config._i;\n        if (isUndefined(input)) {\n            config._d = new Date(hooks.now());\n        } else if (isDate(input)) {\n            config._d = new Date(input.valueOf());\n        } else if (typeof input === 'string') {\n            configFromString(config);\n        } else if (isArray(input)) {\n            config._a = map(input.slice(0), function (obj) {\n                return parseInt(obj, 10);\n            });\n            configFromArray(config);\n        } else if (isObject(input)) {\n            configFromObject(config);\n        } else if (isNumber(input)) {\n            // from milliseconds\n            config._d = new Date(input);\n        } else {\n            hooks.createFromInputFallback(config);\n        }\n    }\n\n    function createLocalOrUTC(input, format, locale, strict, isUTC) {\n        var c = {};\n\n        if (format === true || format === false) {\n            strict = format;\n            format = undefined;\n        }\n\n        if (locale === true || locale === false) {\n            strict = locale;\n            locale = undefined;\n        }\n\n        if (\n            (isObject(input) && isObjectEmpty(input)) ||\n            (isArray(input) && input.length === 0)\n        ) {\n            input = undefined;\n        }\n        // object construction must be done this way.\n        // https://github.com/moment/moment/issues/1423\n        c._isAMomentObject = true;\n        c._useUTC = c._isUTC = isUTC;\n        c._l = locale;\n        c._i = input;\n        c._f = format;\n        c._strict = strict;\n\n        return createFromConfig(c);\n    }\n\n    function createLocal(input, format, locale, strict) {\n        return createLocalOrUTC(input, format, locale, strict, false);\n    }\n\n    var prototypeMin = deprecate(\n            'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n            function () {\n                var other = createLocal.apply(null, arguments);\n                if (this.isValid() && other.isValid()) {\n                    return other < this ? this : other;\n                } else {\n                    return createInvalid();\n                }\n            }\n        ),\n        prototypeMax = deprecate(\n            'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n            function () {\n                var other = createLocal.apply(null, arguments);\n                if (this.isValid() && other.isValid()) {\n                    return other > this ? this : other;\n                } else {\n                    return createInvalid();\n                }\n            }\n        );\n\n    // Pick a moment m from moments so that m[fn](other) is true for all\n    // other. This relies on the function fn to be transitive.\n    //\n    // moments should either be an array of moment objects or an array, whose\n    // first element is an array of moment objects.\n    function pickBy(fn, moments) {\n        var res, i;\n        if (moments.length === 1 && isArray(moments[0])) {\n            moments = moments[0];\n        }\n        if (!moments.length) {\n            return createLocal();\n        }\n        res = moments[0];\n        for (i = 1; i < moments.length; ++i) {\n            if (!moments[i].isValid() || moments[i][fn](res)) {\n                res = moments[i];\n            }\n        }\n        return res;\n    }\n\n    // TODO: Use [].sort instead?\n    function min() {\n        var args = [].slice.call(arguments, 0);\n\n        return pickBy('isBefore', args);\n    }\n\n    function max() {\n        var args = [].slice.call(arguments, 0);\n\n        return pickBy('isAfter', args);\n    }\n\n    var now = function () {\n        return Date.now ? Date.now() : +new Date();\n    };\n\n    var ordering = [\n        'year',\n        'quarter',\n        'month',\n        'week',\n        'day',\n        'hour',\n        'minute',\n        'second',\n        'millisecond',\n    ];\n\n    function isDurationValid(m) {\n        var key,\n            unitHasDecimal = false,\n            i,\n            orderLen = ordering.length;\n        for (key in m) {\n            if (\n                hasOwnProp(m, key) &&\n                !(\n                    indexOf.call(ordering, key) !== -1 &&\n                    (m[key] == null || !isNaN(m[key]))\n                )\n            ) {\n                return false;\n            }\n        }\n\n        for (i = 0; i < orderLen; ++i) {\n            if (m[ordering[i]]) {\n                if (unitHasDecimal) {\n                    return false; // only allow non-integers for smallest unit\n                }\n                if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n                    unitHasDecimal = true;\n                }\n            }\n        }\n\n        return true;\n    }\n\n    function isValid$1() {\n        return this._isValid;\n    }\n\n    function createInvalid$1() {\n        return createDuration(NaN);\n    }\n\n    function Duration(duration) {\n        var normalizedInput = normalizeObjectUnits(duration),\n            years = normalizedInput.year || 0,\n            quarters = normalizedInput.quarter || 0,\n            months = normalizedInput.month || 0,\n            weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n            days = normalizedInput.day || 0,\n            hours = normalizedInput.hour || 0,\n            minutes = normalizedInput.minute || 0,\n            seconds = normalizedInput.second || 0,\n            milliseconds = normalizedInput.millisecond || 0;\n\n        this._isValid = isDurationValid(normalizedInput);\n\n        // representation for dateAddRemove\n        this._milliseconds =\n            +milliseconds +\n            seconds * 1e3 + // 1000\n            minutes * 6e4 + // 1000 * 60\n            hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n        // Because of dateAddRemove treats 24 hours as different from a\n        // day when working around DST, we need to store them separately\n        this._days = +days + weeks * 7;\n        // It is impossible to translate months into days without knowing\n        // which months you are are talking about, so we have to store\n        // it separately.\n        this._months = +months + quarters * 3 + years * 12;\n\n        this._data = {};\n\n        this._locale = getLocale();\n\n        this._bubble();\n    }\n\n    function isDuration(obj) {\n        return obj instanceof Duration;\n    }\n\n    function absRound(number) {\n        if (number < 0) {\n            return Math.round(-1 * number) * -1;\n        } else {\n            return Math.round(number);\n        }\n    }\n\n    // compare two arrays, return the number of differences\n    function compareArrays(array1, array2, dontConvert) {\n        var len = Math.min(array1.length, array2.length),\n            lengthDiff = Math.abs(array1.length - array2.length),\n            diffs = 0,\n            i;\n        for (i = 0; i < len; i++) {\n            if (\n                (dontConvert && array1[i] !== array2[i]) ||\n                (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))\n            ) {\n                diffs++;\n            }\n        }\n        return diffs + lengthDiff;\n    }\n\n    // FORMATTING\n\n    function offset(token, separator) {\n        addFormatToken(token, 0, 0, function () {\n            var offset = this.utcOffset(),\n                sign = '+';\n            if (offset < 0) {\n                offset = -offset;\n                sign = '-';\n            }\n            return (\n                sign +\n                zeroFill(~~(offset / 60), 2) +\n                separator +\n                zeroFill(~~offset % 60, 2)\n            );\n        });\n    }\n\n    offset('Z', ':');\n    offset('ZZ', '');\n\n    // PARSING\n\n    addRegexToken('Z', matchShortOffset);\n    addRegexToken('ZZ', matchShortOffset);\n    addParseToken(['Z', 'ZZ'], function (input, array, config) {\n        config._useUTC = true;\n        config._tzm = offsetFromString(matchShortOffset, input);\n    });\n\n    // HELPERS\n\n    // timezone chunker\n    // '+10:00' > ['10',  '00']\n    // '-1530'  > ['-15', '30']\n    var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n    function offsetFromString(matcher, string) {\n        var matches = (string || '').match(matcher),\n            chunk,\n            parts,\n            minutes;\n\n        if (matches === null) {\n            return null;\n        }\n\n        chunk = matches[matches.length - 1] || [];\n        parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n        minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n        return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;\n    }\n\n    // Return a moment from input, that is local/utc/zone equivalent to model.\n    function cloneWithOffset(input, model) {\n        var res, diff;\n        if (model._isUTC) {\n            res = model.clone();\n            diff =\n                (isMoment(input) || isDate(input)\n                    ? input.valueOf()\n                    : createLocal(input).valueOf()) - res.valueOf();\n            // Use low-level api, because this fn is low-level api.\n            res._d.setTime(res._d.valueOf() + diff);\n            hooks.updateOffset(res, false);\n            return res;\n        } else {\n            return createLocal(input).local();\n        }\n    }\n\n    function getDateOffset(m) {\n        // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n        // https://github.com/moment/moment/pull/1871\n        return -Math.round(m._d.getTimezoneOffset());\n    }\n\n    // HOOKS\n\n    // This function will be called whenever a moment is mutated.\n    // It is intended to keep the offset in sync with the timezone.\n    hooks.updateOffset = function () {};\n\n    // MOMENTS\n\n    // keepLocalTime = true means only change the timezone, without\n    // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n    // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n    // +0200, so we adjust the time as needed, to be valid.\n    //\n    // Keeping the time actually adds/subtracts (one hour)\n    // from the actual represented time. That is why we call updateOffset\n    // a second time. In case it wants us to change the offset again\n    // _changeInProgress == true case, then we have to adjust, because\n    // there is no such time in the given timezone.\n    function getSetOffset(input, keepLocalTime, keepMinutes) {\n        var offset = this._offset || 0,\n            localAdjust;\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        if (input != null) {\n            if (typeof input === 'string') {\n                input = offsetFromString(matchShortOffset, input);\n                if (input === null) {\n                    return this;\n                }\n            } else if (Math.abs(input) < 16 && !keepMinutes) {\n                input = input * 60;\n            }\n            if (!this._isUTC && keepLocalTime) {\n                localAdjust = getDateOffset(this);\n            }\n            this._offset = input;\n            this._isUTC = true;\n            if (localAdjust != null) {\n                this.add(localAdjust, 'm');\n            }\n            if (offset !== input) {\n                if (!keepLocalTime || this._changeInProgress) {\n                    addSubtract(\n                        this,\n                        createDuration(input - offset, 'm'),\n                        1,\n                        false\n                    );\n                } else if (!this._changeInProgress) {\n                    this._changeInProgress = true;\n                    hooks.updateOffset(this, true);\n                    this._changeInProgress = null;\n                }\n            }\n            return this;\n        } else {\n            return this._isUTC ? offset : getDateOffset(this);\n        }\n    }\n\n    function getSetZone(input, keepLocalTime) {\n        if (input != null) {\n            if (typeof input !== 'string') {\n                input = -input;\n            }\n\n            this.utcOffset(input, keepLocalTime);\n\n            return this;\n        } else {\n            return -this.utcOffset();\n        }\n    }\n\n    function setOffsetToUTC(keepLocalTime) {\n        return this.utcOffset(0, keepLocalTime);\n    }\n\n    function setOffsetToLocal(keepLocalTime) {\n        if (this._isUTC) {\n            this.utcOffset(0, keepLocalTime);\n            this._isUTC = false;\n\n            if (keepLocalTime) {\n                this.subtract(getDateOffset(this), 'm');\n            }\n        }\n        return this;\n    }\n\n    function setOffsetToParsedOffset() {\n        if (this._tzm != null) {\n            this.utcOffset(this._tzm, false, true);\n        } else if (typeof this._i === 'string') {\n            var tZone = offsetFromString(matchOffset, this._i);\n            if (tZone != null) {\n                this.utcOffset(tZone);\n            } else {\n                this.utcOffset(0, true);\n            }\n        }\n        return this;\n    }\n\n    function hasAlignedHourOffset(input) {\n        if (!this.isValid()) {\n            return false;\n        }\n        input = input ? createLocal(input).utcOffset() : 0;\n\n        return (this.utcOffset() - input) % 60 === 0;\n    }\n\n    function isDaylightSavingTime() {\n        return (\n            this.utcOffset() > this.clone().month(0).utcOffset() ||\n            this.utcOffset() > this.clone().month(5).utcOffset()\n        );\n    }\n\n    function isDaylightSavingTimeShifted() {\n        if (!isUndefined(this._isDSTShifted)) {\n            return this._isDSTShifted;\n        }\n\n        var c = {},\n            other;\n\n        copyConfig(c, this);\n        c = prepareConfig(c);\n\n        if (c._a) {\n            other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n            this._isDSTShifted =\n                this.isValid() && compareArrays(c._a, other.toArray()) > 0;\n        } else {\n            this._isDSTShifted = false;\n        }\n\n        return this._isDSTShifted;\n    }\n\n    function isLocal() {\n        return this.isValid() ? !this._isUTC : false;\n    }\n\n    function isUtcOffset() {\n        return this.isValid() ? this._isUTC : false;\n    }\n\n    function isUtc() {\n        return this.isValid() ? this._isUTC && this._offset === 0 : false;\n    }\n\n    // ASP.NET json date format regex\n    var aspNetRegex = /^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,\n        // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n        // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n        // and further modified to allow for strings containing both week and day\n        isoRegex =\n            /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n    function createDuration(input, key) {\n        var duration = input,\n            // matching against regexp is expensive, do it on demand\n            match = null,\n            sign,\n            ret,\n            diffRes;\n\n        if (isDuration(input)) {\n            duration = {\n                ms: input._milliseconds,\n                d: input._days,\n                M: input._months,\n            };\n        } else if (isNumber(input) || !isNaN(+input)) {\n            duration = {};\n            if (key) {\n                duration[key] = +input;\n            } else {\n                duration.milliseconds = +input;\n            }\n        } else if ((match = aspNetRegex.exec(input))) {\n            sign = match[1] === '-' ? -1 : 1;\n            duration = {\n                y: 0,\n                d: toInt(match[DATE]) * sign,\n                h: toInt(match[HOUR]) * sign,\n                m: toInt(match[MINUTE]) * sign,\n                s: toInt(match[SECOND]) * sign,\n                ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match\n            };\n        } else if ((match = isoRegex.exec(input))) {\n            sign = match[1] === '-' ? -1 : 1;\n            duration = {\n                y: parseIso(match[2], sign),\n                M: parseIso(match[3], sign),\n                w: parseIso(match[4], sign),\n                d: parseIso(match[5], sign),\n                h: parseIso(match[6], sign),\n                m: parseIso(match[7], sign),\n                s: parseIso(match[8], sign),\n            };\n        } else if (duration == null) {\n            // checks for null or undefined\n            duration = {};\n        } else if (\n            typeof duration === 'object' &&\n            ('from' in duration || 'to' in duration)\n        ) {\n            diffRes = momentsDifference(\n                createLocal(duration.from),\n                createLocal(duration.to)\n            );\n\n            duration = {};\n            duration.ms = diffRes.milliseconds;\n            duration.M = diffRes.months;\n        }\n\n        ret = new Duration(duration);\n\n        if (isDuration(input) && hasOwnProp(input, '_locale')) {\n            ret._locale = input._locale;\n        }\n\n        if (isDuration(input) && hasOwnProp(input, '_isValid')) {\n            ret._isValid = input._isValid;\n        }\n\n        return ret;\n    }\n\n    createDuration.fn = Duration.prototype;\n    createDuration.invalid = createInvalid$1;\n\n    function parseIso(inp, sign) {\n        // We'd normally use ~~inp for this, but unfortunately it also\n        // converts floats to ints.\n        // inp may be undefined, so careful calling replace on it.\n        var res = inp && parseFloat(inp.replace(',', '.'));\n        // apply sign while we're at it\n        return (isNaN(res) ? 0 : res) * sign;\n    }\n\n    function positiveMomentsDifference(base, other) {\n        var res = {};\n\n        res.months =\n            other.month() - base.month() + (other.year() - base.year()) * 12;\n        if (base.clone().add(res.months, 'M').isAfter(other)) {\n            --res.months;\n        }\n\n        res.milliseconds = +other - +base.clone().add(res.months, 'M');\n\n        return res;\n    }\n\n    function momentsDifference(base, other) {\n        var res;\n        if (!(base.isValid() && other.isValid())) {\n            return { milliseconds: 0, months: 0 };\n        }\n\n        other = cloneWithOffset(other, base);\n        if (base.isBefore(other)) {\n            res = positiveMomentsDifference(base, other);\n        } else {\n            res = positiveMomentsDifference(other, base);\n            res.milliseconds = -res.milliseconds;\n            res.months = -res.months;\n        }\n\n        return res;\n    }\n\n    // TODO: remove 'name' arg after deprecation is removed\n    function createAdder(direction, name) {\n        return function (val, period) {\n            var dur, tmp;\n            //invert the arguments, but complain about it\n            if (period !== null && !isNaN(+period)) {\n                deprecateSimple(\n                    name,\n                    'moment().' +\n                        name +\n                        '(period, number) is deprecated. Please use moment().' +\n                        name +\n                        '(number, period). ' +\n                        'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'\n                );\n                tmp = val;\n                val = period;\n                period = tmp;\n            }\n\n            dur = createDuration(val, period);\n            addSubtract(this, dur, direction);\n            return this;\n        };\n    }\n\n    function addSubtract(mom, duration, isAdding, updateOffset) {\n        var milliseconds = duration._milliseconds,\n            days = absRound(duration._days),\n            months = absRound(duration._months);\n\n        if (!mom.isValid()) {\n            // No op\n            return;\n        }\n\n        updateOffset = updateOffset == null ? true : updateOffset;\n\n        if (months) {\n            setMonth(mom, get(mom, 'Month') + months * isAdding);\n        }\n        if (days) {\n            set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n        }\n        if (milliseconds) {\n            mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n        }\n        if (updateOffset) {\n            hooks.updateOffset(mom, days || months);\n        }\n    }\n\n    var add = createAdder(1, 'add'),\n        subtract = createAdder(-1, 'subtract');\n\n    function isString(input) {\n        return typeof input === 'string' || input instanceof String;\n    }\n\n    // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined\n    function isMomentInput(input) {\n        return (\n            isMoment(input) ||\n            isDate(input) ||\n            isString(input) ||\n            isNumber(input) ||\n            isNumberOrStringArray(input) ||\n            isMomentInputObject(input) ||\n            input === null ||\n            input === undefined\n        );\n    }\n\n    function isMomentInputObject(input) {\n        var objectTest = isObject(input) && !isObjectEmpty(input),\n            propertyTest = false,\n            properties = [\n                'years',\n                'year',\n                'y',\n                'months',\n                'month',\n                'M',\n                'days',\n                'day',\n                'd',\n                'dates',\n                'date',\n                'D',\n                'hours',\n                'hour',\n                'h',\n                'minutes',\n                'minute',\n                'm',\n                'seconds',\n                'second',\n                's',\n                'milliseconds',\n                'millisecond',\n                'ms',\n            ],\n            i,\n            property,\n            propertyLen = properties.length;\n\n        for (i = 0; i < propertyLen; i += 1) {\n            property = properties[i];\n            propertyTest = propertyTest || hasOwnProp(input, property);\n        }\n\n        return objectTest && propertyTest;\n    }\n\n    function isNumberOrStringArray(input) {\n        var arrayTest = isArray(input),\n            dataTypeTest = false;\n        if (arrayTest) {\n            dataTypeTest =\n                input.filter(function (item) {\n                    return !isNumber(item) && isString(input);\n                }).length === 0;\n        }\n        return arrayTest && dataTypeTest;\n    }\n\n    function isCalendarSpec(input) {\n        var objectTest = isObject(input) && !isObjectEmpty(input),\n            propertyTest = false,\n            properties = [\n                'sameDay',\n                'nextDay',\n                'lastDay',\n                'nextWeek',\n                'lastWeek',\n                'sameElse',\n            ],\n            i,\n            property;\n\n        for (i = 0; i < properties.length; i += 1) {\n            property = properties[i];\n            propertyTest = propertyTest || hasOwnProp(input, property);\n        }\n\n        return objectTest && propertyTest;\n    }\n\n    function getCalendarFormat(myMoment, now) {\n        var diff = myMoment.diff(now, 'days', true);\n        return diff < -6\n            ? 'sameElse'\n            : diff < -1\n            ? 'lastWeek'\n            : diff < 0\n            ? 'lastDay'\n            : diff < 1\n            ? 'sameDay'\n            : diff < 2\n            ? 'nextDay'\n            : diff < 7\n            ? 'nextWeek'\n            : 'sameElse';\n    }\n\n    function calendar$1(time, formats) {\n        // Support for single parameter, formats only overload to the calendar function\n        if (arguments.length === 1) {\n            if (!arguments[0]) {\n                time = undefined;\n                formats = undefined;\n            } else if (isMomentInput(arguments[0])) {\n                time = arguments[0];\n                formats = undefined;\n            } else if (isCalendarSpec(arguments[0])) {\n                formats = arguments[0];\n                time = undefined;\n            }\n        }\n        // We want to compare the start of today, vs this.\n        // Getting start-of-today depends on whether we're local/utc/offset or not.\n        var now = time || createLocal(),\n            sod = cloneWithOffset(now, this).startOf('day'),\n            format = hooks.calendarFormat(this, sod) || 'sameElse',\n            output =\n                formats &&\n                (isFunction(formats[format])\n                    ? formats[format].call(this, now)\n                    : formats[format]);\n\n        return this.format(\n            output || this.localeData().calendar(format, this, createLocal(now))\n        );\n    }\n\n    function clone() {\n        return new Moment(this);\n    }\n\n    function isAfter(input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input);\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() > localInput.valueOf();\n        } else {\n            return localInput.valueOf() < this.clone().startOf(units).valueOf();\n        }\n    }\n\n    function isBefore(input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input);\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() < localInput.valueOf();\n        } else {\n            return this.clone().endOf(units).valueOf() < localInput.valueOf();\n        }\n    }\n\n    function isBetween(from, to, units, inclusivity) {\n        var localFrom = isMoment(from) ? from : createLocal(from),\n            localTo = isMoment(to) ? to : createLocal(to);\n        if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n            return false;\n        }\n        inclusivity = inclusivity || '()';\n        return (\n            (inclusivity[0] === '('\n                ? this.isAfter(localFrom, units)\n                : !this.isBefore(localFrom, units)) &&\n            (inclusivity[1] === ')'\n                ? this.isBefore(localTo, units)\n                : !this.isAfter(localTo, units))\n        );\n    }\n\n    function isSame(input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input),\n            inputMs;\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() === localInput.valueOf();\n        } else {\n            inputMs = localInput.valueOf();\n            return (\n                this.clone().startOf(units).valueOf() <= inputMs &&\n                inputMs <= this.clone().endOf(units).valueOf()\n            );\n        }\n    }\n\n    function isSameOrAfter(input, units) {\n        return this.isSame(input, units) || this.isAfter(input, units);\n    }\n\n    function isSameOrBefore(input, units) {\n        return this.isSame(input, units) || this.isBefore(input, units);\n    }\n\n    function diff(input, units, asFloat) {\n        var that, zoneDelta, output;\n\n        if (!this.isValid()) {\n            return NaN;\n        }\n\n        that = cloneWithOffset(input, this);\n\n        if (!that.isValid()) {\n            return NaN;\n        }\n\n        zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n        units = normalizeUnits(units);\n\n        switch (units) {\n            case 'year':\n                output = monthDiff(this, that) / 12;\n                break;\n            case 'month':\n                output = monthDiff(this, that);\n                break;\n            case 'quarter':\n                output = monthDiff(this, that) / 3;\n                break;\n            case 'second':\n                output = (this - that) / 1e3;\n                break; // 1000\n            case 'minute':\n                output = (this - that) / 6e4;\n                break; // 1000 * 60\n            case 'hour':\n                output = (this - that) / 36e5;\n                break; // 1000 * 60 * 60\n            case 'day':\n                output = (this - that - zoneDelta) / 864e5;\n                break; // 1000 * 60 * 60 * 24, negate dst\n            case 'week':\n                output = (this - that - zoneDelta) / 6048e5;\n                break; // 1000 * 60 * 60 * 24 * 7, negate dst\n            default:\n                output = this - that;\n        }\n\n        return asFloat ? output : absFloor(output);\n    }\n\n    function monthDiff(a, b) {\n        if (a.date() < b.date()) {\n            // end-of-month calculations work correct when the start month has more\n            // days than the end month.\n            return -monthDiff(b, a);\n        }\n        // difference in months\n        var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),\n            // b is in (anchor - 1 month, anchor + 1 month)\n            anchor = a.clone().add(wholeMonthDiff, 'months'),\n            anchor2,\n            adjust;\n\n        if (b - anchor < 0) {\n            anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n            // linear across the month\n            adjust = (b - anchor) / (anchor - anchor2);\n        } else {\n            anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n            // linear across the month\n            adjust = (b - anchor) / (anchor2 - anchor);\n        }\n\n        //check for negative zero, return zero if negative zero\n        return -(wholeMonthDiff + adjust) || 0;\n    }\n\n    hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n    hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n    function toString() {\n        return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n    }\n\n    function toISOString(keepOffset) {\n        if (!this.isValid()) {\n            return null;\n        }\n        var utc = keepOffset !== true,\n            m = utc ? this.clone().utc() : this;\n        if (m.year() < 0 || m.year() > 9999) {\n            return formatMoment(\n                m,\n                utc\n                    ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'\n                    : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'\n            );\n        }\n        if (isFunction(Date.prototype.toISOString)) {\n            // native implementation is ~50x faster, use it when we can\n            if (utc) {\n                return this.toDate().toISOString();\n            } else {\n                return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)\n                    .toISOString()\n                    .replace('Z', formatMoment(m, 'Z'));\n            }\n        }\n        return formatMoment(\n            m,\n            utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'\n        );\n    }\n\n    /**\n     * Return a human readable representation of a moment that can\n     * also be evaluated to get a new moment which is the same\n     *\n     * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n     */\n    function inspect() {\n        if (!this.isValid()) {\n            return 'moment.invalid(/* ' + this._i + ' */)';\n        }\n        var func = 'moment',\n            zone = '',\n            prefix,\n            year,\n            datetime,\n            suffix;\n        if (!this.isLocal()) {\n            func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n            zone = 'Z';\n        }\n        prefix = '[' + func + '(\"]';\n        year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';\n        datetime = '-MM-DD[T]HH:mm:ss.SSS';\n        suffix = zone + '[\")]';\n\n        return this.format(prefix + year + datetime + suffix);\n    }\n\n    function format(inputString) {\n        if (!inputString) {\n            inputString = this.isUtc()\n                ? hooks.defaultFormatUtc\n                : hooks.defaultFormat;\n        }\n        var output = formatMoment(this, inputString);\n        return this.localeData().postformat(output);\n    }\n\n    function from(time, withoutSuffix) {\n        if (\n            this.isValid() &&\n            ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n        ) {\n            return createDuration({ to: this, from: time })\n                .locale(this.locale())\n                .humanize(!withoutSuffix);\n        } else {\n            return this.localeData().invalidDate();\n        }\n    }\n\n    function fromNow(withoutSuffix) {\n        return this.from(createLocal(), withoutSuffix);\n    }\n\n    function to(time, withoutSuffix) {\n        if (\n            this.isValid() &&\n            ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n        ) {\n            return createDuration({ from: this, to: time })\n                .locale(this.locale())\n                .humanize(!withoutSuffix);\n        } else {\n            return this.localeData().invalidDate();\n        }\n    }\n\n    function toNow(withoutSuffix) {\n        return this.to(createLocal(), withoutSuffix);\n    }\n\n    // If passed a locale key, it will set the locale for this\n    // instance.  Otherwise, it will return the locale configuration\n    // variables for this instance.\n    function locale(key) {\n        var newLocaleData;\n\n        if (key === undefined) {\n            return this._locale._abbr;\n        } else {\n            newLocaleData = getLocale(key);\n            if (newLocaleData != null) {\n                this._locale = newLocaleData;\n            }\n            return this;\n        }\n    }\n\n    var lang = deprecate(\n        'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n        function (key) {\n            if (key === undefined) {\n                return this.localeData();\n            } else {\n                return this.locale(key);\n            }\n        }\n    );\n\n    function localeData() {\n        return this._locale;\n    }\n\n    var MS_PER_SECOND = 1000,\n        MS_PER_MINUTE = 60 * MS_PER_SECOND,\n        MS_PER_HOUR = 60 * MS_PER_MINUTE,\n        MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n\n    // actual modulo - handles negative numbers (for dates before 1970):\n    function mod$1(dividend, divisor) {\n        return ((dividend % divisor) + divisor) % divisor;\n    }\n\n    function localStartOfDate(y, m, d) {\n        // the date constructor remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n        } else {\n            return new Date(y, m, d).valueOf();\n        }\n    }\n\n    function utcStartOfDate(y, m, d) {\n        // Date.UTC remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n        } else {\n            return Date.UTC(y, m, d);\n        }\n    }\n\n    function startOf(units) {\n        var time, startOfDate;\n        units = normalizeUnits(units);\n        if (units === undefined || units === 'millisecond' || !this.isValid()) {\n            return this;\n        }\n\n        startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n        switch (units) {\n            case 'year':\n                time = startOfDate(this.year(), 0, 1);\n                break;\n            case 'quarter':\n                time = startOfDate(\n                    this.year(),\n                    this.month() - (this.month() % 3),\n                    1\n                );\n                break;\n            case 'month':\n                time = startOfDate(this.year(), this.month(), 1);\n                break;\n            case 'week':\n                time = startOfDate(\n                    this.year(),\n                    this.month(),\n                    this.date() - this.weekday()\n                );\n                break;\n            case 'isoWeek':\n                time = startOfDate(\n                    this.year(),\n                    this.month(),\n                    this.date() - (this.isoWeekday() - 1)\n                );\n                break;\n            case 'day':\n            case 'date':\n                time = startOfDate(this.year(), this.month(), this.date());\n                break;\n            case 'hour':\n                time = this._d.valueOf();\n                time -= mod$1(\n                    time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n                    MS_PER_HOUR\n                );\n                break;\n            case 'minute':\n                time = this._d.valueOf();\n                time -= mod$1(time, MS_PER_MINUTE);\n                break;\n            case 'second':\n                time = this._d.valueOf();\n                time -= mod$1(time, MS_PER_SECOND);\n                break;\n        }\n\n        this._d.setTime(time);\n        hooks.updateOffset(this, true);\n        return this;\n    }\n\n    function endOf(units) {\n        var time, startOfDate;\n        units = normalizeUnits(units);\n        if (units === undefined || units === 'millisecond' || !this.isValid()) {\n            return this;\n        }\n\n        startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n        switch (units) {\n            case 'year':\n                time = startOfDate(this.year() + 1, 0, 1) - 1;\n                break;\n            case 'quarter':\n                time =\n                    startOfDate(\n                        this.year(),\n                        this.month() - (this.month() % 3) + 3,\n                        1\n                    ) - 1;\n                break;\n            case 'month':\n                time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n                break;\n            case 'week':\n                time =\n                    startOfDate(\n                        this.year(),\n                        this.month(),\n                        this.date() - this.weekday() + 7\n                    ) - 1;\n                break;\n            case 'isoWeek':\n                time =\n                    startOfDate(\n                        this.year(),\n                        this.month(),\n                        this.date() - (this.isoWeekday() - 1) + 7\n                    ) - 1;\n                break;\n            case 'day':\n            case 'date':\n                time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n                break;\n            case 'hour':\n                time = this._d.valueOf();\n                time +=\n                    MS_PER_HOUR -\n                    mod$1(\n                        time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n                        MS_PER_HOUR\n                    ) -\n                    1;\n                break;\n            case 'minute':\n                time = this._d.valueOf();\n                time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n                break;\n            case 'second':\n                time = this._d.valueOf();\n                time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n                break;\n        }\n\n        this._d.setTime(time);\n        hooks.updateOffset(this, true);\n        return this;\n    }\n\n    function valueOf() {\n        return this._d.valueOf() - (this._offset || 0) * 60000;\n    }\n\n    function unix() {\n        return Math.floor(this.valueOf() / 1000);\n    }\n\n    function toDate() {\n        return new Date(this.valueOf());\n    }\n\n    function toArray() {\n        var m = this;\n        return [\n            m.year(),\n            m.month(),\n            m.date(),\n            m.hour(),\n            m.minute(),\n            m.second(),\n            m.millisecond(),\n        ];\n    }\n\n    function toObject() {\n        var m = this;\n        return {\n            years: m.year(),\n            months: m.month(),\n            date: m.date(),\n            hours: m.hours(),\n            minutes: m.minutes(),\n            seconds: m.seconds(),\n            milliseconds: m.milliseconds(),\n        };\n    }\n\n    function toJSON() {\n        // new Date(NaN).toJSON() === null\n        return this.isValid() ? this.toISOString() : null;\n    }\n\n    function isValid$2() {\n        return isValid(this);\n    }\n\n    function parsingFlags() {\n        return extend({}, getParsingFlags(this));\n    }\n\n    function invalidAt() {\n        return getParsingFlags(this).overflow;\n    }\n\n    function creationData() {\n        return {\n            input: this._i,\n            format: this._f,\n            locale: this._locale,\n            isUTC: this._isUTC,\n            strict: this._strict,\n        };\n    }\n\n    addFormatToken('N', 0, 0, 'eraAbbr');\n    addFormatToken('NN', 0, 0, 'eraAbbr');\n    addFormatToken('NNN', 0, 0, 'eraAbbr');\n    addFormatToken('NNNN', 0, 0, 'eraName');\n    addFormatToken('NNNNN', 0, 0, 'eraNarrow');\n\n    addFormatToken('y', ['y', 1], 'yo', 'eraYear');\n    addFormatToken('y', ['yy', 2], 0, 'eraYear');\n    addFormatToken('y', ['yyy', 3], 0, 'eraYear');\n    addFormatToken('y', ['yyyy', 4], 0, 'eraYear');\n\n    addRegexToken('N', matchEraAbbr);\n    addRegexToken('NN', matchEraAbbr);\n    addRegexToken('NNN', matchEraAbbr);\n    addRegexToken('NNNN', matchEraName);\n    addRegexToken('NNNNN', matchEraNarrow);\n\n    addParseToken(\n        ['N', 'NN', 'NNN', 'NNNN', 'NNNNN'],\n        function (input, array, config, token) {\n            var era = config._locale.erasParse(input, token, config._strict);\n            if (era) {\n                getParsingFlags(config).era = era;\n            } else {\n                getParsingFlags(config).invalidEra = input;\n            }\n        }\n    );\n\n    addRegexToken('y', matchUnsigned);\n    addRegexToken('yy', matchUnsigned);\n    addRegexToken('yyy', matchUnsigned);\n    addRegexToken('yyyy', matchUnsigned);\n    addRegexToken('yo', matchEraYearOrdinal);\n\n    addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);\n    addParseToken(['yo'], function (input, array, config, token) {\n        var match;\n        if (config._locale._eraYearOrdinalRegex) {\n            match = input.match(config._locale._eraYearOrdinalRegex);\n        }\n\n        if (config._locale.eraYearOrdinalParse) {\n            array[YEAR] = config._locale.eraYearOrdinalParse(input, match);\n        } else {\n            array[YEAR] = parseInt(input, 10);\n        }\n    });\n\n    function localeEras(m, format) {\n        var i,\n            l,\n            date,\n            eras = this._eras || getLocale('en')._eras;\n        for (i = 0, l = eras.length; i < l; ++i) {\n            switch (typeof eras[i].since) {\n                case 'string':\n                    // truncate time\n                    date = hooks(eras[i].since).startOf('day');\n                    eras[i].since = date.valueOf();\n                    break;\n            }\n\n            switch (typeof eras[i].until) {\n                case 'undefined':\n                    eras[i].until = +Infinity;\n                    break;\n                case 'string':\n                    // truncate time\n                    date = hooks(eras[i].until).startOf('day').valueOf();\n                    eras[i].until = date.valueOf();\n                    break;\n            }\n        }\n        return eras;\n    }\n\n    function localeErasParse(eraName, format, strict) {\n        var i,\n            l,\n            eras = this.eras(),\n            name,\n            abbr,\n            narrow;\n        eraName = eraName.toUpperCase();\n\n        for (i = 0, l = eras.length; i < l; ++i) {\n            name = eras[i].name.toUpperCase();\n            abbr = eras[i].abbr.toUpperCase();\n            narrow = eras[i].narrow.toUpperCase();\n\n            if (strict) {\n                switch (format) {\n                    case 'N':\n                    case 'NN':\n                    case 'NNN':\n                        if (abbr === eraName) {\n                            return eras[i];\n                        }\n                        break;\n\n                    case 'NNNN':\n                        if (name === eraName) {\n                            return eras[i];\n                        }\n                        break;\n\n                    case 'NNNNN':\n                        if (narrow === eraName) {\n                            return eras[i];\n                        }\n                        break;\n                }\n            } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {\n                return eras[i];\n            }\n        }\n    }\n\n    function localeErasConvertYear(era, year) {\n        var dir = era.since <= era.until ? +1 : -1;\n        if (year === undefined) {\n            return hooks(era.since).year();\n        } else {\n            return hooks(era.since).year() + (year - era.offset) * dir;\n        }\n    }\n\n    function getEraName() {\n        var i,\n            l,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (eras[i].since <= val && val <= eras[i].until) {\n                return eras[i].name;\n            }\n            if (eras[i].until <= val && val <= eras[i].since) {\n                return eras[i].name;\n            }\n        }\n\n        return '';\n    }\n\n    function getEraNarrow() {\n        var i,\n            l,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (eras[i].since <= val && val <= eras[i].until) {\n                return eras[i].narrow;\n            }\n            if (eras[i].until <= val && val <= eras[i].since) {\n                return eras[i].narrow;\n            }\n        }\n\n        return '';\n    }\n\n    function getEraAbbr() {\n        var i,\n            l,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (eras[i].since <= val && val <= eras[i].until) {\n                return eras[i].abbr;\n            }\n            if (eras[i].until <= val && val <= eras[i].since) {\n                return eras[i].abbr;\n            }\n        }\n\n        return '';\n    }\n\n    function getEraYear() {\n        var i,\n            l,\n            dir,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            dir = eras[i].since <= eras[i].until ? +1 : -1;\n\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (\n                (eras[i].since <= val && val <= eras[i].until) ||\n                (eras[i].until <= val && val <= eras[i].since)\n            ) {\n                return (\n                    (this.year() - hooks(eras[i].since).year()) * dir +\n                    eras[i].offset\n                );\n            }\n        }\n\n        return this.year();\n    }\n\n    function erasNameRegex(isStrict) {\n        if (!hasOwnProp(this, '_erasNameRegex')) {\n            computeErasParse.call(this);\n        }\n        return isStrict ? this._erasNameRegex : this._erasRegex;\n    }\n\n    function erasAbbrRegex(isStrict) {\n        if (!hasOwnProp(this, '_erasAbbrRegex')) {\n            computeErasParse.call(this);\n        }\n        return isStrict ? this._erasAbbrRegex : this._erasRegex;\n    }\n\n    function erasNarrowRegex(isStrict) {\n        if (!hasOwnProp(this, '_erasNarrowRegex')) {\n            computeErasParse.call(this);\n        }\n        return isStrict ? this._erasNarrowRegex : this._erasRegex;\n    }\n\n    function matchEraAbbr(isStrict, locale) {\n        return locale.erasAbbrRegex(isStrict);\n    }\n\n    function matchEraName(isStrict, locale) {\n        return locale.erasNameRegex(isStrict);\n    }\n\n    function matchEraNarrow(isStrict, locale) {\n        return locale.erasNarrowRegex(isStrict);\n    }\n\n    function matchEraYearOrdinal(isStrict, locale) {\n        return locale._eraYearOrdinalRegex || matchUnsigned;\n    }\n\n    function computeErasParse() {\n        var abbrPieces = [],\n            namePieces = [],\n            narrowPieces = [],\n            mixedPieces = [],\n            i,\n            l,\n            eras = this.eras();\n\n        for (i = 0, l = eras.length; i < l; ++i) {\n            namePieces.push(regexEscape(eras[i].name));\n            abbrPieces.push(regexEscape(eras[i].abbr));\n            narrowPieces.push(regexEscape(eras[i].narrow));\n\n            mixedPieces.push(regexEscape(eras[i].name));\n            mixedPieces.push(regexEscape(eras[i].abbr));\n            mixedPieces.push(regexEscape(eras[i].narrow));\n        }\n\n        this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');\n        this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');\n        this._erasNarrowRegex = new RegExp(\n            '^(' + narrowPieces.join('|') + ')',\n            'i'\n        );\n    }\n\n    // FORMATTING\n\n    addFormatToken(0, ['gg', 2], 0, function () {\n        return this.weekYear() % 100;\n    });\n\n    addFormatToken(0, ['GG', 2], 0, function () {\n        return this.isoWeekYear() % 100;\n    });\n\n    function addWeekYearFormatToken(token, getter) {\n        addFormatToken(0, [token, token.length], 0, getter);\n    }\n\n    addWeekYearFormatToken('gggg', 'weekYear');\n    addWeekYearFormatToken('ggggg', 'weekYear');\n    addWeekYearFormatToken('GGGG', 'isoWeekYear');\n    addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n    // ALIASES\n\n    addUnitAlias('weekYear', 'gg');\n    addUnitAlias('isoWeekYear', 'GG');\n\n    // PRIORITY\n\n    addUnitPriority('weekYear', 1);\n    addUnitPriority('isoWeekYear', 1);\n\n    // PARSING\n\n    addRegexToken('G', matchSigned);\n    addRegexToken('g', matchSigned);\n    addRegexToken('GG', match1to2, match2);\n    addRegexToken('gg', match1to2, match2);\n    addRegexToken('GGGG', match1to4, match4);\n    addRegexToken('gggg', match1to4, match4);\n    addRegexToken('GGGGG', match1to6, match6);\n    addRegexToken('ggggg', match1to6, match6);\n\n    addWeekParseToken(\n        ['gggg', 'ggggg', 'GGGG', 'GGGGG'],\n        function (input, week, config, token) {\n            week[token.substr(0, 2)] = toInt(input);\n        }\n    );\n\n    addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n        week[token] = hooks.parseTwoDigitYear(input);\n    });\n\n    // MOMENTS\n\n    function getSetWeekYear(input) {\n        return getSetWeekYearHelper.call(\n            this,\n            input,\n            this.week(),\n            this.weekday(),\n            this.localeData()._week.dow,\n            this.localeData()._week.doy\n        );\n    }\n\n    function getSetISOWeekYear(input) {\n        return getSetWeekYearHelper.call(\n            this,\n            input,\n            this.isoWeek(),\n            this.isoWeekday(),\n            1,\n            4\n        );\n    }\n\n    function getISOWeeksInYear() {\n        return weeksInYear(this.year(), 1, 4);\n    }\n\n    function getISOWeeksInISOWeekYear() {\n        return weeksInYear(this.isoWeekYear(), 1, 4);\n    }\n\n    function getWeeksInYear() {\n        var weekInfo = this.localeData()._week;\n        return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n    }\n\n    function getWeeksInWeekYear() {\n        var weekInfo = this.localeData()._week;\n        return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);\n    }\n\n    function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n        var weeksTarget;\n        if (input == null) {\n            return weekOfYear(this, dow, doy).year;\n        } else {\n            weeksTarget = weeksInYear(input, dow, doy);\n            if (week > weeksTarget) {\n                week = weeksTarget;\n            }\n            return setWeekAll.call(this, input, week, weekday, dow, doy);\n        }\n    }\n\n    function setWeekAll(weekYear, week, weekday, dow, doy) {\n        var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n            date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n        this.year(date.getUTCFullYear());\n        this.month(date.getUTCMonth());\n        this.date(date.getUTCDate());\n        return this;\n    }\n\n    // FORMATTING\n\n    addFormatToken('Q', 0, 'Qo', 'quarter');\n\n    // ALIASES\n\n    addUnitAlias('quarter', 'Q');\n\n    // PRIORITY\n\n    addUnitPriority('quarter', 7);\n\n    // PARSING\n\n    addRegexToken('Q', match1);\n    addParseToken('Q', function (input, array) {\n        array[MONTH] = (toInt(input) - 1) * 3;\n    });\n\n    // MOMENTS\n\n    function getSetQuarter(input) {\n        return input == null\n            ? Math.ceil((this.month() + 1) / 3)\n            : this.month((input - 1) * 3 + (this.month() % 3));\n    }\n\n    // FORMATTING\n\n    addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n    // ALIASES\n\n    addUnitAlias('date', 'D');\n\n    // PRIORITY\n    addUnitPriority('date', 9);\n\n    // PARSING\n\n    addRegexToken('D', match1to2);\n    addRegexToken('DD', match1to2, match2);\n    addRegexToken('Do', function (isStrict, locale) {\n        // TODO: Remove \"ordinalParse\" fallback in next major release.\n        return isStrict\n            ? locale._dayOfMonthOrdinalParse || locale._ordinalParse\n            : locale._dayOfMonthOrdinalParseLenient;\n    });\n\n    addParseToken(['D', 'DD'], DATE);\n    addParseToken('Do', function (input, array) {\n        array[DATE] = toInt(input.match(match1to2)[0]);\n    });\n\n    // MOMENTS\n\n    var getSetDayOfMonth = makeGetSet('Date', true);\n\n    // FORMATTING\n\n    addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n    // ALIASES\n\n    addUnitAlias('dayOfYear', 'DDD');\n\n    // PRIORITY\n    addUnitPriority('dayOfYear', 4);\n\n    // PARSING\n\n    addRegexToken('DDD', match1to3);\n    addRegexToken('DDDD', match3);\n    addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n        config._dayOfYear = toInt(input);\n    });\n\n    // HELPERS\n\n    // MOMENTS\n\n    function getSetDayOfYear(input) {\n        var dayOfYear =\n            Math.round(\n                (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5\n            ) + 1;\n        return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');\n    }\n\n    // FORMATTING\n\n    addFormatToken('m', ['mm', 2], 0, 'minute');\n\n    // ALIASES\n\n    addUnitAlias('minute', 'm');\n\n    // PRIORITY\n\n    addUnitPriority('minute', 14);\n\n    // PARSING\n\n    addRegexToken('m', match1to2);\n    addRegexToken('mm', match1to2, match2);\n    addParseToken(['m', 'mm'], MINUTE);\n\n    // MOMENTS\n\n    var getSetMinute = makeGetSet('Minutes', false);\n\n    // FORMATTING\n\n    addFormatToken('s', ['ss', 2], 0, 'second');\n\n    // ALIASES\n\n    addUnitAlias('second', 's');\n\n    // PRIORITY\n\n    addUnitPriority('second', 15);\n\n    // PARSING\n\n    addRegexToken('s', match1to2);\n    addRegexToken('ss', match1to2, match2);\n    addParseToken(['s', 'ss'], SECOND);\n\n    // MOMENTS\n\n    var getSetSecond = makeGetSet('Seconds', false);\n\n    // FORMATTING\n\n    addFormatToken('S', 0, 0, function () {\n        return ~~(this.millisecond() / 100);\n    });\n\n    addFormatToken(0, ['SS', 2], 0, function () {\n        return ~~(this.millisecond() / 10);\n    });\n\n    addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n    addFormatToken(0, ['SSSS', 4], 0, function () {\n        return this.millisecond() * 10;\n    });\n    addFormatToken(0, ['SSSSS', 5], 0, function () {\n        return this.millisecond() * 100;\n    });\n    addFormatToken(0, ['SSSSSS', 6], 0, function () {\n        return this.millisecond() * 1000;\n    });\n    addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n        return this.millisecond() * 10000;\n    });\n    addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n        return this.millisecond() * 100000;\n    });\n    addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n        return this.millisecond() * 1000000;\n    });\n\n    // ALIASES\n\n    addUnitAlias('millisecond', 'ms');\n\n    // PRIORITY\n\n    addUnitPriority('millisecond', 16);\n\n    // PARSING\n\n    addRegexToken('S', match1to3, match1);\n    addRegexToken('SS', match1to3, match2);\n    addRegexToken('SSS', match1to3, match3);\n\n    var token, getSetMillisecond;\n    for (token = 'SSSS'; token.length <= 9; token += 'S') {\n        addRegexToken(token, matchUnsigned);\n    }\n\n    function parseMs(input, array) {\n        array[MILLISECOND] = toInt(('0.' + input) * 1000);\n    }\n\n    for (token = 'S'; token.length <= 9; token += 'S') {\n        addParseToken(token, parseMs);\n    }\n\n    getSetMillisecond = makeGetSet('Milliseconds', false);\n\n    // FORMATTING\n\n    addFormatToken('z', 0, 0, 'zoneAbbr');\n    addFormatToken('zz', 0, 0, 'zoneName');\n\n    // MOMENTS\n\n    function getZoneAbbr() {\n        return this._isUTC ? 'UTC' : '';\n    }\n\n    function getZoneName() {\n        return this._isUTC ? 'Coordinated Universal Time' : '';\n    }\n\n    var proto = Moment.prototype;\n\n    proto.add = add;\n    proto.calendar = calendar$1;\n    proto.clone = clone;\n    proto.diff = diff;\n    proto.endOf = endOf;\n    proto.format = format;\n    proto.from = from;\n    proto.fromNow = fromNow;\n    proto.to = to;\n    proto.toNow = toNow;\n    proto.get = stringGet;\n    proto.invalidAt = invalidAt;\n    proto.isAfter = isAfter;\n    proto.isBefore = isBefore;\n    proto.isBetween = isBetween;\n    proto.isSame = isSame;\n    proto.isSameOrAfter = isSameOrAfter;\n    proto.isSameOrBefore = isSameOrBefore;\n    proto.isValid = isValid$2;\n    proto.lang = lang;\n    proto.locale = locale;\n    proto.localeData = localeData;\n    proto.max = prototypeMax;\n    proto.min = prototypeMin;\n    proto.parsingFlags = parsingFlags;\n    proto.set = stringSet;\n    proto.startOf = startOf;\n    proto.subtract = subtract;\n    proto.toArray = toArray;\n    proto.toObject = toObject;\n    proto.toDate = toDate;\n    proto.toISOString = toISOString;\n    proto.inspect = inspect;\n    if (typeof Symbol !== 'undefined' && Symbol.for != null) {\n        proto[Symbol.for('nodejs.util.inspect.custom')] = function () {\n            return 'Moment<' + this.format() + '>';\n        };\n    }\n    proto.toJSON = toJSON;\n    proto.toString = toString;\n    proto.unix = unix;\n    proto.valueOf = valueOf;\n    proto.creationData = creationData;\n    proto.eraName = getEraName;\n    proto.eraNarrow = getEraNarrow;\n    proto.eraAbbr = getEraAbbr;\n    proto.eraYear = getEraYear;\n    proto.year = getSetYear;\n    proto.isLeapYear = getIsLeapYear;\n    proto.weekYear = getSetWeekYear;\n    proto.isoWeekYear = getSetISOWeekYear;\n    proto.quarter = proto.quarters = getSetQuarter;\n    proto.month = getSetMonth;\n    proto.daysInMonth = getDaysInMonth;\n    proto.week = proto.weeks = getSetWeek;\n    proto.isoWeek = proto.isoWeeks = getSetISOWeek;\n    proto.weeksInYear = getWeeksInYear;\n    proto.weeksInWeekYear = getWeeksInWeekYear;\n    proto.isoWeeksInYear = getISOWeeksInYear;\n    proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;\n    proto.date = getSetDayOfMonth;\n    proto.day = proto.days = getSetDayOfWeek;\n    proto.weekday = getSetLocaleDayOfWeek;\n    proto.isoWeekday = getSetISODayOfWeek;\n    proto.dayOfYear = getSetDayOfYear;\n    proto.hour = proto.hours = getSetHour;\n    proto.minute = proto.minutes = getSetMinute;\n    proto.second = proto.seconds = getSetSecond;\n    proto.millisecond = proto.milliseconds = getSetMillisecond;\n    proto.utcOffset = getSetOffset;\n    proto.utc = setOffsetToUTC;\n    proto.local = setOffsetToLocal;\n    proto.parseZone = setOffsetToParsedOffset;\n    proto.hasAlignedHourOffset = hasAlignedHourOffset;\n    proto.isDST = isDaylightSavingTime;\n    proto.isLocal = isLocal;\n    proto.isUtcOffset = isUtcOffset;\n    proto.isUtc = isUtc;\n    proto.isUTC = isUtc;\n    proto.zoneAbbr = getZoneAbbr;\n    proto.zoneName = getZoneName;\n    proto.dates = deprecate(\n        'dates accessor is deprecated. Use date instead.',\n        getSetDayOfMonth\n    );\n    proto.months = deprecate(\n        'months accessor is deprecated. Use month instead',\n        getSetMonth\n    );\n    proto.years = deprecate(\n        'years accessor is deprecated. Use year instead',\n        getSetYear\n    );\n    proto.zone = deprecate(\n        'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',\n        getSetZone\n    );\n    proto.isDSTShifted = deprecate(\n        'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',\n        isDaylightSavingTimeShifted\n    );\n\n    function createUnix(input) {\n        return createLocal(input * 1000);\n    }\n\n    function createInZone() {\n        return createLocal.apply(null, arguments).parseZone();\n    }\n\n    function preParsePostFormat(string) {\n        return string;\n    }\n\n    var proto$1 = Locale.prototype;\n\n    proto$1.calendar = calendar;\n    proto$1.longDateFormat = longDateFormat;\n    proto$1.invalidDate = invalidDate;\n    proto$1.ordinal = ordinal;\n    proto$1.preparse = preParsePostFormat;\n    proto$1.postformat = preParsePostFormat;\n    proto$1.relativeTime = relativeTime;\n    proto$1.pastFuture = pastFuture;\n    proto$1.set = set;\n    proto$1.eras = localeEras;\n    proto$1.erasParse = localeErasParse;\n    proto$1.erasConvertYear = localeErasConvertYear;\n    proto$1.erasAbbrRegex = erasAbbrRegex;\n    proto$1.erasNameRegex = erasNameRegex;\n    proto$1.erasNarrowRegex = erasNarrowRegex;\n\n    proto$1.months = localeMonths;\n    proto$1.monthsShort = localeMonthsShort;\n    proto$1.monthsParse = localeMonthsParse;\n    proto$1.monthsRegex = monthsRegex;\n    proto$1.monthsShortRegex = monthsShortRegex;\n    proto$1.week = localeWeek;\n    proto$1.firstDayOfYear = localeFirstDayOfYear;\n    proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n    proto$1.weekdays = localeWeekdays;\n    proto$1.weekdaysMin = localeWeekdaysMin;\n    proto$1.weekdaysShort = localeWeekdaysShort;\n    proto$1.weekdaysParse = localeWeekdaysParse;\n\n    proto$1.weekdaysRegex = weekdaysRegex;\n    proto$1.weekdaysShortRegex = weekdaysShortRegex;\n    proto$1.weekdaysMinRegex = weekdaysMinRegex;\n\n    proto$1.isPM = localeIsPM;\n    proto$1.meridiem = localeMeridiem;\n\n    function get$1(format, index, field, setter) {\n        var locale = getLocale(),\n            utc = createUTC().set(setter, index);\n        return locale[field](utc, format);\n    }\n\n    function listMonthsImpl(format, index, field) {\n        if (isNumber(format)) {\n            index = format;\n            format = undefined;\n        }\n\n        format = format || '';\n\n        if (index != null) {\n            return get$1(format, index, field, 'month');\n        }\n\n        var i,\n            out = [];\n        for (i = 0; i < 12; i++) {\n            out[i] = get$1(format, i, field, 'month');\n        }\n        return out;\n    }\n\n    // ()\n    // (5)\n    // (fmt, 5)\n    // (fmt)\n    // (true)\n    // (true, 5)\n    // (true, fmt, 5)\n    // (true, fmt)\n    function listWeekdaysImpl(localeSorted, format, index, field) {\n        if (typeof localeSorted === 'boolean') {\n            if (isNumber(format)) {\n                index = format;\n                format = undefined;\n            }\n\n            format = format || '';\n        } else {\n            format = localeSorted;\n            index = format;\n            localeSorted = false;\n\n            if (isNumber(format)) {\n                index = format;\n                format = undefined;\n            }\n\n            format = format || '';\n        }\n\n        var locale = getLocale(),\n            shift = localeSorted ? locale._week.dow : 0,\n            i,\n            out = [];\n\n        if (index != null) {\n            return get$1(format, (index + shift) % 7, field, 'day');\n        }\n\n        for (i = 0; i < 7; i++) {\n            out[i] = get$1(format, (i + shift) % 7, field, 'day');\n        }\n        return out;\n    }\n\n    function listMonths(format, index) {\n        return listMonthsImpl(format, index, 'months');\n    }\n\n    function listMonthsShort(format, index) {\n        return listMonthsImpl(format, index, 'monthsShort');\n    }\n\n    function listWeekdays(localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n    }\n\n    function listWeekdaysShort(localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n    }\n\n    function listWeekdaysMin(localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n    }\n\n    getSetGlobalLocale('en', {\n        eras: [\n            {\n                since: '0001-01-01',\n                until: +Infinity,\n                offset: 1,\n                name: 'Anno Domini',\n                narrow: 'AD',\n                abbr: 'AD',\n            },\n            {\n                since: '0000-12-31',\n                until: -Infinity,\n                offset: 1,\n                name: 'Before Christ',\n                narrow: 'BC',\n                abbr: 'BC',\n            },\n        ],\n        dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    toInt((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                        ? 'st'\n                        : b === 2\n                        ? 'nd'\n                        : b === 3\n                        ? 'rd'\n                        : 'th';\n            return number + output;\n        },\n    });\n\n    // Side effect imports\n\n    hooks.lang = deprecate(\n        'moment.lang is deprecated. Use moment.locale instead.',\n        getSetGlobalLocale\n    );\n    hooks.langData = deprecate(\n        'moment.langData is deprecated. Use moment.localeData instead.',\n        getLocale\n    );\n\n    var mathAbs = Math.abs;\n\n    function abs() {\n        var data = this._data;\n\n        this._milliseconds = mathAbs(this._milliseconds);\n        this._days = mathAbs(this._days);\n        this._months = mathAbs(this._months);\n\n        data.milliseconds = mathAbs(data.milliseconds);\n        data.seconds = mathAbs(data.seconds);\n        data.minutes = mathAbs(data.minutes);\n        data.hours = mathAbs(data.hours);\n        data.months = mathAbs(data.months);\n        data.years = mathAbs(data.years);\n\n        return this;\n    }\n\n    function addSubtract$1(duration, input, value, direction) {\n        var other = createDuration(input, value);\n\n        duration._milliseconds += direction * other._milliseconds;\n        duration._days += direction * other._days;\n        duration._months += direction * other._months;\n\n        return duration._bubble();\n    }\n\n    // supports only 2.0-style add(1, 's') or add(duration)\n    function add$1(input, value) {\n        return addSubtract$1(this, input, value, 1);\n    }\n\n    // supports only 2.0-style subtract(1, 's') or subtract(duration)\n    function subtract$1(input, value) {\n        return addSubtract$1(this, input, value, -1);\n    }\n\n    function absCeil(number) {\n        if (number < 0) {\n            return Math.floor(number);\n        } else {\n            return Math.ceil(number);\n        }\n    }\n\n    function bubble() {\n        var milliseconds = this._milliseconds,\n            days = this._days,\n            months = this._months,\n            data = this._data,\n            seconds,\n            minutes,\n            hours,\n            years,\n            monthsFromDays;\n\n        // if we have a mix of positive and negative values, bubble down first\n        // check: https://github.com/moment/moment/issues/2166\n        if (\n            !(\n                (milliseconds >= 0 && days >= 0 && months >= 0) ||\n                (milliseconds <= 0 && days <= 0 && months <= 0)\n            )\n        ) {\n            milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n            days = 0;\n            months = 0;\n        }\n\n        // The following code bubbles up values, see the tests for\n        // examples of what that means.\n        data.milliseconds = milliseconds % 1000;\n\n        seconds = absFloor(milliseconds / 1000);\n        data.seconds = seconds % 60;\n\n        minutes = absFloor(seconds / 60);\n        data.minutes = minutes % 60;\n\n        hours = absFloor(minutes / 60);\n        data.hours = hours % 24;\n\n        days += absFloor(hours / 24);\n\n        // convert days to months\n        monthsFromDays = absFloor(daysToMonths(days));\n        months += monthsFromDays;\n        days -= absCeil(monthsToDays(monthsFromDays));\n\n        // 12 months -> 1 year\n        years = absFloor(months / 12);\n        months %= 12;\n\n        data.days = days;\n        data.months = months;\n        data.years = years;\n\n        return this;\n    }\n\n    function daysToMonths(days) {\n        // 400 years have 146097 days (taking into account leap year rules)\n        // 400 years have 12 months === 4800\n        return (days * 4800) / 146097;\n    }\n\n    function monthsToDays(months) {\n        // the reverse of daysToMonths\n        return (months * 146097) / 4800;\n    }\n\n    function as(units) {\n        if (!this.isValid()) {\n            return NaN;\n        }\n        var days,\n            months,\n            milliseconds = this._milliseconds;\n\n        units = normalizeUnits(units);\n\n        if (units === 'month' || units === 'quarter' || units === 'year') {\n            days = this._days + milliseconds / 864e5;\n            months = this._months + daysToMonths(days);\n            switch (units) {\n                case 'month':\n                    return months;\n                case 'quarter':\n                    return months / 3;\n                case 'year':\n                    return months / 12;\n            }\n        } else {\n            // handle milliseconds separately because of floating point math errors (issue #1867)\n            days = this._days + Math.round(monthsToDays(this._months));\n            switch (units) {\n                case 'week':\n                    return days / 7 + milliseconds / 6048e5;\n                case 'day':\n                    return days + milliseconds / 864e5;\n                case 'hour':\n                    return days * 24 + milliseconds / 36e5;\n                case 'minute':\n                    return days * 1440 + milliseconds / 6e4;\n                case 'second':\n                    return days * 86400 + milliseconds / 1000;\n                // Math.floor prevents floating point math errors here\n                case 'millisecond':\n                    return Math.floor(days * 864e5) + milliseconds;\n                default:\n                    throw new Error('Unknown unit ' + units);\n            }\n        }\n    }\n\n    // TODO: Use this.as('ms')?\n    function valueOf$1() {\n        if (!this.isValid()) {\n            return NaN;\n        }\n        return (\n            this._milliseconds +\n            this._days * 864e5 +\n            (this._months % 12) * 2592e6 +\n            toInt(this._months / 12) * 31536e6\n        );\n    }\n\n    function makeAs(alias) {\n        return function () {\n            return this.as(alias);\n        };\n    }\n\n    var asMilliseconds = makeAs('ms'),\n        asSeconds = makeAs('s'),\n        asMinutes = makeAs('m'),\n        asHours = makeAs('h'),\n        asDays = makeAs('d'),\n        asWeeks = makeAs('w'),\n        asMonths = makeAs('M'),\n        asQuarters = makeAs('Q'),\n        asYears = makeAs('y');\n\n    function clone$1() {\n        return createDuration(this);\n    }\n\n    function get$2(units) {\n        units = normalizeUnits(units);\n        return this.isValid() ? this[units + 's']() : NaN;\n    }\n\n    function makeGetter(name) {\n        return function () {\n            return this.isValid() ? this._data[name] : NaN;\n        };\n    }\n\n    var milliseconds = makeGetter('milliseconds'),\n        seconds = makeGetter('seconds'),\n        minutes = makeGetter('minutes'),\n        hours = makeGetter('hours'),\n        days = makeGetter('days'),\n        months = makeGetter('months'),\n        years = makeGetter('years');\n\n    function weeks() {\n        return absFloor(this.days() / 7);\n    }\n\n    var round = Math.round,\n        thresholds = {\n            ss: 44, // a few seconds to seconds\n            s: 45, // seconds to minute\n            m: 45, // minutes to hour\n            h: 22, // hours to day\n            d: 26, // days to month/week\n            w: null, // weeks to month\n            M: 11, // months to year\n        };\n\n    // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n    function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n        return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n    }\n\n    function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {\n        var duration = createDuration(posNegDuration).abs(),\n            seconds = round(duration.as('s')),\n            minutes = round(duration.as('m')),\n            hours = round(duration.as('h')),\n            days = round(duration.as('d')),\n            months = round(duration.as('M')),\n            weeks = round(duration.as('w')),\n            years = round(duration.as('y')),\n            a =\n                (seconds <= thresholds.ss && ['s', seconds]) ||\n                (seconds < thresholds.s && ['ss', seconds]) ||\n                (minutes <= 1 && ['m']) ||\n                (minutes < thresholds.m && ['mm', minutes]) ||\n                (hours <= 1 && ['h']) ||\n                (hours < thresholds.h && ['hh', hours]) ||\n                (days <= 1 && ['d']) ||\n                (days < thresholds.d && ['dd', days]);\n\n        if (thresholds.w != null) {\n            a =\n                a ||\n                (weeks <= 1 && ['w']) ||\n                (weeks < thresholds.w && ['ww', weeks]);\n        }\n        a = a ||\n            (months <= 1 && ['M']) ||\n            (months < thresholds.M && ['MM', months]) ||\n            (years <= 1 && ['y']) || ['yy', years];\n\n        a[2] = withoutSuffix;\n        a[3] = +posNegDuration > 0;\n        a[4] = locale;\n        return substituteTimeAgo.apply(null, a);\n    }\n\n    // This function allows you to set the rounding function for relative time strings\n    function getSetRelativeTimeRounding(roundingFunction) {\n        if (roundingFunction === undefined) {\n            return round;\n        }\n        if (typeof roundingFunction === 'function') {\n            round = roundingFunction;\n            return true;\n        }\n        return false;\n    }\n\n    // This function allows you to set a threshold for relative time strings\n    function getSetRelativeTimeThreshold(threshold, limit) {\n        if (thresholds[threshold] === undefined) {\n            return false;\n        }\n        if (limit === undefined) {\n            return thresholds[threshold];\n        }\n        thresholds[threshold] = limit;\n        if (threshold === 's') {\n            thresholds.ss = limit - 1;\n        }\n        return true;\n    }\n\n    function humanize(argWithSuffix, argThresholds) {\n        if (!this.isValid()) {\n            return this.localeData().invalidDate();\n        }\n\n        var withSuffix = false,\n            th = thresholds,\n            locale,\n            output;\n\n        if (typeof argWithSuffix === 'object') {\n            argThresholds = argWithSuffix;\n            argWithSuffix = false;\n        }\n        if (typeof argWithSuffix === 'boolean') {\n            withSuffix = argWithSuffix;\n        }\n        if (typeof argThresholds === 'object') {\n            th = Object.assign({}, thresholds, argThresholds);\n            if (argThresholds.s != null && argThresholds.ss == null) {\n                th.ss = argThresholds.s - 1;\n            }\n        }\n\n        locale = this.localeData();\n        output = relativeTime$1(this, !withSuffix, th, locale);\n\n        if (withSuffix) {\n            output = locale.pastFuture(+this, output);\n        }\n\n        return locale.postformat(output);\n    }\n\n    var abs$1 = Math.abs;\n\n    function sign(x) {\n        return (x > 0) - (x < 0) || +x;\n    }\n\n    function toISOString$1() {\n        // for ISO strings we do not use the normal bubbling rules:\n        //  * milliseconds bubble up until they become hours\n        //  * days do not bubble at all\n        //  * months bubble up until they become years\n        // This is because there is no context-free conversion between hours and days\n        // (think of clock changes)\n        // and also not between days and months (28-31 days per month)\n        if (!this.isValid()) {\n            return this.localeData().invalidDate();\n        }\n\n        var seconds = abs$1(this._milliseconds) / 1000,\n            days = abs$1(this._days),\n            months = abs$1(this._months),\n            minutes,\n            hours,\n            years,\n            s,\n            total = this.asSeconds(),\n            totalSign,\n            ymSign,\n            daysSign,\n            hmsSign;\n\n        if (!total) {\n            // this is the same as C#'s (Noda) and python (isodate)...\n            // but not other JS (goog.date)\n            return 'P0D';\n        }\n\n        // 3600 seconds -> 60 minutes -> 1 hour\n        minutes = absFloor(seconds / 60);\n        hours = absFloor(minutes / 60);\n        seconds %= 60;\n        minutes %= 60;\n\n        // 12 months -> 1 year\n        years = absFloor(months / 12);\n        months %= 12;\n\n        // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n        s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n\n        totalSign = total < 0 ? '-' : '';\n        ymSign = sign(this._months) !== sign(total) ? '-' : '';\n        daysSign = sign(this._days) !== sign(total) ? '-' : '';\n        hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n        return (\n            totalSign +\n            'P' +\n            (years ? ymSign + years + 'Y' : '') +\n            (months ? ymSign + months + 'M' : '') +\n            (days ? daysSign + days + 'D' : '') +\n            (hours || minutes || seconds ? 'T' : '') +\n            (hours ? hmsSign + hours + 'H' : '') +\n            (minutes ? hmsSign + minutes + 'M' : '') +\n            (seconds ? hmsSign + s + 'S' : '')\n        );\n    }\n\n    var proto$2 = Duration.prototype;\n\n    proto$2.isValid = isValid$1;\n    proto$2.abs = abs;\n    proto$2.add = add$1;\n    proto$2.subtract = subtract$1;\n    proto$2.as = as;\n    proto$2.asMilliseconds = asMilliseconds;\n    proto$2.asSeconds = asSeconds;\n    proto$2.asMinutes = asMinutes;\n    proto$2.asHours = asHours;\n    proto$2.asDays = asDays;\n    proto$2.asWeeks = asWeeks;\n    proto$2.asMonths = asMonths;\n    proto$2.asQuarters = asQuarters;\n    proto$2.asYears = asYears;\n    proto$2.valueOf = valueOf$1;\n    proto$2._bubble = bubble;\n    proto$2.clone = clone$1;\n    proto$2.get = get$2;\n    proto$2.milliseconds = milliseconds;\n    proto$2.seconds = seconds;\n    proto$2.minutes = minutes;\n    proto$2.hours = hours;\n    proto$2.days = days;\n    proto$2.weeks = weeks;\n    proto$2.months = months;\n    proto$2.years = years;\n    proto$2.humanize = humanize;\n    proto$2.toISOString = toISOString$1;\n    proto$2.toString = toISOString$1;\n    proto$2.toJSON = toISOString$1;\n    proto$2.locale = locale;\n    proto$2.localeData = localeData;\n\n    proto$2.toIsoString = deprecate(\n        'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',\n        toISOString$1\n    );\n    proto$2.lang = lang;\n\n    // FORMATTING\n\n    addFormatToken('X', 0, 0, 'unix');\n    addFormatToken('x', 0, 0, 'valueOf');\n\n    // PARSING\n\n    addRegexToken('x', matchSigned);\n    addRegexToken('X', matchTimestamp);\n    addParseToken('X', function (input, array, config) {\n        config._d = new Date(parseFloat(input) * 1000);\n    });\n    addParseToken('x', function (input, array, config) {\n        config._d = new Date(toInt(input));\n    });\n\n    //! moment.js\n\n    hooks.version = '2.29.4';\n\n    setHookCallback(createLocal);\n\n    hooks.fn = proto;\n    hooks.min = min;\n    hooks.max = max;\n    hooks.now = now;\n    hooks.utc = createUTC;\n    hooks.unix = createUnix;\n    hooks.months = listMonths;\n    hooks.isDate = isDate;\n    hooks.locale = getSetGlobalLocale;\n    hooks.invalid = createInvalid;\n    hooks.duration = createDuration;\n    hooks.isMoment = isMoment;\n    hooks.weekdays = listWeekdays;\n    hooks.parseZone = createInZone;\n    hooks.localeData = getLocale;\n    hooks.isDuration = isDuration;\n    hooks.monthsShort = listMonthsShort;\n    hooks.weekdaysMin = listWeekdaysMin;\n    hooks.defineLocale = defineLocale;\n    hooks.updateLocale = updateLocale;\n    hooks.locales = listLocales;\n    hooks.weekdaysShort = listWeekdaysShort;\n    hooks.normalizeUnits = normalizeUnits;\n    hooks.relativeTimeRounding = getSetRelativeTimeRounding;\n    hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n    hooks.calendarFormat = getCalendarFormat;\n    hooks.prototype = proto;\n\n    // currently HTML5 input type only supports 24-hour formats\n    hooks.HTML5_FMT = {\n        DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // <input type=\"datetime-local\" />\n        DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // <input type=\"datetime-local\" step=\"1\" />\n        DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // <input type=\"datetime-local\" step=\"0.001\" />\n        DATE: 'YYYY-MM-DD', // <input type=\"date\" />\n        TIME: 'HH:mm', // <input type=\"time\" />\n        TIME_SECONDS: 'HH:mm:ss', // <input type=\"time\" step=\"1\" />\n        TIME_MS: 'HH:mm:ss.SSS', // <input type=\"time\" step=\"0.001\" />\n        WEEK: 'GGGG-[W]WW', // <input type=\"week\" />\n        MONTH: 'YYYY-MM', // <input type=\"month\" />\n    };\n\n    return hooks;\n\n})));\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc');  // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","'use strict';\n\nfunction checkDCE() {\n  /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n  if (\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n  ) {\n    return;\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    // This branch is unreachable because this function is only called\n    // in production, but the condition is true only in development.\n    // Therefore if the branch is still here, dead code elimination wasn't\n    // properly applied.\n    // Don't change the message. React DevTools relies on it. Also make sure\n    // this message doesn't occur elsewhere in this function, or it will cause\n    // a false positive.\n    throw new Error('^_^');\n  }\n  try {\n    // Verify that the code above has been dead code eliminated (DCE'd).\n    __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n  } catch (err) {\n    // DevTools shouldn't crash React, no matter what.\n    // We should still report in case we break this code.\n    console.error(err);\n  }\n}\n\nif (process.env.NODE_ENV === 'production') {\n  // DCE check should happen before ReactDOM bundle executes so that\n  // DevTools can report bad minification during injection.\n  checkDCE();\n  module.exports = require('./cjs/react-dom.production.min.js');\n} else {\n  module.exports = require('./cjs/react-dom.development.js');\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react.production.min.js');\n} else {\n  module.exports = require('./cjs/react.development.js');\n}\n","/** @license React v0.19.1\n * scheduler.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var f,g,h,k,l;\nif(\"undefined\"===typeof window||\"function\"!==typeof MessageChannel){var p=null,q=null,t=function(){if(null!==p)try{var a=exports.unstable_now();p(!0,a);p=null}catch(b){throw setTimeout(t,0),b;}},u=Date.now();exports.unstable_now=function(){return Date.now()-u};f=function(a){null!==p?setTimeout(f,0,a):(p=a,setTimeout(t,0))};g=function(a,b){q=setTimeout(a,b)};h=function(){clearTimeout(q)};k=function(){return!1};l=exports.unstable_forceFrameRate=function(){}}else{var w=window.performance,x=window.Date,\ny=window.setTimeout,z=window.clearTimeout;if(\"undefined\"!==typeof console){var A=window.cancelAnimationFrame;\"function\"!==typeof window.requestAnimationFrame&&console.error(\"This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills\");\"function\"!==typeof A&&console.error(\"This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills\")}if(\"object\"===\ntypeof w&&\"function\"===typeof w.now)exports.unstable_now=function(){return w.now()};else{var B=x.now();exports.unstable_now=function(){return x.now()-B}}var C=!1,D=null,E=-1,F=5,G=0;k=function(){return exports.unstable_now()>=G};l=function(){};exports.unstable_forceFrameRate=function(a){0>a||125<a?console.error(\"forceFrameRate takes a positive int between 0 and 125, forcing framerates higher than 125 fps is not unsupported\"):F=0<a?Math.floor(1E3/a):5};var H=new MessageChannel,I=H.port2;H.port1.onmessage=\nfunction(){if(null!==D){var a=exports.unstable_now();G=a+F;try{D(!0,a)?I.postMessage(null):(C=!1,D=null)}catch(b){throw I.postMessage(null),b;}}else C=!1};f=function(a){D=a;C||(C=!0,I.postMessage(null))};g=function(a,b){E=y(function(){a(exports.unstable_now())},b)};h=function(){z(E);E=-1}}function J(a,b){var c=a.length;a.push(b);a:for(;;){var d=c-1>>>1,e=a[d];if(void 0!==e&&0<K(e,b))a[d]=b,a[c]=e,c=d;else break a}}function L(a){a=a[0];return void 0===a?null:a}\nfunction M(a){var b=a[0];if(void 0!==b){var c=a.pop();if(c!==b){a[0]=c;a:for(var d=0,e=a.length;d<e;){var m=2*(d+1)-1,n=a[m],v=m+1,r=a[v];if(void 0!==n&&0>K(n,c))void 0!==r&&0>K(r,n)?(a[d]=r,a[v]=c,d=v):(a[d]=n,a[m]=c,d=m);else if(void 0!==r&&0>K(r,c))a[d]=r,a[v]=c,d=v;else break a}}return b}return null}function K(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}var N=[],O=[],P=1,Q=null,R=3,S=!1,T=!1,U=!1;\nfunction V(a){for(var b=L(O);null!==b;){if(null===b.callback)M(O);else if(b.startTime<=a)M(O),b.sortIndex=b.expirationTime,J(N,b);else break;b=L(O)}}function W(a){U=!1;V(a);if(!T)if(null!==L(N))T=!0,f(X);else{var b=L(O);null!==b&&g(W,b.startTime-a)}}\nfunction X(a,b){T=!1;U&&(U=!1,h());S=!0;var c=R;try{V(b);for(Q=L(N);null!==Q&&(!(Q.expirationTime>b)||a&&!k());){var d=Q.callback;if(null!==d){Q.callback=null;R=Q.priorityLevel;var e=d(Q.expirationTime<=b);b=exports.unstable_now();\"function\"===typeof e?Q.callback=e:Q===L(N)&&M(N);V(b)}else M(N);Q=L(N)}if(null!==Q)var m=!0;else{var n=L(O);null!==n&&g(W,n.startTime-b);m=!1}return m}finally{Q=null,R=c,S=!1}}\nfunction Y(a){switch(a){case 1:return-1;case 2:return 250;case 5:return 1073741823;case 4:return 1E4;default:return 5E3}}var Z=l;exports.unstable_IdlePriority=5;exports.unstable_ImmediatePriority=1;exports.unstable_LowPriority=4;exports.unstable_NormalPriority=3;exports.unstable_Profiling=null;exports.unstable_UserBlockingPriority=2;exports.unstable_cancelCallback=function(a){a.callback=null};exports.unstable_continueExecution=function(){T||S||(T=!0,f(X))};\nexports.unstable_getCurrentPriorityLevel=function(){return R};exports.unstable_getFirstCallbackNode=function(){return L(N)};exports.unstable_next=function(a){switch(R){case 1:case 2:case 3:var b=3;break;default:b=R}var c=R;R=b;try{return a()}finally{R=c}};exports.unstable_pauseExecution=function(){};exports.unstable_requestPaint=Z;exports.unstable_runWithPriority=function(a,b){switch(a){case 1:case 2:case 3:case 4:case 5:break;default:a=3}var c=R;R=a;try{return b()}finally{R=c}};\nexports.unstable_scheduleCallback=function(a,b,c){var d=exports.unstable_now();if(\"object\"===typeof c&&null!==c){var e=c.delay;e=\"number\"===typeof e&&0<e?d+e:d;c=\"number\"===typeof c.timeout?c.timeout:Y(a)}else c=Y(a),e=d;c=e+c;a={id:P++,callback:b,priorityLevel:a,startTime:e,expirationTime:c,sortIndex:-1};e>d?(a.sortIndex=e,J(O,a),null===L(N)&&a===L(O)&&(U?h():U=!0,g(W,e-d))):(a.sortIndex=c,J(N,a),T||S||(T=!0,f(X)));return a};\nexports.unstable_shouldYield=function(){var a=exports.unstable_now();V(a);var b=L(N);return b!==Q&&null!==Q&&null!==b&&null!==b.callback&&b.startTime<=a&&b.expirationTime<Q.expirationTime||k()};exports.unstable_wrapCallback=function(a){var b=R;return function(){var c=R;R=b;try{return a.apply(this,arguments)}finally{R=c}}};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/scheduler.production.min.js');\n} else {\n  module.exports = require('./cjs/scheduler.development.js');\n}\n","/**\n * what-input - A global utility for tracking the current input method (mouse, keyboard or touch).\n * @version v3.0.0\n * @link https://github.com/ten1seven/what-input\n * @license MIT\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(\"whatInput\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"whatInput\"] = factory();\n\telse\n\t\troot[\"whatInput\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports) {\n\n\tmodule.exports = (function() {\n\n\t  'use strict';\n\n\t  /*\n\t    ---------------\n\t    variables\n\t    ---------------\n\t  */\n\n\t  // array of actively pressed keys\n\t  var activeKeys = [];\n\n\t  // cache document.body\n\t  var body;\n\n\t  // boolean: true if touch buffer timer is running\n\t  var buffer = false;\n\n\t  // the last used input type\n\t  var currentInput = null;\n\n\t  // form input types\n\t  var formInputs = [\n\t    'button',\n\t    'input',\n\t    'select',\n\t    'textarea'\n\t  ];\n\n\t  // detect version of mouse wheel event to use\n\t  // via https://developer.mozilla.org/en-US/docs/Web/Events/wheel\n\t  var mouseWheel = detectWheel();\n\n\t  // list of modifier keys commonly used with the mouse and\n\t  // can be safely ignored to prevent false keyboard detection\n\t  var ignoreMap = [\n\t    16, // shift\n\t    17, // control\n\t    18, // alt\n\t    91, // Windows key / left Apple cmd\n\t    93  // Windows menu / right Apple cmd\n\t  ];\n\n\t  // mapping of events to input types\n\t  var inputMap = {\n\t    'keydown': 'keyboard',\n\t    'keyup': 'keyboard',\n\t    'mousedown': 'mouse',\n\t    'mousemove': 'mouse',\n\t    'MSPointerDown': 'pointer',\n\t    'MSPointerMove': 'pointer',\n\t    'pointerdown': 'pointer',\n\t    'pointermove': 'pointer',\n\t    'touchstart': 'touch'\n\t  };\n\n\t  // add correct mouse wheel event mapping to `inputMap`\n\t  inputMap[detectWheel()] = 'mouse';\n\n\t  // array of all used input types\n\t  var inputTypes = [];\n\n\t  // mapping of key codes to a common name\n\t  var keyMap = {\n\t    9: 'tab',\n\t    13: 'enter',\n\t    16: 'shift',\n\t    27: 'esc',\n\t    32: 'space',\n\t    37: 'left',\n\t    38: 'up',\n\t    39: 'right',\n\t    40: 'down'\n\t  };\n\n\t  // map of IE 10 pointer events\n\t  var pointerMap = {\n\t    2: 'touch',\n\t    3: 'touch', // treat pen like touch\n\t    4: 'mouse'\n\t  };\n\n\t  // touch buffer timer\n\t  var timer;\n\n\n\t  /*\n\t    ---------------\n\t    functions\n\t    ---------------\n\t  */\n\n\t  // allows events that are also triggered to be filtered out for `touchstart`\n\t  function eventBuffer(event) {\n\t    clearTimer();\n\t    setInput(event);\n\n\t    buffer = true;\n\t    timer = window.setTimeout(function() {\n\t      buffer = false;\n\t    }, 650);\n\t  }\n\n\t  function bufferedEvent(event) {\n\t    if (!buffer) setInput(event);\n\t  }\n\n\t  function clearTimer() {\n\t    window.clearTimeout(timer);\n\t  }\n\n\t  function setInput(event) {\n\t    var eventKey = key(event);\n\t    var value = inputMap[event.type];\n\t    if (value === 'pointer') value = pointerType(event);\n\n\t    // don't do anything if the value matches the input type already set\n\t    if (currentInput !== value) {\n\t      var activeElement = document.activeElement.nodeName.toLowerCase();\n\n\t      if (\n\t        (\n\t          // only if the user flag to allow input switching\n\t          // while interacting with form fields isn't set\n\t          !body.hasAttribute('data-whatinput-formswitching') &&\n\n\t          // support for legacy keyword\n\t          !body.hasAttribute('data-whatinput-formtyping') &&\n\n\t          // only if currentInput has a value\n\t          currentInput &&\n\n\t          formInputs.indexOf(activeElement) > -1\n\t        ) || (\n\t          // ignore modifier keys\n\t          ignoreMap.indexOf(eventKey) > -1\n\t        )\n\t      ) {\n\t        // ignore keyboard typing and do nothing\n\t      } else {\n\t        switchInput(value);\n\t      }\n\t    }\n\n\t    if (value === 'keyboard') logKeys(eventKey);\n\t  }\n\n\t  function switchInput(string) {\n\t    currentInput = string;\n\t    body.setAttribute('data-whatinput', currentInput);\n\n\t    if (inputTypes.indexOf(currentInput) === -1) inputTypes.push(currentInput);\n\t  }\n\n\t  function key(event) {\n\t    return (event.keyCode) ? event.keyCode : event.which;\n\t  }\n\n\t  function target(event) {\n\t    return event.target || event.srcElement;\n\t  }\n\n\t  function pointerType(event) {\n\t    if (typeof event.pointerType === 'number') {\n\t      return pointerMap[event.pointerType];\n\t    } else {\n\t      return (event.pointerType === 'pen') ? 'touch' : event.pointerType; // treat pen like touch\n\t    }\n\t  }\n\n\t  // keyboard logging\n\t  function logKeys(eventKey) {\n\t    if (activeKeys.indexOf(keyMap[eventKey]) === -1 && keyMap[eventKey]) activeKeys.push(keyMap[eventKey]);\n\t  }\n\n\t  function unLogKeys(event) {\n\t    var eventKey = key(event);\n\t    var arrayPos = activeKeys.indexOf(keyMap[eventKey]);\n\n\t    if (arrayPos !== -1) activeKeys.splice(arrayPos, 1);\n\t  }\n\n\t  function bindEvents() {\n\t    body = document.body;\n\n\t    // pointer events (mouse, pen, touch)\n\t    if (window.PointerEvent) {\n\t      body.addEventListener('pointerdown', bufferedEvent);\n\t      body.addEventListener('pointermove', bufferedEvent);\n\t    } else if (window.MSPointerEvent) {\n\t      body.addEventListener('MSPointerDown', bufferedEvent);\n\t      body.addEventListener('MSPointerMove', bufferedEvent);\n\t    } else {\n\n\t      // mouse events\n\t      body.addEventListener('mousedown', bufferedEvent);\n\t      body.addEventListener('mousemove', bufferedEvent);\n\n\t      // touch events\n\t      if ('ontouchstart' in window) {\n\t        body.addEventListener('touchstart', eventBuffer);\n\t      }\n\t    }\n\n\t    // mouse wheel\n\t    body.addEventListener(mouseWheel, bufferedEvent);\n\n\t    // keyboard events\n\t    body.addEventListener('keydown', eventBuffer);\n\t    body.addEventListener('keyup', eventBuffer);\n\t    document.addEventListener('keyup', unLogKeys);\n\t  }\n\n\n\t  /*\n\t    ---------------\n\t    utilities\n\t    ---------------\n\t  */\n\n\t  // detect version of mouse wheel event to use\n\t  // via https://developer.mozilla.org/en-US/docs/Web/Events/wheel\n\t  function detectWheel() {\n\t    return mouseWheel = 'onwheel' in document.createElement('div') ?\n\t      'wheel' : // Modern browsers support \"wheel\"\n\n\t      document.onmousewheel !== undefined ?\n\t        'mousewheel' : // Webkit and IE support at least \"mousewheel\"\n\t        'DOMMouseScroll'; // let's assume that remaining browsers are older Firefox\n\t  }\n\n\n\t  /*\n\t    ---------------\n\t    init\n\n\t    don't start script unless browser cuts the mustard,\n\t    also passes if polyfills are used\n\t    ---------------\n\t  */\n\n\t  if (\n\t    'addEventListener' in window &&\n\t    Array.prototype.indexOf\n\t  ) {\n\n\t    // if the dom is already ready already (script was placed at bottom of <body>)\n\t    if (document.body) {\n\t      bindEvents();\n\n\t    // otherwise wait for the dom to load (script was placed in the <head>)\n\t    } else {\n\t      document.addEventListener('DOMContentLoaded', bindEvents);\n\t    }\n\t  }\n\n\n\t  /*\n\t    ---------------\n\t    api\n\t    ---------------\n\t  */\n\n\t  return {\n\n\t    // returns string: the current input type\n\t    ask: function() { return currentInput; },\n\n\t    // returns array: currently pressed keys\n\t    keys: function() { return activeKeys; },\n\n\t    // returns array: all the detected input types\n\t    types: function() { return inputTypes; },\n\n\t    // accepts string: manually set the input type\n\t    set: switchInput\n\t  };\n\n\t}());\n\n\n/***/ }\n/******/ ])\n});\n;","module.exports = Modernizr;","module.exports = jQuery;","/*!\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"],"names":["module","exports","commonjsGlobal","globalThis","window","g","self","getDefaultExportFromCjs","x","__esModule","Object","prototype","hasOwnProperty","call","getAugmentedNamespace","n","f","default","a","apply","this","arguments","defineProperty","value","keys","forEach","k","d","getOwnPropertyDescriptor","get","enumerable","browser$1","src","events","util$1","UNKNOWN_FUNCTION","parse","stackString","split","reduce","stack","line","parseResult","parseChrome","parseWinjs","parseGecko","parseNode","parseJSC","push","chromeRe","chromeEvalRe","parts","exec","isNative","indexOf","isEval","submatch","file","methodName","lineNumber","column","winjsRe","geckoRe","geckoEvalRe","javaScriptCoreRe","nodeRe","require$$0$1","freeze","__proto__","__createBinding","create","o","m","k2","undefined","desc","writable","configurable","__setModuleDefault","v","__importStar","mod","result","__awaiter","thisArg","_arguments","P","generator","adopt","resolve","Promise","reject","fulfilled","step","next","e","rejected","done","then","__generator","body","y","t","_","label","sent","trys","ops","verb","Symbol","iterator","op","TypeError","pop","length","logDeprecatedMethod","globalThisOrWindow","isBrowserConfig","clone","formatCGIData","filterUrl","filter","generateStackTrace","endpoint","instrumentConsole","instrument","isErrorObject","makeNotice","logger","sanitize","shallowClone","runAfterNotifyHandlers","runBeforeNotifyHandlers","getSourceForBacktrace","getCauses","calculateBacktraceShift","DEFAULT_BACKTRACE_SHIFT","makeBacktrace","objectIsExtensible","objectIsEmpty","mergeNotice","merge","stackTraceParser","obj1","obj2","notice1","notice2","context","obj","isExtensible","filterHbSourceCode","console","backtrace","map","method","number","splice","err","debug","isFrameFromHbSourceCode","frame","hasHbFile","hasHbMethod","toLowerCase","shift","i","nextFrame","notice","cause","causes","class","name","message","getSourceFileHandler","index","trace","fileContent","_a","getSourceCodeSnippet","handlers","results","len","handlerResult","handler","error","afterNotify","maxDepth","seenObjects","seen","canSerialize","typeOfObj","test","serialize","depth","toString","Array","isArray","safeSerialize","ret","concat","client","log","args","_i","config","unshift","info","warn","thing","String","Error","object","replacement","original","__hb_original","_e","_consoleAlreadyInstrumented","listeners","_window","level","slice","listener","Function","base","path","trim","replace","maxStackSize","curr","callee","RegExp","$1","caller","join","filters","is","newObj","filterMatch","key","type","klass","url","query","pair","vars","prefix","formattedVars","formattedKey","toUpperCase","JSON","stringify","fileData","sourceRadius","lines","end","async","_deprecatedMethodCalls","oldMethod","newMethod","callCountThreshold","msg","util_1$4","default_1$4","shouldReloadOnConfigure","load","sendEventsToInsights","eventsEnabled","data","severity","event","store","GlobalStore","util_1$3","contents","breadcrumbsLimit","available","getContents","setContext","addBreadcrumb","breadcrumb","breadcrumbs","clear","run","callback","throttled_events_logger","NdJson","item","require$$0","defaults","CONFIG","apiKey","environment","hostname","projectRoot","component","action","revision","reportData","breadcrumbsEnabled","maxBreadcrumbs","maxObjectDepth","developmentEnvironments","tags","enableUncaught","enableUnhandledRejection","afterUncaught","__plugins","__assign$2","__assign","assign","s","p","__awaiter$2","__generator$2","ThrottledEventsLogger","json_nd_1","util_1$2","defaults_1$1","transport","queue","isProcessing","originalLogger","configure","opts","payload","processQueue","flushAsync","send","_this","setTimeout","catch","eventsData","makeHttpRequest","headers","_b","_c","_d","__assign$1","__awaiter$1","__generator$1","Client","util_1$1","store_1","throttled_events_logger_1","defaults_1","TAG_SEPARATOR","NOT_BLANK","__pluginsLoaded","__store","__beforeNotifyHandlers","__afterNotifyHandlers","__notifier","version","__initStore","__transport","__eventsLogger","getVersion","getNotifier","setNotifier","notifier","loadPlugins","plugin","beforeNotify","resetContext","notify","noticeable","extra","sourceCodeData","preConditionsResult","__runPreconditions","__send","_err","notifyAsync","partialNotice","originalAfterNotify","noticeTags","__constructTags","contextTags","configTags","uniqueTags","metadata","category","timestamp","Date","toISOString","logEvent","event_type","ts","__getBreadcrumbs","__getContext","__developmentMode","includes","__buildPayload","cgiData","enabled","trail","__breadcrumbs","fingerprint","request","cgi_data","params","session","server","project_root","environment_name","time","toUTCString","details","tag","preConditionError","beforeNotifyResult","some","allSettled","status","originalBacktrace","__getSourceFileHandler","sourcePerTrace","source","res","statusCode","uuid","id","types","__exportStar","__importDefault","Plugins","Util","Types","events_1","client_1","util","preferCatch","encodeCookie","decodeCookie","localURLPathname","parseURL","nativeFetch","stringTextOfElement","stringSelectorOfElement","stringNameOfElement","globalThisOrWindow$7","element","tagName","stringClassNames","getAttribute","className","attrName","attr","siblings","getSiblings","parentNode","parentName","text","textContent","innerText","truncate","global","fetch","document","sandbox","createElement","style","display","head","appendChild","contentWindow","removeChild","func","match","protocol","host","pathname","parsed","parsedDocURL","URL","string","cookies","nodes","childNodes","siblings_1","node","substr","atob","ErrorEvent","colno","onerror","onError","ignoreNextOnError","currentTimeout","core_1$6","instrument$4","globalThisOrWindow$6","ignoreOnError","clearTimeout","col","onunhandledrejection","core_1$5","instrument$3","globalThisOrWindow$5","default_1$3","promiseRejectionEvent","reason","fileName","stackFallback","core_1$4","util_1","sanitize$1","instrument$2","globalThisOrWindow$4","default_1$2","inspectArray","addEventListener","selector","target","location","XMLHttpRequest","xhr","rawUrl","__hb_xhr","onreadystatechangeHandler","readyState","status_code","onreadystatechange","input","Request","response","lastHref","href","_event","recordUrlChange","history","historyWrapper","from","to","timers","core_1$3","instrument$1","globalThisOrWindow$3","default_1$1","instrumentTimer","wrapOpts","delay","args_1","__wrap","event_listeners","core_1$2","globalThisOrWindow$2","default_1","prop","useCapture","wantsUntrusted","handleEvent","BrowserTransport","core_1$1","globalThisOrWindow$1","objectEntries","entries","defaultHeaders","options","headerArray","requestInit","feedbackForm","BrowserFeedbackForm","scriptUrl","appendUserFeedbackTag","script","setAttribute","onLoad","onload","isUserFeedbackUrlAlreadyVisible","feedbackScriptUrl","scripts","show","lastNoticeId","userFeedbackEndpoint","noticeId","extendStatics","__extends","b","setPrototypeOf","__","constructor","getUserFeedbackScriptUrl","core_1","onerror_1","onunhandledrejection_1","breadcrumbs_1","timers_1","event_listeners_1","transport_1","feedback_form_1","getProjectRoot","majorMinorVersion","Honeybadger","_super","maxErrors","userAgent","__errorsSent","__lastWrapErr","__lastNoticeId","__exceedsMaxErrors","__incrementErrorsCount","_error","resetMaxErrors","factory","checkIn","_id","showUserFeedbackForm","getUserFeedbackSubmitUrl","cookiesObject","HTTP_USER_AGENT","HTTP_REFERER","HTTP_COOKIE","navigator","referrer","___hb","NOTIFIER","singleton","core_2","DefaultErrorComponent","HoneybadgerErrorBoundary","Component","props","super","state","errorOccurred","getDerivedStateFromError","componentDidMount","honeybadger","_notice","showUserFeedbackFormOnError","componentDidCatch","errorInfo","setState","getErrorComponent","ErrorComponent","render","children","defaultProps","root","lib","currency","symbol","format","decimal","thousand","precision","grouping","nativeMap","nativeIsArray","isString","charCodeAt","isObject","defs","j","checkPrecision","val","Math","round","abs","isNaN","checkCurrencyFormat","settings","pos","neg","zero","unformat","regex","unformatted","parseFloat","toFixed","power","pow","formatNumber","usePrecision","negative","parseInt","formatMoney","formats","formatColumn","list","padAfterSymbol","maxLength","formatted","fVal","accounting","locales","React","i18nSetup","I18n","__LOCALE__","I18N_RUNTIME_TRANSLATIONS","originalMissingTranslation","scope","fallbackLocales","i18nFallbacks","locale","__usedFallbackLocales","nextFallbackLocaleIndex","exposeComponents","mountableComponents","Venuu","REACT_COMPONENTS","exposeLazyComponents","REACT_LAZY_COMPONENTS","mountComponentFromNode","componentName","componentId","normalComponent","loadLazyComponent","mountComponent","REACT_PROPS","ReactDOM","mountAllComponents","reactNodes","querySelectorAll","moment","getCookies","all","cookie","substring","decodeURIComponent","cookieCategories","consentGivenForCategory","rawValue","cookieValue","unescape","cookiePairs","cookieArr","oneOf","getConsentedCookieCategories","byteToHex","unsafeStringify","arr","offset","Uint8Array","z","ROTL","v5","hashfunc","generateUUID","namespace","buf","_namespace","str","encodeURIComponent","bytes","stringToBytes","set","DNS","v35","K","H","l","N","ceil","M","Uint32Array","floor","W","c","T","FIRST_16_BYTES","REMAINING_STRING","extractRemarketingDetails","nullable","record","page","loadAnalytics","analytics","retrieve","setAnonymousId","extractUserTrackingData","withDefault","email","customer_type","emailIdFromUrl","rawEmailDistinctId","$","param","_ref","userEmail","uuidv5","generateUserId","identifyUser","userIdFromUrl","distinctIdFromUrl","emailUserIdFromUrl","userIdFromCookie","customerType","commonTraits","currentSite","traits","Source","identify","ready","socialMediaInitCondition","controller","fbAsyncInit","FB","init","xfbml","js","fjs","getElementsByTagName","getElementById","insertBefore","initializeFoundation","sidebarMenuHeight","outerHeight","BLANK_RE","foundation","active_class","destination_threshold","throttle_delay","tooltip","touch_close_text","abide","validators","valuePlaceholder","el","required","originalTopBarToggle","Foundation","libs","topbar","toggle","_len","_key","isTopNavigationExpanded","first","hasClass","toggleClass","toggleSidebarNavigationBasedOnTopbarVisibility","$sidebar","$footer","$wrapper","wrapperWidth","outerWidth","waypoint","stuckClass","css","width","direction","top","position","removeAttr","addClass","resize","satisfiesMediaQuery","waypoints","removeClass","on","ConsoleApiName","globalConsole","originalConsoleMethods","PREFIX","bind","DOCS_ORIGIN","DOCS_TROUBLESHOOTING","MORE_DETAILS","catchUserErrors","fn","errorMsg","onMonitorErrorCollected","__spreadArray","pack","ar","debugMode","setDebugMode","newDebugMode","monitor","callMonitored","displayIfDebugEnabled","candidate","search","arrayLike","array","Set","find","predicate","objectValues","startsWith","toAssign","getGlobalObject","globalObject","_dd_temp_","ONE_KIBI_BYTE","ONE_MEBI_BYTE","HAS_MULTI_BYTES_CHARACTERS","computeBytesCount","TextEncoder","encode","Blob","size","getZoneJsOriginalValue","browserWindow","Zone","__symbol__","timeoutId","throttle","wait","pendingExecutionWithParameters","pendingTimeoutId","needLeadingExecution","leading","needTrailingExecution","trailing","inWaitPeriod","throttled","parameters","cancel","noop","jsonStringify","replacer","space","restoreObjectPrototypeToJson","detachToJsonMethod","restoreArrayPrototypeToJson","restoreValuePrototypeToJson","getPrototypeOf","restoreValueToJson","objectToJson","toJSON","objectHasValue","isEmptyObject","CUSTOMER_DATA_BYTES_LIMIT","CUSTOMER_COMPRESSED_DATA_BYTES_LIMIT","BYTES_COMPUTATION_THROTTLING_DELAY","createCustomerDataTrackerManager","compressionStatus","customerDataTrackers","Map","alreadyWarned","checkCustomerDataLimit","initialBytesCount","bytesCountLimit","bytesCount","tracker","getBytesCount","displayCustomerDataLimitReachedWarning","createDetachedTracker","createCustomerDataTracker","getOrCreateTracker","has","setCompressionStatus","newCompressionStatus","getCompressionStatus","stop","bytesCountCache","computeBytesCountThrottled","cancelComputeBytesCount","resetBytesCount","updateCustomerData","resetCustomerData","getType","mergeInto","destination","circularReferenceChecker","WeakSet","set_1","hasAlreadyBeenSeen","add","createCircularReferenceChecker","getTime","flags","ignoreCase","multiline","sticky","unicode","merged_1","merged","deepClone","combine","sources","sources_1","SANITIZE_DEFAULT_MAX_CHARACTER_COUNT","JSON_PATH_ROOT_ELEMENT","KEY_DECORATION_LENGTH","maxCharacterCount","containerQueue","visitedObjectsWithPath","WeakMap","sanitizedData","sanitizeProcessor","serializedSanitizedData","accumulatedCharacterCount","containerToProcess","separatorLength","targetData","warnOverCharacterLimit","parentPath","sourceToSanitize","tryToApplyToJSON","description","sanitizePrimitivesAndFunctions","sanitizedSource","Event","isTrusted","sanitizeObjects","sourceAsObject","currentPath","changeType","Observable","onFirstSubscribe","observers","subscribe","onLastUnsubscribe","unsubscribe","other","observer","mergeObservables","observables","globalObservable","subscriptions","observable","subscription","createContextManager","customerDataTracker","changeObservable","contextManager","getContext","newContext","clearContext","setContextProperty","property","removeContextProperty","TrackingConsent","GRANTED","NOT_GRANTED","configuration","eventTarget","eventName","addEventListeners","eventNames","once","capture","passive","listenerWithMonitor","__ddIsTrusted","allowUntrustedEvents","listenerTarget","EventTarget","remove","CONTEXT_STORE_KEY_PREFIX","storageListeners","storeContextManager","productKey","customerDataType","storageKey","buildStorageKey","getFromStorage","rawContext","localStorage","getItem","setItem","createIdentityEncoder","output","outputBytesCount","isAsync","isEmpty","write","additionalEncodedBytesCount","finish","finishSync","rawBytesCount","pendingData","estimateEncodedBytesCount","computeStackTrace","ex","stackProperty","tryToGetString","exString","stackFrame","CHROME_LINE_RE","CHROME_EVAL_RE","parseChromeLine","CHROME_ANONYMOUS_FUNCTION_RE","parseChromeAnonymousLine","WINJS_LINE_RE","parseWinLine","GECKO_LINE_RE","GECKO_EVAL_RE","parseGeckoLine","fileUrl","filePosition","computeStackTraceFromOnErrorMessage","messageObj","ERROR_TYPES_RE","tryToParseMessage","createHandlingStack","formattedStack","stackTrace","toStackTraceString","formatErrorMessage","ExperimentalFeature","NO_ERROR_STACK_PRESENT_MESSAGE","computeRawError","originalError","handlingStack","startClocks","nonErrorPrefix","handling","isErrorInstance","isError","computeMessage","hasUsableStack","flattenErrorCauses","tryToGetFingerprint","dd_fingerprint","parentSource","currentError","enabledExperimentalFeatures","initFeatureFlags","enableExperimentalFeatures","flag","isExperimentalFeatureEnabled","featureName","getExperimentalFeatures","INTAKE_SITE_STAGING","INTAKE_SITE_FED_STAGING","INTAKE_SITE_US1","INTAKE_SITE_EU1","PCI_INTAKE_HOST_US1","INTAKE_URL_PARAMETERS","performDraw","threshold","random","num","decimals","isNumber","navigationStart","ONE_SECOND","ONE_MINUTE","ONE_HOUR","ONE_YEAR","relativeToClocks","relative","timeStamp","getCorrectedTimeStamp","relativeTime","correctedOrigin","dateNow","performance","now","getNavigationStart","addDuration","getTimeStamp","toServerDuration","duration","timeStampNow","relativeNow","clocksNow","clocksOrigin","elapsed","start","getRelativeTime","timing","sendToExtension","__ddBrowserSdkExtensionCallback","getConnectivity","onLine","interfaces","connection","effective_type","effectiveType","removeItem","BUFFER_LIMIT","buffer","drain","arg","TelemetryType","usage","ALLOWED_FRAME_URLS","TELEMETRY_EXCLUDED_SITES","preStartTelemetryBuffer","onRawTelemetryEventCollected","startTelemetry","telemetryService","contextProvider","alreadySentEvents","telemetryEnabled","site","telemetrySampleRate","telemetryEnabledPerType","telemetryConfigurationSampleRate","telemetryUsageSampleRate","runtimeEnvInfo","is_local_file","is_worker","rawEvent","stringifiedEvent","maxTelemetryEventsPerPage","event_1","date","service","_dd","format_version","telemetry","runtime_env","connectivity","sdk_setup","experimental_features","toTelemetryEvent","addTelemetryError","setContextProvider","provider","addTelemetryDebug","kind","scrubCustomerFrames","formatError","addTelemetryUsage","allowedFrameUrl","sanitizeUser","newUser","user","displayAlreadyInitializedError","sdkName","initConfiguration","silentMultipleInit","placeholder","COMMA_SEPARATED_KEY_VALUE","findCommaSeparatedValue","rawString","lastIndex","safeTruncate","suffix","lastChar","correctedLength","startVitalCollection","lifeCycle","pageStateHistory","customVitalsState","addDurationVital","vital","wasInPageStateDuringPeriod","isValid","valueComputedBySdk","rawRumEvent","computed_value","startTime","customerContext","domainContext","processVital","startDurationVital","stopDurationVital","nameOrRef","vitalsByName","vitalsByReference","reference","__dd_vital_reference","stopCallback","vitalStart","stopOptions","stopClocks","buildDurationVital","delete","getEventBridge","eventBridgeGlobal","DatadogEventBridge","getCapabilities","getPrivacyLevel","getAllowedWebViewHosts","eventType","viewId","view","bridgeSupports","capability","bridge","canUseEventBridge","currentHost","allowedHost","instrumentMethod","targetPrototype","onPreCall","computeHandlingStack","stopped","instrumentation","postCallCallback","onPostCall","instrumentSetter","after","originalDescriptor","stoppedInstrumentation","instrumentationWrapper","normalizeUrl","buildUrl","supportedURL","isURLSupported","originalURL","getSupportedUrl","doc","anchorElement","baseElement","implementation","createHTMLDocument","fetchObservable","initCookieParsed","getCurrentSiteCache","initFetchObservable","methodFromParams","responsePromise","startContext","reportFetch","partialContext","responseType","isAborted","signal","aborted","DOMException","code","ABORT_ERR","afterSend","beforeSend","setCookie","expireDelay","setTime","expires","sameSite","crossSite","domain","secure","partitioned","getCookie","getInitCookie","findCommaSeparatedValues","deleteCookie","browserCache","SYNTHETICS_TEST_ID_COOKIE_NAME","SYNTHETICS_RESULT_ID_COOKIE_NAME","SYNTHETICS_INJECTS_RUM_COOKIE_NAME","willSyntheticsInjectRum","Boolean","_DATADOG_SYNTHETICS_INJECTS_RUM","detectBrowserCached","chrome","vendor","documentMode","detectBrowser","SESSION_STORE_KEY","SESSION_TIME_OUT_DELAY","SESSION_EXPIRATION_DELAY","SESSION_COOKIE_EXPIRATION_DELAY","SessionPersistence","COOKIE","LOCAL_STORAGE","SESSION_ENTRY_REGEXP","SESSION_ENTRY_SEPARATOR","EXPIRED","getExpiredSessionState","previousSessionState","expiredSessionState","isExpired","ANONYMOUS_USER_TRACKING","anonymousId","isSessionInNotStartedState","isSessionStarted","isSessionInExpiredState","sessionState","created","Number","expire","expandSessionState","toSessionString","toSessionState","sessionString","isValidSessionString","entry","matches","OLD_SESSION_COOKIE_NAME","OLD_RUM_COOKIE_NAME","OLD_LOGS_COOKIE_NAME","RUM_SESSION_KEY","LOGS_SESSION_KEY","selectCookieStrategy","cookieOptions","useSecureSessionCookie","usePartitionedCrossSiteSessionCookie","useCrossSiteSessionCookie","trackSessionAcrossSubdomains","testCookieName","domainLevels","candidateDomain","getCurrentSite","buildCookieOptions","testCookieValue","isCookieCorrectlySet","areCookiesAuthorized","initCookieStrategy","cookieStore","isLockEnabled","persistSession","retrieveSession","retrieveSessionCookie","expireSession","expireSessionCookie","cookieStoreStrategy","oldSessionId","oldRumType","oldLogsType","tryOldCookiesMigration","LOCAL_STORAGE_TEST_KEY","selectLocalStorageStrategy","testKey","retrievedId","persistInLocalStorage","retrieveSessionFromLocalStorage","expireSessionFromLocalStorage","ongoingOperations","LOCK_RETRY_DELAY","LOCK_MAX_TRIES","bufferedOperations","processSessionStoreOperations","operations","sessionStoreStrategy","numberOfRetries","persistWithLock","lock","currentLock","retrieveStore","currentStore","retryLater","processedSession","process","sessionStore","currentNumberOfRetries","nextOperations","STORAGE_POLL_DELAY","selectSessionStoreStrategyType","sessionPersistence","sessionStoreStrategyType","allowFallbackToLocalStorage","startSessionStore","computeSessionState","sessionCache","renewObservable","expireObservable","sessionStateUpdateObservable","watchSessionTimeoutId","synchronizeSession","startSession","synchronizedSession","trackingType","isTracked","expandOrRenewSessionState","hasSessionInCache","renewSessionInCache","throttledExpandOrRenewSession","cancelExpandOrRenewSession","isSessionInCacheOutdated","previousState","newState","expandOrRenewSession","expandSession","getSession","restartSession","updateSessionState","partialSessionState","createEndpointBuilder","trackType","configurationTags","buildUrlWithParameters","proxy","normalizedProxyUrl_1","internalAnalyticsSubdomain","usePciIntake","domainParts","extension","buildEndpointHost","createEndpointUrlWithParametersBuilder","build","api","clientToken","retry","encoding","count","lastFailureStatus","reverse","buildEndpointParameters","urlPrefix","TAG_SIZE_LIMIT","buildTag","valueSizeLimit","supportUnicodePropertyEscapes","hasForbiddenCharacters","sanitizedValue","computeTransportConfiguration","env","datacenter","buildTags","endpointBuilders","logsEndpointBuilder","rumEndpointBuilder","sessionReplayEndpointBuilder","computeEndpointBuilders","replicaConfiguration","replica","replicaEndpointBuilders","applicationId","computeReplicaConfiguration","createIdentifierImplementationCache","DefaultPrivacyLevel","ALLOW","MASK","MASK_USER_INPUT","TraceContextInjection","ALL","SAMPLED","isSampleRate","sampleRate","validateAndBuildConfiguration","sessionSampleRate","trackingConsent","storeContextsAcrossPages","batchBytesLimit","eventRateLimiterThreshold","flushTimeout","batchMessagesLimit","messageBytesLimit","isMatchOption","itemType","matchList","useStartsWith","getCrypto","crypto","msCrypto","createSpanIdentifier","createIdentifier","bits","CONSISTENT_TRACE_SAMPLING","getRandomValues","BigUint64Array","areBigIntIdentifiersSupported","createIdentifierUsingBigInt","createIdentifierUsingUint32Array","BigInt","radix","high","low","toPaddedHexadecimalString","traceId","clearTracingIfNeeded","spanId","traceSampled","injectHeadersIfTracingAllowed","sessionManager","inject","findTrackedSession","tracingOption","allowedTracingUrls","identifier","knuthFactor","twoPow64","isTraceSampled","traceSampleRate","traceContextInjection","propagatorTypes","tracingHeaders","propagatorType","traceparent","b3","makeTracingHeaders","DEFAULT_PROPAGATOR_TYPES","validateAndBuildRumConfiguration","sessionReplaySampleRate","excludedActivityUrls","tracingOptions","option","expectedItem","validateAndBuildTracingOptions","baseConfiguration","actionNameAttribute","startSessionReplayRecordingManually","rulePsr","workerUrl","compressIntakeRequests","trackUserInteractions","trackViewsManually","trackResources","trackLongTasks","subdomain","defaultPrivacyLevel","enablePrivacyForActionName","customerDataTelemetrySampleRate","plugins","getSelectedTracingPropagators","usedTracingPropagators","REMOTE_CONFIGURATION_URL","fetchAndApplyRemoteConfiguration","responseText","displayRemoteConfigurationFetchingError","open","remoteConfigurationId","fetchRemoteConfiguration","remoteInitConfiguration","applyRemoteConfiguration","createPreStartStrategy","getCommonContext","trackingConsentState","doStartRum","firstStartViewCall","deflateWorker","cachedInitConfiguration","cachedConfiguration","ignoreInitIfSyntheticsWillInjectRum","startDeflateWorker","bufferApiCalls","trackingConsentStateSubscription","tryStartRum","isGranted","initialViewOptions","startRumResult","doInit","eventBridgeAvailable","overrideInitConfigurationForBridge","addTelemetryConfiguration","baseSerializedConfiguration","session_sample_rate","telemetry_sample_rate","telemetry_configuration_sample_rate","telemetry_usage_sample_rate","use_before_send","use_cross_site_session_cookie","use_partitioned_cross_site_session_cookie","use_secure_session_cookie","use_proxy","silent_multiple_init","track_session_across_subdomains","session_persistence","allow_fallback_to_local_storage","store_contexts_across_pages","allow_untrusted_events","tracking_consent","session_replay_sample_rate","start_session_replay_recording_manually","trace_sample_rate","trace_context_injection","action_name_attribute","use_allowed_tracing_urls","selected_tracing_propagators","default_privacy_level","enable_privacy_for_action_name","use_excluded_activity_urls","use_worker_url","compress_intake_requests","track_views_manually","track_user_interactions","track_resources","track_long_task","getConfigurationTelemetry","serializeRumConfiguration","tryToInit","publicApi","parameter","plugins_1","callPluginsMethod","REMOTE_CONFIGURATION","getInternalContext","stopSession","addTiming","startView","setViewName","setViewContext","setViewContextProperty","addAction","commonContext","addError","providedError","addFeatureFlagEvaluation","PageExitReason","HIDDEN","UNLOADING","PAGEHIDE","FROZEN","isPageExitReason","getMutationObserverConstructor","MutationObserver","originalInstance","ErrorSource","AGENT","CONSOLE","CUSTOM","LOGGER","NETWORK","SOURCE","REPORT","createEventRateLimiter","limit","onLimitReached","eventCount","allowNextEvent","isLimitReached","getSyntheticsContext","testId","_DATADOG_SYNTHETICS_PUBLIC_ID","resultId","_DATADOG_SYNTHETICS_RESULT_ID","getSyntheticsResultId","test_id","result_id","injected","limitModification","modifiableFieldPaths","modifier","fieldPath","fieldType","newValue","current","field","isValidObjectContaining","newType","fields","isValidObject","modifiableFieldPathsByEvent","VIEW_MODIFIABLE_FIELD_PATHS","USER_CUSTOMIZABLE_FIELD_PATHS","ROOT_MODIFIABLE_FIELD_PATHS","startRumAssembly","viewHistory","urlContexts","actionContexts","displayContext","ciVisibilityContext","reportError","WRITABLE_RESOURCE_GRAPHQL","eventRateLimiters","syntheticsContext","savedCommonContext","viewHistoryEntry","findView","urlContext","findUrl","actionId","findActionId","serverRumEvent","drift","browser_sdk_version","application","synthetics","ci_test","has_replay","hasReplay","sampled_for_replay","sessionReplay","anonymous_id","usr","rateLimitReached","shouldSend","LifeCycle","AbstractLifeCycle","callbacks","eventCallbacks","END_OF_TIMES","Infinity","CLEAR_OLD_VALUES_INTERVAL","createValueHistory","maxEntries","clearOldValuesInterval","oldTimeThreshold","endTime","clearOldValues","close","returnInactive","entries_1","closeActive","latestEntry","findAll","reset","xhrObservable","VIEW_CONTEXT_TIME_OUT_DELAY","xhrContexts","initXhrObservable","stopInstrumentingStart","openXhr","stopInstrumentingSend","hasBeenReported","stopInstrumentingOnReadyStateChange","DONE","onEnd","unsubscribeLoadEndListener","completeContext","sendXhr","stopInstrumentingAbort","abortXhr","createXhrObservable","FAKE_INITIAL_DOCUMENT","RESOURCE_TYPES","initiatorType","computeResourceEntryType","isValidUrl","getPathName","RESOURCE_TYPES_1","isType","areInOrder","numbers","computeResourceEntryDuration","responseEnd","computeResourceEntryDetails","hasValidResourceEntryTimings","fetchStart","workerStart","redirectStart","redirectEnd","domainLookupStart","domainLookupEnd","connectStart","secureConnectionStart","connectEnd","requestStart","responseStart","download","formatTiming","first_byte","worker","connect","ssl","dns","redirect","hasValidResourceEntryDuration","areCommonTimingsInOrder","areRedirectionTimingsInOrder","hasRedirection","origin","computeResourceEntryProtocol","nextHopProtocol","computeResourceEntryDeliveryType","deliveryType","computeResourceEntrySize","encodedBodySize","decodedBodySize","encoded_body_size","decoded_body_size","transfer_size","transferSize","isAllowedRequestUrl","every","isIntakeUrl","DATA_URL_REGEX","MAX_ATTRIBUTE_VALUE_CHAR_LENGTH","isLongDataUrl","sanitizeDataUrl","RumPerformanceEntryType","resourceTimingBufferFullListener","nextRequestIndex","startRequestCollection","tracer","traceFetch","append","headers_1","Headers","header","traceXhr","setRequestHeader","startTracer","requestIndex","getNextRequestIndex","trackXhr","clonedResponse","tryToClone","stream","reader","getReader","chunks","readBytesCount","onDone","limitExceeded","collectStreamBody","completeBuffer_1","offset_1","chunk","bytesLimit","readMore","read","readBytesFromStream","POSITIVE_INFINITY","waitForResponseToComplete","trackFetch","discardNegativeDuration","trackEventCounts","isChildEvent","onChange","eventCounts","errorCount","longTaskCount","resourceCount","actionCount","frustrationCount","frustration","discarded","retrieveFirstInputTiming","startTimeStamp","timingSent","removeEventListeners","evt","cancelable","entryType","processingStart","processingEnd","sendTiming","sendTimingIfPointerIsNotCancelled","createPerformanceObservable","PerformanceObserver","stopFirstInputTiming","handlePerformanceEntries","rumPerformanceEntries","RESOURCE","isForbiddenResource","filterRumPerformanceEntries","isObserverInitializing","getEntries","observe","NAVIGATION","LONG_TASK","PAINT","buffered","getEntriesByType","entryTypes","clearResourceTimings","manageResourceTimingBufferFull","supportPerformanceTimingEvent","FIRST_INPUT","disconnect","supportedEntryTypes","PAGE_ACTIVITY_VALIDATION_DELAY","PAGE_ACTIVITY_END_DELAY","waitPageActivityEnd","domMutationObservable","windowOpenObservable","pageActivityEndCallback","maxDuration","pageActivityObservable","firstRequestIndex","pendingRequestsCount","notifyPageActivity","isExcludedUrl","startEvent","isBusy","createPageActivityObservable","pageActivityEndTimeoutId","hasCompleted","validationTimeoutId","complete","hadActivity","maxDurationTimeoutId","pageActivitySubscription","lastChangeTime","doWaitPageActivityEnd","requestUrl","cssEscape","CSS","escape","ch","asCodePoint","elementMatches","msMatchesSelector","getParentElement","parentElement","nodeType","Node","ELEMENT_NODE","initialValues","isTextNode","TEXT_NODE","isElementNode","isNodeShadowHost","shadowRoot","isNodeShadowRoot","DOCUMENT_FRAGMENT_NODE","forEachChildNodes","child","firstChild","nextSibling","getParentNode","NodePrivacyLevel","IGNORE","PRIVACY_ATTR_NAME","PRIVACY_ATTR_VALUE_HIDDEN","PRIVACY_CLASS_PREFIX","CENSORED_STRING_MARK","CENSORED_IMG_MARK","FORM_PRIVATE_TAG_NAMES","INPUT","OUTPUT","TEXTAREA","SELECT","OPTION","DATALIST","OPTGROUP","getNodePrivacyLevel","cache","parentNodePrivacyLevel","nodePrivacyLevel","reducePrivacyLevel","getNodeSelfPrivacyLevel","childPrivacyLevel","inputElement","autocomplete","endsWith","getPrivacySelector","nodeName","relAttribute","getLowerCaseAttribute","nameAttribute","propertyAttribute","hasAttribute","shouldIgnoreElement","shouldMaskNode","privacyLevel","isFormElement","censorText","getTextContent","textNode","ignoreWhiteSpace","parentTagName","DEFAULT_PROGRAMMATIC_ACTION_NAME_ATTRIBUTE","ACTION_NAME_PLACEHOLDER","getActionNameFromElementProgrammatically","targetElement","programmaticAttribute","elementWithAttribute","supportsElementClosestResult","HTMLElement","supportsElementClosest","closest","normalizeWhitespace","supportsLabelPropertyResult","priorityStrategies","userProgrammaticAttribute","privacy","HTMLInputElement","supportsLabelProperty","labels","getActionNameFromTextualContent","ownerDocument","htmlFor","nameSource","privacyEnabledActionName","getActionNameFromStandardAttribute","labelledByAttribute","refElement","getTextualContent","fallbackStrategies","MAX_PARENTS_TO_CONSIDER","getActionNameFromElementForStrategies","strategies","recursionCounter","strategies_1","actionName","strategy","name_1","trimmedName","attribute","isContentEditable","text_1","removeTextFromElements","element_1","textToReplace","supportScopeSelectorCache","STABLE_ATTRIBUTES","GLOBALLY_UNIQUE_SELECTOR_GETTERS","getStableAttributeSelector","isGeneratedValue","UNIQUE_AMONG_CHILDREN_SELECTOR_GETTERS","classList","classes","getClassList","getSelectorFromElement","isConnected","documentElement","contains","targetElementSelector","currentElement","globallyUniqueSelector","findSelector","isSelectorUniqueGlobally","isSelectorUniqueAmongSiblings","combineSelector","getPositionSelector","getAttributeSelector","STABLE_ATTRIBUTES_1","attributeName","sibling","firstElementChild","elementIndex","nextElementSibling","selectorGetters","childSelector","selectorGetters_1","elementSelector","selectorGetter","currentElementSelector","isSiblingMatching","scopedSelector_1","querySelector","supportScopeSelector","parent","MAX_DURATION_BETWEEN_CLICKS","MAX_DISTANCE_BETWEEN_CLICKS","createClickChain","firstClick","onFinalize","maxDurationBetweenClicksTimeoutId","bufferedClicks","appendClick","click","stopObservable","tryFinalize","dontAcceptMoreClick","isStopped","tryAppend","second","sqrt","clientX","clientY","isSelectionEmpty","selection","getSelection","isCollapsed","isValidPointerEvent","Element","isPrimary","MIN_CLICKS_PER_SECOND_TO_CONSIDER_RAGE","computeFrustration","clicks","rageClick","getUserActivity","scroll","isRage","addFrustration","isDead","hasError","hasSelectionChanged","DEAD_CLICK_EXCLUDE_SELECTOR","hasPageActivity","CLICK_ACTION_MAX_DURATION","interactionSelectorCache","updateInteractionSelector","relativeTimestamp","ACTION_CONTEXT_TIME_OUT_DELAY","trackClickActions","currentClickChain","stopClickChain","stopActionEventsListener","selectionEmptyAtPointerDown","clickContext","onPointerDown","onPointerUp","userActivity","localUserActivity_1","listenActionEvents","pointerDownEvent","clickActionBase","rect","getBoundingClientRect","defaultActionName","getActionNameFromElement","height","left","computeClickActionBase","hadActivityOnPointerDown","pageActivityEndEvent","processPointerDown","appendClickToClickChain","newClick","stopWaitPageActivityEnd","discard","viewEndedSubscription","endClocks","stopSubscription","startClickAction","rageClick_1","validate","finalizeClicks","activityEndTime","historyEntry","eventCountsSubscription","frustrationTypes","newActivityEndTime","frustrationType","domEvents","clickAction","counts","processAction","autoActionProperties","isAutoAction","loading_time","long_task","resource","name_source","ACTION_NAME_MASKING","actionEvent","in_foreground","wasInPageStateAt","trackRuntimeError","errorObservable","handleRuntimeError","rawError","stopInstrumentingOnError","errorObj","stopInstrumentingOnUnhandledRejection","instrumentUnhandledRejection","consoleObservablesByApi","initConsoleObservable","apis","consoleObservables","originalConsoleApi","formatConsoleParameters","firstErrorParam","buildConsoleLog","createConsoleObservable","RawReportType","intervention","deprecation","cspViolation","initReportObservable","blockedURI","effectiveDirective","buildRawReportError","csp","disposition","buildStack","originalPolicy","sourceFile","columnNumber","buildRawReportErrorFromCspViolation","createCspViolationReportObservable","reportTypes","ReportingObserver","handleReports","reports","report","buildRawReportErrorFromReport","createReportObservable","partial","startErrorCollection","featureFlagContexts","consoleLog","trackConsoleError","trackReportError","handling_stack","source_type","featureFlagContext","findFeatureFlagEvaluations","feature_flags","processError","doStartErrorCollection","requestIdleCallback","cancelIdleCallback","id_1","didTimeout","timeRemaining","max","MAX_TASK_TIME","requestIdleCallbackShim","IDLE_CALLBACK_TIMEOUT","MAX_EXECUTION_TIME_ON_TIMEOUT","alreadyMatchedEntries","matchRequestResourceEntry","sameNameEntries","getEntriesByName","candidates","errorMargin","runOnReadyState","expectedReadyState","INITIAL_DOCUMENT_OUTDATED_TRACE_ID_THRESHOLD","getDocumentTraceId","traceIdMeta","traceTimeMeta","createDocumentTraceData","content","getDocumentTraceDataFromMeta","comment","getTraceCommentFromNode","findTraceComment","getDocumentTraceDataFromComment","traceTime","rawTraceTime","COMMENT_NODE","isCommentNode","getNavigationEntry","navigationEntry","timings","numberKey","timingElement","computeTimingsFromDeprecatedPerformanceTiming","retrieveInitialDocumentResourceTiming","startResourceCollection","taskQueue","retrieveInitialDocumentResourceTimingImpl","pendingTasks","deadline","executionTimeRemaining","start_1","scheduleNextRun","timeout","task","createTaskQueue","handleResource","matchingTiming","tracingInfo","hasBeenTraced","span_id","trace_id","rule_psr","computeRequestTracingInfo","correspondingTimingOverrides","computeResourceEntryMetrics","computeRequestDuration","resourceEvent","delivery_type","performanceEntry","requestInput","processRequest","performanceResourceSubscription","_loop_1","isResourceEntryRequestType","processResourceEntry","computeRawEvent","computeResourceEntryTracingInfo","entryMetrics","responseStatus","renderBlockingStatus","render_blocking_status","FCP_MAXIMUM_DELAY","trackNavigationTimings","getNavigationEntryImpl","stopOnReadyState","waitAfterLoadEvent","loadEventEnd","isIncompleteNavigation","domComplete","domContentLoaded","domContentLoadedEventEnd","domInteractive","loadEvent","firstByte","processNavigationEntry","LCP_MAXIMUM_DELAY","trackFirstHidden","stopListeners","visibilityState","trackInitialViewMetrics","setLoadEvent","scheduleViewUpdate","initialViewMetrics","stopNavigationTracking","navigationTimings","firstHidden","stopFCPTracking","fcpEntry","trackFirstContentfulPaint","firstContentfulPaint","stopLCPTracking","firstInteractionTimestamp","stopEventListener","biggestLcpSize","performanceLcpSubscription","LARGEST_CONTENTFUL_PAINT","lcpEntry","findLast","lcpTargetSelector","targetSelector","trackLargestContentfulPaint","largestContentfulPaint","stopFIDTracking","performanceFirstInputSubscription","firstInputEntry","firstInputDelay","firstInputTargetSelector","trackFirstInput","firstInput","trackCumulativeLayoutShift","viewStart","isLayoutShiftSupported","maxClsTarget","maxClsStartTime","maxClsValue","cumulatedValue","maxValue","update","isMaxValue","MAX_UPDATE_GAP","MAX_WINDOW_DURATION","slidingSessionWindow","performanceSubscription","LAYOUT_SHIFT","hadRecentInput","getTargetFromSource","WeakRef","deref","interactionCountEstimate","minKnownInteractionId","maxKnownInteractionId","viewportObservable","getInteractionCount","interactionCount","MAX_INTERACTION_ENTRIES","MAX_INP_VALUE","trackInteractionToNextPaint","viewLoadingType","EVENT","PerformanceEventTiming","getInteractionToNextPaint","setViewEnd","interactionToNextPaintTargetSelector","interactionToNextPaintStartTime","interactionId","min","durationThreshold","previousInteractionCount","computeViewInteractionCount","getViewInteractionCount","stopViewInteractionCount","trackViewInteractionCount","viewEnd","longestInteractions","sortAndTrimLongestInteractions","sort","interactionIndex","findIndex","interaction","minLongestInteraction","estimateP98Interaction","trackLongestInteractions","interactionToNextPaint","handleEntries","newInteraction","firstInputSubscription","eventSubscription","viewEndTime","getScrollX","scrollX","visual","visualViewport","pageLeft","offsetLeft","pageXOffset","getScrollY","scrollY","pageTop","offsetTop","pageYOffset","initViewportObservable","updateDimension","getViewportDimension","createViewportObservable","scale","innerWidth","innerHeight","THROTTLE_SCROLL_DURATION","trackScrollMetrics","scrollValues","throttleDuration","scrollTop","scrollHeight","scrollDepth","scrollingElement","ResizeObserver","throttledNotify_1","observerTarget","resizeObserver_1","eventListener_1","createScrollValuesObservable","maxScrollDepth","maxScrollHeight","maxScrollHeightTime","shouldUpdate","maxDepthScrollTop","trackCommonViewMetrics","loadingType","commonViewMetrics","loadType","isWaitingForLoadEvent","isWaitingForActivityLoadingTime","loadingTimeCandidates","invokeCallbackIfAllCandidatesAreReceived","loadingTime","trackLoadingTime","newLoadingTime","stopLoadingTimeTracking","stopScrollMetricsTracking","newScrollMetrics","stopCLSTracking","cumulativeLayoutShift","stopINPTracking","getCommonViewMetrics","THROTTLE_VIEW_UPDATE_PERIOD","SESSION_KEEP_ALIVE_INTERVAL","KEEP_TRACKING_AFTER_VIEW_DELAY","trackViews","locationChangeObservable","areViewsTrackedAutomatically","locationChangeSubscription","activeViews","currentView","startNewView","viewOptions","newlyCreatedView","initialLocation","customTimings","documentVersion","sessionIsActive","viewCreatedEvent","triggerViewUpdate","cancelScheduleViewUpdate","stopCommonViewMetricsTracking","stopInitialViewMetricsTracking","trackViewEventCounts","stopEventCountsTracking","keepAliveIntervalId","currentEnd","isActive","looksLikeRelativeTime","sanitized","sanitizeTiming","updatedName","newView","pageExitEvent","currentLocation","otherLocation","hash","correspondingId","oldLocation","newLocation","getPathFromHash","renewViewOnLocationChange","startViewCollection","pageOpenObserable","recorderApi","_f","_g","_h","_j","_k","_l","_m","_o","_p","_q","_r","replayStats","getReplayStats","pageStates","viewEvent","document_version","replay_stats","page_states","cumulative_layout_shift","cumulative_layout_shift_time","cumulative_layout_shift_target_selector","dom_complete","dom_content_loaded","dom_interactive","first_contentful_paint","first_input_delay","first_input_time","first_input_target_selector","interaction_to_next_paint","interaction_to_next_paint_time","interaction_to_next_paint_target_selector","is_active","largest_contentful_paint","largest_contentful_paint_target_selector","load_event","loading_type","time_spent","max_depth","max_depth_scroll_top","max_scroll_height","max_scroll_height_time","replay_level","custom_timings","newObject","mapValues","processViewUpdate","VISIBILITY_CHECK_DELAY","SESSION_CONTEXT_TIMEOUT_DELAY","stopCallbacks","startSessionManager","sessionContextHistory","buildSessionContext","isReplayForced","forcedReplay","trackActivity","expandSessionWhenVisible","visibilityCheckInterval","trackVisibility","cb","trackResume","findSession","startRumSessionManager","rawTrackingType","hasValidRumSession","isTypeTracked","sessionEntity","setForcedReplay","rumSessionType","createBatch","encoder","flushController","upsertBuffer","flushSubscription","flushObservable","upsertMessages","isPageExit","sendOnExit","encoderResult","formatPayloadFromEncoder","pendingMessages","flush","addOrUpdate","serializedMessage","estimatedMessageBytesCount","hasMessageFor","removedMessage","messageBytesCount","notifyAfterRemoveMessage","notifyBeforeAddMessage","notifyAfterAddMessage","realMessageBytesCount","upsert","MAX_ONGOING_BYTES_COUNT","MAX_ONGOING_REQUESTS","MAX_QUEUE_BYTES_COUNT","MAX_BACKOFF_TIME","INITIAL_BACKOFF_TIME","sendWithRetryStrategy","sendStrategy","transportStatus","queuedPayloads","bandwidthMonitor","canHandle","onSuccess","retryQueuedPayloads","onFailure","enqueue","scheduleRetry","dequeue","currentBackoffTime","shouldRetryRequest","ongoingRequestCount","isFull","queueFullReported","previousQueue","newPayloadQueue","createHttpRequest","endpointBuilder","retryState","ongoingByteCount","sendStrategyForRetry","onResponse","canUseKeepAlive","isKeepAliveSupported","fetchUrl","keepalive","mode","sendXHR","fetchKeepAliveStrategy","canUseBeacon","sendBeacon","beaconUrl","hasReportedBeaconError","reportBeaconError","xhrUrl","sendBeaconStrategy","createFlushController","durationLimitTimeoutId","messagesLimit","durationLimit","pageExitObservable","sessionExpireObservable","pageExitSubscription","sessionExpireSubscription","currentBytesCount","currentMessagesCount","flushReason","messagesCount","cancelDurationLimitTimeout","messageBytesCountDiff","startRumBatch","telemetryEventObservable","createEncoder","batch","primary","batchFactoryImp","primaryBatch","createBatchFromConfig","replicaBatch","replicated","transformMessage","startBatchWithReplica","isTelemetryReplicationAllowed","URL_CONTEXT_TIME_OUT_DELAY","createLocationChangeObservable","stopHistoryTracking","onHistoryChange","stopInstrumentingPushState","getHistoryInstrumentationTarget","stopInstrumentingReplaceState","removeListener","trackHistory","onLocationChange","stopHashTracking","onHashChange","trackHash","History","FEATURE_FLAG_CONTEXT_TIME_OUT_DELAY","currentPeriodMeasures","currentBatchMeasures","batchHasRumEvent","MEASURES_PERIOD_DURATION","sendCurrentPeriodMeasures","batchCount","initCurrentPeriodMeasures","updateMeasure","measure","sum","mergeMeasure","batchBytesCount","batchMessagesCount","globalContextBytes","userContextBytes","featureFlagBytes","initCurrentBatchMeasures","MAX_PAGE_STATE_ENTRIES","MAX_PAGE_STATE_ENTRIES_SELECTABLE","PAGE_STATE_CONTEXT_TIME_OUT_DELAY","startPageStateHistory","maxPageStateEntriesSelectable","currentPageState","pageStateEntryHistory","addPageState","getPageState","stopEventListeners","persisted","computePageState","nextPageState","eventStartTime","pageStateEntries","pageStateServerEntries","pageState","relativeStartTime","hasFocus","createCookieObservable","cookieName","detectCookieChangeStrategy","changeEvent","changed","deleted","listenToCookieStoreChange","watchCookieFallback","WATCH_COOKIE_INTERVAL_DELAY","previousCookieValue","watchCookieIntervalId","CI_VISIBILITY_TEST_ID_COOKIE_NAME","getSessionReplayUrl","viewContext","errorType","sessionId","rumConfiguration","getSiteDefaultSubdomain","statsPerView","MAX_STATS_HISTORY","getSegmentsCount","getOrCreateReplayStats","segments_count","records_count","segments_total_raw_size","toDelete","isFirst_1","_value","deleteOldestStats","serializedNodeIds","hasSerializedNode","getSerializedNodeId","getElementInputValue","URL_IN_CSS_REF","ABSOLUTE_URL","DATA_URI","switchToAbsoluteUrl","cssText","cssHref","matchingSubstring","singleQuote","urlWrappedInSingleQuotes","doubleQuote","urlWrappedInDoubleQuotes","urlNotWrappedInQuotes","quote","baseUrl","makeUrlAbsolute","TAG_NAME_REGEX","getValidTagName","processedTagName","censoredImageForSize","RecordType","FullSnapshot","IncrementalSnapshot","Meta","Focus","ViewEnd","VisualViewport","FrustrationRecord","NodeType","Document","DocumentType","Text","CDATA","DocumentFragment","IncrementalSource","Mutation","MouseMove","MouseInteraction","Scroll","ViewportResize","Input","TouchMove","MediaInteraction","StyleSheetRule","MouseInteractionType","MouseUp","MouseDown","Click","ContextMenu","DblClick","Blur","TouchStart","TouchEnd","MediaInteractionType","Play","Pause","serializeStyleSheets","cssStyleSheets","cssStyleSheet","rules","cssRules","cssRule","disabled","media","serializeAttribute","attributeValue","image","naturalWidth","naturalHeight","getCssRulesString","getCssRuleStringForSafari","getCssRuleString","rule","isCSSStyleRule","selectorText","isCSSImportRule","styleSheet","serializeNodeWithId","serializedNode","DOCUMENT_NODE","serializeChildNodes","adoptedStyleSheets","serializeDocumentNode","isShadowRoot","serializationContext","shadowRootsController","addShadowRoot","serializeDocumentFragmentNode","DOCUMENT_TYPE_NODE","documentType","publicId","systemId","isSVG","SVGElement","attributes","rr_width","rr_height","safeAttrs","formValue","optionElement","selected","stylesheet","styleSheets","_cssText","sheet","scrollLeft","checked","mediaElement","rr_mediaState","paused","elementsScrollPositions","rr_scrollLeft","rr_scrollTop","serializeAttributes","hasChildNodes","serializeElementNode","serializeTextNode","CDATA_SECTION_NODE","serializeNode","_nextId","serializedNodeWithId","serializeNodeId","setSerializedNodeId","childNode","serializedChildNode","serializeDocument","isTouchEvent","changedTouches","getEventTarget","composed","composedPath","convertMouseEventToLayoutCoordinates","normalized","layoutViewportX","layoutViewportY","visualViewportX","visualViewportY","isVisualViewportFactoredIn","getVisualViewport","assembleIncrementalSnapshot","MOUSE_MOVE_OBSERVER_THRESHOLD","trackMove","moveCb","coordinates","tryToComputeCoordinates","timeOffset","positions","updatePosition","cancelThrottle","isFinite","eventTypeToMouseInteraction","trackMouseInteraction","mouseInteractionCb","recordIds","getIdForEvent","SCROLL_OBSERVER_THRESHOLD","trackScroll","scrollCb","scrollPositions","VISUAL_VIEWPORT_OBSERVER_THRESHOLD","trackViewportResize","viewportResizeCb","viewportResizeSubscription","trackVisualViewportResize","visualViewportResizeCb","trackMediaInteraction","mediaInteractionCb","trackStyleSheet","styleSheetCb","checkStyleSheetAndCallback","ownerNode","instrumentationStoppers","CSSStyleSheet","adds","removes","instrumentGroupingCSSRuleClass","cls","parentStyleSheet","getPathToNestedCSSRule","CSSGroupingRule","CSSMediaRule","CSSSupportsRule","stopper","currentRule","parentRule","index_1","trackFocus","focusCb","has_focus","trackFrustration","frustrationCb","frustrationSubscription","trackViewEnd","viewEndCb","viewEndSubscription","trackInput","inputCb","stopPropertySetterInstrumentation","lastInputStateMap","HTMLTextAreaElement","HTMLSelectElement","onElementChange","instrumentationStoppers_1","inputState","isChecked","cbWithDedup","lastInputState","MUTATION_PROCESS_MAX_DELAY","MUTATION_PROCESS_MIN_DELAY","trackMutation","mutationCallback","mutationBatch","processMutationBatch","cancelScheduledFlush","pendingMutations","throttledFlush","addMutations","mutations","createMutationBatch","nodePrivacyLevelCache","mutation","removedNodes","removedNode","traverseRemovedShadowDom","removeShadowRoot","filteredMutations","nodeAndAncestorsHaveSerializedNode","addedAndMovedNodes","addedNodes","mutations_1","sortedAddedAndMovedNodes","compareDocumentPosition","DOCUMENT_POSITION_CONTAINED_BY","DOCUMENT_POSITION_CONTAINS","DOCUMENT_POSITION_FOLLOWING","DOCUMENT_POSITION_PRECEDING","addedNodeMutations","sortedAddedAndMovedNodes_1","hasBeenSerialized","nextId","getNextSibling","parentId","removedNodeMutations","processChildListMutations","texts","textMutations","handledNodes","filteredMutations_1","oldValue","processCharacterDataMutations","attributeMutations","handledElements","handledAttributes","emittedMutations","filteredMutations_2","transformedValue","inputValue","emittedMutation","processAttributesMutations","processMutations","takeRecords","attributeOldValue","characterData","characterDataOldValue","childList","subtree","shadowDomRemovedCallback","initShadowRootsController","controllerByShadowRoot","mutationTracker","inputTracker","scrollTracker","emit","scrollPositionsByElement","emitAndComputeStats","stopFullSnapshots","flushMutations","fullSnapshotCallback","takeFullSnapshot","records","initialOffset","startFullSnapshots","initRecordIds","trackers","viewEndRecord","createSegment","creationReason","encodedBytesCount","creation_reason","has_full_snapshot","index_in_view","addRecord","additionalBytesCount","SEGMENT_DURATION_LIMIT","SEGMENT_BYTES_LIMIT","startSegmentCollection","httpRequest","getSegmentContext","nextSegmentCreationReason","unsubscribeViewCreated","flushSegment","unsubscribePageExited","segment","rawSegmentBytesCount","formData","FormData","metadataAndSegmentSizes","raw_segment_size","compressed_segment_size","byteLength","serializedMetadataAndSegmentSizes","buildReplayPayload","expirationTimeoutId","doStartSegmentCollection","computeSegmentContext","createDeflateEncoder","streamId","compressedDataTrailer","compressedData","nextWriteActionId","pendingWriteActions","removeMessageListener","workerResponse","trailer","nextPendingAction","writeCallback","finishCallback","consumeResult","buffers","total","buffers_1","concatBuffers","sendResetIfNeeded","postMessage","pendingWriteAction","INITIALIZATION_TIME_OUT_DELAY","createDeflateWorker","Worker","createObjectURL","onInitializationFailure","createDeflateWorkerImpl","removeErrorListener_1","removeMessageListener_1","initializationFailureCallbacks","onTimeout","doStartDeflateWorker","getDeflateWorkerStatus","baseMessage","worker_version","stream_id","isBrowserSupported","NodeList","getSessionReplayLink","isRecordingStarted","getErrorType","startRecordingImpl","getOrCreateDeflateEncoder","stopRecording","force","canStartRecording","isRecordingInProgress","deflateEncoder","shouldForceReplay","isRecording","existingGlobalVariable","onRumStart","shouldStartImmediately","cachedDeflateEncoder","makeRecorderApi","cleanupTasks","replayRequest","startRecordBridge","segmentCollection","datadogRum","startRumImpl","currentConsent","customerDataTrackerManager","globalContextManager","userContextManager","buildCommonContext","stub","preStartStrategy","createPostStartStrategy","sanitizedOptions","feature","rumPublicApi","setTrackingConsent","setGlobalContext","getGlobalContext","setGlobalContextProperty","removeGlobalContextProperty","clearGlobalContext","getInitConfiguration","setUser","checkUser","getUser","setUserProperty","sanitizedProperty","removeUserProperty","clearUser","startSessionReplayRecording","stopSessionReplayRecording","onReady","makeRumPublicApi","bridge_1","startRumTelemetry","currentContext","startFeatureFlagContexts","stopBeforeUnloadListener","createPageExitObservable","startRumSessionManagerStub","startRumEventBridge","batch_1","batchFlushObservable","startCustomerDataTelemetry","stopWindowOpen","viewValueHistory","buildViewHistoryEntry","viewUpdate","startViewHistory","previousViewUrl","urlContextHistory","viewUrl","buildUrlContext","changeTime","startUrlContexts","actionCollection","startActionCollection","viewport","animationFrameId","DELAY_VIEWPORT_COLLECTION","requestAnimationFrame","unsubscribeViewport","viewportDimension","cancelAnimationFrame","startDisplayContext","cookieObservable","testExecutionId","Cypress","cookieObservableSubscription","test_execution_id","startCiVisibilityContext","startRumEventCollection","stopRumEventCollection","stopViewCollection","stopResourceCollection","LONG_ANIMATION_FRAME","stopLongAnimationFrameCollection","entry_type","blocking_duration","blockingDuration","first_ui_event_timestamp","firstUIEventTimestamp","render_start","renderStart","style_and_layout_start","styleAndLayoutStart","start_time","pause_duration","pauseDuration","forced_style_and_layout_duration","forcedStyleAndLayoutDuration","execution_start","executionStart","source_url","sourceURL","source_function_name","sourceFunctionName","source_char_position","sourceCharPosition","invoker","invoker_type","invokerType","window_attribution","windowAttribution","startLongAnimationFrameCollection","performanceLongTaskSubscription","startLongTaskCollection","vitalCollection","internalContext","application_id","session_id","user_action","startInternalContext","q","__ENVIRONMENT__","initialized","initializeDatadogRum","eventData","detail","accepted","pageOpts","remarketingDetails","hrental_id","hrental_pagetype","hrental_totalvalue","retrieveRemarketingProperties","trackClicksOn","campaignData","urlParam","soundboard","campaignDataFromUrl","trackEvent","trackReferringCampaigns","gclidFromUrl","gclidCookie","gclidFromCookie","gclid","persistGclid","InstructionVideoEmbed","styles","container","heading","title","frameResizer","embedUrl","frameBorder","allowFullScreen","OldMeetingPackageListApp","OldCelebrationPackageListApp","OldExperiencePackageListApp","OldVenuePackageListApp","ProfileEditRichTextEditor","AvailabilitySourceForm","PhoneNumberForm","VenueMobileCTAs","OldSiblingGroupPreviewApp","OldSimilarVenueList","Rating","RatingBoxAccordion","AccordionPanel","CommissionRoot","PackageEditorRoot","VenueInquiryConversationRoot","CateringInquiryConversationApp","ReadOnlyVenueInquiryConversationApp","MarkAsRepliedRoot","VenueGroupEditorApp","OldTranslatedVenueDescription","OldMoveToSearchLinks","SendCopy","MessageTemplateEditorApp","MultiSelect","VenuePageInquiryFormNew","MultiVenueInquiryForm","SearchableInquiryIndex","FeaturedEventTypeField","FeaturedVenuesInventory","EditOrganizationTabs","SpamInquiriesTabs","EditVenueServices","EditVenueTypes","ProfileAnnouncementsEditorApp","CateringSearch","VenueProfileGallery","VenueWishlistButton","VenueProfileLocation","VenueProfileVideoSection","VenueProfileVirtualTourSection","VenueProfileStoriesOfPastEvents","VenueProfileCapacityDetails","VenueProfileOtherSpacesInSameLocation","VenueProfileReviewList","VenueProfileServicesAndFacilities","VenueProfileSimilarVenues","VenueProfilePricingSection","VenueProfileAvailabilitySection","VenueProfileBasicInformation","VenueProfileTranslatedDescription","CateringBasicInformation","CateringDetailedInformation","CateringHeading","ProfileImageCarousel","CateringInquiry","CateringServicesAndPricing","CateringMenuList","SupplierProfileServicesAndPricing","SupplierProfileHeading","SupplierProfileContactInformation","SupplierProfileVideo","SupplierProfileInquiry","SupplierProfileContactImage","SupplierProfileBasicInformation","SupplierSearch","LegalNotice","PipedriveIntegrationStatus","BillingDetails","TinField","InvoicesOfDayStates","InvoicingFields","OrganizationInvoices","StripeCustomerStatus","OutcomeFeedback","components","lazyComponents","frontPageIndex","landingPagesShow","listsShow","reviewsEdit","reviewsNew","profiles/reviewsNew","profiles/venueProfilesShow","profiles/admin/cateringProfilesEdit","catering/admin/menusIndex","admin/archives","profiles/admin/venueProfilesEdit","profiles/admin/venueProfilesIndex","profiles/supplierProfilesEdit","staff/imagesIndex","staff/prospectsIndex","staff/invoicesNew","staff/organizationsEdit","staff/landingPagesEdit","users/registrationsEdit","buildModuleName","moduleNameWithAction","actionAlias","moduleNameWithoutAction","actionEntryPoints","actionFunc","findScript","initializer","require","jQuery","SERVER_RENDERER_PUBLIC_PATH","__webpack_public_path__","Button","onClick","submit","otherProps","buttonClassName","classnames","_extends","preventDefault","tabIndex","errorMessage","reload","sentinelProperty","branches","jsonObject","extract","json","failure","items","shape","extractKey","extractValue","defaultValue","values","failureStack","usingFailureStack","withFailureHandler","returnValue","fallback","boolean","mixed","dateString","extractValues","amount","moneyExtract","extractedMoney","money","webpackLocales","localizable","localize","defaultFormatMoneyOptions","fm","alwaysShowDecimals","isInteger","formatPrice","isEqual","sitesJSON","allSites","baseDomain","requiredString","base_domain","countryInPath","optionalString","country_in_path","defaultOgImage","default_og_image","defaultSearchBounds","requiredBounds","default_search_bounds","defaultMapCenter","default_map_center","iso31661Alpha2","iso_3166_1_alpha_2","iso31661Alpha3","iso_3166_1_alpha_3","profileTimeZone","profile_time_zone","partnerSupport","extractPartnerSupport","partner_support","salesPerson","extractSalesPerson","sales_person","eInvoiceOperators","extractEInvoiceoperators","e_invoice_operators","siteFromJSON","mail","phone","team_mail","first_name","south","west","north","east","eInvoiceOperator","maybeString","sites","getSocialMedia","inferOperatingSystem","defaultProperties","Path","Locale","$os","propertiesFromTrackedLink","link","$link","linkData","allHaveData","$elements","dataKey","venueAnalyticsProps","dataFromBackend","elements","trackLink","untrackClicksOn","_element","properties","matcher","track","translatedOptions","mediaTypesToMediaQueries","small","middle","medium","large","xlarge","xxlarge","smallDevice","mediaType","mediaQuery","Modernizr","Putki","padding","decimalAdjust","isFunction","isSet","isBoolean","isNull","exp","NaN","lazyEvaluate","dest","DATE","day_names","abbr_day_names","month_names","abbr_month_names","meridian","NUMBER_FORMAT","separator","delimiter","strip_insignificant_zeros","CURRENCY_FORMAT","unit","sign_first","PERCENTAGE_FORMAT","SIZE_UNITS","DEFAULT_OPTIONS","defaultLocale","defaultSeparator","fallbacks","translations","missingBehaviour","missingTranslationPrefix","initializeOptions","localeParts","firstFallback","secondFallback","nullableFallbackLocale","pluralization","currentLocale","lookup","scopes","fullScope","getFullScope","pluralizationLookupWithoutFallback","pluralizerKey","pluralizerKeys","pluralizer","pluralizationLookup","am","pm","prepareOptions","subject","createTranslationOptions","translationOptions","translate","translation","usedScope","optionsWithoutDefault","translationOption","interpolate","pluralize","missingTranslation","nullPlaceholder","missingPlaceholder","p1","p2","toNumber","formattedNumber","sign","toCurrency","toPercentage","localizedValue","toTime","parseDate","convertedDate","fraction","UTC","$2","$3","$6","$4","$5","strftime","meridianOptions","weekDay","getDay","day","getDate","year","getFullYear","month","getMonth","hour","getHours","hour12","secs","getSeconds","mins","getMinutes","getTimezoneOffset","absOffsetHours","absOffsetMinutes","timezoneoffset","date_string","toHumanSize","kb","iterations","extend","pluses","raw","decode","stringifyCookieValue","parseCookieValue","converter","days","removeCookie","defineLocale","months","monthsShort","weekdays","weekdaysShort","weekdaysMin","longDateFormat","LT","LTS","L","LL","LLL","LLLL","lll","llll","calendar","sameDay","nextDay","lastDay","nextWeek","lastWeek","sameElse","future","past","ss","mm","h","hh","dd","MM","yy","dayOfMonthOrdinalParse","ordinal","week","dow","doy","hookCallback","hooks","setHookCallback","hasOwnProp","isObjectEmpty","getOwnPropertyNames","isUndefined","isDate","arrLen","valueOf","createUTC","strict","createLocalOrUTC","utc","defaultParsingFlags","empty","unusedTokens","unusedInput","overflow","charsLeftOver","nullInput","invalidEra","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","era","meridiem","rfc2822","weekdayMismatch","getParsingFlags","_pf","_isValid","parsedParts","isNowValid","invalidWeekday","_strict","bigHour","isFrozen","createInvalid","fun","momentProperties","updateInProgress","copyConfig","momentPropertiesLen","_isAMomentObject","_tzm","_isUTC","_offset","_locale","Moment","updateOffset","isMoment","suppressDeprecationWarnings","deprecate","firstTime","deprecationHandler","argLen","deprecations","deprecateSimple","_config","_dayOfMonthOrdinalParseLenient","_dayOfMonthOrdinalParse","_ordinalParse","mergeConfigs","parentConfig","childConfig","defaultCalendar","mom","_calendar","zeroFill","targetLength","forceSign","absNumber","zerosToFill","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","token","padded","localeData","removeFormattingTokens","makeFormatFunction","formatMoment","expandFormat","invalidDate","replaceLongDateFormatTokens","defaultLongDateFormat","_longDateFormat","formatUpper","tok","defaultInvalidDate","_invalidDate","defaultOrdinal","defaultDayOfMonthOrdinalParse","_ordinal","defaultRelativeTime","w","ww","withoutSuffix","isFuture","_relativeTime","pastFuture","diff","aliases","addUnitAlias","shorthand","lowerCase","normalizeUnits","units","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","priorities","addUnitPriority","priority","getPrioritizedUnits","unitsObj","u","isLeapYear","absFloor","toInt","argumentForCoercion","coercedNumber","makeGetSet","keepTime","set$1","daysInMonth","stringGet","stringSet","prioritized","prioritizedLen","regexes","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchTimestamp","matchWord","addRegexToken","strictRegex","isStrict","getParseRegexForToken","unescapeFormat","regexEscape","matched","p3","p4","tokens","addParseToken","tokenLen","addWeekParseToken","_w","addTimeToArrayFromToken","YEAR","MONTH","HOUR","MINUTE","SECOND","MILLISECOND","WEEK","WEEKDAY","modMonth","monthsShortRegex","monthsRegex","monthsParse","defaultLocaleMonths","defaultLocaleMonthsShort","MONTHS_IN_FORMAT","defaultMonthsShortRegex","defaultMonthsRegex","localeMonths","_months","isFormat","localeMonthsShort","_monthsShort","handleStrictParse","monthName","ii","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","localeMonthsParse","_monthsParseExact","setMonth","dayOfMonth","getSetMonth","getDaysInMonth","computeMonthsParse","_monthsShortStrictRegex","_monthsShortRegex","_monthsStrictRegex","_monthsRegex","cmpLenRev","shortPieces","longPieces","mixedPieces","daysInYear","parseTwoDigitYear","getSetYear","getIsLeapYear","createDate","ms","setFullYear","createUTCDate","getUTCFullYear","setUTCFullYear","firstWeekOffset","fwd","getUTCDay","dayOfYearFromWeeks","weekday","resYear","resDayOfYear","dayOfYear","weekOfYear","resWeek","weekOffset","weeksInYear","weekOffsetNext","localeWeek","_week","defaultLocaleWeek","localeFirstDayOfWeek","localeFirstDayOfYear","getSetWeek","getSetISOWeek","parseWeekday","weekdaysParse","parseIsoWeekday","shiftWeekdays","ws","weekdaysMinRegex","weekdaysShortRegex","weekdaysRegex","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","localeWeekdays","_weekdays","localeWeekdaysShort","_weekdaysShort","localeWeekdaysMin","_weekdaysMin","handleStrictParse$1","weekdayName","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","localeWeekdaysParse","_weekdaysParseExact","_fullWeekdaysParse","getSetDayOfWeek","getSetLocaleDayOfWeek","getSetISODayOfWeek","computeWeekdaysParse","_weekdaysStrictRegex","_weekdaysRegex","_weekdaysShortStrictRegex","_weekdaysShortRegex","_weekdaysMinStrictRegex","_weekdaysMinRegex","minp","shortp","longp","minPieces","hFormat","hours","kFormat","lowercase","minutes","matchMeridiem","_meridiemParse","localeIsPM","charAt","seconds","kInput","_isPm","isPM","_meridiem","pos1","pos2","defaultLocaleMeridiemParse","getSetHour","localeMeridiem","isLower","globalLocale","baseConfig","meridiemParse","localeFamilies","commonPrefix","arr1","arr2","minl","normalizeLocale","chooseLocale","names","loadLocale","isLocaleNameSane","oldLocale","_abbr","getSetGlobalLocale","getLocale","abbr","parentLocale","updateLocale","tmpLocale","listLocales","checkOverflow","_overflowDayOfYear","_overflowWeeks","_overflowWeekday","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","obsOffsets","UT","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","configFromISO","allowTime","dateFormat","timeFormat","tzFormat","isoDatesLen","isoTimesLen","configFromStringAndFormat","extractFromRFC2822Strings","yearStr","monthStr","dayStr","hourStr","minuteStr","secondStr","untruncateYear","preprocessRFC2822","checkWeekday","weekdayStr","parsedInput","calculateOffset","obsOffset","militaryOffset","numOffset","hm","configFromRFC2822","parsedArray","setUTCMinutes","getUTCMinutes","configFromString","createFromInputFallback","currentDateArray","nowValue","_useUTC","getUTCMonth","getUTCDate","configFromArray","currentDate","expectedWeekday","yearToUse","dayOfYearFromWeekInfo","_dayOfYear","_nextDay","weekYear","temp","weekdayOverflow","curWeek","GG","E","createLocal","gg","ISO_8601","RFC_2822","skipped","stringLength","totalParsedInputLength","meridiemFixWrap","erasConvertYear","isPm","meridiemHour","configFromStringAndArray","tempConfig","bestMoment","scoreToBeat","currentScore","validFormatFound","bestFormatIsValid","configfLen","score","configFromObject","dayOrDate","minute","millisecond","createFromConfig","prepareConfig","preparse","configFromInput","isUTC","prototypeMin","prototypeMax","pickBy","moments","ordering","isDurationValid","unitHasDecimal","orderLen","isValid$1","createInvalid$1","createDuration","Duration","years","quarters","quarter","weeks","isoWeek","milliseconds","_milliseconds","_days","_data","_bubble","isDuration","absRound","compareArrays","array1","array2","dontConvert","lengthDiff","diffs","utcOffset","offsetFromString","chunkOffset","cloneWithOffset","model","local","getDateOffset","getSetOffset","keepLocalTime","keepMinutes","localAdjust","_changeInProgress","addSubtract","getSetZone","setOffsetToUTC","setOffsetToLocal","subtract","setOffsetToParsedOffset","tZone","hasAlignedHourOffset","isDaylightSavingTime","isDaylightSavingTimeShifted","_isDSTShifted","toArray","isLocal","isUtcOffset","isUtc","aspNetRegex","isoRegex","diffRes","parseIso","momentsDifference","inp","positiveMomentsDifference","isAfter","isBefore","createAdder","period","tmp","isAdding","invalid","isMomentInput","isNumberOrStringArray","isMomentInputObject","objectTest","propertyTest","propertyLen","arrayTest","dataTypeTest","isCalendarSpec","getCalendarFormat","myMoment","calendar$1","sod","startOf","calendarFormat","localInput","endOf","isBetween","inclusivity","localFrom","localTo","isSame","inputMs","isSameOrAfter","isSameOrBefore","asFloat","that","zoneDelta","monthDiff","wholeMonthDiff","anchor","keepOffset","toDate","inspect","datetime","zone","inputString","defaultFormatUtc","defaultFormat","postformat","humanize","fromNow","toNow","newLocaleData","lang","MS_PER_SECOND","MS_PER_MINUTE","MS_PER_HOUR","MS_PER_400_YEARS","mod$1","dividend","divisor","localStartOfDate","utcStartOfDate","startOfDate","isoWeekday","unix","toObject","isValid$2","parsingFlags","invalidAt","creationData","localeEras","eras","_eras","since","until","localeErasParse","eraName","narrow","localeErasConvertYear","dir","getEraName","getEraNarrow","getEraAbbr","getEraYear","erasNameRegex","computeErasParse","_erasNameRegex","_erasRegex","erasAbbrRegex","_erasAbbrRegex","erasNarrowRegex","_erasNarrowRegex","matchEraAbbr","matchEraName","matchEraNarrow","matchEraYearOrdinal","_eraYearOrdinalRegex","abbrPieces","namePieces","narrowPieces","addWeekYearFormatToken","getter","getSetWeekYear","getSetWeekYearHelper","getSetISOWeekYear","getISOWeeksInYear","getISOWeeksInISOWeekYear","isoWeekYear","getWeeksInYear","weekInfo","getWeeksInWeekYear","weeksTarget","setWeekAll","dayOfYearData","getSetQuarter","erasParse","eraYearOrdinalParse","getSetDayOfMonth","getSetDayOfYear","getSetMinute","getSetMillisecond","getSetSecond","parseMs","getZoneAbbr","getZoneName","proto","createUnix","createInZone","parseZone","preParsePostFormat","for","eraNarrow","eraAbbr","eraYear","isoWeeks","weeksInWeekYear","isoWeeksInYear","isoWeeksInISOWeekYear","isDST","zoneAbbr","zoneName","dates","isDSTShifted","proto$1","get$1","setter","listMonthsImpl","out","listWeekdaysImpl","localeSorted","listMonths","listMonthsShort","listWeekdays","listWeekdaysShort","listWeekdaysMin","firstDayOfYear","firstDayOfWeek","langData","mathAbs","addSubtract$1","add$1","subtract$1","absCeil","bubble","monthsFromDays","monthsToDays","daysToMonths","as","valueOf$1","makeAs","alias","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asQuarters","asYears","clone$1","get$2","makeGetter","thresholds","substituteTimeAgo","relativeTime$1","posNegDuration","getSetRelativeTimeRounding","roundingFunction","getSetRelativeTimeThreshold","argWithSuffix","argThresholds","withSuffix","th","abs$1","toISOString$1","totalSign","ymSign","daysSign","hmsSign","proto$2","toIsoString","relativeTimeRounding","relativeTimeThreshold","HTML5_FMT","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","TIME","TIME_SECONDS","TIME_MS","getOwnPropertySymbols","propIsEnumerable","propertyIsEnumerable","test1","test2","fromCharCode","test3","letter","shouldUseNative","symbols","checkDCE","__REACT_DEVTOOLS_GLOBAL_HOOK__","MessageChannel","unstable_now","unstable_forceFrameRate","A","B","C","D","F","G","I","port2","port1","onmessage","J","r","sortIndex","O","Q","R","S","U","V","expirationTime","X","priorityLevel","Y","Z","unstable_IdlePriority","unstable_ImmediatePriority","unstable_LowPriority","unstable_NormalPriority","unstable_Profiling","unstable_UserBlockingPriority","unstable_cancelCallback","unstable_continueExecution","unstable_getCurrentPriorityLevel","unstable_getFirstCallbackNode","unstable_next","unstable_pauseExecution","unstable_requestPaint","unstable_runWithPriority","unstable_scheduleCallback","unstable_shouldYield","unstable_wrapCallback","modules","installedModules","moduleId","loaded","activeKeys","currentInput","formInputs","mouseWheel","detectWheel","ignoreMap","inputMap","timer","inputTypes","keyMap","pointerMap","eventBuffer","setInput","bufferedEvent","eventKey","pointerType","activeElement","switchInput","logKeys","keyCode","which","unLogKeys","arrayPos","bindEvents","PointerEvent","MSPointerEvent","onmousewheel","ask","hasOwn","classNames","appendClass","parseValue","newClass"],"sourceRoot":""}