{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/prop-types/index.js","webpack:///./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack:///./node_modules/@emotion/sheet/dist/sheet.browser.esm.js","webpack:///./node_modules/@emotion/stylis/dist/stylis.browser.esm.js","webpack:///./node_modules/@emotion/cache/dist/cache.browser.esm.js","webpack:///./node_modules/@emotion/utils/dist/utils.browser.esm.js","webpack:///./node_modules/@emotion/hash/dist/hash.browser.esm.js","webpack:///./node_modules/@emotion/unitless/dist/unitless.browser.esm.js","webpack:///./node_modules/@emotion/memoize/dist/memoize.browser.esm.js","webpack:///./node_modules/@emotion/serialize/dist/serialize.browser.esm.js","webpack:///./node_modules/@emotion/core/dist/emotion-element-04d85134.browser.esm.js","webpack:///./node_modules/@emotion/css/dist/css.browser.esm.js","webpack:///./node_modules/@emotion/core/dist/core.browser.esm.js","webpack:///./node_modules/react/index.js","webpack:///(webpack)/buildin/harmony-module.js","webpack:///./node_modules/moment/moment.js","webpack:///./node_modules/@visx/group/esm/Group.js","webpack:///./node_modules/@babel/runtime/helpers/defineProperty.js","webpack:///./node_modules/@financial-times/vvc/src/components/default-props/index.js","webpack:///./node_modules/classnames/index.js","webpack:///./node_modules/d3-time/src/duration.js","webpack:///./node_modules/@financial-times/vvc/src/util/index.js","webpack:///./node_modules/@financial-times/vvc/src/components/prop-types/index.js","webpack:///./node_modules/@financial-times/o-tracking/src/javascript/utils.js","webpack:///./node_modules/@babel/runtime/helpers/slicedToArray.js","webpack:///./node_modules/@babel/runtime/helpers/toConsumableArray.js","webpack:///./node_modules/@financial-times/ft-date-format/index.js","webpack:///./node_modules/d3-time/src/interval.js","webpack:///./node_modules/d3-interpolate/src/color.js","webpack:///./node_modules/@financial-times/vvc/src/components/chart-frame/index.js","webpack:///./node_modules/@financial-times/vvc/src/components/chart-frame/plot-context.js","webpack:///./node_modules/@financial-times/vvc/src/components/legend/label.js","webpack:///./node_modules/@visx/scale/esm/scales/linear.js","webpack:///./node_modules/@visx/axis/esm/constants/orientation.js","webpack:///../../src/grid/index.js","webpack:///../../src/grid/grid-child.js","webpack:///../../src/grid/grid-row.js","webpack:///../../src/grid/grid-container.js","webpack:///./node_modules/@financial-times/o-viewport/src/utils.js","webpack:///./node_modules/@financial-times/vvc/src/components/axis/index.js","webpack:///./node_modules/d3-time-format/node_modules/d3-time/src/interval.js","webpack:///./node_modules/d3-time-format/node_modules/d3-time/src/utcWeek.js","webpack:///./node_modules/d3-time-format/node_modules/d3-time/src/duration.js","webpack:///./node_modules/d3-time-format/node_modules/d3-time/src/utcDay.js","webpack:///./node_modules/d3-time-format/node_modules/d3-time/src/week.js","webpack:///./node_modules/d3-time-format/node_modules/d3-time/src/day.js","webpack:///./node_modules/d3-time-format/node_modules/d3-time/src/year.js","webpack:///./node_modules/d3-time-format/node_modules/d3-time/src/utcYear.js","webpack:///./node_modules/d3-time-format/src/locale.js","webpack:///./node_modules/d3-time-format/src/defaultLocale.js","webpack:///(webpack)/buildin/module.js","webpack:///./node_modules/d3-color/src/math.js","webpack:///./node_modules/d3-color/src/lab.js","webpack:///./node_modules/d3-interpolate/src/hcl.js","webpack:///./node_modules/d3-interpolate/src/hsl.js","webpack:///./node_modules/d3-color/src/cubehelix.js","webpack:///./node_modules/d3-interpolate/src/cubehelix.js","webpack:///./node_modules/@visx/scale/esm/utils/createColorInterpolator.js","webpack:///./node_modules/d3-interpolate/src/lab.js","webpack:///./node_modules/@visx/scale/esm/operators/nice.js","webpack:///./node_modules/@visx/scale/esm/operators/scaleOperator.js","webpack:///./node_modules/@visx/scale/esm/operators/domain.js","webpack:///./node_modules/@visx/scale/esm/operators/zero.js","webpack:///./node_modules/@visx/scale/esm/operators/interpolate.js","webpack:///./node_modules/@visx/scale/esm/operators/round.js","webpack:///./node_modules/@visx/scale/esm/operators/align.js","webpack:///./node_modules/@visx/scale/esm/operators/base.js","webpack:///./node_modules/@visx/scale/esm/operators/clamp.js","webpack:///./node_modules/@visx/scale/esm/operators/constant.js","webpack:///./node_modules/@visx/scale/esm/operators/exponent.js","webpack:///./node_modules/@visx/scale/esm/operators/padding.js","webpack:///./node_modules/@visx/scale/esm/operators/range.js","webpack:///./node_modules/@visx/scale/esm/operators/reverse.js","webpack:///./node_modules/@visx/scale/esm/operators/unknown.js","webpack:///./node_modules/d3-interpolate/src/numberArray.js","webpack:///./node_modules/d3-interpolate/src/array.js","webpack:///./node_modules/d3-interpolate/src/date.js","webpack:///./node_modules/d3-interpolate/src/number.js","webpack:///./node_modules/d3-interpolate/src/object.js","webpack:///./node_modules/d3-interpolate/src/string.js","webpack:///./node_modules/d3-interpolate/src/value.js","webpack:///./node_modules/d3-scale/src/number.js","webpack:///./node_modules/d3-scale/src/continuous.js","webpack:///./node_modules/d3-scale/src/constant.js","webpack:///./app/components/date-picker-input/helpers.js","webpack:///./node_modules/d3-color/src/color.js","webpack:///./node_modules/d3-scale/src/init.js","webpack:///./node_modules/@babel/runtime/helpers/objectWithoutProperties.js","webpack:///./node_modules/d3-color/src/define.js","webpack:///./node_modules/d3-array/src/extent.js","webpack:///./node_modules/@financial-times/o-tracking/src/javascript/core/settings.js","webpack:///./node_modules/@babel/runtime/helpers/assertThisInitialized.js","webpack:///./node_modules/@visx/shape/esm/shapes/Line.js","webpack:///./node_modules/@visx/scale/esm/utils/inferScaleType.js","webpack:///./node_modules/is-whitespace-character/index.js","webpack:///../../src/article-layout/index.js","webpack:///../../src/shared/proptypes.js","webpack:///../../src/header/index.js","webpack:///../../src/analytics/index.js","webpack:///../../src/shared/helpers.js","webpack:///../../src/ads/index.js","webpack:///../../src/onwardjourney/index.js","webpack:///../../src/comments/index.js","webpack:///../../src/footer/index.js","webpack:///../../src/shared/hooks.js","webpack:///./node_modules/@financial-times/vvc/src/components/lines/index.js","webpack:///./node_modules/@babel/runtime/helpers/extends.js","webpack:///./node_modules/g-chartcolour/src/backgrounds.js","webpack:///./node_modules/g-chartcolour/src/line-print.js","webpack:///./node_modules/g-chartcolour/src/line-social.js","webpack:///./node_modules/g-chartcolour/src/line-web.js","webpack:///./node_modules/serialize-query-params/esm/serialize.js","webpack:///./node_modules/serialize-query-params/esm/params.js","webpack:///./node_modules/serialize-query-params/esm/updateLocation.js","webpack:///./node_modules/serialize-query-params/esm/encodeQueryParams.js","webpack:///./node_modules/use-query-params/esm/shallowEqual.js","webpack:///./node_modules/use-query-params/esm/helpers.js","webpack:///./node_modules/use-query-params/esm/updateUrlQuery.js","webpack:///./node_modules/use-query-params/esm/LocationProvider.js","webpack:///./node_modules/use-query-params/esm/memoizedQueryParser.js","webpack:///./node_modules/use-query-params/esm/useQueryParams.js","webpack:///./node_modules/use-query-params/esm/QueryParams.js","webpack:///./node_modules/use-query-params/esm/QueryParamProvider.js","webpack:///./node_modules/@financial-times/vvc/src/components/chart-topper/styles.js","webpack:///../dist-src/uk/index.js","webpack:///./node_modules/@financial-times/vvc/src/components/bars/index.js","webpack:///../../src/loading/index.js","webpack:///./node_modules/d3-format/src/exponent.js","webpack:///./app/utils.js","webpack:///./node_modules/@visx/shape/esm/shapes/Bar.js","webpack:///./node_modules/xtend/immutable.js","webpack:///./node_modules/d3-format/src/formatDecimal.js","webpack:///./node_modules/@visx/axis/esm/axis/Ticks.js","webpack:///./node_modules/@visx/axis/esm/axis/AxisRenderer.js","webpack:///./node_modules/@visx/axis/esm/utils/getLabelTransform.js","webpack:///./node_modules/@visx/scale/esm/utils/toString.js","webpack:///./node_modules/@visx/axis/esm/utils/createPoint.js","webpack:///./node_modules/@visx/axis/esm/axis/Axis.js","webpack:///./node_modules/@visx/axis/esm/utils/getTickFormatter.js","webpack:///./node_modules/@visx/axis/esm/utils/getTickPosition.js","webpack:///./node_modules/@visx/scale/esm/utils/getTicks.js","webpack:///./node_modules/@visx/scale/esm/utils/coerceNumber.js","webpack:///./node_modules/query-string/index.js","webpack:///./node_modules/@babel/runtime/regenerator/index.js","webpack:///./node_modules/@visx/shape/esm/shapes/Circle.js","webpack:///./node_modules/@financial-times/vvc/src/components/legend/index.js","webpack:///./node_modules/@financial-times/vvc/src/components/dots/index.js","webpack:///./node_modules/@financial-times/vvc/src/components/chart-frame/base.js","webpack:///./node_modules/@financial-times/vvc/src/components/chart-frame/styles.js","webpack:///./node_modules/@financial-times/o-table/src/js/Tables/BaseTable.js","webpack:///../../src/button/index.js","webpack:///../../src/button/icons.js","webpack:///./node_modules/@financial-times/o-viewport/main.js","webpack:///./node_modules/@financial-times/vvc/src/util/victory-textsize.js","webpack:///./node_modules/@financial-times/o-toggle/main.js","webpack:///./node_modules/@financial-times/o-utils/main.js","webpack:///./node_modules/react-markdown/lib/react-markdown.js","webpack:///./node_modules/@financial-times/vvc/src/util/parseData.js","webpack:///./node_modules/@financial-times/o-overlay/src/js/utils.js","webpack:///./node_modules/@financial-times/vvc/src/components/axis/styles.js","webpack:///./node_modules/@visx/scale/esm/scales/ordinal.js","webpack:///./node_modules/trim/index.js","webpack:///./node_modules/@financial-times/vvc/src/components/delaunay/index.js","webpack:///./node_modules/react-dom/index.js","webpack:///./node_modules/@financial-times/o-tracking/src/javascript/core/store.js","webpack:///./node_modules/d3-interpolate/src/constant.js","webpack:///./node_modules/@financial-times/vvc/src/util/hooks.js","webpack:///./node_modules/@financial-times/vvc/src/components/chart-footer/styles.js","webpack:///./node_modules/d3-time/src/day.js","webpack:///./app/components/area-lookup/helpers.js","webpack:///./app/components/button-selection-group/index.js","webpack:///./app/components/line-chart-template/props.js","webpack:///./node_modules/@babel/runtime/helpers/asyncToGenerator.js","webpack:///./node_modules/papaparse/papaparse.min.js","webpack:///./node_modules/d3-time/src/second.js","webpack:///./app/components/react-range/utils.js","webpack:///./app/components/trajectory-chart-panel/helpers.js","webpack:///./node_modules/@visx/responsive/esm/components/ParentSize.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/is-decimal/index.js","webpack:///./node_modules/unist-util-visit/index.js","webpack:///./node_modules/lodash/isObject.js","webpack:///./node_modules/lodash/_root.js","webpack:///./node_modules/lodash/_nativeCreate.js","webpack:///./node_modules/lodash/_assocIndexOf.js","webpack:///./node_modules/lodash/_getMapData.js","webpack:///./node_modules/@visx/point/esm/index.js","webpack:///./node_modules/@financial-times/vvc/src/components/chart-topper/index.js","webpack:///./node_modules/@financial-times/vvc/src/components/regression-line/index.js","webpack:///./app/components/basic-card/index.js","webpack:///./node_modules/resize-observer-polyfill/dist/ResizeObserver.es.js","webpack:///./node_modules/@visx/point/esm/Point.js","webpack:///./node_modules/@visx/scale/esm/utils/isUtcScale.js","webpack:///./node_modules/d3-array/src/ascending.js","webpack:///./node_modules/@visx/event/lib/localPoint.js","webpack:///./node_modules/d3-scale/src/nice.js","webpack:///../../src/icon/index.js","webpack:///./app/components/line-chart-template/helpers.js","webpack:///./node_modules/@financial-times/o-tracking/src/javascript/core/transports/index.js","webpack:///./node_modules/@financial-times/o-comments/src/js/utils/display-name.js","webpack:///./node_modules/@financial-times/o-overlay/node_modules/ftdomdelegate/browser.js","webpack:///../../src/flourish-embed/index.js","webpack:///./node_modules/d3-time/src/week.js","webpack:///./node_modules/d3-time/src/year.js","webpack:///./node_modules/reduce-css-calc/index.js","webpack:///./node_modules/@financial-times/vvc/src/components/legend/styles.js","webpack:///./node_modules/@financial-times/vvc/src/templates/marimekko-chart/styles-key.js","webpack:///./app/components/trajectory-chart/helpers/generateChartText.js","webpack:///./app/components/trajectory-chart/helpers/generateXTickValues.js","webpack:///./node_modules/@visx/annotation/esm/deprecated/LinePathAnnotation.js","webpack:///./node_modules/d3-path/src/path.js","webpack:///./node_modules/d3-shape/src/constant.js","webpack:///./node_modules/d3-shape/src/math.js","webpack:///./node_modules/d3-shape/src/curve/linear.js","webpack:///./node_modules/d3-shape/src/point.js","webpack:///./node_modules/d3-shape/src/line.js","webpack:///./node_modules/d3-shape/src/curve/radial.js","webpack:///./node_modules/d3-shape/src/array.js","webpack:///./node_modules/d3-shape/src/lineRadial.js","webpack:///./node_modules/d3-shape/src/offset/none.js","webpack:///./node_modules/d3-shape/src/order/none.js","webpack:///./node_modules/@visx/shape/esm/util/setNumberOrNumberAccessor.js","webpack:///./node_modules/d3-shape/src/order/ascending.js","webpack:///./node_modules/d3-shape/src/order/appearance.js","webpack:///./node_modules/d3-shape/src/order/insideOut.js","webpack:///./node_modules/@visx/shape/esm/util/stackOrder.js","webpack:///./node_modules/d3-shape/src/order/descending.js","webpack:///./node_modules/d3-shape/src/order/reverse.js","webpack:///./node_modules/d3-shape/src/offset/expand.js","webpack:///./node_modules/@visx/shape/esm/util/stackOffset.js","webpack:///./node_modules/d3-shape/src/offset/diverging.js","webpack:///./node_modules/d3-shape/src/offset/silhouette.js","webpack:///./node_modules/d3-shape/src/offset/wiggle.js","webpack:///./node_modules/@visx/shape/esm/shapes/LinePath.js","webpack:///./node_modules/@visx/shape/esm/util/D3ShapeFactories.js","webpack:///./node_modules/parse-entities/index.js","webpack:///./node_modules/repeat-string/index.js","webpack:///./node_modules/trim-trailing-lines/index.js","webpack:///./node_modules/remark-parse/lib/util/interrupt.js","webpack:///./node_modules/remark-parse/lib/util/normalize.js","webpack:///./node_modules/@visx/event/lib/typeGuards.js","webpack:///./node_modules/react-autosuggest/dist/compareObjects.js","webpack:///./node_modules/@financial-times/o-tracking/src/javascript/core/transports/xhr.js","webpack:///./node_modules/@financial-times/o-tracking/src/javascript/core/transports/send-beacon.js","webpack:///./node_modules/@financial-times/o-tracking/src/javascript/core/transports/image.js","webpack:///./node_modules/@financial-times/o-overlay/main.js","webpack:///./node_modules/luxon/build/cjs-browser/luxon.js","webpack:///./app/app.js","webpack:///./node_modules/@financial-times/g-components/node_modules/@financial-times/o-header/src/js/header.js","webpack:///./node_modules/@financial-times/o-toggle/src/js/toggle.js","webpack:///./node_modules/@financial-times/o-comments/src/js/comments.js","webpack:///./node_modules/@financial-times/o-overlay/src/js/overlay.js","webpack:///./node_modules/@financial-times/o-comments/src/js/count.js","webpack:///./node_modules/@financial-times/o-footer/src/js/footer.js","webpack:///./node_modules/@financial-times/o-grid/main.js","webpack:///./node_modules/@financial-times/o-share/src/js/share.js","webpack:///./node_modules/@financial-times/o-date/src/js/date.js","webpack:///./node_modules/@financial-times/vvc/src/components/axis/arrows.js","webpack:///./node_modules/d3-time/src/month.js","webpack:///./node_modules/d3-scale/src/ordinal.js","webpack:///./node_modules/d3-format/src/formatSpecifier.js","webpack:///./node_modules/d3-array/src/bisector.js","webpack:///./node_modules/@financial-times/vvc/src/sample-data/legendCategorical.js","webpack:///./node_modules/@financial-times/vvc/src/components/delaunay/delaunay.js","webpack:///./node_modules/@babel/runtime/helpers/getPrototypeOf.js","webpack:///./node_modules/@financial-times/o-table/src/js/oTable.js","webpack:///./app/components/date-picker-input/index.js","webpack:///./app/components/sticky-header/hooks.js","webpack:///./app/hooks/useQueryParamsWithState.js","webpack:///./node_modules/d3-scale/src/tickFormat.js","webpack:///./node_modules/d3-format/src/precisionPrefix.js","webpack:///./node_modules/d3-format/src/precisionRound.js","webpack:///./node_modules/d3-format/src/precisionFixed.js","webpack:///./node_modules/d3-scale/src/linear.js","webpack:///./node_modules/d3-interpolate/src/basis.js","webpack:///./node_modules/d3-interpolate/src/rgb.js","webpack:///./node_modules/d3-interpolate/src/basisClosed.js","webpack:///./node_modules/@visx/scale/esm/scales/band.js","webpack:///./node_modules/d3-scale/src/pow.js","webpack:///./node_modules/@visx/scale/esm/scales/squareRoot.js","webpack:///./node_modules/d3-scale/src/log.js","webpack:///./node_modules/@visx/scale/esm/scales/log.js","webpack:///./node_modules/object-assign/index.js","webpack:///./node_modules/@babel/runtime/helpers/arrayLikeToArray.js","webpack:///./node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js","webpack:///./node_modules/@financial-times/o-tracking/src/javascript/core/send.js","webpack:///./node_modules/@financial-times/o-tracking/src/libs/browser-cuid.js","webpack:///./node_modules/@financial-times/o-tracking/src/javascript/core/queue.js","webpack:///./node_modules/@financial-times/o-tracking/src/javascript/core/user.js","webpack:///./node_modules/@financial-times/o-tracking/src/javascript/core/session.js","webpack:///./node_modules/remove-markdown/index.js","webpack:///./node_modules/@financial-times/g-components/node_modules/@financial-times/o-grid/main.js","webpack:///./node_modules/process/browser.js","webpack:///./node_modules/path-browserify/index.js","webpack:///./node_modules/is-alphabetical/index.js","webpack:///./node_modules/remark-parse/lib/defaults.js","webpack:///./node_modules/remark-parse/lib/util/get-indentation.js","webpack:///./node_modules/remark-parse/lib/util/html.js","webpack:///./node_modules/remark-parse/lib/locate/tag.js","webpack:///./node_modules/remark-parse/lib/locate/link.js","webpack:///./node_modules/@babel/runtime/helpers/setPrototypeOf.js","webpack:///./node_modules/@financial-times/vvc/src/templates/bar-chart/index.js","webpack:///./node_modules/lodash/_baseGetTag.js","webpack:///./node_modules/lodash/_Symbol.js","webpack:///./node_modules/lodash/_getNative.js","webpack:///./node_modules/@financial-times/vvc/src/templates/connected-scatter-chart/index.js","webpack:///./node_modules/@financial-times/vvc/src/templates/line-chart/index.js","webpack:///./node_modules/@financial-times/vvc/src/templates/scatter-chart/index.js","webpack:///./node_modules/@financial-times/vvc/src/templates/small-bar-chart/index.js","webpack:///./node_modules/@financial-times/vvc/src/templates/slope-chart/index.js","webpack:///./node_modules/@financial-times/vvc/src/templates/waffle/index.js","webpack:///./node_modules/@financial-times/vvc/src/templates/thermometer/index.js","webpack:///./node_modules/@financial-times/vvc/src/templates/marimekko-chart/index.js","webpack:///./node_modules/moment/locale/af.js","webpack:///./node_modules/moment/locale/ar.js","webpack:///./node_modules/moment/locale/ar-dz.js","webpack:///./node_modules/moment/locale/ar-kw.js","webpack:///./node_modules/moment/locale/ar-ly.js","webpack:///./node_modules/moment/locale/ar-ma.js","webpack:///./node_modules/moment/locale/ar-sa.js","webpack:///./node_modules/moment/locale/ar-tn.js","webpack:///./node_modules/moment/locale/az.js","webpack:///./node_modules/moment/locale/be.js","webpack:///./node_modules/moment/locale/bg.js","webpack:///./node_modules/moment/locale/bm.js","webpack:///./node_modules/moment/locale/bn.js","webpack:///./node_modules/moment/locale/bn-bd.js","webpack:///./node_modules/moment/locale/bo.js","webpack:///./node_modules/moment/locale/br.js","webpack:///./node_modules/moment/locale/bs.js","webpack:///./node_modules/moment/locale/ca.js","webpack:///./node_modules/moment/locale/cs.js","webpack:///./node_modules/moment/locale/cv.js","webpack:///./node_modules/moment/locale/cy.js","webpack:///./node_modules/moment/locale/da.js","webpack:///./node_modules/moment/locale/de.js","webpack:///./node_modules/moment/locale/de-at.js","webpack:///./node_modules/moment/locale/de-ch.js","webpack:///./node_modules/moment/locale/dv.js","webpack:///./node_modules/moment/locale/el.js","webpack:///./node_modules/moment/locale/en-au.js","webpack:///./node_modules/moment/locale/en-ca.js","webpack:///./node_modules/moment/locale/en-gb.js","webpack:///./node_modules/moment/locale/en-ie.js","webpack:///./node_modules/moment/locale/en-il.js","webpack:///./node_modules/moment/locale/en-in.js","webpack:///./node_modules/moment/locale/en-nz.js","webpack:///./node_modules/moment/locale/en-sg.js","webpack:///./node_modules/moment/locale/eo.js","webpack:///./node_modules/moment/locale/es.js","webpack:///./node_modules/moment/locale/es-do.js","webpack:///./node_modules/moment/locale/es-mx.js","webpack:///./node_modules/moment/locale/es-us.js","webpack:///./node_modules/moment/locale/et.js","webpack:///./node_modules/moment/locale/eu.js","webpack:///./node_modules/moment/locale/fa.js","webpack:///./node_modules/moment/locale/fi.js","webpack:///./node_modules/moment/locale/fil.js","webpack:///./node_modules/moment/locale/fo.js","webpack:///./node_modules/moment/locale/fr.js","webpack:///./node_modules/moment/locale/fr-ca.js","webpack:///./node_modules/moment/locale/fr-ch.js","webpack:///./node_modules/moment/locale/fy.js","webpack:///./node_modules/moment/locale/ga.js","webpack:///./node_modules/moment/locale/gd.js","webpack:///./node_modules/moment/locale/gl.js","webpack:///./node_modules/moment/locale/gom-deva.js","webpack:///./node_modules/moment/locale/gom-latn.js","webpack:///./node_modules/moment/locale/gu.js","webpack:///./node_modules/moment/locale/he.js","webpack:///./node_modules/moment/locale/hi.js","webpack:///./node_modules/moment/locale/hr.js","webpack:///./node_modules/moment/locale/hu.js","webpack:///./node_modules/moment/locale/hy-am.js","webpack:///./node_modules/moment/locale/id.js","webpack:///./node_modules/moment/locale/is.js","webpack:///./node_modules/moment/locale/it.js","webpack:///./node_modules/moment/locale/it-ch.js","webpack:///./node_modules/moment/locale/ja.js","webpack:///./node_modules/moment/locale/jv.js","webpack:///./node_modules/moment/locale/ka.js","webpack:///./node_modules/moment/locale/kk.js","webpack:///./node_modules/moment/locale/km.js","webpack:///./node_modules/moment/locale/kn.js","webpack:///./node_modules/moment/locale/ko.js","webpack:///./node_modules/moment/locale/ku.js","webpack:///./node_modules/moment/locale/ky.js","webpack:///./node_modules/moment/locale/lb.js","webpack:///./node_modules/moment/locale/lo.js","webpack:///./node_modules/moment/locale/lt.js","webpack:///./node_modules/moment/locale/lv.js","webpack:///./node_modules/moment/locale/me.js","webpack:///./node_modules/moment/locale/mi.js","webpack:///./node_modules/moment/locale/mk.js","webpack:///./node_modules/moment/locale/ml.js","webpack:///./node_modules/moment/locale/mn.js","webpack:///./node_modules/moment/locale/mr.js","webpack:///./node_modules/moment/locale/ms.js","webpack:///./node_modules/moment/locale/ms-my.js","webpack:///./node_modules/moment/locale/mt.js","webpack:///./node_modules/moment/locale/my.js","webpack:///./node_modules/moment/locale/nb.js","webpack:///./node_modules/moment/locale/ne.js","webpack:///./node_modules/moment/locale/nl.js","webpack:///./node_modules/moment/locale/nl-be.js","webpack:///./node_modules/moment/locale/nn.js","webpack:///./node_modules/moment/locale/oc-lnc.js","webpack:///./node_modules/moment/locale/pa-in.js","webpack:///./node_modules/moment/locale/pl.js","webpack:///./node_modules/moment/locale/pt.js","webpack:///./node_modules/moment/locale/pt-br.js","webpack:///./node_modules/moment/locale/ro.js","webpack:///./node_modules/moment/locale/ru.js","webpack:///./node_modules/moment/locale/sd.js","webpack:///./node_modules/moment/locale/se.js","webpack:///./node_modules/moment/locale/si.js","webpack:///./node_modules/moment/locale/sk.js","webpack:///./node_modules/moment/locale/sl.js","webpack:///./node_modules/moment/locale/sq.js","webpack:///./node_modules/moment/locale/sr.js","webpack:///./node_modules/moment/locale/sr-cyrl.js","webpack:///./node_modules/moment/locale/ss.js","webpack:///./node_modules/moment/locale/sv.js","webpack:///./node_modules/moment/locale/sw.js","webpack:///./node_modules/moment/locale/ta.js","webpack:///./node_modules/moment/locale/te.js","webpack:///./node_modules/moment/locale/tet.js","webpack:///./node_modules/moment/locale/tg.js","webpack:///./node_modules/moment/locale/th.js","webpack:///./node_modules/moment/locale/tk.js","webpack:///./node_modules/moment/locale/tl-ph.js","webpack:///./node_modules/moment/locale/tlh.js","webpack:///./node_modules/moment/locale/tr.js","webpack:///./node_modules/moment/locale/tzl.js","webpack:///./node_modules/moment/locale/tzm.js","webpack:///./node_modules/moment/locale/tzm-latn.js","webpack:///./node_modules/moment/locale/ug-cn.js","webpack:///./node_modules/moment/locale/uk.js","webpack:///./node_modules/moment/locale/ur.js","webpack:///./node_modules/moment/locale/uz.js","webpack:///./node_modules/moment/locale/uz-latn.js","webpack:///./node_modules/moment/locale/vi.js","webpack:///./node_modules/moment/locale/x-pseudo.js","webpack:///./node_modules/moment/locale/yo.js","webpack:///./node_modules/moment/locale/zh-cn.js","webpack:///./node_modules/moment/locale/zh-hk.js","webpack:///./node_modules/moment/locale/zh-mo.js","webpack:///./node_modules/moment/locale/zh-tw.js","webpack:///./node_modules/@financial-times/g-components/node_modules/@financial-times/o-header/src/js/search.js","webpack:///./node_modules/@financial-times/o-toggle/src/js/target.js","webpack:///./node_modules/@financial-times/g-components/node_modules/@financial-times/o-header/src/js/mega.js","webpack:///./node_modules/@financial-times/g-components/node_modules/@financial-times/o-header/src/js/drawer.js","webpack:///./node_modules/@financial-times/g-components/node_modules/@financial-times/o-header/src/js/subnav.js","webpack:///./node_modules/@financial-times/g-components/node_modules/@financial-times/o-header/src/js/sticky.js","webpack:///./node_modules/@financial-times/o-comments/src/js/stream.js","webpack:///./node_modules/@financial-times/o-comments/src/js/utils/events.js","webpack:///./node_modules/focusable/index.js","webpack:///./node_modules/@financial-times/o-comments/src/js/utils/auth.js","webpack:///./node_modules/@financial-times/o-comments/src/js/utils/purge-jwt-cache.js","webpack:///./node_modules/@financial-times/o-footer/src/js/layout.js","webpack:///../../src/big-topper/index.js","webpack:///../../src/share/index.js","webpack:///../../src/bylines/index.js","webpack:///./node_modules/@financial-times/o-share/node_modules/ftdomdelegate/browser.js","webpack:///../../src/epilogue/index.js","webpack:///../../src/card/index.js","webpack:///./app/components/scatter/index.js","webpack:///./app/components/scatter/chart.js","webpack:///./node_modules/@financial-times/vvc/src/components/tooltip/index.js","webpack:///./node_modules/@financial-times/vvc/src/sample-data/categorical-us.js","webpack:///./node_modules/@financial-times/vvc/src/components/chart-frame/watermarks.js","webpack:///./node_modules/@financial-times/vvc/src/components/chart-footer/index.js","webpack:///./node_modules/lodash/debounce.js","webpack:///./node_modules/@financial-times/vvc/src/components/chart-frame/print.js","webpack:///./node_modules/@financial-times/vvc/src/components/chart-frame/social.js","webpack:///./node_modules/@financial-times/vvc/src/components/chart-frame/video.js","webpack:///./node_modules/@financial-times/vvc/src/components/axis/styles-arrows.js","webpack:///./node_modules/@financial-times/vvc/src/components/axis/banding.js","webpack:///./node_modules/lodash.assign/index.js","webpack:///./node_modules/lodash.defaults/index.js","webpack:///./node_modules/d3-time/src/hour.js","webpack:///./node_modules/d3-time/src/minute.js","webpack:///./node_modules/d3-time/src/utcDay.js","webpack:///./node_modules/d3-time/src/utcHour.js","webpack:///./node_modules/d3-time/src/utcMinute.js","webpack:///./node_modules/d3-time/src/utcMonth.js","webpack:///./node_modules/d3-time/src/utcWeek.js","webpack:///./node_modules/d3-time/src/utcYear.js","webpack:///./node_modules/lodash/memoize.js","webpack:///./node_modules/lodash.groupby/index.js","webpack:///./node_modules/@financial-times/vvc/src/components/legend/legendCategorical.js","webpack:///./node_modules/@financial-times/vvc/src/components/legend/legendThreshold.js","webpack:///./node_modules/@financial-times/vvc/src/components/legend/legendMagnitude.js","webpack:///./node_modules/@financial-times/vvc/src/templates/line-chart/axis-fade.js","webpack:///./node_modules/remove-accents/index.js","webpack:///./node_modules/@financial-times/vvc/src/templates/marimekko-chart/marimekko-key.js","webpack:///./app/components/scatter/panel.js","webpack:///./app/components/react-range/index.js","webpack:///./app/components/react-range/Rangeslider.js","webpack:///./node_modules/@babel/runtime/helpers/classCallCheck.js","webpack:///./node_modules/@babel/runtime/helpers/createClass.js","webpack:///./node_modules/@babel/runtime/helpers/inherits.js","webpack:///./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js","webpack:///./app/components/total/index.js","webpack:///./node_modules/indefinite/dist/indefinite.js","webpack:///./app/components/table/index.js","webpack:///../../src/data-table/index.js","webpack:///./node_modules/@financial-times/o-table/src/js/Tables/FlatTable.js","webpack:///./node_modules/@financial-times/o-table/node_modules/ftdomdelegate/browser.js","webpack:///./node_modules/@financial-times/o-table/src/js/Tables/ScrollTable.js","webpack:///./node_modules/@financial-times/o-table/src/js/Tables/OverflowTable.js","webpack:///./node_modules/@financial-times/o-table/src/js/Tables/BasicTable.js","webpack:///./node_modules/@financial-times/o-table/src/js/Sort/TableSorter.js","webpack:///./node_modules/@financial-times/o-table/src/js/Sort/CellFormatter.js","webpack:///./app/components/trajectory-chart-panel/index.js","webpack:///./app/components/area-lookup/index.js","webpack:///../../src/autosuggest-search/index.js","webpack:///./app/util/getAlternativeAreaNames.js","webpack:///./app/components/options-panel/index.js","webpack:///./app/components/options-overlay/index.js","webpack:///../../src/overlay/index.js","webpack:///../../src/overlay/overlayContents.js","webpack:///../../src/overlay/useOverlay.js","webpack:///./app/components/trajectory-chart/index.js","webpack:///./node_modules/moment-timezone/index.js","webpack:///./app/components/line-chart-template/index.js","webpack:///./app/components/line-chart-template/labels/index.js","webpack:///./app/components/line-chart-template/dots/index.js","webpack:///./app/components/line-chart-template/multiple-line-tick-label/index.js","webpack:///./app/components/line-chart-template/axis-fade/index.js","webpack:///./app/components/trajectory-chart/helpers/formatDataForChart.js","webpack:///./app/components/trajectory-chart/helpers/getNumberOfDecimalPlacesForTicks.js","webpack:///./app/components/trajectory-chart/tooltip.js","webpack:///./app/components/toggle/index.js","webpack:///./app/components/navigation-header/index.js","webpack:///./app/components/sticky-header/index.js","webpack:///./app/components/youtube-embed/index.js","webpack:///./app/copy/intro.md","webpack:///./app/copy/scatter-chart-copy.md","webpack:///./app/copy/sources.md","webpack:///./app/copy/byline.md","webpack:///./node_modules/react-hot-loader/root.js","webpack:///./node_modules/@visx/tooltip/esm/tooltips/Tooltip.js","webpack:///./node_modules/@visx/mock-data/esm/mocks/letterFrequency.js","webpack:///./node_modules/@visx/tooltip/esm/hooks/useTooltip.js","webpack:///./node_modules/d3-array/src/sum.js","webpack:///./node_modules/d3-time/src/millisecond.js","webpack:///./node_modules/d3-time/src/ticks.js","webpack:///./node_modules/d3-scale/src/time.js","webpack:///./node_modules/@visx/scale/esm/scales/time.js","webpack:///./node_modules/@visx/text/esm/util/getStringWidth.js","webpack:///./node_modules/@visx/text/esm/hooks/useText.js","webpack:///./node_modules/@visx/text/esm/Text.js","webpack:///./node_modules/d3-array/src/range.js","webpack:///./node_modules/d3-scale/src/band.js","webpack:///./node_modules/@visx/shape/esm/shapes/Polygon.js","webpack:///./node_modules/@visx/shape/esm/util/trigonometry.js","webpack:///./node_modules/@financial-times/o-tracking/src/javascript/core.js","webpack:///./node_modules/react-hot-loader/patch.js","webpack:///./node_modules/react-hot-loader/dist/react-hot-loader.production.min.js","webpack:///./node_modules/react/cjs/react.production.min.js","webpack:///./app/index.js","webpack:///./node_modules/react-dom/cjs/react-dom.production.min.js","webpack:///./node_modules/scheduler/index.js","webpack:///./node_modules/scheduler/cjs/scheduler.production.min.js","webpack:///./node_modules/@babel/runtime/helpers/arrayWithoutHoles.js","webpack:///./node_modules/@babel/runtime/helpers/iterableToArray.js","webpack:///./node_modules/@babel/runtime/helpers/nonIterableSpread.js","webpack:///./node_modules/@babel/runtime/helpers/arrayWithHoles.js","webpack:///./node_modules/@babel/runtime/helpers/iterableToArrayLimit.js","webpack:///./node_modules/@babel/runtime/helpers/nonIterableRest.js","webpack:///./node_modules/regenerator-runtime/runtime.js","webpack:///./node_modules/prop-types/factoryWithThrowingShims.js","webpack:///./node_modules/prop-types/lib/ReactPropTypesSecret.js","webpack:///./node_modules/@financial-times/g-components/node_modules/@financial-times/o-header/main.js","webpack:///../src/index.js","webpack:///./node_modules/@financial-times/o-comments/main.js","webpack:///./node_modules/@financial-times/o-footer/main.js","webpack:///./node_modules/@financial-times/o-share/main.js","webpack:///./node_modules/@financial-times/o-date/main.js","webpack:///./node_modules/unified/index.js","webpack:///./node_modules/extend/index.js","webpack:///./node_modules/bail/index.js","webpack:///./node_modules/unified/node_modules/vfile/index.js","webpack:///./node_modules/unified/node_modules/vfile-message/index.js","webpack:///./node_modules/unified/node_modules/unist-util-stringify-position/index.js","webpack:///./node_modules/unified/node_modules/vfile/core.js","webpack:///./node_modules/unified/node_modules/replace-ext/index.js","webpack:///./node_modules/unified/node_modules/is-buffer/index.js","webpack:///./node_modules/trough/index.js","webpack:///./node_modules/trough/wrap.js","webpack:///./node_modules/x-is-string/index.js","webpack:///./node_modules/is-plain-obj/index.js","webpack:///./node_modules/remark-parse/index.js","webpack:///./node_modules/unherit/index.js","webpack:///./node_modules/inherits/inherits_browser.js","webpack:///./node_modules/remark-parse/lib/parser.js","webpack:///./node_modules/state-toggle/index.js","webpack:///./node_modules/vfile-location/index.js","webpack:///./node_modules/remark-parse/lib/unescape.js","webpack:///./node_modules/remark-parse/lib/decode.js","webpack:///./node_modules/is-hexadecimal/index.js","webpack:///./node_modules/is-alphanumerical/index.js","webpack:///./node_modules/parse-entities/decode-entity.browser.js","webpack:///./node_modules/remark-parse/lib/tokenizer.js","webpack:///./node_modules/remark-parse/lib/set-options.js","webpack:///./node_modules/markdown-escapes/index.js","webpack:///./node_modules/remark-parse/lib/parse.js","webpack:///./node_modules/unist-util-remove-position/index.js","webpack:///./node_modules/unist-util-visit/node_modules/unist-util-visit-parents/index.js","webpack:///./node_modules/unist-util-visit/node_modules/unist-util-is/convert.js","webpack:///./node_modules/remark-parse/lib/tokenize/newline.js","webpack:///./node_modules/remark-parse/lib/tokenize/code-indented.js","webpack:///./node_modules/remark-parse/lib/tokenize/code-fenced.js","webpack:///./node_modules/remark-parse/lib/tokenize/blockquote.js","webpack:///./node_modules/remark-parse/lib/tokenize/heading-atx.js","webpack:///./node_modules/remark-parse/lib/tokenize/thematic-break.js","webpack:///./node_modules/remark-parse/lib/tokenize/list.js","webpack:///./node_modules/remark-parse/lib/util/remove-indentation.js","webpack:///./node_modules/remark-parse/lib/tokenize/heading-setext.js","webpack:///./node_modules/remark-parse/lib/tokenize/html-block.js","webpack:///./node_modules/remark-parse/lib/tokenize/footnote-definition.js","webpack:///./node_modules/collapse-white-space/index.js","webpack:///./node_modules/remark-parse/lib/tokenize/definition.js","webpack:///./node_modules/remark-parse/lib/tokenize/table.js","webpack:///./node_modules/remark-parse/lib/tokenize/paragraph.js","webpack:///./node_modules/remark-parse/lib/tokenize/escape.js","webpack:///./node_modules/remark-parse/lib/locate/escape.js","webpack:///./node_modules/remark-parse/lib/tokenize/auto-link.js","webpack:///./node_modules/remark-parse/lib/tokenize/url.js","webpack:///./node_modules/remark-parse/lib/locate/url.js","webpack:///./node_modules/remark-parse/lib/tokenize/html-inline.js","webpack:///./node_modules/remark-parse/lib/tokenize/link.js","webpack:///./node_modules/remark-parse/lib/tokenize/reference.js","webpack:///./node_modules/remark-parse/lib/tokenize/strong.js","webpack:///./node_modules/remark-parse/lib/locate/strong.js","webpack:///./node_modules/remark-parse/lib/tokenize/emphasis.js","webpack:///./node_modules/is-word-character/index.js","webpack:///./node_modules/remark-parse/lib/locate/emphasis.js","webpack:///./node_modules/remark-parse/lib/tokenize/delete.js","webpack:///./node_modules/remark-parse/lib/locate/delete.js","webpack:///./node_modules/remark-parse/lib/tokenize/code-inline.js","webpack:///./node_modules/remark-parse/lib/locate/code-inline.js","webpack:///./node_modules/remark-parse/lib/tokenize/break.js","webpack:///./node_modules/remark-parse/lib/locate/break.js","webpack:///./node_modules/remark-parse/lib/tokenize/text.js","webpack:///./node_modules/mdast-add-list-metadata/index.js","webpack:///./node_modules/unist-util-visit-parents/index.js","webpack:///./node_modules/react-markdown/lib/plugins/naive-html.js","webpack:///./node_modules/react-markdown/lib/plugins/disallow-node.js","webpack:///./node_modules/react-markdown/lib/ast-to-react.js","webpack:///./node_modules/react-markdown/lib/wrap-table-rows.js","webpack:///./node_modules/react-markdown/lib/get-definitions.js","webpack:///./node_modules/react-markdown/lib/uriTransformer.js","webpack:///./node_modules/react-markdown/lib/renderers.js","webpack:///./node_modules/strict-uri-encode/index.js","webpack:///./node_modules/decode-uri-component/index.js","webpack:///./node_modules/split-on-first/index.js","webpack:///./node_modules/filter-obj/index.js","webpack:///./node_modules/@babel/runtime/helpers/inheritsLoose.js","webpack:///./app/components/list-card/index.js","webpack:///./node_modules/lodash/now.js","webpack:///./node_modules/lodash/_freeGlobal.js","webpack:///./node_modules/lodash/toNumber.js","webpack:///./node_modules/lodash/_baseTrim.js","webpack:///./node_modules/lodash/_trimmedEndIndex.js","webpack:///./node_modules/lodash/isSymbol.js","webpack:///./node_modules/lodash/_getRawTag.js","webpack:///./node_modules/lodash/_objectToString.js","webpack:///./node_modules/lodash/isObjectLike.js","webpack:///./node_modules/reduce-css-calc/node_modules/balanced-match/index.js","webpack:///./node_modules/reduce-function-call/index.js","webpack:///./node_modules/balanced-match/index.js","webpack:///./node_modules/math-expression-evaluator/src/formula_evaluator.js","webpack:///./node_modules/math-expression-evaluator/src/postfix_evaluator.js","webpack:///./node_modules/math-expression-evaluator/src/postfix.js","webpack:///./node_modules/math-expression-evaluator/src/lexer.js","webpack:///./node_modules/math-expression-evaluator/src/math_function.js","webpack:///./node_modules/lodash/_MapCache.js","webpack:///./node_modules/lodash/_mapCacheClear.js","webpack:///./node_modules/lodash/_Hash.js","webpack:///./node_modules/lodash/_hashClear.js","webpack:///./node_modules/lodash/_baseIsNative.js","webpack:///./node_modules/lodash/isFunction.js","webpack:///./node_modules/lodash/_isMasked.js","webpack:///./node_modules/lodash/_coreJsData.js","webpack:///./node_modules/lodash/_toSource.js","webpack:///./node_modules/lodash/_getValue.js","webpack:///./node_modules/lodash/_hashDelete.js","webpack:///./node_modules/lodash/_hashGet.js","webpack:///./node_modules/lodash/_hashHas.js","webpack:///./node_modules/lodash/_hashSet.js","webpack:///./node_modules/lodash/_ListCache.js","webpack:///./node_modules/lodash/_listCacheClear.js","webpack:///./node_modules/lodash/_listCacheDelete.js","webpack:///./node_modules/lodash/eq.js","webpack:///./node_modules/lodash/_listCacheGet.js","webpack:///./node_modules/lodash/_listCacheHas.js","webpack:///./node_modules/lodash/_listCacheSet.js","webpack:///./node_modules/lodash/_Map.js","webpack:///./node_modules/lodash/_mapCacheDelete.js","webpack:///./node_modules/lodash/_isKeyable.js","webpack:///./node_modules/lodash/_mapCacheGet.js","webpack:///./node_modules/lodash/_mapCacheHas.js","webpack:///./node_modules/lodash/_mapCacheSet.js","webpack:///./node_modules/@visx/event/lib/localPointGeneric.js","webpack:///./node_modules/@visx/event/lib/getXAndYFromEvent.js","webpack:///./node_modules/@babel/runtime/helpers/typeof.js","webpack:///./node_modules/@financial-times/o-table/main.js","webpack:///./node_modules/react-autosuggest/dist/index.js","webpack:///./node_modules/react-autosuggest/dist/Autosuggest.js","webpack:///./node_modules/shallow-equal/arrays/index.js","webpack:///./node_modules/react-autosuggest/dist/Autowhatever.js","webpack:///./node_modules/section-iterator/dist/index.js","webpack:///./node_modules/react-themeable/dist/index.js","webpack:///./node_modules/react-themeable/node_modules/object-assign/index.js","webpack:///./node_modules/react-autosuggest/dist/SectionTitle.js","webpack:///./node_modules/react-autosuggest/dist/ItemList.js","webpack:///./node_modules/react-autosuggest/dist/Item.js","webpack:///./node_modules/react-autosuggest/dist/theme.js","webpack:///./node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js","webpack:///./app/components/date-picker/index.js","webpack:///./node_modules/moment-timezone/moment-timezone.js","webpack:///./node_modules/moment/locale sync ^\\.\\/.*$","webpack:///./app/copy/related.md","webpack:///./node_modules/@visx/bounds/esm/enhancers/withBoundingRects.js","webpack:///./node_modules/@visx/axis/esm/axis/AxisTop.js","webpack:///./node_modules/@visx/axis/esm/axis/AxisRight.js","webpack:///./node_modules/@visx/axis/esm/axis/AxisBottom.js","webpack:///./node_modules/@visx/axis/esm/axis/AxisLeft.js","webpack:///./node_modules/d3-array/src/max.js","webpack:///./node_modules/@visx/scale/esm/scales/point.js","webpack:///./node_modules/@visx/event/esm/getXAndYFromEvent.js","webpack:///./node_modules/@visx/event/esm/localPointGeneric.js","webpack:///./node_modules/@visx/event/esm/typeGuards.js","webpack:///./node_modules/@visx/event/esm/localPoint.js","webpack:///./node_modules/@visx/drag/esm/useDrag.js","webpack:///./node_modules/@visx/drag/esm/util/useStateWithCallback.js","webpack:///./node_modules/@visx/drag/esm/Drag.js","webpack:///./node_modules/delaunator/index.js","webpack:///./node_modules/d3-delaunay/src/path.js","webpack:///./node_modules/d3-delaunay/src/polygon.js","webpack:///./node_modules/d3-delaunay/src/voronoi.js","webpack:///./node_modules/d3-delaunay/src/delaunay.js","webpack:///./node_modules/d3-random/src/lcg.js","webpack:///./node_modules/@visx/mock-data/esm/generators/getSeededRandom.js","webpack:///./node_modules/@visx/mock-data/esm/generators/genDateValue.js","webpack:///./node_modules/@visx/scale/esm/scales/threshold.js","webpack:///./node_modules/d3-scale/src/threshold.js","webpack:///./node_modules/d3-interpolate/src/round.js","webpack:///./node_modules/d3-array/src/ticks.js","webpack:///./node_modules/d3-format/src/formatPrefixAuto.js","webpack:///./node_modules/d3-format/src/defaultLocale.js","webpack:///./node_modules/d3-format/src/formatRounded.js","webpack:///./node_modules/d3-format/src/formatTypes.js","webpack:///./node_modules/d3-format/src/identity.js","webpack:///./node_modules/d3-format/src/locale.js","webpack:///./node_modules/d3-format/src/formatGroup.js","webpack:///./node_modules/d3-format/src/formatNumerals.js","webpack:///./node_modules/d3-format/src/formatTrim.js","webpack:///./node_modules/d3-array/src/bisect.js","webpack:///./node_modules/d3-array/src/number.js"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","parentHotUpdateCallback","window","hotAvailableFilesMap","hotRequestedFilesMap","hotUpdate","hotWaitingFiles","hotChunksLoading","hotUpdateDownloaded","hotAddUpdateChunk","hotCurrentChildModule","hotApplyOnUpdate","hotCurrentHash","hotCurrentModuleData","hotCurrentParents","hotCurrentParentsTemp","hotCreateRequire","me","installedModules","__webpack_require__","fn","request","hot","active","parents","indexOf","children","console","warn","ObjectFactory","name","configurable","enumerable","get","set","value","defineProperty","e","hotStatus","hotSetStatus","then","finishChunkLoading","err","hotWaitingFilesMap","hotEnsureUpdateChunk","t","mode","hotCreateModule","_acceptedDependencies","_declinedDependencies","_selfAccepted","_selfDeclined","_selfInvalidated","_disposeHandlers","_main","accept","dep","callback","undefined","decline","dispose","addDisposeHandler","removeDisposeHandler","idx","splice","invalidate","this","hotApplyInvalidatedModule","hotQueuedInvalidatedModules","check","hotCheck","apply","hotApply","status","l","hotStatusHandlers","addStatusHandler","removeStatusHandler","newStatus","hotDeferred","hotUpdateNewHash","toModuleId","id","Error","requestTimeout","Promise","resolve","reject","XMLHttpRequest","requestPath","p","open","timeout","send","onreadystatechange","readyState","update","JSON","parse","responseText","hotApplyInvalidatedModules","c","h","promise","script","document","createElement","charset","src","head","appendChild","hotDownloadUpdateChunk","deferred","result","outdatedModules","options","hotApplyInternal","cb","j","module","getAffectedStuff","updateModuleId","outdatedDependencies","queue","map","chain","queueItem","pop","type","parentId","parent","concat","addAllToSet","a","b","item","appliedUpdate","warnUnexpectedRequire","abortError","doApply","doDispose","chainInfo","join","onDeclined","ignoreDeclined","onUnaccepted","ignoreUnaccepted","onAccepted","onDisposed","outdatedSelfAcceptedModules","slice","errorHandler","keys","forEach","hotDisposeChunk","dependency","moduleOutdatedDependencies","disposeHandlers","child","error","callbacks","onErrored","dependencyId","ignoreErrored","err2","originalError","list","0","exports","promises","installedChunkData","onScriptComplete","nc","setAttribute","substr","jsonpScriptSrc","event","onerror","onload","clearTimeout","chunk","errorType","realSrc","target","message","setTimeout","all","m","d","getter","o","r","Symbol","toStringTag","__esModule","ns","create","key","bind","n","object","property","oe","jsonpArray","oldJsonpFunction","s","_setPrototypeOf","setPrototypeOf","__proto__","StyleSheet","isSpeedy","speedy","tags","ctr","nonce","container","before","_proto","insert","rule","_tag","tag","createTextNode","createStyleElement","nextSibling","insertBefore","sheet","styleSheets","ownerNode","sheetForTag","isImportRule","charCodeAt","insertRule","cssRules","flush","parentNode","removeChild","W","X","trim","split","ia","Z","v","replace","F","P","substring","w","L","ja","ka","test","aa","G","ba","la","ma","R","na","ea","oa","H","q","g","x","A","S","B","U","prefix","D","z","M","k","y","C","K","u","I","J","f","N","charAt","ca","O","da","fa","Y","E","ha","Q","use","T","toSheet","block","Sheet","current","ruleSheet","context","content","selectors","line","column","depth","at","delimiter","stylisOptions","stylis","inserted","_insert","nodes","querySelectorAll","Array","node","getAttribute","stylisPlugins","selector","serialized","shouldCache","styles","cache","registered","getRegisteredStyles","registeredStyles","classNames","rawClassName","className","insertStyles","isStringTag","next","str","len","toString","animationIterationCount","borderImageOutset","borderImageSlice","borderImageWidth","boxFlex","boxFlexGroup","boxOrdinalGroup","columnCount","columns","flex","flexGrow","flexPositive","flexShrink","flexNegative","flexOrder","gridRow","gridRowEnd","gridRowSpan","gridRowStart","gridColumn","gridColumnEnd","gridColumnSpan","gridColumnStart","msGridRow","msGridRowSpan","msGridColumn","msGridColumnSpan","fontWeight","lineHeight","opacity","order","orphans","tabSize","widows","zIndex","zoom","WebkitLineClamp","fillOpacity","floodOpacity","stopOpacity","strokeDasharray","strokeDashoffset","strokeMiterlimit","strokeOpacity","strokeWidth","hyphenateRegex","animationRegex","isCustomProperty","isProcessableValue","processStyleName","arg","styleName","toLowerCase","match","p1","p2","cursor","handleInterpolation","mergedProps","interpolation","couldBeSelectorInterpolation","__emotion_styles","anim","obj","string","isArray","_key","interpolated","_i","createStringFromObject","previousCursor","cached","labelPattern","args","stringMode","strings","raw","lastIndex","identifierName","exec","EmotionCacheContext","HTMLElement","ThemeContext","Provider","func","render","props","ref","Consumer","typePropName","createEmotionProps","newProps","Noop","theme","cssProp","css","ele","possiblyStyleElement","Emotion","_len","arguments","argsLength","createElementArgArray","classnames","cls","toAdd","merge","cx","_len2","_key2","originalModule","webpackPolyfill","hookCallback","some","hooks","input","isObject","hasOwnProp","isObjectEmpty","getOwnPropertyNames","isUndefined","isNumber","isDate","Date","arr","res","extend","valueOf","createUTC","format","locale","strict","createLocalOrUTC","utc","getParsingFlags","_pf","empty","unusedTokens","unusedInput","overflow","charsLeftOver","nullInput","invalidEra","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","era","meridiem","rfc2822","weekdayMismatch","isValid","_isValid","flags","parsedParts","isNowValid","isNaN","_d","getTime","invalidWeekday","_strict","bigHour","isFrozen","createInvalid","NaN","fun","momentProperties","updateInProgress","copyConfig","to","from","prop","val","_isAMomentObject","_f","_l","_tzm","_isUTC","_offset","_locale","Moment","config","updateOffset","isMoment","msg","suppressDeprecationWarnings","deprecate","firstTime","deprecationHandler","stack","deprecations","deprecateSimple","isFunction","Function","mergeConfigs","parentConfig","childConfig","Locale","zeroFill","number","targetLength","forceSign","absNumber","Math","abs","zerosToFill","pow","max","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","token","padded","ordinal","localeData","formatMoment","expandFormat","array","mom","output","makeFormatFunction","invalidDate","replaceLongDateFormatTokens","longDateFormat","aliases","addUnitAlias","unit","shorthand","lowerCase","normalizeUnits","units","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","priorities","addUnitPriority","priority","isLeapYear","year","absFloor","ceil","floor","toInt","argumentForCoercion","coercedNumber","isFinite","makeGetSet","keepTime","set$1","month","date","daysInMonth","regexes","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchWord","addRegexToken","regex","strictRegex","isStrict","getParseRegexForToken","RegExp","regexEscape","matched","p3","p4","tokens","addParseToken","addWeekParseToken","_w","addTimeToArrayFromToken","_a","modMonth","monthsShort","months","monthsShortRegex","monthsRegex","monthsParse","defaultLocaleMonths","defaultLocaleMonthsShort","MONTHS_IN_FORMAT","defaultMonthsShortRegex","defaultMonthsRegex","handleStrictParse","monthName","ii","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","setMonth","dayOfMonth","min","getSetMonth","computeMonthsParse","cmpLenRev","shortPieces","longPieces","mixedPieces","sort","_monthsRegex","_monthsShortRegex","_monthsStrictRegex","_monthsShortStrictRegex","daysInYear","parseTwoDigitYear","parseInt","getSetYear","createDate","ms","getFullYear","setFullYear","createUTCDate","UTC","getUTCFullYear","setUTCFullYear","firstWeekOffset","dow","doy","fwd","getUTCDay","dayOfYearFromWeeks","week","weekday","resYear","resDayOfYear","dayOfYear","weekOfYear","resWeek","weekOffset","weeksInYear","weekOffsetNext","shiftWeekdays","ws","weekdaysMin","weekdaysShort","weekdays","weekdaysMinRegex","weekdaysShortRegex","weekdaysRegex","weekdaysParse","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","handleStrictParse$1","weekdayName","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","day","computeWeekdaysParse","minp","shortp","longp","minPieces","_weekdaysRegex","_weekdaysShortRegex","_weekdaysMinRegex","_weekdaysStrictRegex","_weekdaysShortStrictRegex","_weekdaysMinStrictRegex","hFormat","hours","lowercase","minutes","matchMeridiem","_meridiemParse","seconds","kInput","_isPm","isPM","_meridiem","pos","pos1","pos2","globalLocale","getSetHour","baseConfig","calendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","LTS","LT","LL","LLL","LLLL","dayOfMonthOrdinalParse","relativeTime","future","past","ss","mm","hh","dd","ww","MM","yy","meridiemParse","locales","localeFamilies","commonPrefix","arr1","arr2","minl","normalizeLocale","loadLocale","oldLocale","_abbr","getSetGlobalLocale","values","getLocale","defineLocale","abbr","_config","parentLocale","names","chooseLocale","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","configFromStringAndFormat","untruncateYear","yearStr","configFromRFC2822","parsedArray","monthStr","dayStr","hourStr","minuteStr","secondStr","weekdayStr","parsedInput","getDay","checkWeekday","obsOffset","militaryOffset","numOffset","hm","calculateOffset","setUTCMinutes","getUTCMinutes","defaults","configFromArray","currentDate","expectedWeekday","yearToUse","nowValue","now","_useUTC","getUTCMonth","getUTCDate","getMonth","getDate","currentDateArray","weekYear","temp","weekdayOverflow","curWeek","GG","createLocal","_week","gg","_dayOfYear","dayOfYearFromWeekInfo","_nextDay","ISO_8601","RFC_2822","skipped","stringLength","totalParsedInputLength","hour","isPm","meridiemHour","meridiemFixWrap","erasConvertYear","prepareConfig","preparse","tempConfig","bestMoment","scoreToBeat","currentScore","validFormatFound","bestFormatIsValid","score","configFromStringAndArray","createFromInputFallback","configFromString","dayOrDate","minute","second","millisecond","configFromObject","configFromInput","isUTC","add","prototypeMin","other","prototypeMax","pickBy","moments","ordering","Duration","duration","years","quarters","quarter","weeks","isoWeek","days","milliseconds","unitHasDecimal","parseFloat","isDurationValid","_milliseconds","_days","_months","_data","_bubble","isDuration","absRound","round","offset","separator","utcOffset","sign","offsetFromString","chunkOffset","matcher","parts","matches","cloneWithOffset","model","diff","clone","setTime","local","getDateOffset","getTimezoneOffset","isUtc","aspNetRegex","isoRegex","createDuration","ret","diffRes","base","parseIso","isBefore","positiveMomentsDifference","inp","isAfter","createAdder","direction","period","tmp","addSubtract","isAdding","invalid","subtract","isString","String","isMomentInput","arrayTest","dataTypeTest","filter","isNumberOrStringArray","objectTest","propertyTest","properties","isMomentInputObject","isCalendarSpec","monthDiff","wholeMonthDiff","anchor","newLocaleData","defaultFormat","defaultFormatUtc","lang","mod$1","dividend","divisor","localStartOfDate","utcStartOfDate","matchEraAbbr","erasAbbrRegex","computeErasParse","abbrPieces","namePieces","narrowPieces","eras","narrow","_erasRegex","_erasNameRegex","_erasAbbrRegex","_erasNarrowRegex","addWeekYearFormatToken","getSetWeekYearHelper","weeksTarget","setWeekAll","dayOfYearData","erasNameRegex","erasNarrowRegex","erasParse","_eraYearOrdinalRegex","eraYearOrdinalParse","isoWeekYear","_dayOfMonthOrdinalParse","_ordinalParse","_dayOfMonthOrdinalParseLenient","getSetDayOfMonth","getSetMinute","getSetMillisecond","getSetSecond","parseMs","proto","preParsePostFormat","time","formats","sod","startOf","calendarFormat","asFloat","that","zoneDelta","endOf","startOfDate","isoWeekday","inputString","postformat","withoutSuffix","humanize","fromNow","toNow","invalidAt","localInput","isBetween","inclusivity","localFrom","localTo","isSame","inputMs","isSameOrAfter","isSameOrBefore","parsingFlags","prioritized","unitsObj","getPrioritizedUnits","toArray","toObject","toDate","toISOString","keepOffset","inspect","suffix","zone","isLocal","for","toJSON","unix","creationData","eraName","since","until","eraNarrow","eraAbbr","eraYear","dir","isoWeeks","weekInfo","weeksInWeekYear","isoWeeksInYear","isoWeeksInISOWeekYear","parseWeekday","parseIsoWeekday","keepLocalTime","keepMinutes","localAdjust","_changeInProgress","parseZone","tZone","hasAlignedHourOffset","isDST","isUtcOffset","zoneAbbr","zoneName","dates","isDSTShifted","_isDSTShifted","array1","array2","dontConvert","lengthDiff","diffs","compareArrays","proto$1","get$1","index","field","setter","listMonthsImpl","out","listWeekdaysImpl","localeSorted","_calendar","_longDateFormat","formatUpper","toUpperCase","tok","_invalidDate","_ordinal","isFuture","_relativeTime","pastFuture","source","_eras","isFormat","_monthsShort","_monthsParseExact","firstDayOfYear","firstDayOfWeek","_weekdays","_weekdaysMin","_weekdaysShort","_weekdaysParseExact","_fullWeekdaysParse","isLower","langData","mathAbs","addSubtract$1","absCeil","daysToMonths","monthsToDays","makeAs","alias","as","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asQuarters","asYears","makeGetter","thresholds","substituteTimeAgo","abs$1","toISOString$1","totalSign","ymSign","daysSign","hmsSign","total","toFixed","proto$2","monthsFromDays","argWithSuffix","argThresholds","withSuffix","th","assign","posNegDuration","relativeTime$1","toIsoString","version","updateLocale","tmpLocale","relativeTimeRounding","roundingFunction","relativeTimeThreshold","threshold","limit","myMoment","HTML5_FMT","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","DATE","TIME","TIME_SECONDS","TIME_MS","WEEK","MONTH","factory","_extends","Group","_ref","_ref$top","top","_ref$left","left","transform","innerRef","restProps","excluded","sourceKeys","_objectWithoutPropertiesLoose","propTypes","oneOfType","writable","genLines","num","fill","genDateValue","baseComponentDefaultProps","width","height","margin","padding","right","bottom","chartFrameDefaultProps","frameDefaultProps","background","description","hideTitleTooltip","watermark","hideTopper","hideFooter","watermarkOffset","tooltipComponent","identity","frameSocialDefaultProps","Light","stabRule","subtitleFontSize","subtitleLineHeight","subtitlePosition","titleFontSize","titleLineHeight","titlePosition","copyright","sourceFontSize","sourceLineHeight","sourcePosition","frameVideoDefaultProps","framePrintDefaultProps","chartTopperDefaultProps","subtitle","subtitleMarkupCustom","title","titleMarkupCustom","chartFooterDefaultProps","legendComponentDefaultProps","legendWidth","legendHeight","posX","posY","legendType","invert","geometry","draggable","orientation","median","label","axisArrowsComponentDefaultProps","axisArrows","axisArrowsScale","axisArrowsPadding","axisBandingComponentDefaultProps","axisBanding","bandingScale","axisComponentDefaultProps","scale","fullLengthTick","hideEndTicks","invertScale","automaticallyAddPaddingForTicks","automaticallySetRange","tickLengthOverride","tickPositionVariable","tickLabelVariable","additionalTickValues","labelOffset","barsComponentDefaultProps","letterFrequency","xScale","xVariable","yScale","yVariable","colorScale","colorVariable","barHeightVariable","fixedBarHeight","dotsComponentDefaultProps","sizeScale","hollowDots","labelColumn","labelProps","showTooltips","labelStrokeWidth","highlightDotsOnHover","offChartLabelPosition","customTooltipComponent","lineComponentDefaultProps","linesComponentDefaultProps","highlightedLineOutlineWidth","highlightedLineOutlineColor","hoveredLineStrokeWidth","hoveredLinesColorScale","marimekkoKeyDefaultProps","barHeightAnnotation","barHeightAnnotationLineHeight","barHeightAnnotationWidth","keyBarsWidth","keyData","bar","keyMarginBottom","keyHeight","keyTitle","keyTitleWidth","barChartDefaultProps","xAxisOrientation","yAxisOrientation","paddingInner","paddingOuter","roundScale","marimekkoChartDefaultProps","marimekkoKey","xHideAxisLine","xFullLengthTicks","xMin","xMax","xTicks","categoricalUsSampleData","yLabelVariable","yAutomaticallyAddPaddingForTicks","yTickLength","barPaddingInner","barPaddingOuter","connectedScatterChartDefaultProps","orderVariable","lineChartDefaultProps","yFullLengthTicks","showLegend","xScaleType","logScale","showLineEndDots","yTransformFunction","showTooltipLine","seriesName","yValue","seriesToHighlight","labelStrokeColor","ghostLineColor","ghostLineHoverColorScale","ghostLineHoverLabelColorScale","additionalYTickValues","smallBarChartDefaultProps","scatterChartDefaultProps","sizeVariable","xAxisLabel","yAxisLabel","logScaleX","logScaleY","yTickFormat","yTickValues","xTickFormat","xTransformFunction","xTickValues","maxCircleSize","web","print","social","video","scaleFactor","dotsStrokeWidth","lineOfRegression","xDomain","yDomain","sizeDomain","legendGeometry","legendOrientation","hideLegend","hideSizeLegend","sizeLegendX","sizeLegendY","tooltipPositionOverride","tooltipHoverRadius","hoveredDotsStrokeColor","hoveredDotsStrokeWidth","delaunayDefaultProps","debug","showLine","showCircle","lineConfig","circleConfig","hoverRadius","hasOwn","classes","argType","inner","default","durationSecond","durationMinute","durationHour","durationDay","durationWeek","durationMonth","durationYear","convertMMtoPX","getResponsiveValues","topper","footer","tickLabelStyle","fontSize","tickLength","axisLabelStyle","isZeroOrDefined","stripHTMLTags","marginProp","PropTypes","shape","xyProp","frameTypes","oneOf","baseComponentPropTypes","bool","chartFramePropTypes","framePropTypes","arrayOf","tooltipStyle","frameSocialPropTypes","frameVideoPropTypes","framePrintPropTypes","chartTopperPropTypes","subtitleStylesCustom","objectOf","titleStylesCustom","chartFooterPropTypes","axisArrowsComponentPropTypes","startValue","axisComponentPropTypes","axisClassName","axisLineClassName","hideAxisLine","hideTicks","hideZero","labelClassName","numTicks","rangePadding","stroke","tickClassName","tickComponent","tickFormat","tickLabelProps","tickStroke","tickTransform","tickValues","additionalAxisStyles","legendComponentPropTypes","pinnedPosition","regressionLineComponentPropTypes","any","isRequired","barsComponentPropTypes","dotsComponentPropTypes","strokeColor","hoveredDotsColorScale","hoveredDotsLabelColorScale","labelColorScale","lineComponentPropTypes","defined","linesComponentPropTypes","seriesNames","highlightedLineOutlineWidthh","highlightLinesOnHover","marimekkoKeyPropTypes","keyX","keyY","barChartPropTypes","xTickLength","hideXAxisLine","hideYAxisLine","marimekkoChartPropTypes","connectedScatterChartPropTypes","lineChartPropTypes","yMin","yMax","xAxisLabelOffset","xAxisLabelProps","allLinesHoverable","lineColorPalette","labelColorPalette","smallBarChartPropTypes","scatterChartPropTypes","delaunayPropTypes","inRequired","page_callbacks","log","is","variable","copy","encode","encodeURIComponent","escape","decode","decodeURIComponent","unescape","addEvent","element","listener","addEventListener","attachEvent","broadcast","namespace","eventType","detail","dispatchEvent","CustomEvent","bubbles","onPage","includes","triggerPage","getValueFromCookie","cookie","$1","filterProperties","objectToFilter","allowedPropertyNames","filteredObject","allowedName","sanitise","assignIfUndefined","subject","findCircularPathsIn","rootObject","traversedValues","WeakSet","circularPaths","_findCircularPathsIn","currentObject","path","has","entries","containsCircularPaths","Boolean","_containsCircularPaths","isDeepEqual","constructor","arrayWithHoles","iterableToArrayLimit","unsupportedIterableToArray","nonIterableRest","arrayWithoutHoles","iterableToArray","nonIterableSpread","datetime","compiledTemplates","formatReplacementsMap","MMMM","MMM","yyyy","EEEE","EEE","do","HH","inSeconds","compile","funcString","replacer","ftDateFormat","asTodayOrYesterdayOrNothing","interval","getSecondsBetween","isToday","isYesterday","tpl","timeAgo","abbreviated","timeAgoNoSeconds","ftTime","dateObj","isNearFuture","isFarFuture","otherTime","within24Hours","sameDayOfWeek","within48Hours","consecutiveDaysOfTheWeek","t0","t1","newInterval","floori","offseti","count","d0","d1","step","range","start","stop","previous","end","every","linear","hue","gamma","nogamma","exponential","ChartFrame","typeLower","defaultProps","PlotContext","createContext","frameWidth","frameHeight","updatePadding","Label","category","textAnchor","text-anchor","updateLinearScale","createLinearScale","colspan","data-o-grid-colspan","breakpoint","size","displayName","xl","XL","compact","bleed","snappy","GridRow","GridChild","GridContainer","body","getHeight","ignoreScrollbars","documentElement","clientHeight","innerHeight","getWidth","clientWidth","innerWidth","getSize","getScrollPosition","scrollHeight","scrollWidth","pageXOffset","scrollX","pageYOffset","scrollY","getOrientation","screen","matchMedia","getVisibility","hidden","debounce","Utils","throttle","invertAxis","plotScale","newScale","newRange","reverse","defaultTickComponent","formattedValue","tickProps","Axis","fullLengthTicks","tickLabelPadding","useContext","allTickValues","Set","ticks","tickLabels","tickPositions","tickValuesToUse","domain","tickScale","scaleOrdinal","position","labelLines","numberOfLabelLines","responsiveTickLength","maxTickWidth","approximateTextSize","fontFamily","calculateTickLabelProps","initialProps","tickLabel","generatedTickLabelProps","style","heightOfTicksWithLabels","heightOfAxisLabel","totalAxisHeight","totalAxisWidth","initialCss","webAxisStyles","printAxisStyles","socialAxisStyles","videoAxisStyles","combineStyles","useEffect","axisBandingElement","structure","dy","text","inferScaleType","dx","utcWeekday","setUTCDate","setUTCHours","utcSunday","utcMonday","utcTuesday","utcWednesday","utcThursday","utcFriday","utcSaturday","utcDay","setDate","setHours","sunday","monday","tuesday","wednesday","thursday","friday","saturday","utcYear","setUTCMonth","localDate","utcDate","newDate","timeParse","pads","numberRe","percentRe","requoteRe","pad","requote","formatRe","formatLookup","parseWeekdayNumberSunday","parseWeekdayNumberMonday","parseWeekNumberSunday","parseWeekNumberISO","V","parseWeekNumberMonday","parseFullYear","parseYear","parseQuarter","parseMonthNumber","parseDayOfMonth","parseDayOfYear","parseHour24","parseMinutes","parseSeconds","parseMilliseconds","parseMicroseconds","parseLiteralPercent","parseUnixTimestamp","parseUnixTimestampSeconds","formatDayOfMonth","formatHour24","getHours","formatHour12","formatDayOfYear","formatMilliseconds","getMilliseconds","formatMicroseconds","formatMonthNumber","formatMinutes","getMinutes","formatSeconds","getSeconds","formatWeekdayNumberMonday","formatWeekNumberSunday","dISO","formatWeekNumberISO","formatWeekdayNumberSunday","formatWeekNumberMonday","formatYear","formatYearISO","formatFullYear","formatFullYearISO","formatZone","formatUTCDayOfMonth","formatUTCHour24","getUTCHours","formatUTCHour12","formatUTCDayOfYear","formatUTCMilliseconds","getUTCMilliseconds","formatUTCMicroseconds","formatUTCMonthNumber","formatUTCMinutes","formatUTCSeconds","getUTCSeconds","formatUTCWeekdayNumberMonday","formatUTCWeekNumberSunday","UTCdISO","formatUTCWeekNumberISO","formatUTCWeekdayNumberSunday","formatUTCWeekNumberMonday","formatUTCYear","formatUTCYearISO","formatUTCFullYear","formatUTCFullYearISO","formatUTCZone","formatLiteralPercent","formatUnixTimestamp","formatUnixTimestampSeconds","locale_dateTime","dateTime","locale_date","locale_time","locale_periods","periods","locale_weekdays","locale_shortWeekdays","shortDays","locale_months","locale_shortMonths","shortMonths","periodRe","periodLookup","weekdayRe","weekdayLookup","shortWeekdayRe","shortWeekdayLookup","monthRe","monthLookup","shortMonthRe","shortMonthLookup","utcFormats","parses","parseSpecifier","newFormat","specifier","newParse","utcFormat","utcParse","formatLocale","paths","deg2rad","PI","rad2deg","t2","labConvert","Lab","Hcl","hcl2lab","rgb2lrgb","xyz2lab","lab","lab2xyz","lrgb2rgb","hclConvert","atan2","sqrt","hcl","cos","sin","define","brighter","darker","rgb","hclLong","hsl","color","hslLong","ED","EB","BC_DA","cubehelixConvert","Cubehelix","bl","cubehelixGamma","cubehelix","cosh","sinh","interpolatorMap","localTimeIntervals","utcIntervals","utcHour","utcMinute","utcMonth","utcWeek","ALL_OPERATORS","operators","nice","timeScale","isUtcScale","parsedInterval","zero","isDescending","domainWithZero","interpolate","interpolator","createColorInterpolator","align","clamp","constant","exponent","reversedRange","unknown","scaleOperator","ops","selection","selectedOps","op","isNumberArray","ArrayBuffer","isView","DataView","genericArray","nb","reA","reB","am","bm","bs","bi","one","numberArray","normalize","bimap","r0","r1","polymap","bisect","transformer","untransform","piecewise","rescale","_","rangeRound","continuous","queryParamDateFormatter","d3","queryParamDateParser","datePickerDateFormatter","datePickerDateParser","getDateNDaysAgo","copiedDate","monthsList","getDaysInMonth","Number","getYearRange","minDate","maxDate","minYear","maxYear","getDayMonthYear","getReadableDateFormat","toLocaleDateString","Color","reI","reN","reP","reHex","reRgbInteger","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","color_formatHex","formatHex","color_formatRgb","formatRgb","rgbn","Rgb","rgba","hsla","rgbConvert","rgb_formatHex","hex","rgb_formatRgb","Hsl","hslConvert","hsl2rgb","m1","m2","channels","displayable","formatHsl","initRange","objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","definition","valueof","settings","stringify","setValue","getValue","destroy","self","ReferenceError","Line","_ref$from","_ref$to","_ref$fill","isRectilinear","x1","y1","x2","y2","shapeRendering","character","re","fromCode","fromCharCode","StringBoolPropType","flagsPropType","prod","errorReporting","analytics","googleAnalytics","ads","mainImage","summary","bylines","onwardjourney","shareButtons","header","comments","dark","mainImagePropType","uuid","url","trackingPropType","micrositeName","product","topicPropType","dataMetaPropType","sameAs","keywords","creator","contactPoint","contactType","telephone","email","includedInDataCatalog","distribution","encodingFormat","contentUrl","temporalCoverage","spatialCoverage","geo","box","bylinesPropType","location","Header","useRef","headerClasses","data-o-component","data-o-header--no-js","href","encodedJSON","spoorTrackingPixel","jsonString","ieVersion","documentMode","img","makeCancelable","hasCanceled","isCanceled","cancel","registerLayoutChangeEvents","layouts","getGridBreakpoints","breakpoints","Map","decr1","setupQuery","query","handleMQChange","mql","addListener","unregisterLayoutChangeEvents","listeners","removeQuery","find","removeListener","Analytics","tracking","scrollDepthTarget","useState","isInitialised","setIsInitialised","nTracking","cutsTheMustard","pageData","asset_type","reduce","el","contentId","microsite_name","appContext","init","track","trackers","pageAttention","Fragment","action","system","is_live","apiKey","dangerouslySetInnerHTML","__html","Ad","targeting","reserve","showAdsLabel","smallFormat","mediumFormat","largeFormat","extraFormat","data-o-ads-name","data-o-ads-targeting","data-o-ads-formats-default","data-o-ads-formats-small","data-o-ads-formats-medium","data-o-ads-formats-large","data-o-ads-formats-extra","aria-hidden","TopAd","MiddleAd","OnwardJourney","urlBase","layout","relatedContent","sections","setSections","sectionP","rows","fetch","section","data-g-component","Comments","linkPageUrl","articleUrl","articleId","Footer","data-o-footer--no-js","role","aria-label","data-trackable","aria-controls","data-o-tracking-do-not-track","useAds","enabled","OAds","gpt","network","site","gptSite","gptZone","lazyLoad","initialised","slots","initSlot","global","STORYBOOK_ENV","useLayoutChangeEvents","setBreakpoint","listenersRef","removeEventListener","ArticleLayout","exact","LineWithContext","yAccessor","xAccessor","propWidth","propHeight","xPosition","datum","yPosition","strokeLinecap","strokeLinejoin","Lines","MemoisedLines","React","memo","prevProps","nextProps","LinesWithContext","hoveredSeries","scaleProperties","yScaleType","yScaleDomain","yScaleRange","xScaleDomain","xScaleRange","getEncodedValue","allowEmptyString","encodeString","decodeString","decodeArray","getEncodedValueArray","StringParam","ArrayParam","BooleanParam","boolStr","updateLocation","encodedQuery","stringifyOptions","encodedSearchString","transformSearchString","search","encodeQueryParams","paramConfigMap","paramNames_1","paramName","decodedValue","shallowEqual","objA","objB","equalMap","_b","keysA","keysB","isEqual","equals","useUpdateRefIfShallowNew","newValue","hasNew","getSSRSafeSearchString","pathname","createLocationWithChanges","queryReplacements","updateType","encodedQueryReplacements","currQuery","parseNumbers","updateInLocation","LocationContext","getLocation","setLocation","useLocationContext","LocationProvider","history","locationRef","updateUrlQuery","initialSearchString","cachedSearchString","cachedParsedQuery","sharedMemoizedQueryParser","newSearchString","getLatestDecodedValues","paramConfigMapRef","parsedQueryRef","encodedValuesCacheRef","decodedValuesCacheRef","hasNewParamConfigMap","parsedQuery","encodedValues","decodedValues","encodedValuesCache","decodedValuesCache","paramConfig","encodedValue","useQueryParams","setQueryDeps","setQueryDepsRef","changes","encodedChanges","deps","latestValues","cachedWindowHistory","cachedAdaptedWindowHistory","cachedReachHistory","cachedAdaptedReachHistory","adaptReachHistory","adaptedReachHistory","navigate","protocol","host","getLocationProps","adaptedWindowHistory","replaceState","state","pushState","adaptWindowHistory","QueryParamProvider","ReactRouterRoute","reachHistory","stringifyOptionsRef","stringifyOptionsCached","routeProps","stabRuleStyles","stabRuleStylesSocial","goalpostsStyles","titleStylesBase","titleStylesPrint","titleStylesSocial","titleStylesVideo","subtitleStylesBase","subtitleStylesPrint","subtitleStylesSocial","subtitleStylesVideo","parties","CON","socialColor","textColor","whiteOverlayOpacity","shortName","formattedName","adjective","LAB","LIBDEM","GREEN","TIGFC","BREXIT","UKIP","PC","SNP","SF","DUP","UUP","SDLP","APNI","SPEAKER","IND","OTHERS","partiesArray","getPartyInfo","sanitisedName","Bars","barHeight","bandwidth","barWidth","barFill","sendSpoorEvent","extraDetail","getArrayDepth","replaceMarkdown","originalMarkdown","mapping","markdown","replacement","getGoodJudgmentMostLikely","latestData","maxKey","maxPercent","likelyPeriod","a_before_1_september_2021","b_between_1_september_2021_and_31_october_2021","c_between_1_november_2021_and_31_december_2021","d_between_1_january_2022_and_28_february_2022","e_not_before_1_march_2022","maxPercentArticle","indefinite","articleOnly","formatNumber","dps","toLocaleString","Bar","formatDecimalParts","toExponential","coefficient","Ticks","horizontal","allTickLabelProps","_ref$tickStroke","tickLineProps","_ref2","_allTickLabelProps$in","tickLabelFontSize","tickYCoord","Text","defaultTextProps","AxisRenderer","axisFromPoint","axisToPoint","_ref$label","_ref$labelOffset","_ref$labelProps","_ref$orientation","_ref$stroke","_ref$strokeWidth","_ref$tickLabelProps","_ref$tickLength","_ref$ticksComponent","ticksComponent","maxTickLabelFontSize","yBottomOffset","getLabelTransform","createPoint","Point","_ref$children","_ref$hideAxisLine","_ref$hideTicks","_ref$hideZero","_ref$numTicks","_ref$rangePadding","getTickFormatter","isLeft","isTop","tickPosition","scaledValue","getTickPosition","tickSign","filteredTickValues","getTicks","coerceNumber","strictUriEncode","decodeComponent","splitOnFirst","filterObject","encodeFragmentIdentifier","validateArrayFormatSeparator","TypeError","removeHash","hashStart","extract","queryStart","parseValue","parseBooleans","arrayFormat","arrayFormatSeparator","formatter","accumulator","isEncodedArray","arrayValue","parserForArrayFormat","param","keysSorter","shouldFilter","skipNull","skipEmptyString","keyValueSep","encoderForArrayFormat","objectCopy","parseUrl","url_","hash","parseFragmentIdentifier","fragmentIdentifier","stringifyUrl","queryFromUrl","parsedQueryFromUrl","queryString","getHash","pick","exclude","exclusionFilter","Circle","Legend","renderedLegend","customScale","customSeriesNames","legendMagnitudeStyles","scaleSqrt","legendThresholdStyles","scaleThreshold","legendCategoricalStyles","legendCategoricalData","dragStart","dragEnd","dragMove","onMouseMove","onMouseUp","onMouseDown","onTouchStart","onTouchMove","onTouchEnd","LabelArrow","halfWidth","DotLabel","labelFill","labelDy","labelPoints","generatedLabelProps","points","labelStroke","Dot","cy","topSpacing","hollow","tooltipFunctions","labelColor","yAxisIntersectionX","defaultLabelPoints","aboveTopOfChart","labelDotDiameter","Dots","tooltipEvents","labelVariable","marginTop","marginLeft","paddingTop","paddingLeft","leftSpacing","DotsForSeries","dataForSeries","dotData","scaledYAxisIntersectionX","tooltipPosition","offChartLabelXPosition","MemoisedDots","DotsWithHighlights","hoveredData","updateTooltip","useTooltipEvents","Frame","Watermark","sourcePlotYOffset","useTooltip","tooltipData","tooltipLeft","tooltipTop","tooltipOpen","useReducer","currentPadding","newPadding","paddingState","updatePaddingState","a11yDescription","uniqueA11yTitleDescPrefix","encodeURI","parentWidth","responsiveHeight","responsiveMargin","responsiveSourceFontSize","responsiveSourceLineHeight","responsiveSubtitleFontSize","responsiveSubtitleLineHeight","responsiveSubtitlePosition","responsiveTitleFontSize","responsiveTitleLineHeight","responsiveTitlePosition","responsiveWidth","svgWidth","svgHeight","plotMargin","renderSourceFontSize","renderSourceLineHeight","renderSubtitleFontSize","renderSubtitleLineHeight","renderSubtitlePosition","renderTitleFontSize","renderTitleLineHeight","renderTitlePosition","plotPadding","mousePoint","aria-labelledby","frameStyles","viewBox","data-id","Children","isValidElement","cloneElement","random","offsetTop","offsetLeft","pointerEvents","offsetX","offsetY","dataYPosition","maxOffsetY","socialChartFrameStyles","videoChartFrameStyles","printChartFrameStyles","append","tbody","rowBatch","row","prepend","firstChild","BaseTable","rootEl","sorter","opts","_listeners","_sorter","_opts","sortable","preferredSortOrder","thead","querySelector","tableCaption","tableHeaders","tableRows","getElementsByTagName","_filteredTableRows","wrapper","closest","overlayWrapper","filterContainer","_updateTableHeightListenerSet","_currentSort","_currentFilter","_setupFilters","tableId","filterColumn","pendingFilterTimeout","debouncedFilterHandler","_getLatestRowNodes","columnIndex","sortOrder","sortRowsByColumn","_filterRowsByColumn","renderRowUpdates","_updateRowAriaHidden","_hideFilteredRows","_updateTableHeight","_updateRowOrder","_updateTableHeightScheduled","cancelAnimationFrame","tableHeight","_getTableHeight","requestAnimationFrame","pendingTableHeightUpdate","updateTableHeightDebounced","getBoundingClientRect","_rowsToHide","accumulatedHeight","_updateRowAriaHiddenScheduled","rowsToHide","_hideFilteredRowsScheduled","filteredRows","_updateRowOrderScheduled","_updateRowOrderFilrtedBatchScheduled","nonFilteredRows","headerIndex","cell","_filterMatch","_dispatchEvent","cancelable","tableHeaderButtons","hasAttribute","hasChildNodes","headingHTML","childNodes","html","nodeType","Node","ELEMENT_NODE","nodeName","outerHTML","textContent","sortButton","innerHTML","classList","nextSort","_getNextSortOrder","_sortButtonHandler","_rootElDomDelegate","Delegate","on","getTableHeader","buttonTitle","currentSort","instance","filterValue","cellValue","icons","selected","buttonType","big","icon","disabled","inverse","aria-pressed","utils","intervals","resize","visibility","scroll","setThrottleInterval","listenToResize","handler","ev","viewport","originalEvent","listenToOrientation","listenToVisibility","listenToScroll","scrollPos","scrollLeft","scrollTop","listenTo","stopListeningTo","fontDictionary","Metric","Baskerville","Georgia","Palatino","Arial","Tahoma","Verdana","cursive","fantasy","monospace","serif","absoluteMeasurementUnitsToPixels","sm","pt","pc","in","px","relativeMeasurementUnitsCoef","em","ex","coefficients","averageFontConstant","widthOverlapCoef","heightOverlapCoef","lineCapitalCoef","lineSpaceHeightCoef","defaultStyle","letterSpacing","angle","_degreeToRadian","_getFontCharacterConstant","firstFont","_splitToLines","_getSizeWithRotate","axisSize","dependentSize","angleInRadian","convertLengthToPixels","attribute","_prepareParams","inputStyle","lineStyle","characterConstant","_approximateTextWidthInternal","widths","_approximateTextHeightInternal","emptySpace","widthWithRotate","heightWithRotate","constructAll","Toggle","wait","later","xtend","unified","addListMetadata","naiveHtml","disallowNode","astToReact","wrapTableRows","getDefinitions","uriTransformer","defaultRenderers","allTypes","ReactMarkdown","allowedTypes","disallowedTypes","renderers","rawAst","plugins","applyParserPlugin","renderProps","definitions","ast","removalMethod","unwrapDisallowed","ofType","allowNode","ifNotMatch","escapeHtml","skipHtml","astPlugins","determineAstPlugins","plugin","parser","_toConsumableArray","sourcePos","rawSourcePos","transformLinkUri","linkTarget","transformImageUri","types","formatData","parseDate","point","getSeriesNames","excludeColumns","allSeriesNames","acc","curr","extentMulti","ext","rowExtent","extent","unCapitalise","capitalise","copyContentFromElement","copyContentFromUrl","xhr","optionsFromKey","dashIndex","subKey","getOffsetRect","eClientRect","docElem","clientTop","clientLeft","baseAxisStyles","initialStyles","additionalStyles","updateOrdinalScale","createOrdinalScale","DelaunayListener","onMouseOut","Delaunay","useDelaunay","pathString","hoveredXPosition","hoveredYPosition","mx","my","checkDCE","__REACT_DEVTOOLS_GLOBAL_HOOK__","Store","keyPrefix","undefinedName","info","cookieLoad","cookies","cookieSave","expiry","expires","toUTCString","cookieRemove","storageKey","nameOverride","storage","_type","load","localStorage","getItem","save","setItem","remove","removeItem","loadStore","oldCookieStoreData","read","write","errorMessage","useCallback","overrides","handleMouseOver","coords","localPoint","currentTarget","ownerSVGElement","onMouseOver","onFocus","onBlur","copyrightStylesBase","sourceStylesBase","sourceStylesPrint","sourceStylesSocial","sourceStylesVideo","generateWords","cleanSearchValue","searchValue","findMatch","searchList","display","alternatives","cleanedDisplay","cleanedAlternatives","cleanedSearchValue","getSuggestions","inputValue","inputLength","inputValueWords","words","alternativeWords","allScores","scores","word","inputValueWord","matchLength","wordLength","pcMatch","totalMatchLength","totalLength","totalPercentageMatch","highestScore","highestPercentageScore","pcScore","formatAreaList","areaList","areasInData","selectedAreas","area","areaInData","areaSelected","alt","generateErrorMessage","selectedAreasNotInData","selectedAreasNotInDataText","ButtonSelectionGroup","items","updateSelection","equalButtons","loadingTime","loading","setLoading","timer","buttonsClassName","onClick","labelComponentDefaultProps","showArrow","arrowWidth","instanceOf","dotStrokeColor","dotStrokeWidth","tooltipLineColor","showYAxisFade","labelFontSize","asyncGeneratorStep","gen","_next","_throw","done","postMessage","dynamicTyping","dynamicTypingFunction","worker","WORKERS_SUPPORTED","URL","webkitURL","BLOB_URL","createObjectURL","Blob","Worker","onmessage","userStep","userChunk","userComplete","complete","userError","workerId","NODE_STREAM_INPUT","download","readable","File","stream","unparse","BAD_DELIMITERS","quotes","skipEmptyLines","newline","quoteChar","escapeChar","escapeFormulae","fields","meta","RECORD_SEP","UNIT_SEP","BYTE_ORDER_MARK","LocalChunkSize","RemoteChunkSize","DefaultDelimiter","Parser","ParserHandle","NetworkStreamer","FileStreamer","StringStreamer","ReadableStreamStreamer","jQuery","each","attr","FileReader","files","file","inputElem","instanceConfig","reason","_handle","_finished","_completed","_halted","_input","_baseIndex","_partialLine","_rowCount","_start","_nextChunk","isFirstChunk","_completeResults","errors","chunkSize","streamer","parseChunk","beforeFirstChunk","paused","aborted","preview","results","WORKER_ID","finished","_sendError","_readChunk","_chunkLoaded","withCredentials","_chunkError","downloadRequestBody","downloadRequestHeaders","setRequestHeader","getResponseHeader","lastIndexOf","statusText","webkitSlice","mozSlice","FileReaderSync","readAsText","encoding","pause","resume","_streamData","_streamEnd","_streamError","_checkIsFinished","_streamCleanUp","abort","transformHeader","code","successful","bestDelimiter","delimitersToGuess","getCharIndex","fastMode","linebreak","truncated","terminate","capitalize","getAreaList","getAlternativeAreaNames","areaCodeToDisplay","areaEntry","getAreasInData","attributeToVisualise","dataWithValues","getAttributeFromOptions","populationAdjusted","cumulative","rollingAverage","doses","ParentSize","_ref$debounceTime","debounceTime","_ref$ignoreDimensions","ignoreDimensions","_ref$parentSizeStyles","parentSizeStyles","_ref$enableDebounceLe","enableDebounceLeadingCall","animationFrameID","_useState","setState","normalized","incoming","existing","leading","observer","entry","_entry$contentRect","contentRect","observe","disconnect","visit","visitParents","CONTINUE","SKIP","EXIT","tree","visitor","freeGlobal","freeSelf","root","nativeCreate","getNative","eq","isKeyable","__data__","titleStylesMap","subtitleStylesMap","ChartTopper","linearRegression","lr","sumX","sumY","sumXY","sumXX","sumYY","slope","intercept","r2","RegressionLine","xCoords","yCoords","trendline","lowestX","highestX","BasicCard","MapShim","getIndex","class_1","__entries__","delete","clear","ctx","isBrowser","global$1","requestAnimationFrame$1","transitionKeys","mutationObserverSupported","MutationObserver","ResizeObserverController","connected_","mutationEventsAdded_","mutationsObserver_","observers_","onTransitionEnd_","refresh","delay","leadingCall","trailingCall","lastCallTime","resolvePending","proxy","timeoutCallback","timeStamp","addObserver","connect_","removeObserver","observers","disconnect_","updateObservers_","activeObservers","gatherActive","hasActive","broadcastActive","attributes","childList","characterData","subtree","propertyName","getInstance","instance_","defineConfigurable","getWindowOf","ownerDocument","defaultView","emptyRect","createRectInit","toFloat","getBordersSize","positions","getHTMLElementContentRect","getComputedStyle","paddings","positions_1","getPaddings","horizPad","vertPad","boxSizing","isDocumentElement","vertScrollbar","horizScrollbar","isSVGGraphicsElement","SVGGraphicsElement","SVGElement","getBBox","getContentRect","bbox","getSVGContentRect","ResizeObservation","broadcastWidth","broadcastHeight","contentRect_","isActive","rect","broadcastRect","ResizeObserverEntry","rectInit","Constr","DOMRectReadOnly","ResizeObserverSPI","controller","callbackCtx","activeObservations_","observations_","callback_","controller_","callbackCtx_","Element","observations","unobserve","clearActive","_this","observation","WeakMap","ResizeObserver","method","_defineProperty","_ref$x","_ref$y","TEST_TIME","nodeOrEvent","maybeEvent","_typeGuards","isElement","_localPointGeneric","isEvent","i0","i1","x0","Icon","iconName","iconColor","colorHex","backgroundImage","repositionLabels","initialLabelPositions","positionVariable","spacing","alpha","copiedLabelPositions","automaticallyRepositionLabels","labelPositions","position1","order1","d2","position2","order2","deltaOrder","deltaPosition","adjust","getLineEndPositions","series","sortedData","endEntry","firstIntersectionEntry","mock","transport","sendBeacon","image","form","isUnique","response","json","available","findInvalidCharacters","matchingCharacters","uniqueMatchingCharacters","prompt","overlay","Overlay","class","heading","validation","invalidCharacters","catch","apiError","promptValidation","preventDefault","displayNameForm","srcElement","innerText","listenerMap","handle","_removedListeners","matchesTag","tagName","matchesRoot","rootElement","matchesId","captureForType","useCapture","matcherParam","off","listenerList","singleEventType","correspondingUseElement","eventPhase","toFire","parentElement","HTMLDocument","fire","_default","getEmbedUrl","flourishUrl","FlourishEmbed","elRef","origin","eventData","scrolling","frameBorder","sandbox","balanced","reduceFunctionCall","mexp","NESTED_CALC_RE","decimalPrecision","evaluateExpression","expression","functionIdentifier","uniqueUnits","uniqueLowerCaseUnits","unitRegEx","getUnitsInExpression","evaluatedPart","nonEvaluatedPart","balancedExpr","evaluated","pre","post","evaluateNestedExpression","percent","toEvaluate","eval","baseStyles","titleStyles","annotationStyles","getDosageText","generateHeaderText","areaText","areasToHighlightInChart","areaTextWithPrefix","generateSubheadText","cumulativeText","populationAdjustedText","generateSourceText","timestamp","getUniqueDateTicks","findIndex","generateXTickDateValues","minTicks","monthTicks","timeMonth","uniqueTicks","tickIncrement","fortnightTicks","timeWeek","weekTicks","threeDayTicks","timeDay","dayTicks","filterXTickDateValues","tickSpacingMin","maxNumTicks","hideEveryNTicks","totalNumberOfDaysInRange","daysBetweenFirstTwoTicks","spaceBetweenFirstTwoTicks","maxTicksBreached","ticksToHide","hideFirstTick","generateXTickFormatFunction","tickLabelsToHide","firstYear","timeYear","secondYear","firstTickInSecondYear","tick","tickFormatString","LinePathAnnotation","_ref$points","_ref$labelAnchor","labelAnchor","_ref$labelDx","labelDx","_ref$labelDy","_ref$labelFontSize","_ref$labelStroke","_ref$labelStrokeWidth","_ref$labelPaintOrder","labelPaintOrder","endPoint","paintOrder","pi","tau","tauEpsilon","Path","_x0","_y0","_x1","_y1","moveTo","closePath","lineTo","quadraticCurveTo","bezierCurveTo","arcTo","y0","x21","y21","x01","y01","l01_2","x20","y20","l21_2","l20_2","l21","l01","acos","t01","t21","arc","a0","a1","ccw","cw","Linear","_context","areaStart","_line","areaEnd","lineStart","_point","lineEnd","curve","buffer","defined0","curveRadial","Radial","_curve","radial","s0","s1","setNumberOrNumberAccessor","sums","peak","vi","vj","Infinity","STACK_ORDERS","ascending","descending","insideout","peaks","appearance","tops","bottoms","none","STACK_OFFSETS","expand","diverging","yp","yn","silhouette","wiggle","s2","si","sij0","s3","sk","LinePath","_ref$data","_ref$defined","_temp3","_ref3","legacy","decimal","hexadecimal","alphanumerical","decodeEntity","option","indent","entityCharacters","namedEntity","terminated","characters","reference","following","warning","entity","begin","prev","additional","nonTerminated","handleText","handleReference","handleWarning","textContext","referenceContext","warningContext","lines","messages","noop","hexa","tests","own","bases","disallowed","interruptors","tokenizers","params","interruptor","ignore","bools","collapseWhiteSpace","elem","isSVGElement","isSVGSVGElement","isTouchEvent","isMouseEvent","Event","nativeEvent","_typeof","iterator","aKeys","bKeys","keysMap","aValue","bValue","aValueKeys","bValueKeys","aValueKey","resolver","rejecter","navigator","Image","_defineProperties","descriptor","_createClass","Constructor","protoProps","staticProps","_inheritsLoose","subClass","superClass","_getPrototypeOf","getPrototypeOf","_isNativeReflectConstruct","Reflect","construct","sham","Proxy","_construct","Parent","Class","_wrapNativeSuper","_cache","Wrapper","_arrayLikeToArray","_createForOfIteratorHelperLoose","minLen","_unsupportedIterableToArray","LuxonError","_Error","InvalidDateTimeError","_LuxonError","toMessage","InvalidIntervalError","_LuxonError2","InvalidDurationError","_LuxonError3","ConflictingSpecificationError","_LuxonError4","InvalidUnitError","_LuxonError5","InvalidArgumentError","_LuxonError6","ZoneIsAbstractError","_LuxonError7","DATE_SHORT","DATE_MED","DATE_MED_WITH_WEEKDAY","DATE_FULL","DATE_HUGE","TIME_SIMPLE","TIME_WITH_SECONDS","TIME_WITH_SHORT_OFFSET","timeZoneName","TIME_WITH_LONG_OFFSET","TIME_24_SIMPLE","hour12","TIME_24_WITH_SECONDS","TIME_24_WITH_SHORT_OFFSET","TIME_24_WITH_LONG_OFFSET","DATETIME_SHORT","DATETIME_SHORT_WITH_SECONDS","DATETIME_MED","DATETIME_MED_WITH_SECONDS","DATETIME_MED_WITH_WEEKDAY","DATETIME_FULL","DATETIME_FULL_WITH_SECONDS","DATETIME_HUGE","DATETIME_HUGE_WITH_SECONDS","isInteger","hasIntl","Intl","DateTimeFormat","hasFormatToParts","formatToParts","hasRelative","RelativeTimeFormat","bestBy","by","compare","best","pair","integerBetween","thing","padStart","minus","repeat","parseInteger","parseMillis","fraction","roundTo","digits","towardZero","factor","trunc","floorMod","objToLocalTS","last","parseZoneInfo","ts","offsetFormat","timeZone","intlOpts","modified","intl","parsed","without","signedOffset","offHourStr","offMinuteStr","offHour","offMin","asNumber","numericValue","normalizeObject","normalizer","nonUnitKeys","formatOffset","RangeError","timeObject","ianaRegex","monthsLong","monthsNarrow","weekdaysLong","weekdaysNarrow","meridiems","erasLong","erasShort","erasNarrow","stringifyTokens","splits","tokenToString","_step","_iterator","literal","_macroTokenToFormatOpts","DD","DDD","DDDD","tt","ttt","tttt","TT","TTT","TTTT","ff","fff","ffff","FF","FFF","FFFF","Formatter","formatOpts","loc","systemLoc","parseFormat","fmt","currentFull","bracketed","macroTokenToFormatOpts","formatWithSystemDefault","dt","redefaultToSystem","dtFormatter","formatDateTime","formatDateTimeParts","resolvedOptions","forceSimple","padTo","numberFormatter","formatDateTimeFromString","knownEnglish","listingMode","useDateTimeFormatter","outputCalendar","isOffsetFixed","allowZ","meridiemForDateTime","standalone","monthForDateTime","weekdayForDateTime","eraForDateTime","offsetName","weekNumber","maybeMacro","formatDurationFromString","dur","lildur","_this2","tokenToField","realTokens","found","collapsed","shiftTo","mapped","Invalid","explanation","Zone","otherZone","singleton","LocalZone","_Zone","matchingRegex","dtfCache","typeToPos","ianaZoneCache","IANAZone","valid","isValidZone","resetCache","isValidSpecifier","parseGMTOffset","dtf","formatted","filled","_formatted$i","partsOffset","fMonth","fDay","hackyOffset","asTS","over","singleton$1","FixedOffsetZone","fixed","utcInstance","InvalidZone","normalizeZone","defaultZone","lowered","defaultLocale","defaultNumberingSystem","defaultOutputCalendar","throwOnInvalid","Settings","resetCaches","numberingSystem","intlDTCache","getCachedDTF","locString","intlNumCache","intlRelCache","getCachedRTF","cacheKeyOpts","inf","sysLocaleCache","listStuff","defaultOK","englishFn","intlFn","PolyNumberFormatter","useGrouping","minimumIntegerDigits","NumberFormat","getCachedINF","PolyDateFormatter","universal","gmtOffset","offsetZ","isOffsetZoneSupported","DateTime","fromMillis","_proto2","toJSDate","tokenFormat","knownFormat","formatString","PolyRelFormatter","isEnglish","rtf","_proto3","numeric","lastable","isDay","isInPast","fmtValue","singular","lilUnits","fmtUnit","formatRelativeTime","numbering","specifiedLocale","_parseLocaleString","localeStr","uIndex","smaller","_options","parseLocaleString","parsedLocale","parsedNumberingSystem","parsedOutputCalendar","intlConfigString","weekdaysCache","monthsCache","meridiemCache","eraCache","fastNumbersCached","fromOpts","defaultToEN","computedSys","systemLocale","fromObject","_temp","_proto4","hasFTP","isActuallyEn","hasNoWeirdness","alts","redefaultToEN","formatStr","mapMonths","mapWeekdays","_this3","_this4","matching","fastNumbers","relFormatter","startsWith","combineRegexes","full","combineExtractors","extractors","mergedVals","mergedZone","_ex","_len3","patterns","_key3","_patterns","_patterns$_i","extractor","simpleParse","_len4","_key4","offsetRegex","isoTimeBaseRegex","isoTimeRegex","isoTimeExtensionRegex","extractISOWeekData","extractISOOrdinalData","sqlTimeRegex","sqlTimeExtensionRegex","int","fallback","extractISOYmd","extractISOTime","extractISOOffset","fullOffset","extractIANAZone","isoTimeOnly","isoDuration","extractISODuration","weekStr","millisecondsStr","hasNegativePrefix","negativeSeconds","maybeNegate","force","fromStrings","extractRFC2822","milOffset","rfc1123","rfc850","ascii","extractRFC1123Or850","extractASCII","isoYmdWithTimeExtensionRegex","isoWeekWithTimeExtensionRegex","isoOrdinalWithTimeExtensionRegex","isoTimeCombinedRegex","extractISOYmdTimeAndOffset","extractISOWeekTimeAndOffset","extractISOOrdinalDateAndTime","extractISOTimeAndOffset","extractISOTimeOnly","sqlYmdWithTimeExtensionRegex","sqlTimeCombinedRegex","extractISOYmdTimeOffsetAndIANAZone","extractISOTimeOffsetAndIANAZone","lowOrderMatrix","casualMatrix","accurateMatrix","daysInYearAccurate","daysInMonthAccurate","orderedUnits","reverseUnits","conf","conversionAccuracy","convert","matrix","fromMap","fromUnit","toMap","toUnit","conv","added","antiTrunc","accurate","isLuxonDuration","normalizeUnit","fromISO","parseISODuration","fromISOTime","parseISOTimeOnly","toFormat","fmtOpts","includeConfig","toISO","toISOTime","millis","toMillis","suppressMilliseconds","suppressSeconds","includePrefix","plus","friendlyDuration","negate","mapUnits","_Object$keys","reconfigure","vals","normalizeValues","lastUnit","_step2","built","accumulated","_iterator2","ak","down","negated","_i2","_Object$keys2","_step3","_iterator3","v1","v2","durationish","INVALID$1","validateStartEnd","Interval","isLuxonInterval","fromDateTimes","builtStart","friendlyDateTime","builtEnd","validateError","after","_split","startIsValid","endIsValid","_dur","isInterval","toDuration","hasSame","isEmpty","contains","splitAt","dateTimes","sorted","splitBy","divideEqually","numberOfParts","overlaps","abutsStart","abutsEnd","engulfs","intersection","union","_intervals$sort$reduc","sofar","final","xor","_Array$prototype","currentCount","ends","difference","toISODate","_temp2","_ref3$separator","invalidReason","mapEndpoints","mapFn","Info","hasDST","setZone","isValidIANAZone","_ref$locale","_ref$numberingSystem","_ref$locObj","locObj","_ref$outputCalendar","monthsFormat","_ref2$locale","_ref2$numberingSystem","_ref2$locObj","_ref2$outputCalendar","_ref3$locale","_ref3$numberingSystem","_ref3$locObj","weekdaysFormat","_temp4","_ref4","_ref4$locale","_ref4$numberingSystem","_ref4$locObj","_temp5","_ref5$locale","_temp6","_ref6$locale","features","intlTokens","zones","relative","dayDiff","earlier","utcDayStart","toUTC","_diff","_highOrderDiffs","lowestOrder","highWater","_differs","_differs$_i","differ","_cursor$plus","_cursor$plus2","delta","highOrderDiffs","remainingMillis","lowerOrderUnits","_cursor$plus3","_Duration$fromMillis","numberingSystems","arab","arabext","bali","beng","deva","fullwide","gujr","hanidec","khmr","knda","laoo","limb","mlym","mong","mymr","orya","tamldec","telu","thai","tibt","latn","numberingSystemsUTF16","hanidecChars","digitRegex","intUnit","deser","_numberingSystemsUTF","parseDigits","spaceOrNBSP","spaceOrNBSPRegExp","fixListRegex","stripInsensitivities","startIndex","groups","simple","partTypeStyleToTokenVal","short","long","dayperiod","dayPeriod","dummyDateTimeCache","maybeExpandMacroToken","part","tokenForPart","explainFromTokens","expandMacroTokens","two","three","four","six","oneOrTwo","oneToThree","oneToSix","oneToNine","twoToFour","fourToSix","_ref5","unitate","disqualifyingUnit","_buildRegex","buildRegex","regexString","handlers","_match","matchIndex","rawMatches","_ref6","toField","dateTimeFromMatches","nonLeapLadder","leapLadder","unitOutOfRange","dayOfWeek","js","computeOrdinal","uncomputeOrdinal","table","month0","gregorianToWeek","gregObj","weekToGregorian","weekData","weekdayOfJan4","yearInDays","_uncomputeOrdinal","gregorianToOrdinal","gregData","ordinalToGregorian","ordinalData","_uncomputeOrdinal2","hasInvalidGregorianData","validYear","validMonth","validDay","hasInvalidTimeData","validHour","validMinute","validSecond","validMillisecond","unsupportedZone","possiblyCachedWeekData","clone$1","inst","old","fixOffset","localTS","tz","utcGuess","o2","o3","tsToObj","objToTS","adjustTime","oPre","millisToAdd","_fixOffset","parseDataToDateTime","parsedZone","interpretationZone","toTechFormat","toTechTimeFormat","_ref$suppressSeconds","_ref$suppressMillisec","includeOffset","_ref$includePrefix","_ref$includeZone","includeZone","_ref$spaceZone","spaceZone","_ref$format","defaultUnitValues","defaultWeekUnitValues","defaultOrdinalUnitValues","orderedUnits$1","orderedWeekUnits","orderedOrdinalUnits","weeknumber","weeksnumber","weeknumbers","weekyear","weekyears","quickDT","tsNow","_objToTS","diffRelative","calendary","ot","_zone","isLuxonDateTime","fromJSDate","zoneToUse","fromSeconds","offsetProvis","containsOrdinal","containsGregorYear","containsGregorMD","containsGregor","definiteWeekDef","defaultValues","useWeekData","objNow","foundFirst","validWeek","validWeekday","hasInvalidWeekData","validOrdinal","hasInvalidOrdinalData","_objToTS2","_parseISODate","parseISODate","fromRFC2822","_parseRFC2822Date","preprocessRFC2822","parseRFC2822Date","fromHTTP","_parseHTTPDate","parseHTTPDate","fromFormat","_opts$locale","_opts$numberingSystem","_parseFromTokens","_explainFromTokens","parseFromTokens","fromString","fromSQL","_parseSQL","parseSQL","isDateTime","resolvedLocaleOpts","_Formatter$create$res","toLocal","_ref3$keepLocalTime","_ref3$keepCalendarTim","keepCalendarTime","newTS","offsetGuess","setLocale","mixed","settingWeekStuff","_objToTS4","normalizedUnit","_this$plus","toLocaleParts","_ref5$format","toISOWeekDate","_ref6$suppressMillise","_ref6$suppressSeconds","_ref6$includeOffset","_ref6$includePrefix","_ref6$format","toRFC2822","toHTTP","toSQLDate","toSQLTime","_ref7","_ref7$includeOffset","_ref7$includeZone","toSQL","toSeconds","toBSON","otherDateTime","durOpts","otherIsLater","diffed","diffNow","otherZoneDateTime","toRelative","toRelativeCalendar","fromFormatExplain","_options$locale","_options$numberingSys","fromStringExplain","dateTimeish","VERSION","App","isPrerendering","userAgent","setContext","mainRef","useQueryParamsWithState","areas","maxLength","ignoreInQueryParams","startDate","earliestDateAllowed","latestDateAllowed","parsedStartDate","updateState","stateToAdd","trajectoryData","initialTrajectoryData","setData","dataLastUpdated","totals","maxTotalDosesPer100","trajectories","dataBranch","Papa","vaccineTotalsResponse","lastUpdated","last_updated","vaccineLatestResponse","country","vaccineTrajectoryResponse","total_doses_per_100","buildTime","containerRef","navigationConfig","currentPage","itemScope","itemType","publishedDate","byline","dateFirst","share","separated","itemProp","introCopy","vaccinations","countries","totalsData","scatterChartCopy","areasToLabel","videoId","sources","AppWithQueryParams","headerEl","mega","drawer","subnav","sticky","removeAttribute","handleSpaceKeydown","keyCode","toggle","toggleEl","_targets","targetEl","Target","addToggle","close","stateName","isOpen","removeToggle","toggles","getDataAttributes","isCount","Count","renderCount","Stream","fetchCount","dataset","shortKey","overlays","checkOptions","trigger","modal","layer","shaded","getOptionsFromTrigger","triggerClickHandler","stopPropagation","visible","isVisible","offsetHeight","focusTrap","overlayFocusableElements","focusable","elementVisible","elementLabelVisible","labels","elementIsUncheckedRadio","checked","lastElement","focus","shiftKey","noOptError","parentnode","delegates","doc","wrap","fullscreen","originalOverflow","popstateHandler","show","loadContent","wrapperEl","zindex","headingId","preventclosing","button","nofocus","visuallyhidetitle","tooltip","shadow","closeHandler","nested","resizeListenerHandler","resizeListener","closeOnEscapePressHandler","closeOnEscapePress","closeOnNewLayerHandler","closeOnNewLayer","customclose","closeOnExternalClickHandler","closeOnExternalClick","outline","realign","overlay_id","_trapFocus","back","respondToWindow","dimension","_align","edge","borderHeight","borderWidth","offsetWidth","triggers","overlaysArray","countEl","useStagingEnvironment","countLabel","getCountLabel","useStaging","commentCount","COLLAPSIBLE_BREAKPOINTS","footerEl","shouldCollapse","_toggles","setup","toggleEls","getElementById","missingDataMessage","getGridProperties","getGridFromDoc","gridProperties","getPropertyValue","getCurrentLayout","getCurrentGutter","gutter","enableLayoutChangeEvents","gridLayouts","layoutName","layoutWidth","nextLayoutWidth","socialUrls","twitter","facebook","linkedin","pinterest","whatsapp","link","enterpriseSharing","descriptiveLinkText","Share","oShare","openWindows","dispatchCustomEvent","eventName","handleClick","actionEl","shareLocation","oShareLocation","closed","opener","shareSocial","generateSocialUrl","socialNetwork","templateUrl","titleExtra","relatedTwitterAccounts","ulElement","links","liElement","spanElement","aElement","templateLinkText","rootDelegate","DomDelegate","rootDomDelegate","updateEventName","ftDateFormatWarning","methodName","ODate","setInterval","printers","printer","_renderDateFor","formattedDate","nodeValue","dateEls","AxisArrows","paddingRight","refX","refY","markerUnits","markerWidth","markerHeight","orient","markerEnd","implicit","formatSpecifier","FormatSpecifier","symbol","comma","precision","lo","hi","mid","ascendingComparator","center","filteredData","useMemo","delaunay","tooltipDataObject","pointIndex","pointData","pointDistance","hypot","isHighlighted","tooltipContent","labelData","dataY","dataX","TableSorter","OTable","Table","tableType","FlatTable","ScrollTable","OverflowTable","BasicTable","tableEls","formatFunction","setCellFormatterForType","DatePickerInput","selectedDate","fallbackDate","inputDateFormat","inputRef","storedDateFormat","setFallbackDate","supportsDateType","setSupportsDateType","inputName","inputDateFormatter","inputDateParser","onChange","DatePickerInputSelectFallback","DatePickerInputDaySelect","selectedDay","DatePickerInputMonthSelect","selectedMonth","DatePickerInputYearSelect","selectedYear","minDateDay","minDateMonth","minDateYear","maxDateDay","maxDateMonth","maxDateYear","yearRange","numberOfdaysInMonth","filteredListOfDaysInMonth","monthIndex","newMonthIndex","useWindow","useScrollPosition","effect","throttleTimeout","callBack","currPos","prevPos","useLayoutEffect","handleScroll","queryParams","allParams","excludeFromQueryParams","hideFromQueryParams","setQuery","hasQuery","defaultValue","optionsArray","queryParamValue","validatedQueryParam","filteredQueryParam","filteredState","precisionPrefix","precisionRound","precisionFixed","linearish","prestep","maxIter","basis","v0","v3","t3","rgbGamma","rgbSpline","spline","colors","updateBandScale","createBandScale","transformPow","transformSqrt","transformSquare","powish","updateSqrtScale","createSqrtScale","transformLog","transformExp","exp","transformLogn","transformExpn","pow10","reflect","loggish","logs","pows","log10","log2","logp","powp","updateLogScale","createLogScale","propIsEnumerable","test1","test2","test3","letter","shouldUseNative","symbols","arrayLikeToArray","should_use_sendBeacon","getSetting","sendRequest","queueTime","offlineLag","getTransport","user_callback","core_system","test_data","stringifiedData","run","all_events","counts","queue_length","nextRequest","addAndRun","Queue","discreteValues","randomBlock","safeCounter","api","fingerprint","slug","counter","globalCount","mimeTypes","first","doAdd","created_at","invalidArg","userID","store","cookieDomain","defaultUserConfig","hostname","setUser","guid","defaultSessionConfig","setSession","session","getSession","isNew","md","listUnicodeChar","stripListLeaders","gfm","useImgAltText","cachedSetTimeout","cachedClearTimeout","process","defaultSetTimout","defaultClearTimeout","runTimeout","currentQueue","draining","queueIndex","cleanUpNextTick","drainQueue","marker","runClearTimeout","Item","nextTick","browser","env","argv","versions","once","removeAllListeners","emit","prependListener","prependOnceListener","binding","cwd","chdir","umask","normalizeArray","allowAboveRoot","up","unshift","xs","resolvedPath","resolvedAbsolute","isAbsolute","trailingSlash","fromParts","toParts","samePartsLength","outputParts","sep","dirname","hasRoot","matchedSlash","basename","extname","startDot","startPart","preDotState","commonmark","footnotes","pedantic","blocks","stops","openTag","closeTag","openCloseTag","fromIndex","BarChart","hideXAxisTicks","hideYAxisTicks","yTickComponent","xMaxOverride","dataExtent","scaleLinear","yScaleOptions","scaleBand","getRawTag","objectToString","symToStringTag","baseIsNative","ConnectedScatterChart","GChartcolour","orderedData","parsedData","groupBy","LineChart","rawData","yMinOverride","yMaxOverride","xMinOverride","yValueExtent","transformedYMin","transformedYMax","scaleLog","xValueExtent","scaleTime","colorScaleDomain","colorScaleDefaultRange","lineColorScale","nonEmptyYVariable","seriesToShow","nonEmptySeriesToHighlight","lineEndDots","labelText","seriesToShowFiltered","showAllSeriesAsGhostLines","voronoiData","flatMap","xValue","mask","ScatterChart","inputColorScale","xExtent","yExtent","sizeExtent","transformedXMin","transformedXMax","chartTopperConfig","titleStyle","chartFooterConfig","SmallBars","paddingBetweenLabels","paddingAfterLabels","totalLabelSize","SmallBarChart","sortTwoDateStringsAsc","getLastValue","Slopes","electionDates","circRadius","maxLabelLength","independentOverrides","byelectionDates","lastElection","winnerVotePctLastElection","hadByElection","uk","identifier","scalePoint","maxValue","flat","positionLabels","a2","deltaA","deltaY","groupName","group","lastValue","isFrontrunner","specialInd","nameInParenthOriginal","nameInParenth","partyFill","labelValue","textTransform","lastElectionA","lastElectionB","dateA","dateB","circX","circY","SlopeChart","WaffleAxis","WafflePartyRow","tileHeight","tilePadding","columnsPerSegment","onSelect","onDeselect","partyName","segment","colIdx","colWidth","leftOffset","margin2017","constituencyPartyWinning","clientX","clientY","WaffleChart","eventCallback","filterKeys","constituencyPartySittingLastElection","valuesA","constituencyMarginLastElection","offsetHeights","subtitleLines","party","constituencyName","constituencyCode","constituencyPartySitting","constituencyTimeChangedFirst","constituencyTimeChangedLast","constituencyTimeDeclared","Thermometer","isCondensed","midpoint","valueTossup","valueSolid","valueLeaning","patternUnits","patternTransform","stdDeviation","floodColor","dominantBaseline","colorSolid","colorLeaning","ThermometerWrapper","plotHeight","MarimekkoChart","xAxisArrows","xAxisTickLabelProps","yHideAxisLine","yHideTicks","dataXExtent","yOffset","yTicks","totalSize","sum","moment","symbolMap","1","2","3","4","5","6","7","8","9","numberMap","pluralForm","plurals","pluralize","weekdaysParseExact","suffixes","70","80","20","50","100","10","30","60","90","relativeTimeWithPlural","forms","lastDigit","last2Digits","monthsParseExact","relativeTimeWithMutation","mutationTable","softMutation","mutation","minWeekdaysParse","fullWeekdaysParse","shortWeekdaysParse","monthsStrictRegex","monthsShortStrictRegex","longMonthsParse","shortMonthsParse","lastNumber","translate","ll","lll","llll","plural","processRelativeTime","monthsNominativeEl","monthsGenitiveEl","momentToFormat","_monthsGenitiveEl","_monthsNominativeEl","calendarEl","_calendarEl","monthsShortDot","numbersPast","numbersFuture","verbalNumber","monthsShortWithDots","monthsShortWithoutDots","weekEndings","eraYearOrdinalRegex","$0","$2","40","isUpper","eifelerRegelAppliesToNumber","translateSingular","special","relativeTimeWithSingular","translator","correctGrammaticalCase","wordKey","relativeTimeMr","monthsNominative","monthsSubjective","12","13","numbersNouns","numberNoun","hundred","ten","numberAsNoun","processHoursFunction","nominative","accusative","genitive","controls","opening","togglePosition","expanded","addEvents","menu","hide","animate","menus","handleCloseEvents","scope","allFocusable","handleKeydown","handleMouseenter","handleMouseleave","handleFocus","relatedTarget","handleTab","firstEl","lastEl","removeEvents","addDrawerToggles","drawerEl","handleClose","openingControl","toggleCallback","toggleTabbing","firstFocusable","control","drawerToggle","tabIndex","addSubmenuToggles","submenus","submenu","isEnabled","buttons","wrapperWidth","oUtils","scrollable","onclick","currentSelection","currentSelectionEnd","scrollTo","checkCurrentPosition","remaining","distance","viewportOffset","lastScrollDepth","lastAnimationFrame","lastStickyState","debouncedScrollEnd","scrollStart","handleFrame","scrollDepth","isScrollingDown","startLoop","streamEl","eventSeenTimes","renderAndAuthenticate","renderComments","authenticateUser","login","authenticationToken","embed","renderSignedInMessage","fetchOptions","auth","fetchJsonWebToken","userHasValidSession","rootUrl","scriptElement","Coral","createStreamEmbed","storyURL","storyID","rootURL","autoRender","bodyClassName","events","onAny","publishEvent","stagingWarning","purgeCacheAfterCompletion","onOverlayReady","purgeJwtCache","onOverlayClosed","success","displayNamePrompt","mappedEvent","coralEventMap","oComments","oCommentsEventOptions","oCommentsEvent","oTracking","disableOTracking","oTrackingEventOptions","isWithheld","oTrackingEvent","editButtonId","signedInMessage","oldSignedInMessage","searchParams","credentials","ok","oViewport","lastBreakpoint","oGrid","textTwitter","textFacebook","textLinkedIn","textWhatsApp","services","rel","NamesElement","namesList","author","DateElement","forwardRef","dateFormatted","suppressHydrationWarning","Bylines","dateElRef","oDateRef","imageUUID","getMainImage","BigTopper","topic","headline","relatedArticle","socialHeadline","twitterHeadline","facebookHeadline","tweetText","credit","CopyRight","Epilogue","includeGrid","Card","AnimatedScatterChart","inputData","vaxdosespercapita","gdppercapita","population","dateRanges","playing","setPlaying","dateIndex","setDateIndex","handleSliderChange","handlePlayClick","playForward","clearInterval","dataWithLabels","formatDate","backgroundColor","borderRadius","boxShadow","TooltipWithBounds","initialLeft","initialTop","parentRect","getRects","heightOfRect","rectShapePropTypes","withBoundingRectsPropTypes","Tooltip","withBoundingRects","ecvotes","sourceStylesMap","ChartFooter","sourcePositionX","sourcePositionY","noOfSourceLines","sourceCopyrightPositionY","sourceTopPositionY","toNumber","nativeMax","nativeMin","lastArgs","lastThis","maxWait","timerId","lastInvokeTime","maxing","trailing","invokeFunc","thisArg","leadingEdge","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","FramePrint","mmWidth","mmHeight","pxWidth","pxHeight","FrameSocial","FrameVideo","axisArrowsStyles","AxisBanding","bands","scalePointOffset","minScale","maxScale","tickValuesForBanding","newValues","renderedBands","reIsUint","objectProto","nativeKeys","nonEnumShadows","arrayLikeKeys","inherited","isObjectLike","isArrayLike","isArrayLikeObject","isArguments","iteratee","baseTimes","skipIndexes","isIndex","assignValue","objValue","isPrototype","Ctor","isLength","assigner","customizer","copyObject","baseKeys","otherArgs","baseRest","guard","isIterateeCall","assignInDefaults","srcValue","baseKeysIn","nativeKeysIn","isProto","assignInWith","srcIndex","keysIn","setUTCSeconds","MapCache","memoize","memoized","Cache","argsTag","mapTag","objectTag","setTag","reIsDeepProp","reIsPlainProp","reLeadingDot","rePropName","reEscapeChar","reIsHostCtor","typedArrayTags","freeExports","freeModule","freeProcess","nodeUtil","nodeIsTypedArray","isTypedArray","arrayAggregator","arraySome","predicate","isHostObject","mapToArray","setToArray","uid","arrayProto","funcProto","coreJsData","maskSrcKey","IE_PROTO","funcToString","reIsNative","Uint8Array","dataViewCtorString","toSource","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","symbolProto","symbolValueOf","symbolToString","Hash","ListCache","SetCache","Stack","assocIndexOf","baseAggregator","collection","baseEach","getMapData","pairs","LARGE_ARRAY_SIZE","eachFunc","fromRight","baseFor","iterable","keysFunc","createBaseFor","baseGet","isKey","castPath","toKey","baseHasIn","baseIsEqual","bitmask","equalFunc","objIsArr","othIsArr","objTag","othTag","getTag","objIsObj","othIsObj","isSameTag","equalArrays","byteLength","byteOffset","isPartial","stacked","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","objProps","objLength","othLength","skipCtor","othValue","compared","objCtor","othCtor","equalObjects","baseIsEqualDeep","isMasked","baseIteratee","isStrictComparable","matchesStrictComparable","hasFunc","hasPath","hasIn","UNORDERED_COMPARE_FLAG","baseMatchesProperty","matchData","getMatchData","noCustomizer","baseIsMatch","baseMatches","basePropertyDeep","stringToPath","arrLength","seen","arrValue","othIndex","isSymbol","ctorString","baseToString","quote","initializer","baseUnary","legendCategorical","textHeight","diametre","radius","xOffset","labelWidth","cummulative","newX","legendThreshold","valueExtent","yAxis","sides","rotate","legendMagnitude","circleScale","AxisFade","fullWidth","fullHeight","stopColor","characterMap","chars","allAccents","firstAccent","removeAccents","MarimekkoKey","barHeightAnnotationLineY1","barHeightAnnotationLineY2","totalHeight","verticalAnchor","PlaybackControls","parseTime","formatTime","buttonClassname","Rangeslider","constants","reverseDirection","coordinate","vertical","Slider","slider","sliderPos","handlePos","grab","onChangeStart","handleDrag","handleEnd","onChangeComplete","sliderValue","percentage","baseVal","coordinateStyle","directionStyle","clientCoordinateStyle","touches","getValueFromPosition","getPositionFromValue","sl","handleUpdate","handleLabel","coordinates","fillStyle","handleStyle","showTooltip","labelItems","labelKeys","labelPosition","labelCoords","labelStyle","data-value","handleStart","aria-valuemin","aria-valuemax","aria-valuenow","aria-orientation","sh","onKeyDown","handleKeyDown","st","handleFormat","renderLabels","Component","assertThisInitialized","Total","STARTS_WITH_VOWEL","startsWithVowel","article","ending","irregulars","rules","handleOptions","irregularWords","NUMBERS","EIGHT_ELEVEN_EIGHTEEN","ELEVEN_EIGHTEEN","startsWith11Or18","numbers","ACRONYM","IRREGULAR_ACRONYM","caseInsensitive","isIrregular","isIrregularAcronym","initialVowel","EXTRAS","getFirst","topTotalDosesPer100","topPercentVaccinated","percent_dose1_vaccinated","topPercentFullyVaccinated","percent_fully_vaccinated","topBoosterDosesPer100","booster_doses_per_100","populationToggle","setPopulationToggle","clickPopulationToggle","areaLink","source_link","percentVaccinatedFormatted","toPrecision","percentFullyVaccinatedFormatted","dosesPer100Formatted","boosterDosesPer100","Luxon","htmlFor","headers","contents","columnType","columnName","columnIsSortable","columnSortField","defaultSortIcon","responsive","truncation","isLinedHorizontal","people_fully_vaccinated","headerAttributes","isSortable","cellAttributes","columnIsVerticallyCentred","footerAttributes","tableAttributes","isStriped","isCompact","Head","secondary","Body","i2","columnIsHeader","Foot","footers","Footnote","footnote","colSpan","TableContainer","DataTable","captionTop","captionBottom","isHeaderHidden","tableRef","tableOrigami","updateRows","namedClass","_tableHeadersWithoutSort","cloneNode","_createFlatTableStructure","addSortButtons","_ready","latestRows","newGroupBody","newRow","clonedHeader","clonedTd","_createScrollTableStructure","clonedRows","headerRow","cellClone","minimumRowCount","_addControlsToDom","_setupScroll","_setupExpander","_expand","canExpand","_minimumRowCount","_updateExpander","_expanderUpdateScheduled","isExpanded","contract","isContracted","expanderButton","_updateControls","maxTableHeight","_contractedWrapperHeight","buttonHeight","extraHeight","supportsArrows","_supportsArrows","overlayWrapperHtml","createRange","selectNode","overlayFragment","createContextualFragment","controlsOverlay","fadeOverlay","forwardButton","backButton","_updateControlOverlayPosition","theadHeight","captionHeight","scrollForward","scrollBy","behavior","scrollBackward","updateScroll","_controlUpdateScheduled","_fromEnd","_fromStart","IntersectionObserver","arrowFadeObserverConfig","rootMargin","arrowFadeObserver","intersectionRatio","toggleExpanded","expanderButtonContainer","buttonOffset","contractTable","expandTable","canScrollTable","_canScrollTable","setProperty","showArrowDock","_showArrowDock","_updateScrollControl","showStickyArrows","_stickyArrows","arrowsDocked","scrolledToBoundary","hideAtBoundary","_canScrollPastTable","outsideTable","elementButton","_rowsHiddenByExpander","visibleRowCount","_tableTallerThanViewport","CSS","supports","getIntlCollator","Collator","ascendingSort","intlCollator","localeCompare","descendingSort","_cellFormatter","CellFormatter","batch","tableHeaderElement","cellFormatter","aCol","bCol","formatCell","headerSort","setFormatter","extractAltFromImages","insertAdjacentHTML","extractText","nodeText","expandAbbreviations","digit","abbreviation","removeDigitGroupSeparators","extractDigitsIfFound","digitsAndRange","extractNumberFromRange","ftDateTimeToNumber","monthNames","twentyFourHour","removeRefereneAsterisk","removeEmptyCellIndicators","extractNodeContent","extractNumber","filters","currency","sortValue","deep","TrajectoryChartPanel","idString","Context","isSmall","hideUnselected","setHideUnselected","selectedAreaDisplayNames","areaCode","emptyAreasToHighlightInChart","toggleElement","newAreas","maxSelectedAreas","emptyInputErrorMessage","maxSelectedErrorMessage","mainOptions","additionalOptions","closeOptionsOverlay","hideOptionsToggle","hideUnselectedAreas","RenderSuggestion","AreaLookup","exclusionList","placeholder","selectionErrorMessage","selectedAreasValues","formattedAreaList","addAreaToSelection","newArea","newSelectedAreas","removeAreaFromSelection","areaToRemove","isError","maxSelectedAreasReached","showClearButton","showSearchIcon","searchIconPosition","selectedValues","validateInput","renderSuggestion","onSelectCallback","onSubmitCallback","exclusionMatch","onSelectedValueRemove","onEmptyInputBackspace","onClickCallback","errorMessageOverride","blurInputOnSuggestionSubmit","usingSelectedValues","defaultGetSuggestions","defaultGetSuggestionValue","SelectedValue","AutosuggestSearch","customSelectedValueComponent","selectedValueComponent","getSuggestionValue","onClearFunction","activeSuggestion","setActiveSuggestion","setSearchValue","suggestions","setSuggestions","errorState","setErrorState","focusOnInput","onSelectedValueRemoveWrapper","isErrorState","errorMessageState","onSubmit","validateInputResult","callbackReturn","blur","onSuggestionsFetchRequested","onSuggestionsClearRequested","onSuggestionSelected","suggestionValue","suggestion","onSuggestionHighlighted","focusInputOnSuggestionClick","inputProps","onClearCallback","OptionsPanel","MainOptions","AdditionalOptions","showAdditionalOptionsByDefault","showAdditionalOptions","setShowAdditionalOptions","breakpointInitialised","buttonIcon","optionsButtonText","headerText","isShowing","hideDesktopOptionsToggle","OptionsOverlay","Button","ButtonGroup","ButtonPaginationGroup","OverlayContents","overlayState","oOverlayContentsSelector","portalContainer","createPortal","useOverlay","headingShaded","visuallyHideTitle","oLayerContext","oOverlayOptions","setIsShowing","setOverlay","oOverlay","showOverlay","hideOverlay","splitTextIntoLines","TrajectoryChart","displayNamesOfAreasToHighlightInChart","formatDataForChart","xTickIncrement","xTickLabelsToHide","decimalPlaces","getNumberOfDecimalPlacesForTicks","tooltipDecimalPlaces","generateTooltip","tickValue","subheadText","sourceText","lineEndPositions","dotSizeScale","delaunayData","MultipleLineTickLabel","orientations","offsetStartingPercentage","offsetType","hoveredLabelsColorScale","additionalProps","lineStroke","lineStrokeWidth","Labels","transformedYScale","flatData","rest","positionedLabels","labelX","labelY","MemoisedLabels","LabelsWithHighlights","labelLine","offsetTypesForOrientations","dateParse","formattedData","dataForMaxValueCalculation","dataGroupedByDate","maxYValue","integerTickCutoffPoint","floorOfLog10","multiplier","formatValueForTooltip","getUnitsFromOptions","NavigationHeaderMobileDropdownButton","buttonRef","currentText","NavigationHeaderMobileDropdown","openLinksInNewWindow","closeDropdown","dropdownRef","aria-current","NavigationHeader","setIsOpen","StickyHeader","isSticky","setSticky","stickyShadow","setStickyShadow","stickyTop","stickyHeight","containerBottom","breakpointHeight","wrapperClasses","minHeight","YoutubeEmbed","allowFullScreen","allow","defaultStyles","_ref$offsetLeft","_ref$offsetTop","_ref$style","_ref$unstyled","unstyled","_ref$applyPositionSty","applyPositionStyle","frequency","initialTooltipState","tooltipState","setTooltipState","showArgs","hideTooltip","ticker","tickIntervals","tickInterval","bisector","utcTicks","utcTickInterval","timeTicks","timeTickInterval","formatMillisecond","formatSecond","formatMinute","formatHour","formatDay","formatWeek","formatMonth","updateTimeScale","createTimeScale","textEl","svg","createElementNS","getComputedTextLength","isXOrYInValid","xOrY","useText","_props$verticalAnchor","_props$scaleToFit","scaleToFit","_props$lineHeight","_props$capHeight","capHeight","textProps","_textProps$x","_textProps$y","isXOrYNotValid","_useMemo","wordsWithWidth","wordWidth","spaceWidth","wordsByLines","currentLine","newLine","startDy","transforms","lineWidth","sx","sy","originX","originY","SVG_STYLE","_props$dx","_props$dy","_props$textAnchor","innerTextRef","_useText","band","ordinalRange","pointish","DEFAULT_CENTER","_ref$sides","_ref$size","_ref$center","_ref$rotate","radians","degrees","degreesToRadians","side","Polygon","_ref3$sides","_ref3$size","_ref3$center","_ref3$rotate","pointsToRender","getPoints","rootID","setRootID","getRootID","currentSession","root_id","user","ft_session","ft_session_s","device","spoor_session","spoor_session_is_new","spoor_id","settingsConfig","AppContainer","warnAboutHMRDisabled","only","shouldWrapWithAppContainer","areComponentsEqual","setConfig","cold","configureComponent","isMounted","enqueueForceUpdate","enqueueReplaceState","enqueueSetState","refs","updater","isReactComponent","forceUpdate","isPureReactComponent","__self","__source","$$typeof","_owner","ReactCurrentDispatcher","ReactCurrentBatchConfig","suspense","ReactCurrentOwner","IsSomeRendererActing","Profiler","PureComponent","StrictMode","Suspense","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","_calculateChangedBits","_currentValue","_currentValue2","_threadCount","createFactory","createRef","lazy","_ctor","_status","_result","useDebugValue","useImperativeHandle","hydrate","onError","pa","qa","ra","sa","extractEvents","eventTypes","ta","phasedRegistrationNames","ua","registrationName","va","wa","dependencies","xa","ya","za","Aa","Ba","Ca","stateNode","Da","Ea","Fa","Ga","Ha","Ia","Ja","Ka","La","Ma","Na","Oa","Pa","Qa","acceptsBooleans","attributeName","attributeNamespace","mustUseProperty","sanitizeURL","Ua","Va","xlinkHref","Wa","Xa","Sa","Ta","Ra","setAttributeNS","Ya","Za","$a","ab","bb","db","eb","fb","gb","hb","ib","jb","kb","lb","mb","pb","qb","_debugOwner","_debugSource","fileName","lineNumber","return","rb","sb","xb","_valueTracker","getOwnPropertyDescriptor","stopTracking","tb","yb","zb","defaultChecked","_wrapperState","initialChecked","Ab","initialValue","controlled","Bb","Cb","Db","Eb","activeElement","Gb","Fb","Hb","defaultSelected","Ib","Jb","Kb","Lb","Mb","Nb","Ob","Pb","Qb","MSApp","execUnsafeLocalFunction","namespaceURI","Rb","lastChild","Sb","Tb","animationend","animationiteration","animationstart","transitionend","Ub","Vb","Wb","animation","transition","Xb","Yb","Zb","$b","ac","bc","cc","dc","alternate","effectTag","ec","memoizedState","dehydrated","fc","hc","sibling","gc","ic","jc","kc","lc","_dispatchListeners","_dispatchInstances","isPropagationStopped","isPersistent","release","mc","oc","qc","topLevelType","targetInst","ancestors","rc","eventSystemFlags","sc","containerInfo","tc","uc","vc","wc","xc","yc","zc","Ac","Bc","Cc","Dc","Ec","Fc","Gc","Hc","Ic","Kc","blockedOn","Lc","pointerId","Mc","Nc","Pc","unstable_runWithPriority","Qc","Rc","Sc","Tc","Uc","unstable_scheduleCallback","unstable_NormalPriority","Vc","Wc","Yc","Zc","$c","ad","bubbled","captured","eventPriority","bd","cd","unstable_UserBlockingPriority","ed","fd","gd","hd","Oc","jd","gridArea","lineClamp","kd","ld","nd","menuitem","br","col","hr","keygen","wbr","od","pd","qd","rd","sd","td","ud","vd","xd","HTMLIFrameElement","contentWindow","yd","contentEditable","Dd","Ed","Fd","autoFocus","Gd","Hd","Id","Jd","Kd","previousSibling","Ld","Md","Nd","Od","Pd","Qd","Rd","Sd","Td","dispatchConfig","Ud","_targetInst","Vd","Wd","Xd","Yd","Zd","$d","ae","be","ce","Interface","isDefaultPrevented","defaultPrevented","returnValue","ee","eventPool","fe","destructor","de","getPooled","cancelBubble","persist","isTrusted","ge","he","ie","je","ke","le","ne","beforeInput","compositionEnd","compositionStart","compositionUpdate","pe","qe","se","ve","which","te","ctrlKey","altKey","metaKey","char","ue","we","password","tel","xe","ye","change","ze","Ae","Be","Ce","De","Ee","Fe","Ge","detachEvent","He","Ie","Je","Ke","Le","Me","_isInputEventSupported","Ne","view","Oe","Alt","Control","Meta","Shift","Pe","getModifierState","Qe","Re","Se","Te","Ue","Ve","screenX","screenY","pageX","pageY","fromElement","toElement","movementX","movementY","We","pressure","tangentialPressure","tiltX","tiltY","twist","pointerType","isPrimary","Xe","mouseEnter","mouseLeave","pointerEnter","pointerLeave","Ye","parentWindow","$e","af","bf","cf","df","select","ef","gf","hf","jf","selectionStart","selectionEnd","anchorNode","getSelection","anchorOffset","focusNode","focusOffset","kf","lf","animationName","elapsedTime","pseudoElement","mf","clipboardData","nf","of","charCode","pf","Esc","Spacebar","Left","Up","Right","Down","Del","Win","Menu","Apps","Scroll","MozPrintableKey","qf","16","17","18","19","27","32","33","34","35","36","37","38","39","45","46","112","113","114","115","116","117","118","119","120","121","122","123","144","145","224","rf","sf","dataTransfer","tf","targetTouches","changedTouches","uf","vf","deltaX","wheelDeltaX","wheelDeltaY","wheelDelta","deltaZ","deltaMode","wf","SimpleEventPlugin","EnterLeaveEventPlugin","ChangeEventPlugin","SelectEventPlugin","BeforeInputEventPlugin","yf","zf","Af","Bf","Cf","contextTypes","__reactInternalMemoizedUnmaskedChildContext","__reactInternalMemoizedMaskedChildContext","childContextTypes","Df","Ef","Ff","getChildContext","Gf","__reactInternalMemoizedMergedChildContext","Hf","If","Jf","Kf","unstable_cancelCallback","Lf","unstable_requestPaint","Mf","unstable_now","Nf","unstable_getCurrentPriorityLevel","Of","unstable_ImmediatePriority","Pf","Qf","Rf","unstable_LowPriority","Sf","unstable_IdlePriority","Tf","Uf","unstable_shouldYield","Vf","Wf","Xf","Yf","Zf","$f","ag","bg","cg","dg","eg","fg","hg","ig","jg","kg","lg","mg","ng","og","pg","childExpirationTime","qg","firstContext","expirationTime","rg","sg","observedBits","responders","tg","ug","updateQueue","baseState","baseQueue","shared","pending","effects","vg","wg","suspenseConfig","payload","xg","yg","zg","Ag","Bg","Cg","Dg","Eg","Fg","Jg","_reactInternalFiber","Gg","Hg","Ig","Kg","shouldComponentUpdate","Lg","contextType","Mg","componentWillReceiveProps","UNSAFE_componentWillReceiveProps","Ng","getDerivedStateFromProps","getSnapshotBeforeUpdate","UNSAFE_componentWillMount","componentWillMount","componentDidMount","Og","Pg","_stringRef","Qg","Rg","lastEffect","nextEffect","firstEffect","Sg","Tg","elementType","Ug","implementation","Vg","Wg","Xg","Yg","Zg","$g","ah","bh","ch","dh","eh","fh","gh","memoizedProps","revealOrder","ih","responder","jh","kh","lh","mh","nh","oh","ph","qh","rh","uh","vh","wh","lastRenderedReducer","eagerReducer","eagerState","lastRenderedState","dispatch","xh","yh","zh","Ah","Bh","Ch","Dh","Eh","Fh","Gh","Hh","Ih","Jh","Kh","Lh","Mh","Nh","readContext","useResponder","useDeferredValue","useTransition","Oh","Ph","Qh","Rh","Sh","Th","pendingProps","Uh","Vh","Wh","Xh","Yh","Zh","$h","ai","ci","di","ei","fi","UNSAFE_componentWillUpdate","componentWillUpdate","componentDidUpdate","gi","getDerivedStateFromError","pendingContext","ni","qi","retryTime","ji","unstable_avoidThisFallback","ki","li","isBackwards","rendering","renderingStartTime","tail","tailExpiration","tailMode","mi","ri","wasMultiple","multiple","ti","ui","wi","xi","yi","zi","Ai","Bi","Ci","Fi","Ei","Gi","__reactInternalSnapshotBeforeUpdate","Hi","Ii","Ji","Ki","Li","componentWillUnmount","Di","Mi","Ni","Oi","Pi","Qi","_reactRootContainer","Ri","Si","Ti","Ui","Vi","Wi","Xi","Yi","Zi","$i","componentDidCatch","aj","componentStack","Rj","bj","cj","dj","kj","lj","mj","nj","oj","qj","rj","sj","tj","uj","wj","timeoutMs","xj","yj","zj","lastExpiredTime","Aj","firstPendingTime","lastPingedTime","nextKnownPendingLevel","callbackExpirationTime","callbackPriority","callbackNode","Bj","Cj","Dj","Ej","Fj","Gj","Hj","finishedWork","finishedExpirationTime","lastSuspendedTime","Ij","timeoutHandle","Jj","busyMinDurationMs","busyDelayMs","Kj","Mj","Nj","pingCache","Oj","ub","Pj","Xc","Qj","Sj","firstSuspendedTime","rangeCount","wb","activeElementDetached","focusedElem","selectionRange","Tj","wd","compareDocumentPosition","setStart","removeAllRanges","addRange","setEnd","vb","Uj","Vj","Wj","ob","Xj","unstable_observedBits","Zj","pendingChildren","bk","ck","dk","ek","fk","Jc","_internalRoot","gk","ik","hk","jk","kk","unmount","Lj","lk","Events","findFiberByHostInstance","bundleType","rendererPackageName","isDisabled","supportsFiber","inject","onCommitFiberRoot","onCommitFiberUnmount","Yj","overrideHookState","overrideProps","setSuspenseHandler","scheduleUpdate","currentDispatcherRef","findHostInstanceByFiber","findHostInstancesForRefresh","scheduleRefresh","scheduleRoot","setRefreshHandler","getCurrentFiber","findDOMNode","flushSync","unmountComponentAtNode","unstable_batchedUpdates","unstable_createPortal","unstable_renderSubtreeIntoContainer","MessageChannel","unstable_forceFrameRate","performance","port2","port1","sortIndex","startTime","priorityLevel","unstable_Profiling","unstable_continueExecution","unstable_getFirstCallbackNode","unstable_next","unstable_pauseExecution","unstable_wrapCallback","iter","_s","_e","_arr","_n","runtime","Op","$Symbol","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","_invoke","doneResult","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","abrupt","record","tryCatch","makeInvokeMethod","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","NativeIteratorPrototype","Gp","defineIteratorMethods","AsyncIterator","PromiseImpl","previousPromise","callInvokeWithMethodAndArg","invoke","__await","unwrapped","resultName","nextLoc","pushTryEntry","locs","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","iteratorMethod","isGeneratorFunction","genFun","ctor","mark","awrap","async","skipTempReset","rootRecord","rval","exception","caught","hasCatch","hasFinally","finallyEntry","finish","thrown","delegateYield","regeneratorRuntime","accidentalStrictMode","globalThis","ReactPropTypesSecret","emptyFunction","emptyFunctionWithReset","resetWarningCache","shim","propName","componentName","propFullName","secret","getShim","ReactPropTypes","checkPropTypes","flourishMessageEventListener","FLOURISH_DOMAINS","customFlourishAnalytics","oDate","bail","vfile","trough","plain","attachers","transformers","frozen","freezeIndex","processor","assertUnfrozen","freeze","addPlugin","addList","addPreset","assertParser","newable","Compiler","assertCompiler","assertNode","runSync","assertDone","processSync","destination","executor","pipeline","asyncName","toStr","gOPD","isPlainObject","hasOwnConstructor","hasIsPrototypeOf","getProperty","copyIsArray","VMessage","VFile","filePath","fatal","fail","VMessagePrototype","parseOrigin","ruleId","assertPart","assertNonEmpty","assertPath","stem","npath","nFileName","isBuffer","readFloatLE","isSlowBuffer","_isBuffer","fns","middleware","invoked","unherit","Local","inherits","Super","From","parameters","superCtor","super_","TempCtor","vfileLocation","tokenizer","setOptions","inList","inBlock","inLink","atStart","toOffset","exitStart","enterList","enterLink","enterBlock","interruptParagraph","interruptList","interruptBlockquote","blockTokenizers","indentedCode","fencedCode","blockquote","atxHeading","thematicBreak","setextHeading","paragraph","inlineTokenizers","autoLink","strong","emphasis","deletion","break","blockMethods","inlineMethods","tokenizeBlock","tokenizeInline","tokenizeFactory","offsetToPositionFactory","indices","positionToOffsetFactory","toPosition","entities","decoder","offsets","alphabetical","valueLength","methods","eat","updatePosition","onlyAtStart","notInList","notInBlock","notInLink","eof","subvalue","Position","indentation","getOffset","combined","validateEat","MERGEABLE_NODES","mergeable","escapes","removePosition","EXPRESSION_LINE_BREAKS","hard","soft","subresult","toResult","typeFactory","anyFactory","matchesFactory","checks","convertAll","whitespace","silent","blankQueue","subvalueQueue","contentQueue","CODE_INDENT","fenceCount","flag","exdentedContent","closing","exdentedClosing","interrupt","nextIndex","prefixed","exit","indents","markerCount","getIndent","removeIndent","markers","ordered","currentMarker","prevEmpty","allLines","emptyLines","enterTop","exitBlockquote","isLoose","indented","interuptors","LIST_ORDERED_COMMONMARK_MARKERS","LIST_ORDERED_MARKERS","LIST_UNORDERED_MARKERS","TAB_SIZE","trail","loose","listItem","EXPRESSION_LOOSE_LIST_ITEM","EXPRESSION_TASK_ITEM","EXPRESSION_BULLET","EXPRESSION_PEDANTIC_BULLET","EXPRESSION_INITIAL_INDENT","task","pedanticListItem","normalListItem","bullet","trimmedLines","$3","$4","maximum","minIndent","SETEXT_MARKERS","sequence","sequences","footnoteDefinition","EXPRESSION_INITIAL_TAB","subqueue","C_BRACKET_OPEN","beforeURL","beforeTitle","isEnclosedURLCharacter","isUnclosedURLCharacter","alignments","alignment","hasDash","preamble","lineCount","lineIndex","pipeIndex","trimTrailingLines","locate","locator","MAILTO_LENGTH","hasAtCharacter","PROTOCOLS","PROTOCOLS_LENGTH","parenCount","nextCharacter","inlineHTML","EXPRESSION_HTML_LINK_OPEN","EXPRESSION_HTML_LINK_CLOSE","LINK_MARKERS","COMMONMARK_LINK_MARKERS","hasMarker","isImage","intro","referenceType","asterisk","underscore","strikethrough","preceding","inlineCode","openingCount","tickQueue","hardBreak","visitWithParents","listNode","selfClosingRe","simpleTagRe","currentParent","selfClosing","getSelfClosing","getSimpleTag","matchingTag","findAndPull","fromNode","toNode","toIndex","virtual","untangle","disallow","renderer","isReactFragment","nodeProps","getNodeProps","resolveChildren","childNode","isTagRenderer","includeNodeIndex","parentChildCount","assignDefined","level","tight","unwrapParagraphs","language","inline","columnAlignment","isHeader","isBlock","attrs","defs","protocols","uri","colon","SimpleRenderer","getCoreProps","linkReference","imageReference","tableHead","tableBody","tableRow","tableCell","textAlign","coreProps","checkbox","readOnly","virtualHtml","singleMatcher","multiMatcher","decodeComponents","components","encodedURI","replaceMap","customDecodeURIComponent","separatorIndex","isArr","ListCard","baseTrim","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","isBinary","trimmedEndIndex","reTrimStart","reWhitespace","baseGetTag","nativeObjectToString","isOwn","unmasked","maybeMatch","reg","begs","beg","functionRE","expressions","fnRE","searchMatch","SyntaxError","getFunctionCalls","evalFunctionCall","Mexp","formulaEval","pop1","pop2","pop3","disp","postfixEval","UserDefined","Exception","lex","toPostfix","popped","prep","inc","eva","math","asin","atan","acosh","div","fact","tanh","atanh","mod","mul","asinh","sub","sigma","preced","11","14","type0","type1","type1Asterick","type3Asterick","type6","newAr","str1","str2","addToken","changeSignObj","changeSign","closingParObj","openingParObj","ptc","inpStr","allowed","bracToClose","asterick","prevKey","precedence","tokenize","cToken","cType","cEv","cPre","cShow","hasDec","isDegree","pro","choice","toRadian","low","high","pow10x","sinha","cosha","mapCacheClear","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","hashClear","hashDelete","hashGet","hashHas","hashSet","listCacheClear","listCacheDelete","listCacheGet","listCacheHas","listCacheSet","_getXAndYFromEvent","screenCTM","getScreenCTM","createSVGPoint","matrixTransform","DEFAULT_POINT","boundingClientRect","oTable","_react","_getRequireWildcardCache","newObj","hasPropertyDescriptor","desc","_interopRequireWildcard","_propTypes","_interopRequireDefault","_arrays","_Autowhatever","_theme","ownKeys","enumerableOnly","sym","_objectSpread","getOwnPropertyDescriptors","defineProperties","_possibleConstructorReturn","_assertThisInitialized","alwaysTrue","Autosuggest","_Component","_inherits","Derived","_super","NewTarget","_alwaysRenderSuggestions","alwaysRenderSuggestions","_classCallCheck","justClickedOnSuggestionsContainer","suggestionsContainer","autowhatever","sectionIndex","itemIndex","updateHighlightedSuggestion","pressedSuggestion","justSelectedSuggestion","justMouseEntered","multiSection","_this$props","keepSuggestionsOnSelect","shouldKeepSuggestionsOnSelect","resetHighlightedSuggestion","_this$props2","_this$getSuggestionIn","getSuggestionIndices","findSuggestionElement","suggestionIndex","clickedSuggestion","getSuggestion","clickedSuggestionValue","maybeCallOnChange","closeSuggestions","_this$props3","shouldRenderSuggestions","highlightedSuggestion","getHighlightedSuggestion","shouldRender","isFocused","highlightedSectionIndex","highlightedSuggestionIndex","valueBeforeUpDown","isCollapsed","blurEvent","onMouseEnter","onSuggestionMouseEnter","onMouseLeave","onSuggestionMouseLeave","onSuggestionMouseDown","onSuggestionTouchStart","onSuggestionTouchMove","onSuggestionClick","containerProps","renderSuggestionsContainer","getQuery","justPressedUpDown","onDocumentMouseDown","onDocumentMouseUp","itemsContainer","shouldResetHighlighting","highlightFirstSuggestion","willRenderSuggestions","revealSuggestions","prevState","_this$props4","prevValue","shouldResetValueBeforeUpDown","_this$props5","getSectionSuggestions","_this$state","suggestionElement","startNode","_this$props$inputProp","_this$props6","renderInputComponent","renderSectionTitle","_this$state2","_onFocus","_onKeyDown","autowhateverInputProps","newHighlightedSectionIndex","newHighlightedItemIndex","getSuggestionValueByIndex","_newValue","willCloseSuggestions","renderSuggestionData","renderItemsContainer","renderItem","renderItemData","getSectionItems","highlightedItemIndex","itemProps","mapToAutowhateverTheme","storeAutowhateverRef","defaultTheme","arrA","arrB","_sectionIterator","_reactThemeable","_SectionTitle","_ItemList","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","emptyObject","Autowhatever","userRef","highlightedItem","isInputFocused","nextPrev","_this$sectionIterator2","sectionIterator","setSectionsItems","setSectionIterator","setTheme","ensureHighlightedItemIsVisible","sectionsItems","sectionsLengths","allSectionsAreEmpty","itemsCount","sectionKeyPrefix","isFirstSection","onHighlightedItemChange","getItemId","storeItemsListReference","itemOffsetRelativeToContainer","offsetParent","renderedItems","renderSections","renderItems","ariaActivedescendant","itemsContainerId","inputComponent","autoComplete","storeInputReference","storeItemsContainerReference","containerOpen","inputOpen","inputFocused","itemsContainerOpen","itemsList","itemFirst","itemHighlighted","sectionContainer","sectionContainerFirst","sectionTitle","sliceIterator","_position","nextNonEmptySectionIndex","_position2","prevNonEmptySectionIndex","isLast","_objectAssign","_objectAssign2","truthy","classNameDecorator","ToObject","ownEnumerableKeys","_compareObjects","SectionTitle","_Item","ItemsList","sectionPrefix","isItemPropsFunction","isFirst","itemKey","itemPropsObj","allItemProps","storeHighlightedItemReference","_objectWithoutProperties","storeItemReference","suggestionsContainerOpen","suggestionsList","suggestionFirst","suggestionHighlighted","DatePicker","selectedStartDate","selectedEndDate","updateDateRange","isDateRange","onApplyCallback","setError","fallbackStartDate","setFallbackStartDate","fallbackEndDate","setFallbackEndDate","startDateRef","endDateRef","storedDateFormatter","minDateInputMaxDate","readableDateFormat","weekBeforeMaxDate","endDate","formattedStartDate","parsedEndDate","formattedEndDate","cachedGuess","guesses","logError","momentVersion","major","minor","charCodeToInt","unpackBase60","whole","fractional","arrayToInt","mapIndices","unpack","untils","intToUntil","abbrs","packedString","_set","Country","country_name","zone_names","OffsetAt","timeString","toTimeString","ZoneScore","offsetScore","abbrScore","findChange","sortZoneScores","addToGuesses","guessesForUserOffsets","guessesOffset","offsetsLength","filteredGuesses","rebuildGuess","intlName","normalizeName","zoneScore","startYear","userOffsets","zoneScores","getZone","scoreOffsetAt","addZone","packed","caller","addLink","normal0","normal1","needsOffset","isUnixTimestamp","unpacked","_index","zone_name","country_code","offsetNext","offsetPrev","moveAmbiguousForward","moveInvalidForward","offsetAt","dataVersion","_zones","_links","_names","_countries","country_zones","addCountries","zoneExists","didShowError","guess","ignoreCache","zonesForCountry","with_offset","abbrWrap","_z","resetZoneWrap","setDefault","webpackContext","req","webpackContextResolve","BaseComponent","_class","_React$PureComponent","WrappedComponent","topTickLabelProps","AxisTop","rightTickLabelProps","AxisRight","bottomTickLabelProps","AxisBottom","leftTickLabelProps","AxisLeft","updatePointScale","createPointScale","getXAndYFromEvent","useDrag","initialState","callbackRef","setStateCallback","_ref$resetOnStart","resetOnStart","onDragEnd","onDragMove","onDragStart","isDragging","positionPropsRef","_useStateWithCallback","nextState","dragState","setDragStateWithCallback","currState","handleDragStart","handleDragMove","handleDragEnd","Drag","_ref$captureDragArea","captureDragArea","drag","onPointerDown","onPointerMove","onPointerUp","EPSILON","EDGE_STACK","Uint32Array","Delaunator","getX","defaultGetX","getY","defaultGetY","Float64Array","maxTriangles","_triangles","_halfedges","Int32Array","_hashSize","_hullPrev","_hullNext","_hullTri","_hullHash","_ids","_dists","hullPrev","hullNext","hullTri","hullHash","minX","minY","maxX","maxY","minDist","dist","i0x","i0y","i1x","i1y","minRadius","circumradius","i2x","i2y","quicksort","hull","subarray","triangles","halfedges","ax","ay","bx","ey","cl","circumcenter","_cx","_cy","_hullStart","hullSize","_hashKey","trianglesLen","_addTriangle","xp","_legalize","pseudoAngle","ar","b0","al","p0","pr","pl","inCircle","hbl","_link","orientIfSure","py","rx","ry","qx","qy","fx","fy","bp","cp","ids","dists","tempDist","swap","xmin","ymin","xmax","ymax","_circumcenters","vectors","_init","circumcenters","x3","y3","inedges","_renderSegment","h0","h1","_project","_clip","cellPolygon","polygon","renderCell","c0","_regioncode","c1","_clipSegment","neighbors","loop","e0","_cell","_clipInfinite","_clipFinite","e1","sx0","sy0","sx1","sy1","_edgecode","_edge","vx0","vy0","vxn","vyn","vx","vy","pointX","pointY","jitter","flatArray","flatIterable","_delaunator","_hullIndex","collinear","bounds","hullIndex","renderHull","trianglePolygon","renderTriangle","eps","getSeededRandom","seed","startTimeMs","startDateMs","updateThresholdScale","createThresholdScale","invertExtent","e10","e5","e2","power","LN10","tickStep","step0","step1","prefixExponent","formatDecimal","formatRounded","prefixes","grouping","thousands","currencyPrefix","currencySuffix","numerals","formatNumerals","nan","formatTypes","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","formatTrim","formatPrefix","ascendingBisect","bisectRight"],"mappings":"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K,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,KACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,KACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,KAAM,IACN,KAAM,IACN,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,KACL,IAAK,KACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,KAAM,IACN,KAAM,IACN,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,KAAM,IACN,KAAM,IACN,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,KAAM,IACN,KAAM,IACN,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,KACL,IAAK,KACL,KAAM,IACN,KAAM,IACN,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,KAAM,IACN,KAAM,IACN,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,KAAM,IACN,KAAM,IACN,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,KAAM,IACN,KAAM,IACN,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,KAAM,IACN,KAAM,IACN,IAAK,IACL,IAAK,IACL,IAAK,IACL,KAAM,IACN,KAAM,IACN,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,KACL,IAAK,KACL,IAAK,IACL,IAAK,IACL,IAAK,KACL,IAAK,KACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,KAAM,IACN,KAAM,IACN,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,KAAM,IACN,KAAM,IACN,KAAM,IACN,KAAM,IACN,KAAM,IACN,KAAM,IACN,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,KAAM,IACN,KAAM,IACN,KAAM,IACN,KAAM,IACN,KAAM,IACN,KAAM,IACN,KAAM,IACN,KAAM,IACN,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,KAAM,IACN,IAAK,IACL,IAAK,IACL,IAAK,IACL,KAAM,IACN,KAAM,IACN,KAAM,IACN,KAAM,IACN,KAAM,IACN,KAAM,IACN,KAAM,IACN,KAAM,IACN,IAAK,IACL,IAAK,IACL,KAAM,IACN,KAAM,IACN,KAAM,IACN,KAAM,IACN,KAA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,EAAMrhB,OAAS,IAChB63G,IACX,IAAI2oH,EAAoB,YAAbjlN,EAAI3Y,OAAqC,YAAd6gH,EAAK7gH,MAC3C,GAAIi1G,EAAMq0H,EAAM7qN,EAAM/gB,KAAKmjH,OACtB,CACJ,KAAOyoH,GAAQr0H,IAAQ2oH,GAAQA,GAAQ3oH,EAAMq0H,GAC5CD,EAAS5qN,EAAM7Y,MACf+S,EAAM8F,EAAMA,EAAMrhB,OAAS,GAC3B83G,EAAKx3G,KAAK2rO,GACVC,EAAO3wN,EAAIs8F,IACX2oH,EAAqB,YAAd/8G,EAAK7gH,OAAoC,YAAb2Y,EAAI3Y,MAExCye,EAAM/gB,KAAKmjH,IAId,OAAO,IAAI6nH,EAAKxzH,IAEjB9vG,EAAOiD,QAAUqgO,G,6BChDjB,IAAIA,EAAO,EAAQ,KACnB,SAASa,EAAKhvN,EAAKiD,GACjB,IAAK,IAAItgB,EAAI,EAAGA,EAAIqd,EAAInd,OAAQF,IAC9Bqd,EAAIrd,IAAMsgB,EAEZ,OAAOjD,EAET,IAAI0F,EAAQ,CACV,MACA,MACA,MACA,KACA,IACA,IACA,IACA,IACA,IACA,OACA,OACA,OACA,IACA,IACA,IACA,MACA,OACA,QACA,KACA,IACA,OACA,IACA,IACA,IACA,IACA,IACA,OACA,QACA,MACA,IACA,IACA,IACA,IACA,OACA,QACA,IACA,MACA,IACA,IACA,IACA,IACA,IACA,QACA,IACA,KACA,OAEE44H,EAAO,CACT,MACA,MACA,MACA,OACA,IACA,IACA,IACA,IACA,IACA,OACA,OACA,OACA,IACA,IACA,IACA,MACA,OACA,QACA,MACA,IACA,OACA,IACA,IACA,IACA,WACA,IACA,OACA,QACA,QACA,IACA,IACA,IACA,UACA,OACA,QACA,IACA,OACA,IACA,IACA,IACA,IACA,IACA,UACA,IACA,OACA,OAEE2wF,EAAM,CACRd,EAAKe,KAAK94K,IACV+3K,EAAKe,KAAK/4K,IACVg4K,EAAKe,KAAK3pK,IACV,KACA,IACA,IACA4oK,EAAKe,KAAKt8N,EACVu7N,EAAKe,KAAKx6N,EACV,IAAIsqB,OACJmvM,EAAKe,K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","file":"main.ad2c2e41.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t};\n\n \tfunction hotDisposeChunk(chunkId) {\n \t\tdelete installedChunks[chunkId];\n \t}\n \tvar parentHotUpdateCallback = window[\"webpackHotUpdate\"];\n \twindow[\"webpackHotUpdate\"] = // eslint-disable-next-line no-unused-vars\n \tfunction webpackHotUpdateCallback(chunkId, moreModules) {\n \t\thotAddUpdateChunk(chunkId, moreModules);\n \t\tif (parentHotUpdateCallback) parentHotUpdateCallback(chunkId, moreModules);\n \t} ;\n\n \t// eslint-disable-next-line no-unused-vars\n \tfunction hotDownloadUpdateChunk(chunkId) {\n \t\tvar script = document.createElement(\"script\");\n \t\tscript.charset = \"utf-8\";\n \t\tscript.src = __webpack_require__.p + \"\" + chunkId + \".\" + hotCurrentHash + \".hot-update.js\";\n \t\tif (null) script.crossOrigin = null;\n \t\tdocument.head.appendChild(script);\n \t}\n\n \t// eslint-disable-next-line no-unused-vars\n \tfunction hotDownloadManifest(requestTimeout) {\n \t\trequestTimeout = requestTimeout || 10000;\n \t\treturn new Promise(function(resolve, reject) {\n \t\t\tif (typeof XMLHttpRequest === \"undefined\") {\n \t\t\t\treturn reject(new Error(\"No browser support\"));\n \t\t\t}\n \t\t\ttry {\n \t\t\t\tvar request = new XMLHttpRequest();\n \t\t\t\tvar requestPath = __webpack_require__.p + \"\" + hotCurrentHash + \".hot-update.json\";\n \t\t\t\trequest.open(\"GET\", requestPath, true);\n \t\t\t\trequest.timeout = requestTimeout;\n \t\t\t\trequest.send(null);\n \t\t\t} catch (err) {\n \t\t\t\treturn reject(err);\n \t\t\t}\n \t\t\trequest.onreadystatechange = function() {\n \t\t\t\tif (request.readyState !== 4) return;\n \t\t\t\tif (request.status === 0) {\n \t\t\t\t\t// timeout\n \t\t\t\t\treject(\n \t\t\t\t\t\tnew Error(\"Manifest request to \" + requestPath + \" timed out.\")\n \t\t\t\t\t);\n \t\t\t\t} else if (request.status === 404) {\n \t\t\t\t\t// no update available\n \t\t\t\t\tresolve();\n \t\t\t\t} else if (request.status !== 200 && request.status !== 304) {\n \t\t\t\t\t// other failure\n \t\t\t\t\treject(new Error(\"Manifest request to \" + requestPath + \" failed.\"));\n \t\t\t\t} else {\n \t\t\t\t\t// success\n \t\t\t\t\ttry {\n \t\t\t\t\t\tvar update = JSON.parse(request.responseText);\n \t\t\t\t\t} catch (e) {\n \t\t\t\t\t\treject(e);\n \t\t\t\t\t\treturn;\n \t\t\t\t\t}\n \t\t\t\t\tresolve(update);\n \t\t\t\t}\n \t\t\t};\n \t\t});\n \t}\n\n \tvar hotApplyOnUpdate = true;\n \t// eslint-disable-next-line no-unused-vars\n \tvar hotCurrentHash = \"ad2c2e41888ac86279da\";\n \tvar hotRequestTimeout = 10000;\n \tvar hotCurrentModuleData = {};\n \tvar hotCurrentChildModule;\n \t// eslint-disable-next-line no-unused-vars\n \tvar hotCurrentParents = [];\n \t// eslint-disable-next-line no-unused-vars\n \tvar hotCurrentParentsTemp = [];\n\n \t// eslint-disable-next-line no-unused-vars\n \tfunction hotCreateRequire(moduleId) {\n \t\tvar me = installedModules[moduleId];\n \t\tif (!me) return __webpack_require__;\n \t\tvar fn = function(request) {\n \t\t\tif (me.hot.active) {\n \t\t\t\tif (installedModules[request]) {\n \t\t\t\t\tif (installedModules[request].parents.indexOf(moduleId) === -1) {\n \t\t\t\t\t\tinstalledModules[request].parents.push(moduleId);\n \t\t\t\t\t}\n \t\t\t\t} else {\n \t\t\t\t\thotCurrentParents = [moduleId];\n \t\t\t\t\thotCurrentChildModule = request;\n \t\t\t\t}\n \t\t\t\tif (me.children.indexOf(request) === -1) {\n \t\t\t\t\tme.children.push(request);\n \t\t\t\t}\n \t\t\t} else {\n \t\t\t\tconsole.warn(\n \t\t\t\t\t\"[HMR] unexpected require(\" +\n \t\t\t\t\t\trequest +\n \t\t\t\t\t\t\") from disposed module \" +\n \t\t\t\t\t\tmoduleId\n \t\t\t\t);\n \t\t\t\thotCurrentParents = [];\n \t\t\t}\n \t\t\treturn __webpack_require__(request);\n \t\t};\n \t\tvar ObjectFactory = function ObjectFactory(name) {\n \t\t\treturn {\n \t\t\t\tconfigurable: true,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: function() {\n \t\t\t\t\treturn __webpack_require__[name];\n \t\t\t\t},\n \t\t\t\tset: function(value) {\n \t\t\t\t\t__webpack_require__[name] = value;\n \t\t\t\t}\n \t\t\t};\n \t\t};\n \t\tfor (var name in __webpack_require__) {\n \t\t\tif (\n \t\t\t\tObject.prototype.hasOwnProperty.call(__webpack_require__, name) &&\n \t\t\t\tname !== \"e\" &&\n \t\t\t\tname !== \"t\"\n \t\t\t) {\n \t\t\t\tObject.defineProperty(fn, name, ObjectFactory(name));\n \t\t\t}\n \t\t}\n \t\tfn.e = function(chunkId) {\n \t\t\tif (hotStatus === \"ready\") hotSetStatus(\"prepare\");\n \t\t\thotChunksLoading++;\n \t\t\treturn __webpack_require__.e(chunkId).then(finishChunkLoading, function(err) {\n \t\t\t\tfinishChunkLoading();\n \t\t\t\tthrow err;\n \t\t\t});\n\n \t\t\tfunction finishChunkLoading() {\n \t\t\t\thotChunksLoading--;\n \t\t\t\tif (hotStatus === \"prepare\") {\n \t\t\t\t\tif (!hotWaitingFilesMap[chunkId]) {\n \t\t\t\t\t\thotEnsureUpdateChunk(chunkId);\n \t\t\t\t\t}\n \t\t\t\t\tif (hotChunksLoading === 0 && hotWaitingFiles === 0) {\n \t\t\t\t\t\thotUpdateDownloaded();\n \t\t\t\t\t}\n \t\t\t\t}\n \t\t\t}\n \t\t};\n \t\tfn.t = function(value, mode) {\n \t\t\tif (mode & 1) value = fn(value);\n \t\t\treturn __webpack_require__.t(value, mode & ~1);\n \t\t};\n \t\treturn fn;\n \t}\n\n \t// eslint-disable-next-line no-unused-vars\n \tfunction hotCreateModule(moduleId) {\n \t\tvar hot = {\n \t\t\t// private stuff\n \t\t\t_acceptedDependencies: {},\n \t\t\t_declinedDependencies: {},\n \t\t\t_selfAccepted: false,\n \t\t\t_selfDeclined: false,\n \t\t\t_selfInvalidated: false,\n \t\t\t_disposeHandlers: [],\n \t\t\t_main: hotCurrentChildModule !== moduleId,\n\n \t\t\t// Module API\n \t\t\tactive: true,\n \t\t\taccept: function(dep, callback) {\n \t\t\t\tif (dep === undefined) hot._selfAccepted = true;\n \t\t\t\telse if (typeof dep === \"function\") hot._selfAccepted = dep;\n \t\t\t\telse if (typeof dep === \"object\")\n \t\t\t\t\tfor (var i = 0; i < dep.length; i++)\n \t\t\t\t\t\thot._acceptedDependencies[dep[i]] = callback || function() {};\n \t\t\t\telse hot._acceptedDependencies[dep] = callback || function() {};\n \t\t\t},\n \t\t\tdecline: function(dep) {\n \t\t\t\tif (dep === undefined) hot._selfDeclined = true;\n \t\t\t\telse if (typeof dep === \"object\")\n \t\t\t\t\tfor (var i = 0; i < dep.length; i++)\n \t\t\t\t\t\thot._declinedDependencies[dep[i]] = true;\n \t\t\t\telse hot._declinedDependencies[dep] = true;\n \t\t\t},\n \t\t\tdispose: function(callback) {\n \t\t\t\thot._disposeHandlers.push(callback);\n \t\t\t},\n \t\t\taddDisposeHandler: function(callback) {\n \t\t\t\thot._disposeHandlers.push(callback);\n \t\t\t},\n \t\t\tremoveDisposeHandler: function(callback) {\n \t\t\t\tvar idx = hot._disposeHandlers.indexOf(callback);\n \t\t\t\tif (idx >= 0) hot._disposeHandlers.splice(idx, 1);\n \t\t\t},\n \t\t\tinvalidate: function() {\n \t\t\t\tthis._selfInvalidated = true;\n \t\t\t\tswitch (hotStatus) {\n \t\t\t\t\tcase \"idle\":\n \t\t\t\t\t\thotUpdate = {};\n \t\t\t\t\t\thotUpdate[moduleId] = modules[moduleId];\n \t\t\t\t\t\thotSetStatus(\"ready\");\n \t\t\t\t\t\tbreak;\n \t\t\t\t\tcase \"ready\":\n \t\t\t\t\t\thotApplyInvalidatedModule(moduleId);\n \t\t\t\t\t\tbreak;\n \t\t\t\t\tcase \"prepare\":\n \t\t\t\t\tcase \"check\":\n \t\t\t\t\tcase \"dispose\":\n \t\t\t\t\tcase \"apply\":\n \t\t\t\t\t\t(hotQueuedInvalidatedModules =\n \t\t\t\t\t\t\thotQueuedInvalidatedModules || []).push(moduleId);\n \t\t\t\t\t\tbreak;\n \t\t\t\t\tdefault:\n \t\t\t\t\t\t// ignore requests in error states\n \t\t\t\t\t\tbreak;\n \t\t\t\t}\n \t\t\t},\n\n \t\t\t// Management API\n \t\t\tcheck: hotCheck,\n \t\t\tapply: hotApply,\n \t\t\tstatus: function(l) {\n \t\t\t\tif (!l) return hotStatus;\n \t\t\t\thotStatusHandlers.push(l);\n \t\t\t},\n \t\t\taddStatusHandler: function(l) {\n \t\t\t\thotStatusHandlers.push(l);\n \t\t\t},\n \t\t\tremoveStatusHandler: function(l) {\n \t\t\t\tvar idx = hotStatusHandlers.indexOf(l);\n \t\t\t\tif (idx >= 0) hotStatusHandlers.splice(idx, 1);\n \t\t\t},\n\n \t\t\t//inherit from previous dispose call\n \t\t\tdata: hotCurrentModuleData[moduleId]\n \t\t};\n \t\thotCurrentChildModule = undefined;\n \t\treturn hot;\n \t}\n\n \tvar hotStatusHandlers = [];\n \tvar hotStatus = \"idle\";\n\n \tfunction hotSetStatus(newStatus) {\n \t\thotStatus = newStatus;\n \t\tfor (var i = 0; i < hotStatusHandlers.length; i++)\n \t\t\thotStatusHandlers[i].call(null, newStatus);\n \t}\n\n \t// while downloading\n \tvar hotWaitingFiles = 0;\n \tvar hotChunksLoading = 0;\n \tvar hotWaitingFilesMap = {};\n \tvar hotRequestedFilesMap = {};\n \tvar hotAvailableFilesMap = {};\n \tvar hotDeferred;\n\n \t// The update info\n \tvar hotUpdate, hotUpdateNewHash, hotQueuedInvalidatedModules;\n\n \tfunction toModuleId(id) {\n \t\tvar isNumber = +id + \"\" === id;\n \t\treturn isNumber ? +id : id;\n \t}\n\n \tfunction hotCheck(apply) {\n \t\tif (hotStatus !== \"idle\") {\n \t\t\tthrow new Error(\"check() is only allowed in idle status\");\n \t\t}\n \t\thotApplyOnUpdate = apply;\n \t\thotSetStatus(\"check\");\n \t\treturn hotDownloadManifest(hotRequestTimeout).then(function(update) {\n \t\t\tif (!update) {\n \t\t\t\thotSetStatus(hotApplyInvalidatedModules() ? \"ready\" : \"idle\");\n \t\t\t\treturn null;\n \t\t\t}\n \t\t\thotRequestedFilesMap = {};\n \t\t\thotWaitingFilesMap = {};\n \t\t\thotAvailableFilesMap = update.c;\n \t\t\thotUpdateNewHash = update.h;\n\n \t\t\thotSetStatus(\"prepare\");\n \t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\thotDeferred = {\n \t\t\t\t\tresolve: resolve,\n \t\t\t\t\treject: reject\n \t\t\t\t};\n \t\t\t});\n \t\t\thotUpdate = {};\n \t\t\tfor(var chunkId in installedChunks)\n \t\t\t// eslint-disable-next-line no-lone-blocks\n \t\t\t{\n \t\t\t\thotEnsureUpdateChunk(chunkId);\n \t\t\t}\n \t\t\tif (\n \t\t\t\thotStatus === \"prepare\" &&\n \t\t\t\thotChunksLoading === 0 &&\n \t\t\t\thotWaitingFiles === 0\n \t\t\t) {\n \t\t\t\thotUpdateDownloaded();\n \t\t\t}\n \t\t\treturn promise;\n \t\t});\n \t}\n\n \t// eslint-disable-next-line no-unused-vars\n \tfunction hotAddUpdateChunk(chunkId, moreModules) {\n \t\tif (!hotAvailableFilesMap[chunkId] || !hotRequestedFilesMap[chunkId])\n \t\t\treturn;\n \t\thotRequestedFilesMap[chunkId] = false;\n \t\tfor (var moduleId in moreModules) {\n \t\t\tif (Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\thotUpdate[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif (--hotWaitingFiles === 0 && hotChunksLoading === 0) {\n \t\t\thotUpdateDownloaded();\n \t\t}\n \t}\n\n \tfunction hotEnsureUpdateChunk(chunkId) {\n \t\tif (!hotAvailableFilesMap[chunkId]) {\n \t\t\thotWaitingFilesMap[chunkId] = true;\n \t\t} else {\n \t\t\thotRequestedFilesMap[chunkId] = true;\n \t\t\thotWaitingFiles++;\n \t\t\thotDownloadUpdateChunk(chunkId);\n \t\t}\n \t}\n\n \tfunction hotUpdateDownloaded() {\n \t\thotSetStatus(\"ready\");\n \t\tvar deferred = hotDeferred;\n \t\thotDeferred = null;\n \t\tif (!deferred) return;\n \t\tif (hotApplyOnUpdate) {\n \t\t\t// Wrap deferred object in Promise to mark it as a well-handled Promise to\n \t\t\t// avoid triggering uncaught exception warning in Chrome.\n \t\t\t// See https://bugs.chromium.org/p/chromium/issues/detail?id=465666\n \t\t\tPromise.resolve()\n \t\t\t\t.then(function() {\n \t\t\t\t\treturn hotApply(hotApplyOnUpdate);\n \t\t\t\t})\n \t\t\t\t.then(\n \t\t\t\t\tfunction(result) {\n \t\t\t\t\t\tdeferred.resolve(result);\n \t\t\t\t\t},\n \t\t\t\t\tfunction(err) {\n \t\t\t\t\t\tdeferred.reject(err);\n \t\t\t\t\t}\n \t\t\t\t);\n \t\t} else {\n \t\t\tvar outdatedModules = [];\n \t\t\tfor (var id in hotUpdate) {\n \t\t\t\tif (Object.prototype.hasOwnProperty.call(hotUpdate, id)) {\n \t\t\t\t\toutdatedModules.push(toModuleId(id));\n \t\t\t\t}\n \t\t\t}\n \t\t\tdeferred.resolve(outdatedModules);\n \t\t}\n \t}\n\n \tfunction hotApply(options) {\n \t\tif (hotStatus !== \"ready\")\n \t\t\tthrow new Error(\"apply() is only allowed in ready status\");\n \t\toptions = options || {};\n \t\treturn hotApplyInternal(options);\n \t}\n\n \tfunction hotApplyInternal(options) {\n \t\thotApplyInvalidatedModules();\n\n \t\tvar cb;\n \t\tvar i;\n \t\tvar j;\n \t\tvar module;\n \t\tvar moduleId;\n\n \t\tfunction getAffectedStuff(updateModuleId) {\n \t\t\tvar outdatedModules = [updateModuleId];\n \t\t\tvar outdatedDependencies = {};\n\n \t\t\tvar queue = outdatedModules.map(function(id) {\n \t\t\t\treturn {\n \t\t\t\t\tchain: [id],\n \t\t\t\t\tid: id\n \t\t\t\t};\n \t\t\t});\n \t\t\twhile (queue.length > 0) {\n \t\t\t\tvar queueItem = queue.pop();\n \t\t\t\tvar moduleId = queueItem.id;\n \t\t\t\tvar chain = queueItem.chain;\n \t\t\t\tmodule = installedModules[moduleId];\n \t\t\t\tif (\n \t\t\t\t\t!module ||\n \t\t\t\t\t(module.hot._selfAccepted && !module.hot._selfInvalidated)\n \t\t\t\t)\n \t\t\t\t\tcontinue;\n \t\t\t\tif (module.hot._selfDeclined) {\n \t\t\t\t\treturn {\n \t\t\t\t\t\ttype: \"self-declined\",\n \t\t\t\t\t\tchain: chain,\n \t\t\t\t\t\tmoduleId: moduleId\n \t\t\t\t\t};\n \t\t\t\t}\n \t\t\t\tif (module.hot._main) {\n \t\t\t\t\treturn {\n \t\t\t\t\t\ttype: \"unaccepted\",\n \t\t\t\t\t\tchain: chain,\n \t\t\t\t\t\tmoduleId: moduleId\n \t\t\t\t\t};\n \t\t\t\t}\n \t\t\t\tfor (var i = 0; i < module.parents.length; i++) {\n \t\t\t\t\tvar parentId = module.parents[i];\n \t\t\t\t\tvar parent = installedModules[parentId];\n \t\t\t\t\tif (!parent) continue;\n \t\t\t\t\tif (parent.hot._declinedDependencies[moduleId]) {\n \t\t\t\t\t\treturn {\n \t\t\t\t\t\t\ttype: \"declined\",\n \t\t\t\t\t\t\tchain: chain.concat([parentId]),\n \t\t\t\t\t\t\tmoduleId: moduleId,\n \t\t\t\t\t\t\tparentId: parentId\n \t\t\t\t\t\t};\n \t\t\t\t\t}\n \t\t\t\t\tif (outdatedModules.indexOf(parentId) !== -1) continue;\n \t\t\t\t\tif (parent.hot._acceptedDependencies[moduleId]) {\n \t\t\t\t\t\tif (!outdatedDependencies[parentId])\n \t\t\t\t\t\t\toutdatedDependencies[parentId] = [];\n \t\t\t\t\t\taddAllToSet(outdatedDependencies[parentId], [moduleId]);\n \t\t\t\t\t\tcontinue;\n \t\t\t\t\t}\n \t\t\t\t\tdelete outdatedDependencies[parentId];\n \t\t\t\t\toutdatedModules.push(parentId);\n \t\t\t\t\tqueue.push({\n \t\t\t\t\t\tchain: chain.concat([parentId]),\n \t\t\t\t\t\tid: parentId\n \t\t\t\t\t});\n \t\t\t\t}\n \t\t\t}\n\n \t\t\treturn {\n \t\t\t\ttype: \"accepted\",\n \t\t\t\tmoduleId: updateModuleId,\n \t\t\t\toutdatedModules: outdatedModules,\n \t\t\t\toutdatedDependencies: outdatedDependencies\n \t\t\t};\n \t\t}\n\n \t\tfunction addAllToSet(a, b) {\n \t\t\tfor (var i = 0; i < b.length; i++) {\n \t\t\t\tvar item = b[i];\n \t\t\t\tif (a.indexOf(item) === -1) a.push(item);\n \t\t\t}\n \t\t}\n\n \t\t// at begin all updates modules are outdated\n \t\t// the \"outdated\" status can propagate to parents if they don't accept the children\n \t\tvar outdatedDependencies = {};\n \t\tvar outdatedModules = [];\n \t\tvar appliedUpdate = {};\n\n \t\tvar warnUnexpectedRequire = function warnUnexpectedRequire() {\n \t\t\tconsole.warn(\n \t\t\t\t\"[HMR] unexpected require(\" + result.moduleId + \") to disposed module\"\n \t\t\t);\n \t\t};\n\n \t\tfor (var id in hotUpdate) {\n \t\t\tif (Object.prototype.hasOwnProperty.call(hotUpdate, id)) {\n \t\t\t\tmoduleId = toModuleId(id);\n \t\t\t\t/** @type {TODO} */\n \t\t\t\tvar result;\n \t\t\t\tif (hotUpdate[id]) {\n \t\t\t\t\tresult = getAffectedStuff(moduleId);\n \t\t\t\t} else {\n \t\t\t\t\tresult = {\n \t\t\t\t\t\ttype: \"disposed\",\n \t\t\t\t\t\tmoduleId: id\n \t\t\t\t\t};\n \t\t\t\t}\n \t\t\t\t/** @type {Error|false} */\n \t\t\t\tvar abortError = false;\n \t\t\t\tvar doApply = false;\n \t\t\t\tvar doDispose = false;\n \t\t\t\tvar chainInfo = \"\";\n \t\t\t\tif (result.chain) {\n \t\t\t\t\tchainInfo = \"\\nUpdate propagation: \" + result.chain.join(\" -> \");\n \t\t\t\t}\n \t\t\t\tswitch (result.type) {\n \t\t\t\t\tcase \"self-declined\":\n \t\t\t\t\t\tif (options.onDeclined) options.onDeclined(result);\n \t\t\t\t\t\tif (!options.ignoreDeclined)\n \t\t\t\t\t\t\tabortError = new Error(\n \t\t\t\t\t\t\t\t\"Aborted because of self decline: \" +\n \t\t\t\t\t\t\t\t\tresult.moduleId +\n \t\t\t\t\t\t\t\t\tchainInfo\n \t\t\t\t\t\t\t);\n \t\t\t\t\t\tbreak;\n \t\t\t\t\tcase \"declined\":\n \t\t\t\t\t\tif (options.onDeclined) options.onDeclined(result);\n \t\t\t\t\t\tif (!options.ignoreDeclined)\n \t\t\t\t\t\t\tabortError = new Error(\n \t\t\t\t\t\t\t\t\"Aborted because of declined dependency: \" +\n \t\t\t\t\t\t\t\t\tresult.moduleId +\n \t\t\t\t\t\t\t\t\t\" in \" +\n \t\t\t\t\t\t\t\t\tresult.parentId +\n \t\t\t\t\t\t\t\t\tchainInfo\n \t\t\t\t\t\t\t);\n \t\t\t\t\t\tbreak;\n \t\t\t\t\tcase \"unaccepted\":\n \t\t\t\t\t\tif (options.onUnaccepted) options.onUnaccepted(result);\n \t\t\t\t\t\tif (!options.ignoreUnaccepted)\n \t\t\t\t\t\t\tabortError = new Error(\n \t\t\t\t\t\t\t\t\"Aborted because \" + moduleId + \" is not accepted\" + chainInfo\n \t\t\t\t\t\t\t);\n \t\t\t\t\t\tbreak;\n \t\t\t\t\tcase \"accepted\":\n \t\t\t\t\t\tif (options.onAccepted) options.onAccepted(result);\n \t\t\t\t\t\tdoApply = true;\n \t\t\t\t\t\tbreak;\n \t\t\t\t\tcase \"disposed\":\n \t\t\t\t\t\tif (options.onDisposed) options.onDisposed(result);\n \t\t\t\t\t\tdoDispose = true;\n \t\t\t\t\t\tbreak;\n \t\t\t\t\tdefault:\n \t\t\t\t\t\tthrow new Error(\"Unexception type \" + result.type);\n \t\t\t\t}\n \t\t\t\tif (abortError) {\n \t\t\t\t\thotSetStatus(\"abort\");\n \t\t\t\t\treturn Promise.reject(abortError);\n \t\t\t\t}\n \t\t\t\tif (doApply) {\n \t\t\t\t\tappliedUpdate[moduleId] = hotUpdate[moduleId];\n \t\t\t\t\taddAllToSet(outdatedModules, result.outdatedModules);\n \t\t\t\t\tfor (moduleId in result.outdatedDependencies) {\n \t\t\t\t\t\tif (\n \t\t\t\t\t\t\tObject.prototype.hasOwnProperty.call(\n \t\t\t\t\t\t\t\tresult.outdatedDependencies,\n \t\t\t\t\t\t\t\tmoduleId\n \t\t\t\t\t\t\t)\n \t\t\t\t\t\t) {\n \t\t\t\t\t\t\tif (!outdatedDependencies[moduleId])\n \t\t\t\t\t\t\t\toutdatedDependencies[moduleId] = [];\n \t\t\t\t\t\t\taddAllToSet(\n \t\t\t\t\t\t\t\toutdatedDependencies[moduleId],\n \t\t\t\t\t\t\t\tresult.outdatedDependencies[moduleId]\n \t\t\t\t\t\t\t);\n \t\t\t\t\t\t}\n \t\t\t\t\t}\n \t\t\t\t}\n \t\t\t\tif (doDispose) {\n \t\t\t\t\taddAllToSet(outdatedModules, [result.moduleId]);\n \t\t\t\t\tappliedUpdate[moduleId] = warnUnexpectedRequire;\n \t\t\t\t}\n \t\t\t}\n \t\t}\n\n \t\t// Store self accepted outdated modules to require them later by the module system\n \t\tvar outdatedSelfAcceptedModules = [];\n \t\tfor (i = 0; i < outdatedModules.length; i++) {\n \t\t\tmoduleId = outdatedModules[i];\n \t\t\tif (\n \t\t\t\tinstalledModules[moduleId] &&\n \t\t\t\tinstalledModules[moduleId].hot._selfAccepted &&\n \t\t\t\t// removed self-accepted modules should not be required\n \t\t\t\tappliedUpdate[moduleId] !== warnUnexpectedRequire &&\n \t\t\t\t// when called invalidate self-accepting is not possible\n \t\t\t\t!installedModules[moduleId].hot._selfInvalidated\n \t\t\t) {\n \t\t\t\toutdatedSelfAcceptedModules.push({\n \t\t\t\t\tmodule: moduleId,\n \t\t\t\t\tparents: installedModules[moduleId].parents.slice(),\n \t\t\t\t\terrorHandler: installedModules[moduleId].hot._selfAccepted\n \t\t\t\t});\n \t\t\t}\n \t\t}\n\n \t\t// Now in \"dispose\" phase\n \t\thotSetStatus(\"dispose\");\n \t\tObject.keys(hotAvailableFilesMap).forEach(function(chunkId) {\n \t\t\tif (hotAvailableFilesMap[chunkId] === false) {\n \t\t\t\thotDisposeChunk(chunkId);\n \t\t\t}\n \t\t});\n\n \t\tvar idx;\n \t\tvar queue = outdatedModules.slice();\n \t\twhile (queue.length > 0) {\n \t\t\tmoduleId = queue.pop();\n \t\t\tmodule = installedModules[moduleId];\n \t\t\tif (!module) continue;\n\n \t\t\tvar data = {};\n\n \t\t\t// Call dispose handlers\n \t\t\tvar disposeHandlers = module.hot._disposeHandlers;\n \t\t\tfor (j = 0; j < disposeHandlers.length; j++) {\n \t\t\t\tcb = disposeHandlers[j];\n \t\t\t\tcb(data);\n \t\t\t}\n \t\t\thotCurrentModuleData[moduleId] = data;\n\n \t\t\t// disable module (this disables requires from this module)\n \t\t\tmodule.hot.active = false;\n\n \t\t\t// remove module from cache\n \t\t\tdelete installedModules[moduleId];\n\n \t\t\t// when disposing there is no need to call dispose handler\n \t\t\tdelete outdatedDependencies[moduleId];\n\n \t\t\t// remove \"parents\" references from all children\n \t\t\tfor (j = 0; j < module.children.length; j++) {\n \t\t\t\tvar child = installedModules[module.children[j]];\n \t\t\t\tif (!child) continue;\n \t\t\t\tidx = child.parents.indexOf(moduleId);\n \t\t\t\tif (idx >= 0) {\n \t\t\t\t\tchild.parents.splice(idx, 1);\n \t\t\t\t}\n \t\t\t}\n \t\t}\n\n \t\t// remove outdated dependency from module children\n \t\tvar dependency;\n \t\tvar moduleOutdatedDependencies;\n \t\tfor (moduleId in outdatedDependencies) {\n \t\t\tif (\n \t\t\t\tObject.prototype.hasOwnProperty.call(outdatedDependencies, moduleId)\n \t\t\t) {\n \t\t\t\tmodule = installedModules[moduleId];\n \t\t\t\tif (module) {\n \t\t\t\t\tmoduleOutdatedDependencies = outdatedDependencies[moduleId];\n \t\t\t\t\tfor (j = 0; j < moduleOutdatedDependencies.length; j++) {\n \t\t\t\t\t\tdependency = moduleOutdatedDependencies[j];\n \t\t\t\t\t\tidx = module.children.indexOf(dependency);\n \t\t\t\t\t\tif (idx >= 0) module.children.splice(idx, 1);\n \t\t\t\t\t}\n \t\t\t\t}\n \t\t\t}\n \t\t}\n\n \t\t// Now in \"apply\" phase\n \t\thotSetStatus(\"apply\");\n\n \t\tif (hotUpdateNewHash !== undefined) {\n \t\t\thotCurrentHash = hotUpdateNewHash;\n \t\t\thotUpdateNewHash = undefined;\n \t\t}\n \t\thotUpdate = undefined;\n\n \t\t// insert new code\n \t\tfor (moduleId in appliedUpdate) {\n \t\t\tif (Object.prototype.hasOwnProperty.call(appliedUpdate, moduleId)) {\n \t\t\t\tmodules[moduleId] = appliedUpdate[moduleId];\n \t\t\t}\n \t\t}\n\n \t\t// call accept handlers\n \t\tvar error = null;\n \t\tfor (moduleId in outdatedDependencies) {\n \t\t\tif (\n \t\t\t\tObject.prototype.hasOwnProperty.call(outdatedDependencies, moduleId)\n \t\t\t) {\n \t\t\t\tmodule = installedModules[moduleId];\n \t\t\t\tif (module) {\n \t\t\t\t\tmoduleOutdatedDependencies = outdatedDependencies[moduleId];\n \t\t\t\t\tvar callbacks = [];\n \t\t\t\t\tfor (i = 0; i < moduleOutdatedDependencies.length; i++) {\n \t\t\t\t\t\tdependency = moduleOutdatedDependencies[i];\n \t\t\t\t\t\tcb = module.hot._acceptedDependencies[dependency];\n \t\t\t\t\t\tif (cb) {\n \t\t\t\t\t\t\tif (callbacks.indexOf(cb) !== -1) continue;\n \t\t\t\t\t\t\tcallbacks.push(cb);\n \t\t\t\t\t\t}\n \t\t\t\t\t}\n \t\t\t\t\tfor (i = 0; i < callbacks.length; i++) {\n \t\t\t\t\t\tcb = callbacks[i];\n \t\t\t\t\t\ttry {\n \t\t\t\t\t\t\tcb(moduleOutdatedDependencies);\n \t\t\t\t\t\t} catch (err) {\n \t\t\t\t\t\t\tif (options.onErrored) {\n \t\t\t\t\t\t\t\toptions.onErrored({\n \t\t\t\t\t\t\t\t\ttype: \"accept-errored\",\n \t\t\t\t\t\t\t\t\tmoduleId: moduleId,\n \t\t\t\t\t\t\t\t\tdependencyId: moduleOutdatedDependencies[i],\n \t\t\t\t\t\t\t\t\terror: err\n \t\t\t\t\t\t\t\t});\n \t\t\t\t\t\t\t}\n \t\t\t\t\t\t\tif (!options.ignoreErrored) {\n \t\t\t\t\t\t\t\tif (!error) error = err;\n \t\t\t\t\t\t\t}\n \t\t\t\t\t\t}\n \t\t\t\t\t}\n \t\t\t\t}\n \t\t\t}\n \t\t}\n\n \t\t// Load self accepted modules\n \t\tfor (i = 0; i < outdatedSelfAcceptedModules.length; i++) {\n \t\t\tvar item = outdatedSelfAcceptedModules[i];\n \t\t\tmoduleId = item.module;\n \t\t\thotCurrentParents = item.parents;\n \t\t\thotCurrentChildModule = moduleId;\n \t\t\ttry {\n \t\t\t\t__webpack_require__(moduleId);\n \t\t\t} catch (err) {\n \t\t\t\tif (typeof item.errorHandler === \"function\") {\n \t\t\t\t\ttry {\n \t\t\t\t\t\titem.errorHandler(err);\n \t\t\t\t\t} catch (err2) {\n \t\t\t\t\t\tif (options.onErrored) {\n \t\t\t\t\t\t\toptions.onErrored({\n \t\t\t\t\t\t\t\ttype: \"self-accept-error-handler-errored\",\n \t\t\t\t\t\t\t\tmoduleId: moduleId,\n \t\t\t\t\t\t\t\terror: err2,\n \t\t\t\t\t\t\t\toriginalError: err\n \t\t\t\t\t\t\t});\n \t\t\t\t\t\t}\n \t\t\t\t\t\tif (!options.ignoreErrored) {\n \t\t\t\t\t\t\tif (!error) error = err2;\n \t\t\t\t\t\t}\n \t\t\t\t\t\tif (!error) error = err;\n \t\t\t\t\t}\n \t\t\t\t} else {\n \t\t\t\t\tif (options.onErrored) {\n \t\t\t\t\t\toptions.onErrored({\n \t\t\t\t\t\t\ttype: \"self-accept-errored\",\n \t\t\t\t\t\t\tmoduleId: moduleId,\n \t\t\t\t\t\t\terror: err\n \t\t\t\t\t\t});\n \t\t\t\t\t}\n \t\t\t\t\tif (!options.ignoreErrored) {\n \t\t\t\t\t\tif (!error) error = err;\n \t\t\t\t\t}\n \t\t\t\t}\n \t\t\t}\n \t\t}\n\n \t\t// handle errors in accept handlers and self accepted module load\n \t\tif (error) {\n \t\t\thotSetStatus(\"fail\");\n \t\t\treturn Promise.reject(error);\n \t\t}\n\n \t\tif (hotQueuedInvalidatedModules) {\n \t\t\treturn hotApplyInternal(options).then(function(list) {\n \t\t\t\toutdatedModules.forEach(function(moduleId) {\n \t\t\t\t\tif (list.indexOf(moduleId) < 0) list.push(moduleId);\n \t\t\t\t});\n \t\t\t\treturn list;\n \t\t\t});\n \t\t}\n\n \t\thotSetStatus(\"idle\");\n \t\treturn new Promise(function(resolve) {\n \t\t\tresolve(outdatedModules);\n \t\t});\n \t}\n\n \tfunction hotApplyInvalidatedModules() {\n \t\tif (hotQueuedInvalidatedModules) {\n \t\t\tif (!hotUpdate) hotUpdate = {};\n \t\t\thotQueuedInvalidatedModules.forEach(hotApplyInvalidatedModule);\n \t\t\thotQueuedInvalidatedModules = undefined;\n \t\t\treturn true;\n \t\t}\n \t}\n\n \tfunction hotApplyInvalidatedModule(moduleId) {\n \t\tif (!Object.prototype.hasOwnProperty.call(hotUpdate, moduleId))\n \t\t\thotUpdate[moduleId] = modules[moduleId];\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t0: 0\n \t};\n\n\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"\" + chunkId + \".\" + hotCurrentHash.substr(0, 8) + \".js\"\n \t}\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 \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {},\n \t\t\thot: hotCreateModule(moduleId),\n \t\t\tparents: (hotCurrentParentsTemp = hotCurrentParents, hotCurrentParents = [], hotCurrentParentsTemp),\n \t\t\tchildren: []\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, hotCreateRequire(moduleId));\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\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// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \t// __webpack_hash__\n \t__webpack_require__.h = function() { return hotCurrentHash; };\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// Load entry module and return exports\n \treturn hotCreateRequire(449)(__webpack_require__.s = 449);\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n  var ReactIs = require('react-is');\n\n  // By explicitly using `prop-types` you are opting into new development behavior.\n  // http://fb.me/prop-types-in-prod\n  var throwOnDirectAccess = true;\n  module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n  // By explicitly using `prop-types` you are opting into new production behavior.\n  // http://fb.me/prop-types-in-prod\n  module.exports = require('./factoryWithThrowingShims')();\n}\n","export default function _setPrototypeOf(o, p) {\n  _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n    o.__proto__ = p;\n    return o;\n  };\n\n  return _setPrototypeOf(o, p);\n}","/*\n\nBased off glamor's StyleSheet, thanks Sunil ❤️\n\nhigh performance StyleSheet for css-in-js systems\n\n- uses multiple style tags behind the scenes for millions of rules\n- uses `insertRule` for appending in production for *much* faster performance\n\n// usage\n\nimport { StyleSheet } from '@emotion/sheet'\n\nlet styleSheet = new StyleSheet({ key: '', container: document.head })\n\nstyleSheet.insert('#box { border: 1px solid red; }')\n- appends a css rule into the stylesheet\n\nstyleSheet.flush()\n- empties the stylesheet of all its contents\n\n*/\n// $FlowFixMe\nfunction sheetForTag(tag) {\n  if (tag.sheet) {\n    // $FlowFixMe\n    return tag.sheet;\n  } // this weirdness brought to you by firefox\n\n  /* istanbul ignore next */\n\n\n  for (var i = 0; i < document.styleSheets.length; i++) {\n    if (document.styleSheets[i].ownerNode === tag) {\n      // $FlowFixMe\n      return document.styleSheets[i];\n    }\n  }\n}\n\nfunction createStyleElement(options) {\n  var tag = document.createElement('style');\n  tag.setAttribute('data-emotion', options.key);\n\n  if (options.nonce !== undefined) {\n    tag.setAttribute('nonce', options.nonce);\n  }\n\n  tag.appendChild(document.createTextNode(''));\n  return tag;\n}\n\nvar StyleSheet =\n/*#__PURE__*/\nfunction () {\n  function StyleSheet(options) {\n    this.isSpeedy = options.speedy === undefined ? process.env.NODE_ENV === 'production' : options.speedy;\n    this.tags = [];\n    this.ctr = 0;\n    this.nonce = options.nonce; // key is the value of the data-emotion attribute, it's used to identify different sheets\n\n    this.key = options.key;\n    this.container = options.container;\n    this.before = null;\n  }\n\n  var _proto = StyleSheet.prototype;\n\n  _proto.insert = function insert(rule) {\n    // the max length is how many rules we have per style tag, it's 65000 in speedy mode\n    // it's 1 in dev because we insert source maps that map a single rule to a location\n    // and you can only have one source map per style tag\n    if (this.ctr % (this.isSpeedy ? 65000 : 1) === 0) {\n      var _tag = createStyleElement(this);\n\n      var before;\n\n      if (this.tags.length === 0) {\n        before = this.before;\n      } else {\n        before = this.tags[this.tags.length - 1].nextSibling;\n      }\n\n      this.container.insertBefore(_tag, before);\n      this.tags.push(_tag);\n    }\n\n    var tag = this.tags[this.tags.length - 1];\n\n    if (this.isSpeedy) {\n      var sheet = sheetForTag(tag);\n\n      try {\n        // this is a really hot path\n        // we check the second character first because having \"i\"\n        // as the second character will happen less often than\n        // having \"@\" as the first character\n        var isImportRule = rule.charCodeAt(1) === 105 && rule.charCodeAt(0) === 64; // this is the ultrafast version, works across browsers\n        // the big drawback is that the css won't be editable in devtools\n\n        sheet.insertRule(rule, // we need to insert @import rules before anything else\n        // otherwise there will be an error\n        // technically this means that the @import rules will\n        // _usually_(not always since there could be multiple style tags)\n        // be the first ones in prod and generally later in dev\n        // this shouldn't really matter in the real world though\n        // @import is generally only used for font faces from google fonts and etc.\n        // so while this could be technically correct then it would be slower and larger\n        // for a tiny bit of correctness that won't matter in the real world\n        isImportRule ? 0 : sheet.cssRules.length);\n      } catch (e) {\n        if (process.env.NODE_ENV !== 'production') {\n          console.warn(\"There was a problem inserting the following rule: \\\"\" + rule + \"\\\"\", e);\n        }\n      }\n    } else {\n      tag.appendChild(document.createTextNode(rule));\n    }\n\n    this.ctr++;\n  };\n\n  _proto.flush = function flush() {\n    // $FlowFixMe\n    this.tags.forEach(function (tag) {\n      return tag.parentNode.removeChild(tag);\n    });\n    this.tags = [];\n    this.ctr = 0;\n  };\n\n  return StyleSheet;\n}();\n\nexport { StyleSheet };\n","function stylis_min (W) {\n  function M(d, c, e, h, a) {\n    for (var m = 0, b = 0, v = 0, n = 0, q, g, x = 0, K = 0, k, u = k = q = 0, l = 0, r = 0, I = 0, t = 0, B = e.length, J = B - 1, y, f = '', p = '', F = '', G = '', C; l < B;) {\n      g = e.charCodeAt(l);\n      l === J && 0 !== b + n + v + m && (0 !== b && (g = 47 === b ? 10 : 47), n = v = m = 0, B++, J++);\n\n      if (0 === b + n + v + m) {\n        if (l === J && (0 < r && (f = f.replace(N, '')), 0 < f.trim().length)) {\n          switch (g) {\n            case 32:\n            case 9:\n            case 59:\n            case 13:\n            case 10:\n              break;\n\n            default:\n              f += e.charAt(l);\n          }\n\n          g = 59;\n        }\n\n        switch (g) {\n          case 123:\n            f = f.trim();\n            q = f.charCodeAt(0);\n            k = 1;\n\n            for (t = ++l; l < B;) {\n              switch (g = e.charCodeAt(l)) {\n                case 123:\n                  k++;\n                  break;\n\n                case 125:\n                  k--;\n                  break;\n\n                case 47:\n                  switch (g = e.charCodeAt(l + 1)) {\n                    case 42:\n                    case 47:\n                      a: {\n                        for (u = l + 1; u < J; ++u) {\n                          switch (e.charCodeAt(u)) {\n                            case 47:\n                              if (42 === g && 42 === e.charCodeAt(u - 1) && l + 2 !== u) {\n                                l = u + 1;\n                                break a;\n                              }\n\n                              break;\n\n                            case 10:\n                              if (47 === g) {\n                                l = u + 1;\n                                break a;\n                              }\n\n                          }\n                        }\n\n                        l = u;\n                      }\n\n                  }\n\n                  break;\n\n                case 91:\n                  g++;\n\n                case 40:\n                  g++;\n\n                case 34:\n                case 39:\n                  for (; l++ < J && e.charCodeAt(l) !== g;) {\n                  }\n\n              }\n\n              if (0 === k) break;\n              l++;\n            }\n\n            k = e.substring(t, l);\n            0 === q && (q = (f = f.replace(ca, '').trim()).charCodeAt(0));\n\n            switch (q) {\n              case 64:\n                0 < r && (f = f.replace(N, ''));\n                g = f.charCodeAt(1);\n\n                switch (g) {\n                  case 100:\n                  case 109:\n                  case 115:\n                  case 45:\n                    r = c;\n                    break;\n\n                  default:\n                    r = O;\n                }\n\n                k = M(c, r, k, g, a + 1);\n                t = k.length;\n                0 < A && (r = X(O, f, I), C = H(3, k, r, c, D, z, t, g, a, h), f = r.join(''), void 0 !== C && 0 === (t = (k = C.trim()).length) && (g = 0, k = ''));\n                if (0 < t) switch (g) {\n                  case 115:\n                    f = f.replace(da, ea);\n\n                  case 100:\n                  case 109:\n                  case 45:\n                    k = f + '{' + k + '}';\n                    break;\n\n                  case 107:\n                    f = f.replace(fa, '$1 $2');\n                    k = f + '{' + k + '}';\n                    k = 1 === w || 2 === w && L('@' + k, 3) ? '@-webkit-' + k + '@' + k : '@' + k;\n                    break;\n\n                  default:\n                    k = f + k, 112 === h && (k = (p += k, ''));\n                } else k = '';\n                break;\n\n              default:\n                k = M(c, X(c, f, I), k, h, a + 1);\n            }\n\n            F += k;\n            k = I = r = u = q = 0;\n            f = '';\n            g = e.charCodeAt(++l);\n            break;\n\n          case 125:\n          case 59:\n            f = (0 < r ? f.replace(N, '') : f).trim();\n            if (1 < (t = f.length)) switch (0 === u && (q = f.charCodeAt(0), 45 === q || 96 < q && 123 > q) && (t = (f = f.replace(' ', ':')).length), 0 < A && void 0 !== (C = H(1, f, c, d, D, z, p.length, h, a, h)) && 0 === (t = (f = C.trim()).length) && (f = '\\x00\\x00'), q = f.charCodeAt(0), g = f.charCodeAt(1), q) {\n              case 0:\n                break;\n\n              case 64:\n                if (105 === g || 99 === g) {\n                  G += f + e.charAt(l);\n                  break;\n                }\n\n              default:\n                58 !== f.charCodeAt(t - 1) && (p += P(f, q, g, f.charCodeAt(2)));\n            }\n            I = r = u = q = 0;\n            f = '';\n            g = e.charCodeAt(++l);\n        }\n      }\n\n      switch (g) {\n        case 13:\n        case 10:\n          47 === b ? b = 0 : 0 === 1 + q && 107 !== h && 0 < f.length && (r = 1, f += '\\x00');\n          0 < A * Y && H(0, f, c, d, D, z, p.length, h, a, h);\n          z = 1;\n          D++;\n          break;\n\n        case 59:\n        case 125:\n          if (0 === b + n + v + m) {\n            z++;\n            break;\n          }\n\n        default:\n          z++;\n          y = e.charAt(l);\n\n          switch (g) {\n            case 9:\n            case 32:\n              if (0 === n + m + b) switch (x) {\n                case 44:\n                case 58:\n                case 9:\n                case 32:\n                  y = '';\n                  break;\n\n                default:\n                  32 !== g && (y = ' ');\n              }\n              break;\n\n            case 0:\n              y = '\\\\0';\n              break;\n\n            case 12:\n              y = '\\\\f';\n              break;\n\n            case 11:\n              y = '\\\\v';\n              break;\n\n            case 38:\n              0 === n + b + m && (r = I = 1, y = '\\f' + y);\n              break;\n\n            case 108:\n              if (0 === n + b + m + E && 0 < u) switch (l - u) {\n                case 2:\n                  112 === x && 58 === e.charCodeAt(l - 3) && (E = x);\n\n                case 8:\n                  111 === K && (E = K);\n              }\n              break;\n\n            case 58:\n              0 === n + b + m && (u = l);\n              break;\n\n            case 44:\n              0 === b + v + n + m && (r = 1, y += '\\r');\n              break;\n\n            case 34:\n            case 39:\n              0 === b && (n = n === g ? 0 : 0 === n ? g : n);\n              break;\n\n            case 91:\n              0 === n + b + v && m++;\n              break;\n\n            case 93:\n              0 === n + b + v && m--;\n              break;\n\n            case 41:\n              0 === n + b + m && v--;\n              break;\n\n            case 40:\n              if (0 === n + b + m) {\n                if (0 === q) switch (2 * x + 3 * K) {\n                  case 533:\n                    break;\n\n                  default:\n                    q = 1;\n                }\n                v++;\n              }\n\n              break;\n\n            case 64:\n              0 === b + v + n + m + u + k && (k = 1);\n              break;\n\n            case 42:\n            case 47:\n              if (!(0 < n + m + v)) switch (b) {\n                case 0:\n                  switch (2 * g + 3 * e.charCodeAt(l + 1)) {\n                    case 235:\n                      b = 47;\n                      break;\n\n                    case 220:\n                      t = l, b = 42;\n                  }\n\n                  break;\n\n                case 42:\n                  47 === g && 42 === x && t + 2 !== l && (33 === e.charCodeAt(t + 2) && (p += e.substring(t, l + 1)), y = '', b = 0);\n              }\n          }\n\n          0 === b && (f += y);\n      }\n\n      K = x;\n      x = g;\n      l++;\n    }\n\n    t = p.length;\n\n    if (0 < t) {\n      r = c;\n      if (0 < A && (C = H(2, p, r, d, D, z, t, h, a, h), void 0 !== C && 0 === (p = C).length)) return G + p + F;\n      p = r.join(',') + '{' + p + '}';\n\n      if (0 !== w * E) {\n        2 !== w || L(p, 2) || (E = 0);\n\n        switch (E) {\n          case 111:\n            p = p.replace(ha, ':-moz-$1') + p;\n            break;\n\n          case 112:\n            p = p.replace(Q, '::-webkit-input-$1') + p.replace(Q, '::-moz-$1') + p.replace(Q, ':-ms-input-$1') + p;\n        }\n\n        E = 0;\n      }\n    }\n\n    return G + p + F;\n  }\n\n  function X(d, c, e) {\n    var h = c.trim().split(ia);\n    c = h;\n    var a = h.length,\n        m = d.length;\n\n    switch (m) {\n      case 0:\n      case 1:\n        var b = 0;\n\n        for (d = 0 === m ? '' : d[0] + ' '; b < a; ++b) {\n          c[b] = Z(d, c[b], e).trim();\n        }\n\n        break;\n\n      default:\n        var v = b = 0;\n\n        for (c = []; b < a; ++b) {\n          for (var n = 0; n < m; ++n) {\n            c[v++] = Z(d[n] + ' ', h[b], e).trim();\n          }\n        }\n\n    }\n\n    return c;\n  }\n\n  function Z(d, c, e) {\n    var h = c.charCodeAt(0);\n    33 > h && (h = (c = c.trim()).charCodeAt(0));\n\n    switch (h) {\n      case 38:\n        return c.replace(F, '$1' + d.trim());\n\n      case 58:\n        return d.trim() + c.replace(F, '$1' + d.trim());\n\n      default:\n        if (0 < 1 * e && 0 < c.indexOf('\\f')) return c.replace(F, (58 === d.charCodeAt(0) ? '' : '$1') + d.trim());\n    }\n\n    return d + c;\n  }\n\n  function P(d, c, e, h) {\n    var a = d + ';',\n        m = 2 * c + 3 * e + 4 * h;\n\n    if (944 === m) {\n      d = a.indexOf(':', 9) + 1;\n      var b = a.substring(d, a.length - 1).trim();\n      b = a.substring(0, d).trim() + b + ';';\n      return 1 === w || 2 === w && L(b, 1) ? '-webkit-' + b + b : b;\n    }\n\n    if (0 === w || 2 === w && !L(a, 1)) return a;\n\n    switch (m) {\n      case 1015:\n        return 97 === a.charCodeAt(10) ? '-webkit-' + a + a : a;\n\n      case 951:\n        return 116 === a.charCodeAt(3) ? '-webkit-' + a + a : a;\n\n      case 963:\n        return 110 === a.charCodeAt(5) ? '-webkit-' + a + a : a;\n\n      case 1009:\n        if (100 !== a.charCodeAt(4)) break;\n\n      case 969:\n      case 942:\n        return '-webkit-' + a + a;\n\n      case 978:\n        return '-webkit-' + a + '-moz-' + a + a;\n\n      case 1019:\n      case 983:\n        return '-webkit-' + a + '-moz-' + a + '-ms-' + a + a;\n\n      case 883:\n        if (45 === a.charCodeAt(8)) return '-webkit-' + a + a;\n        if (0 < a.indexOf('image-set(', 11)) return a.replace(ja, '$1-webkit-$2') + a;\n        break;\n\n      case 932:\n        if (45 === a.charCodeAt(4)) switch (a.charCodeAt(5)) {\n          case 103:\n            return '-webkit-box-' + a.replace('-grow', '') + '-webkit-' + a + '-ms-' + a.replace('grow', 'positive') + a;\n\n          case 115:\n            return '-webkit-' + a + '-ms-' + a.replace('shrink', 'negative') + a;\n\n          case 98:\n            return '-webkit-' + a + '-ms-' + a.replace('basis', 'preferred-size') + a;\n        }\n        return '-webkit-' + a + '-ms-' + a + a;\n\n      case 964:\n        return '-webkit-' + a + '-ms-flex-' + a + a;\n\n      case 1023:\n        if (99 !== a.charCodeAt(8)) break;\n        b = a.substring(a.indexOf(':', 15)).replace('flex-', '').replace('space-between', 'justify');\n        return '-webkit-box-pack' + b + '-webkit-' + a + '-ms-flex-pack' + b + a;\n\n      case 1005:\n        return ka.test(a) ? a.replace(aa, ':-webkit-') + a.replace(aa, ':-moz-') + a : a;\n\n      case 1e3:\n        b = a.substring(13).trim();\n        c = b.indexOf('-') + 1;\n\n        switch (b.charCodeAt(0) + b.charCodeAt(c)) {\n          case 226:\n            b = a.replace(G, 'tb');\n            break;\n\n          case 232:\n            b = a.replace(G, 'tb-rl');\n            break;\n\n          case 220:\n            b = a.replace(G, 'lr');\n            break;\n\n          default:\n            return a;\n        }\n\n        return '-webkit-' + a + '-ms-' + b + a;\n\n      case 1017:\n        if (-1 === a.indexOf('sticky', 9)) break;\n\n      case 975:\n        c = (a = d).length - 10;\n        b = (33 === a.charCodeAt(c) ? a.substring(0, c) : a).substring(d.indexOf(':', 7) + 1).trim();\n\n        switch (m = b.charCodeAt(0) + (b.charCodeAt(7) | 0)) {\n          case 203:\n            if (111 > b.charCodeAt(8)) break;\n\n          case 115:\n            a = a.replace(b, '-webkit-' + b) + ';' + a;\n            break;\n\n          case 207:\n          case 102:\n            a = a.replace(b, '-webkit-' + (102 < m ? 'inline-' : '') + 'box') + ';' + a.replace(b, '-webkit-' + b) + ';' + a.replace(b, '-ms-' + b + 'box') + ';' + a;\n        }\n\n        return a + ';';\n\n      case 938:\n        if (45 === a.charCodeAt(5)) switch (a.charCodeAt(6)) {\n          case 105:\n            return b = a.replace('-items', ''), '-webkit-' + a + '-webkit-box-' + b + '-ms-flex-' + b + a;\n\n          case 115:\n            return '-webkit-' + a + '-ms-flex-item-' + a.replace(ba, '') + a;\n\n          default:\n            return '-webkit-' + a + '-ms-flex-line-pack' + a.replace('align-content', '').replace(ba, '') + a;\n        }\n        break;\n\n      case 973:\n      case 989:\n        if (45 !== a.charCodeAt(3) || 122 === a.charCodeAt(4)) break;\n\n      case 931:\n      case 953:\n        if (!0 === la.test(d)) return 115 === (b = d.substring(d.indexOf(':') + 1)).charCodeAt(0) ? P(d.replace('stretch', 'fill-available'), c, e, h).replace(':fill-available', ':stretch') : a.replace(b, '-webkit-' + b) + a.replace(b, '-moz-' + b.replace('fill-', '')) + a;\n        break;\n\n      case 962:\n        if (a = '-webkit-' + a + (102 === a.charCodeAt(5) ? '-ms-' + a : '') + a, 211 === e + h && 105 === a.charCodeAt(13) && 0 < a.indexOf('transform', 10)) return a.substring(0, a.indexOf(';', 27) + 1).replace(ma, '$1-webkit-$2') + a;\n    }\n\n    return a;\n  }\n\n  function L(d, c) {\n    var e = d.indexOf(1 === c ? ':' : '{'),\n        h = d.substring(0, 3 !== c ? e : 10);\n    e = d.substring(e + 1, d.length - 1);\n    return R(2 !== c ? h : h.replace(na, '$1'), e, c);\n  }\n\n  function ea(d, c) {\n    var e = P(c, c.charCodeAt(0), c.charCodeAt(1), c.charCodeAt(2));\n    return e !== c + ';' ? e.replace(oa, ' or ($1)').substring(4) : '(' + c + ')';\n  }\n\n  function H(d, c, e, h, a, m, b, v, n, q) {\n    for (var g = 0, x = c, w; g < A; ++g) {\n      switch (w = S[g].call(B, d, x, e, h, a, m, b, v, n, q)) {\n        case void 0:\n        case !1:\n        case !0:\n        case null:\n          break;\n\n        default:\n          x = w;\n      }\n    }\n\n    if (x !== c) return x;\n  }\n\n  function T(d) {\n    switch (d) {\n      case void 0:\n      case null:\n        A = S.length = 0;\n        break;\n\n      default:\n        if ('function' === typeof d) S[A++] = d;else if ('object' === typeof d) for (var c = 0, e = d.length; c < e; ++c) {\n          T(d[c]);\n        } else Y = !!d | 0;\n    }\n\n    return T;\n  }\n\n  function U(d) {\n    d = d.prefix;\n    void 0 !== d && (R = null, d ? 'function' !== typeof d ? w = 1 : (w = 2, R = d) : w = 0);\n    return U;\n  }\n\n  function B(d, c) {\n    var e = d;\n    33 > e.charCodeAt(0) && (e = e.trim());\n    V = e;\n    e = [V];\n\n    if (0 < A) {\n      var h = H(-1, c, e, e, D, z, 0, 0, 0, 0);\n      void 0 !== h && 'string' === typeof h && (c = h);\n    }\n\n    var a = M(O, e, c, 0, 0);\n    0 < A && (h = H(-2, a, e, e, D, z, a.length, 0, 0, 0), void 0 !== h && (a = h));\n    V = '';\n    E = 0;\n    z = D = 1;\n    return a;\n  }\n\n  var ca = /^\\0+/g,\n      N = /[\\0\\r\\f]/g,\n      aa = /: */g,\n      ka = /zoo|gra/,\n      ma = /([,: ])(transform)/g,\n      ia = /,\\r+?/g,\n      F = /([\\t\\r\\n ])*\\f?&/g,\n      fa = /@(k\\w+)\\s*(\\S*)\\s*/,\n      Q = /::(place)/g,\n      ha = /:(read-only)/g,\n      G = /[svh]\\w+-[tblr]{2}/,\n      da = /\\(\\s*(.*)\\s*\\)/g,\n      oa = /([\\s\\S]*?);/g,\n      ba = /-self|flex-/g,\n      na = /[^]*?(:[rp][el]a[\\w-]+)[^]*/,\n      la = /stretch|:\\s*\\w+\\-(?:conte|avail)/,\n      ja = /([^-])(image-set\\()/,\n      z = 1,\n      D = 1,\n      E = 0,\n      w = 1,\n      O = [],\n      S = [],\n      A = 0,\n      R = null,\n      Y = 0,\n      V = '';\n  B.use = T;\n  B.set = U;\n  void 0 !== W && U(W);\n  return B;\n}\n\nexport default stylis_min;\n","import { StyleSheet } from '@emotion/sheet';\nimport Stylis from '@emotion/stylis';\nimport '@emotion/weak-memoize';\n\n// https://github.com/thysultan/stylis.js/tree/master/plugins/rule-sheet\n// inlined to avoid umd wrapper and peerDep warnings/installing stylis\n// since we use stylis after closure compiler\nvar delimiter = '/*|*/';\nvar needle = delimiter + '}';\n\nfunction toSheet(block) {\n  if (block) {\n    Sheet.current.insert(block + '}');\n  }\n}\n\nvar Sheet = {\n  current: null\n};\nvar ruleSheet = function ruleSheet(context, content, selectors, parents, line, column, length, ns, depth, at) {\n  switch (context) {\n    // property\n    case 1:\n      {\n        switch (content.charCodeAt(0)) {\n          case 64:\n            {\n              // @import\n              Sheet.current.insert(content + ';');\n              return '';\n            }\n          // charcode for l\n\n          case 108:\n            {\n              // charcode for b\n              // this ignores label\n              if (content.charCodeAt(2) === 98) {\n                return '';\n              }\n            }\n        }\n\n        break;\n      }\n    // selector\n\n    case 2:\n      {\n        if (ns === 0) return content + delimiter;\n        break;\n      }\n    // at-rule\n\n    case 3:\n      {\n        switch (ns) {\n          // @font-face, @page\n          case 102:\n          case 112:\n            {\n              Sheet.current.insert(selectors[0] + content);\n              return '';\n            }\n\n          default:\n            {\n              return content + (at === 0 ? delimiter : '');\n            }\n        }\n      }\n\n    case -2:\n      {\n        content.split(needle).forEach(toSheet);\n      }\n  }\n};\n\nvar createCache = function createCache(options) {\n  if (options === undefined) options = {};\n  var key = options.key || 'css';\n  var stylisOptions;\n\n  if (options.prefix !== undefined) {\n    stylisOptions = {\n      prefix: options.prefix\n    };\n  }\n\n  var stylis = new Stylis(stylisOptions);\n\n  if (process.env.NODE_ENV !== 'production') {\n    // $FlowFixMe\n    if (/[^a-z-]/.test(key)) {\n      throw new Error(\"Emotion key must only contain lower case alphabetical characters and - but \\\"\" + key + \"\\\" was passed\");\n    }\n  }\n\n  var inserted = {}; // $FlowFixMe\n\n  var container;\n\n  {\n    container = options.container || document.head;\n    var nodes = document.querySelectorAll(\"style[data-emotion-\" + key + \"]\");\n    Array.prototype.forEach.call(nodes, function (node) {\n      var attrib = node.getAttribute(\"data-emotion-\" + key); // $FlowFixMe\n\n      attrib.split(' ').forEach(function (id) {\n        inserted[id] = true;\n      });\n\n      if (node.parentNode !== container) {\n        container.appendChild(node);\n      }\n    });\n  }\n\n  var _insert;\n\n  {\n    stylis.use(options.stylisPlugins)(ruleSheet);\n\n    _insert = function insert(selector, serialized, sheet, shouldCache) {\n      var name = serialized.name;\n      Sheet.current = sheet;\n\n      if (process.env.NODE_ENV !== 'production' && serialized.map !== undefined) {\n        var map = serialized.map;\n        Sheet.current = {\n          insert: function insert(rule) {\n            sheet.insert(rule + map);\n          }\n        };\n      }\n\n      stylis(selector, serialized.styles);\n\n      if (shouldCache) {\n        cache.inserted[name] = true;\n      }\n    };\n  }\n\n  if (process.env.NODE_ENV !== 'production') {\n    // https://esbench.com/bench/5bf7371a4cd7e6009ef61d0a\n    var commentStart = /\\/\\*/g;\n    var commentEnd = /\\*\\//g;\n    stylis.use(function (context, content) {\n      switch (context) {\n        case -1:\n          {\n            while (commentStart.test(content)) {\n              commentEnd.lastIndex = commentStart.lastIndex;\n\n              if (commentEnd.test(content)) {\n                commentStart.lastIndex = commentEnd.lastIndex;\n                continue;\n              }\n\n              throw new Error('Your styles have an unterminated comment (\"/*\" without corresponding \"*/\").');\n            }\n\n            commentStart.lastIndex = 0;\n            break;\n          }\n      }\n    });\n    stylis.use(function (context, content, selectors) {\n      switch (context) {\n        case -1:\n          {\n            var flag = 'emotion-disable-server-rendering-unsafe-selector-warning-please-do-not-use-this-the-warning-exists-for-a-reason';\n            var unsafePseudoClasses = content.match(/(:first|:nth|:nth-last)-child/g);\n\n            if (unsafePseudoClasses && cache.compat !== true) {\n              unsafePseudoClasses.forEach(function (unsafePseudoClass) {\n                var ignoreRegExp = new RegExp(unsafePseudoClass + \".*\\\\/\\\\* \" + flag + \" \\\\*\\\\/\");\n                var ignore = ignoreRegExp.test(content);\n\n                if (unsafePseudoClass && !ignore) {\n                  console.error(\"The pseudo class \\\"\" + unsafePseudoClass + \"\\\" is potentially unsafe when doing server-side rendering. Try changing it to \\\"\" + unsafePseudoClass.split('-child')[0] + \"-of-type\\\".\");\n                }\n              });\n            }\n\n            break;\n          }\n      }\n    });\n  }\n\n  var cache = {\n    key: key,\n    sheet: new StyleSheet({\n      key: key,\n      container: container,\n      nonce: options.nonce,\n      speedy: options.speedy\n    }),\n    nonce: options.nonce,\n    inserted: inserted,\n    registered: {},\n    insert: _insert\n  };\n  return cache;\n};\n\nexport default createCache;\n","var isBrowser = \"object\" !== 'undefined';\nfunction getRegisteredStyles(registered, registeredStyles, classNames) {\n  var rawClassName = '';\n  classNames.split(' ').forEach(function (className) {\n    if (registered[className] !== undefined) {\n      registeredStyles.push(registered[className]);\n    } else {\n      rawClassName += className + \" \";\n    }\n  });\n  return rawClassName;\n}\nvar insertStyles = function insertStyles(cache, serialized, isStringTag) {\n  var className = cache.key + \"-\" + serialized.name;\n\n  if ( // we only need to add the styles to the registered cache if the\n  // class name could be used further down\n  // the tree but if it's a string tag, we know it won't\n  // so we don't have to add it to registered cache.\n  // this improves memory usage since we can avoid storing the whole style string\n  (isStringTag === false || // we need to always store it if we're in compat mode and\n  // in node since emotion-server relies on whether a style is in\n  // the registered cache to know whether a style is global or not\n  // also, note that this check will be dead code eliminated in the browser\n  isBrowser === false && cache.compat !== undefined) && cache.registered[className] === undefined) {\n    cache.registered[className] = serialized.styles;\n  }\n\n  if (cache.inserted[serialized.name] === undefined) {\n    var current = serialized;\n\n    do {\n      var maybeStyles = cache.insert(\".\" + className, current, cache.sheet, true);\n\n      current = current.next;\n    } while (current !== undefined);\n  }\n};\n\nexport { getRegisteredStyles, insertStyles };\n","/* eslint-disable */\n// Inspired by https://github.com/garycourt/murmurhash-js\n// Ported from https://github.com/aappleby/smhasher/blob/61a0530f28277f2e850bfc39600ce61d02b518de/src/MurmurHash2.cpp#L37-L86\nfunction murmur2(str) {\n  // 'm' and 'r' are mixing constants generated offline.\n  // They're not really 'magic', they just happen to work well.\n  // const m = 0x5bd1e995;\n  // const r = 24;\n  // Initialize the hash\n  var h = 0; // Mix 4 bytes at a time into the hash\n\n  var k,\n      i = 0,\n      len = str.length;\n\n  for (; len >= 4; ++i, len -= 4) {\n    k = str.charCodeAt(i) & 0xff | (str.charCodeAt(++i) & 0xff) << 8 | (str.charCodeAt(++i) & 0xff) << 16 | (str.charCodeAt(++i) & 0xff) << 24;\n    k =\n    /* Math.imul(k, m): */\n    (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16);\n    k ^=\n    /* k >>> r: */\n    k >>> 24;\n    h =\n    /* Math.imul(k, m): */\n    (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16) ^\n    /* Math.imul(h, m): */\n    (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n  } // Handle the last few bytes of the input array\n\n\n  switch (len) {\n    case 3:\n      h ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n\n    case 2:\n      h ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n\n    case 1:\n      h ^= str.charCodeAt(i) & 0xff;\n      h =\n      /* Math.imul(h, m): */\n      (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n  } // Do a few final mixes of the hash to ensure the last few\n  // bytes are well-incorporated.\n\n\n  h ^= h >>> 13;\n  h =\n  /* Math.imul(h, m): */\n  (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n  return ((h ^ h >>> 15) >>> 0).toString(36);\n}\n\nexport default murmur2;\n","var unitlessKeys = {\n  animationIterationCount: 1,\n  borderImageOutset: 1,\n  borderImageSlice: 1,\n  borderImageWidth: 1,\n  boxFlex: 1,\n  boxFlexGroup: 1,\n  boxOrdinalGroup: 1,\n  columnCount: 1,\n  columns: 1,\n  flex: 1,\n  flexGrow: 1,\n  flexPositive: 1,\n  flexShrink: 1,\n  flexNegative: 1,\n  flexOrder: 1,\n  gridRow: 1,\n  gridRowEnd: 1,\n  gridRowSpan: 1,\n  gridRowStart: 1,\n  gridColumn: 1,\n  gridColumnEnd: 1,\n  gridColumnSpan: 1,\n  gridColumnStart: 1,\n  msGridRow: 1,\n  msGridRowSpan: 1,\n  msGridColumn: 1,\n  msGridColumnSpan: 1,\n  fontWeight: 1,\n  lineHeight: 1,\n  opacity: 1,\n  order: 1,\n  orphans: 1,\n  tabSize: 1,\n  widows: 1,\n  zIndex: 1,\n  zoom: 1,\n  WebkitLineClamp: 1,\n  // SVG-related properties\n  fillOpacity: 1,\n  floodOpacity: 1,\n  stopOpacity: 1,\n  strokeDasharray: 1,\n  strokeDashoffset: 1,\n  strokeMiterlimit: 1,\n  strokeOpacity: 1,\n  strokeWidth: 1\n};\n\nexport default unitlessKeys;\n","function memoize(fn) {\n  var cache = {};\n  return function (arg) {\n    if (cache[arg] === undefined) cache[arg] = fn(arg);\n    return cache[arg];\n  };\n}\n\nexport default memoize;\n","import hashString from '@emotion/hash';\nimport unitless from '@emotion/unitless';\nimport memoize from '@emotion/memoize';\n\nvar ILLEGAL_ESCAPE_SEQUENCE_ERROR = \"You have illegal escape sequence in your template literal, most likely inside content's property value.\\nBecause you write your CSS inside a JavaScript string you actually have to do double escaping, so for example \\\"content: '\\\\00d7';\\\" should become \\\"content: '\\\\\\\\00d7';\\\".\\nYou can read more about this here:\\nhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#ES2018_revision_of_illegal_escape_sequences\";\nvar UNDEFINED_AS_OBJECT_KEY_ERROR = \"You have passed in falsy value as style object's key (can happen when in example you pass unexported component as computed key).\";\nvar hyphenateRegex = /[A-Z]|^ms/g;\nvar animationRegex = /_EMO_([^_]+?)_([^]*?)_EMO_/g;\n\nvar isCustomProperty = function isCustomProperty(property) {\n  return property.charCodeAt(1) === 45;\n};\n\nvar isProcessableValue = function isProcessableValue(value) {\n  return value != null && typeof value !== 'boolean';\n};\n\nvar processStyleName = memoize(function (styleName) {\n  return isCustomProperty(styleName) ? styleName : styleName.replace(hyphenateRegex, '-$&').toLowerCase();\n});\n\nvar processStyleValue = function processStyleValue(key, value) {\n  switch (key) {\n    case 'animation':\n    case 'animationName':\n      {\n        if (typeof value === 'string') {\n          return value.replace(animationRegex, function (match, p1, p2) {\n            cursor = {\n              name: p1,\n              styles: p2,\n              next: cursor\n            };\n            return p1;\n          });\n        }\n      }\n  }\n\n  if (unitless[key] !== 1 && !isCustomProperty(key) && typeof value === 'number' && value !== 0) {\n    return value + 'px';\n  }\n\n  return value;\n};\n\nif (process.env.NODE_ENV !== 'production') {\n  var contentValuePattern = /(attr|calc|counters?|url)\\(/;\n  var contentValues = ['normal', 'none', 'counter', 'open-quote', 'close-quote', 'no-open-quote', 'no-close-quote', 'initial', 'inherit', 'unset'];\n  var oldProcessStyleValue = processStyleValue;\n  var msPattern = /^-ms-/;\n  var hyphenPattern = /-(.)/g;\n  var hyphenatedCache = {};\n\n  processStyleValue = function processStyleValue(key, value) {\n    if (key === 'content') {\n      if (typeof value !== 'string' || contentValues.indexOf(value) === -1 && !contentValuePattern.test(value) && (value.charAt(0) !== value.charAt(value.length - 1) || value.charAt(0) !== '\"' && value.charAt(0) !== \"'\")) {\n        console.error(\"You seem to be using a value for 'content' without quotes, try replacing it with `content: '\\\"\" + value + \"\\\"'`\");\n      }\n    }\n\n    var processed = oldProcessStyleValue(key, value);\n\n    if (processed !== '' && !isCustomProperty(key) && key.indexOf('-') !== -1 && hyphenatedCache[key] === undefined) {\n      hyphenatedCache[key] = true;\n      console.error(\"Using kebab-case for css properties in objects is not supported. Did you mean \" + key.replace(msPattern, 'ms-').replace(hyphenPattern, function (str, _char) {\n        return _char.toUpperCase();\n      }) + \"?\");\n    }\n\n    return processed;\n  };\n}\n\nvar shouldWarnAboutInterpolatingClassNameFromCss = true;\n\nfunction handleInterpolation(mergedProps, registered, interpolation, couldBeSelectorInterpolation) {\n  if (interpolation == null) {\n    return '';\n  }\n\n  if (interpolation.__emotion_styles !== undefined) {\n    if (process.env.NODE_ENV !== 'production' && interpolation.toString() === 'NO_COMPONENT_SELECTOR') {\n      throw new Error('Component selectors can only be used in conjunction with babel-plugin-emotion.');\n    }\n\n    return interpolation;\n  }\n\n  switch (typeof interpolation) {\n    case 'boolean':\n      {\n        return '';\n      }\n\n    case 'object':\n      {\n        if (interpolation.anim === 1) {\n          cursor = {\n            name: interpolation.name,\n            styles: interpolation.styles,\n            next: cursor\n          };\n          return interpolation.name;\n        }\n\n        if (interpolation.styles !== undefined) {\n          var next = interpolation.next;\n\n          if (next !== undefined) {\n            // not the most efficient thing ever but this is a pretty rare case\n            // and there will be very few iterations of this generally\n            while (next !== undefined) {\n              cursor = {\n                name: next.name,\n                styles: next.styles,\n                next: cursor\n              };\n              next = next.next;\n            }\n          }\n\n          var styles = interpolation.styles + \";\";\n\n          if (process.env.NODE_ENV !== 'production' && interpolation.map !== undefined) {\n            styles += interpolation.map;\n          }\n\n          return styles;\n        }\n\n        return createStringFromObject(mergedProps, registered, interpolation);\n      }\n\n    case 'function':\n      {\n        if (mergedProps !== undefined) {\n          var previousCursor = cursor;\n          var result = interpolation(mergedProps);\n          cursor = previousCursor;\n          return handleInterpolation(mergedProps, registered, result, couldBeSelectorInterpolation);\n        } else if (process.env.NODE_ENV !== 'production') {\n          console.error('Functions that are interpolated in css calls will be stringified.\\n' + 'If you want to have a css call based on props, create a function that returns a css call like this\\n' + 'let dynamicStyle = (props) => css`color: ${props.color}`\\n' + 'It can be called directly with props or interpolated in a styled call like this\\n' + \"let SomeComponent = styled('div')`${dynamicStyle}`\");\n        }\n\n        break;\n      }\n\n    case 'string':\n      if (process.env.NODE_ENV !== 'production') {\n        var matched = [];\n        var replaced = interpolation.replace(animationRegex, function (match, p1, p2) {\n          var fakeVarName = \"animation\" + matched.length;\n          matched.push(\"const \" + fakeVarName + \" = keyframes`\" + p2.replace(/^@keyframes animation-\\w+/, '') + \"`\");\n          return \"${\" + fakeVarName + \"}\";\n        });\n\n        if (matched.length) {\n          console.error('`keyframes` output got interpolated into plain string, please wrap it with `css`.\\n\\n' + 'Instead of doing this:\\n\\n' + [].concat(matched, [\"`\" + replaced + \"`\"]).join('\\n') + '\\n\\nYou should wrap it with `css` like this:\\n\\n' + (\"css`\" + replaced + \"`\"));\n        }\n      }\n\n      break;\n  } // finalize string values (regular strings and functions interpolated into css calls)\n\n\n  if (registered == null) {\n    return interpolation;\n  }\n\n  var cached = registered[interpolation];\n\n  if (process.env.NODE_ENV !== 'production' && couldBeSelectorInterpolation && shouldWarnAboutInterpolatingClassNameFromCss && cached !== undefined) {\n    console.error('Interpolating a className from css`` is not recommended and will cause problems with composition.\\n' + 'Interpolating a className from css`` will be completely unsupported in a future major version of Emotion');\n    shouldWarnAboutInterpolatingClassNameFromCss = false;\n  }\n\n  return cached !== undefined && !couldBeSelectorInterpolation ? cached : interpolation;\n}\n\nfunction createStringFromObject(mergedProps, registered, obj) {\n  var string = '';\n\n  if (Array.isArray(obj)) {\n    for (var i = 0; i < obj.length; i++) {\n      string += handleInterpolation(mergedProps, registered, obj[i], false);\n    }\n  } else {\n    for (var _key in obj) {\n      var value = obj[_key];\n\n      if (typeof value !== 'object') {\n        if (registered != null && registered[value] !== undefined) {\n          string += _key + \"{\" + registered[value] + \"}\";\n        } else if (isProcessableValue(value)) {\n          string += processStyleName(_key) + \":\" + processStyleValue(_key, value) + \";\";\n        }\n      } else {\n        if (_key === 'NO_COMPONENT_SELECTOR' && process.env.NODE_ENV !== 'production') {\n          throw new Error('Component selectors can only be used in conjunction with babel-plugin-emotion.');\n        }\n\n        if (Array.isArray(value) && typeof value[0] === 'string' && (registered == null || registered[value[0]] === undefined)) {\n          for (var _i = 0; _i < value.length; _i++) {\n            if (isProcessableValue(value[_i])) {\n              string += processStyleName(_key) + \":\" + processStyleValue(_key, value[_i]) + \";\";\n            }\n          }\n        } else {\n          var interpolated = handleInterpolation(mergedProps, registered, value, false);\n\n          switch (_key) {\n            case 'animation':\n            case 'animationName':\n              {\n                string += processStyleName(_key) + \":\" + interpolated + \";\";\n                break;\n              }\n\n            default:\n              {\n                if (process.env.NODE_ENV !== 'production' && _key === 'undefined') {\n                  console.error(UNDEFINED_AS_OBJECT_KEY_ERROR);\n                }\n\n                string += _key + \"{\" + interpolated + \"}\";\n              }\n          }\n        }\n      }\n    }\n  }\n\n  return string;\n}\n\nvar labelPattern = /label:\\s*([^\\s;\\n{]+)\\s*;/g;\nvar sourceMapPattern;\n\nif (process.env.NODE_ENV !== 'production') {\n  sourceMapPattern = /\\/\\*#\\ssourceMappingURL=data:application\\/json;\\S+\\s+\\*\\//;\n} // this is the cursor for keyframes\n// keyframes are stored on the SerializedStyles object as a linked list\n\n\nvar cursor;\nvar serializeStyles = function serializeStyles(args, registered, mergedProps) {\n  if (args.length === 1 && typeof args[0] === 'object' && args[0] !== null && args[0].styles !== undefined) {\n    return args[0];\n  }\n\n  var stringMode = true;\n  var styles = '';\n  cursor = undefined;\n  var strings = args[0];\n\n  if (strings == null || strings.raw === undefined) {\n    stringMode = false;\n    styles += handleInterpolation(mergedProps, registered, strings, false);\n  } else {\n    if (process.env.NODE_ENV !== 'production' && strings[0] === undefined) {\n      console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);\n    }\n\n    styles += strings[0];\n  } // we start at 1 since we've already handled the first arg\n\n\n  for (var i = 1; i < args.length; i++) {\n    styles += handleInterpolation(mergedProps, registered, args[i], styles.charCodeAt(styles.length - 1) === 46);\n\n    if (stringMode) {\n      if (process.env.NODE_ENV !== 'production' && strings[i] === undefined) {\n        console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);\n      }\n\n      styles += strings[i];\n    }\n  }\n\n  var sourceMap;\n\n  if (process.env.NODE_ENV !== 'production') {\n    styles = styles.replace(sourceMapPattern, function (match) {\n      sourceMap = match;\n      return '';\n    });\n  } // using a global regex with .exec is stateful so lastIndex has to be reset each time\n\n\n  labelPattern.lastIndex = 0;\n  var identifierName = '';\n  var match; // https://esbench.com/bench/5b809c2cf2949800a0f61fb5\n\n  while ((match = labelPattern.exec(styles)) !== null) {\n    identifierName += '-' + // $FlowFixMe we know it's not null\n    match[1];\n  }\n\n  var name = hashString(styles) + identifierName;\n\n  if (process.env.NODE_ENV !== 'production') {\n    // $FlowFixMe SerializedStyles type doesn't have toString property (and we don't want to add it)\n    return {\n      name: name,\n      styles: styles,\n      map: sourceMap,\n      next: cursor,\n      toString: function toString() {\n        return \"You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop).\";\n      }\n    };\n  }\n\n  return {\n    name: name,\n    styles: styles,\n    next: cursor\n  };\n};\n\nexport { serializeStyles };\n","import '@babel/runtime/helpers/inheritsLoose';\nimport { createContext, forwardRef, createElement, Fragment } from 'react';\nimport createCache from '@emotion/cache';\nimport { getRegisteredStyles, insertStyles } from '@emotion/utils';\nimport { serializeStyles } from '@emotion/serialize';\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar EmotionCacheContext = /*#__PURE__*/createContext( // we're doing this to avoid preconstruct's dead code elimination in this one case\n// because this module is primarily intended for the browser and node\n// but it's also required in react native and similar environments sometimes\n// and we could have a special build just for that\n// but this is much easier and the native packages\n// might use a different theme context in the future anyway\ntypeof HTMLElement !== 'undefined' ? createCache() : null);\nvar ThemeContext = /*#__PURE__*/createContext({});\nvar CacheProvider = EmotionCacheContext.Provider;\n\nvar withEmotionCache = function withEmotionCache(func) {\n  var render = function render(props, ref) {\n    return /*#__PURE__*/createElement(EmotionCacheContext.Consumer, null, function (cache) {\n      return func(props, cache, ref);\n    });\n  }; // $FlowFixMe\n\n\n  return /*#__PURE__*/forwardRef(render);\n};\n\n// thus we only need to replace what is a valid character for JS, but not for CSS\n\nvar sanitizeIdentifier = function sanitizeIdentifier(identifier) {\n  return identifier.replace(/\\$/g, '-');\n};\n\nvar typePropName = '__EMOTION_TYPE_PLEASE_DO_NOT_USE__';\nvar labelPropName = '__EMOTION_LABEL_PLEASE_DO_NOT_USE__';\nvar createEmotionProps = function createEmotionProps(type, props) {\n  if (process.env.NODE_ENV !== 'production' && typeof props.css === 'string' && // check if there is a css declaration\n  props.css.indexOf(':') !== -1) {\n    throw new Error(\"Strings are not allowed as css prop values, please wrap it in a css template literal from '@emotion/css' like this: css`\" + props.css + \"`\");\n  }\n\n  var newProps = {};\n\n  for (var key in props) {\n    if (hasOwnProperty.call(props, key)) {\n      newProps[key] = props[key];\n    }\n  }\n\n  newProps[typePropName] = type; // TODO: check if this still works with all of those different JSX functions\n\n  if (process.env.NODE_ENV !== 'production') {\n    var error = new Error();\n\n    if (error.stack) {\n      // chrome\n      var match = error.stack.match(/at (?:Object\\.|Module\\.|)(?:jsx|createEmotionProps).*\\n\\s+at (?:Object\\.|)([A-Z][A-Za-z$]+) /);\n\n      if (!match) {\n        // safari and firefox\n        match = error.stack.match(/.*\\n([A-Z][A-Za-z$]+)@/);\n      }\n\n      if (match) {\n        newProps[labelPropName] = sanitizeIdentifier(match[1]);\n      }\n    }\n  }\n\n  return newProps;\n};\n\nvar Noop = function Noop() {\n  return null;\n};\n\nvar render = function render(cache, props, theme, ref) {\n  var cssProp = theme === null ? props.css : props.css(theme); // so that using `css` from `emotion` and passing the result to the css prop works\n  // not passing the registered cache to serializeStyles because it would\n  // make certain babel optimisations not possible\n\n  if (typeof cssProp === 'string' && cache.registered[cssProp] !== undefined) {\n    cssProp = cache.registered[cssProp];\n  }\n\n  var type = props[typePropName];\n  var registeredStyles = [cssProp];\n  var className = '';\n\n  if (typeof props.className === 'string') {\n    className = getRegisteredStyles(cache.registered, registeredStyles, props.className);\n  } else if (props.className != null) {\n    className = props.className + \" \";\n  }\n\n  var serialized = serializeStyles(registeredStyles);\n\n  if (process.env.NODE_ENV !== 'production' && serialized.name.indexOf('-') === -1) {\n    var labelFromStack = props[labelPropName];\n\n    if (labelFromStack) {\n      serialized = serializeStyles([serialized, 'label:' + labelFromStack + ';']);\n    }\n  }\n\n  var rules = insertStyles(cache, serialized, typeof type === 'string');\n  className += cache.key + \"-\" + serialized.name;\n  var newProps = {};\n\n  for (var key in props) {\n    if (hasOwnProperty.call(props, key) && key !== 'css' && key !== typePropName && (process.env.NODE_ENV === 'production' || key !== labelPropName)) {\n      newProps[key] = props[key];\n    }\n  }\n\n  newProps.ref = ref;\n  newProps.className = className;\n  var ele = /*#__PURE__*/createElement(type, newProps);\n  var possiblyStyleElement = /*#__PURE__*/createElement(Noop, null);\n\n\n  return /*#__PURE__*/createElement(Fragment, null, possiblyStyleElement, ele);\n}; // eslint-disable-next-line no-undef\n\n\nvar Emotion = /* #__PURE__ */withEmotionCache(function (props, cache, ref) {\n  if (typeof props.css === 'function') {\n    return /*#__PURE__*/createElement(ThemeContext.Consumer, null, function (theme) {\n      return render(cache, props, theme, ref);\n    });\n  }\n\n  return render(cache, props, null, ref);\n});\n\nif (process.env.NODE_ENV !== 'production') {\n  Emotion.displayName = 'EmotionCssPropInternal';\n}\n\nexport { CacheProvider as C, Emotion as E, ThemeContext as T, createEmotionProps as c, hasOwnProperty as h, withEmotionCache as w };\n","import { serializeStyles } from '@emotion/serialize';\n\nfunction css() {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  return serializeStyles(args);\n}\n\nexport default css;\n","import _inheritsLoose from '@babel/runtime/helpers/esm/inheritsLoose';\nimport { createElement, Component, Fragment } from 'react';\nimport '@emotion/cache';\nimport { h as hasOwnProperty, E as Emotion, c as createEmotionProps, w as withEmotionCache, T as ThemeContext } from './emotion-element-04d85134.browser.esm.js';\nexport { C as CacheProvider, T as ThemeContext, w as withEmotionCache } from './emotion-element-04d85134.browser.esm.js';\nimport { insertStyles, getRegisteredStyles } from '@emotion/utils';\nimport { serializeStyles } from '@emotion/serialize';\nimport { StyleSheet } from '@emotion/sheet';\nimport css from '@emotion/css';\nexport { default as css } from '@emotion/css';\n\nvar jsx = function jsx(type, props) {\n  var args = arguments;\n\n  if (props == null || !hasOwnProperty.call(props, 'css')) {\n    // $FlowFixMe\n    return createElement.apply(undefined, args);\n  }\n\n  var argsLength = args.length;\n  var createElementArgArray = new Array(argsLength);\n  createElementArgArray[0] = Emotion;\n  createElementArgArray[1] = createEmotionProps(type, props);\n\n  for (var i = 2; i < argsLength; i++) {\n    createElementArgArray[i] = args[i];\n  } // $FlowFixMe\n\n\n  return createElement.apply(null, createElementArgArray);\n};\n\nvar warnedAboutCssPropForGlobal = false;\nvar Global = /* #__PURE__ */withEmotionCache(function (props, cache) {\n  if (process.env.NODE_ENV !== 'production' && !warnedAboutCssPropForGlobal && ( // check for className as well since the user is\n  // probably using the custom createElement which\n  // means it will be turned into a className prop\n  // $FlowFixMe I don't really want to add it to the type since it shouldn't be used\n  props.className || props.css)) {\n    console.error(\"It looks like you're using the css prop on Global, did you mean to use the styles prop instead?\");\n    warnedAboutCssPropForGlobal = true;\n  }\n\n  var styles = props.styles;\n\n  if (typeof styles === 'function') {\n    return /*#__PURE__*/createElement(ThemeContext.Consumer, null, function (theme) {\n      var serialized = serializeStyles([styles(theme)]);\n      return /*#__PURE__*/createElement(InnerGlobal, {\n        serialized: serialized,\n        cache: cache\n      });\n    });\n  }\n\n  var serialized = serializeStyles([styles]);\n  return /*#__PURE__*/createElement(InnerGlobal, {\n    serialized: serialized,\n    cache: cache\n  });\n});\n\n// maintain place over rerenders.\n// initial render from browser, insertBefore context.sheet.tags[0] or if a style hasn't been inserted there yet, appendChild\n// initial client-side render from SSR, use place of hydrating tag\nvar InnerGlobal = /*#__PURE__*/function (_React$Component) {\n  _inheritsLoose(InnerGlobal, _React$Component);\n\n  function InnerGlobal(props, context, updater) {\n    return _React$Component.call(this, props, context, updater) || this;\n  }\n\n  var _proto = InnerGlobal.prototype;\n\n  _proto.componentDidMount = function componentDidMount() {\n    this.sheet = new StyleSheet({\n      key: this.props.cache.key + \"-global\",\n      nonce: this.props.cache.sheet.nonce,\n      container: this.props.cache.sheet.container\n    }); // $FlowFixMe\n\n    var node = document.querySelector(\"style[data-emotion-\" + this.props.cache.key + \"=\\\"\" + this.props.serialized.name + \"\\\"]\");\n\n    if (node !== null) {\n      this.sheet.tags.push(node);\n    }\n\n    if (this.props.cache.sheet.tags.length) {\n      this.sheet.before = this.props.cache.sheet.tags[0];\n    }\n\n    this.insertStyles();\n  };\n\n  _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n    if (prevProps.serialized.name !== this.props.serialized.name) {\n      this.insertStyles();\n    }\n  };\n\n  _proto.insertStyles = function insertStyles$1() {\n    if (this.props.serialized.next !== undefined) {\n      // insert keyframes\n      insertStyles(this.props.cache, this.props.serialized.next, true);\n    }\n\n    if (this.sheet.tags.length) {\n      // if this doesn't exist then it will be null so the style element will be appended\n      var element = this.sheet.tags[this.sheet.tags.length - 1].nextElementSibling;\n      this.sheet.before = element;\n      this.sheet.flush();\n    }\n\n    this.props.cache.insert(\"\", this.props.serialized, this.sheet, false);\n  };\n\n  _proto.componentWillUnmount = function componentWillUnmount() {\n    this.sheet.flush();\n  };\n\n  _proto.render = function render() {\n\n    return null;\n  };\n\n  return InnerGlobal;\n}(Component);\n\nvar keyframes = function keyframes() {\n  var insertable = css.apply(void 0, arguments);\n  var name = \"animation-\" + insertable.name; // $FlowFixMe\n\n  return {\n    name: name,\n    styles: \"@keyframes \" + name + \"{\" + insertable.styles + \"}\",\n    anim: 1,\n    toString: function toString() {\n      return \"_EMO_\" + this.name + \"_\" + this.styles + \"_EMO_\";\n    }\n  };\n};\n\nvar classnames = function classnames(args) {\n  var len = args.length;\n  var i = 0;\n  var cls = '';\n\n  for (; i < len; i++) {\n    var arg = args[i];\n    if (arg == null) continue;\n    var toAdd = void 0;\n\n    switch (typeof arg) {\n      case 'boolean':\n        break;\n\n      case 'object':\n        {\n          if (Array.isArray(arg)) {\n            toAdd = classnames(arg);\n          } else {\n            toAdd = '';\n\n            for (var k in arg) {\n              if (arg[k] && k) {\n                toAdd && (toAdd += ' ');\n                toAdd += k;\n              }\n            }\n          }\n\n          break;\n        }\n\n      default:\n        {\n          toAdd = arg;\n        }\n    }\n\n    if (toAdd) {\n      cls && (cls += ' ');\n      cls += toAdd;\n    }\n  }\n\n  return cls;\n};\n\nfunction merge(registered, css, className) {\n  var registeredStyles = [];\n  var rawClassName = getRegisteredStyles(registered, registeredStyles, className);\n\n  if (registeredStyles.length < 2) {\n    return className;\n  }\n\n  return rawClassName + css(registeredStyles);\n}\n\nvar Noop = function Noop() {\n  return null;\n};\n\nvar ClassNames = withEmotionCache(function (props, context) {\n  return /*#__PURE__*/createElement(ThemeContext.Consumer, null, function (theme) {\n    var hasRendered = false;\n\n    var css = function css() {\n      if (hasRendered && process.env.NODE_ENV !== 'production') {\n        throw new Error('css can only be used during render');\n      }\n\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      var serialized = serializeStyles(args, context.registered);\n\n      {\n        insertStyles(context, serialized, false);\n      }\n\n      return context.key + \"-\" + serialized.name;\n    };\n\n    var cx = function cx() {\n      if (hasRendered && process.env.NODE_ENV !== 'production') {\n        throw new Error('cx can only be used during render');\n      }\n\n      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        args[_key2] = arguments[_key2];\n      }\n\n      return merge(context.registered, css, classnames(args));\n    };\n\n    var content = {\n      css: css,\n      cx: cx,\n      theme: theme\n    };\n    var ele = props.children(content);\n    hasRendered = true;\n    var possiblyStyleElement = /*#__PURE__*/createElement(Noop, null);\n\n\n    return /*#__PURE__*/createElement(Fragment, null, possiblyStyleElement, ele);\n  });\n});\n\nexport { ClassNames, Global, jsx as createElement, jsx, keyframes };\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","module.exports = function(originalModule) {\n\tif (!originalModule.webpackPolyfill) {\n\t\tvar module = Object.create(originalModule);\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"exports\", {\n\t\t\tenumerable: true\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","//! moment.js\n//! version : 2.29.1\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        for (i = 0; i < arr.length; ++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, prop, val;\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 (momentProperties.length > 0) {\n            for (i = 0; i < momentProperties.length; 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                for (i = 0; i < arguments.length; 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 = /(\\[[^\\[]*\\])|(\\\\)?([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            for (i = 0; i < prioritized.length; 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 = /[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(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g, function (\n                    matched,\n                    p1,\n                    p2,\n                    p3,\n                    p4\n                ) {\n                    return p1 || p2 || p3 || p4;\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        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        for (i = 0; i < token.length; 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 = 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split(\n            '_'\n        ),\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(['w', 'ww', 'W', 'WW'], function (\n        input,\n        week,\n        config,\n        token\n    ) {\n        week[token.substr(0, 1)] = toInt(input);\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 = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\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 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        ) {\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 = /^\\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 = /^\\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 = /^(?:(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\n        if (match) {\n            getParsingFlags(config).iso = true;\n\n            for (i = 0, l = isoDates.length; 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 = isoTimes.length; 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\n        tokens =\n            expandFormat(config._f, config._locale).match(formattingTokens) || [];\n\n        for (i = 0; i < tokens.length; 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\n        if (config._f.length === 0) {\n            getParsingFlags(config).invalidFormat = true;\n            config._d = new Date(NaN);\n            return;\n        }\n\n        for (i = 0; i < config._f.length; 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        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 < ordering.length; ++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 = /^(-|\\+)?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\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 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', 'NN', 'NNN', 'NNNN', 'NNNNN'], function (\n        input,\n        array,\n        config,\n        token\n    ) {\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    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(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (\n        input,\n        week,\n        config,\n        token\n    ) {\n        week[token.substr(0, 2)] = toInt(input);\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.1';\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","import _pt from \"prop-types\";\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from 'react';\nimport cx from 'classnames';\nexport default function Group(_ref) {\n  var _ref$top = _ref.top,\n      top = _ref$top === void 0 ? 0 : _ref$top,\n      _ref$left = _ref.left,\n      left = _ref$left === void 0 ? 0 : _ref$left,\n      transform = _ref.transform,\n      className = _ref.className,\n      children = _ref.children,\n      innerRef = _ref.innerRef,\n      restProps = _objectWithoutPropertiesLoose(_ref, [\"top\", \"left\", \"transform\", \"className\", \"children\", \"innerRef\"]);\n\n  return /*#__PURE__*/React.createElement(\"g\", _extends({\n    ref: innerRef,\n    className: cx('visx-group', className),\n    transform: transform || \"translate(\" + left + \", \" + top + \")\"\n  }, restProps), children);\n}\nGroup.propTypes = {\n  top: _pt.number,\n  left: _pt.number,\n  transform: _pt.string,\n  className: _pt.string,\n  children: _pt.node,\n  innerRef: _pt.oneOfType([_pt.string, _pt.func, _pt.object])\n};","function _defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n}\n\nmodule.exports = _defineProperty;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","import { letterFrequency, genDateValue } from '@visx/mock-data';\nimport { scaleLinear, scaleOrdinal, scaleThreshold, scaleSqrt } from '@visx/scale';\nimport categoricalUsSampleData from '../../sample-data/categorical-us';\nimport { Light } from '../chart-frame/watermarks';\nimport { identity } from '../../util';\n\nconst genLines = (num) => new Array(num).fill(1).map(() => genDateValue(25));\n\nexport const baseComponentDefaultProps = {\n  width: false,\n  height: false,\n  margin: false,\n  padding: { top: 0, right: 50, bottom: 0, left: 20 },\n  type: 'web',\n};\n\nexport const chartFrameDefaultProps = {\n  type: 'web',\n};\n\nexport const frameDefaultProps = {\n  ...baseComponentDefaultProps,\n  ...chartFrameDefaultProps,\n  background: '#fff1e5',\n  children: [],\n  description: false,\n  hideTitleTooltip: false,\n  watermark: false,\n  hideTopper: false,\n  hideFooter: false,\n  watermarkOffset: { x: 40, y: 0 },\n  tooltipComponent: identity,\n};\n\nexport const frameSocialDefaultProps = {\n  // <Frame />\n  width: 612,\n  height: 612,\n  margin: { top: 140, right: 40, bottom: 80, left: 40 },\n  background: '#262a33',\n  watermark: Light,\n  watermarkOffset: { x: 40, y: 40 },\n  // <ChartTopper />\n  stabRule: true,\n  subtitleFontSize: 24,\n  subtitleLineHeight: 28,\n  subtitlePosition: { x: 40, y: 112 },\n  titleFontSize: 30,\n  titleLineHeight: 32,\n  titlePosition: { x: 40, y: 80 },\n  // <ChartFooter />\n  copyright: null,\n  sourceFontSize: 20,\n  sourceLineHeight: 20,\n  sourcePosition: { x: 40, y: 40 },\n};\n\nexport const frameVideoDefaultProps = {\n  // <Frame />\n  width: 1920,\n  height: 1080,\n  margin: { top: 250, right: 207, bottom: 160, left: 207 },\n  background: '#262a33',\n  watermark: false,\n  // <ChartTopper />\n  stabRule: false,\n  subtitleFontSize: 48,\n  subtitleLineHeight: 48,\n  subtitlePosition: { x: 207, y: 200 },\n  titleFontSize: 72,\n  titleLineHeight: 68,\n  titlePosition: { x: 207, y: 130 },\n  // <ChartFooter />\n  copyright: null,\n  sourceFontSize: 36,\n  sourceLineHeight: 38,\n  sourcePosition: { x: 207, y: 60 },\n};\n\nexport const framePrintDefaultProps = {\n  // <Frame />\n  width: 53.71,\n  height: 69.85,\n  padding: { top: 0, right: 0, bottom: 0, left: 0 },\n  margin: { top: 40, right: 7, bottom: 35, left: 7 },\n  background: '#FFFFFF',\n  watermark: false,\n  watermarkOffset: { x: 0, y: 0 },\n  // <ChartTopper />\n  stabRule: false,\n  subtitleFontSize: 9.6,\n  subtitleLineHeight: 10,\n  subtitlePosition: { x: 7, y: 27 },\n  titleFontSize: 12,\n  titleLineHeight: 13,\n  titlePosition: { x: 7, y: 15 },\n  // <ChartFooter />\n  copyright: null,\n  sourceFontSize: 7.2,\n  sourceLineHeight: 8,\n  sourcePosition: { x: 7, y: 8 },\n};\n\nexport const chartTopperDefaultProps = {\n  ...baseComponentDefaultProps,\n  ...chartFrameDefaultProps,\n  stabRule: true,\n  subtitle: 'Subtitle TKTK',\n  subtitleMarkupCustom: false,\n  title: 'Chart title TK',\n  titleMarkupCustom: false,\n};\n\nexport const chartFooterDefaultProps = {\n  ...baseComponentDefaultProps,\n  ...chartFrameDefaultProps,\n  copyright: '© FT',\n  source: 'Source: FT research',\n  sourcePosition: { x: 1, y: 2 },\n};\n\nexport const legendComponentDefaultProps = {\n  legendWidth: 500,\n  legendHeight: 250,\n  posX: 10,\n  posY: 10,\n  legendType: 'categorical',\n  invert: false,\n  geometry: 'rect',\n  draggable: true,\n  orientation: 'vertical',\n  median: '',\n  label: 'Label not yet added',\n};\n\n// TODO: Remove “component” from names\n\nexport const axisArrowsComponentDefaultProps = {\n  axisArrows: false,\n  axisArrowsScale: false,\n  axisArrowsPadding: {\n    top: 0,\n    right: 10,\n    bottom: 0,\n    left: 10,\n  },\n};\n\nexport const axisBandingComponentDefaultProps = {\n  axisBanding: false,\n  bandingScale: false,\n};\n\nexport const axisComponentDefaultProps = {\n  ...baseComponentDefaultProps,\n  ...axisArrowsComponentDefaultProps,\n  orientation: 'bottom',\n  scale: false,\n  fullLengthTick: false,\n  hideEndTicks: false,\n  invertScale: false,\n  automaticallyAddPaddingForTicks: true,\n  automaticallySetRange: true,\n  tickLengthOverride: false,\n  tickPositionVariable: false,\n  tickLabelVariable: 'label',\n  additionalTickValues: false,\n  labelOffset: 10,\n};\n\nexport const barsComponentDefaultProps = {\n  ...baseComponentDefaultProps,\n  data: letterFrequency,\n  fill: 'steelblue',\n  xScale: false,\n  xVariable: 'frequency',\n  yScale: false,\n  yVariable: 'letter',\n  colorScale: false,\n  colorVariable: 'name',\n  barHeightVariable: false,\n  fixedBarHeight: false,\n  automaticallySetRange: false,\n};\n\nexport const dotsComponentDefaultProps = {\n  ...baseComponentDefaultProps,\n  opacity: 1,\n  xScale: false,\n  yScale: false,\n  sizeScale: () => 5,\n  colorScale: () => '#0f5499',\n  hollowDots: false,\n  labelColumn: 'name',\n  labelProps: false,\n  showTooltips: false,\n  labelStrokeWidth: 4,\n  highlightDotsOnHover: false,\n  offChartLabelPosition: 'intersection',\n  customTooltipComponent: false,\n};\n\nexport const lineComponentDefaultProps = {\n  data: genLines(3), // Generates 3 x date-value series\n  xVariable: 'date',\n  yVariable: 'value',\n  strokeWidth: 3,\n};\n\nexport const linesComponentDefaultProps = {\n  ...lineComponentDefaultProps,\n  highlightedLineOutlineWidth: 0,\n  highlightedLineOutlineColor: '#fff1e5',\n  hoveredLineStrokeWidth: 3,\n  hoveredLinesColorScale: () => '#b3a9a0',\n};\n\nexport const marimekkoKeyDefaultProps = {\n  ...baseComponentDefaultProps,\n  barHeightAnnotation: 'Bar height annotation',\n  barHeightAnnotationLineHeight: 20,\n  barHeightAnnotationWidth: 80,\n  keyBarsWidth: 40,\n  keyData: [\n    { bar: 'top', width: 40, height: 8 },\n    { bar: 'middle', width: 36, height: 20 },\n    { bar: 'bottom', width: 31, height: 8 },\n  ],\n  keyMarginBottom: 86,\n  keyHeight: 42,\n  keyTitle: 'Key',\n  keyTitleWidth: 36,\n};\n\nexport const barChartDefaultProps = {\n  ...barsComponentDefaultProps,\n  xAxisOrientation: 'bottom',\n  yAxisOrientation: 'left',\n  automaticallyAddPaddingForTicks: true,\n  // <Bars />\n  data: letterFrequency,\n  xVariable: 'frequency',\n  yVariable: 'letter',\n  colorScale: () => '#0f5499',\n  paddingInner: 0.1,\n  paddingOuter: 0.1,\n  roundScale: true,\n};\n\nexport const marimekkoChartDefaultProps = {\n  ...barsComponentDefaultProps,\n  ...marimekkoKeyDefaultProps,\n  marimekkoKey: false,\n  xAxisOrientation: 'top',\n  yAxisOrientation: 'left',\n  xHideAxisLine: true,\n  xFullLengthTicks: true,\n  xMin: false,\n  xMax: false,\n  xTicks: false,\n  // <Bars />\n  data: categoricalUsSampleData,\n  xVariable: 'margin',\n  yVariable: 'ecvotes',\n  yLabelVariable: 'state',\n  yAutomaticallyAddPaddingForTicks: true,\n  yTickLength: false,\n  barPaddingInner: 1,\n  barPaddingOuter: 2,\n};\n\nexport const connectedScatterChartDefaultProps = {\n  ...baseComponentDefaultProps,\n  data: [],\n  xVariable: 'x',\n  yVariable: 'y',\n  colorVariable: 'group',\n  orderVariable: 'date',\n  xAxisOrientation: 'bottom',\n  yAxisOrientation: 'left',\n  labelColumn: 'date',\n};\n\nexport const lineChartDefaultProps = {\n  ...baseComponentDefaultProps,\n  xAxisOrientation: 'bottom',\n  yAxisOrientation: 'left',\n  xFullLengthTicks: false,\n  yFullLengthTicks: false,\n  showLegend: true,\n  // <Lines />\n  data: genLines(3), // Generates 3 x date-value series\n  xVariable: 'date',\n  yVariable: [], // if elements of the array are passed in, then all columns are displayed as separate lines\n  xScaleType: 'time',\n  logScale: false,\n  showLineEndDots: false,\n  hideEndTicks: false,\n  showTooltips: false,\n  yTransformFunction: identity, // Identity function\n  showTooltipLine: false,\n  tooltipComponent: ({ seriesName, yValue }) => `${seriesName}: ${yValue}`,\n  // <Frame />\n  hideTopper: false,\n  hideFooter: false,\n  hideTitleTooltip: false,\n  seriesToHighlight: null,\n  labelStrokeColor: '#fff1e5',\n  labelStrokeWidth: 4,\n  // Color\n  ghostLineColor: '#b3a9a0',\n  ghostLineHoverColorScale: () => '#b3a9a0',\n  ghostLineHoverLabelColorScale: () => '#66605C',\n  additionalYTickValues: false,\n};\n\nexport const smallBarChartDefaultProps = {\n  ...barChartDefaultProps,\n};\n\nexport const scatterChartDefaultProps = {\n  ...baseComponentDefaultProps,\n  type: 'web',\n  data: [],\n  xVariable: 'x',\n  yVariable: 'y',\n  sizeVariable: false,\n  colorVariable: 'group',\n  colorScale: false,\n  xAxisOrientation: 'bottom',\n  yAxisOrientation: 'left',\n  xAxisLabel: false,\n  yAxisLabel: false,\n  logScaleX: false,\n  logScaleY: false,\n  yTickFormat: false,\n  yTransformFunction: identity,\n  yTickValues: false,\n  xTickFormat: false,\n  xTransformFunction: identity,\n  xTickValues: false,\n  maxCircleSize: {\n    web: 16,\n    print: 9.6,\n    social: 24,\n    video: 48,\n  },\n  opacity: 0.7,\n  scaleFactor: 1,\n  hollowDots: false,\n  dotsStrokeWidth: 0,\n  lineOfRegression: false,\n  labelColumn: 'name',\n  xDomain: [0, 10],\n  yDomain: [0, 10],\n  sizeDomain: [0, 0],\n  legendGeometry: 'circle',\n  legendOrientation: 'horizontal',\n  hideLegend: false,\n  hideSizeLegend: false,\n  sizeLegendX: 0,\n  sizeLegendY: 0,\n  showTooltips: false,\n  tooltipComponent: ({ seriesName, yValue }) => `${seriesName}: ${yValue}`,\n  tooltipPositionOverride: false,\n  tooltipHoverRadius: false,\n  hoveredDotsStrokeColor: '#000',\n  hoveredDotsStrokeWidth: 1,\n};\n\nexport const delaunayDefaultProps = {\n  colorScale: () => '#0f5499',\n  debug: false,\n  showLine: false,\n  showCircle: false,\n  yTransformFunction: false,\n  tooltipPositionOverride: false,\n  lineConfig: false,\n  circleConfig: false,\n  hoverRadius: false,\n};\n","/*!\n  Copyright (c) 2018 Jed Watson.\n  Licensed under the MIT License (MIT), see\n  http://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) continue;\n\n\t\t\tvar argType = typeof arg;\n\n\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\tclasses.push(arg);\n\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\tif (arg.length) {\n\t\t\t\t\tvar inner = classNames.apply(null, arg);\n\t\t\t\t\tif (inner) {\n\t\t\t\t\t\tclasses.push(inner);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tif (arg.toString === Object.prototype.toString) {\n\t\t\t\t\tfor (var key in arg) {\n\t\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tclasses.push(arg.toString());\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn classes.join(' ');\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","export const durationSecond = 1000;\nexport const durationMinute = durationSecond * 60;\nexport const durationHour = durationMinute * 60;\nexport const durationDay = durationHour * 24;\nexport const durationWeek = durationDay * 7;\nexport const durationMonth = durationDay * 30;\nexport const durationYear = durationDay * 365;\n","/**\n * @file\n * Utility functions\n */\n\nexport const convertMMtoPX = (x) => x * 2.83464480558843;\n\nexport const getResponsiveValues = (width, { topper = true, footer = true } = {}) => {\n  // Web extra large\n  if (width >= 1220) {\n    return {\n      height: 700,\n      margin: { top: topper ? 100 : 0, right: 5, bottom: footer ? 60 : 0, left: 20 },\n      sourceFontSize: 14,\n      sourceLineHeight: 16,\n      subtitleFontSize: 18,\n      subtitleLineHeight: 20,\n      subtitlePosition: { x: 1, y: 68 },\n      tickLabelStyle: {\n        fontSize: 18,\n      },\n      tickLength: 12,\n      titleFontSize: 28,\n      titleLineHeight: 28,\n      titlePosition: { x: 1, y: 36 },\n      axisLabelStyle: {\n        fontSize: 18,\n      },\n      width,\n    };\n  }\n  // Web large\n  if (width >= 980) {\n    return {\n      height: 500,\n      margin: { top: topper ? 100 : 0, right: 5, bottom: footer ? 60 : 0, left: 20 },\n      sourceFontSize: 14,\n      sourceLineHeight: 16,\n      subtitleFontSize: 18,\n      subtitleLineHeight: 20,\n      subtitlePosition: { x: 1, y: 68 },\n      tickLabelStyle: {\n        fontSize: 18,\n      },\n      tickLength: 12,\n      titleFontSize: 28,\n      titleLineHeight: 28,\n      titlePosition: { x: 1, y: 36 },\n      axisLabelStyle: {\n        fontSize: 18,\n      },\n      width,\n    };\n  }\n  // Web medium\n  if (width >= 490) {\n    return {\n      height: 400,\n      margin: { top: topper ? 90 : 0, right: 5, bottom: footer ? 50 : 0, left: 20 },\n      sourceFontSize: 14,\n      sourceLineHeight: 16,\n      subtitleFontSize: 18,\n      subtitleLineHeight: 20,\n      subtitlePosition: { x: 1, y: 64 },\n      tickLabelStyle: {\n        fontSize: 16,\n      },\n      tickLength: 12,\n      titleFontSize: 24,\n      titleLineHeight: 24,\n      titlePosition: { x: 1, y: 32 },\n      axisLabelStyle: {\n        fontSize: 16,\n      },\n      width,\n    };\n  }\n  // Web small\n  return {\n    height: 400,\n    margin: { top: topper ? 90 : 0, right: 5, bottom: footer ? 50 : 0, left: 15 },\n    sourceFontSize: 12,\n    sourceLineHeight: 14,\n    subtitleFontSize: 18,\n    subtitleLineHeight: 20,\n    subtitlePosition: { x: 1, y: 60 },\n    tickLength: 8,\n    tickLabelStyle: {\n      fontSize: 14,\n    },\n    titleFontSize: 20,\n    titleLineHeight: 20,\n    titlePosition: { x: 1, y: 28 },\n    axisLabelStyle: {\n      fontSize: 16,\n    },\n    width,\n  };\n};\n\nexport const identity = (d) => d;\n\nexport const isZeroOrDefined = (value) => value === 0 || value;\n\nexport const stripHTMLTags = (string) =>\n  string.replace(/(<([^>]+)>)/gi, '').replace(/(&nbsp;)/gi, ' ');\n","/**\n * @file\n * Assorted prop types used throughout\n */\n\nimport PropTypes from 'prop-types';\n\nexport const marginProp = PropTypes.shape({\n  top: PropTypes.number,\n  right: PropTypes.number,\n  bottom: PropTypes.number,\n  left: PropTypes.number,\n});\n\nexport const xyProp = PropTypes.shape({\n  x: PropTypes.number,\n  y: PropTypes.number,\n});\n\nexport const frameTypes = PropTypes.oneOf([\n  'Print',\n  'Social',\n  'Video',\n  'Web',\n  'print',\n  'social',\n  'video',\n  'web',\n]);\n\nexport const baseComponentPropTypes = {\n  width: PropTypes.oneOfType([PropTypes.number, PropTypes.bool]),\n  height: PropTypes.oneOfType([PropTypes.number, PropTypes.bool]),\n  margin: PropTypes.oneOfType([marginProp, PropTypes.bool]),\n  padding: marginProp,\n  type: frameTypes,\n};\n\nexport const chartFramePropTypes = {\n  type: frameTypes,\n};\n\nexport const framePropTypes = {\n  ...baseComponentPropTypes,\n  ...chartFramePropTypes,\n  background: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\n  children: PropTypes.oneOfType([PropTypes.node, PropTypes.arrayOf(PropTypes.node)]),\n  description: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\n  hideTitleTooltip: PropTypes.bool,\n  watermark: PropTypes.oneOfType([PropTypes.func, PropTypes.bool]),\n  watermarkOffset: xyProp,\n  hideTopper: PropTypes.bool,\n  hideFooter: PropTypes.bool,\n  tooltipStyle: PropTypes.object,\n  tooltipComponent: PropTypes.func,\n};\n\nexport const frameSocialPropTypes = {\n  ...framePropTypes,\n};\n\nexport const frameVideoPropTypes = {\n  ...framePropTypes,\n};\n\nexport const framePrintPropTypes = {\n  ...framePropTypes,\n};\n\nexport const chartTopperPropTypes = {\n  ...baseComponentPropTypes,\n  ...chartFramePropTypes,\n  stabRule: PropTypes.oneOfType([PropTypes.func, PropTypes.bool]),\n  subtitle: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\n  subtitleFontSize: PropTypes.number,\n  subtitleLineHeight: PropTypes.number,\n  subtitleMarkupCustom: PropTypes.bool,\n  subtitlePosition: xyProp,\n  subtitleStylesCustom: PropTypes.objectOf(\n    PropTypes.oneOfType([PropTypes.number, PropTypes.string])\n  ),\n  title: PropTypes.string,\n  titleFontSize: PropTypes.number,\n  titleLineHeight: PropTypes.number,\n  titleMarkupCustom: PropTypes.bool,\n  titlePosition: xyProp,\n  titleStylesCustom: PropTypes.objectOf(PropTypes.oneOfType([PropTypes.number, PropTypes.string])),\n};\n\nexport const chartFooterPropTypes = {\n  ...baseComponentPropTypes,\n  ...chartFramePropTypes,\n  copyright: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\n  source: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\n  sourceFontSize: PropTypes.number,\n  sourceLineHeight: PropTypes.number,\n  sourcePosition: xyProp,\n};\n\n// TODO: Remove “component” from names\n\nexport const axisArrowsComponentPropTypes = {\n  axisArrows: PropTypes.oneOfType([\n    PropTypes.bool,\n    PropTypes.arrayOf(\n      PropTypes.shape({\n        direction: PropTypes.oneOf(['left', 'right']),\n        startValue: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n        length: PropTypes.number,\n        value: PropTypes.string,\n      })\n    ),\n  ]),\n  axisArrowsScale: PropTypes.oneOfType([PropTypes.bool, PropTypes.func]),\n  axisArrowsPadding: PropTypes.shape({\n    top: PropTypes.number,\n    right: PropTypes.number,\n    bottom: PropTypes.number,\n    left: PropTypes.number,\n  }),\n};\n\n// @vx/axis (https://vx-demo.now.sh/static/docs/vx-axis.html)\nexport const axisComponentPropTypes = {\n  ...baseComponentPropTypes,\n  ...axisArrowsComponentPropTypes,\n  axisClassName: PropTypes.string,\n  axisLineClassName: PropTypes.string,\n  children: PropTypes.func,\n  hideAxisLine: PropTypes.bool,\n  hideTicks: PropTypes.bool,\n  hideZero: PropTypes.bool,\n  label: PropTypes.string,\n  labelClassName: PropTypes.string,\n  labelOffset: PropTypes.number,\n  labelProps: PropTypes.object,\n  left: PropTypes.number,\n  numTicks: PropTypes.number,\n  orientation: PropTypes.string, // Tick orientation. Only applies to <Axis />\n  rangePadding: PropTypes.number,\n  scale: PropTypes.oneOfType([PropTypes.func, PropTypes.bool]),\n  stroke: PropTypes.string,\n  strokeDasharray: PropTypes.string,\n  strokeWidth: PropTypes.number,\n  tickClassName: PropTypes.string,\n  tickComponent: PropTypes.func,\n  tickFormat: PropTypes.func,\n  tickLabelProps: PropTypes.func,\n  tickLengthOverride: PropTypes.oneOfType([PropTypes.number, PropTypes.bool]),\n  tickStroke: PropTypes.string,\n  tickTransform: PropTypes.string,\n  tickValues: PropTypes.oneOfType([PropTypes.array, PropTypes.bool]),\n  top: PropTypes.number,\n  fullLengthTick: PropTypes.bool,\n  hideEndTicks: PropTypes.bool,\n  additionalAxisStyles: PropTypes.object,\n  automaticallyAddPaddingForTicks: PropTypes.bool,\n  automaticallySetRange: PropTypes.bool,\n  tickPositionVariable: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\n  tickLabelVariable: PropTypes.string,\n  additionalTickValues: PropTypes.oneOfType([PropTypes.array, PropTypes.bool]),\n};\n\nexport const legendComponentPropTypes = {\n  draggable: PropTypes.bool,\n  shape: PropTypes.string,\n  pinnedPosition: PropTypes.oneOfType([\n    PropTypes.shape({\n      x: PropTypes.number,\n      y: PropTypes.number,\n    }),\n    PropTypes.bool,\n  ]),\n  orientation: PropTypes.oneOf(['vertical', 'horizontal']),\n};\n\nexport const regressionLineComponentPropTypes = {\n  data: PropTypes.arrayOf(PropTypes.any).isRequired,\n  xVariable: PropTypes.string.isRequired,\n  yVariable: PropTypes.string.isRequired,\n  xScale: PropTypes.func.isRequired,\n  yScale: PropTypes.func.isRequired,\n};\n\nexport const barsComponentPropTypes = {\n  ...baseComponentPropTypes,\n  data: PropTypes.arrayOf(PropTypes.any),\n  colorScale: PropTypes.oneOfType([PropTypes.func, PropTypes.bool]),\n  colorVariable: PropTypes.string,\n  fill: PropTypes.string,\n  xScale: PropTypes.oneOfType([PropTypes.func, PropTypes.bool]),\n  xVariable: PropTypes.string,\n  yScale: PropTypes.oneOfType([PropTypes.func, PropTypes.bool]),\n  yVariable: PropTypes.string,\n  barHeightVariable: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\n  fixedBarHeight: PropTypes.bool,\n  automaticallySetRange: PropTypes.bool,\n};\n\nexport const dotsComponentPropTypes = {\n  ...baseComponentPropTypes,\n  data: PropTypes.arrayOf(PropTypes.any).isRequired,\n  xVariable: PropTypes.string.isRequired,\n  yVariable: PropTypes.string.isRequired,\n  sizeVariable: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\n  colorVariable: PropTypes.string.isRequired,\n  opacity: PropTypes.number,\n  xScale: PropTypes.oneOfType([PropTypes.func, PropTypes.bool]),\n  yScale: PropTypes.oneOfType([PropTypes.func, PropTypes.bool]),\n  sizeScale: PropTypes.func,\n  colorScale: PropTypes.func,\n  hollowDots: PropTypes.bool,\n  labelColumn: PropTypes.string,\n  labelProps: PropTypes.oneOfType([PropTypes.func, PropTypes.bool]),\n  showTooltips: PropTypes.bool,\n  yTransformFunction: PropTypes.func,\n  strokeColor: PropTypes.string,\n  strokeWidth: PropTypes.number,\n  labelStrokeColor: PropTypes.string,\n  labelStrokeWidth: PropTypes.number,\n  highlightDotsOnHover: PropTypes.bool,\n  hoveredDotsColorScale: PropTypes.func,\n  hoveredDotsLabelColorScale: PropTypes.func,\n  labelColorScale: PropTypes.func,\n  offChartLabelPosition: PropTypes.oneOf(['intersection', 'end']),\n  customTooltipComponent: PropTypes.bool,\n};\n\nexport const lineComponentPropTypes = {\n  data: PropTypes.arrayOf(PropTypes.any),\n  fill: PropTypes.string,\n  xVariable: PropTypes.string,\n  yVariable: PropTypes.string,\n  xScale: PropTypes.func,\n  yScale: PropTypes.func,\n  colorScale: PropTypes.func,\n  strokeWidth: PropTypes.number,\n  yTransformFunction: PropTypes.func,\n  defined: PropTypes.oneOfType([PropTypes.func, PropTypes.bool]),\n};\n\nexport const linesComponentPropTypes = {\n  width: PropTypes.number,\n  height: PropTypes.number,\n  seriesNames: PropTypes.arrayOf(PropTypes.string),\n  data: PropTypes.arrayOf(PropTypes.any),\n  xVariable: PropTypes.string,\n  xScale: PropTypes.func,\n  yScale: PropTypes.func,\n  colorScale: PropTypes.func,\n  strokeWidth: PropTypes.number,\n  yTransformFunction: PropTypes.func,\n  defined: PropTypes.oneOfType([PropTypes.func, PropTypes.bool]),\n  highlightedLineOutlineWidthh: PropTypes.number,\n  highlightedLineOutlineColor: PropTypes.string,\n  // Props for hoverable lines\n  highlightLinesOnHover: PropTypes.bool,\n  hoveredLineStrokeWidth: PropTypes.number,\n  hoveredLinesColorScale: PropTypes.func,\n};\n\nexport const marimekkoKeyPropTypes = {\n  ...baseComponentPropTypes,\n  barHeightAnnotation: PropTypes.string,\n  barHeightAnnotationLineHeight: PropTypes.number,\n  barHeightAnnotationWidth: PropTypes.number,\n  keyBarsWidth: PropTypes.number,\n  keyData: PropTypes.arrayOf(PropTypes.any),\n  keyHeight: PropTypes.number,\n  keyMarginBottom: PropTypes.number,\n  keyTitle: PropTypes.string,\n  keyTitleWidth: PropTypes.number,\n  keyX: PropTypes.number,\n  keyY: PropTypes.number,\n};\n\nexport const barChartPropTypes = {\n  ...barsComponentPropTypes,\n  xAxisOrientation: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\n  yAxisOrientation: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\n  hideTopper: PropTypes.bool,\n  hideFooter: PropTypes.bool,\n  automaticallyAddPaddingForTicks: PropTypes.bool,\n  paddingInner: PropTypes.number,\n  paddingOuter: PropTypes.number,\n  yTickLength: PropTypes.number,\n  xTickLength: PropTypes.number,\n  hideXAxisLine: PropTypes.bool,\n  hideYAxisLine: PropTypes.bool,\n  background: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\n  xMax: PropTypes.number,\n  roundScale: PropTypes.bool,\n};\n\nexport const marimekkoChartPropTypes = {\n  ...barsComponentPropTypes,\n  ...marimekkoKeyPropTypes,\n  marimekkoKey: PropTypes.bool,\n  xAxisOrientation: PropTypes.string,\n  yAxisOrientation: PropTypes.string,\n  yLabelVariable: PropTypes.string,\n  yAutomaticallyAddPaddingForTicks: PropTypes.bool,\n  yTickLength: PropTypes.oneOfType([PropTypes.number, PropTypes.bool]),\n  barPaddingInner: PropTypes.number,\n  barPaddingOuter: PropTypes.number,\n  xHideAxisLine: PropTypes.bool,\n  xFullLengthTicks: PropTypes.bool,\n  xMax: PropTypes.oneOfType([PropTypes.number, PropTypes.bool]),\n  xMin: PropTypes.oneOfType([PropTypes.number, PropTypes.bool]),\n  xTicks: PropTypes.oneOfType([PropTypes.array, PropTypes.bool]),\n};\n\nexport const connectedScatterChartPropTypes = {\n  ...dotsComponentPropTypes,\n  ...linesComponentPropTypes,\n  orderVariable: PropTypes.string,\n  xAxisOrientation: PropTypes.string,\n  yAxisOrientation: PropTypes.string,\n};\n\nexport const lineChartPropTypes = {\n  ...linesComponentPropTypes,\n  xAxisOrientation: PropTypes.string,\n  yAxisOrientation: PropTypes.string,\n  yVariable: PropTypes.arrayOf(PropTypes.string),\n  logScale: PropTypes.bool,\n  yTickValues: PropTypes.array,\n  xFullLengthTicks: PropTypes.bool,\n  yFullLengthTicks: PropTypes.bool,\n  yMin: PropTypes.number,\n  yMax: PropTypes.number,\n  xScaleType: PropTypes.oneOf(['time', 'linear']),\n  showLegend: PropTypes.bool,\n  showLineEndDots: PropTypes.bool,\n  yTickFormat: PropTypes.func,\n  xTickFormat: PropTypes.func,\n  hideEndTicks: PropTypes.bool,\n  additionalAxisStyles: PropTypes.object,\n  stabRule: PropTypes.oneOfType([PropTypes.func, PropTypes.bool]),\n  xAxisLabel: PropTypes.string,\n  xAxisLabelOffset: PropTypes.number,\n  xAxisLabelProps: PropTypes.object,\n  showTooltips: PropTypes.bool,\n  tooltipStyle: PropTypes.object,\n  tooltipComponent: PropTypes.func,\n  showTooltipLine: PropTypes.bool,\n  hideTopper: PropTypes.bool,\n  hideFooter: PropTypes.bool,\n  hideTitleTooltip: PropTypes.bool,\n  seriesToHighlight: PropTypes.arrayOf(PropTypes.string),\n  labelStrokeColor: PropTypes.string,\n  labelStrokeWidth: PropTypes.number,\n  allLinesHoverable: PropTypes.bool,\n  lineColorPalette: PropTypes.array,\n  labelColorPalette: PropTypes.array,\n  ghostLineColor: PropTypes.string,\n  ghostLineHoverColorScale: PropTypes.func,\n  ghostLineHoverLabelColorScale: PropTypes.func,\n  highlightedLineOutlineWidth: PropTypes.number,\n  hoverRadius: PropTypes.number,\n  additionalYTickValues: PropTypes.oneOfType([PropTypes.array, PropTypes.bool]),\n};\n\nexport const smallBarChartPropTypes = {\n  ...barChartPropTypes,\n};\n\nexport const scatterChartPropTypes = {\n  ...dotsComponentPropTypes,\n  type: PropTypes.string,\n  xAxisOrientation: PropTypes.string,\n  yAxisOrientation: PropTypes.string,\n  xAxisLabel: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\n  yAxisLabel: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\n  colorScale: PropTypes.oneOfType([PropTypes.func, PropTypes.bool]),\n  logScaleX: PropTypes.bool,\n  logScaleY: PropTypes.bool,\n  yTickValues: PropTypes.oneOfType([PropTypes.array, PropTypes.bool]),\n  yTickFormat: PropTypes.oneOfType([PropTypes.func, PropTypes.bool]),\n  yTransformFunction: PropTypes.oneOfType([PropTypes.func, PropTypes.bool]),\n  xTickValues: PropTypes.oneOfType([PropTypes.array, PropTypes.bool]),\n  xTickFormat: PropTypes.oneOfType([PropTypes.func, PropTypes.bool]),\n  xTransformFunction: PropTypes.oneOfType([PropTypes.func, PropTypes.bool]),\n  legendGeometry: PropTypes.string,\n  legendOrientation: PropTypes.string,\n  hideLegend: PropTypes.bool,\n  hideSizeLegend: PropTypes.bool,\n  sizeLegendX: PropTypes.number,\n  sizeLegendY: PropTypes.number,\n  lineOfRegression: PropTypes.bool,\n  showTooltips: PropTypes.bool,\n  tooltipStyle: PropTypes.object,\n  tooltipComponent: PropTypes.func,\n  dotsStrokeWidth: PropTypes.number,\n  sizeDomain: PropTypes.arrayOf(PropTypes.number),\n  hoveredDotsStrokeColor: PropTypes.string,\n  hoveredDotsStrokeWidth: PropTypes.number,\n};\n\nexport const delaunayPropTypes = {\n  xScale: PropTypes.func.isRequired,\n  yScale: PropTypes.func.isRequired,\n  colorScale: PropTypes.func,\n  yTransformFunction: PropTypes.oneOfType([PropTypes.func, PropTypes.bool]),\n  xVariable: PropTypes.string.isRequired,\n  yVariable: PropTypes.string.inRequired,\n  data: PropTypes.array.isRequired,\n  debug: PropTypes.bool,\n  tooltipPositionOverride: PropTypes.oneOfType([PropTypes.func, PropTypes.bool]),\n  showLine: PropTypes.bool,\n  showCircle: PropTypes.bool,\n  lineConfig: PropTypes.oneOfType([PropTypes.object, PropTypes.bool]),\n  circleConfig: PropTypes.oneOfType([PropTypes.object, PropTypes.bool]),\n  hoverRadius: PropTypes.oneOfType([PropTypes.number, PropTypes.bool]),\n};\n","/**\n * Shared 'internal' scope.\n */\nimport {get} from './core/settings.js';\n\n/**\n * CUID Generator\n */\nimport {api as cuid} from '../libs/browser-cuid.js';\n\n/**\n * Record of callbacks to call when a page is tracked.\n */\nconst page_callbacks = [];\n\n/**\n * Log messages to the browser console. Requires 'log' to be set on init.\n *\n * @param {*} args items to log\n * @returns {void}\n */\nfunction log(...args) {\n\tif (get('config').test && window.console) {\n\t\tfor (const arg of args) {\n\t\t\twindow.console.log(arg);\n\t\t}\n\t}\n}\n\n/**\n * Tests if variable is a certain type. Defaults to check for undefined if no type specified.\n *\n * @param {*} variable - The variable to check.\n * @param {string=} type - The type to test for. Defaults to undefined.\n *\n * @returns {boolean} - The answer for if the variable is of type.\n */\nfunction is(variable, type = 'undefined') {\n\treturn typeof variable === type;\n}\n\n/**\n * Merge objects together. Will remove undefined and null values.\n *\n * @param {object} target - The original object to merge in to.\n * @param {object} options - The object to merge into the target. If omitted, will merge target into a new empty Object.\n *\n * @returns {object} The merged object.\n */\nfunction merge(target, options) {\n\tif (!options) {\n\t\toptions = target;\n\t\ttarget = {};\n\t}\n\n\tlet name;\n\tlet src;\n\tlet copy;\n\n\t/* jshint -W089 */\n\t/* eslint guard-for-in: 0 */\n\tfor (name in options) {\n\t\tsrc = target[name];\n\t\tcopy = options[name];\n\n\t\t// Prevent never-ending loop\n\t\tif (target === copy) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Gets rid of missing values too\n\t\tif (typeof copy !== 'undefined' && copy !== null) {\n\t\t\ttarget[name] = src === Object(src) && !is(src, 'function') ? merge(src, copy) : copy;\n\t\t}\n\t}\n\t/* jshint +W089 */\n\t/* jslint forin:true */\n\n\treturn target;\n}\n\n/**\n * URL encode a string.\n *\n * @param {string} str - The string to be encoded.\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n\tif (window.encodeURIComponent) {\n\t\treturn window.encodeURIComponent(str);\n\t} else {\n\t\treturn window.escape(str);\n\t}\n}\n\n/**\n * URL decode a string.\n *\n * @param {string} str - The string to be decoded.\n * @returns {string} The decoded string.\n */\nfunction decode(str) {\n\tif (window.decodeURIComponent) {\n\t\treturn window.decodeURIComponent(str);\n\t} else {\n\t\treturn window.unescape(str);\n\t}\n}\n\n/**\n * Utility to add event listeners.\n *\n * @param {Element} element\n * @param {string} event\n * @param {EventListenerOrEventListenerObject} listener\n * @returns {void}\n */\nfunction addEvent(element, event, listener) {\n\tif (element.addEventListener) {\n\t\telement.addEventListener(event, listener, false);\n\t} else {\n\t\telement.attachEvent('on' + event, listener);\n\t}\n}\n\n/**\n * Utility for dispatching custom events from window\n *\n * @param {string} namespace\n * @param {string} eventType\n * @param {object} detail\n * @returns {void}\n */\nfunction broadcast(namespace, eventType, detail) {\n\tdetail = detail || {};\n\ttry {\n\t\twindow.dispatchEvent(new CustomEvent(namespace + '.' + eventType, {\n\t\t\tdetail: detail,\n\t\t\tbubbles: true\n\t\t}));\n\t} catch (error) {\n\t\t// empty\n\t}\n}\n\n/**\n * Listen for page tracking requests.\n *\n * @param {Function} cb - The callback to be called whenever a page is tracked.\n * @returns {void}\n */\nfunction onPage(cb) {\n\tif (is(cb, 'function') && !page_callbacks.includes(cb)) {\n\t\tpage_callbacks.push(cb);\n\t}\n}\n\n/**\n * Trigger the 'page' listeners.\n *\n * @returns {void}\n */\nfunction triggerPage() {\n\tfor (let i = 0; i < page_callbacks.length; i++) {\n\t\tpage_callbacks[i]();\n\t}\n}\n\n/**\n * Get a value from document.cookie matching the first match of the regexp you supply\n *\n * @param {RegExp} matcher - The Regex to match with\n * @returns {string} - The vale from the cookie\n */\nfunction getValueFromCookie(matcher) {\n\treturn document.cookie.match(matcher) && RegExp.$1 !== '' && RegExp.$1 !== 'null' ? RegExp.$1 : null;\n}\n\n/**\n * Filter an object to only have the properties which are listed in the `allowlist` parameter.\n *\n * @param {object} objectToFilter - An object whose props need to be filtered\n * @param {Array} allowedPropertyNames - The list of props to allow\n * @returns {object} An object containing only the allowed props\n */\nfunction filterProperties (objectToFilter, allowedPropertyNames) {\n\tconst filteredObject = {};\n\tfor (const allowedName of allowedPropertyNames) {\n\t\tif (objectToFilter[allowedName]) {\n\t\t\tfilteredObject[allowedName] = objectToFilter[allowedName];\n\t\t}\n\t}\n\treturn filteredObject;\n}\n\n/**\n * Trim strings\n *\n * @param {string} str - The string to trim.\n * @returns {string} The trimmed string.\n */\nfunction sanitise (str) {\n\treturn typeof str === 'string' ? str.trim() : str;\n}\n\n/**\n * Assign the subject value if the target properties are undefined\n *\n * @param {object} subject - assign the value\n * @param {object} target - be assigned the value\n * @returns {void}\n */\nfunction assignIfUndefined (subject, target) {\n\tfor (const prop in subject) {\n\t\tif (!target[prop]) {\n\t\t\ttarget[prop] = subject[prop];\n\t\t} else {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.warn(`You can't set a custom property called ${prop}`);\n\t\t}\n\t}\n}\n\n/**\n * Used to find out all the paths which contain a circular reference.\n *\n * @param {*} rootObject The object we want to search within for circular references\n * @returns {string[]} Returns an array of strings, the strings are the full paths to the circular references within the rootObject\n */\nfunction findCircularPathsIn(rootObject) {\n\tconst traversedValues = new WeakSet();\n\tconst circularPaths = [];\n\n\tfunction _findCircularPathsIn(currentObject, path) {\n\t\t// If we already saw this object\n\t\t// the rootObject contains a circular reference\n\t\t// and we can stop looking any further into this currentObj\n\t\tif (traversedValues.has(currentObject)) {\n\t\t\tcircularPaths.push(path);\n\t\t\treturn;\n\t\t}\n\n\t\t// Only Objects and things which inherit from Objects can contain circular references\n\t\t// I.E. string/number/boolean/template literals can not contain circular references\n\t\tif (currentObject instanceof Object) {\n\t\t\ttraversedValues.add(currentObject);\n\n\t\t\t// Loop through all the values of the current object and search those for circular references\n\t\t\tfor (const [key, value] of Object.entries(currentObject)) {\n\t\t\t\t// No need to recurse on every value because only things which inherit\n\t\t\t\t// from Objects can contain circular references\n\t\t\t\tif (value instanceof Object) {\n\t\t\t\t\tconst parentObjectIsAnArray = Array.isArray(currentObject);\n\t\t\t\t\tif (parentObjectIsAnArray) {\n\t\t\t\t\t// Store path in bracket notation when value is an array\n\t\t\t\t\t\t_findCircularPathsIn(value, `${path}[${key}]`);\n\t\t\t\t\t} else {\n\t\t\t\t\t// Store path in dot-notation when value is an object\n\t\t\t\t\t\t_findCircularPathsIn(value, `${path}.${key}`);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t_findCircularPathsIn(rootObject, \"\");\n\treturn circularPaths;\n}\n\n/**\n * Used to find out whether an object contains a circular reference.\n *\n * @param {object} rootObject The object we want to search within for circular references\n * @returns {boolean} Returns true if a circular reference was found, otherwise returns false\n */\nfunction containsCircularPaths(rootObject) {\n\t// Used to keep track of all the values the rootObject contains\n\tconst traversedValues = new WeakSet();\n\n\t/**\n\t *\n\t * @param {*} currentObject The current object we want to search within for circular references\n\t * @returns {boolean|undefined} Returns true if a circular reference was found, otherwise returns undefined\n\t */\n\tfunction _containsCircularPaths(currentObject) {\n\t\t// If we already saw this object\n\t\t// the rootObject contains a circular reference\n\t\t// and we can stop looking any further\n\t\tif (traversedValues.has(currentObject)) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Only Objects and things which inherit from Objects can contain circular references\n\t\t// I.E. string/number/boolean/template literals can not contain circular references\n\t\tif (currentObject instanceof Object) {\n\t\t\ttraversedValues.add(currentObject);\n\t\t\t// Loop through all the values of the current object and search those for circular references\n\t\t\tfor (const value of Object.values(currentObject)) {\n\t\t\t\t// No need to recurse on every value because only things which inherit\n\t\t\t\t// from Objects can contain circular references\n\t\t\t\tif (value instanceof Object) {\n\t\t\t\t\tif (_containsCircularPaths(value)) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// _containsCircularPaths returns true or undefined.\n\t// By using Boolean we convert the undefined into false.\n\treturn Boolean(\n\t\t_containsCircularPaths(\n\t\t\trootObject\n\t\t)\n\t);\n}\n\n/**\n * Find out whether two objects are deeply equal to each other.\n *\n * @param {*} a\n * @param {*} b\n * @returns {boolean} - true if the two arguments are deeply equal\n */\nfunction isDeepEqual(a, b) {\n\tif (a === b) {\n\t\treturn true;\n\t}\n\n\tif (\n\t\ta &&\n\t\tb &&\n\t\ttypeof a === \"object\" &&\n\t\ttypeof b === \"object\"\n\t) {\n\t\tif (a.constructor !== b.constructor) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (Array.isArray(a)) {\n\t\t\tconst length = a.length;\n\t\t\tif (length !== b.length) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tfor (let i = length; i-- !== 0; ) {\n\t\t\t\tif (!isDeepEqual(a[i], b[i])) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\tif (a.constructor === RegExp) {\n\t\t\treturn (\n\t\t\t\ta.source === b.source && a.flags === b.flags\n\t\t\t);\n\t\t}\n\t\tif (a.valueOf !== Object.prototype.valueOf) {\n\t\t\treturn a.valueOf() === b.valueOf();\n\t\t}\n\t\tif (a.toString !== Object.prototype.toString) {\n\t\t\treturn a.toString() === b.toString();\n\t\t}\n\n\t\tconst keys = Object.keys(a);\n\t\tconst length = keys.length;\n\t\tif (length !== Object.keys(b).length) {\n\t\t\treturn false;\n\t\t}\n\n\t\tfor (let i = length; i-- !== 0; ) {\n\t\t\tif (!Object.prototype.hasOwnProperty.call(b, keys[i])) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (let i = length; i-- !== 0; ) {\n\t\t\tconst key = keys[i];\n\n\t\t\tif (!isDeepEqual(a[key], b[key])) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n}\n\nexport {\n\tlog,\n\tis,\n\tis as isUndefined,\n\tmerge,\n\tencode,\n\tdecode,\n\tcuid as guid,\n\taddEvent,\n\tbroadcast,\n\tonPage,\n\ttriggerPage,\n\tgetValueFromCookie,\n\tsanitise,\n\tassignIfUndefined,\n\tfilterProperties,\n\tfindCircularPathsIn,\n\tcontainsCircularPaths,\n\tisDeepEqual\n};\n","var arrayWithHoles = require(\"./arrayWithHoles.js\");\n\nvar iterableToArrayLimit = require(\"./iterableToArrayLimit.js\");\n\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray.js\");\n\nvar nonIterableRest = require(\"./nonIterableRest.js\");\n\nfunction _slicedToArray(arr, i) {\n  return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}\n\nmodule.exports = _slicedToArray;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","var arrayWithoutHoles = require(\"./arrayWithoutHoles.js\");\n\nvar iterableToArray = require(\"./iterableToArray.js\");\n\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray.js\");\n\nvar nonIterableSpread = require(\"./nonIterableSpread.js\");\n\nfunction _toConsumableArray(arr) {\n  return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}\n\nmodule.exports = _toConsumableArray;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","const months = '[\"' + 'January,February,March,April,May,June,July,August,September,October,November,December'.split(',').join('\",\"') + '\"]';\nconst days = '[\"' + 'Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday'.split(',').join('\",\"') + '\"]';\nconst formats = {\n\tdatetime: 'MMMM d yyyy h:mm a',\n\tdate: 'MMMM d yyyy'\n};\n\nconst compiledTemplates = {};\n\n/**\n * See http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html for formatting conventions used\n *\n *Comments indicate the value returned for 3.05 pm on Tuesday 4th February 2014\n */\nconst formatReplacementsMap = {\n\tMMMM: 'months[date.getMonth()]', // e.g. February\n\tMMM: 'months[date.getMonth()].substr(0,3)', // Feb\n\tMM: 'pad2(date.getMonth() + 1, 2)', // 02\n\tM: '(date.getMonth() + 1)', // 2\n\tyyyy: 'date.getFullYear()', // 2014\n\tyy: '(\"\"+date.getFullYear()).substr(-2, 2)', // 14\n\tEEEE: 'days[date.getDay()]', // Tuesday\n\tEEE: 'days[date.getDay()].substr(0,3)', // Tue\n\td: 'date.getDate()', // 4\n\tdd: 'pad2(date.getDate())', // 04\n\tdo: 'ordinal(date.getDate())', // 4th\n\tm: 'date.getMinutes()', // 5\n\tmm: 'pad2(date.getMinutes())', // 05\n\th: '(((date.getHours() + 11) % 12) + 1)', // 3\n\thh: 'pad2(((date.getHours() + 11) % 12) + 1)', // 03\n\tH: 'date.getHours()', // 15\n\tHH: 'pad2(date.getHours())', // 15\n\ta: '(date.getHours() >= 12 ? \"pm\" : \"am\")' // pm\n};\n\nconst inSeconds = {\n\tminute: 60,\n\thour: 60 * 60,\n\tday: 24 * 60 * 60,\n\tweek: 7 * 24 * 60 * 60,\n\tmonth: 60 * 60 * 24 * 30,\n\tyear: 365 * 24 * 60 * 60\n};\n\nfunction compile(format) {\n\tconst tpl = formats[format] || format;\n\n\tlet funcString = 'var months= ' + months + ', days= ' + days + ';';\n\tfuncString += 'function pad2 (number) {return (\"0\" + number).slice(-2)}';\n\tfuncString += `function ordinal(number) {\n\t\tconst suffixes = [\"th\", \"st\", \"nd\", \"rd\"];\n\t\tconst v = number % 100;\n\t\treturn number + (suffixes[(v - 20) % 10] || suffixes[v] || suffixes[0]);\n\t}`;\n\tfuncString += 'return \"' + tpl.replace(/\\\\?[a-z]+/ig, function (match) {\n\t\tif (match.charAt(0) === '\\\\') {\n\t\t\treturn match.substr(1);\n\t\t}\n\t\tconst replacer = formatReplacementsMap[match];\n\n\t\treturn replacer ? '\" + ' + replacer + ' + \"' : match;\n\t}) + '\"';\n\n\treturn (compiledTemplates[format] = new Function('date', funcString)); // eslint-disable-line no-new-func\n}\n\nconst ftDateFormat = {\n\ttoDate: function (date) {\n\t\tdate = date instanceof Date ? date : new Date(date);\n\t\tif (date.toString() !== 'Invalid Date') {\n\t\t\treturn date;\n\t\t}\n\t},\n\tasTodayOrYesterdayOrNothing: function (date) {\n\n\t\tif (!date) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst now = new Date();\n\t\tconst interval = ftDateFormat.getSecondsBetween(now, date);\n\n\t\tlet dateString;\n\n\t\t// If this was less than a day ago\n\t\tif (ftDateFormat.isToday(date, now, interval)) {\n\t\t\tdateString = 'today';\n\t\t} else if (ftDateFormat.isYesterday(date, now, interval)) {\n\t\t\tdateString = 'yesterday';\n\t\t} else {\n\t\t\tdateString = '';\n\t\t}\n\n\t\treturn dateString;\n\t},\n\tformat: function (date, dateFormat) {\n\t\tdateFormat = dateFormat || 'datetime';\n\t\tconst tpl = compiledTemplates[dateFormat] || compile(dateFormat);\n\t\tdate = ftDateFormat.toDate(date);\n\t\treturn date && tpl(date);\n\t},\n\ttimeAgo: function (date, interval, options) {\n\n\t\tdate = ftDateFormat.toDate(date);\n\t\tif (!date) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Accept an interval argument for backwards compatibility\n\t\tif (arguments.length === 2 && typeof interval === 'object') {\n\t\t\toptions = interval;\n\t\t\tinterval = options.interval;\n\t\t}\n\n\t\t// Default the interval option to the time since the given date\n\t\tif (!interval) {\n\t\t\tinterval = ftDateFormat.getSecondsBetween(new Date(), date);\n\t\t}\n\n\t\t// If a limit has been supplied and the interval is longer ago than that limit\n\t\tif (options && options.limit > 0 && (!interval || interval > options.limit)) {\n\t\t\treturn '';\n\t\t}\n\n\t\tconst abbreviated = options ? options.abbreviated : false;\n\n\t\tlet suffix = interval < 0 ? \"from now\" : \"ago\";\n\n\t\tinterval = Math.abs(interval);\n\n\t\tif (interval < inSeconds.minute) {\n\t\t\treturn `${abbreviated ? interval + 's' : interval + ' seconds'} ${suffix}`;\n\t\t} else if (interval < (1.5 * inSeconds.minute)) {\n\t\t\treturn `${abbreviated ? '1m' : 'a minute'} ${suffix}`;\n\t\t} else if (interval < (59 * inSeconds.minute)) {\n\t\t\treturn `${Math.round(interval / inSeconds.minute)}${abbreviated ? 'm' : ' minutes'} ${suffix}`;\n\t\t} else if (interval < (1.5 * inSeconds.hour)) {\n\t\t\treturn `${abbreviated ? '1h' : 'an hour'} ${suffix}`;\n\t\t} else if (interval < 22 * inSeconds.hour) {\n\t\t\treturn `${Math.round(interval / inSeconds.hour)}${abbreviated ? 'h' : ' hours'} ${suffix}`;\n\t\t} else if (interval < (1.5 * inSeconds.day)) {\n\t\t\treturn `${abbreviated ? '1d' : 'a day'} ${suffix}`;\n\t\t} else if (interval < 25 * inSeconds.day) {\n\t\t\treturn `${Math.round(interval / inSeconds.day)}${abbreviated ? 'd' : ' days'} ${suffix}`;\n\t\t} else if (interval < (45 * inSeconds.day)) {\n\t\t\treturn `${abbreviated ? '1mth' : 'a month'} ${suffix}`;\n\t\t} else if (interval < 345 * inSeconds.day) {\n\t\t\treturn `${Math.round(interval / inSeconds.month)}${abbreviated ? 'mth' : ' months'} ${suffix}`;\n\t\t} else if (interval < (547 * inSeconds.day)) {\n\t\t\treturn `${abbreviated ? '1y' : 'a year'} ${suffix}`;\n\t\t} else {\n\t\t\treturn `${ Math.max(2, Math.floor(interval / inSeconds.year))}${abbreviated ? 'y' : ' years'} ${suffix}`;\n\t\t}\n\t},\n\ttimeAgoNoSeconds: function (date) {\n\n\t\tif (!date) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst now = new Date();\n\t\tconst interval = ftDateFormat.getSecondsBetween(now, date);\n\n\t\t// If this was less than a minute ago\n\t\tif (interval < 60) {\n\t\t\treturn 'Less than a minute ago';\n\t\t}\n\t\treturn ftDateFormat.timeAgo(date);\n\t},\n\tftTime: function (dateObj) {\n\t\tconst now = new Date();\n\t\tconst interval = ftDateFormat.getSecondsBetween(now, dateObj);\n\t\tlet dateString;\n\n\t\t// If the date will occur in the next 5 minutes. This check is to allow for\n\t\t// reasonably differences in machine clocks.\n\t\tif (ftDateFormat.isNearFuture(interval)) {\n\t\t\tdateString = 'just now';\n\n\t\t\t// If it's beyond 5 minutes, fall back to printing the whole date, the machine\n\t\t\t// clock could be way out.\n\t\t} else if (ftDateFormat.isFarFuture(interval)) {\n\t\t\tdateString = ftDateFormat.format(dateObj, 'date');\n\n\t\t\t// Relative times for today or within the last 4 hours\n\t\t} else if (ftDateFormat.isToday(dateObj, now, interval) || (interval < (4 * inSeconds.hour))) {\n\t\t\tdateString = ftDateFormat.timeAgo(dateObj, interval);\n\n\t\t\t// 'Yesterday' for dates that occurred yesterday\n\t\t} else if (ftDateFormat.isYesterday(dateObj, now, interval)) {\n\t\t\tdateString = 'yesterday';\n\n\t\t\t// Else print the date\n\t\t} else {\n\t\t\tdateString = ftDateFormat.format(dateObj, 'date');\n\t\t}\n\n\t\treturn dateString;\n\t},\n\tgetSecondsBetween: function (time, otherTime) {\n\t\treturn Math.round((time - otherTime) / 1000);\n\t},\n\tisNearFuture: function (interval) {\n\t\t// If the interval within the next 5 minutes\n\t\treturn (interval < 0 && interval > -(5 * inSeconds.minute));\n\t},\n\tisFarFuture: function (interval) {\n\t\t// If the interval is further in the future than 5 minutes\n\t\treturn interval < -(5 * inSeconds.minute);\n\t},\n\tisToday: function (date, now, interval) {\n\t\tconst within24Hours = interval < inSeconds.day;\n\t\tconst sameDayOfWeek = now.getDay() === date.getDay();\n\t\treturn (within24Hours && sameDayOfWeek);\n\t},\n\tisYesterday: function (date, now, interval) {\n\t\tconst within48Hours = interval < 2 * inSeconds.day;\n\t\tconst consecutiveDaysOfTheWeek = now.getDay() === date.getDay() + 1;\n\t\treturn (within48Hours && consecutiveDaysOfTheWeek);\n\t},\n\tinSeconds\n};\n\nmodule.exports = ftDateFormat;\n","var t0 = new Date,\n    t1 = new Date;\n\nexport default function newInterval(floori, offseti, count, field) {\n\n  function interval(date) {\n    return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;\n  }\n\n  interval.floor = function(date) {\n    return floori(date = new Date(+date)), date;\n  };\n\n  interval.ceil = function(date) {\n    return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n  };\n\n  interval.round = function(date) {\n    var d0 = interval(date),\n        d1 = interval.ceil(date);\n    return date - d0 < d1 - date ? d0 : d1;\n  };\n\n  interval.offset = function(date, step) {\n    return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n  };\n\n  interval.range = function(start, stop, step) {\n    var range = [], previous;\n    start = interval.ceil(start);\n    step = step == null ? 1 : Math.floor(step);\n    if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n    do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n    while (previous < start && start < stop);\n    return range;\n  };\n\n  interval.filter = function(test) {\n    return newInterval(function(date) {\n      if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n    }, function(date, step) {\n      if (date >= date) {\n        if (step < 0) while (++step <= 0) {\n          while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n        } else while (--step >= 0) {\n          while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n        }\n      }\n    });\n  };\n\n  if (count) {\n    interval.count = function(start, end) {\n      t0.setTime(+start), t1.setTime(+end);\n      floori(t0), floori(t1);\n      return Math.floor(count(t0, t1));\n    };\n\n    interval.every = function(step) {\n      step = Math.floor(step);\n      return !isFinite(step) || !(step > 0) ? null\n          : !(step > 1) ? interval\n          : interval.filter(field\n              ? function(d) { return field(d) % step === 0; }\n              : function(d) { return interval.count(0, d) % step === 0; });\n    };\n  }\n\n  return interval;\n}\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n  return function(t) {\n    return a + t * d;\n  };\n}\n\nfunction exponential(a, b, y) {\n  return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n    return Math.pow(a + t * b, y);\n  };\n}\n\nexport function hue(a, b) {\n  var d = b - a;\n  return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n  return (y = +y) === 1 ? nogamma : function(a, b) {\n    return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n  };\n}\n\nexport default function nogamma(a, b) {\n  var d = b - a;\n  return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","/**\n * @file\n * Recreation of g-chartframe using visx\n */\n\nimport React from 'react';\nimport Frame from './base';\nimport FramePrint from './print';\nimport FrameSocial from './social';\nimport FrameVideo from './video';\nimport { chartFramePropTypes } from '../prop-types';\nimport { chartFrameDefaultProps } from '../default-props';\n\n/* eslint-disable react/jsx-props-no-spreading */\nconst ChartFrame = ({ type, ...props }) => {\n  const typeLower = type.toLowerCase();\n\n  switch (typeLower) {\n    case 'print':\n      return <FramePrint type={type} {...props} />;\n    case 'social':\n      return <FrameSocial type={typeLower} {...props} />;\n    case 'video':\n      return <FrameVideo type={type} {...props} />;\n    case 'web':\n    default:\n      return <Frame type={typeLower} {...props} />;\n  }\n};\n/* eslint-enable react/jsx-props-no-spreading */\n\nChartFrame.propTypes = chartFramePropTypes;\nChartFrame.defaultProps = chartFrameDefaultProps;\n\nexport default ChartFrame;\nexport { PlotContext } from './plot-context';\n","/**\n * @file\n * The plot Context object\n */\nimport { createContext } from 'react';\nimport { frameDefaultProps } from '../default-props';\n\n// eslint-disable-next-line import/prefer-default-export\nexport const PlotContext = createContext({\n  frameWidth: frameDefaultProps.width,\n  frameHeight: frameDefaultProps.height,\n  width: frameDefaultProps.width,\n  height: frameDefaultProps.height,\n  margin: frameDefaultProps.margin,\n  padding: { top: 0, right: 50, bottom: 0, left: 20 },\n  type: frameDefaultProps.type,\n  updatePadding: () => {},\n});\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nexport const Label = ({ x, y, category, textAnchor }) => {\n  return (\n    <text className=\"legend\" x={x} y={y} text-anchor={textAnchor}>\n      {category}\n    </text>\n  );\n};\n\nLabel.propTypes = {\n  x: PropTypes.number.isRequired,\n  y: PropTypes.number.isRequired,\n  category: PropTypes.string.isRequired,\n};\n\nexport default Label;\n","import { scaleLinear } from 'd3-scale';\nimport scaleOperator from '../operators/scaleOperator';\nexport var updateLinearScale = scaleOperator('domain', 'range', 'reverse', 'clamp', 'interpolate', 'nice', 'round', 'zero');\nexport default function createLinearScale(config) {\n  return updateLinearScale(scaleLinear(), config);\n}","var Orientation = {\n  top: 'top',\n  left: 'left',\n  right: 'right',\n  bottom: 'bottom'\n};\nexport default Orientation;","/**\n * @file\n * Grid components reflecting o-grid API\n */\n\nimport { GridChild } from './grid-child';\nimport { GridRow } from './grid-row';\nimport { GridContainer } from './grid-container';\n\nexport { GridChild };\nexport { GridRow };\nexport { GridContainer };\n\nexport default {\n  GridRow,\n  GridChild,\n  GridContainer,\n};\n","/**\n * @file\n * An o-grid child component\n */\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\n\nexport const GridChild = ({ children, colspan, ...props }) => {\n  switch (typeof colspan) {\n    case 'number':\n    case 'string':\n      return (\n        <div data-o-grid-colspan={colspan} {...props}>\n          {children}\n        </div>\n      );\n    default:\n      break;\n  }\n  return (\n    <div\n      data-o-grid-colspan={Object.entries(colspan)\n        .map(([breakpoint, size]) => `${breakpoint.toUpperCase()}${size}`)\n        .join(' ')}\n      {...props}\n    >\n      {children}\n    </div>\n  );\n};\n\nGridChild.displayName = 'GGridChild';\n\nGridChild.propTypes = {\n  children: PropTypes.node.isRequired,\n  colspan: PropTypes.oneOfType([\n    PropTypes.string,\n    PropTypes.number,\n    PropTypes.shape({\n      default: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n      s: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n      m: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n      l: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n      xl: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n      S: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n      M: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n      L: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n      XL: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n    }),\n  ]),\n};\n\nGridChild.defaultProps = {\n  colspan: 'full-width',\n};\n\nexport default GridChild;\n","/**\n * @file\n * An o-grid row component\n */\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\n\nexport const GridRow = ({ compact, children, ...props }) => (\n  <div className={classnames('o-grid-row', compact && 'o-grid-row--compact')} {...props}>\n    {children}\n  </div>\n);\n\nGridRow.displayName = 'GGridRow';\n\nGridRow.propTypes = {\n  compact: PropTypes.bool,\n  children: PropTypes.node.isRequired,\n};\n\nGridRow.defaultProps = {\n  compact: false,\n};\n\nexport default GridRow;\n","/**\n * @file\n * An o-grid container component\n */\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\n\nexport const GridContainer = ({ bleed, snappy, children, className, ...props }) => (\n  <div\n    className={classnames(\n      className,\n      'o-grid-container',\n      bleed && ' o-grid-container--bleed',\n      snappy && 'o-grid-container--snappy',\n    )}\n    {...props}\n  >\n    {children}\n  </div>\n);\n\nGridContainer.displayName = 'GGridContainer';\n\nGridContainer.propTypes = {\n  bleed: PropTypes.bool,\n  snappy: PropTypes.bool,\n  children: PropTypes.node.isRequired,\n};\n\nGridContainer.defaultProps = {\n  bleed: false,\n  snappy: false,\n};\n\nexport default GridContainer;\n","import * as Utils from '@financial-times/o-utils';\n\nlet debug;\n\n/**\n *\n * @param {string} eventType the name of the event\n * @param {object} data the payload of the event\n * @param {EventTarget} target the target of the event\n */\nfunction broadcast(eventType, data, target) {\n\ttarget = target || document.body;\n\n\tif (debug) {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.log('o-viewport', eventType, data);\n\t}\n\n\ttarget.dispatchEvent(\n\t\tnew CustomEvent('oViewport.' + eventType, {\n\t\t\tdetail: data,\n\t\t\tbubbles: true,\n\t\t})\n\t);\n}\n\n/**\n * Get the viewport height.\n *\n * @param {boolean} ignoreScrollbars [false] - set to true to discount scrollbar height.\n * @returns {number} viewport height\n */\nfunction getHeight(ignoreScrollbars) {\n\treturn ignoreScrollbars\n\t\t? document.documentElement.clientHeight\n\t\t: Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n}\n\n/**\n * Get the viewport width.\n *\n * @param {boolean} ignoreScrollbars [false] - set to true to discount scrollbar width\n * @returns {number} viewport width\n */\nfunction getWidth(ignoreScrollbars) {\n\treturn ignoreScrollbars\n\t\t? document.documentElement.clientWidth\n\t\t: Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n}\n\n/**\n * Viewport size.\n *\n * @typedef {object} Size\n * @property {number} height viewport height\n * @property {number} width viewport width\n */\n\n/**\n * Get the viewport width and height.\n *\n * @param {boolean} ignoreScrollbars [false] - set to true to discount scrollbar width/height.\n * @returns {Size} viewport width and height object\n */\nfunction getSize(ignoreScrollbars) {\n\treturn {\n\t\theight: getHeight(ignoreScrollbars),\n\t\twidth: getWidth(ignoreScrollbars),\n\t};\n}\n\n/**\n * Scroll position.\n *\n * @typedef {object} ScrollPosition\n * @property {number} height - `document.body.scrollHeight`\n * @property {number} width - `document.body.scrollWidth`\n * @property {number} left - `window.pageXOffset || window.scrollX`\n * @property {number} top - `window.pageYOffset || window.scrollY`\n */\n\n/**\n * @returns {ScrollPosition} current scroll info\n */\nfunction getScrollPosition() {\n\treturn {\n\t\theight: document.body.scrollHeight,\n\t\twidth: document.body.scrollWidth,\n\t\tleft: window.pageXOffset || window.scrollX,\n\t\ttop: window.pageYOffset || window.scrollY,\n\t};\n}\n\n/**\n * @returns {string} - 'portrait' or 'landscape'\n */\nfunction getOrientation() {\n\tconst orientation = window.screen.orientation;\n\tif (orientation) {\n\t\treturn typeof orientation === 'string'\n\t\t\t? orientation.split('-')[0]\n\t\t\t: orientation.type.split('-')[0];\n\t} else if (window.matchMedia) {\n\t\treturn window.matchMedia('(orientation: portrait)').matches\n\t\t\t? 'portrait'\n\t\t\t: 'landscape';\n\t} else {\n\t\treturn getHeight() >= getWidth() ? 'portrait' : 'landscape';\n\t}\n}\n\n/**\n * @returns {boolean} - true if the viewport is visible\n */\nfunction getVisibility() {\n\treturn document.hidden;\n}\n\nexport default {\n\tdebug: function () {\n\t\tdebug = true;\n\t},\n\tbroadcast,\n\tgetWidth,\n\tgetHeight,\n\tgetSize,\n\tgetScrollPosition,\n\tgetVisibility,\n\tgetOrientation,\n\tdebounce: Utils.debounce,\n\tthrottle: Utils.throttle,\n};\n","/**\n * @file\n * vv-axis\n */\n\nimport React, { useContext, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { Axis as VisxAxis, AxisTop, AxisRight, AxisBottom, AxisLeft } from '@visx/axis';\nimport { scaleOrdinal, inferScaleType } from '@visx/scale';\nimport { Group } from '@visx/group';\nimport { PlotContext } from '../chart-frame/plot-context';\nimport AxisArrows from './arrows';\nimport AxisBanding from './banding';\nimport {\n  webAxisStyles,\n  socialAxisStyles,\n  videoAxisStyles,\n  printAxisStyles,\n  combineStyles,\n} from './styles';\nimport { approximateTextSize } from '../../util/victory-textsize';\nimport { identity, getResponsiveValues } from '../../util';\nimport { axisComponentPropTypes } from '../prop-types';\nimport { axisComponentDefaultProps } from '../default-props';\n\nconst invertAxis = (invertScale, plotScale) => {\n  const newScale = plotScale.copy();\n  if (invertScale) {\n    const newRange = plotScale.range().reverse();\n    newScale.range(newRange);\n    return newScale;\n  }\n  return plotScale;\n};\n\nconst defaultTickComponent = ({ formattedValue, ...tickProps }) => {\n  return <text {...tickProps}>{formattedValue}</text>;\n};\n\ndefaultTickComponent.propTypes = {\n  formattedValue: PropTypes.string,\n};\n\ndefaultTickComponent.defaultProps = {\n  formattedValue: '',\n};\n\nconst Axis = ({\n  additionalAxisStyles,\n  automaticallyAddPaddingForTicks,\n  automaticallySetRange,\n  axisArrows,\n  axisArrowsPadding,\n  axisBanding,\n  fullLengthTicks,\n  hideAxisLine,\n  hideEndTicks,\n  hideTicks,\n  invertScale,\n  label,\n  labelOffset,\n  labelProps,\n  numTicks,\n  orientation,\n  scale,\n  tickComponent,\n  tickFormat,\n  tickLabelPadding = 10,\n  tickLabelProps,\n  tickLabelVariable,\n  tickLengthOverride,\n  tickPositionVariable,\n  tickValues,\n  additionalTickValues,\n  type,\n}) => {\n  const { frameWidth, width, height, updatePadding } = useContext(PlotContext);\n\n  // If using tickPositionVariable do not format the tick label\n  const format = tickPositionVariable\n    ? identity\n    : // Otherwise use the passed tickFormat function or the tickFormat function already set in the scale\n      tickFormat || (scale.tickFormat ? scale.tickFormat() : identity);\n\n  // Combine tick values with additional tick values\n  const allTickValues = additionalTickValues\n    ? // Combine with additional tick values and get unique set\n      [...new Set([...scale.ticks(), ...(additionalTickValues || [])])].sort((a, b) =>\n        // Sort from largest to smallest and invert if the range is inverted\n        scale.range()[0] < scale.range()[1] ? scale(a) - scale(b) : scale(b) - scale(a)\n      )\n    : tickValues;\n\n  // Extract the labels and positions from the tickValues if tickPositionVariable is set\n  const tickLabels = tickPositionVariable\n    ? allTickValues.map((d) => d[tickLabelVariable])\n    : allTickValues;\n  const tickPositions = tickPositionVariable\n    ? allTickValues.map((d) => d[tickPositionVariable])\n    : allTickValues;\n  // Only remove end ticks if prop set and no custom tick labels are being used\n  const tickValuesToUse =\n    tickLabels ||\n    (hideEndTicks && scale.ticks().slice(1, -1)) ||\n    (scale.ticks ? scale.ticks() : allTickValues) ||\n    scale.domain();\n\n  /* If tickPositionVariable is set, setup the ordinal scale to be used for tick positions instead.\n    Use the passed scale to calculate the position of each tick from the extracted tick positions\n  */\n  const tickScale = tickPositionVariable\n    ? scaleOrdinal({ domain: tickLabels, range: tickPositions.map((position) => scale(position)) })\n    : scale;\n\n  // Split the axis label into multiple lines\n  const labelLines = label ? label.split('|').map((l) => l.trim()) : [];\n  const numberOfLabelLines = labelLines.length;\n\n  // Get responsive values for axis\n  const { tickLength: responsiveTickLength, axisLabelStyle, tickLabelStyle } = getResponsiveValues(\n    frameWidth\n  );\n  const tickLength =\n    typeof tickLengthOverride === 'number' ? tickLengthOverride : responsiveTickLength;\n\n  // Get an array of the tick labels to be used to calculate the max tick width\n  const values = tickValuesToUse || (scale.ticks ? scale.ticks(numTicks) : scale.domain());\n\n  // Calculate max tick width for left/right padding\n  const maxTickWidth =\n    Math.max(\n      ...values\n        .map((d, i) => format(d, i))\n        .map(\n          (d) =>\n            approximateTextSize(d, {\n              fontFamily: 'MetricWeb-Regular',\n              fontSize: tickLabelStyle.fontSize,\n            }).width\n        )\n    ) +\n    // Tick length is ignored if using full length ticks\n    (fullLengthTicks ? 0 : tickLength) +\n    // This is ≅ 0.25em in VisX\n    tickLabelPadding;\n\n  /* VisX Axis components support passing a function, tickLabelProps, which can be used\n    to set additional props for each tick label (based on the label text and index if required).\n    We create a function which given a set of initial props for each tick label will return another\n    function which combines those initial props, any responsive tick label styles from getResponsiveValues\n    and any generated per tick label props from a tickLabelProps function if that prop is set\n  */\n  const calculateTickLabelProps = (initialProps) => (tickLabel, index) => {\n    const generatedTickLabelProps = tickLabelProps\n      ? tickLabelProps(tickLabel, index, tickLabelStyle)\n      : {};\n    return {\n      // Include default props for tick label e.g. pass dx/dy for each axis orientation\n      ...initialProps,\n      style: {\n        ...initialProps.style,\n        ...tickLabelStyle,\n      },\n      ...generatedTickLabelProps,\n    };\n  };\n\n  // Calculate the total height of the axis\n  const heightOfTicksWithLabels = tickLabelStyle.fontSize + (fullLengthTicks ? 0 : tickLength);\n  const heightOfAxisLabel = axisLabelStyle.fontSize * numberOfLabelLines;\n  const totalAxisHeight =\n    heightOfTicksWithLabels + (numberOfLabelLines > 0 ? (labelOffset || 0) + heightOfAxisLabel : 0);\n  const totalAxisWidth =\n    maxTickWidth + (numberOfLabelLines > 0 ? (labelOffset || 0) + heightOfAxisLabel : 0);\n\n  // Get css for frame and combine with any passed additional axis styles\n  let initialCss = webAxisStyles;\n  switch (type) {\n    case 'print':\n      initialCss = printAxisStyles;\n      break;\n    case 'social':\n      initialCss = socialAxisStyles;\n      break;\n    case 'video':\n      initialCss = videoAxisStyles;\n      break;\n    case 'web':\n    default:\n      initialCss = webAxisStyles;\n  }\n  const css = additionalAxisStyles ? combineStyles(initialCss, additionalAxisStyles) : initialCss;\n\n  // Update top or bottom padding\n  useEffect(() => {\n    if (automaticallyAddPaddingForTicks) {\n      if (orientation === 'bottom') {\n        updatePadding({ bottom: totalAxisHeight });\n      }\n      if (orientation === 'top') {\n        updatePadding({ top: totalAxisHeight });\n      }\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [automaticallyAddPaddingForTicks, orientation, totalAxisHeight]);\n\n  // Update padding for ticks if left or right axis\n  useEffect(() => {\n    if (automaticallyAddPaddingForTicks) {\n      if (orientation === 'left') {\n        updatePadding({ left: totalAxisWidth });\n      }\n      if (orientation === 'right') {\n        updatePadding({ right: totalAxisWidth });\n      }\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [automaticallyAddPaddingForTicks, maxTickWidth, orientation]);\n\n  // Axis banding component is passed the same prop for all axis orientations\n  const axisBandingElement = axisBanding ? (\n    <AxisBanding\n      bandingScale={scale}\n      width={width}\n      height={height}\n      orientation={orientation}\n      tickValues={tickValues || values}\n      structure={tickPositionVariable ? 'custom' : 'fixed'}\n      tickPositionVariable={tickPositionVariable}\n    />\n  ) : null;\n\n  switch (orientation) {\n    case 'top':\n      if (automaticallySetRange && !tickPositionVariable) scale.range([0, width]);\n      return (\n        <Group css={css}>\n          {axisBandingElement}\n          <AxisTop\n            top={fullLengthTicks ? height : 0}\n            hideAxisLine={hideAxisLine || fullLengthTicks}\n            hideTicks={hideTicks}\n            scale={invertAxis(invertScale, tickScale || scale)}\n            tickComponent={tickComponent || defaultTickComponent}\n            tickFormat={format}\n            tickLabelProps={calculateTickLabelProps({ dy: '-0.25em' })}\n            tickLength={fullLengthTicks ? height : tickLength}\n            tickValues={tickValuesToUse}\n          />\n          {label && (\n            <Group\n              className=\"visx-axis-label\"\n              top={\n                axisLabelStyle.fontSize -\n                (labelOffset || 0) -\n                heightOfTicksWithLabels -\n                heightOfAxisLabel\n              }\n              left={width / 2}\n            >\n              <text\n                {...labelProps}\n                style={{ fontSize: axisLabelStyle.fontSize, textAnchor: 'middle' }}\n              >\n                {labelLines.map((text, i) => (\n                  <tspan key={`text_${text}`} x={0} dy={i === 0 ? 0 : axisLabelStyle.fontSize}>\n                    {text}\n                  </tspan>\n                ))}\n              </text>\n            </Group>\n          )}\n          {axisArrows && (\n            <Group className=\"visx-axis-arrows\" top={labelOffset || 0}>\n              <AxisArrows\n                axisArrows={axisArrows}\n                axisArrowsPadding={axisArrowsPadding}\n                axisArrowsScale={scale}\n                orientation={orientation}\n              />\n            </Group>\n          )}\n        </Group>\n      );\n    case 'right':\n      if (automaticallySetRange && !tickPositionVariable && inferScaleType(scale) !== 'band')\n        scale.range([height, 0]);\n      if (automaticallySetRange && (tickPositionVariable || inferScaleType(scale) === 'band'))\n        scale.range([0, height]);\n      return (\n        <Group css={css}>\n          {axisBandingElement}\n          <AxisRight\n            left={fullLengthTicks ? 0 : width}\n            hideAxisLine={hideAxisLine || fullLengthTicks}\n            hideTicks={hideTicks}\n            scale={invertAxis(invertScale, tickScale || scale)}\n            tickComponent={tickComponent || defaultTickComponent}\n            tickFormat={format}\n            tickLabelProps={calculateTickLabelProps({ dx: '0.25em', dy: '0.25em' })}\n            tickLength={fullLengthTicks ? width : tickLength}\n            tickValues={tickValuesToUse}\n          />\n          {label && (\n            <Group\n              className=\"vx-axis-label\"\n              transform={`translate(${\n                fullLengthTicks\n                  ? maxTickWidth +\n                    (labelOffset || 0) +\n                    (numberOfLabelLines - 1) * axisLabelStyle.fontSize\n                  : width +\n                    maxTickWidth +\n                    (labelOffset || 0) +\n                    (numberOfLabelLines - 1) * axisLabelStyle.fontSize\n              }, ${height / 2}) rotate(90)`}\n            >\n              <text\n                {...labelProps}\n                style={{ fontSize: axisLabelStyle.fontSize, textAnchor: 'middle' }}\n              >\n                {labelLines.map((text, i) => (\n                  <tspan key={`text_${text}`} x={0} dy={i === 0 ? 0 : axisLabelStyle.fontSize}>\n                    {text}\n                  </tspan>\n                ))}\n              </text>\n            </Group>\n          )}\n        </Group>\n      );\n    case 'bottom':\n      if (automaticallySetRange && !tickPositionVariable) scale.range([0, width]);\n      return (\n        <Group css={css}>\n          {axisBandingElement}\n          <AxisBottom\n            top={fullLengthTicks ? 0 : height}\n            hideAxisLine={hideAxisLine || fullLengthTicks}\n            hideTicks={hideTicks}\n            scale={invertAxis(invertScale, tickScale || scale)}\n            tickComponent={tickComponent || defaultTickComponent}\n            tickFormat={format}\n            tickLabelProps={calculateTickLabelProps({ dy: '0.25em' })}\n            tickLength={fullLengthTicks ? height : tickLength}\n            tickValues={tickValuesToUse}\n          />\n          {label && (\n            <Group\n              className=\"visx-axis-label\"\n              top={height + heightOfTicksWithLabels + (labelOffset || 0) + axisLabelStyle.fontSize}\n              left={width / 2}\n            >\n              <text\n                {...labelProps}\n                style={{ fontSize: axisLabelStyle.fontSize, textAnchor: 'middle' }}\n              >\n                {labelLines.map((text, i) => (\n                  <tspan key={`text_${text}`} x={0} dy={i === 0 ? 0 : axisLabelStyle.fontSize}>\n                    {text}\n                  </tspan>\n                ))}\n              </text>\n            </Group>\n          )}\n          {axisArrows && (\n            <Group className=\"visx-axis-arrows\" top={height + (labelOffset || 0)}>\n              <AxisArrows\n                axisArrows={axisArrows}\n                axisArrowsPadding={axisArrowsPadding}\n                axisArrowsScale={scale}\n                orientation={orientation}\n              />\n            </Group>\n          )}\n        </Group>\n      );\n    case 'left':\n      if (automaticallySetRange && !tickPositionVariable && inferScaleType(scale) !== 'band')\n        scale.range([height, 0]);\n      if (automaticallySetRange && (tickPositionVariable || inferScaleType(scale) === 'band'))\n        scale.range([0, height]);\n      return (\n        <Group css={css}>\n          {axisBandingElement}\n          <AxisLeft\n            left={fullLengthTicks ? width : 0}\n            hideAxisLine={hideAxisLine || fullLengthTicks}\n            hideTicks={hideTicks}\n            scale={invertAxis(invertScale, tickScale || scale)}\n            tickComponent={tickComponent || defaultTickComponent}\n            tickFormat={format}\n            tickLabelProps={calculateTickLabelProps({ dx: '-0.25em', dy: '0.25em' })}\n            tickLength={fullLengthTicks ? width : tickLength}\n            tickValues={tickValuesToUse}\n          />\n          {label && (\n            <Group\n              className=\"vx-axis-label\"\n              transform={`translate(${\n                -maxTickWidth -\n                (labelOffset || 0) -\n                (numberOfLabelLines - 1) * axisLabelStyle.fontSize\n              }, ${height / 2}) rotate(-90)`}\n            >\n              <text\n                {...labelProps}\n                style={{ fontSize: axisLabelStyle.fontSize, textAnchor: 'middle' }}\n              >\n                {labelLines.map((text, i) => (\n                  <tspan key={`text_${text}`} x={0} dy={i === 0 ? 0 : axisLabelStyle.fontSize}>\n                    {text}\n                  </tspan>\n                ))}\n              </text>\n            </Group>\n          )}\n        </Group>\n      );\n    default:\n      return (\n        <Group css={css}>\n          <VisxAxis\n            tickComponent={tickComponent || defaultTickComponent}\n            tickFormat={format}\n            scale={scale}\n          />\n        </Group>\n      );\n  }\n};\n\nAxis.propTypes = axisComponentPropTypes;\nAxis.defaultProps = axisComponentDefaultProps;\n\nexport default Axis;\n","var t0 = new Date,\n    t1 = new Date;\n\nexport default function newInterval(floori, offseti, count, field) {\n\n  function interval(date) {\n    return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;\n  }\n\n  interval.floor = function(date) {\n    return floori(date = new Date(+date)), date;\n  };\n\n  interval.ceil = function(date) {\n    return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n  };\n\n  interval.round = function(date) {\n    var d0 = interval(date),\n        d1 = interval.ceil(date);\n    return date - d0 < d1 - date ? d0 : d1;\n  };\n\n  interval.offset = function(date, step) {\n    return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n  };\n\n  interval.range = function(start, stop, step) {\n    var range = [], previous;\n    start = interval.ceil(start);\n    step = step == null ? 1 : Math.floor(step);\n    if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n    do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n    while (previous < start && start < stop);\n    return range;\n  };\n\n  interval.filter = function(test) {\n    return newInterval(function(date) {\n      if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n    }, function(date, step) {\n      if (date >= date) {\n        if (step < 0) while (++step <= 0) {\n          while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n        } else while (--step >= 0) {\n          while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n        }\n      }\n    });\n  };\n\n  if (count) {\n    interval.count = function(start, end) {\n      t0.setTime(+start), t1.setTime(+end);\n      floori(t0), floori(t1);\n      return Math.floor(count(t0, t1));\n    };\n\n    interval.every = function(step) {\n      step = Math.floor(step);\n      return !isFinite(step) || !(step > 0) ? null\n          : !(step > 1) ? interval\n          : interval.filter(field\n              ? function(d) { return field(d) % step === 0; }\n              : function(d) { return interval.count(0, d) % step === 0; });\n    };\n  }\n\n  return interval;\n}\n","import interval from \"./interval.js\";\nimport {durationWeek} from \"./duration.js\";\n\nfunction utcWeekday(i) {\n  return interval(function(date) {\n    date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n    date.setUTCHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setUTCDate(date.getUTCDate() + step * 7);\n  }, function(start, end) {\n    return (end - start) / durationWeek;\n  });\n}\n\nexport var utcSunday = utcWeekday(0);\nexport var utcMonday = utcWeekday(1);\nexport var utcTuesday = utcWeekday(2);\nexport var utcWednesday = utcWeekday(3);\nexport var utcThursday = utcWeekday(4);\nexport var utcFriday = utcWeekday(5);\nexport var utcSaturday = utcWeekday(6);\n\nexport var utcSundays = utcSunday.range;\nexport var utcMondays = utcMonday.range;\nexport var utcTuesdays = utcTuesday.range;\nexport var utcWednesdays = utcWednesday.range;\nexport var utcThursdays = utcThursday.range;\nexport var utcFridays = utcFriday.range;\nexport var utcSaturdays = utcSaturday.range;\n","export var durationSecond = 1e3;\nexport var durationMinute = 6e4;\nexport var durationHour = 36e5;\nexport var durationDay = 864e5;\nexport var durationWeek = 6048e5;\n","import interval from \"./interval.js\";\nimport {durationDay} from \"./duration.js\";\n\nvar utcDay = interval(function(date) {\n  date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n  date.setUTCDate(date.getUTCDate() + step);\n}, function(start, end) {\n  return (end - start) / durationDay;\n}, function(date) {\n  return date.getUTCDate() - 1;\n});\n\nexport default utcDay;\nexport var utcDays = utcDay.range;\n","import interval from \"./interval.js\";\nimport {durationMinute, durationWeek} from \"./duration.js\";\n\nfunction weekday(i) {\n  return interval(function(date) {\n    date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n    date.setHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setDate(date.getDate() + step * 7);\n  }, function(start, end) {\n    return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n  });\n}\n\nexport var sunday = weekday(0);\nexport var monday = weekday(1);\nexport var tuesday = weekday(2);\nexport var wednesday = weekday(3);\nexport var thursday = weekday(4);\nexport var friday = weekday(5);\nexport var saturday = weekday(6);\n\nexport var sundays = sunday.range;\nexport var mondays = monday.range;\nexport var tuesdays = tuesday.range;\nexport var wednesdays = wednesday.range;\nexport var thursdays = thursday.range;\nexport var fridays = friday.range;\nexport var saturdays = saturday.range;\n","import interval from \"./interval.js\";\nimport {durationDay, durationMinute} from \"./duration.js\";\n\nvar day = interval(function(date) {\n  date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n  date.setDate(date.getDate() + step);\n}, function(start, end) {\n  return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay;\n}, function(date) {\n  return date.getDate() - 1;\n});\n\nexport default day;\nexport var days = day.range;\n","import interval from \"./interval.js\";\n\nvar year = interval(function(date) {\n  date.setMonth(0, 1);\n  date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n  date.setFullYear(date.getFullYear() + step);\n}, function(start, end) {\n  return end.getFullYear() - start.getFullYear();\n}, function(date) {\n  return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\nyear.every = function(k) {\n  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n    date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n    date.setMonth(0, 1);\n    date.setHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setFullYear(date.getFullYear() + step * k);\n  });\n};\n\nexport default year;\nexport var years = year.range;\n","import interval from \"./interval.js\";\n\nvar utcYear = interval(function(date) {\n  date.setUTCMonth(0, 1);\n  date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n  date.setUTCFullYear(date.getUTCFullYear() + step);\n}, function(start, end) {\n  return end.getUTCFullYear() - start.getUTCFullYear();\n}, function(date) {\n  return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = function(k) {\n  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n    date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n    date.setUTCMonth(0, 1);\n    date.setUTCHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setUTCFullYear(date.getUTCFullYear() + step * k);\n  });\n};\n\nexport default utcYear;\nexport var utcYears = utcYear.range;\n","import {\n  timeDay,\n  timeSunday,\n  timeMonday,\n  timeThursday,\n  timeYear,\n  utcDay,\n  utcSunday,\n  utcMonday,\n  utcThursday,\n  utcYear\n} from \"d3-time\";\n\nfunction localDate(d) {\n  if (0 <= d.y && d.y < 100) {\n    var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n    date.setFullYear(d.y);\n    return date;\n  }\n  return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n  if (0 <= d.y && d.y < 100) {\n    var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n    date.setUTCFullYear(d.y);\n    return date;\n  }\n  return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newDate(y, m, d) {\n  return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(locale) {\n  var locale_dateTime = locale.dateTime,\n      locale_date = locale.date,\n      locale_time = locale.time,\n      locale_periods = locale.periods,\n      locale_weekdays = locale.days,\n      locale_shortWeekdays = locale.shortDays,\n      locale_months = locale.months,\n      locale_shortMonths = locale.shortMonths;\n\n  var periodRe = formatRe(locale_periods),\n      periodLookup = formatLookup(locale_periods),\n      weekdayRe = formatRe(locale_weekdays),\n      weekdayLookup = formatLookup(locale_weekdays),\n      shortWeekdayRe = formatRe(locale_shortWeekdays),\n      shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n      monthRe = formatRe(locale_months),\n      monthLookup = formatLookup(locale_months),\n      shortMonthRe = formatRe(locale_shortMonths),\n      shortMonthLookup = formatLookup(locale_shortMonths);\n\n  var formats = {\n    \"a\": formatShortWeekday,\n    \"A\": formatWeekday,\n    \"b\": formatShortMonth,\n    \"B\": formatMonth,\n    \"c\": null,\n    \"d\": formatDayOfMonth,\n    \"e\": formatDayOfMonth,\n    \"f\": formatMicroseconds,\n    \"g\": formatYearISO,\n    \"G\": formatFullYearISO,\n    \"H\": formatHour24,\n    \"I\": formatHour12,\n    \"j\": formatDayOfYear,\n    \"L\": formatMilliseconds,\n    \"m\": formatMonthNumber,\n    \"M\": formatMinutes,\n    \"p\": formatPeriod,\n    \"q\": formatQuarter,\n    \"Q\": formatUnixTimestamp,\n    \"s\": formatUnixTimestampSeconds,\n    \"S\": formatSeconds,\n    \"u\": formatWeekdayNumberMonday,\n    \"U\": formatWeekNumberSunday,\n    \"V\": formatWeekNumberISO,\n    \"w\": formatWeekdayNumberSunday,\n    \"W\": formatWeekNumberMonday,\n    \"x\": null,\n    \"X\": null,\n    \"y\": formatYear,\n    \"Y\": formatFullYear,\n    \"Z\": formatZone,\n    \"%\": formatLiteralPercent\n  };\n\n  var utcFormats = {\n    \"a\": formatUTCShortWeekday,\n    \"A\": formatUTCWeekday,\n    \"b\": formatUTCShortMonth,\n    \"B\": formatUTCMonth,\n    \"c\": null,\n    \"d\": formatUTCDayOfMonth,\n    \"e\": formatUTCDayOfMonth,\n    \"f\": formatUTCMicroseconds,\n    \"g\": formatUTCYearISO,\n    \"G\": formatUTCFullYearISO,\n    \"H\": formatUTCHour24,\n    \"I\": formatUTCHour12,\n    \"j\": formatUTCDayOfYear,\n    \"L\": formatUTCMilliseconds,\n    \"m\": formatUTCMonthNumber,\n    \"M\": formatUTCMinutes,\n    \"p\": formatUTCPeriod,\n    \"q\": formatUTCQuarter,\n    \"Q\": formatUnixTimestamp,\n    \"s\": formatUnixTimestampSeconds,\n    \"S\": formatUTCSeconds,\n    \"u\": formatUTCWeekdayNumberMonday,\n    \"U\": formatUTCWeekNumberSunday,\n    \"V\": formatUTCWeekNumberISO,\n    \"w\": formatUTCWeekdayNumberSunday,\n    \"W\": formatUTCWeekNumberMonday,\n    \"x\": null,\n    \"X\": null,\n    \"y\": formatUTCYear,\n    \"Y\": formatUTCFullYear,\n    \"Z\": formatUTCZone,\n    \"%\": formatLiteralPercent\n  };\n\n  var parses = {\n    \"a\": parseShortWeekday,\n    \"A\": parseWeekday,\n    \"b\": parseShortMonth,\n    \"B\": parseMonth,\n    \"c\": parseLocaleDateTime,\n    \"d\": parseDayOfMonth,\n    \"e\": parseDayOfMonth,\n    \"f\": parseMicroseconds,\n    \"g\": parseYear,\n    \"G\": parseFullYear,\n    \"H\": parseHour24,\n    \"I\": parseHour24,\n    \"j\": parseDayOfYear,\n    \"L\": parseMilliseconds,\n    \"m\": parseMonthNumber,\n    \"M\": parseMinutes,\n    \"p\": parsePeriod,\n    \"q\": parseQuarter,\n    \"Q\": parseUnixTimestamp,\n    \"s\": parseUnixTimestampSeconds,\n    \"S\": parseSeconds,\n    \"u\": parseWeekdayNumberMonday,\n    \"U\": parseWeekNumberSunday,\n    \"V\": parseWeekNumberISO,\n    \"w\": parseWeekdayNumberSunday,\n    \"W\": parseWeekNumberMonday,\n    \"x\": parseLocaleDate,\n    \"X\": parseLocaleTime,\n    \"y\": parseYear,\n    \"Y\": parseFullYear,\n    \"Z\": parseZone,\n    \"%\": parseLiteralPercent\n  };\n\n  // These recursive directive definitions must be deferred.\n  formats.x = newFormat(locale_date, formats);\n  formats.X = newFormat(locale_time, formats);\n  formats.c = newFormat(locale_dateTime, formats);\n  utcFormats.x = newFormat(locale_date, utcFormats);\n  utcFormats.X = newFormat(locale_time, utcFormats);\n  utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n  function newFormat(specifier, formats) {\n    return function(date) {\n      var string = [],\n          i = -1,\n          j = 0,\n          n = specifier.length,\n          c,\n          pad,\n          format;\n\n      if (!(date instanceof Date)) date = new Date(+date);\n\n      while (++i < n) {\n        if (specifier.charCodeAt(i) === 37) {\n          string.push(specifier.slice(j, i));\n          if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n          else pad = c === \"e\" ? \" \" : \"0\";\n          if (format = formats[c]) c = format(date, pad);\n          string.push(c);\n          j = i + 1;\n        }\n      }\n\n      string.push(specifier.slice(j, i));\n      return string.join(\"\");\n    };\n  }\n\n  function newParse(specifier, Z) {\n    return function(string) {\n      var d = newDate(1900, undefined, 1),\n          i = parseSpecifier(d, specifier, string += \"\", 0),\n          week, day;\n      if (i != string.length) return null;\n\n      // If a UNIX timestamp is specified, return it.\n      if (\"Q\" in d) return new Date(d.Q);\n      if (\"s\" in d) return new Date(d.s * 1000 + (\"L\" in d ? d.L : 0));\n\n      // If this is utcParse, never use the local timezone.\n      if (Z && !(\"Z\" in d)) d.Z = 0;\n\n      // The am-pm flag is 0 for AM, and 1 for PM.\n      if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n      // If the month was not specified, inherit from the quarter.\n      if (d.m === undefined) d.m = \"q\" in d ? d.q : 0;\n\n      // Convert day-of-week and week-of-year to day-of-year.\n      if (\"V\" in d) {\n        if (d.V < 1 || d.V > 53) return null;\n        if (!(\"w\" in d)) d.w = 1;\n        if (\"Z\" in d) {\n          week = utcDate(newDate(d.y, 0, 1)), day = week.getUTCDay();\n          week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n          week = utcDay.offset(week, (d.V - 1) * 7);\n          d.y = week.getUTCFullYear();\n          d.m = week.getUTCMonth();\n          d.d = week.getUTCDate() + (d.w + 6) % 7;\n        } else {\n          week = localDate(newDate(d.y, 0, 1)), day = week.getDay();\n          week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n          week = timeDay.offset(week, (d.V - 1) * 7);\n          d.y = week.getFullYear();\n          d.m = week.getMonth();\n          d.d = week.getDate() + (d.w + 6) % 7;\n        }\n      } else if (\"W\" in d || \"U\" in d) {\n        if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n        day = \"Z\" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();\n        d.m = 0;\n        d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n      }\n\n      // If a time zone is specified, all fields are interpreted as UTC and then\n      // offset according to the specified time zone.\n      if (\"Z\" in d) {\n        d.H += d.Z / 100 | 0;\n        d.M += d.Z % 100;\n        return utcDate(d);\n      }\n\n      // Otherwise, all fields are in local time.\n      return localDate(d);\n    };\n  }\n\n  function parseSpecifier(d, specifier, string, j) {\n    var i = 0,\n        n = specifier.length,\n        m = string.length,\n        c,\n        parse;\n\n    while (i < n) {\n      if (j >= m) return -1;\n      c = specifier.charCodeAt(i++);\n      if (c === 37) {\n        c = specifier.charAt(i++);\n        parse = parses[c in pads ? specifier.charAt(i++) : c];\n        if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n      } else if (c != string.charCodeAt(j++)) {\n        return -1;\n      }\n    }\n\n    return j;\n  }\n\n  function parsePeriod(d, string, i) {\n    var n = periodRe.exec(string.slice(i));\n    return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n  }\n\n  function parseShortWeekday(d, string, i) {\n    var n = shortWeekdayRe.exec(string.slice(i));\n    return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n  }\n\n  function parseWeekday(d, string, i) {\n    var n = weekdayRe.exec(string.slice(i));\n    return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n  }\n\n  function parseShortMonth(d, string, i) {\n    var n = shortMonthRe.exec(string.slice(i));\n    return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n  }\n\n  function parseMonth(d, string, i) {\n    var n = monthRe.exec(string.slice(i));\n    return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n  }\n\n  function parseLocaleDateTime(d, string, i) {\n    return parseSpecifier(d, locale_dateTime, string, i);\n  }\n\n  function parseLocaleDate(d, string, i) {\n    return parseSpecifier(d, locale_date, string, i);\n  }\n\n  function parseLocaleTime(d, string, i) {\n    return parseSpecifier(d, locale_time, string, i);\n  }\n\n  function formatShortWeekday(d) {\n    return locale_shortWeekdays[d.getDay()];\n  }\n\n  function formatWeekday(d) {\n    return locale_weekdays[d.getDay()];\n  }\n\n  function formatShortMonth(d) {\n    return locale_shortMonths[d.getMonth()];\n  }\n\n  function formatMonth(d) {\n    return locale_months[d.getMonth()];\n  }\n\n  function formatPeriod(d) {\n    return locale_periods[+(d.getHours() >= 12)];\n  }\n\n  function formatQuarter(d) {\n    return 1 + ~~(d.getMonth() / 3);\n  }\n\n  function formatUTCShortWeekday(d) {\n    return locale_shortWeekdays[d.getUTCDay()];\n  }\n\n  function formatUTCWeekday(d) {\n    return locale_weekdays[d.getUTCDay()];\n  }\n\n  function formatUTCShortMonth(d) {\n    return locale_shortMonths[d.getUTCMonth()];\n  }\n\n  function formatUTCMonth(d) {\n    return locale_months[d.getUTCMonth()];\n  }\n\n  function formatUTCPeriod(d) {\n    return locale_periods[+(d.getUTCHours() >= 12)];\n  }\n\n  function formatUTCQuarter(d) {\n    return 1 + ~~(d.getUTCMonth() / 3);\n  }\n\n  return {\n    format: function(specifier) {\n      var f = newFormat(specifier += \"\", formats);\n      f.toString = function() { return specifier; };\n      return f;\n    },\n    parse: function(specifier) {\n      var p = newParse(specifier += \"\", false);\n      p.toString = function() { return specifier; };\n      return p;\n    },\n    utcFormat: function(specifier) {\n      var f = newFormat(specifier += \"\", utcFormats);\n      f.toString = function() { return specifier; };\n      return f;\n    },\n    utcParse: function(specifier) {\n      var p = newParse(specifier += \"\", true);\n      p.toString = function() { return specifier; };\n      return p;\n    }\n  };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n    numberRe = /^\\s*\\d+/, // note: ignores next directive\n    percentRe = /^%/,\n    requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad(value, fill, width) {\n  var sign = value < 0 ? \"-\" : \"\",\n      string = (sign ? -value : value) + \"\",\n      length = string.length;\n  return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n  return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n  return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n  var map = {}, i = -1, n = names.length;\n  while (++i < n) map[names[i].toLowerCase()] = i;\n  return map;\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 1));\n  return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 1));\n  return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 4));\n  return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n  var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n  return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseQuarter(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 1));\n  return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 3));\n  return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 3));\n  return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 6));\n  return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n  var n = percentRe.exec(string.slice(i, i + 1));\n  return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n  var n = numberRe.exec(string.slice(i));\n  return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i));\n  return n ? (d.s = +n[0], i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n  return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n  return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n  return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n  return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n  return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n  return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n  return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n  return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n  return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n  var day = d.getDay();\n  return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n  return pad(timeSunday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction dISO(d) {\n  var day = d.getDay();\n  return (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n}\n\nfunction formatWeekNumberISO(d, p) {\n  d = dISO(d);\n  return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n  return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n  return pad(timeMonday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction formatYear(d, p) {\n  return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatYearISO(d, p) {\n  d = dISO(d);\n  return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n  return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatFullYearISO(d, p) {\n  var day = d.getDay();\n  d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n  return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n  var z = d.getTimezoneOffset();\n  return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n      + pad(z / 60 | 0, \"0\", 2)\n      + pad(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n  return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n  return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n  return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n  return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n  return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n  return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n  return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n  return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n  return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n  var dow = d.getUTCDay();\n  return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n  return pad(utcSunday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction UTCdISO(d) {\n  var day = d.getUTCDay();\n  return (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n  d = UTCdISO(d);\n  return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n  return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n  return pad(utcMonday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n  return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCYearISO(d, p) {\n  d = UTCdISO(d);\n  return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n  return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCFullYearISO(d, p) {\n  var day = d.getUTCDay();\n  d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n  return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n  return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n  return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n  return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n  return Math.floor(+d / 1000);\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n  dateTime: \"%x, %X\",\n  date: \"%-m/%-d/%Y\",\n  time: \"%-I:%M:%S %p\",\n  periods: [\"AM\", \"PM\"],\n  days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n  shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n  months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n  shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n});\n\nexport default function defaultLocale(definition) {\n  locale = formatLocale(definition);\n  timeFormat = locale.format;\n  timeParse = locale.parse;\n  utcFormat = locale.utcFormat;\n  utcParse = locale.utcParse;\n  return locale;\n}\n","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","export var deg2rad = Math.PI / 180;\nexport var rad2deg = 180 / Math.PI;\n","import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb} from \"./color.js\";\nimport {deg2rad, rad2deg} from \"./math.js\";\n\n// https://observablehq.com/@mbostock/lab-and-rgb\nvar K = 18,\n    Xn = 0.96422,\n    Yn = 1,\n    Zn = 0.82521,\n    t0 = 4 / 29,\n    t1 = 6 / 29,\n    t2 = 3 * t1 * t1,\n    t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n  if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n  if (o instanceof Hcl) return hcl2lab(o);\n  if (!(o instanceof Rgb)) o = rgbConvert(o);\n  var r = rgb2lrgb(o.r),\n      g = rgb2lrgb(o.g),\n      b = rgb2lrgb(o.b),\n      y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n  if (r === g && g === b) x = z = y; else {\n    x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n    z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n  }\n  return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nexport function gray(l, opacity) {\n  return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\n}\n\nexport default function lab(l, a, b, opacity) {\n  return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nexport function Lab(l, a, b, opacity) {\n  this.l = +l;\n  this.a = +a;\n  this.b = +b;\n  this.opacity = +opacity;\n}\n\ndefine(Lab, lab, extend(Color, {\n  brighter: function(k) {\n    return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n  },\n  darker: function(k) {\n    return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n  },\n  rgb: function() {\n    var y = (this.l + 16) / 116,\n        x = isNaN(this.a) ? y : y + this.a / 500,\n        z = isNaN(this.b) ? y : y - this.b / 200;\n    x = Xn * lab2xyz(x);\n    y = Yn * lab2xyz(y);\n    z = Zn * lab2xyz(z);\n    return new Rgb(\n      lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n      lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n      lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n      this.opacity\n    );\n  }\n}));\n\nfunction xyz2lab(t) {\n  return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n  return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction lrgb2rgb(x) {\n  return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n  return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n  if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n  if (!(o instanceof Lab)) o = labConvert(o);\n  if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0 < o.l && o.l < 100 ? 0 : NaN, o.l, o.opacity);\n  var h = Math.atan2(o.b, o.a) * rad2deg;\n  return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nexport function lch(l, c, h, opacity) {\n  return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function hcl(h, c, l, opacity) {\n  return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function Hcl(h, c, l, opacity) {\n  this.h = +h;\n  this.c = +c;\n  this.l = +l;\n  this.opacity = +opacity;\n}\n\nfunction hcl2lab(o) {\n  if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n  var h = o.h * deg2rad;\n  return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n}\n\ndefine(Hcl, hcl, extend(Color, {\n  brighter: function(k) {\n    return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n  },\n  darker: function(k) {\n    return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n  },\n  rgb: function() {\n    return hcl2lab(this).rgb();\n  }\n}));\n","import {hcl as colorHcl} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction hcl(hue) {\n  return function(start, end) {\n    var h = hue((start = colorHcl(start)).h, (end = colorHcl(end)).h),\n        c = color(start.c, end.c),\n        l = color(start.l, end.l),\n        opacity = color(start.opacity, end.opacity);\n    return function(t) {\n      start.h = h(t);\n      start.c = c(t);\n      start.l = l(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n}\n\nexport default hcl(hue);\nexport var hclLong = hcl(color);\n","import {hsl as colorHsl} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction hsl(hue) {\n  return function(start, end) {\n    var h = hue((start = colorHsl(start)).h, (end = colorHsl(end)).h),\n        s = color(start.s, end.s),\n        l = color(start.l, end.l),\n        opacity = color(start.opacity, end.opacity);\n    return function(t) {\n      start.h = h(t);\n      start.s = s(t);\n      start.l = l(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n}\n\nexport default hsl(hue);\nexport var hslLong = hsl(color);\n","import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb, darker, brighter} from \"./color.js\";\nimport {deg2rad, rad2deg} from \"./math.js\";\n\nvar A = -0.14861,\n    B = +1.78277,\n    C = -0.29227,\n    D = -0.90649,\n    E = +1.97294,\n    ED = E * D,\n    EB = E * B,\n    BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n  if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n  if (!(o instanceof Rgb)) o = rgbConvert(o);\n  var r = o.r / 255,\n      g = o.g / 255,\n      b = o.b / 255,\n      l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n      bl = b - l,\n      k = (E * (g - l) - C * bl) / D,\n      s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n      h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN;\n  return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nexport default function cubehelix(h, s, l, opacity) {\n  return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nexport function Cubehelix(h, s, l, opacity) {\n  this.h = +h;\n  this.s = +s;\n  this.l = +l;\n  this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n  brighter: function(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n  },\n  darker: function(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n  },\n  rgb: function() {\n    var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad,\n        l = +this.l,\n        a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n        cosh = Math.cos(h),\n        sinh = Math.sin(h);\n    return new Rgb(\n      255 * (l + a * (A * cosh + B * sinh)),\n      255 * (l + a * (C * cosh + D * sinh)),\n      255 * (l + a * (E * cosh)),\n      this.opacity\n    );\n  }\n}));\n","import {cubehelix as colorCubehelix} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction cubehelix(hue) {\n  return (function cubehelixGamma(y) {\n    y = +y;\n\n    function cubehelix(start, end) {\n      var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),\n          s = color(start.s, end.s),\n          l = color(start.l, end.l),\n          opacity = color(start.opacity, end.opacity);\n      return function(t) {\n        start.h = h(t);\n        start.s = s(t);\n        start.l = l(Math.pow(t, y));\n        start.opacity = opacity(t);\n        return start + \"\";\n      };\n    }\n\n    cubehelix.gamma = cubehelixGamma;\n\n    return cubehelix;\n  })(1);\n}\n\nexport default cubehelix(hue);\nexport var cubehelixLong = cubehelix(color);\n","import { interpolateRgb, interpolateLab, interpolateHcl, interpolateHclLong, interpolateHsl, interpolateHslLong, interpolateCubehelix, interpolateCubehelixLong } from 'd3-interpolate';\nvar interpolatorMap = {\n  lab: interpolateLab,\n  hcl: interpolateHcl,\n  'hcl-long': interpolateHclLong,\n  hsl: interpolateHsl,\n  'hsl-long': interpolateHslLong,\n  cubehelix: interpolateCubehelix,\n  'cubehelix-long': interpolateCubehelixLong,\n  rgb: interpolateRgb\n};\nexport default function createColorInterpolator(interpolate) {\n  switch (interpolate) {\n    case 'lab':\n    case 'hcl':\n    case 'hcl-long':\n    case 'hsl':\n    case 'hsl-long':\n    case 'cubehelix':\n    case 'cubehelix-long':\n    case 'rgb':\n      return interpolatorMap[interpolate];\n\n    default:\n  }\n\n  var type = interpolate.type,\n      gamma = interpolate.gamma;\n  var interpolator = interpolatorMap[type];\n  return typeof gamma === 'undefined' ? interpolator : interpolator.gamma(gamma);\n}","import {lab as colorLab} from \"d3-color\";\nimport color from \"./color.js\";\n\nexport default function lab(start, end) {\n  var l = color((start = colorLab(start)).l, (end = colorLab(end)).l),\n      a = color(start.a, end.a),\n      b = color(start.b, end.b),\n      opacity = color(start.opacity, end.opacity);\n  return function(t) {\n    start.l = l(t);\n    start.a = a(t);\n    start.b = b(t);\n    start.opacity = opacity(t);\n    return start + \"\";\n  };\n}\n","import { timeSecond, timeMinute, timeHour, timeDay, timeYear, timeMonth, timeWeek, utcSecond, utcMinute, utcHour, utcDay, utcWeek, utcMonth, utcYear } from 'd3-time';\nimport isUtcScale from '../utils/isUtcScale';\nvar localTimeIntervals = {\n  day: timeDay,\n  hour: timeHour,\n  minute: timeMinute,\n  month: timeMonth,\n  second: timeSecond,\n  week: timeWeek,\n  year: timeYear\n};\nvar utcIntervals = {\n  day: utcDay,\n  hour: utcHour,\n  minute: utcMinute,\n  month: utcMonth,\n  second: utcSecond,\n  week: utcWeek,\n  year: utcYear\n};\nexport default function applyNice(scale, config) {\n  if ('nice' in config && typeof config.nice !== 'undefined' && 'nice' in scale) {\n    var nice = config.nice;\n\n    if (typeof nice === 'boolean') {\n      if (nice) {\n        scale.nice();\n      }\n    } else if (typeof nice === 'number') {\n      scale.nice(nice);\n    } else {\n      var timeScale = scale;\n      var isUtc = isUtcScale(timeScale);\n\n      if (typeof nice === 'string') {\n        timeScale.nice(isUtc ? utcIntervals[nice] : localTimeIntervals[nice]);\n      } else {\n        var interval = nice.interval,\n            step = nice.step;\n        var parsedInterval = (isUtc ? utcIntervals[interval] : localTimeIntervals[interval]).every(step);\n\n        if (parsedInterval != null) {\n          timeScale.nice(parsedInterval);\n        }\n      }\n    }\n  }\n}","import domain from './domain';\nimport range from './range';\nimport align from './align';\nimport base from './base';\nimport clamp from './clamp';\nimport constant from './constant';\nimport exponent from './exponent';\nimport interpolate from './interpolate';\nimport nice from './nice';\nimport padding from './padding';\nimport reverse from './reverse';\nimport round from './round';\nimport unknown from './unknown';\nimport zero from './zero';\n/**\n * List of all operators, in order of execution\n */\n\nexport var ALL_OPERATORS = [// domain => nice => zero\n'domain', 'nice', 'zero', // interpolate before round\n'interpolate', 'round', // set range then reverse\n'range', 'reverse', // Order does not matter for these operators\n'align', 'base', 'clamp', 'constant', 'exponent', 'padding', 'unknown'];\n// Use Record to enforce that all keys in OperatorType must exist.\nvar operators = {\n  domain: domain,\n  nice: nice,\n  zero: zero,\n  interpolate: interpolate,\n  round: round,\n  align: align,\n  base: base,\n  clamp: clamp,\n  constant: constant,\n  exponent: exponent,\n  padding: padding,\n  range: range,\n  reverse: reverse,\n  unknown: unknown\n};\nexport default function scaleOperator() {\n  for (var _len = arguments.length, ops = new Array(_len), _key = 0; _key < _len; _key++) {\n    ops[_key] = arguments[_key];\n  }\n\n  var selection = new Set(ops);\n  var selectedOps = ALL_OPERATORS.filter(function (o) {\n    return selection.has(o);\n  });\n  return function applyOperators(scale, config) {\n    if (typeof config !== 'undefined') {\n      selectedOps.forEach(function (op) {\n        operators[op](scale, config);\n      });\n    }\n\n    return scale;\n  };\n}","export default function applyDomain(scale, config) {\n  if (config.domain) {\n    if ('nice' in scale || 'quantiles' in scale) {\n      // continuous input scales\n      scale.domain(config.domain);\n    } else if ('padding' in scale) {\n      // point and band scales\n      scale.domain(config.domain);\n    } else {\n      // ordinal and threshold scale\n      scale.domain(config.domain);\n    }\n  }\n}","export default function applyZero(scale, config) {\n  if ('zero' in config && config.zero === true) {\n    var domain = scale.domain();\n    var a = domain[0],\n        b = domain[1];\n    var isDescending = b < a;\n\n    var _ref = isDescending ? [b, a] : [a, b],\n        min = _ref[0],\n        max = _ref[1];\n\n    var domainWithZero = [Math.min(0, min), Math.max(0, max)];\n    scale.domain(isDescending ? domainWithZero.reverse() : domainWithZero);\n  }\n}","import createColorInterpolator from '../utils/createColorInterpolator';\nexport default function applyInterpolate(scale, config) {\n  if ('interpolate' in config && 'interpolate' in scale && typeof config.interpolate !== 'undefined') {\n    var interpolator = createColorInterpolator(config.interpolate);\n    scale.interpolate(interpolator);\n  }\n}","import { interpolateRound } from 'd3-interpolate';\nexport default function applyRound(scale, config) {\n  if ('round' in config && typeof config.round !== 'undefined') {\n    if (config.round && 'interpolate' in config && typeof config.interpolate !== 'undefined') {\n      console.warn(\"[visx/scale/applyRound] ignoring round: scale config contains round and interpolate. only applying interpolate. config:\", config);\n    } else if ('round' in scale) {\n      // for point and band scales\n      scale.round(config.round);\n    } else if ('interpolate' in scale && config.round) {\n      // for continuous output scales\n      // setting config.round = true\n      // is actually setting interpolator to interpolateRound\n      // as these scales do not have scale.round() function\n      scale.interpolate(interpolateRound);\n    }\n  }\n}","export default function applyAlign(scale, config) {\n  if ('align' in scale && 'align' in config && typeof config.align !== 'undefined') {\n    scale.align(config.align);\n  }\n}","export default function applyBase(scale, config) {\n  if ('base' in scale && 'base' in config && typeof config.base !== 'undefined') {\n    scale.base(config.base);\n  }\n}","export default function applyClamp(scale, config) {\n  if ('clamp' in scale && 'clamp' in config && typeof config.clamp !== 'undefined') {\n    scale.clamp(config.clamp);\n  }\n}","export default function applyConstant(scale, config) {\n  if ('constant' in scale && 'constant' in config && typeof config.constant !== 'undefined') {\n    scale.constant(config.constant);\n  }\n}","export default function applyExponent(scale, config) {\n  if ('exponent' in scale && 'exponent' in config && typeof config.exponent !== 'undefined') {\n    scale.exponent(config.exponent);\n  }\n}","export default function applyPadding(scale, config) {\n  if ('padding' in scale && 'padding' in config && typeof config.padding !== 'undefined') {\n    scale.padding(config.padding);\n  }\n\n  if ('paddingInner' in scale && 'paddingInner' in config && typeof config.paddingInner !== 'undefined') {\n    scale.paddingInner(config.paddingInner);\n  }\n\n  if ('paddingOuter' in scale && 'paddingOuter' in config && typeof config.paddingOuter !== 'undefined') {\n    scale.paddingOuter(config.paddingOuter);\n  }\n}","export default function applyRange(scale, config) {\n  if (config.range) {\n    if ('padding' in scale) {\n      // point and band scales\n      scale.range(config.range);\n    } else {\n      // the rest\n      scale.range(config.range);\n    }\n  }\n}","export default function applyReverse(scale, config) {\n  if (config.reverse) {\n    var reversedRange = scale.range().slice().reverse();\n\n    if ('padding' in scale) {\n      // point and band scales\n      scale.range(reversedRange);\n    } else {\n      // the rest\n      scale.range(reversedRange);\n    }\n  }\n}","export default function applyUnknown(scale, config) {\n  if ('unknown' in scale && 'unknown' in config && typeof config.unknown !== 'undefined') {\n    scale.unknown(config.unknown);\n  }\n}","export default function(a, b) {\n  if (!b) b = [];\n  var n = a ? Math.min(b.length, a.length) : 0,\n      c = b.slice(),\n      i;\n  return function(t) {\n    for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n    return c;\n  };\n}\n\nexport function isNumberArray(x) {\n  return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n","import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n  return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n  var nb = b ? b.length : 0,\n      na = a ? Math.min(nb, a.length) : 0,\n      x = new Array(na),\n      c = new Array(nb),\n      i;\n\n  for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n  for (; i < nb; ++i) c[i] = b[i];\n\n  return function(t) {\n    for (i = 0; i < na; ++i) c[i] = x[i](t);\n    return c;\n  };\n}\n","export default function(a, b) {\n  var d = new Date;\n  return a = +a, b = +b, function(t) {\n    return d.setTime(a * (1 - t) + b * t), d;\n  };\n}\n","export default function(a, b) {\n  return a = +a, b = +b, function(t) {\n    return a * (1 - t) + b * t;\n  };\n}\n","import value from \"./value.js\";\n\nexport default function(a, b) {\n  var i = {},\n      c = {},\n      k;\n\n  if (a === null || typeof a !== \"object\") a = {};\n  if (b === null || typeof b !== \"object\") b = {};\n\n  for (k in b) {\n    if (k in a) {\n      i[k] = value(a[k], b[k]);\n    } else {\n      c[k] = b[k];\n    }\n  }\n\n  return function(t) {\n    for (k in i) c[k] = i[k](t);\n    return c;\n  };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n    reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n  return function() {\n    return b;\n  };\n}\n\nfunction one(b) {\n  return function(t) {\n    return b(t) + \"\";\n  };\n}\n\nexport default function(a, b) {\n  var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n      am, // current match in a\n      bm, // current match in b\n      bs, // string preceding current number in b, if any\n      i = -1, // index in s\n      s = [], // string constants and placeholders\n      q = []; // number interpolators\n\n  // Coerce inputs to strings.\n  a = a + \"\", b = b + \"\";\n\n  // Interpolate pairs of numbers in a & b.\n  while ((am = reA.exec(a))\n      && (bm = reB.exec(b))) {\n    if ((bs = bm.index) > bi) { // a string precedes the next number in b\n      bs = b.slice(bi, bs);\n      if (s[i]) s[i] += bs; // coalesce with previous string\n      else s[++i] = bs;\n    }\n    if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n      if (s[i]) s[i] += bm; // coalesce with previous string\n      else s[++i] = bm;\n    } else { // interpolate non-matching numbers\n      s[++i] = null;\n      q.push({i: i, x: number(am, bm)});\n    }\n    bi = reB.lastIndex;\n  }\n\n  // Add remains of b.\n  if (bi < b.length) {\n    bs = b.slice(bi);\n    if (s[i]) s[i] += bs; // coalesce with previous string\n    else s[++i] = bs;\n  }\n\n  // Special optimization for only a single match.\n  // Otherwise, interpolate each of the numbers and rejoin the string.\n  return s.length < 2 ? (q[0]\n      ? one(q[0].x)\n      : zero(b))\n      : (b = q.length, function(t) {\n          for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n          return s.join(\"\");\n        });\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n  var t = typeof b, c;\n  return b == null || t === \"boolean\" ? constant(b)\n      : (t === \"number\" ? number\n      : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n      : b instanceof color ? rgb\n      : b instanceof Date ? date\n      : isNumberArray(b) ? numberArray\n      : Array.isArray(b) ? genericArray\n      : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n      : number)(a, b);\n}\n","export default function number(x) {\n  return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateNumber, interpolateRound} from \"d3-interpolate\";\nimport constant from \"./constant.js\";\nimport number from \"./number.js\";\n\nvar unit = [0, 1];\n\nexport function identity(x) {\n  return x;\n}\n\nfunction normalize(a, b) {\n  return (b -= (a = +a))\n      ? function(x) { return (x - a) / b; }\n      : constant(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(a, b) {\n  var t;\n  if (a > b) t = a, a = b, b = t;\n  return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n  var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n  if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n  else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n  return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n  var j = Math.min(domain.length, range.length) - 1,\n      d = new Array(j),\n      r = new Array(j),\n      i = -1;\n\n  // Reverse descending domains.\n  if (domain[j] < domain[0]) {\n    domain = domain.slice().reverse();\n    range = range.slice().reverse();\n  }\n\n  while (++i < j) {\n    d[i] = normalize(domain[i], domain[i + 1]);\n    r[i] = interpolate(range[i], range[i + 1]);\n  }\n\n  return function(x) {\n    var i = bisect(domain, x, 1, j) - 1;\n    return r[i](d[i](x));\n  };\n}\n\nexport function copy(source, target) {\n  return target\n      .domain(source.domain())\n      .range(source.range())\n      .interpolate(source.interpolate())\n      .clamp(source.clamp())\n      .unknown(source.unknown());\n}\n\nexport function transformer() {\n  var domain = unit,\n      range = unit,\n      interpolate = interpolateValue,\n      transform,\n      untransform,\n      unknown,\n      clamp = identity,\n      piecewise,\n      output,\n      input;\n\n  function rescale() {\n    var n = Math.min(domain.length, range.length);\n    if (clamp !== identity) clamp = clamper(domain[0], domain[n - 1]);\n    piecewise = n > 2 ? polymap : bimap;\n    output = input = null;\n    return scale;\n  }\n\n  function scale(x) {\n    return x == null || isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n  }\n\n  scale.invert = function(y) {\n    return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain = Array.from(_, number), rescale()) : domain.slice();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n  };\n\n  scale.rangeRound = function(_) {\n    return range = Array.from(_), interpolate = interpolateRound, rescale();\n  };\n\n  scale.clamp = function(_) {\n    return arguments.length ? (clamp = _ ? true : identity, rescale()) : clamp !== identity;\n  };\n\n  scale.interpolate = function(_) {\n    return arguments.length ? (interpolate = _, rescale()) : interpolate;\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  return function(t, u) {\n    transform = t, untransform = u;\n    return rescale();\n  };\n}\n\nexport default function continuous() {\n  return transformer()(identity, identity);\n}\n","export default function constants(x) {\n  return function() {\n    return x;\n  };\n}\n","import * as d3 from 'd3-time-format';\n\nexport const queryParamDateFormat = '%Y-%m-%d';\nexport const datePickerDateFormat = '%Y-%m-%d';\n\nexport const queryParamDateFormatter = d3.timeFormat(queryParamDateFormat);\nexport const queryParamDateParser = d3.timeParse(queryParamDateFormat);\n\nexport const datePickerDateFormatter = d3.timeFormat(datePickerDateFormat);\nexport const datePickerDateParser = d3.timeParse(datePickerDateFormat);\n\nexport const getDateNDaysAgo = (date, n) => {\n  const copiedDate = new Date(date.getTime());\n  copiedDate.setDate(copiedDate.getDate() - n);\n  return copiedDate;\n};\n\nexport const monthsList = [\n  'Jan',\n  'Feb',\n  'Mar',\n  'Apr',\n  'May',\n  'Jun',\n  'Jul',\n  'Aug',\n  'Sep',\n  'Oct',\n  'Nov',\n  'Dec',\n];\n\nexport const getDaysInMonth = (month, year) => {\n  // The zero day of next month will give us the last day of given month\n  // as days are not zero-indexed\n  return new Date(year, Number(month) + 1, 0).getDate();\n};\n\nexport const getYearRange = (minDate, maxDate) => {\n  const minYear = minDate.getFullYear();\n  const maxYear = maxDate.getFullYear();\n\n  return Array(maxYear - minYear + 1)\n    .fill()\n    .map((_, index) => minYear + index);\n};\n\nexport const getDayMonthYear = date => {\n  const day = date.getDate();\n  const month = date.getMonth(); // Zero indexed\n  const year = date.getFullYear();\n\n  return { day, month, year };\n};\n\nexport const getReadableDateFormat = () => {\n  const year = 2020;\n  const month = 11; // Zero-indexed\n  const day = 31;\n\n  const fixedDate = new Date(year, month, day);\n  const localeString = fixedDate.toLocaleDateString();\n  const readableDateFormat = localeString\n    .replace(year, 'Year')\n    .replace(month + 1, 'Month')\n    .replace(day, 'Day');\n\n  return readableDateFormat;\n};\n\nexport default null;\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n    reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n    reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n    reHex = /^#([0-9a-f]{3,8})$/,\n    reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n    reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n    reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n    reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n    reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n    reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar named = {\n  aliceblue: 0xf0f8ff,\n  antiquewhite: 0xfaebd7,\n  aqua: 0x00ffff,\n  aquamarine: 0x7fffd4,\n  azure: 0xf0ffff,\n  beige: 0xf5f5dc,\n  bisque: 0xffe4c4,\n  black: 0x000000,\n  blanchedalmond: 0xffebcd,\n  blue: 0x0000ff,\n  blueviolet: 0x8a2be2,\n  brown: 0xa52a2a,\n  burlywood: 0xdeb887,\n  cadetblue: 0x5f9ea0,\n  chartreuse: 0x7fff00,\n  chocolate: 0xd2691e,\n  coral: 0xff7f50,\n  cornflowerblue: 0x6495ed,\n  cornsilk: 0xfff8dc,\n  crimson: 0xdc143c,\n  cyan: 0x00ffff,\n  darkblue: 0x00008b,\n  darkcyan: 0x008b8b,\n  darkgoldenrod: 0xb8860b,\n  darkgray: 0xa9a9a9,\n  darkgreen: 0x006400,\n  darkgrey: 0xa9a9a9,\n  darkkhaki: 0xbdb76b,\n  darkmagenta: 0x8b008b,\n  darkolivegreen: 0x556b2f,\n  darkorange: 0xff8c00,\n  darkorchid: 0x9932cc,\n  darkred: 0x8b0000,\n  darksalmon: 0xe9967a,\n  darkseagreen: 0x8fbc8f,\n  darkslateblue: 0x483d8b,\n  darkslategray: 0x2f4f4f,\n  darkslategrey: 0x2f4f4f,\n  darkturquoise: 0x00ced1,\n  darkviolet: 0x9400d3,\n  deeppink: 0xff1493,\n  deepskyblue: 0x00bfff,\n  dimgray: 0x696969,\n  dimgrey: 0x696969,\n  dodgerblue: 0x1e90ff,\n  firebrick: 0xb22222,\n  floralwhite: 0xfffaf0,\n  forestgreen: 0x228b22,\n  fuchsia: 0xff00ff,\n  gainsboro: 0xdcdcdc,\n  ghostwhite: 0xf8f8ff,\n  gold: 0xffd700,\n  goldenrod: 0xdaa520,\n  gray: 0x808080,\n  green: 0x008000,\n  greenyellow: 0xadff2f,\n  grey: 0x808080,\n  honeydew: 0xf0fff0,\n  hotpink: 0xff69b4,\n  indianred: 0xcd5c5c,\n  indigo: 0x4b0082,\n  ivory: 0xfffff0,\n  khaki: 0xf0e68c,\n  lavender: 0xe6e6fa,\n  lavenderblush: 0xfff0f5,\n  lawngreen: 0x7cfc00,\n  lemonchiffon: 0xfffacd,\n  lightblue: 0xadd8e6,\n  lightcoral: 0xf08080,\n  lightcyan: 0xe0ffff,\n  lightgoldenrodyellow: 0xfafad2,\n  lightgray: 0xd3d3d3,\n  lightgreen: 0x90ee90,\n  lightgrey: 0xd3d3d3,\n  lightpink: 0xffb6c1,\n  lightsalmon: 0xffa07a,\n  lightseagreen: 0x20b2aa,\n  lightskyblue: 0x87cefa,\n  lightslategray: 0x778899,\n  lightslategrey: 0x778899,\n  lightsteelblue: 0xb0c4de,\n  lightyellow: 0xffffe0,\n  lime: 0x00ff00,\n  limegreen: 0x32cd32,\n  linen: 0xfaf0e6,\n  magenta: 0xff00ff,\n  maroon: 0x800000,\n  mediumaquamarine: 0x66cdaa,\n  mediumblue: 0x0000cd,\n  mediumorchid: 0xba55d3,\n  mediumpurple: 0x9370db,\n  mediumseagreen: 0x3cb371,\n  mediumslateblue: 0x7b68ee,\n  mediumspringgreen: 0x00fa9a,\n  mediumturquoise: 0x48d1cc,\n  mediumvioletred: 0xc71585,\n  midnightblue: 0x191970,\n  mintcream: 0xf5fffa,\n  mistyrose: 0xffe4e1,\n  moccasin: 0xffe4b5,\n  navajowhite: 0xffdead,\n  navy: 0x000080,\n  oldlace: 0xfdf5e6,\n  olive: 0x808000,\n  olivedrab: 0x6b8e23,\n  orange: 0xffa500,\n  orangered: 0xff4500,\n  orchid: 0xda70d6,\n  palegoldenrod: 0xeee8aa,\n  palegreen: 0x98fb98,\n  paleturquoise: 0xafeeee,\n  palevioletred: 0xdb7093,\n  papayawhip: 0xffefd5,\n  peachpuff: 0xffdab9,\n  peru: 0xcd853f,\n  pink: 0xffc0cb,\n  plum: 0xdda0dd,\n  powderblue: 0xb0e0e6,\n  purple: 0x800080,\n  rebeccapurple: 0x663399,\n  red: 0xff0000,\n  rosybrown: 0xbc8f8f,\n  royalblue: 0x4169e1,\n  saddlebrown: 0x8b4513,\n  salmon: 0xfa8072,\n  sandybrown: 0xf4a460,\n  seagreen: 0x2e8b57,\n  seashell: 0xfff5ee,\n  sienna: 0xa0522d,\n  silver: 0xc0c0c0,\n  skyblue: 0x87ceeb,\n  slateblue: 0x6a5acd,\n  slategray: 0x708090,\n  slategrey: 0x708090,\n  snow: 0xfffafa,\n  springgreen: 0x00ff7f,\n  steelblue: 0x4682b4,\n  tan: 0xd2b48c,\n  teal: 0x008080,\n  thistle: 0xd8bfd8,\n  tomato: 0xff6347,\n  turquoise: 0x40e0d0,\n  violet: 0xee82ee,\n  wheat: 0xf5deb3,\n  white: 0xffffff,\n  whitesmoke: 0xf5f5f5,\n  yellow: 0xffff00,\n  yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n  copy: function(channels) {\n    return Object.assign(new this.constructor, this, channels);\n  },\n  displayable: function() {\n    return this.rgb().displayable();\n  },\n  hex: color_formatHex, // Deprecated! Use color.formatHex.\n  formatHex: color_formatHex,\n  formatHsl: color_formatHsl,\n  formatRgb: color_formatRgb,\n  toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n  return this.rgb().formatHex();\n}\n\nfunction color_formatHsl() {\n  return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n  return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n  var m, l;\n  format = (format + \"\").trim().toLowerCase();\n  return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n      : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n      : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n      : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n      : null) // invalid hex\n      : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n      : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n      : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n      : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n      : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n      : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n      : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n      : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n      : null;\n}\n\nfunction rgbn(n) {\n  return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n  if (a <= 0) r = g = b = NaN;\n  return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n  if (!(o instanceof Color)) o = color(o);\n  if (!o) return new Rgb;\n  o = o.rgb();\n  return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n  return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n  this.r = +r;\n  this.g = +g;\n  this.b = +b;\n  this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n  brighter: function(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n  },\n  darker: function(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n  },\n  rgb: function() {\n    return this;\n  },\n  displayable: function() {\n    return (-0.5 <= this.r && this.r < 255.5)\n        && (-0.5 <= this.g && this.g < 255.5)\n        && (-0.5 <= this.b && this.b < 255.5)\n        && (0 <= this.opacity && this.opacity <= 1);\n  },\n  hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n  formatHex: rgb_formatHex,\n  formatRgb: rgb_formatRgb,\n  toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n  return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n}\n\nfunction rgb_formatRgb() {\n  var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n  return (a === 1 ? \"rgb(\" : \"rgba(\")\n      + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n      + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n      + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n      + (a === 1 ? \")\" : \", \" + a + \")\");\n}\n\nfunction hex(value) {\n  value = Math.max(0, Math.min(255, Math.round(value) || 0));\n  return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n  if (a <= 0) h = s = l = NaN;\n  else if (l <= 0 || l >= 1) h = s = NaN;\n  else if (s <= 0) h = NaN;\n  return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n  if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n  if (!(o instanceof Color)) o = color(o);\n  if (!o) return new Hsl;\n  if (o instanceof Hsl) return o;\n  o = o.rgb();\n  var r = o.r / 255,\n      g = o.g / 255,\n      b = o.b / 255,\n      min = Math.min(r, g, b),\n      max = Math.max(r, g, b),\n      h = NaN,\n      s = max - min,\n      l = (max + min) / 2;\n  if (s) {\n    if (r === max) h = (g - b) / s + (g < b) * 6;\n    else if (g === max) h = (b - r) / s + 2;\n    else h = (r - g) / s + 4;\n    s /= l < 0.5 ? max + min : 2 - max - min;\n    h *= 60;\n  } else {\n    s = l > 0 && l < 1 ? 0 : h;\n  }\n  return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n  return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n  this.h = +h;\n  this.s = +s;\n  this.l = +l;\n  this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n  brighter: function(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Hsl(this.h, this.s, this.l * k, this.opacity);\n  },\n  darker: function(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Hsl(this.h, this.s, this.l * k, this.opacity);\n  },\n  rgb: function() {\n    var h = this.h % 360 + (this.h < 0) * 360,\n        s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n        l = this.l,\n        m2 = l + (l < 0.5 ? l : 1 - l) * s,\n        m1 = 2 * l - m2;\n    return new Rgb(\n      hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n      hsl2rgb(h, m1, m2),\n      hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n      this.opacity\n    );\n  },\n  displayable: function() {\n    return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n        && (0 <= this.l && this.l <= 1)\n        && (0 <= this.opacity && this.opacity <= 1);\n  },\n  formatHsl: function() {\n    var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n    return (a === 1 ? \"hsl(\" : \"hsla(\")\n        + (this.h || 0) + \", \"\n        + (this.s || 0) * 100 + \"%, \"\n        + (this.l || 0) * 100 + \"%\"\n        + (a === 1 ? \")\" : \", \" + a + \")\");\n  }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n  return (h < 60 ? m1 + (m2 - m1) * h / 60\n      : h < 180 ? m2\n      : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n      : m1) * 255;\n}\n","export function initRange(domain, range) {\n  switch (arguments.length) {\n    case 0: break;\n    case 1: this.range(domain); break;\n    default: this.range(range).domain(domain); break;\n  }\n  return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n  switch (arguments.length) {\n    case 0: break;\n    case 1: {\n      if (typeof domain === \"function\") this.interpolator(domain);\n      else this.range(domain);\n      break;\n    }\n    default: {\n      this.domain(domain);\n      if (typeof interpolator === \"function\") this.interpolator(interpolator);\n      else this.range(interpolator);\n      break;\n    }\n  }\n  return this;\n}\n","var objectWithoutPropertiesLoose = require(\"./objectWithoutPropertiesLoose.js\");\n\nfunction _objectWithoutProperties(source, excluded) {\n  if (source == null) return {};\n  var target = objectWithoutPropertiesLoose(source, excluded);\n  var key, i;\n\n  if (Object.getOwnPropertySymbols) {\n    var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n    for (i = 0; i < sourceSymbolKeys.length; i++) {\n      key = sourceSymbolKeys[i];\n      if (excluded.indexOf(key) >= 0) continue;\n      if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n      target[key] = source[key];\n    }\n  }\n\n  return target;\n}\n\nmodule.exports = _objectWithoutProperties;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","export default function(constructor, factory, prototype) {\n  constructor.prototype = factory.prototype = prototype;\n  prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n  var prototype = Object.create(parent.prototype);\n  for (var key in definition) prototype[key] = definition[key];\n  return prototype;\n}\n","export default function(values, valueof) {\n  let min;\n  let max;\n  if (valueof === undefined) {\n    for (const value of values) {\n      if (value != null) {\n        if (min === undefined) {\n          if (value >= value) min = max = value;\n        } else {\n          if (min > value) min = value;\n          if (max < value) max = value;\n        }\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null) {\n        if (min === undefined) {\n          if (value >= value) min = max = value;\n        } else {\n          if (min > value) min = value;\n          if (max < value) max = value;\n        }\n      }\n    }\n  }\n  return [min, max];\n}\n","\nconst settings = {config:{}};\n\n/**\n * Very basic implementation of deep clone, and only supports simple POJO objects and\n * native arrays.\n *\n * @param  {*} value Any value\n * @returns {*}       Copy of value\n * @private\n */\nfunction clone(value) {\n\tif (value === undefined) {\n\t\treturn value;\n\t}\n\tswitch (Object.prototype.toString.call(value)) {\n\t\tcase '[object Object]':\n\t\t\treturn JSON.parse(JSON.stringify(value));\n\t\tcase '[object Array]':\n\t\t\treturn [].slice.call(value);\n\t\tdefault:\n\t\t\treturn value;\n\t}\n}\n\n/**\n * Saves a value. Stores a copy rather than a reference, to avoid mutations leaking.\n *\n * @param {string} key - The key to use to store the object\n * @param {*} value - The value\n * @returns {void}\n */\nfunction setValue(key, value) {\n\tsettings[key] = clone(value);\n}\n\n/**\n * Retrieves a value from the settings object. Returns a copy rather than reference, to\n * avoid mutations leaking.\n *\n * @param {string} key - The key to get\n * @returns {*} - The setting.\n */\nfunction getValue(key) {\n\treturn clone(settings[key]);\n}\n\n/**\n * Deletes a value\n *\n * @param  {string} key - The key to delete\n * @returns {void}\n */\nfunction destroy(key) {\n\tdelete settings[key];\n}\nconst set = setValue;\nconst get = getValue;\n\nexport {\n\tset,\n\tget,\n\tdestroy\n};\n","function _assertThisInitialized(self) {\n  if (self === void 0) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return self;\n}\n\nmodule.exports = _assertThisInitialized;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from 'react';\nimport cx from 'classnames';\nexport default function Line(_ref) {\n  var _ref$from = _ref.from,\n      from = _ref$from === void 0 ? {\n    x: 0,\n    y: 0\n  } : _ref$from,\n      _ref$to = _ref.to,\n      to = _ref$to === void 0 ? {\n    x: 1,\n    y: 1\n  } : _ref$to,\n      _ref$fill = _ref.fill,\n      fill = _ref$fill === void 0 ? 'transparent' : _ref$fill,\n      className = _ref.className,\n      innerRef = _ref.innerRef,\n      restProps = _objectWithoutPropertiesLoose(_ref, [\"from\", \"to\", \"fill\", \"className\", \"innerRef\"]);\n\n  var isRectilinear = from.x === to.x || from.y === to.y;\n  return /*#__PURE__*/React.createElement(\"line\", _extends({\n    ref: innerRef,\n    className: cx('visx-line', className),\n    x1: from.x,\n    y1: from.y,\n    x2: to.x,\n    y2: to.y,\n    fill: fill,\n    shapeRendering: isRectilinear ? 'crispEdges' : 'auto'\n  }, restProps));\n}","import isUtcScale from './isUtcScale';\nexport default function inferScaleType(scale) {\n  // Try a sequence of typeguards to figure out the scale type\n  if ('paddingInner' in scale) {\n    return 'band';\n  }\n\n  if ('padding' in scale) {\n    return 'point';\n  }\n\n  if ('quantiles' in scale) {\n    return 'quantile';\n  }\n\n  if ('base' in scale) {\n    return 'log';\n  }\n\n  if ('exponent' in scale) {\n    return scale.exponent() === 0.5 ? 'sqrt' : 'pow';\n  }\n\n  if ('constant' in scale) {\n    return 'symlog';\n  }\n\n  if ('clamp' in scale) {\n    // Linear, Time or Utc scales\n    if (scale.ticks()[0] instanceof Date) {\n      return isUtcScale(scale) ? 'utc' : 'time';\n    }\n\n    return 'linear';\n  }\n\n  if ('nice' in scale) {\n    return 'quantize';\n  }\n\n  if ('invertExtent' in scale) {\n    return 'threshold';\n  }\n\n  return 'ordinal';\n}","'use strict'\n\nmodule.exports = whitespace\n\nvar fromCode = String.fromCharCode\nvar re = /\\s/\n\n// Check if the given character code, or the character code at the first\n// character, is a whitespace character.\nfunction whitespace(character) {\n  return re.test(\n    typeof character === 'number' ? fromCode(character) : character.charAt(0)\n  )\n}\n","/**\n * @file\n * Article layout\n */\n\nimport React, { createContext } from 'react';\nimport PropTypes from 'prop-types';\nimport { flagsPropType, StringBoolPropType } from '../shared/proptypes';\nimport Header from '../header';\nimport Analytics from '../analytics';\nimport { TopAd } from '../ads';\nimport OnwardJourney from '../onwardjourney';\nimport Comments from '../comments';\nimport Footer from '../footer';\nimport './styles.scss';\nimport { useAds, useLayoutChangeEvents } from '../shared/hooks';\n\nexport const Context = createContext({});\n\nconst ArticleLayout = ({ flags, ads, children, ...props }) => {\n  const breakpoint = useLayoutChangeEvents();\n  useAds(ads, flags.ads);\n\n  return (\n    <Context.Provider\n      value={{\n        flags,\n        ads,\n        breakpoint,\n        ...props,\n      }}\n    >\n      {flags.analytics && <Analytics {...{ ...props, flags, breakpoint }} />}\n      {flags.ads && <TopAd />}\n      {flags.header && <Header key=\"header\" {...{ ...props, flags, breakpoint }} />}\n      {children}\n      {flags.onwardjourney && <OnwardJourney key=\"oj\" {...{ ...props, breakpoint }} />}\n      {flags.comments && <Comments key=\"comments\" {...{ ...props, flags, breakpoint }} />}\n      {flags.footer && <Footer key=\"footer\" {...{ ...props, flags, breakpoint }} />}\n    </Context.Provider>\n  );\n};\n\nArticleLayout.displayName = 'GArticleLayout';\n\nArticleLayout.propTypes = {\n  flags: flagsPropType.isRequired,\n  ads: PropTypes.exact({\n    gptSite: PropTypes.string.isRequired,\n    gptZone: StringBoolPropType.isRequired,\n    targeting: StringBoolPropType.isRequired,\n  }),\n  children: PropTypes.oneOfType([PropTypes.node, PropTypes.arrayOf(PropTypes.node)]).isRequired,\n};\n\nArticleLayout.defaultProps = {\n  ads: {\n    gptSite: 'test.5887.origami', // Ad unit hierarchy makes ads more granular.\n    gptZone: false, // Start with ft.com and /companies /markets /world as appropriate to your story\n    targeting: false, // granular targeting is optional and will be specified by the ads team\n  },\n};\n\nexport default ArticleLayout;\n","/**\n * @file\n * Reusable proptypes\n */\n\nimport PropTypes from 'prop-types';\n\nexport const StringBoolPropType = PropTypes.oneOfType([PropTypes.string, PropTypes.bool]);\n\nexport const flagsPropType = PropTypes.shape({\n  prod: StringBoolPropType.isRequired,\n  errorReporting: StringBoolPropType.isRequired,\n  analytics: StringBoolPropType.isRequired,\n  googleAnalytics: StringBoolPropType.isRequired,\n  ads: StringBoolPropType.isRequired,\n  mainImage: StringBoolPropType.isRequired,\n  summary: StringBoolPropType.isRequired,\n  bylines: StringBoolPropType.isRequired,\n  onwardjourney: StringBoolPropType.isRequired,\n  shareButtons: StringBoolPropType.isRequired,\n  header: StringBoolPropType.isRequired,\n  footer: StringBoolPropType.isRequired,\n  comments: StringBoolPropType.isRequired,\n  data: StringBoolPropType.isRequired,\n  dark: StringBoolPropType.isRequired,\n});\n\nexport const mainImagePropType = PropTypes.oneOfType([\n  PropTypes.shape({\n    uuid: PropTypes.string.isRequired,\n  }),\n  PropTypes.shape({\n    url: PropTypes.string.isRequired,\n  }),\n]).isRequired;\n\nexport const trackingPropType = PropTypes.shape({\n  micrositeName: PropTypes.string,\n  product: PropTypes.string,\n});\n\nexport const topicPropType = PropTypes.shape({\n  url: PropTypes.string.isRequired,\n  name: PropTypes.string.isRequired,\n});\n\nexport const dataMetaPropType = PropTypes.shape({\n  '@context': PropTypes.oneOf(['https://schema.org/']),\n  '@type': PropTypes.oneOf(['Dataset']),\n  name: PropTypes.string.isRequired,\n  description: PropTypes.string.isRequired,\n  url: PropTypes.string.isRequired,\n  sameAs: PropTypes.string.isRequired,\n  keywords: PropTypes.arrayOf(PropTypes.string).isRequired,\n  creator: PropTypes.shape({\n    '@type': PropTypes.oneOf(['Organization']),\n    url: PropTypes.string.isRequired,\n    name: PropTypes.string.isRequired,\n    contactPoint: PropTypes.shape({\n      '@type': PropTypes.oneOf(['ContactPoint']),\n      contactType: PropTypes.string,\n      telephone: PropTypes.string,\n      email: PropTypes.string,\n    }),\n  }).isRequired,\n  includedInDataCatalog: PropTypes.shape({\n    '@type': PropTypes.oneOf(['DataCatalog']),\n    name: PropTypes.string.isRequired,\n  }),\n  distribution: PropTypes.arrayOf(\n    PropTypes.shape({\n      '@type': PropTypes.oneOf(['DataDownload']),\n      encodingFormat: PropTypes.string.isRequired,\n      contentUrl: PropTypes.string.isRequired,\n    }),\n  ),\n  // Dates the dataset covers\n  temporalCoverage: PropTypes.string.isRequired,\n  // Where the dataset covers. See spec.\n  spatialCoverage: PropTypes.shape({\n    '@type': PropTypes.oneOf(['Place']),\n    geo: PropTypes.shape({\n      '@type': PropTypes.oneOf(['GeoShape']),\n      box: PropTypes.string.isRequired,\n    }),\n  }),\n});\n\nexport const bylinesPropType = PropTypes.oneOfType([\n  PropTypes.string,\n  PropTypes.arrayOf(\n    PropTypes.shape({\n      name: PropTypes.string.isRequired,\n      url: PropTypes.string,\n      location: PropTypes.string,\n    }),\n  )\n]);\n\nexport default '';\n","/**\n * @file\n * Header component\n */\n\nimport React, { useEffect, useRef } from 'react';\nimport OHeader from '@financial-times/o-header/main';\nimport './styles.scss';\nimport { flagsPropType } from '../shared/proptypes';\n\nconst Header = ({ flags, ...props }) => {\n  const ref = useRef();\n\n  const { dark } = flags;\n\n  const headerClasses = ['o-header', 'o-header--simple', dark && 'o-header--transparent']\n    .filter((i) => i)\n    .join(' ');\n\n  useEffect(() => {\n    (async () => {\n      try {\n        new OHeader(ref.current);\n      } catch (e) {\n        console.error(e);\n      }\n    })();\n  }, []);\n\n  return (\n    <header ref={ref} className={headerClasses} data-o-component=\"o-header\" data-o-header--no-js=\"\">\n      <div className=\"o-header__row o-header__top\">\n        <div className=\"o-header__container\">\n          <div className=\"o-header__top-wrapper\">\n            <div className=\"o-header__top-column o-header__top-column--center\">\n              <a\n                className=\"o-header__top-logo\"\n                href=\"https://www.ft.com/\"\n                title=\"Go to Financial Times homepage\"\n              >\n                <span className=\"o-header__visually-hidden\">Financial Times</span>\n              </a>\n            </div>\n          </div>\n        </div>\n      </div>\n    </header>\n  );\n};\n\nHeader.displayName = 'GHeader';\n\nHeader.propTypes = {\n  flags: flagsPropType,\n};\n\nHeader.defaultProps = {\n  flags: {\n    dark: false,\n  },\n};\n\nexport default Header;\n","/**\n * @file\n * Analytics code\n */\n\nimport React, { Fragment, useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport core from '@financial-times/o-tracking/src/javascript/core';\nimport { merge } from '@financial-times/o-tracking/src/javascript/utils';\nimport { get } from '@financial-times/o-tracking/src/javascript/core/settings';\nimport customFlourishAnalytics from '@financial-times/flourish-receive-custom-analytics';\nimport { flagsPropType } from '../shared/proptypes';\nimport { spoorTrackingPixel } from '../shared/helpers';\n\n// Disables warning for dangerouslySetInnerHTML because we kiiiiinda need it here.\n/* eslint-disable react/no-danger */\n\nconst Analytics = ({ id, tracking, flags, scrollDepthTarget }) => {\n  const [isInitialised, setIsInitialised] = useState(false);\n\n  useEffect(() => {\n    if (!isInitialised) {\n      (async () => {\n        setIsInitialised(true);\n        const nTracking = await import('@financial-times/n-tracking');\n        try {\n          if (!window.cutsTheMustard) return;\n          const pageData = {\n            content: { asset_type: 'interactive' },\n          };\n\n          const properties = [].reduce.call(\n            document.querySelectorAll('head meta[property^=\"ft.track:\"]') || [],\n            (o, el) => {\n              if (!el) return o;\n\n              const attName = el.getAttribute('property').replace('ft.track:', '');\n              o[attName] = el.getAttribute('content'); // eslint-disable-line no-param-reassign\n              return o;\n            },\n            {},\n          );\n\n          const contentId = id || document.documentElement.getAttribute('data-content-id');\n\n          if (contentId) {\n            pageData.content.uuid = contentId;\n          }\n\n          if (properties.microsite_name) {\n            pageData.microsite_name = properties.microsite_name;\n          }\n\n          // Setup\n          const appContext = {\n            product: properties.product || 'IG',\n            ...pageData,\n          };\n\n          // n-tracking's init function sets up page view and click event tracking\n          const oTracking = nTracking.init({\n            appContext,\n          });\n\n          customFlourishAnalytics.init((data) => {\n            // Merge the event data into the \"parent\" config data\n            const config = merge(get('config'), data);\n            core.track(config);\n          });\n\n          // Attention tracking\n          nTracking.trackers.pageAttention({ target: scrollDepthTarget });\n        } catch (e) {\n          console.error(e);\n        }\n      })();\n    }\n  }, [id]);\n\n  return (\n    <Fragment>\n      {/* Add fallback if browsers don't cut the mustard */}\n      {spoorTrackingPixel({\n        action: 'view',\n        category: 'page',\n        context: {\n          content: {\n            asset_type: 'interactive',\n            uuid: id,\n          },\n          product: 'IG',\n          microsite_name: tracking.micrositeName,\n        },\n        system: {\n          is_live: flags.prod,\n          apiKey: 'qUb9maKfKbtpRsdp0p2J7uWxRPGJEP',\n          source: 'o-tracking-ns',\n          version: '1.0.0',\n        },\n      })}\n      {flags.googleAnalytics && (\n        <script\n          dangerouslySetInnerHTML={{\n            __html: `\n        (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){\n        (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),\n        m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)\n        })(window,document,'script','//www.google-analytics.com/analytics.js','ga');\n        ga('create', 'UA-35229645-1', 'auto');\n        ga('require','displayfeatures');\n        ga('send', 'pageview');\n        `,\n          }}\n        />\n      )}\n      {/* Floodlight tracking pixel */}\n      <script\n        dangerouslySetInnerHTML={{\n          __html: `\n        var spoorId = /spoor-id=([^;]+)/.exec(document.cookie)[1] || 'cj5y2utdx00003i5z6l6po8c1';\n        var endpoint = 'https://4235225.fls.doubleclick.net/activityi;src=4235225;type=homeo886;cat=ft-ne000;u10=' + spoorId + ';dc_lat=;dc_rdid=;tag_for_child_directed_treatment=;ord=' + Date.now() + ';num=1';\n        var img = document.createElement('img');\n        img.setAttribute('width', 1);\n        img.setAttribute('height', 1);\n        img.setAttribute('src', endpoint);\n        img.style.position = 'absolute';\n        document.body.insertBefore(img, document.body.firstElementChild);\n        `,\n        }}\n      />\n    </Fragment>\n  );\n};\n\nAnalytics.displayName = 'GAnalytics';\n\nAnalytics.displayName = 'GAnalytics';\n\nAnalytics.propTypes = {\n  id: PropTypes.string.isRequired,\n  flags: flagsPropType.isRequired,\n  tracking: PropTypes.shape({\n    micrositeName: PropTypes.string,\n  }),\n  scrollDepthTarget: PropTypes.string,\n};\n\nAnalytics.defaultProps = {\n  tracking: {\n    micrositeName: undefined,\n  },\n  scrollDepthTarget: '.article-body',\n};\n\nexport default Analytics;\n","/**\n * @file\n * Various helper functions\n */\n\nimport React from 'react';\nimport removeMarkdown from 'remove-markdown';\nimport { getGridBreakpoints } from '@financial-times/o-grid/main';\n\nexport function plain(str, stripListLeaders = true) {\n  return removeMarkdown(str, { stripListLeaders, gfm: true });\n}\n\nexport function encodedJSON(_data) {\n  const data = _data instanceof String ? JSON.parse(_data) : _data;\n  try {\n    return encodeURIComponent(JSON.stringify(data, null, ''));\n  } catch (e) {\n    return '';\n  }\n}\n\nexport function spoorTrackingPixel(data) {\n  const jsonString = encodedJSON(data);\n  if (document) {\n    const ieVersion = document.documentMode ? document.documentMode : 99; // eslint-disable-line\n    const img = `<img src=\"https://spoor-api.ft.com/px.gif?data=${jsonString}\" height=\"1\" width=\"1\" />`;\n    return ieVersion < 9 ? img : <noscript data-o-component=\"o-tracking\">{img}</noscript>;\n  }\n\n  return null;\n}\n\nexport function imageUUID(uuid) {\n  return `https://www.ft.com/__origami/service/image/v2/images/raw/ftcms%3A${uuid}?source=ig`;\n}\n\nexport function getMainImage(img = {}) {\n  if (Object.prototype.hasOwnProperty.call(img, 'uuid')) return imageUUID(img.uuid);\n  if (Object.prototype.hasOwnProperty.call(img, 'url')) return img.url;\n  return '';\n}\n\n// Via: https://reactjs.org/blog/2015/12/16/ismounted-antipattern.html\n\nexport const makeCancelable = (promise) => {\n  let hasCanceled = false;\n\n  const wrappedPromise = new Promise((resolve, reject) => {\n    /* eslint-disable prefer-promise-reject-errors */\n    promise.then(\n      (val) => (hasCanceled ? reject({ isCanceled: true }) : resolve(val)),\n      (error) => (hasCanceled ? reject({ isCanceled: true }) : reject(error)),\n    );\n    /* eslint-enable */\n  });\n\n  return {\n    promise: wrappedPromise,\n    cancel() {\n      hasCanceled = true;\n    },\n  };\n};\n\nexport const registerLayoutChangeEvents = () => {\n  // Create a map containing all breakpoints exposed via html:before\n  const { layouts } = getGridBreakpoints();\n  if (layouts) {\n    const breakpoints = new Map([...Object.entries(layouts), ['default', '240px']]);\n    const decr1 = (val) => `${Number(val.replace('px', '') - 1)}px`;\n\n    const setupQuery = (query, size) => {\n      // matchMedia listener handler: Dispatch `o-grid.layoutChange` event if a match\n      const handleMQChange = (mql) => {\n        if (mql.matches) {\n          window.dispatchEvent(\n            new CustomEvent('o-grid.layoutChange', {\n              detail: size,\n            }),\n          );\n        }\n      };\n\n      const mql = window.matchMedia(query);\n      mql.addListener(handleMQChange);\n      handleMQChange(mql);\n\n      return [query, handleMQChange];\n    };\n\n    // Generate media queries for each\n    return [...breakpoints].map(([size, width]) => {\n      switch (size) {\n        case 'S':\n          return setupQuery(\n            `(min-width: ${width}) and (max-width: ${decr1(breakpoints.get('M'))})`,\n            size,\n          );\n        case 'M':\n          return setupQuery(\n            `(min-width: ${width}) and (max-width: ${decr1(breakpoints.get('L'))})`,\n            size,\n          );\n        case 'L':\n          return setupQuery(\n            `(min-width: ${width}) and (max-width: ${decr1(breakpoints.get('XL'))})`,\n            size,\n          );\n        case 'XL':\n          return setupQuery(`(min-width: ${width})`, size);\n        case 'default':\n        default:\n          return setupQuery(`(max-width: ${decr1(breakpoints.get('S'))})`, size);\n      }\n    });\n  }\n\n  throw new Error(\n    'To enable grid layout change events, include oGridSurfaceLayoutSizes in your Sass',\n  );\n};\n\nexport const unregisterLayoutChangeEvents = (listeners) => {\n  const { layouts } = getGridBreakpoints();\n  if (layouts) {\n    const breakpoints = new Map([...Object.entries(layouts), ['default', '240px']]);\n    const decr1 = (val) => `${Number(val.replace('px', '') - 1)}px`;\n\n    const removeQuery = (query) => {\n      const [, listener] = listeners.find(([q]) => q === query);\n      const mql = window.matchMedia(query);\n      mql.removeListener(listener);\n    };\n\n    breakpoints.forEach((width, size) => {\n      switch (size) {\n        case 'S':\n          removeQuery(\n            `(min-width: ${width}) and (max-width: ${decr1(breakpoints.get('M'))})`,\n            size,\n          );\n          break;\n        case 'M':\n          removeQuery(\n            `(min-width: ${width}) and (max-width: ${decr1(breakpoints.get('L'))})`,\n            size,\n          );\n          break;\n        case 'L':\n          removeQuery(\n            `(min-width: ${width}) and (max-width: ${decr1(breakpoints.get('XL'))})`,\n            size,\n          );\n          break;\n        case 'XL':\n          removeQuery(`(min-width: ${width})`, size);\n          break;\n        case 'default':\n        default:\n          removeQuery(`(max-width: ${decr1(breakpoints.get('S'))})`, size);\n          break;\n      }\n    });\n  }\n};\n\n/**\n * @function\n * Tests whether an object is a DOM node.\n * Via: https://stackoverflow.com/a/384380/467760\n */\nexport function isNode(o) {\n  return typeof Node === 'object'\n    ? o instanceof Node\n    : o &&\n        typeof o === 'object' &&\n        typeof o.nodeType === 'number' &&\n        typeof o.nodeName === 'string';\n}\n\n/**\n * @function\n * Tests whether an object is a DOM element.\n * Via: https://stackoverflow.com/a/384380/467760\n */\nexport function isElement(o) {\n  return typeof HTMLElement === 'object'\n    ? o instanceof HTMLElement // DOM2\n    : o &&\n        typeof o === 'object' &&\n        o !== null &&\n        o.nodeType === 1 &&\n        typeof o.nodeName === 'string';\n}\n","/**\n * @file\n * Various ad sizes\n */\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport './styles.scss';\n\nexport const Ad = ({\n  name,\n  targeting,\n  background,\n  reserve,\n  showAdsLabel,\n  defaultFormat,\n  smallFormat,\n  mediumFormat,\n  largeFormat,\n  extraFormat,\n}) => {\n  return (\n    <div\n      className={`o-ads o-ads--center o-ads--${\n        background === 'slate' ? 'slate-' : ''\n      }background o-ads--reserve-${reserve} ${showAdsLabel ? 'o-ads--label-left' : ''}`}\n      data-o-ads-name={name}\n      data-o-ads-targeting={targeting}\n      data-o-ads-formats-default={defaultFormat}\n      data-o-ads-formats-small={smallFormat}\n      data-o-ads-formats-medium={mediumFormat}\n      data-o-ads-formats-large={largeFormat}\n      data-o-ads-formats-extra={extraFormat}\n      aria-hidden=\"true\"\n    />\n  );\n};\n\nAd.displayName = 'GAd';\n\nexport const TopAd = () => (\n  <Ad\n    name=\"top-ad\"\n    targeting=\"pos=top;\"\n    reserve=\"90\"\n    defaultFormat={false}\n    smallFormat={false}\n    mediumFormat=\"Leaderboard,Responsive\"\n    largeFormat=\"SuperLeaderboard,Leaderboard,Responsive\"\n    extraFormat=\"Billboard,SuperLeaderboard,Leaderboard,Responsive\"\n  />\n);\n\nTopAd.displayName = 'GTopAd';\n\nexport const MiddleAd = () => (\n  <Ad\n    name=\"mid-ad\"\n    targeting=\"pos=mid;\"\n    reserve=\"250\"\n    showAdsLabel\n    defaultFormat=\"Responsive\"\n    smallFormat=\"MediumRectangle,Responsive\"\n    mediumFormat=\"MediumRectangle,Responsive\"\n    largeFormat=\"MediumRectangle,Responsive\"\n    extraFormat=\"MediumRectangle,Responsive\"\n  />\n);\n\nMiddleAd.displayName = 'GMiddleAd';\n\nAd.propTypes = {\n  name: PropTypes.string,\n  targeting: PropTypes.string,\n  background: PropTypes.oneOf(['default', 'slate']),\n  reserve: PropTypes.oneOf(['90', '250']), // creates placeholder of height to prevent page from jumping when ad loads\n  showAdsLabel: PropTypes.bool,\n  defaultFormat: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]),\n  smallFormat: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]),\n  mediumFormat: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]),\n  largeFormat: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]),\n  extraFormat: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]),\n};\n\n// defaults to top ad configuration\nAd.defaultProps = {\n  name: 'top-ad',\n  targeting: 'pos=top',\n  background: 'default',\n  reserve: '90',\n  showAdsLabel: false,\n  defaultFormat: false,\n  smallFormat: false,\n  mediumFormat: 'Leaderboard,Responsive',\n  largeFormat: 'SuperLeaderboard,Leaderboard,Responsive',\n  extraFormat: 'Billboard,SuperLeaderboard,Leaderboard,Responsive',\n};\n","/**\n * @file\n * OnwardJourney component\n */\n\nimport React, { useEffect, useState, useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport { makeCancelable } from '../shared/helpers';\nimport './styles.scss';\n\nconst OnwardJourney = ({ urlBase, layout, relatedContent }) => {\n  const [sections, setSections] = useState([]);\n  const sectionP = useRef();\n\n  useEffect(() => {\n    (async () => {\n      sectionP.current = makeCancelable(\n        Promise.all(\n          relatedContent.map(({ list, rows = 1 }) => {\n            const limit = rows * 4;\n            const url = `${urlBase}${list}/html/${layout}?limit=${limit}`;\n            return fetch(url).then(res => res.text());\n          }),\n        ),\n      );\n\n      try {\n        const sections = await sectionP.current.promise;\n        setSections(sections);\n      } catch (e) {\n        if (e.isCanceled) return;\n        console.error(e); // eslint-disable-line no-console\n      }\n    })();\n\n    // Cleanup\n    return () => {\n      sectionP.current.cancel();\n    };\n  }, [layout, relatedContent, urlBase]);\n\n  return sections.map((section, idx) => (\n    <section\n      key={idx} // eslint-disable-line react/no-array-index-key\n      className=\"onward-journey__section\"\n      data-g-component=\"onward-journey\"\n      dangerouslySetInnerHTML={{ __html: section }} // eslint-disable-line react/no-danger\n    />\n  ));\n};\n\nOnwardJourney.displayName = 'GOnwardJourney';\n\nOnwardJourney.propTypes = {\n  relatedContent: PropTypes.arrayOf(\n    PropTypes.shape({\n      rows: PropTypes.number.isRequired,\n      list: PropTypes.string,\n    }),\n  ),\n  urlBase: PropTypes.string,\n  layout: PropTypes.string,\n};\n\nOnwardJourney.defaultProps = {\n  relatedContent: [],\n  urlBase: 'https://ig.ft.com/onwardjourney/v3/',\n  layout: '',\n};\n\nexport default OnwardJourney;\n","/**\n * @file\n * Comments component\n */\n\nimport React, { useEffect, useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport OComments from '@financial-times/o-comments/main';\nimport { flagsPropType } from '../shared/proptypes';\nimport './styles.scss';\n\nconst Comments = ({ id, url, linkPageUrl, flags }) => {\n  const ref = useRef();\n\n  const { dark } = flags;\n\n  useEffect(() => {\n    if ((id && linkPageUrl) || (id && url)) {\n      new OComments(ref.current, {\n        // eslint-disable-line no-new\n        articleUrl: linkPageUrl || url,\n        articleId: id,\n        title: id,\n      });\n    }\n  }, [id, url, linkPageUrl]);\n\n  const comments = (\n    <div className=\"o-grid-container\">\n      <div className=\"o-grid-row\">\n        <div data-o-grid-colspan=\"12 S11 Scenter M9 L8 XL7\">\n          <div ref={ref} data-o-component=\"o-comments\" id=\"comments\">\n            <div className=\"o--if-no-js\">\n              To participate in this chat, you need to upgrade to a newer web browser.{' '}\n              <a href=\"https://help.ft.com/tools-services/browser-compatibility/\">Learn more.</a>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  );\n\n  if (dark) {\n    return <div className=\"pink\">{comments}</div>;\n  }\n\n  return comments;\n};\n\nComments.displayName = 'GComments';\n\nComments.propTypes = {\n  title: PropTypes.string,\n  id: PropTypes.string.isRequired,\n  url: PropTypes.string.isRequired,\n  flags: flagsPropType,\n};\n\nComments.defaultProps = {\n  title: 'Comments',\n  flags: {\n    dark: false,\n  },\n};\n\nexport default Comments;\nComments.displayName = 'GComments';\n","/**\n * @file\n * Footer component\n */\nimport React, { useEffect, useRef } from 'react';\nimport OFooter from '@financial-times/o-footer/main';\nimport './styles.scss';\n\nconst Footer = () => {\n  const ref = useRef();\n\n  useEffect(() => {\n    (async () => {\n      try {\n        new OFooter(ref.current);\n      } catch (e) {\n        console.error(e);\n      }\n    })();\n  }, []);\n\n  return (\n    <footer\n      ref={ref}\n      data-o-footer--no-js=\"\"\n      className=\"o-footer o-footer--theme-dark\"\n      data-o-component=\"o-footer\"\n    >\n      <div className=\"o-footer__container\">\n        <div className=\"o-footer__row\">\n          <nav className=\"o-footer__matrix\" role=\"navigation\" aria-label=\"Useful links\">\n            <div className=\"o-footer__matrix-group o-footer__matrix-group--1\">\n              <h3 className=\"o-footer__matrix-title\">Support</h3>\n              <div className=\"o-footer__matrix-content\" id=\"o-footer-section-0\">\n                <div className=\"o-footer__matrix-column\">\n                  <a className=\"o-footer__matrix-link\" href=\"/tour\" data-trackable=\"View Site Tips\">\n                    <span className=\"o-footer__matrix-link__copy\">View Site Tips</span>\n                  </a>\n                  <a\n                    className=\"o-footer__matrix-link\"\n                    href=\"https://help.ft.com\"\n                    data-trackable=\"Help Centre\"\n                  >\n                    <span className=\"o-footer__matrix-link__copy\">Help Centre</span>\n                  </a>\n                  <a\n                    className=\"o-footer__matrix-link\"\n                    href=\"https://aboutus.ft.com/contact-us\"\n                    data-trackable=\"Contact Us\"\n                  >\n                    <span className=\"o-footer__matrix-link__copy\">Contact Us</span>\n                  </a>\n                  <a\n                    className=\"o-footer__matrix-link\"\n                    href=\"https://www.ft.com/aboutus\"\n                    data-trackable=\"About Us\"\n                  >\n                    <span className=\"o-footer__matrix-link__copy\">About Us</span>\n                  </a>\n                  <a\n                    className=\"o-footer__matrix-link\"\n                    href=\"https://www.ft.com/accessibility\"\n                    data-trackable=\"Accessibility\"\n                  >\n                    <span className=\"o-footer__matrix-link__copy\">Accessibility</span>\n                  </a>\n                  <a\n                    className=\"o-footer__matrix-link\"\n                    href=\"https://www.ft.com/tour/myft\"\n                    data-trackable=\"myFT Tour\"\n                  >\n                    <span className=\"o-footer__matrix-link__copy\">myFT Tour</span>\n                  </a>\n                  <a\n                    className=\"o-footer__matrix-link\"\n                    href=\"https://aboutus.ft.com/en-gb/careers/\"\n                    data-trackable=\"Careers\"\n                  >\n                    <span className=\"o-footer__matrix-link__copy\">Careers</span>\n                  </a>\n                </div>\n              </div>\n            </div>\n            <div className=\"o-footer__matrix-group o-footer__matrix-group--1\">\n              <h3 className=\"o-footer__matrix-title\">Legal &amp; Privacy</h3>\n              <div className=\"o-footer__matrix-content\" id=\"o-footer-section-1\">\n                <div className=\"o-footer__matrix-column\">\n                  <a\n                    className=\"o-footer__matrix-link\"\n                    href=\"https://help.ft.com/help/legal-privacy/terms-conditions/\"\n                    data-trackable=\"Terms &amp; Conditions\"\n                  >\n                    <span className=\"o-footer__matrix-link__copy\">Terms &amp; Conditions</span>\n                  </a>\n                  <a\n                    className=\"o-footer__matrix-link\"\n                    href=\"https://help.ft.com/help/legal-privacy/privacy/\"\n                    data-trackable=\"Privacy Policy\"\n                  >\n                    <span className=\"o-footer__matrix-link__copy\">Privacy Policy</span>\n                  </a>\n                  <a\n                    className=\"o-footer__matrix-link\"\n                    href=\"https://help.ft.com/help/legal-privacy/cookies/\"\n                    data-trackable=\"Cookies\"\n                  >\n                    <span className=\"o-footer__matrix-link__copy\">Cookies</span>\n                  </a>\n                  <a\n                    className=\"o-footer__matrix-link\"\n                    href=\"https://help.ft.com/help/legal-privacy/copyright/copyright-policy/\"\n                    data-trackable=\"Copyright\"\n                  >\n                    <span className=\"o-footer__matrix-link__copy\">Copyright</span>\n                  </a>\n                  <a\n                    className=\"o-footer__matrix-link\"\n                    href=\"https://help.ft.com/help/legal/slavery-statement/\"\n                    data-trackable=\"Slavery Statement &amp; Policies\"\n                  >\n                    <span className=\"o-footer__matrix-link__copy\">\n                      Slavery Statement &amp; Policies\n                    </span>\n                  </a>\n                </div>\n              </div>\n            </div>\n            <div className=\"o-footer__matrix-group o-footer__matrix-group--1\">\n              <h3 className=\"o-footer__matrix-title\" aria-controls=\"o-footer-section-2\">\n                Services\n              </h3>\n              <div className=\"o-footer__matrix-content\" id=\"o-footer-section-2\">\n                <div className=\"o-footer__matrix-column\">\n                  <a\n                    className=\"o-footer__matrix-link\"\n                    href=\"https://www.ft.com/securedrop\"\n                    data-trackable=\"Share News Tips Securely\"\n                    data-o-tracking-do-not-track=\"true\"\n                  >\n                    <span className=\"o-footer__matrix-link__copy\">Share News Tips Securely</span>\n                  </a>\n                  <a\n                    className=\"o-footer__matrix-link\"\n                    href=\"https://www.ft.com/products\"\n                    data-trackable=\"Individual Subscriptions\"\n                  >\n                    <span className=\"o-footer__matrix-link__copy\">Individual Subscriptions</span>\n                  </a>\n                  <a\n                    className=\"o-footer__matrix-link\"\n                    href=\"https://enterprise.ft.com/en-gb/services/group-subscriptions/group-contact-us/?segmentId=383c7f63-abf4-b62d-cb33-4c278e6fdf61&amp;cpccampaign=B2B_link_ft.com_footer\"\n                    data-trackable=\"Group Subscriptions\"\n                  >\n                    <span className=\"o-footer__matrix-link__copy\">Group Subscriptions</span>\n                  </a>\n                  <a\n                    className=\"o-footer__matrix-link\"\n                    href=\"https://enterprise.ft.com/en-gb/services/republishing/\"\n                    data-trackable=\"Republishing\"\n                  >\n                    <span className=\"o-footer__matrix-link__copy\">Republishing</span>\n                  </a>\n                  <a\n                    className=\"o-footer__matrix-link\"\n                    href=\"https://www.businessesforsale.com/ft2/notices\"\n                    data-trackable=\"Contracts &amp; Tenders\"\n                  >\n                    <span className=\"o-footer__matrix-link__copy\">Contracts &amp; Tenders</span>\n                  </a>\n                  <a\n                    className=\"o-footer__matrix-link\"\n                    href=\"https://www.exec-appointments.com/\"\n                    data-trackable=\"Executive Job Search\"\n                  >\n                    <span className=\"o-footer__matrix-link__copy\">Executive Job Search</span>\n                  </a>\n                  <a\n                    className=\"o-footer__matrix-link\"\n                    href=\"https://fttoolkit.co.uk/\"\n                    data-trackable=\"Advertise with the FT\"\n                  >\n                    <span className=\"o-footer__matrix-link__copy\">Advertise with the FT</span>\n                  </a>\n                  <a\n                    className=\"o-footer__matrix-link\"\n                    href=\"https://twitter.com/financialtimes\"\n                    data-trackable=\"Follow the FT on Twitter\"\n                  >\n                    <span className=\"o-footer__matrix-link__copy\">Follow the FT on Twitter</span>\n                  </a>\n                  <a\n                    className=\"o-footer__matrix-link\"\n                    href=\"https://transact.ft.com/\"\n                    data-trackable=\"FT Transact\"\n                  >\n                    <span className=\"o-footer__matrix-link__copy\">FT Transact</span>\n                  </a>\n                  <a\n                    className=\"o-footer__matrix-link\"\n                    href=\"https://enterprise.ft.com/en-gb/services/group-subscriptions/education/\"\n                    data-trackable=\"Secondary Schools\"\n                  >\n                    <span className=\"o-footer__matrix-link__copy\">Secondary Schools</span>\n                  </a>\n                </div>\n              </div>\n            </div>\n            <div className=\"o-footer__matrix-group o-footer__matrix-group--1\">\n              <h3 className=\"o-footer__matrix-title\" aria-controls=\"o-footer-section-3\">\n                Tools\n              </h3>\n              <div className=\"o-footer__matrix-content\" id=\"o-footer-section-3\">\n                <div className=\"o-footer__matrix-column\">\n                  <a\n                    className=\"o-footer__matrix-link\"\n                    href=\"https://markets.ft.com/data/portfolio/dashboard\"\n                    data-trackable=\"Portfolio\"\n                  >\n                    <span className=\"o-footer__matrix-link__copy\">Portfolio</span>\n                  </a>\n                  <a\n                    className=\"o-footer__matrix-link\"\n                    href=\"https://www.ft.com/todaysnewspaper\"\n                    data-trackable=\"Today's Newspaper (ePaper)\"\n                  >\n                    <span className=\"o-footer__matrix-link__copy\">Today's Newspaper (ePaper)</span>\n                  </a>\n                  <a\n                    className=\"o-footer__matrix-link\"\n                    href=\"https://markets.ft.com/data/alerts/\"\n                    data-trackable=\"Alerts Hub\"\n                  >\n                    <span className=\"o-footer__matrix-link__copy\">Alerts Hub</span>\n                  </a>\n                  <a\n                    className=\"o-footer__matrix-link\"\n                    href=\"https://rankings.ft.com\"\n                    data-trackable=\"Business School Rankings\"\n                  >\n                    <span className=\"o-footer__matrix-link__copy\">Business School Rankings</span>\n                  </a>\n                  <a\n                    className=\"o-footer__matrix-link\"\n                    href=\"https://kat.ft.com/\"\n                    data-trackable=\"Enterprise Tools\"\n                  >\n                    <span className=\"o-footer__matrix-link__copy\">Enterprise Tools</span>\n                  </a>\n                  <a\n                    className=\"o-footer__matrix-link\"\n                    href=\"https://www.ft.com/news-feed\"\n                    data-trackable=\"News feed\"\n                  >\n                    <span className=\"o-footer__matrix-link__copy\">News feed</span>\n                  </a>\n                  <a\n                    className=\"o-footer__matrix-link\"\n                    href=\"https://www.ft.com/newsletters\"\n                    data-trackable=\"Newsletters\"\n                  >\n                    <span className=\"o-footer__matrix-link__copy\">Newsletters</span>\n                  </a>\n                  <a\n                    className=\"o-footer__matrix-link\"\n                    href=\"https://markets.ft.com/research/Markets/Currencies?segid=70113\"\n                    data-trackable=\"Currency Converter\"\n                  >\n                    <span className=\"o-footer__matrix-link__copy\">Currency Converter</span>\n                  </a>\n                </div>\n              </div>\n            </div>\n            <div className=\"o-footer__matrix-group o-footer__matrix-group--1\">\n              <h3 className=\"o-footer__matrix-title\" aria-controls=\"o-footer-section-4\">\n                Community &amp; Events\n              </h3>\n              <div className=\"o-footer__matrix-content\" id=\"o-footer-section-4\">\n                <div className=\"o-footer__matrix-column\">\n                  <a\n                    className=\"o-footer__matrix-link\"\n                    href=\"https://www.ft.com/tour/community\"\n                    data-trackable=\"FT Community\"\n                  >\n                    <span className=\"o-footer__matrix-link__copy\">FT Community</span>\n                  </a>\n                  <a\n                    className=\"o-footer__matrix-link\"\n                    href=\"https://live.ft.com/\"\n                    data-trackable=\"FT Live\"\n                  >\n                    <span className=\"o-footer__matrix-link__copy\">FT Live</span>\n                  </a>\n                  <a\n                    className=\"o-footer__matrix-link\"\n                    href=\"https://forums.ft.com\"\n                    data-trackable=\"FT Forums\"\n                  >\n                    <span className=\"o-footer__matrix-link__copy\">FT Forums</span>\n                  </a>\n                  <a\n                    className=\"o-footer__matrix-link\"\n                    href=\"https://bdp.ft.com\"\n                    data-trackable=\"Board Director Programme\"\n                  >\n                    <span className=\"o-footer__matrix-link__copy\">Board Director Programme</span>\n                  </a>\n                </div>\n              </div>\n            </div>\n            <div className=\"o-footer__matrix-group o-footer__matrix-group--1\">\n              <h3 className=\"o-footer__matrix-title o-footer__matrix-title--link\">\n                <a\n                  className=\"o-footer__matrix-link o-footer__matrix-link--more\"\n                  id=\"o-footer-section-5\"\n                  href=\"https://ft.com/more-from-ft-group\"\n                >\n                  <span className=\"o-footer__matrix-link__copy\">More from the FT Group</span>\n                </a>\n              </h3>\n            </div>\n          </nav>\n        </div>\n        <div className=\"o-footer__copyright\" role=\"contentinfo\">\n          <small>\n            Markets data delayed by at least 15 minutes. &#xA9; THE FINANCIAL TIMES LTD{' '}\n            {new Date().getFullYear()}\n            {'. '}\n            <abbr title=\"Financial Times\" aria-label=\"F T\">\n              FT\n            </abbr>{' '}\n            and &#x2018;Financial Times&#x2019; are trademarks of The Financial Times Ltd.\n            <br />\n            The Financial Times and its journalism are subject to a self-regulation regime under the{' '}\n            <a\n              href=\"https://aboutus.ft.com/en-gb/ft-editorial-code/\"\n              aria-label=\"F T Editorial Code of Practice\"\n            >\n              FT Editorial Code of Practice\n            </a>\n            .\n          </small>\n        </div>\n      </div>\n      <div className=\"o-footer__brand\">\n        <div className=\"o-footer__container\">\n          <div className=\"o-footer__brand-logo\" />\n        </div>\n      </div>\n    </footer>\n  );\n};\n\nFooter.displayName = 'GFooter';\n\nexport default Footer;\n","/**\n * @file\n * Sundry hooks that have multiple use-cases\n */\n\nimport { useRef, useEffect, useState } from 'react';\nimport { isElement, registerLayoutChangeEvents, unregisterLayoutChangeEvents } from './helpers';\n\n/**\n * @function\n * Provides a standardised way of creating the container DOM elements for portals\n * Usage:\n  ```\n  const SomeComponent = () => {\n    const target = usePortal();\n    return createPortal(<div>my modal</div>, target);\n  }\n  ```\n *\n * Modified from: https://www.jayfreestone.com/writing/react-portals-with-hooks/\n */\nexport const usePortal = (parent) => {\n  const rootRef = useRef(null);\n\n  useEffect(() => {\n    if (!rootRef.current) {\n      const rootEl = document.createElement('div');\n      rootEl.classList.add('g-portal');\n      rootRef.current = rootEl;\n    }\n    /* eslint-disable no-nested-ternary */\n    const parentEl = isElement(parent)\n      ? parent\n      : typeof parent === 'string'\n      ? document.querySelector(parent) || document.createElement('div')\n      : document.createElement('div');\n    /* eslint-enable no-nested-ternary */\n\n    // Unmounted\n    if (!parentEl.parentElement) {\n      parentEl.classList.add('g-portal-parent');\n      document.body.insertBefore(parentEl, document.body.firstElementChild);\n    }\n\n    parentEl.appendChild(rootRef.current);\n\n    return () => {\n      rootRef.current.remove();\n      // Remove parent element if empty.\n      if (parentEl.childNodes.length === 0) parentEl.remove();\n    };\n  }, [parent]);\n\n  return rootRef.current;\n};\n\n/**\n * @function\n * Initialises o-ads\n */\nexport const useAds = (config, enabled = true) => {\n  useEffect(() => {\n    // Async side-effects should be in an IIFE in useEffect; don't make the CB async!\n    (async () => {\n      const { default: OAds } = await import('@financial-times/ads-legacy-o-ads');\n      try {\n        if (enabled) {\n          const initialised = await OAds.init({\n            gpt: {\n              network: 5887,\n              site: config.gptSite || 'ft.com',\n              zone: config.gptZone || 'unclassified',\n            },\n            targeting: config.targeting,\n            lazyLoad: true,\n          });\n\n          const slots = Array.from(document.querySelectorAll('.o-ads, [data-o-ads-name]'));\n          slots.forEach(initialised.slots.initSlot.bind(initialised.slots));\n        }\n      } catch (e) {\n        if (typeof global === 'undefined' || !global?.STORYBOOK_ENV) console.error(e); // eslint-disable-line no-console\n      }\n    })();\n  }, [config, enabled]);\n};\n\n/**\n * @function\n * Initialises o-grid's layout change events on first call;\n * then returns the current breakpoint.\n */\nexport const useLayoutChangeEvents = () => {\n  const [breakpoint, setBreakpoint] = useState('default');\n\n  const listenersRef = useRef();\n\n  const update = ({ detail }) => {\n    setBreakpoint({ breakpoint: detail });\n  };\n\n  useEffect(() => {\n    try {\n      window.addEventListener('o-grid.layoutChange', update);\n      listenersRef.current = registerLayoutChangeEvents();\n\n      return () => {\n        unregisterLayoutChangeEvents(listenersRef.current);\n        window.removeEventListener('o-grid.layoutChange', update);\n      };\n    } catch (e) {\n      // Suppress errors in Jest\n      if (typeof global === 'undefined' || !global?.STORYBOOK_ENV) console.error(e); // eslint-disable-line no-console\n    }\n  }, []);\n\n  return breakpoint;\n};\n\n/**\n * @file\n * Sets up global keyboard shortcuts\n */\nexport const useKeyboardShortcuts = (shortcuts) => {\n  const handlers = useRef(null);\n  useEffect(() => {\n    handlers.current = shortcuts;\n  }, [shortcuts]);\n  useEffect(() => {\n    const listener = ({ keyCode, target }) => {\n      if (target === document.body && handlers.current[keyCode]) {\n        handlers.current[keyCode]();\n      }\n    };\n\n    document.addEventListener('keydown', listener);\n    return () => {\n      window.removeEventListener('keydown', listener);\n    };\n  }, []);\n\n  // Returns synthetic event listeners\n  return Object.entries(shortcuts).reduce(\n    (a, [k, v]) => ({\n      ...a,\n      [k]: ({ keyPress }) => keyPress === k && v(),\n    }),\n    {},\n  );\n};\n\nexport default {\n  usePortal,\n  useAds,\n  useLayoutChangeEvents,\n  useKeyboardShortcuts,\n};\n","/**\n * @file\n * Lines geometry\n */\n\nimport React, { useContext } from 'react';\nimport { LinePath } from '@visx/shape';\nimport { Group } from '@visx/group';\nimport { inferScaleType } from '@visx/scale';\nimport { PlotContext } from '../chart-frame/plot-context';\nimport { lineComponentPropTypes, linesComponentPropTypes } from '../prop-types';\nimport { lineComponentDefaultProps, linesComponentDefaultProps } from '../default-props';\nimport { isZeroOrDefined } from '../../util';\n\n// Original line component\nconst LineWithContext = ({\n  data,\n  xVariable,\n  yVariable,\n  color, // @TODO This is a weird API. Should be like <Dots />\n  xScale,\n  yScale,\n  yTransformFunction,\n  yAccessor,\n  xAccessor,\n  width: propWidth,\n  height: propHeight,\n  strokeWidth,\n  defined,\n}) => {\n  const { width, height } = useContext(PlotContext);\n\n  xScale.rangeRound([0, propWidth || width]);\n  yScale.rangeRound([propHeight || height, 0]);\n\n  const xPosition = xAccessor || ((datum) => xScale(datum[xVariable]));\n  const yPosition =\n    yAccessor ||\n    ((datum) =>\n      yScale(yTransformFunction ? yTransformFunction(datum[yVariable]) : datum[yVariable]));\n\n  return (\n    <LinePath\n      defined={defined}\n      data={data}\n      x={(datum) => datum && xPosition(datum)}\n      y={(datum) => datum && yPosition(datum)}\n      stroke={color}\n      strokeWidth={strokeWidth}\n      strokeLinecap=\"square\"\n      strokeLinejoin=\"round\"\n    />\n  );\n};\n\n// Single line\nconst Line = ({ data, xPosition, yPosition, color, strokeWidth, defined }) => (\n  <LinePath\n    defined={defined}\n    data={data}\n    x={(datum) => datum && xPosition(datum)}\n    y={(datum) => datum && yPosition(datum)}\n    stroke={color}\n    strokeWidth={strokeWidth}\n    strokeLinecap=\"square\"\n    strokeLinejoin=\"round\"\n  />\n);\n\n// Series of lines\nconst Lines = ({\n  width,\n  height,\n  seriesNames,\n  data,\n  xScale,\n  xVariable,\n  yScale,\n  yTransformFunction,\n  colorScale,\n  strokeWidth,\n  defined,\n  highlightedLineOutlineWidth,\n  highlightedLineOutlineColor,\n}) => {\n  xScale.rangeRound([0, width]);\n  yScale.rangeRound([height, 0]);\n\n  const xPosition = (datum) => xScale(datum[xVariable]);\n  // yVariable is the seriesName\n  const yPosition = (yVariable) => (datum) =>\n    yScale(yTransformFunction ? yTransformFunction(datum[yVariable]) : datum[yVariable]);\n\n  return seriesNames.map((seriesName) => (\n    <Group key={`series_${seriesName}`}>\n      {highlightedLineOutlineWidth > 0 && (\n        <Line\n          width={width}\n          height={height}\n          data={data.filter((d) => isZeroOrDefined(d[seriesName]))}\n          xPosition={xPosition}\n          yPosition={yPosition(seriesName)}\n          color={highlightedLineOutlineColor}\n          strokeWidth={highlightedLineOutlineWidth}\n          defined={defined}\n        />\n      )}\n      <Line\n        width={width}\n        height={height}\n        data={data.filter((d) => isZeroOrDefined(d[seriesName]))}\n        xPosition={xPosition}\n        yPosition={yPosition(seriesName)}\n        color={colorScale(seriesName)}\n        strokeWidth={strokeWidth}\n        defined={defined}\n      />\n    </Group>\n  ));\n};\n\nconst MemoisedLines = React.memo(\n  Lines,\n  (prevProps, nextProps) => JSON.stringify(prevProps) === JSON.stringify(nextProps)\n);\n\nconst LinesWithContext = ({\n  data,\n  width: propWidth,\n  height: propHeight,\n  highlightLinesOnHover,\n  hoveredLineStrokeWidth,\n  hoveredLinesColorScale,\n  highlightedLineOutlineWidth,\n  ...props\n}) => {\n  const { width, height, hoveredSeries } = useContext(PlotContext);\n\n  const scaleProperties = {\n    yScaleType: inferScaleType(props.yScale),\n    yScaleDomain: props.yScale.domain(),\n    yScaleRange: props.yScale.range(),\n    xScaleType: inferScaleType(props.xScale),\n    xScaleDomain: props.xScale.domain(),\n    xScaleRange: props.xScale.range(),\n  };\n\n  return (\n    <Group>\n      <MemoisedLines\n        {...props}\n        data={data}\n        width={propWidth || width}\n        height={propHeight || height}\n        // This should force the lines to rerender when the scale properties change\n        {...scaleProperties}\n        highlightedLineOutlineWidth={highlightLinesOnHover ? 0 : highlightedLineOutlineWidth}\n      />\n      <MemoisedLines\n        {...props}\n        data={data}\n        width={propWidth || width}\n        height={propHeight || height}\n        // This should force the lines to rerender when the scale properties change\n        {...scaleProperties}\n        strokeWidth={hoveredLineStrokeWidth}\n        colorScale={hoveredLinesColorScale}\n        seriesNames={highlightLinesOnHover ? [hoveredSeries] : []}\n        highlightedLineOutlineWidth={highlightedLineOutlineWidth}\n      />\n    </Group>\n  );\n};\n\nLineWithContext.propTypes = lineComponentPropTypes;\nLineWithContext.defaultProps = lineComponentDefaultProps;\nLinesWithContext.propTypes = linesComponentPropTypes;\nLinesWithContext.defaultProps = linesComponentDefaultProps;\n\nexport { LineWithContext as Line, LinesWithContext as Lines };\nexport default null;\n","function _extends() {\n  module.exports = _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n\n    return target;\n  };\n\n  module.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n  return _extends.apply(this, arguments);\n}\n\nmodule.exports = _extends;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","export default {\n\tweb:'#FFF1e5',\n\tsocial:'#333',\n\tvideo:'#335',\n\tprint:'#FEE',\n\tclean:'#FFF',\n};","export default ['#006a93','#ddb831','#aad1d1','#ad1c21','#55a2c7','#0083b3'];\n","export default ['#ff0055','#0066ff','#b1e645','#00ccff','#f2e5da','#65798c'];\n","export default ['#0f5499','#EB5E8D','#70DCE6','#9dbf57','#208fce','#7f062e','#c2b7af'];\n","var __spreadArray = (this && this.__spreadArray) || function (to, from) {\n    for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n        to[j] = from[i];\n    return to;\n};\n/**\n * Interprets an encoded string and returns either the string or null/undefined if not available.\n * Ignores array inputs (takes just first element in array)\n * @param input encoded string\n */\nfunction getEncodedValue(input, allowEmptyString) {\n    if (input == null) {\n        return input;\n    }\n    // '' or []\n    if (input.length === 0 &&\n        (!allowEmptyString || (allowEmptyString && input !== ''))) {\n        return null;\n    }\n    var str = input instanceof Array ? input[0] : input;\n    if (str == null) {\n        return str;\n    }\n    if (!allowEmptyString && str === '') {\n        return null;\n    }\n    return str;\n}\n/**\n * Interprets an encoded string and return null/undefined or an array with\n * the encoded string contents\n * @param input encoded string\n */\nfunction getEncodedValueArray(input) {\n    if (input == null) {\n        return input;\n    }\n    return input instanceof Array ? input : input === '' ? [] : [input];\n}\n/**\n * Encodes a date as a string in YYYY-MM-DD format.\n *\n * @param {Date} date\n * @return {String} the encoded date\n */\nexport function encodeDate(date) {\n    if (date == null) {\n        return date;\n    }\n    var year = date.getFullYear();\n    var month = date.getMonth() + 1;\n    var day = date.getDate();\n    return year + \"-\" + (month < 10 ? \"0\" + month : month) + \"-\" + (day < 10 ? \"0\" + day : day);\n}\n/**\n * Converts a date in the format 'YYYY-mm-dd...' into a proper date, because\n * new Date() does not do that correctly. The date can be as complete or incomplete\n * as necessary (aka, '2015', '2015-10', '2015-10-01').\n * It will not work for dates that have times included in them.\n *\n * If an array is provided, only the first entry is used.\n *\n * @param  {String} input String date form like '2015-10-01'\n * @return {Date} parsed date\n */\nexport function decodeDate(input) {\n    var dateString = getEncodedValue(input);\n    if (dateString == null)\n        return dateString;\n    var parts = dateString.split('-');\n    // may only be a year so won't even have a month\n    if (parts[1] != null) {\n        parts[1] -= 1; // Note: months are 0-based\n    }\n    else {\n        // just a year, set the month and day to the first\n        parts[1] = 0;\n        parts[2] = 1;\n    }\n    var decoded = new (Date.bind.apply(Date, __spreadArray([void 0], parts)))();\n    if (isNaN(decoded.getTime())) {\n        return null;\n    }\n    return decoded;\n}\n/**\n * Encodes a date as a string in ISO 8601 (\"2019-05-28T10:58:40Z\") format.\n *\n * @param {Date} date\n * @return {String} the encoded date\n */\nexport function encodeDateTime(date) {\n    if (date == null) {\n        return date;\n    }\n    return date.toISOString();\n}\n/**\n * Converts a date in the https://en.wikipedia.org/wiki/ISO_8601 format.\n * For allowed inputs see specs:\n *  - https://tools.ietf.org/html/rfc2822#page-14\n *  - http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.15\n *\n * If an array is provided, only the first entry is used.\n *\n * @param  {String} input String date form like '1995-12-17T03:24:00'\n * @return {Date} parsed date\n */\nexport function decodeDateTime(input) {\n    var dateString = getEncodedValue(input);\n    if (dateString == null)\n        return dateString;\n    var decoded = new Date(dateString);\n    if (isNaN(decoded.getTime())) {\n        return null;\n    }\n    return decoded;\n}\n/**\n * Encodes a boolean as a string. true -> \"1\", false -> \"0\".\n *\n * @param {Boolean} bool\n * @return {String} the encoded boolean\n */\nexport function encodeBoolean(bool) {\n    if (bool == null) {\n        return bool;\n    }\n    return bool ? '1' : '0';\n}\n/**\n * Decodes a boolean from a string. \"1\" -> true, \"0\" -> false.\n * Everything else maps to undefined.\n *\n * If an array is provided, only the first entry is used.\n *\n * @param {String} input the encoded boolean string\n * @return {Boolean} the boolean value\n */\nexport function decodeBoolean(input) {\n    var boolStr = getEncodedValue(input);\n    if (boolStr == null)\n        return boolStr;\n    if (boolStr === '1') {\n        return true;\n    }\n    else if (boolStr === '0') {\n        return false;\n    }\n    return null;\n}\n/**\n * Encodes a number as a string.\n *\n * @param {Number} num\n * @return {String} the encoded number\n */\nexport function encodeNumber(num) {\n    if (num == null) {\n        return num;\n    }\n    return String(num);\n}\n/**\n * Decodes a number from a string. If the number is invalid,\n * it returns undefined.\n *\n * If an array is provided, only the first entry is used.\n *\n * @param {String} input the encoded number string\n * @return {Number} the number value\n */\nexport function decodeNumber(input) {\n    var numStr = getEncodedValue(input);\n    if (numStr == null)\n        return numStr;\n    if (numStr === '')\n        return null;\n    var result = +numStr;\n    return result;\n}\n/**\n * Encodes a string while safely handling null and undefined values.\n *\n * @param {String} str a string to encode\n * @return {String} the encoded string\n */\nexport function encodeString(str) {\n    if (str == null) {\n        return str;\n    }\n    return String(str);\n}\n/**\n * Decodes a string while safely handling null and undefined values.\n *\n * If an array is provided, only the first entry is used.\n *\n * @param {String} input the encoded string\n * @return {String} the string value\n */\nexport function decodeString(input) {\n    var str = getEncodedValue(input, true);\n    if (str == null)\n        return str;\n    return String(str);\n}\n/**\n * Decodes an enum value while safely handling null and undefined values.\n *\n * If an array is provided, only the first entry is used.\n *\n * @param {String} input the encoded string\n * @param {String[]} enumValues allowed enum values\n * @return {String} the string value from enumValues\n */\nexport function decodeEnum(input, enumValues) {\n    var str = decodeString(input);\n    if (str == null)\n        return str;\n    return enumValues.includes(str) ? str : undefined;\n}\n/**\n * Encodes anything as a JSON string.\n *\n * @param {Any} any The thing to be encoded\n * @return {String} The JSON string representation of any\n */\nexport function encodeJson(any) {\n    if (any == null) {\n        return any;\n    }\n    return JSON.stringify(any);\n}\n/**\n * Decodes a JSON string into javascript\n *\n * If an array is provided, only the first entry is used.\n *\n * @param {String} input The JSON string representation\n * @return {Any} The javascript representation\n */\nexport function decodeJson(input) {\n    var jsonStr = getEncodedValue(input);\n    if (jsonStr == null)\n        return jsonStr;\n    var result = null;\n    try {\n        result = JSON.parse(jsonStr);\n    }\n    catch (e) {\n        /* ignore errors, returning undefined */\n    }\n    return result;\n}\n/**\n * Encodes an array as a JSON string.\n *\n * @param {Array} array The array to be encoded\n * @return {String[]} The array of strings to be put in the URL\n * as repeated query parameters\n */\nexport function encodeArray(array) {\n    if (array == null) {\n        return array;\n    }\n    return array;\n}\n/**\n * Decodes an array or singular value and returns it as an array\n * or undefined if falsy. Filters out undefined values.\n *\n * @param {String | Array} input The input value\n * @return {Array} The javascript representation\n */\nexport function decodeArray(input) {\n    var arr = getEncodedValueArray(input);\n    if (arr == null)\n        return arr;\n    return arr;\n}\n/**\n * Encodes a numeric array as a JSON string.\n *\n * @param {Array} array The array to be encoded\n * @return {String[]} The array of strings to be put in the URL\n * as repeated query parameters\n */\nexport function encodeNumericArray(array) {\n    if (array == null) {\n        return array;\n    }\n    return array.map(String);\n}\n/**\n * Decodes an array or singular value and returns it as an array\n * or undefined if falsy. Filters out undefined and NaN values.\n *\n * @param {String | Array} input The input value\n * @return {Array} The javascript representation\n */\nexport function decodeNumericArray(input) {\n    var arr = decodeArray(input);\n    if (arr == null)\n        return arr;\n    return arr.map(function (d) { return (d === '' || d == null ? null : +d); });\n}\n/**\n * Encodes an array as a delimited string. For example,\n * ['a', 'b'] -> 'a_b' with entrySeparator='_'\n *\n * @param array The array to be encoded\n * @param entrySeparator The string used to delimit entries\n * @return The array as a string with elements joined by the\n * entry separator\n */\nexport function encodeDelimitedArray(array, entrySeparator) {\n    if (entrySeparator === void 0) { entrySeparator = '_'; }\n    if (array == null) {\n        return array;\n    }\n    return array.join(entrySeparator);\n}\n/**\n * Decodes a delimited string into javascript array. For example,\n * 'a_b' -> ['a', 'b'] with entrySeparator='_'\n *\n * If an array is provided as input, only the first entry is used.\n *\n * @param {String} input The JSON string representation\n * @param entrySeparator The array as a string with elements joined by the\n * entry separator\n * @return {Array} The javascript representation\n */\nexport function decodeDelimitedArray(input, entrySeparator) {\n    if (entrySeparator === void 0) { entrySeparator = '_'; }\n    var arrayStr = getEncodedValue(input, true);\n    if (arrayStr == null)\n        return arrayStr;\n    if (arrayStr === '')\n        return [];\n    return arrayStr.split(entrySeparator);\n}\n/**\n * Encodes a numeric array as a delimited string. (alias of encodeDelimitedArray)\n * For example, [1, 2] -> '1_2' with entrySeparator='_'\n *\n * @param {Array} array The array to be encoded\n * @return {String} The JSON string representation of array\n */\nexport var encodeDelimitedNumericArray = encodeDelimitedArray;\n/**\n * Decodes a delimited string into javascript array where all entries are numbers\n * For example, '1_2' -> [1, 2] with entrySeparator='_'\n *\n * If an array is provided as input, only the first entry is used.\n *\n * @param {String} jsonStr The JSON string representation\n * @return {Array} The javascript representation\n */\nexport function decodeDelimitedNumericArray(arrayStr, entrySeparator) {\n    if (entrySeparator === void 0) { entrySeparator = '_'; }\n    var decoded = decodeDelimitedArray(arrayStr, entrySeparator);\n    if (decoded == null)\n        return decoded;\n    return decoded.map(function (d) { return (d === '' || d == null ? null : +d); });\n}\n/**\n * Encode simple objects as readable strings. Works only for simple,\n * flat objects where values are numbers, strings.\n *\n * For example { foo: bar, boo: baz } -> \"foo-bar_boo-baz\"\n *\n * @param {Object} object The object to encode\n * @param {String} keyValSeparator=\"-\" The separator between keys and values\n * @param {String} entrySeparator=\"_\" The separator between entries\n * @return {String} The encoded object\n */\nexport function encodeObject(obj, keyValSeparator, entrySeparator) {\n    if (keyValSeparator === void 0) { keyValSeparator = '-'; }\n    if (entrySeparator === void 0) { entrySeparator = '_'; }\n    if (obj == null)\n        return obj; // null or undefined\n    if (!Object.keys(obj).length)\n        return ''; // {} case\n    return Object.keys(obj)\n        .map(function (key) { return \"\" + key + keyValSeparator + obj[key]; })\n        .join(entrySeparator);\n}\n/**\n * Decodes a simple object to javascript. Currently works only for simple,\n * flat objects where values are strings.\n *\n * For example \"foo-bar_boo-baz\" -> { foo: bar, boo: baz }\n *\n * If an array is provided as input, only the first entry is used.\n *\n * @param {String} input The object string to decode\n * @param {String} keyValSeparator=\"-\" The separator between keys and values\n * @param {String} entrySeparator=\"_\" The separator between entries\n * @return {Object} The javascript object\n */\nexport function decodeObject(input, keyValSeparator, entrySeparator) {\n    if (keyValSeparator === void 0) { keyValSeparator = '-'; }\n    if (entrySeparator === void 0) { entrySeparator = '_'; }\n    var objStr = getEncodedValue(input, true);\n    if (objStr == null)\n        return objStr;\n    if (objStr === '')\n        return {};\n    var obj = {};\n    var keyValSeparatorRegExp = new RegExp(keyValSeparator + \"(.*)\");\n    objStr.split(entrySeparator).forEach(function (entryStr) {\n        var _a = entryStr.split(keyValSeparatorRegExp), key = _a[0], value = _a[1];\n        obj[key] = value;\n    });\n    return obj;\n}\n/**\n * Encode simple objects as readable strings. Alias of encodeObject.\n *\n * For example { foo: 123, boo: 521 } -> \"foo-123_boo-521\"\n *\n * @param {Object} object The object to encode\n * @param {String} keyValSeparator=\"-\" The separator between keys and values\n * @param {String} entrySeparator=\"_\" The separator between entries\n * @return {String} The encoded object\n */\nexport var encodeNumericObject = encodeObject;\n/**\n * Decodes a simple object to javascript where all values are numbers.\n * Currently works only for simple, flat objects.\n *\n * For example \"foo-123_boo-521\" -> { foo: 123, boo: 521 }\n *\n * If an array is provided as input, only the first entry is used.\n *\n * @param {String} input The object string to decode\n * @param {String} keyValSeparator=\"-\" The separator between keys and values\n * @param {String} entrySeparator=\"_\" The separator between entries\n * @return {Object} The javascript object\n */\nexport function decodeNumericObject(input, keyValSeparator, entrySeparator) {\n    if (keyValSeparator === void 0) { keyValSeparator = '-'; }\n    if (entrySeparator === void 0) { entrySeparator = '_'; }\n    var decoded = decodeObject(input, keyValSeparator, entrySeparator);\n    if (decoded == null)\n        return decoded;\n    // convert to numbers\n    var decodedNumberObj = {};\n    for (var _i = 0, _a = Object.keys(decoded); _i < _a.length; _i++) {\n        var key = _a[_i];\n        decodedNumberObj[key] = decodeNumber(decoded[key]);\n    }\n    return decodedNumberObj;\n}\n","import * as Serialize from './serialize';\n/**\n * String values\n */\nexport var StringParam = {\n    encode: Serialize.encodeString,\n    decode: Serialize.decodeString,\n};\n/**\n * String enum\n */\nexport var createEnumParam = function (enumValues) { return ({\n    encode: Serialize.encodeString,\n    decode: function (input) { return Serialize.decodeEnum(input, enumValues); },\n}); };\n/**\n * Numbers (integers or floats)\n */\nexport var NumberParam = {\n    encode: Serialize.encodeNumber,\n    decode: Serialize.decodeNumber,\n};\n/**\n * For flat objects where values are strings\n */\nexport var ObjectParam = {\n    encode: Serialize.encodeObject,\n    decode: Serialize.decodeObject,\n};\n/**\n * For flat arrays of strings, filters out undefined values during decode\n */\nexport var ArrayParam = {\n    encode: Serialize.encodeArray,\n    decode: Serialize.decodeArray,\n};\n/**\n * For flat arrays of strings, filters out undefined values during decode\n */\nexport var NumericArrayParam = {\n    encode: Serialize.encodeNumericArray,\n    decode: Serialize.decodeNumericArray,\n};\n/**\n * For any type of data, encoded via JSON.stringify\n */\nexport var JsonParam = {\n    encode: Serialize.encodeJson,\n    decode: Serialize.decodeJson,\n};\n/**\n * For simple dates (YYYY-MM-DD)\n */\nexport var DateParam = {\n    encode: Serialize.encodeDate,\n    decode: Serialize.decodeDate,\n    equals: function (valueA, valueB) {\n        if (valueA === valueB)\n            return true;\n        if (valueA == null || valueB == null)\n            return valueA === valueB;\n        // ignore time of day\n        return (valueA.getFullYear() === valueB.getFullYear() &&\n            valueA.getMonth() === valueB.getMonth() &&\n            valueA.getDate() === valueB.getDate());\n    },\n};\n/**\n * For dates in simplified extended ISO format (YYYY-MM-DDTHH:mm:ss.sssZ or ±YYYYYY-MM-DDTHH:mm:ss.sssZ)\n */\nexport var DateTimeParam = {\n    encode: Serialize.encodeDateTime,\n    decode: Serialize.decodeDateTime,\n    equals: function (valueA, valueB) {\n        if (valueA === valueB)\n            return true;\n        if (valueA == null || valueB == null)\n            return valueA === valueB;\n        return valueA.valueOf() === valueB.valueOf();\n    },\n};\n/**\n * For boolean values: 1 = true, 0 = false\n */\nexport var BooleanParam = {\n    encode: Serialize.encodeBoolean,\n    decode: Serialize.decodeBoolean,\n};\n/**\n * For flat objects where the values are numbers\n */\nexport var NumericObjectParam = {\n    encode: Serialize.encodeNumericObject,\n    decode: Serialize.decodeNumericObject,\n};\n/**\n * For flat arrays of strings, filters out undefined values during decode\n */\nexport var DelimitedArrayParam = {\n    encode: Serialize.encodeDelimitedArray,\n    decode: Serialize.decodeDelimitedArray,\n};\n/**\n * For flat arrays where the values are numbers, filters out undefined values during decode\n */\nexport var DelimitedNumericArrayParam = {\n    encode: Serialize.encodeDelimitedNumericArray,\n    decode: Serialize.decodeDelimitedNumericArray,\n};\n","var __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nimport { stringify, parse as parseQueryString, parseUrl, } from 'query-string';\n/**\n * An example of a transformSearchString function that undoes encoding of\n * common JSON characters that are technically allowed in URLs.\n */\nvar JSON_SAFE_CHARS = \"{}[],\\\":\"\n    .split('')\n    .map(function (d) { return [d, encodeURIComponent(d)]; });\nexport function transformSearchStringJsonSafe(searchString) {\n    var str = searchString;\n    for (var _i = 0, JSON_SAFE_CHARS_1 = JSON_SAFE_CHARS; _i < JSON_SAFE_CHARS_1.length; _i++) {\n        var _a = JSON_SAFE_CHARS_1[_i], char = _a[0], code = _a[1];\n        str = str.replace(new RegExp('\\\\' + code, 'g'), char);\n    }\n    return str;\n}\n/**\n * Update a location, wiping out parameters not included in encodedQuery\n * If a param is set to undefined it will be removed from the URL.\n */\nexport function updateLocation(encodedQuery, location, stringifyOptions) {\n    var encodedSearchString = stringify(encodedQuery, stringifyOptions);\n    if (stringifyOptions && stringifyOptions.transformSearchString) {\n        encodedSearchString = stringifyOptions.transformSearchString(encodedSearchString);\n    }\n    var search = encodedSearchString.length ? \"?\" + encodedSearchString : '';\n    var href = parseUrl(location.href || '').url + search;\n    var newLocation = __assign(__assign({}, location), { key: \"\" + Date.now(), // needed for some routers (e.g. react-router)\n        href: href,\n        search: search, query: encodedQuery });\n    return newLocation;\n}\n/**\n * Update a location while retaining existing parameters.\n * If a param is set to undefined it will be removed from the URL.\n */\nexport function updateInLocation(encodedQueryReplacements, location, stringifyOptions) {\n    // explicitly avoid parsing numbers to ensure the\n    // return type has the same shape as EncodeQuery\n    var currQuery = parseQueryString(location.search, { parseNumbers: false });\n    var newQuery = __assign(__assign({}, currQuery), encodedQueryReplacements);\n    return updateLocation(newQuery, location, stringifyOptions);\n}\n","/**\n * Convert the values in query to strings via the encode functions configured\n * in paramConfigMap\n *\n * @param paramConfigMap Map from query name to { encode, decode } config\n * @param query Query updates mapping param name to decoded value\n */\nexport function encodeQueryParams(paramConfigMap, query) {\n    var encodedQuery = {};\n    var paramNames = Object.keys(query);\n    for (var _i = 0, paramNames_1 = paramNames; _i < paramNames_1.length; _i++) {\n        var paramName = paramNames_1[_i];\n        var decodedValue = query[paramName];\n        if (!paramConfigMap[paramName]) {\n            if (process.env.NODE_ENV === 'development') {\n                console.warn(\"Encoding parameter \" + paramName + \" as string since it was not configured.\");\n            }\n            // NOTE: we could just not encode it, but it is probably convenient to have\n            // it be included by default as a string type.\n            encodedQuery[paramName] =\n                decodedValue == null ? decodedValue : String(decodedValue);\n        }\n        else {\n            encodedQuery[paramName] = paramConfigMap[paramName].encode(query[paramName]);\n        }\n    }\n    return encodedQuery;\n}\nexport default encodeQueryParams;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license at\n * https://github.com/facebook/fbjs/blob/master/LICENSE\n */\n/*eslint-disable no-self-compare */\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n/**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\nfunction is(x, y) {\n    // SameValue algorithm\n    if (x === y) {\n        // Steps 1-5, 7-10\n        // Steps 6.b-6.e: +0 != -0\n        // Added the nonzero y check to make Flow happy, but it is redundant\n        return x !== 0 || y !== 0 || 1 / x === 1 / y;\n    }\n    else {\n        // Step 6.a: NaN == NaN\n        return x !== x && y !== y;\n    }\n}\n/**\n * Performs equality by iterating through keys on an object and returning false\n * when any key has values which are not strictly equal between the arguments.\n * Returns true when the values of all keys are strictly equal.\n\n * @pbeshai modification of shallowEqual to take into consideration a map providing\n * equals functions\n */\nexport default function shallowEqual(objA, objB, equalMap) {\n    var _a, _b;\n    if (is(objA, objB)) {\n        return true;\n    }\n    if (typeof objA !== 'object' ||\n        objA === null ||\n        typeof objB !== 'object' ||\n        objB === null) {\n        return false;\n    }\n    var keysA = Object.keys(objA);\n    var keysB = Object.keys(objB);\n    if (keysA.length !== keysB.length) {\n        return false;\n    }\n    // Test for A's keys different from B.\n    for (var i = 0; i < keysA.length; i++) {\n        var isEqual = (_b = (_a = equalMap === null || equalMap === void 0 ? void 0 : equalMap[keysA[i]]) === null || _a === void 0 ? void 0 : _a.equals) !== null && _b !== void 0 ? _b : is;\n        if (!hasOwnProperty.call(objB, keysA[i]) ||\n            !isEqual(objA[keysA[i]], objB[keysA[i]])) {\n            return false;\n        }\n    }\n    return true;\n}\n","import * as React from 'react';\nimport { extract } from 'query-string';\nimport shallowEqual from './shallowEqual';\nexport function useUpdateRefIfShallowNew(ref, newValue, isEqual) {\n    if (isEqual === void 0) { isEqual = shallowEqual; }\n    var hasNew = ((ref.current == null || newValue == null) && ref.current === newValue) ||\n        !isEqual(ref.current, newValue);\n    React.useEffect(function () {\n        if (hasNew) {\n            ref.current = newValue;\n        }\n    }, [ref, newValue, hasNew]);\n}\nexport function getSSRSafeSearchString(location) {\n    // handle checking SSR (#13)\n    if (typeof location === 'object') {\n        // in browser\n        if (typeof window !== 'undefined') {\n            return location.search;\n        }\n        else {\n            return extract(\"\" + location.pathname + (location.search ? location.search : ''));\n        }\n    }\n    return '';\n}\n","import { updateLocation, updateInLocation, } from 'serialize-query-params';\n/**\n * Creates a new location object containing the specified query changes.\n * If replaceIn or pushIn are used as the updateType, then parameters\n * not specified in queryReplacements are retained. If replace or push\n * are used, only the values in queryReplacements will be available.\n * The default is pushIn.\n */\nexport function createLocationWithChanges(queryReplacements, location, updateType, stringifyOptions) {\n    if (updateType === void 0) { updateType = 'pushIn'; }\n    switch (updateType) {\n        case 'replace':\n        case 'push':\n            return updateLocation(queryReplacements, location, stringifyOptions);\n        case 'replaceIn':\n        case 'pushIn':\n        default:\n            return updateInLocation(queryReplacements, location, stringifyOptions);\n    }\n}\n/**\n * Updates the URL to the new location.\n */\nexport function updateUrlQuery(history, location, updateType) {\n    if (updateType === void 0) { updateType = 'pushIn'; }\n    switch (updateType) {\n        case 'pushIn':\n        case 'push':\n            history.push(location);\n            break;\n        case 'replaceIn':\n        case 'replace':\n        default:\n            history.replace(location);\n            break;\n    }\n}\n","import * as React from 'react';\nimport { updateUrlQuery, createLocationWithChanges } from './updateUrlQuery';\nvar providerlessContextValue = {\n    location: {},\n    getLocation: function () { return ({}); },\n    setLocation: function () { },\n};\nexport var LocationContext = React.createContext(providerlessContextValue);\nexport function useLocationContext() {\n    var context = React.useContext(LocationContext);\n    if (process.env.NODE_ENV !== 'production' &&\n        (context === undefined || context === providerlessContextValue)) {\n        throw new Error('useQueryParams must be used within a QueryParamProvider');\n    }\n    return context;\n}\n/**\n * An internal-only context provider which provides down the most\n * recent location object and a callback to update the history.\n */\nexport function LocationProvider(_a) {\n    var history = _a.history, location = _a.location, children = _a.children, stringifyOptions = _a.stringifyOptions;\n    var locationRef = React.useRef(location);\n    React.useEffect(function () {\n        locationRef.current = location;\n    }, [location]);\n    // TODO: we can probably simplify this now that we are reading location from history\n    var getLocation = React.useCallback(function () { return locationRef.current; }, [\n        locationRef,\n    ]);\n    var setLocation = React.useCallback(function (queryReplacements, updateType) {\n        // A ref is needed here to stop setLocation updating constantly (see #46)\n        locationRef.current = createLocationWithChanges(queryReplacements, history == null || history.location == null\n            ? locationRef.current\n            : history.location, updateType, stringifyOptions);\n        if (history) {\n            updateUrlQuery(history, locationRef.current, updateType);\n        }\n    }, [history, stringifyOptions]);\n    return (React.createElement(LocationContext.Provider, { value: { location: location, getLocation: getLocation, setLocation: setLocation } }, children));\n}\n","import { parse as parseQueryString } from 'query-string';\nexport var makeMemoizedQueryParser = function (initialSearchString) {\n    var cachedSearchString = initialSearchString;\n    var cachedParsedQuery = parseQueryString(cachedSearchString || '');\n    return function (newSearchString) {\n        if (cachedSearchString !== newSearchString) {\n            cachedSearchString = newSearchString;\n            cachedParsedQuery = parseQueryString(cachedSearchString);\n        }\n        return cachedParsedQuery;\n    };\n};\nexport var sharedMemoizedQueryParser = makeMemoizedQueryParser();\n","import * as React from 'react';\nimport { encodeQueryParams, } from 'serialize-query-params';\nimport { getSSRSafeSearchString, useUpdateRefIfShallowNew } from './helpers';\nimport { useLocationContext } from './LocationProvider';\nimport { sharedMemoizedQueryParser } from './memoizedQueryParser';\nimport shallowEqual from './shallowEqual';\n/**\n * Helper to get the latest decoded values with smart caching.\n * Abstracted into its own function to allow re-use in a functional setter (#26)\n */\nfunction getLatestDecodedValues(location, paramConfigMap, paramConfigMapRef, parsedQueryRef, encodedValuesCacheRef, decodedValuesCacheRef) {\n    // check if we have a new param config\n    var hasNewParamConfigMap = !shallowEqual(paramConfigMapRef.current, paramConfigMap);\n    // read in the parsed query\n    var parsedQuery = sharedMemoizedQueryParser(getSSRSafeSearchString(location) // get the latest location object\n    );\n    // check if new encoded values are around (new parsed query).\n    // can use triple equals since we already cache this value\n    var hasNewParsedQuery = parsedQueryRef.current !== parsedQuery;\n    // if nothing has changed, use existing.. so long as we have existing.\n    if (!hasNewParsedQuery &&\n        !hasNewParamConfigMap &&\n        encodedValuesCacheRef.current !== undefined) {\n        return {\n            encodedValues: encodedValuesCacheRef.current,\n            decodedValues: decodedValuesCacheRef.current,\n        };\n    }\n    var encodedValuesCache = encodedValuesCacheRef.current || {};\n    var decodedValuesCache = decodedValuesCacheRef.current || {};\n    var encodedValues = {};\n    // we have new encoded values, so let's get new decoded values.\n    // recompute new values but only for those that changed\n    var paramNames = Object.keys(paramConfigMap);\n    var decodedValues = {};\n    for (var _i = 0, paramNames_1 = paramNames; _i < paramNames_1.length; _i++) {\n        var paramName = paramNames_1[_i];\n        // do we have a new encoded value?\n        var paramConfig = paramConfigMap[paramName];\n        var hasNewEncodedValue = !shallowEqual(encodedValuesCache[paramName], parsedQuery[paramName]);\n        // if we have a new encoded value, re-decode. otherwise reuse cache\n        var encodedValue = void 0;\n        var decodedValue = void 0;\n        if (hasNewEncodedValue ||\n            (encodedValuesCache[paramName] === undefined &&\n                decodedValuesCache[paramName] === undefined)) {\n            encodedValue = parsedQuery[paramName];\n            decodedValue = paramConfig.decode(encodedValue);\n        }\n        else {\n            encodedValue = encodedValuesCache[paramName];\n            decodedValue = decodedValuesCache[paramName];\n        }\n        encodedValues[paramName] = encodedValue;\n        decodedValues[paramName] = decodedValue;\n    }\n    // keep referential equality for decoded valus if we didn't actually change anything\n    var hasNewDecodedValues = !shallowEqual(decodedValuesCacheRef.current, decodedValues, paramConfigMap);\n    return {\n        encodedValues: encodedValues,\n        decodedValues: hasNewDecodedValues\n            ? decodedValues\n            : decodedValuesCacheRef.current,\n    };\n}\n/**\n * Given a query parameter configuration (mapping query param name to { encode, decode }),\n * return an object with the decoded values and a setter for updating them.\n */\nexport var useQueryParams = function (paramConfigMap) {\n    var _a = useLocationContext(), location = _a.location, getLocation = _a.getLocation, setLocation = _a.setLocation;\n    // read in the raw query\n    var parsedQuery = sharedMemoizedQueryParser(getSSRSafeSearchString(location));\n    // make caches\n    var paramConfigMapRef = React.useRef(paramConfigMap);\n    var parsedQueryRef = React.useRef(parsedQuery);\n    var encodedValuesCacheRef = React.useRef(undefined); // undefined for initial check\n    var decodedValuesCacheRef = React.useRef({});\n    // memoize paramConfigMap to make the API nicer for consumers.\n    // otherwise we'd have to useQueryParams(useMemo(() => { foo: NumberParam }, []))\n    paramConfigMap = shallowEqual(paramConfigMap, paramConfigMapRef.current)\n        ? paramConfigMapRef.current\n        : paramConfigMap;\n    // decode all the values if we have changes\n    var _b = getLatestDecodedValues(location, paramConfigMap, paramConfigMapRef, parsedQueryRef, encodedValuesCacheRef, decodedValuesCacheRef), encodedValues = _b.encodedValues, decodedValues = _b.decodedValues;\n    // update cached values in useEffects\n    useUpdateRefIfShallowNew(parsedQueryRef, parsedQuery);\n    useUpdateRefIfShallowNew(paramConfigMapRef, paramConfigMap);\n    useUpdateRefIfShallowNew(encodedValuesCacheRef, encodedValues);\n    useUpdateRefIfShallowNew(decodedValuesCacheRef, decodedValues, function (a, b) {\n        return shallowEqual(a, b, paramConfigMap);\n    });\n    // create a setter for updating multiple query params at once\n    var setQueryDeps = {\n        paramConfigMap: paramConfigMap,\n        setLocation: setLocation,\n        getLocation: getLocation,\n    };\n    var setQueryDepsRef = React.useRef(setQueryDeps);\n    setQueryDepsRef.current = setQueryDeps;\n    var setQuery = React.useCallback(function (changes, updateType) {\n        var deps = setQueryDepsRef.current;\n        var encodedChanges;\n        if (typeof changes === 'function') {\n            // get latest decoded value to pass as a fresh arg to the setter fn\n            var latestValues = getLatestDecodedValues(deps.getLocation(), deps.paramConfigMap, paramConfigMapRef, parsedQueryRef, encodedValuesCacheRef, decodedValuesCacheRef).decodedValues;\n            decodedValuesCacheRef.current = latestValues; // keep cache in sync\n            encodedChanges = encodeQueryParams(deps.paramConfigMap, changes(latestValues));\n        }\n        else {\n            // encode as strings for the URL\n            encodedChanges = encodeQueryParams(deps.paramConfigMap, changes);\n        }\n        // update the URL\n        deps.setLocation(encodedChanges, updateType);\n    }, []);\n    // no longer Partial\n    return [decodedValues, setQuery];\n};\nexport default useQueryParams;\n","import useQueryParams from './useQueryParams';\nexport var QueryParams = function (_a) {\n    var config = _a.config, children = _a.children;\n    var _b = useQueryParams(config), query = _b[0], setQuery = _b[1];\n    return children({ query: query, setQuery: setQuery });\n};\nexport default QueryParams;\n","var __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nimport * as React from 'react';\nimport { LocationProvider } from './LocationProvider';\nimport shallowEqual from './shallowEqual';\n// we use a lazy caching solution to prevent #46 from happening\nvar cachedWindowHistory;\nvar cachedAdaptedWindowHistory;\n/**\n * Adapts standard DOM window history to work with our\n * { replace, push } interface.\n *\n * @param history Standard history provided by DOM\n */\nfunction adaptWindowHistory(history) {\n    if (history === cachedWindowHistory && cachedAdaptedWindowHistory != null) {\n        return cachedAdaptedWindowHistory;\n    }\n    var adaptedWindowHistory = {\n        replace: function (location) {\n            history.replaceState(location.state, '', location.protocol + \"//\" + location.host + location.pathname + location.search);\n        },\n        push: function (location) {\n            history.pushState(location.state, '', location.protocol + \"//\" + location.host + location.pathname + location.search);\n        },\n        get location() {\n            return window.location;\n        },\n    };\n    cachedWindowHistory = history;\n    cachedAdaptedWindowHistory = adaptedWindowHistory;\n    return adaptedWindowHistory;\n}\n// we use a lazy caching solution to prevent #46 from happening\nvar cachedReachHistory;\nvar cachedAdaptedReachHistory;\n/**\n * Adapts @reach/router history to work with our\n * { replace, push } interface.\n *\n * @param history globalHistory from @reach/router\n */\nfunction adaptReachHistory(history) {\n    if (history === cachedReachHistory && cachedAdaptedReachHistory != null) {\n        return cachedAdaptedReachHistory;\n    }\n    var adaptedReachHistory = {\n        replace: function (location) {\n            history.navigate(location.protocol + \"//\" + location.host + location.pathname + location.search, { replace: true });\n        },\n        push: function (location) {\n            history.navigate(location.protocol + \"//\" + location.host + location.pathname + location.search, { replace: false });\n        },\n        get location() {\n            return history.location;\n        },\n    };\n    cachedReachHistory = history;\n    cachedAdaptedReachHistory = adaptedReachHistory;\n    return adaptedReachHistory;\n}\n/**\n * Helper to produce the context value falling back to\n * window history and location if not provided.\n */\nexport function getLocationProps(_a) {\n    var _b = _a === void 0 ? {} : _a, history = _b.history, location = _b.location;\n    var hasWindow = typeof window !== 'undefined';\n    if (hasWindow) {\n        if (!history) {\n            history = adaptWindowHistory(window.history);\n        }\n        if (!location) {\n            location = window.location;\n        }\n    }\n    if (!location) {\n        throw new Error(\"\\n        Could not read the location. Is the router wired up correctly?\\n      \");\n    }\n    return { history: history, location: location };\n}\n/**\n * Context provider for query params to have access to the\n * active routing system, enabling updates to the URL.\n */\nexport function QueryParamProvider(_a) {\n    var children = _a.children, ReactRouterRoute = _a.ReactRouterRoute, reachHistory = _a.reachHistory, history = _a.history, location = _a.location, stringifyOptions = _a.stringifyOptions;\n    // cache the stringify options object so we users can just do\n    // <QueryParamProvider stringifyOptions={{ encode: false }} />\n    var stringifyOptionsRef = React.useRef(stringifyOptions);\n    var hasNewStringifyOptions = !shallowEqual(stringifyOptionsRef.current, stringifyOptions);\n    var stringifyOptionsCached = hasNewStringifyOptions\n        ? stringifyOptions\n        : stringifyOptionsRef.current;\n    React.useEffect(function () {\n        stringifyOptionsRef.current = stringifyOptionsCached;\n    }, [stringifyOptionsCached]);\n    // if we have React Router, use it to get the context value\n    if (ReactRouterRoute) {\n        return (React.createElement(ReactRouterRoute, null, function (routeProps) {\n            return (React.createElement(LocationProvider, __assign({ stringifyOptions: stringifyOptionsCached }, getLocationProps(routeProps)), children));\n        }));\n    }\n    // if we are using reach router, use its history\n    if (reachHistory) {\n        return (React.createElement(LocationProvider, __assign({ stringifyOptions: stringifyOptionsCached }, getLocationProps({\n            history: adaptReachHistory(reachHistory),\n            location: location,\n        })), children));\n    }\n    // neither reach nor react-router, so allow manual overrides\n    return (React.createElement(LocationProvider, __assign({ stringifyOptions: stringifyOptionsCached }, getLocationProps({ history: history, location: location })), children));\n}\nexport default QueryParamProvider;\n","/**\n * @file\n * CSS styles for <ChartTopper />\n */\n\nimport { css } from '@emotion/core';\n\nconst base = css`\n  font-family: MetricWeb, sans-serif;\n  font-weight: 400;\n`;\n\nexport const stabRuleStyles = css`\n  fill: #000000;\n`;\n\nexport const stabRuleStylesSocial = css`\n  fill: #ffffff;\n`;\n\nexport const goalpostsStyles = css`\n  fill: none;\n  stroke: #000000;\n  stroke-width: 0.3;\n`;\n\nexport const titleStylesBase = css`\n  ${base};\n  fill: #000000;\n`;\n\nexport const titleStylesPrint = css`\n  font-weight: 600;\n`;\n\nexport const titleStylesSocial = css`\n  fill: #ffffff;\n`;\n\nexport const titleStylesVideo = css`\n  fill: #ffffff;\n`;\n\nexport const subtitleStylesBase = css`\n  ${base};\n  fill: #66605c;\n`;\n\nexport const subtitleStylesPrint = css`\n  fill: #000000;\n`;\n\nexport const subtitleStylesSocial = css`\n  fill: #8e9095;\n`;\n\nexport const subtitleStylesVideo = css`\n  fill: #8e9095;\n`;\n","/**\n * @file\n * Entry point for UK political utilities\n */\nimport removeAccents from \"remove-accents\";\nexport const parties = {\n  CON: {\n    color: \"#149adb\",\n    socialColor: \"#0095E8\",\n    textColor: \"white\",\n    whiteOverlayOpacity: 0.2,\n    shortName: \"Con\",\n    formattedName: \"Conservative\",\n    adjective: \"Conservative party\"\n  },\n  LAB: {\n    color: \"#cf4d3c\",\n    socialColor: \"#FF634D\",\n    textColor: \"white\",\n    whiteOverlayOpacity: 0.2,\n    shortName: \"Lab\",\n    formattedName: \"Labour\",\n    adjective: \"Labour party\"\n  },\n  LIBDEM: {\n    color: \"#f09000\",\n    socialColor: \"#FFAD36\",\n    textColor: \"black\",\n    whiteOverlayOpacity: 0.2,\n    shortName: \"Lib Dem\",\n    formattedName: \"Liberal Democrats\",\n    adjective: \"Liberal Democrat\"\n  },\n  GREEN: {\n    color: \"#8deb9d\",\n    socialColor: \"#80FF96\",\n    textColor: \"black\",\n    whiteOverlayOpacity: 0.3,\n    shortName: \"Green\",\n    formattedName: \"Green\",\n    adjective: \"Green party\"\n  },\n  TIGFC: {\n    color: \"#fc8b9d\",\n    socialColor: \"#FCBDC7\",\n    textColor: \"black\",\n    whiteOverlayOpacity: 0.3,\n    shortName: \"TIGfC\",\n    formattedName: \"Independent Group for Change\",\n    adjective: \"Independent Group for Change\"\n  },\n  BREXIT: {\n    color: \"#80cfd6\",\n    socialColor: \"#00bfbc\",\n    textColor: \"black\",\n    whiteOverlayOpacity: 0.3,\n    shortName: \"Brexit\",\n    formattedName: \"Brexit party\",\n    adjective: \"Brexit party\"\n  },\n  UKIP: {\n    color: \"#7200ab\",\n    socialColor: \"#7F00D9\",\n    textColor: \"white\",\n    whiteOverlayOpacity: 0.3,\n    shortName: \"Ukip\",\n    formattedName: \"Ukip\",\n    adjective: \"Ukip\"\n  },\n  PC: {\n    color: \"#990000\",\n    socialColor: \"#B30000\",\n    textColor: \"white\",\n    whiteOverlayOpacity: 0.3,\n    shortName: \"PC\",\n    formattedName: \"Plaid Cymru\",\n    adjective: \"Plaid Cymru\"\n  },\n  SNP: {\n    color: \"#ffdf00\",\n    socialColor: \"#FFF8AB\",\n    textColor: \"black\",\n    whiteOverlayOpacity: 0,\n    shortName: \"SNP\",\n    formattedName: \"Scottish National party\",\n    adjective: \"Scottish National party\"\n  },\n  SF: {\n    color: \"#006643\",\n    socialColor: \"#006643\",\n    textColor: \"white\",\n    whiteOverlayOpacity: 0.3,\n    shortName: \"SF\",\n    formattedName: \"Sinn Féin\",\n    adjective: \"Sinn Féin\"\n  },\n  DUP: {\n    color: \"#210066\",\n    socialColor: \"#4B28B0\",\n    textColor: \"white\",\n    whiteOverlayOpacity: 0.5,\n    shortName: \"DUP\",\n    formattedName: \"Democratic Unionist party\",\n    adjective: \"Democratic Unionist party\"\n  },\n  UUP: {\n    color: \"#3f67cc\",\n    socialColor: \"#195EF7\",\n    textColor: \"white\",\n    whiteOverlayOpacity: 0.3,\n    shortName: \"UUP\",\n    formattedName: \"Ulster Unionist party\",\n    adjective: \"Ulster Unionist party\"\n  },\n  SDLP: {\n    color: \"#5ba373\",\n    socialColor: \"#007D51\",\n    textColor: \"black\",\n    whiteOverlayOpacity: 0.3,\n    shortName: \"SDLP\",\n    formattedName: \"Social Democratic and Labour party\",\n    adjective: \"Social Democratic and Labour party\"\n  },\n  APNI: {\n    color: \"#ffbe18\",\n    socialColor: \"#FACD5D\",\n    textColor: \"black\",\n    whiteOverlayOpacity: 0.3,\n    shortName: \"APNI\",\n    formattedName: \"Alliance party\",\n    adjective: \"Alliance party\"\n  },\n  SPEAKER: {\n    color: \"#ffffff\",\n    socialColor: \"#ffffff\",\n    textColor: \"black\",\n    whiteOverlayOpacity: 1,\n    shortName: \"Speaker\",\n    formattedName: \"Speaker\",\n    adjective: \"Speaker\"\n  },\n  IND: {\n    color: \"#d9cace\",\n    socialColor: \"#E0D9D5\",\n    textColor: \"black\",\n    whiteOverlayOpacity: 0.3,\n    shortName: \"Ind\",\n    formattedName: \"Independent\",\n    adjective: \"Independent\"\n  },\n  OTHERS: {\n    color: \"#ffffff\",\n    socialColor: \"#ffffff\",\n    textColor: \"black\",\n    whiteOverlayOpacity: 0.3,\n    shortName: \"Others\",\n    formattedName: \"Others\",\n    adjective: \"Other\"\n  }\n};\nexport const partiesArray = Object.entries(parties).map(([key, d]) => ({\n  key,\n  ...d\n}));\nexport const getPartyInfo = name => {\n  const sanitisedName = removeAccents(name.toUpperCase().replace(/\\s/g, \"\"));\n\n  switch (sanitisedName) {\n    case \"CONSERVATIVE\":\n    case \"CONSERVATIVES\":\n    case \"TORIES\":\n    case \"CON\":\n      return parties.CON;\n\n    case \"LABOUR\":\n    case \"LAB\":\n      return parties.LAB;\n\n    case \"LIBERALDEMOCRATS\":\n    case \"LIBERALDEMOCRAT\":\n    case \"LIBDEM\":\n    case \"LIBDEMS\":\n    case \"LD\":\n      return parties.LIBDEM;\n\n    case \"GREEN\":\n    case \"GREENS\":\n      return parties.GREEN;\n\n    case \"INDEPENDENTGROUPFORCHANGE\":\n    case \"CHANGEUK\":\n    case \"CHANGE\":\n    case \"TIGFC\":\n      return parties.TIGFC;\n\n    case \"BREXIT\":\n    case \"BREXITPARTY\":\n      return parties.BREXIT;\n\n    case \"UKIP\":\n      return parties.UKIP;\n\n    case \"PLAIDCYMRU\":\n    case \"PC\":\n      return parties.PC;\n\n    case \"SNP\":\n    case \"SCOTTISHNATIONALPARTY\":\n      return parties.SNP;\n\n    case \"SINNFEIN\":\n    case \"SF\":\n      return parties.SF;\n\n    case \"DUP\":\n    case \"DEMOCRATICUNIONISTPARTY\":\n      return parties.DUP;\n\n    case \"UUP\":\n    case \"ULSTERUNIONISTPARTY\":\n      return parties.UUP;\n\n    case \"SDLP\":\n    case \"SOCIALDEMOCRATICANDLABOURPARTY\":\n    case \"SOCIALDEMOCRATICLABOURPARTY\":\n      return parties.SDLP;\n\n    case \"ALLIANCE\":\n    case \"APNI\":\n      return parties.APNI;\n\n    case \"THESPEAKER\":\n    case \"SPEAKER\":\n      return parties.SPEAKER;\n\n    case \"INDEPENDENT/OTHER\":\n    case \"INDEPENDENT\":\n    case \"OTHER\":\n    case \"IND\":\n      return parties.IND;\n\n    case \"OTHERS\":\n      return parties.OTHERS;\n\n    default:\n      if (sanitisedName.includes(\"INDEPENDENT\")) {\n        return parties.IND;\n      }\n\n      throw new Error(`No party match found for ${name}`);\n  }\n};\nexport default null;","/**\n * @file\n * Bars geometry\n */\n\nimport React from 'react';\nimport { Group } from '@visx/group';\nimport { Bar } from '@visx/shape';\nimport { barsComponentPropTypes } from '../prop-types';\nimport { barsComponentDefaultProps } from '../default-props';\n\nconst Bars = ({\n  data,\n  fill,\n  height,\n  width,\n  xScale,\n  xVariable,\n  yScale,\n  yVariable,\n  colorScale,\n  colorVariable,\n  barHeightVariable,\n  fixedBarHeight,\n  automaticallySetRange,\n}) => {\n  if (automaticallySetRange) {\n    xScale.range([0, width]);\n    if (!fixedBarHeight) {\n      yScale.range([0, height]);\n    }\n  }\n\n  return (\n    <Group className=\"vv-bars\">\n      {data.map((d) => {\n        // These values are specific to each bar\n        const barHeight = barHeightVariable ? yScale(d[barHeightVariable]) : yScale.bandwidth();\n        const barWidth = xScale(d[xVariable]);\n        const yPosition = yScale(d[yVariable]);\n        const barFill = colorScale ? colorScale(d[colorVariable]) : fill;\n\n        return (\n          <Bar\n            key={`bar-${d[yVariable]}`}\n            x={d[xVariable] > 0 ? xScale(0) : barWidth}\n            y={yPosition}\n            width={Math.abs(xScale(0) - barWidth)}\n            height={barHeight}\n            fill={barFill}\n          />\n        );\n      })}\n    </Group>\n  );\n};\n\nBars.propTypes = barsComponentPropTypes;\nBars.defaultProps = barsComponentDefaultProps;\n\nexport default Bars;\n","/**\n * @file\n * Basic loading throbber\n */\n\nimport React from 'react';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport './styles.scss';\n\nexport const Loading = ({ size, theme }) => (\n  <div className={classNames('g-loading', `g-loading--${size}`, `g-loading--${theme}`)} />\n);\n\nLoading.propTypes = {\n  size: PropTypes.oneOf(['small', 'medium', 'large']),\n  theme: PropTypes.oneOf(['light', 'dark']),\n};\n\nLoading.defaultProps = {\n  size: 'small',\n  theme: 'dark',\n};\n\nLoading.displayName = 'GLoading';\nexport default Loading;\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n  return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n","/**\n * @file\n * Useful utility functions\n */\nimport * as Luxon from 'luxon';\nimport indefinite from 'indefinite';\n\n/**\n * Track custom events in Spoor\n * @param {string} category Event category\n * @param {string} action Action description\n * @param {object} extraDetail Extra info to add to the event\n */\nexport function sendSpoorEvent(category, action, extraDetail) {\n  const event = new CustomEvent('oTracking.event', {\n    detail: {\n      category,\n      action,\n      ...extraDetail,\n    },\n    bubbles: true,\n  });\n  document.body.dispatchEvent(event);\n}\n\nexport const getArrayDepth = value => {\n  return Array.isArray(value) ? 1 + Math.max(...value.map(getArrayDepth)) : 0;\n};\n\nexport const replaceMarkdown = (originalMarkdown, mapping = []) =>\n  mapping.reduce(\n    (markdown, { key, replacement }) => markdown.replace(key, replacement),\n    originalMarkdown\n  );\n\nexport const getYearRange = data => {\n  const years = data.map(({ date }) => new Date(date).getFullYear());\n  const uniqueYears = [...new Set(years)].sort((a, b) => a - b);\n  return uniqueYears;\n};\n\nexport const getGoodJudgmentMostLikely = data => {\n  const latestData = data.sort((a, b) => new Date(b.date) - new Date(a.date))[0];\n  const maxKey = Object.keys(latestData).reduce((a, b) => (latestData[a] > latestData[b] ? a : b));\n  const maxPercent = latestData[maxKey];\n\n  const labelNames = {\n    a_before_1_september_2021: 'before September 2021',\n    b_between_1_september_2021_and_31_october_2021: 'between September and October 2021',\n    c_between_1_november_2021_and_31_december_2021: 'between November and December 2021',\n    d_between_1_january_2022_and_28_february_2022: 'between January and February 2022',\n    e_not_before_1_march_2022: 'after March 2022',\n  };\n  const likelyPeriod = labelNames[maxKey];\n\n  return {\n    maxPercent,\n    maxPercentArticle: indefinite(maxPercent, { articleOnly: true }),\n    likelyPeriod,\n  };\n};\n\nexport const formatNumber = (number, dps = 1) => {\n  if (number >= 999950000) return `${(number / 1000000000).toFixed(dps).replace(/\\.0$/, '')}bn`;\n  if (number >= 500000) return `${(number / 1000000).toFixed(dps).replace(/\\.0$/, '')}m`;\n  if (number >= 1000) return `${(number / 1000).toFixed(dps).replace(/\\.0$/, '')}k`;\n  return number?.toLocaleString();\n};\n\nexport default {\n  sendSpoorEvent,\n  getArrayDepth,\n  replaceMarkdown,\n  getYearRange,\n  formatNumber,\n};\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from 'react';\nimport cx from 'classnames';\nexport default function Bar(_ref) {\n  var className = _ref.className,\n      innerRef = _ref.innerRef,\n      restProps = _objectWithoutPropertiesLoose(_ref, [\"className\", \"innerRef\"]);\n\n  return /*#__PURE__*/React.createElement(\"rect\", _extends({\n    ref: innerRef,\n    className: cx('visx-bar', className)\n  }, restProps));\n}","module.exports = extend\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction extend() {\n    var target = {}\n\n    for (var i = 0; i < arguments.length; i++) {\n        var source = arguments[i]\n\n        for (var key in source) {\n            if (hasOwnProperty.call(source, key)) {\n                target[key] = source[key]\n            }\n        }\n    }\n\n    return target\n}\n","export default function(x) {\n  return Math.abs(x = Math.round(x)) >= 1e21\n      ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n      : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\nexport function formatDecimalParts(x, p) {\n  if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n  var i, coefficient = x.slice(0, i);\n\n  // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n  // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n  return [\n    coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n    +x.slice(i + 1)\n  ];\n}\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from 'react';\nimport cx from 'classnames';\nimport { Line } from '@visx/shape';\nimport { Group } from '@visx/group';\nimport { Text } from '@visx/text';\nimport Orientation from '../constants/orientation';\nexport default function Ticks(_ref) {\n  var hideTicks = _ref.hideTicks,\n      horizontal = _ref.horizontal,\n      orientation = _ref.orientation,\n      tickClassName = _ref.tickClassName,\n      tickComponent = _ref.tickComponent,\n      allTickLabelProps = _ref.tickLabelProps,\n      _ref$tickStroke = _ref.tickStroke,\n      tickStroke = _ref$tickStroke === void 0 ? '#222' : _ref$tickStroke,\n      tickTransform = _ref.tickTransform,\n      ticks = _ref.ticks,\n      strokeWidth = _ref.strokeWidth,\n      tickLineProps = _ref.tickLineProps;\n  return ticks.map(function (_ref2) {\n    var _allTickLabelProps$in;\n\n    var value = _ref2.value,\n        index = _ref2.index,\n        from = _ref2.from,\n        to = _ref2.to,\n        formattedValue = _ref2.formattedValue;\n    var tickLabelProps = (_allTickLabelProps$in = allTickLabelProps[index]) != null ? _allTickLabelProps$in : {};\n    var tickLabelFontSize = Math.max(10, typeof tickLabelProps.fontSize === 'number' && tickLabelProps.fontSize || 0);\n    var tickYCoord = to.y + (horizontal && orientation !== Orientation.top ? tickLabelFontSize : 0);\n    return /*#__PURE__*/React.createElement(Group, {\n      key: \"visx-tick-\" + value + \"-\" + index,\n      className: cx('visx-axis-tick', tickClassName),\n      transform: tickTransform\n    }, !hideTicks && /*#__PURE__*/React.createElement(Line, _extends({\n      from: from,\n      to: to,\n      stroke: tickStroke,\n      strokeWidth: strokeWidth,\n      strokeLinecap: \"square\"\n    }, tickLineProps)), tickComponent ? tickComponent(_extends({}, tickLabelProps, {\n      x: to.x,\n      y: tickYCoord,\n      formattedValue: formattedValue\n    })) : /*#__PURE__*/React.createElement(Text, _extends({\n      x: to.x,\n      y: tickYCoord\n    }, tickLabelProps), formattedValue));\n  });\n}","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from 'react';\nimport cx from 'classnames';\nimport { Line } from '@visx/shape';\nimport { Text } from '@visx/text';\nimport getLabelTransform from '../utils/getLabelTransform';\nimport Ticks from './Ticks';\nimport { Orientation } from '..';\nvar defaultTextProps = {\n  textAnchor: 'middle',\n  fontFamily: 'Arial',\n  fontSize: 10,\n  fill: '#222'\n};\nexport default function AxisRenderer(_ref) {\n  var axisFromPoint = _ref.axisFromPoint,\n      axisLineClassName = _ref.axisLineClassName,\n      axisToPoint = _ref.axisToPoint,\n      hideAxisLine = _ref.hideAxisLine,\n      hideTicks = _ref.hideTicks,\n      horizontal = _ref.horizontal,\n      _ref$label = _ref.label,\n      label = _ref$label === void 0 ? '' : _ref$label,\n      labelClassName = _ref.labelClassName,\n      _ref$labelOffset = _ref.labelOffset,\n      labelOffset = _ref$labelOffset === void 0 ? 14 : _ref$labelOffset,\n      _ref$labelProps = _ref.labelProps,\n      labelProps = _ref$labelProps === void 0 ? defaultTextProps : _ref$labelProps,\n      _ref$orientation = _ref.orientation,\n      orientation = _ref$orientation === void 0 ? Orientation.bottom : _ref$orientation,\n      scale = _ref.scale,\n      _ref$stroke = _ref.stroke,\n      stroke = _ref$stroke === void 0 ? '#222' : _ref$stroke,\n      strokeDasharray = _ref.strokeDasharray,\n      _ref$strokeWidth = _ref.strokeWidth,\n      strokeWidth = _ref$strokeWidth === void 0 ? 1 : _ref$strokeWidth,\n      tickClassName = _ref.tickClassName,\n      tickComponent = _ref.tickComponent,\n      tickLineProps = _ref.tickLineProps,\n      _ref$tickLabelProps = _ref.tickLabelProps,\n      tickLabelProps = _ref$tickLabelProps === void 0 ? function () {\n    return (\n      /** tickValue, index, tickValues */\n      defaultTextProps\n    );\n  } : _ref$tickLabelProps,\n      _ref$tickLength = _ref.tickLength,\n      tickLength = _ref$tickLength === void 0 ? 8 : _ref$tickLength,\n      _ref$tickStroke = _ref.tickStroke,\n      tickStroke = _ref$tickStroke === void 0 ? '#222' : _ref$tickStroke,\n      tickTransform = _ref.tickTransform,\n      ticks = _ref.ticks,\n      _ref$ticksComponent = _ref.ticksComponent,\n      ticksComponent = _ref$ticksComponent === void 0 ? Ticks : _ref$ticksComponent;\n  // compute the max tick label size to compute label offset\n  var allTickLabelProps = ticks.map(function (_ref2) {\n    var value = _ref2.value,\n        index = _ref2.index;\n    return tickLabelProps(value, index, ticks);\n  });\n  var maxTickLabelFontSize = Math.max.apply(Math, [10].concat(allTickLabelProps.map(function (props) {\n    return typeof props.fontSize === 'number' ? props.fontSize : 0;\n  })));\n  return /*#__PURE__*/React.createElement(React.Fragment, null, ticksComponent({\n    hideTicks: hideTicks,\n    horizontal: horizontal,\n    orientation: orientation,\n    scale: scale,\n    tickClassName: tickClassName,\n    tickComponent: tickComponent,\n    tickLabelProps: allTickLabelProps,\n    tickStroke: tickStroke,\n    tickTransform: tickTransform,\n    ticks: ticks,\n    strokeWidth: strokeWidth,\n    tickLineProps: tickLineProps\n  }), !hideAxisLine && /*#__PURE__*/React.createElement(Line, {\n    className: cx('visx-axis-line', axisLineClassName),\n    from: axisFromPoint,\n    to: axisToPoint,\n    stroke: stroke,\n    strokeWidth: strokeWidth,\n    strokeDasharray: strokeDasharray\n  }), label && /*#__PURE__*/React.createElement(Text, _extends({\n    className: cx('visx-axis-label', labelClassName)\n  }, getLabelTransform({\n    labelOffset: labelOffset,\n    labelProps: labelProps,\n    orientation: orientation,\n    range: scale.range(),\n    tickLabelFontSize: maxTickLabelFontSize,\n    tickLength: tickLength\n  }), labelProps), label));\n}","import Orientation from '../constants/orientation';\nexport default function getLabelTransform(_ref) {\n  var labelOffset = _ref.labelOffset,\n      labelProps = _ref.labelProps,\n      orientation = _ref.orientation,\n      range = _ref.range,\n      tickLabelFontSize = _ref.tickLabelFontSize,\n      tickLength = _ref.tickLength;\n  var sign = orientation === Orientation.left || orientation === Orientation.top ? -1 : 1;\n  var x;\n  var y;\n  var transform;\n\n  if (orientation === Orientation.top || orientation === Orientation.bottom) {\n    var yBottomOffset = orientation === Orientation.bottom && typeof labelProps.fontSize === 'number' ? labelProps.fontSize : 0;\n    x = (Number(range[0]) + Number(range[range.length - 1])) / 2;\n    y = sign * (tickLength + labelOffset + tickLabelFontSize + yBottomOffset);\n  } else {\n    x = sign * ((Number(range[0]) + Number(range[range.length - 1])) / 2);\n    y = -(tickLength + labelOffset);\n    transform = \"rotate(\" + sign * 90 + \")\";\n  }\n\n  return {\n    x: x,\n    y: y,\n    transform: transform\n  };\n}","export default function toString(x) {\n  return x == null ? void 0 : x.toString();\n}","import { Point } from '@visx/point';\nexport default function createPoint(_ref, horizontal) {\n  var x = _ref.x,\n      y = _ref.y;\n  return new Point(horizontal ? {\n    x: x,\n    y: y\n  } : {\n    x: y,\n    y: x\n  });\n}","import _pt from \"prop-types\";\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from 'react';\nimport cx from 'classnames';\nimport { Group } from '@visx/group';\nimport { getTicks, coerceNumber } from '@visx/scale';\nimport AxisRenderer from './AxisRenderer';\nimport getTickPosition from '../utils/getTickPosition';\nimport getTickFormatter from '../utils/getTickFormatter';\nimport createPoint from '../utils/createPoint';\nimport Orientation from '../constants/orientation';\nexport default function Axis(_ref) {\n  var _ref$children = _ref.children,\n      children = _ref$children === void 0 ? AxisRenderer : _ref$children,\n      axisClassName = _ref.axisClassName,\n      _ref$hideAxisLine = _ref.hideAxisLine,\n      hideAxisLine = _ref$hideAxisLine === void 0 ? false : _ref$hideAxisLine,\n      _ref$hideTicks = _ref.hideTicks,\n      hideTicks = _ref$hideTicks === void 0 ? false : _ref$hideTicks,\n      _ref$hideZero = _ref.hideZero,\n      hideZero = _ref$hideZero === void 0 ? false : _ref$hideZero,\n      _ref$left = _ref.left,\n      left = _ref$left === void 0 ? 0 : _ref$left,\n      _ref$numTicks = _ref.numTicks,\n      numTicks = _ref$numTicks === void 0 ? 10 : _ref$numTicks,\n      _ref$orientation = _ref.orientation,\n      orientation = _ref$orientation === void 0 ? Orientation.bottom : _ref$orientation,\n      _ref$rangePadding = _ref.rangePadding,\n      rangePadding = _ref$rangePadding === void 0 ? 0 : _ref$rangePadding,\n      scale = _ref.scale,\n      tickFormat = _ref.tickFormat,\n      _ref$tickLength = _ref.tickLength,\n      tickLength = _ref$tickLength === void 0 ? 8 : _ref$tickLength,\n      tickValues = _ref.tickValues,\n      _ref$top = _ref.top,\n      top = _ref$top === void 0 ? 0 : _ref$top,\n      restProps = _objectWithoutPropertiesLoose(_ref, [\"children\", \"axisClassName\", \"hideAxisLine\", \"hideTicks\", \"hideZero\", \"left\", \"numTicks\", \"orientation\", \"rangePadding\", \"scale\", \"tickFormat\", \"tickLength\", \"tickValues\", \"top\"]);\n\n  var format = tickFormat != null ? tickFormat : getTickFormatter(scale);\n  var isLeft = orientation === Orientation.left;\n  var isTop = orientation === Orientation.top;\n  var horizontal = isTop || orientation === Orientation.bottom;\n  var tickPosition = getTickPosition(scale);\n  var tickSign = isLeft || isTop ? -1 : 1;\n  var range = scale.range();\n  var axisFromPoint = createPoint({\n    x: Number(range[0]) + 0.5 - rangePadding,\n    y: 0\n  }, horizontal);\n  var axisToPoint = createPoint({\n    x: Number(range[range.length - 1]) + 0.5 + rangePadding,\n    y: 0\n  }, horizontal);\n  var filteredTickValues = (tickValues != null ? tickValues : getTicks(scale, numTicks)).filter(function (value) {\n    return !hideZero || value !== 0 && value !== '0';\n  }).map(function (value, index) {\n    return {\n      value: value,\n      index: index\n    };\n  });\n  var ticks = filteredTickValues.map(function (_ref2) {\n    var value = _ref2.value,\n        index = _ref2.index;\n    var scaledValue = coerceNumber(tickPosition(value));\n    return {\n      value: value,\n      index: index,\n      from: createPoint({\n        x: scaledValue,\n        y: 0\n      }, horizontal),\n      to: createPoint({\n        x: scaledValue,\n        y: tickLength * tickSign\n      }, horizontal),\n      formattedValue: format(value, index, filteredTickValues)\n    };\n  });\n  return /*#__PURE__*/React.createElement(Group, {\n    className: cx('visx-axis', axisClassName),\n    top: top,\n    left: left\n  }, children(_extends({}, restProps, {\n    axisFromPoint: axisFromPoint,\n    axisToPoint: axisToPoint,\n    hideAxisLine: hideAxisLine,\n    hideTicks: hideTicks,\n    hideZero: hideZero,\n    horizontal: horizontal,\n    numTicks: numTicks,\n    orientation: orientation,\n    rangePadding: rangePadding,\n    scale: scale,\n    tickFormat: format,\n    tickLength: tickLength,\n    tickPosition: tickPosition,\n    tickSign: tickSign,\n    ticks: ticks\n  })));\n}","import { toString } from '@visx/scale';\n\n/**\n * Returns a tick position for the given tick value\n */\nexport default function getTickFormatter(scale) {\n  // Broaden type before using 'xxx' in s as typeguard.\n  var s = scale; // For point or band scales,\n  // have to add offset to make the tick centered.\n\n  if ('tickFormat' in s) {\n    return s.tickFormat();\n  }\n\n  return toString;\n}","/**\n * Create a function that returns a tick position for the given tick value\n */\nexport default function getTickPosition(scale, align) {\n  if (align === void 0) {\n    align = 'center';\n  }\n\n  // Broaden type before using 'xxx' in s as typeguard.\n  var s = scale; // For point or band scales,\n  // have to add offset to make the tick at center or end.\n\n  if (align !== 'start' && 'bandwidth' in s) {\n    var offset = s.bandwidth();\n    if (align === 'center') offset /= 2;\n    if (s.round()) offset = Math.round(offset);\n    return function (d) {\n      var scaledValue = s(d);\n      return typeof scaledValue === 'number' ? scaledValue + offset : scaledValue;\n    };\n  }\n\n  return scale;\n}","export default function getTicks(scale, numTicks) {\n  // Because `Scale` is generic type which maybe a subset of AnyD3Scale\n  // that may not have `ticks` field,\n  // TypeScript will not let us do the `'ticks' in scale` check directly.\n  // Have to manually cast and expand type first.\n  var s = scale;\n\n  if ('ticks' in s) {\n    return s.ticks(numTicks);\n  }\n\n  return s.domain().filter(function (_, index, arr) {\n    return numTicks == null || arr.length <= numTicks || index % Math.round((arr.length - 1) / numTicks) === 0;\n  });\n}","export default function coerceNumber(val) {\n  if ((typeof val === 'function' || typeof val === 'object' && !!val) && 'valueOf' in val) {\n    var num = val.valueOf();\n    if (typeof num === 'number') return num;\n  }\n\n  return val;\n}","'use strict';\nconst strictUriEncode = require('strict-uri-encode');\nconst decodeComponent = require('decode-uri-component');\nconst splitOnFirst = require('split-on-first');\nconst filterObject = require('filter-obj');\n\nconst isNullOrUndefined = value => value === null || value === undefined;\n\nconst encodeFragmentIdentifier = Symbol('encodeFragmentIdentifier');\n\nfunction encoderForArrayFormat(options) {\n\tswitch (options.arrayFormat) {\n\t\tcase 'index':\n\t\t\treturn key => (result, value) => {\n\t\t\t\tconst index = result.length;\n\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [...result, [encode(key, options), '[', index, ']'].join('')];\n\t\t\t\t}\n\n\t\t\t\treturn [\n\t\t\t\t\t...result,\n\t\t\t\t\t[encode(key, options), '[', encode(index, options), ']=', encode(value, options)].join('')\n\t\t\t\t];\n\t\t\t};\n\n\t\tcase 'bracket':\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [...result, [encode(key, options), '[]'].join('')];\n\t\t\t\t}\n\n\t\t\t\treturn [...result, [encode(key, options), '[]=', encode(value, options)].join('')];\n\t\t\t};\n\n\t\tcase 'comma':\n\t\tcase 'separator':\n\t\tcase 'bracket-separator': {\n\t\t\tconst keyValueSep = options.arrayFormat === 'bracket-separator' ?\n\t\t\t\t'[]=' :\n\t\t\t\t'=';\n\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\t// Translate null to an empty string so that it doesn't serialize as 'null'\n\t\t\t\tvalue = value === null ? '' : value;\n\n\t\t\t\tif (result.length === 0) {\n\t\t\t\t\treturn [[encode(key, options), keyValueSep, encode(value, options)].join('')];\n\t\t\t\t}\n\n\t\t\t\treturn [[result, encode(value, options)].join(options.arrayFormatSeparator)];\n\t\t\t};\n\t\t}\n\n\t\tdefault:\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [...result, encode(key, options)];\n\t\t\t\t}\n\n\t\t\t\treturn [...result, [encode(key, options), '=', encode(value, options)].join('')];\n\t\t\t};\n\t}\n}\n\nfunction parserForArrayFormat(options) {\n\tlet result;\n\n\tswitch (options.arrayFormat) {\n\t\tcase 'index':\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tresult = /\\[(\\d*)\\]$/.exec(key);\n\n\t\t\t\tkey = key.replace(/\\[\\d*\\]$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = {};\n\t\t\t\t}\n\n\t\t\t\taccumulator[key][result[1]] = value;\n\t\t\t};\n\n\t\tcase 'bracket':\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tresult = /(\\[\\])$/.exec(key);\n\t\t\t\tkey = key.replace(/\\[\\]$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = [value];\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [].concat(accumulator[key], value);\n\t\t\t};\n\n\t\tcase 'comma':\n\t\tcase 'separator':\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tconst isArray = typeof value === 'string' && value.includes(options.arrayFormatSeparator);\n\t\t\t\tconst isEncodedArray = (typeof value === 'string' && !isArray && decode(value, options).includes(options.arrayFormatSeparator));\n\t\t\t\tvalue = isEncodedArray ? decode(value, options) : value;\n\t\t\t\tconst newValue = isArray || isEncodedArray ? value.split(options.arrayFormatSeparator).map(item => decode(item, options)) : value === null ? value : decode(value, options);\n\t\t\t\taccumulator[key] = newValue;\n\t\t\t};\n\n\t\tcase 'bracket-separator':\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tconst isArray = /(\\[\\])$/.test(key);\n\t\t\t\tkey = key.replace(/\\[\\]$/, '');\n\n\t\t\t\tif (!isArray) {\n\t\t\t\t\taccumulator[key] = value ? decode(value, options) : value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst arrayValue = value === null ?\n\t\t\t\t\t[] :\n\t\t\t\t\tvalue.split(options.arrayFormatSeparator).map(item => decode(item, options));\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = arrayValue;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [].concat(accumulator[key], arrayValue);\n\t\t\t};\n\n\t\tdefault:\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [].concat(accumulator[key], value);\n\t\t\t};\n\t}\n}\n\nfunction validateArrayFormatSeparator(value) {\n\tif (typeof value !== 'string' || value.length !== 1) {\n\t\tthrow new TypeError('arrayFormatSeparator must be single character string');\n\t}\n}\n\nfunction encode(value, options) {\n\tif (options.encode) {\n\t\treturn options.strict ? strictUriEncode(value) : encodeURIComponent(value);\n\t}\n\n\treturn value;\n}\n\nfunction decode(value, options) {\n\tif (options.decode) {\n\t\treturn decodeComponent(value);\n\t}\n\n\treturn value;\n}\n\nfunction keysSorter(input) {\n\tif (Array.isArray(input)) {\n\t\treturn input.sort();\n\t}\n\n\tif (typeof input === 'object') {\n\t\treturn keysSorter(Object.keys(input))\n\t\t\t.sort((a, b) => Number(a) - Number(b))\n\t\t\t.map(key => input[key]);\n\t}\n\n\treturn input;\n}\n\nfunction removeHash(input) {\n\tconst hashStart = input.indexOf('#');\n\tif (hashStart !== -1) {\n\t\tinput = input.slice(0, hashStart);\n\t}\n\n\treturn input;\n}\n\nfunction getHash(url) {\n\tlet hash = '';\n\tconst hashStart = url.indexOf('#');\n\tif (hashStart !== -1) {\n\t\thash = url.slice(hashStart);\n\t}\n\n\treturn hash;\n}\n\nfunction extract(input) {\n\tinput = removeHash(input);\n\tconst queryStart = input.indexOf('?');\n\tif (queryStart === -1) {\n\t\treturn '';\n\t}\n\n\treturn input.slice(queryStart + 1);\n}\n\nfunction parseValue(value, options) {\n\tif (options.parseNumbers && !Number.isNaN(Number(value)) && (typeof value === 'string' && value.trim() !== '')) {\n\t\tvalue = Number(value);\n\t} else if (options.parseBooleans && value !== null && (value.toLowerCase() === 'true' || value.toLowerCase() === 'false')) {\n\t\tvalue = value.toLowerCase() === 'true';\n\t}\n\n\treturn value;\n}\n\nfunction parse(query, options) {\n\toptions = Object.assign({\n\t\tdecode: true,\n\t\tsort: true,\n\t\tarrayFormat: 'none',\n\t\tarrayFormatSeparator: ',',\n\t\tparseNumbers: false,\n\t\tparseBooleans: false\n\t}, options);\n\n\tvalidateArrayFormatSeparator(options.arrayFormatSeparator);\n\n\tconst formatter = parserForArrayFormat(options);\n\n\t// Create an object with no prototype\n\tconst ret = Object.create(null);\n\n\tif (typeof query !== 'string') {\n\t\treturn ret;\n\t}\n\n\tquery = query.trim().replace(/^[?#&]/, '');\n\n\tif (!query) {\n\t\treturn ret;\n\t}\n\n\tfor (const param of query.split('&')) {\n\t\tif (param === '') {\n\t\t\tcontinue;\n\t\t}\n\n\t\tlet [key, value] = splitOnFirst(options.decode ? param.replace(/\\+/g, ' ') : param, '=');\n\n\t\t// Missing `=` should be `null`:\n\t\t// http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters\n\t\tvalue = value === undefined ? null : ['comma', 'separator', 'bracket-separator'].includes(options.arrayFormat) ? value : decode(value, options);\n\t\tformatter(decode(key, options), value, ret);\n\t}\n\n\tfor (const key of Object.keys(ret)) {\n\t\tconst value = ret[key];\n\t\tif (typeof value === 'object' && value !== null) {\n\t\t\tfor (const k of Object.keys(value)) {\n\t\t\t\tvalue[k] = parseValue(value[k], options);\n\t\t\t}\n\t\t} else {\n\t\t\tret[key] = parseValue(value, options);\n\t\t}\n\t}\n\n\tif (options.sort === false) {\n\t\treturn ret;\n\t}\n\n\treturn (options.sort === true ? Object.keys(ret).sort() : Object.keys(ret).sort(options.sort)).reduce((result, key) => {\n\t\tconst value = ret[key];\n\t\tif (Boolean(value) && typeof value === 'object' && !Array.isArray(value)) {\n\t\t\t// Sort object keys, not values\n\t\t\tresult[key] = keysSorter(value);\n\t\t} else {\n\t\t\tresult[key] = value;\n\t\t}\n\n\t\treturn result;\n\t}, Object.create(null));\n}\n\nexports.extract = extract;\nexports.parse = parse;\n\nexports.stringify = (object, options) => {\n\tif (!object) {\n\t\treturn '';\n\t}\n\n\toptions = Object.assign({\n\t\tencode: true,\n\t\tstrict: true,\n\t\tarrayFormat: 'none',\n\t\tarrayFormatSeparator: ','\n\t}, options);\n\n\tvalidateArrayFormatSeparator(options.arrayFormatSeparator);\n\n\tconst shouldFilter = key => (\n\t\t(options.skipNull && isNullOrUndefined(object[key])) ||\n\t\t(options.skipEmptyString && object[key] === '')\n\t);\n\n\tconst formatter = encoderForArrayFormat(options);\n\n\tconst objectCopy = {};\n\n\tfor (const key of Object.keys(object)) {\n\t\tif (!shouldFilter(key)) {\n\t\t\tobjectCopy[key] = object[key];\n\t\t}\n\t}\n\n\tconst keys = Object.keys(objectCopy);\n\n\tif (options.sort !== false) {\n\t\tkeys.sort(options.sort);\n\t}\n\n\treturn keys.map(key => {\n\t\tconst value = object[key];\n\n\t\tif (value === undefined) {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (value === null) {\n\t\t\treturn encode(key, options);\n\t\t}\n\n\t\tif (Array.isArray(value)) {\n\t\t\tif (value.length === 0 && options.arrayFormat === 'bracket-separator') {\n\t\t\t\treturn encode(key, options) + '[]';\n\t\t\t}\n\n\t\t\treturn value\n\t\t\t\t.reduce(formatter(key), [])\n\t\t\t\t.join('&');\n\t\t}\n\n\t\treturn encode(key, options) + '=' + encode(value, options);\n\t}).filter(x => x.length > 0).join('&');\n};\n\nexports.parseUrl = (url, options) => {\n\toptions = Object.assign({\n\t\tdecode: true\n\t}, options);\n\n\tconst [url_, hash] = splitOnFirst(url, '#');\n\n\treturn Object.assign(\n\t\t{\n\t\t\turl: url_.split('?')[0] || '',\n\t\t\tquery: parse(extract(url), options)\n\t\t},\n\t\toptions && options.parseFragmentIdentifier && hash ? {fragmentIdentifier: decode(hash, options)} : {}\n\t);\n};\n\nexports.stringifyUrl = (object, options) => {\n\toptions = Object.assign({\n\t\tencode: true,\n\t\tstrict: true,\n\t\t[encodeFragmentIdentifier]: true\n\t}, options);\n\n\tconst url = removeHash(object.url).split('?')[0] || '';\n\tconst queryFromUrl = exports.extract(object.url);\n\tconst parsedQueryFromUrl = exports.parse(queryFromUrl, {sort: false});\n\n\tconst query = Object.assign(parsedQueryFromUrl, object.query);\n\tlet queryString = exports.stringify(query, options);\n\tif (queryString) {\n\t\tqueryString = `?${queryString}`;\n\t}\n\n\tlet hash = getHash(object.url);\n\tif (object.fragmentIdentifier) {\n\t\thash = `#${options[encodeFragmentIdentifier] ? encode(object.fragmentIdentifier, options) : object.fragmentIdentifier}`;\n\t}\n\n\treturn `${url}${queryString}${hash}`;\n};\n\nexports.pick = (input, filter, options) => {\n\toptions = Object.assign({\n\t\tparseFragmentIdentifier: true,\n\t\t[encodeFragmentIdentifier]: false\n\t}, options);\n\n\tconst {url, query, fragmentIdentifier} = exports.parseUrl(input, options);\n\treturn exports.stringifyUrl({\n\t\turl,\n\t\tquery: filterObject(query, filter),\n\t\tfragmentIdentifier\n\t}, options);\n};\n\nexports.exclude = (input, filter, options) => {\n\tconst exclusionFilter = Array.isArray(filter) ? key => !filter.includes(key) : (key, value) => !filter(key, value);\n\n\treturn exports.pick(input, exclusionFilter, options);\n};\n","module.exports = require(\"regenerator-runtime\");\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from 'react';\nimport cx from 'classnames';\nexport default function Circle(_ref) {\n  var className = _ref.className,\n      innerRef = _ref.innerRef,\n      restProps = _objectWithoutPropertiesLoose(_ref, [\"className\", \"innerRef\"]);\n\n  return /*#__PURE__*/React.createElement(\"circle\", _extends({\n    ref: innerRef,\n    className: cx('visx-circle', className)\n  }, restProps));\n}","/**\n * @file\n * legend\n */\n\nimport React from 'react';\nimport { scaleSqrt, scaleThreshold, scaleOrdinal } from '@visx/scale';\nimport { Group } from '@visx/group';\nimport { Drag } from '@visx/drag';\nimport LegendCategorical from './legendCategorical.js';\nimport LegendThreshold from './legendThreshold.js';\nimport LegendMagnitude from './legendMagnitude.js';\nimport { legendComponentPropTypes } from '../prop-types';\nimport { legendComponentDefaultProps } from '../default-props';\nimport { legendCategoricalStyles, legendThresholdStyles, legendMagnitudeStyles } from './styles.js';\nimport { getResponsiveValues } from '../../util';\nimport legendCategoricalData from '../../sample-data/legendCategorical.js';\n\nconst Legend = ({\n  legendWidth,\n  legendHeight,\n  posX,\n  posY,\n  legendType,\n  scale: customScale,\n  invert,\n  geometry,\n  orientation,\n  seriesNames: customSeriesNames,\n  median,\n  label,\n  draggable,\n}) => {\n  const { tickLabelStyle } = getResponsiveValues(legendWidth);\n  let renderedLegend;\n  let css;\n  let scale = customScale;\n  let seriesNames = customSeriesNames;\n\n  if (legendType === 'magnitude') {\n    css = legendMagnitudeStyles;\n    if (!scale) {\n      scale = scaleSqrt({\n        domain: [0, 5, 20],\n        range: [0, 50],\n      });\n    }\n\n    if (!seriesNames) {\n      seriesNames = scale.domain();\n    }\n    seriesNames = [...seriesNames]\n      .sort((a, b) => {\n        return a - b;\n      })\n      // removes zeroes\n      .filter(d => {\n        return Number(d);\n      });\n\n    renderedLegend = (\n      <LegendMagnitude\n        seriesNames={seriesNames}\n        scale={scale}\n        fontSize={tickLabelStyle.fontSize}\n        label={label}\n      />\n    );\n  }\n  if (legendType === 'threshold') {\n    css = legendThresholdStyles;\n    if (!scale) {\n      scale = scaleThreshold({\n        domain: [1.6, 3.3, 4.3, 5.4, 7, 10.1, 14.8, 20.1],\n        range: ['#d6d3ea', '#adb8e6', '#849cdb', '#5e82c8', '#3968ad', '#1b4f8d', '#0a3866'],\n      });\n    }\n    if (!seriesNames) {\n      seriesNames = scale.domain();\n    }\n    renderedLegend = (\n      <LegendThreshold\n        scale={scale}\n        invert={invert}\n        width={legendWidth}\n        height={legendHeight}\n        orientation={orientation}\n        fontSize={tickLabelStyle.fontSize}\n        median={median}\n        seriesNames={seriesNames}\n      />\n    );\n  } else if (legendType === 'categorical') {\n    css = legendCategoricalStyles;\n    if (!scale) {\n      scale = scaleOrdinal({\n        domain: Object.keys(legendCategoricalData),\n        range: Object.values(legendCategoricalData),\n      });\n    }\n    if (!seriesNames) {\n      seriesNames = scale.domain();\n    }\n    if (invert) {\n      seriesNames.reverse();\n    }\n    renderedLegend = (\n      <LegendCategorical\n        scale={scale}\n        seriesNames={seriesNames}\n        orientation={orientation}\n        geometry={geometry}\n        fontSize={tickLabelStyle.fontSize}\n      />\n    );\n  }\n  return (\n    <Drag width={legendWidth} height={legendHeight}>\n      {({ dragStart, dragEnd, dragMove, dx, dy }) => {\n        return (\n          <Group\n            id={legendType}\n            css={css}\n            onMouseMove={dragMove}\n            onMouseUp={dragEnd}\n            onMouseDown={dragStart}\n            onTouchStart={dragStart}\n            onTouchMove={dragMove}\n            onTouchEnd={dragEnd}\n            transform={\n              // if position is pinned, then use that position and disable dragging\n              // if position is not pinned, then allow dragging if draggable is true\n              draggable ? `translate(${dx}, ${dy})` : `translate(${posX}, ${posY})`\n            }\n          >\n            {renderedLegend}\n          </Group>\n        );\n      }}\n    </Drag>\n  );\n};\n\nLegend.propTypes = legendComponentPropTypes;\nLegend.defaultProps = legendComponentDefaultProps;\n\nexport default Legend;\n","import React, { useContext } from 'react';\nimport { Group } from '@visx/group';\nimport { Circle } from '@visx/shape';\nimport { inferScaleType } from '@visx/scale';\nimport { LinePathAnnotation } from '@visx/annotation';\nimport { PlotContext } from '../chart-frame/plot-context';\nimport { dotsComponentPropTypes } from '../prop-types';\nimport { dotsComponentDefaultProps } from '../default-props';\nimport { useTooltipEvents } from '../../util/hooks';\n\nconst LabelArrow = ({ x, y, width, fill, stroke, strokeWidth }) => {\n  const halfWidth = (width + strokeWidth) / 2;\n  return (\n    <path\n      d={`M${x - halfWidth},${y + halfWidth} L${x + halfWidth},${y + halfWidth} L${x},${\n        y - halfWidth\n      } Z`}\n      fill={fill}\n      stroke={stroke}\n      strokeWidth={strokeWidth / 2}\n      strokeLinecap=\"round\"\n    />\n  );\n};\n\nconst DotLabel = ({\n  label,\n  labelFill,\n  labelDy,\n  labelStrokeColor,\n  labelPoints,\n  labelStrokeWidth,\n  generatedLabelProps,\n}) => (\n  <Group>\n    {labelStrokeColor && (\n      <LinePathAnnotation\n        className=\"highlighted-label\"\n        label={label}\n        points={labelPoints}\n        labelFill={labelStrokeColor}\n        labelStroke={labelStrokeColor}\n        labelStrokeWidth={labelStrokeWidth}\n        labelDy={labelDy}\n        {...generatedLabelProps}\n      />\n    )}\n    <LinePathAnnotation\n      className=\"highlighted-label\"\n      label={label}\n      points={labelPoints}\n      labelFill={labelFill}\n      labelStroke=\"none\"\n      labelDy={labelDy}\n      {...generatedLabelProps}\n    />\n  </Group>\n);\n\nconst Dot = ({\n  cx,\n  cy,\n  r,\n  topSpacing, // Margin + Padding\n  hollow,\n  color,\n  opacity,\n  strokeColor,\n  strokeWidth,\n  tooltipFunctions,\n  label,\n  labelStrokeColor,\n  labelStrokeWidth,\n  labelColor,\n  labelProps,\n  offChartLabelPosition,\n  yAxisIntersectionX,\n}) => {\n  // This positions the label at the same point as the circle\n  const defaultLabelPoints = [{ x: cx, y: cy }];\n  // Extract points from generated label props\n  const { points, ...generatedLabelProps } =\n    label && labelProps ? labelProps(cx, cy, r, color) : {};\n  // If a set of points has been generated, use these rather than the default\n  let labelPoints = points || defaultLabelPoints;\n\n  // Extract y position of first label point\n  const [{ y: yPositionOfFirstLabelPoint }] = labelPoints;\n  const aboveTopOfChart = yPositionOfFirstLabelPoint < 0;\n  if (aboveTopOfChart) {\n    // If the label is above the top of the chart, extract the x position\n    const [{ x }] = labelPoints;\n    // Set the a new label position at the top of the chart above all other labels\n    const labelDotDiameter = r * 2;\n    const offChartLabelXPosition =\n      offChartLabelPosition === 'end' ? x : yAxisIntersectionX + labelDotDiameter;\n    // If the chart has a margin, position the label at the top of the margin\n    const offChartLabelYPosition = topSpacing > 0 ? -topSpacing + labelDotDiameter : 0;\n    labelPoints = [{ x: offChartLabelXPosition, y: offChartLabelYPosition }];\n  }\n\n  return (\n    <>\n      {!aboveTopOfChart && (\n        <Circle\n          className=\"dot\"\n          cx={cx}\n          cy={cy}\n          r={r}\n          fill={hollow ? 'none' : color}\n          stroke={strokeColor || (hollow || strokeWidth ? color : 'none')}\n          strokeWidth={strokeWidth || 3}\n          fillOpacity={opacity}\n          {...tooltipFunctions}\n        />\n      )}\n      {label && (\n        <DotLabel\n          label={label}\n          labelFill={labelColor}\n          labelStrokeColor={labelStrokeColor}\n          labelPoints={labelPoints}\n          labelStrokeWidth={labelStrokeWidth}\n          generatedLabelProps={generatedLabelProps}\n          aboveTopOfChart={aboveTopOfChart}\n        />\n      )}\n      {aboveTopOfChart && (\n        <LabelArrow\n          x={labelPoints[0].x}\n          y={labelPoints[0].y}\n          width={r * 2}\n          fill={labelColor}\n          stroke={labelStrokeColor}\n          strokeWidth={labelStrokeWidth}\n        />\n      )}\n    </>\n  );\n};\n\nconst Dots = ({\n  width,\n  height,\n  margin,\n  padding,\n  data,\n  seriesNames,\n  // Scales\n  xVariable,\n  yVariable,\n  sizeVariable,\n  colorVariable,\n  xScale,\n  yScale,\n  yTransformFunction,\n  sizeScale,\n  colorScale,\n  labelColorScale,\n  // Dot config\n  hollowDots,\n  opacity,\n  strokeWidth,\n  strokeColor,\n  // Tooltips\n  tooltipEvents,\n  customTooltipComponent,\n  tooltipPositionOverride, // @TODO add to prop types\n  // Labels\n  labelVariable,\n  labelProps, // @TODO is this well-named?\n  labelStrokeColor,\n  labelStrokeWidth,\n  offChartLabelPosition,\n}) => {\n  xScale.range([0, width]);\n  yScale.range([height, 0]);\n\n  const { top: marginTop, left: marginLeft } = margin;\n  const { top: paddingTop, left: paddingLeft } = padding;\n  const topSpacing = marginTop + paddingTop;\n  const leftSpacing = marginLeft + paddingLeft;\n\n  const DotsForSeries = ({ data: dataForSeries, seriesName }) => (\n    <Group>\n      {dataForSeries.map((dotData, i) => {\n        const cx = xScale(dotData[xVariable]);\n        const cy = yScale(\n          yTransformFunction ? yTransformFunction(dotData[yVariable]) : dotData[yVariable]\n        );\n        const r = sizeScale(dotData[sizeVariable]);\n        const color = colorScale(dotData[colorVariable]);\n        const labelColor = labelColorScale ? labelColorScale(dotData[colorVariable]) : color;\n        const label =\n          labelVariable === 'label'\n            ? dotData[labelVariable]\n            : dotData.label && dotData[labelVariable];\n        const { yAxisIntersectionX } = dotData;\n        const scaledYAxisIntersectionX = yAxisIntersectionX && xScale(yAxisIntersectionX);\n\n        const tooltipPosition = tooltipPositionOverride\n          ? tooltipPositionOverride({\n              data: dotData,\n              xScale: (x) => leftSpacing + xScale(x),\n              yScale: (y) => topSpacing + yScale(y),\n            })\n          : // Default position is a diameter above the dot\n            { x: cx + leftSpacing, y: cy + topSpacing - r * 2 };\n\n        const tooltipFunctions = tooltipEvents\n          ? tooltipEvents(\n              { content: customTooltipComponent ? dotData : dotData[labelVariable] },\n              tooltipPosition\n            )\n          : {};\n\n        return (\n          <Dot\n            key={`series_${seriesName}_${cx}_${cy}_${i}`}\n            cx={cx}\n            cy={cy}\n            r={r}\n            topSpacing={topSpacing}\n            color={color}\n            hollow={hollowDots}\n            opacity={opacity}\n            strokeWidth={strokeWidth}\n            strokeColor={strokeColor}\n            tooltipFunctions={tooltipFunctions}\n            labelProps={labelProps}\n            labelColor={labelColor}\n            labelStrokeColor={labelStrokeColor}\n            labelStrokeWidth={labelStrokeWidth}\n            label={label}\n            offChartLabelXPosition={offChartLabelPosition}\n            yAxisIntersectionX={scaledYAxisIntersectionX}\n          />\n        );\n      })}\n    </Group>\n  );\n\n  return seriesNames ? (\n    <Group>\n      {seriesNames.map((seriesName) => {\n        const dataForSeries = data[seriesName];\n        return <DotsForSeries data={dataForSeries} seriesName={seriesName} />;\n      })}\n    </Group>\n  ) : (\n    <DotsForSeries data={data} seriesName=\"dots\" />\n  );\n};\n\nconst MemoisedDots = React.memo(\n  Dots,\n  (prevProps, nextProps) => JSON.stringify(prevProps) === JSON.stringify(nextProps)\n);\n\nconst DotsWithHighlights = ({\n  data,\n  showTooltips,\n  seriesNames,\n  highlightDotsOnHover,\n  hoveredDotsStrokeColor,\n  hoveredDotsStrokeWidth,\n  hoveredDotsColorScale,\n  hoveredDotsLabelColorScale,\n  ...props\n}) => {\n  const { width, height, margin, padding, hoveredSeries, hoveredData, updateTooltip } = useContext(\n    PlotContext\n  );\n  const tooltipEvents = useTooltipEvents({ enabled: showTooltips, updateTooltip });\n\n  const scaleProperties = {\n    yScaleType: inferScaleType(props.yScale),\n    yScaleDomain: props.yScale.domain(),\n    yScaleRange: props.yScale.range(),\n    xScaleType: inferScaleType(props.xScale),\n    xScaleDomain: props.xScale.domain(),\n    xScaleRange: props.xScale.range(),\n  };\n\n  return (\n    <>\n      <MemoisedDots\n        {...props}\n        data={data}\n        width={width}\n        height={height}\n        margin={margin}\n        padding={padding}\n        tooltipEvents={tooltipEvents}\n        seriesNames={seriesNames}\n        // This should force the dots to rerender when the scale properties change\n        {...scaleProperties}\n      />\n      {/* For hovering over data with series (e.g. line chart) */}\n      {highlightDotsOnHover && hoveredSeries && (\n        <MemoisedDots\n          {...props}\n          data={data}\n          width={width}\n          height={height}\n          margin={margin}\n          padding={padding}\n          tooltipEvents={tooltipEvents}\n          seriesNames={hoveredSeries ? [hoveredSeries] : hoveredSeries}\n          colorScale={hoveredDotsColorScale}\n          labelColorScale={hoveredDotsLabelColorScale}\n          // This should force the dots to rerender when the scale properties change\n          {...scaleProperties}\n        />\n      )}\n      {/* For hovering over points without series (e.g. bubble chart) */}\n      {highlightDotsOnHover && hoveredData && (\n        <MemoisedDots\n          {...props}\n          data={data.length ? data.filter((d) => d.seriesName === hoveredData.seriesName) : []}\n          strokeColor={hoveredDotsStrokeColor}\n          strokeWidth={hoveredDotsStrokeWidth}\n          opacity={0}\n          width={width}\n          height={height}\n          margin={margin}\n          padding={padding}\n          tooltipEvents={tooltipEvents}\n          colorScale={hoveredDotsColorScale}\n          labelColorScale={hoveredDotsLabelColorScale}\n          // This should force the dots to rerender when the scale properties change\n          {...scaleProperties}\n        />\n      )}\n    </>\n  );\n};\n\nDots.propTypes = dotsComponentPropTypes;\nDots.defaultProps = dotsComponentDefaultProps;\n\nexport { DotsWithHighlights as Dots };\nexport default null;\n","/**\n * @file\n * Base component for chart-frame\n */\nimport React, { useReducer, Children, isValidElement, cloneElement } from 'react';\nimport { Group } from '@visx/group';\nimport { useTooltip } from '@visx/tooltip';\nimport { ParentSize } from '@visx/responsive';\nimport TooltipWithBounds from '../tooltip';\nimport ChartTopper from '../chart-topper';\nimport ChartFooter from '../chart-footer';\nimport { getResponsiveValues, stripHTMLTags } from '../../util';\nimport { frameStyles } from './styles';\nimport { framePropTypes } from '../prop-types';\nimport { frameDefaultProps } from '../default-props';\nimport { PlotContext } from './plot-context';\n\nconst Frame = ({\n  background,\n  children,\n  description,\n  watermark: Watermark,\n  watermarkOffset,\n  // Base\n  margin,\n  width,\n  height,\n  padding,\n  // <ChartFrame />\n  type,\n  // <ChartTopper />\n  stabRule,\n  subtitle,\n  subtitleFontSize,\n  subtitleLineHeight,\n  subtitleMarkupCustom,\n  subtitlePosition,\n  subtitleStylesCustom,\n  title,\n  titleFontSize,\n  titleLineHeight,\n  titleMarkupCustom,\n  titlePosition,\n  titleStylesCustom,\n  // <ChartFooter />\n  copyright,\n  source,\n  sourceFontSize,\n  sourceLineHeight,\n  sourcePlotYOffset,\n  sourcePosition,\n  hideTitleTooltip,\n  hideTopper,\n  hideFooter,\n  // Tooltip\n  tooltipStyle,\n  tooltipComponent,\n  ...props\n}) => {\n  const { tooltipData, tooltipLeft, tooltipTop, tooltipOpen, ...tooltipFunctions } = useTooltip();\n  const [paddingState, updatePaddingState] = useReducer(\n    (currentPadding, newPadding) => ({\n      ...currentPadding,\n      ...newPadding,\n    }),\n    padding\n  );\n\n  // Creates a hopefully unique id for the aria-labelledby value\n  const a11yDescription =\n    description ||\n    (subtitle\n      ? `Chart of ${stripHTMLTags(subtitle)} ${title ? `showing ${stripHTMLTags(title)}` : ''}`\n      : 'A Financial Times chart');\n  const uniqueA11yTitleDescPrefix = `ft-webgraphic-${type}__chart-a11y-${encodeURI(\n    (description || subtitle || '').toLowerCase().replace(/[^a-zA-Z0-9]+/g, '')\n  )}`;\n\n  return (\n    <>\n      <ParentSize>\n        {({ width: parentWidth }) => {\n          // Gets various values based on width\n          const {\n            height: responsiveHeight,\n            margin: responsiveMargin,\n            sourceFontSize: responsiveSourceFontSize,\n            sourceLineHeight: responsiveSourceLineHeight,\n            tickLength,\n            subtitleFontSize: responsiveSubtitleFontSize,\n            subtitleLineHeight: responsiveSubtitleLineHeight,\n            subtitlePosition: responsiveSubtitlePosition,\n            titleFontSize: responsiveTitleFontSize,\n            titleLineHeight: responsiveTitleLineHeight,\n            titlePosition: responsiveTitlePosition,\n            width: responsiveWidth,\n          } = getResponsiveValues(width || parentWidth, {\n            topper: !hideTopper,\n            footer: !hideFooter,\n          });\n\n          // Use dimensions from props when they are truthy; otherwise use responsive values\n          const svgWidth = width || responsiveWidth;\n          const svgHeight = height || responsiveHeight;\n          const plotMargin = margin || responsiveMargin;\n\n          // Use font sizes from props when they are truthy; otherwise use responsive values\n          const renderSourceFontSize = sourceFontSize || responsiveSourceFontSize;\n          const renderSourceLineHeight = sourceLineHeight || responsiveSourceLineHeight;\n          const renderSubtitleFontSize = subtitleFontSize || responsiveSubtitleFontSize;\n          const renderSubtitleLineHeight = subtitleLineHeight || responsiveSubtitleLineHeight;\n          const renderSubtitlePosition = subtitlePosition || responsiveSubtitlePosition;\n          const renderTitleFontSize = titleFontSize || responsiveTitleFontSize;\n          const renderTitleLineHeight = titleLineHeight || responsiveTitleLineHeight;\n          const renderTitlePosition = titlePosition || responsiveTitlePosition;\n\n          // Calculate inner (plot) dimensions\n          const plotPadding = paddingState;\n          const innerWidth =\n            svgWidth -\n            (plotMargin.left + plotPadding.left) -\n            (plotMargin.right + plotPadding.right);\n          const innerHeight =\n            svgHeight -\n            (plotMargin.top + plotPadding.top) -\n            (plotMargin.bottom + plotPadding.bottom);\n\n          return (\n            <PlotContext.Provider\n              value={{\n                frameWidth: svgWidth,\n                frameHeight: svgHeight,\n                width: innerWidth,\n                height: innerHeight,\n                margin: plotMargin,\n                padding: paddingState,\n                tickLength,\n                type,\n                updatePadding: (newPadding = {}) => updatePaddingState(newPadding),\n                ...tooltipFunctions,\n                hoveredSeries: tooltipData && !tooltipData.data && tooltipData.seriesName,\n                hoveredData: tooltipData && tooltipData.data,\n                mousePoint: tooltipData && tooltipData.mousePoint,\n              }}\n            >\n              <svg\n                aria-labelledby={`${uniqueA11yTitleDescPrefix}-title ${uniqueA11yTitleDescPrefix}-desc`}\n                css={frameStyles}\n                fontFamily=\"MetricWeb,sans-serif\"\n                height={svgHeight}\n                role=\"img\"\n                viewBox={`0 0 ${svgWidth} ${svgHeight}`}\n                width={svgWidth}\n                {\n                  ...props /* @TODO this line is throwing lots of warnings */\n                }\n              >\n                {\n                  hideTitleTooltip && (\n                    <title />\n                  ) /* This prevent tooltips on hover; see https://stackoverflow.com/a/57971234/467760 */\n                }\n\n                <title id={`${uniqueA11yTitleDescPrefix}-title`}>\n                  {titleMarkupCustom ? stripHTMLTags(title) : title}\n                </title>\n\n                <desc id={`${uniqueA11yTitleDescPrefix}-desc`}>{a11yDescription}</desc>\n\n                {background && (\n                  <rect\n                    data-id=\"chart-background\"\n                    fill={background}\n                    height={svgHeight}\n                    role=\"presentation\"\n                    width={svgWidth}\n                    x=\"0\"\n                    y=\"0\"\n                  />\n                )}\n\n                {!hideTopper && (\n                  <ChartTopper\n                    height={svgHeight}\n                    margin={plotMargin}\n                    stabRule={stabRule}\n                    subtitle={subtitle}\n                    subtitleFontSize={renderSubtitleFontSize}\n                    subtitleLineHeight={renderSubtitleLineHeight}\n                    subtitleMarkupCustom={subtitleMarkupCustom}\n                    subtitlePosition={renderSubtitlePosition}\n                    subtitleStylesCustom={subtitleStylesCustom}\n                    title={title}\n                    titleFontSize={renderTitleFontSize}\n                    titleLineHeight={renderTitleLineHeight}\n                    titleMarkupCustom={titleMarkupCustom}\n                    titlePosition={renderTitlePosition}\n                    titleStylesCustom={titleStylesCustom}\n                    type={type}\n                    width={svgWidth}\n                  />\n                )}\n\n                <Group\n                  className=\"chart-plot\"\n                  role=\"presentation\"\n                  transform={`translate(${plotMargin.left + plotPadding.left}, ${\n                    plotMargin.top + plotPadding.top\n                  })`}\n                >\n                  {Children.map(children, (child) => {\n                    if (!isValidElement(child)) {\n                      return null;\n                    }\n\n                    return cloneElement(child, {\n                      width: innerWidth,\n                      height: innerHeight,\n                      margin: plotMargin,\n                      padding: plotPadding,\n                      type,\n                    });\n                  })}\n                </Group>\n\n                {!hideFooter && (\n                  <ChartFooter\n                    copyright={copyright}\n                    height={svgHeight}\n                    margin={plotMargin}\n                    source={source}\n                    sourceFontSize={renderSourceFontSize}\n                    sourceLineHeight={renderSourceLineHeight}\n                    sourcePlotYOffset={sourcePlotYOffset}\n                    sourcePosition={sourcePosition}\n                    type={type}\n                    width={svgWidth}\n                  />\n                )}\n\n                {Watermark && (\n                  <Group\n                    className=\"chart-watermark\"\n                    role=\"presentation\"\n                    transform={`translate(${width - Watermark.width - watermarkOffset.x}, ${\n                      height - Watermark.height - watermarkOffset.y\n                    }) scale(1)`}\n                  >\n                    {\n                      React.createElement(\n                        Watermark\n                      ) /* JSX does not like it when this is a boolean */\n                    }\n                  </Group>\n                )}\n              </svg>\n            </PlotContext.Provider>\n          );\n        }}\n      </ParentSize>\n      {tooltipOpen && tooltipData && tooltipData.content && (\n        <TooltipWithBounds\n          // set this to random so it correctly updates with parent bounds\n          key={Math.random()}\n          top={tooltipTop}\n          left={tooltipLeft}\n          offsetTop={0}\n          offsetLeft={0}\n          style={{ ...tooltipStyle, pointerEvents: 'none' }}\n          // @TODO should this be an option?\n          offsetX=\"-50%\"\n          offsetY=\"-50%\"\n          dataYPosition={tooltipData.dataYPosition}\n          maxOffsetY={tooltipData.maxOffsetY}\n        >\n          {tooltipComponent(tooltipData.content)}\n        </TooltipWithBounds>\n      )}\n    </>\n  );\n};\n\nFrame.propTypes = framePropTypes;\nFrame.defaultProps = frameDefaultProps;\n\nexport default Frame;\n","/**\n * @file\n * CSS styles for <ChartFrame />\n */\n\nimport { css } from '@emotion/core';\n\nexport const frameStyles = css`\n  display: block;\n  margin: 0 auto;\n\n  text {\n    font-feature-settings: 'tnum', 1;\n    -moz-font-feature-settings: 'tnum';\n    -webkit-font-feature-settings: 'tnum';\n    -webkit-font-smoothing: antialiased;\n  }\n`;\n\nexport const socialChartFrameStyles = css`\n  .axis text {\n    fill: #8e9095;\n    font-family: metric;\n    font-size: 20px;\n  }\n\n  .highlighted-label {\n    fill: #ffffff;\n    opacity: 1;\n    font-family: metric;\n    font-size: 20px;\n  }\n\n  .yAxis text {\n    fill: #8e9095;\n    text-anchor: end;\n  }\n\n  .yAxis line {\n    stroke: #47494d;\n    stroke-width: 1px;\n  }\n\n  .domain {\n    stroke-width: 0px;\n  }\n\n  .timelineHolder .domain {\n    stroke: #ffffff;\n  }\n\n  .timelineHolder .domain {\n    stroke-width: 1px;\n  }\n\n  .xAxis text {\n    fill: #8e9095;\n    text-anchor: middle;\n  }\n\n  .xAxis line {\n    stroke: #47494d;\n    stroke-width: 1px;\n  }\n\n  .baseline line {\n    stroke: #8e9095;\n    stroke-width: 1px;\n  }\n\n  .lines {\n    stroke-linecap: square;\n    stroke-linejoin: round;\n    stroke-width: 4px;\n    fill: none;\n  }\n\n  .annotations-holder line {\n    stroke: #8e9095;\n    stroke-width: 1px;\n  }\n\n  .annotations-holder path {\n    stroke: #8e9095;\n    stroke-width: 1px;\n  }\n\n  .annotations-holder text {\n    font-size: 24px;\n    fill: #ffffff;\n  }\n\n  .highlights {\n    fill: #ffffff;\n    opacity: 0.2;\n  }\n\n  .timeline-label,\n  .legend text {\n    font-family: metric;\n    fill: #8e9095;\n    font-size: 20px;\n  }\n`;\n\nexport const videoChartFrameStyles = css``;\n\nexport const printChartFrameStyles = css``;\n\nexport default frameStyles;\n","import Delegate from 'ftdomdelegate';\n\n/**\n * Append rows to table.\n *\n * @access private\n * @param {Element} tbody - The table body to append the row batch to.\n * @param {Array} rowBatch - An array of rows to append to the table body.\n * @returns {void}\n */\nfunction append(tbody, rowBatch) {\n\tif (tbody.append) {\n\t\ttbody.append(...rowBatch);\n\t} else {\n\t\trowBatch.forEach(row => tbody.appendChild(row));\n\t}\n}\n\n/**\n * Prepend rows to table.\n *\n * @access private\n * @param {Element} tbody - The table body to prepend the row batch to.\n * @param {Array} rowBatch - An array of rows to prepend to the table body.\n * @returns {void}\n */\nfunction prepend(tbody, rowBatch) {\n\tif (tbody.prepend) {\n\t\ttbody.prepend(...rowBatch);\n\t} else {\n\t\trowBatch.reverse().forEach(row => {\n\t\t\ttbody.insertBefore(row, tbody.firstChild);\n\t\t});\n\t}\n}\n\nclass BaseTable {\n\n\t/**\n\t * The shared functionality of all `o-table` variants.\n\t *\n\t * @access public\n\t * @param {HTMLElement} rootEl - The `o-table` element.\n\t * @param {import(\"../Sort/TableSorter\")} sorter a TableSorter instance\n\t * @param {object} opts [{}]\n\t * @param {boolean} opts.sortable [true]\n\t * @returns {BaseTable} the new base table\n\t */\n\tconstructor(rootEl, sorter, opts = {}) {\n\t\tthis._listeners = [];\n\t\tthis._sorter = sorter;\n\t\tthis.rootEl = rootEl;\n\t\tthis._opts = Object.assign({\n\t\t\tsortable: this.rootEl.getAttribute('data-o-table-sortable') !== 'false',\n\t\t\tpreferredSortOrder: this.rootEl.getAttribute('data-o-table-preferred-sort-order')\n\t\t}, opts);\n\t\tthis.thead = this.rootEl.querySelector('thead');\n\t\tthis.tbody = this.rootEl.querySelector('tbody');\n\t\tthis.tableCaption = this.rootEl.querySelector('caption');\n\t\tthis.tableHeaders = this.thead ? Array.from(\n\t\t\tthis.thead.querySelectorAll('tr:last-of-type > th')\n\t\t) : [];\n\t\tthis.tableRows = this.tbody ? Array.from(this.tbody.getElementsByTagName('tr')) : [];\n\t\tthis._filteredTableRows = [];\n\t\tthis.wrapper = this.rootEl.closest('.o-table-scroll-wrapper');\n\t\tthis.container = this.rootEl.closest('.o-table-container');\n\t\tthis.overlayWrapper = this.rootEl.closest('.o-table-overlay-wrapper');\n\t\tthis.filterContainer = this.wrapper || this.container;\n\t\tthis._updateTableHeightListenerSet = false;\n\n\t\t/**\n\t\t * @property {object | null} _currentSort - The current sort applied.\n\t\t * @property {number} _currentSort.columnIndex - The index of the currently sorted column.\n\t\t * @property {string} _currentSort.sortOrder - The type of sort, \"ascending\" or \"descending\"\n\t\t */\n\t\tthis._currentSort = null;\n\n\t\t/**\n\t\t * @property {object | null} _currentFilter - The filter currently applied.\n\t\t * @property {number} _currentFilter.columnIndex - The index of the column which is filtered.\n\t\t * @property {string | Function} _currentFilter.filter - The filter applied.\n\t\t */\n\t\tthis._currentFilter = null;\n\n\t\t// Defer filter setup.\n\t\twindow.setTimeout(this._setupFilters.bind(this), 0);\n\t}\n\n\t/**\n\t * Apply and add event listeners to any filter controls for this table.\n\t * E.g. form inputs with the data attribute `[data-o-table-filter-id=\"tableId\"]`\n\t *\n\t * @access private\n\t */\n\t_setupFilters() {\n\t\tconst tableId = this.rootEl.getAttribute('id');\n\t\tif (!tableId) {\n\t\t\treturn;\n\t\t}\n\t\t// Do nothing if no filter is found for this table.\n\t\tconst filter = window.document.querySelector(`[data-o-table-filter-id=\"${tableId}\"]`);\n\t\tif (!filter) {\n\t\t\treturn;\n\t\t}\n\t\t// Do not setup filter if markup is missing.\n\t\tif (!this.filterContainer) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.warn(`Could not setup the filter for the table \"${tableId}\" as markup is missing. A filterable table must be within a div with class \"o-table-container\".`);\n\t\t\treturn;\n\t\t}\n\t\t// Warn if a misconfigured filter was found.\n\t\tconst filterColumn = parseInt(filter.getAttribute('data-o-table-filter-column'), 10);\n\t\tif (isNaN(filterColumn)) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.warn(`Could not setup the filter for the table \"${tableId}\" as no column index was given to filter on. Add a \\`data-o-table-filter-column=\"{columnIndex}\"\\` attribute to the filter.`, filter);\n\t\t\treturn;\n\t\t}\n\t\t// Apply the filter .\n\t\tif (filter.value) {\n\t\t\tthis.filter(filterColumn, filter.value);\n\t\t}\n\t\t// Add a listener to filter the table.\n\t\tlet pendingFilterTimeout;\n\t\tconst debouncedFilterHandler = function(event) {\n\t\t\tif (pendingFilterTimeout) {\n\t\t\t\tclearTimeout(pendingFilterTimeout);\n\t\t\t}\n\t\t\tpendingFilterTimeout = setTimeout(function () {\n\t\t\t\tthis.filter(filterColumn, event.target.value || '');\n\t\t\t\tpendingFilterTimeout = null;\n\t\t\t}.bind(this), 33);\n\t\t}.bind(this);\n\t\tfilter.addEventListener('input', debouncedFilterHandler);\n\t\tfilter.addEventListener('change', debouncedFilterHandler);\n\t\tthis._listeners.push({ element: filter, debouncedFilterHandler, type: 'input' });\n\t\tthis._listeners.push({ element: filter, debouncedFilterHandler, type: 'change' });\n\t}\n\n\t/**\n\t * Update the o-table instance with rows added or removed dynamically from\n\t * the table. Applies any existing sort and filter to new rows.\n\t *\n\t * @returns {void}\n\t */\n\tupdateRows() {\n\t\tconst rows = this._getLatestRowNodes();\n\t\t// Set o-table rows.\n\t\tthis.tableRows = rows;\n\t\t// Re-apply sort.\n\t\tif (this._currentSort) {\n\t\t\tconst { columnIndex, sortOrder } = this._currentSort;\n\t\t\tthis.sortRowsByColumn(columnIndex, sortOrder);\n\t\t}\n\t\t// Re-apply filter.\n\t\tif (this._currentFilter) {\n\t\t\tconst { columnIndex, filter } = this._currentFilter;\n\t\t\tthis._filterRowsByColumn(columnIndex, filter);\n\t\t}\n\t\t// Render rows.\n\t\tthis.renderRowUpdates();\n\t}\n\n\t/**\n\t * Get all the table body's current row nodes.\n\t *\n\t * @returns {Array<Node>} all the trs\n\t * @access private\n\t */\n\t_getLatestRowNodes() {\n\t\treturn this.tbody ? Array.from(this.tbody.getElementsByTagName('tr')) : [];\n\t}\n\n\t/**\n\t * Updates the dom to account for row updates, including when their sort\n\t * order changes, or any filter is applied. E.g. changes the dom order,\n\t * applies aria-labels to hidden rows, updates the table height to\n\t * efficiently hide them.\n\t *\n\t * Note this does not calculate which rows should be sorted or filtered,\n\t * and does not look for new rows added to the dom. See `updateRows`.\n\t *\n\t * @see updateRows\n\t * @returns {void}\n\t */\n\trenderRowUpdates() {\n\t\tthis._updateRowAriaHidden();\n\t\tthis._hideFilteredRows();\n\t\tthis._updateTableHeight();\n\t\tthis._updateRowOrder();\n\t}\n\n\t/**\n\t * Hide filtered rows by updating the container height.\n\t * Filtered rows are not removed from the table so column width is not\n\t * recalculated. Unfortunately \"visibility: collaposed\" has inconsistent\n\t * support.\n\t */\n\t_updateTableHeight() {\n\t\tif (!this.filterContainer) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.warn(`The table has missing markup. A responsive or filterable table must be within a div with class \"o-table-container\".`, this.rootEl);\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._updateTableHeightScheduled) {\n\t\t\twindow.cancelAnimationFrame(this._updateTableHeightScheduled);\n\t\t}\n\n\t\tconst tableHeight = this._getTableHeight();\n\n\t\tthis._updateTableHeightScheduled = window.requestAnimationFrame(function () {\n\t\t\tthis.filterContainer.style.height = !isNaN(tableHeight) ? `${tableHeight}px` : '';\n\t\t}.bind(this));\n\n\t\t// If the table height has been set, it should be updated on resize,\n\t\t// so listen to resize events.\n\t\tif (!this._updateTableHeightListenerSet) {\n\t\t\t// debounce the height update on resize\n\t\t\t// breaking: on the next major release use the o-utils\n\t\t\t// debounce function instead\n\t\t\tlet pendingTableHeightUpdate;\n\t\t\tconst updateTableHeightDebounced = function () {\n\t\t\t\tif (pendingTableHeightUpdate) {\n\t\t\t\t\tclearTimeout(pendingTableHeightUpdate);\n\t\t\t\t}\n\t\t\t\tpendingTableHeightUpdate = setTimeout(function () {\n\t\t\t\t\tthis._updateTableHeight();\n\t\t\t\t}.bind(this), 33);\n\t\t\t}.bind(this);\n\t\t\t// set the resize listener\n\t\t\twindow.addEventListener('resize', updateTableHeightDebounced);\n\t\t\t// add to the listeners array so it can be removed on `.destroy`\n\t\t\tthis._listeners.push({ element: window, updateTableHeightDebounced, type: 'resize' });\n\t\t\t// set a flag so the listener isn't set again, without having to\n\t\t\t// loop through `this._listeners`.\n\t\t\tthis._updateTableHeightListenerSet = true;\n\t\t}\n\t}\n\n\t/**\n\t * Get the table height, accounting for \"hidden\" rows.\n\t *\n\t * @returns {number} the height in pixels\n\t */\n\t_getTableHeight() {\n\t\tconst tableHeight = this.rootEl.getBoundingClientRect().height;\n\t\tconst filteredRowsHeight = this._rowsToHide.reduce((accumulatedHeight, row) => {\n\t\t\treturn accumulatedHeight + row.getBoundingClientRect().height;\n\t\t}, 0);\n\n\t\treturn tableHeight - filteredRowsHeight;\n\t}\n\n\t/**\n\t * Update the \"aria-hidden\" attribute of all hidden table rows.\n\t * Rows may be hidden for a number of reasons, including being filtered.\n\t */\n\t_updateRowAriaHidden() {\n\t\tif (this._updateRowAriaHiddenScheduled) {\n\t\t\twindow.cancelAnimationFrame(this._updateRowAriaHiddenScheduled);\n\t\t}\n\n\t\tconst rowsToHide = this._rowsToHide || [];\n\t\tthis._updateRowAriaHiddenScheduled = window.requestAnimationFrame(function () {\n\t\t\tthis.tableRows.forEach((row) => {\n\t\t\t\trow.setAttribute('aria-hidden', rowsToHide.indexOf(row) !== -1);\n\t\t\t});\n\t\t}.bind(this));\n\t}\n\n\t/**\n\t * Hide filtered rows by updating the \"data-o-table-filtered\" attribute.\n\t * Filtered rows are removed from the table using CSS so column width is\n\t * not recalculated.\n\t */\n\t_hideFilteredRows() {\n\t\tif (this._hideFilteredRowsScheduled) {\n\t\t\twindow.cancelAnimationFrame(this._hideFilteredRowsScheduled);\n\t\t}\n\n\t\tconst filteredRows = this._filteredTableRows || [];\n\t\tthis._hideFilteredRowsScheduled = window.requestAnimationFrame(function () {\n\t\t\tthis.tableRows.forEach((row) => {\n\t\t\t\trow.setAttribute('data-o-table-filtered', filteredRows.indexOf(row) !== -1);\n\t\t\t});\n\t\t}.bind(this));\n\t}\n\n\t/**\n\t * Updates the order of table rows in the DOM. This is required upon sort,\n\t * but also on filter as hidden rows must be at the bottom of the table.\n\t * Otherwise the stripped pattern of the stripped table is not maintained.\n\t */\n\t_updateRowOrder() {\n\t\tif (this._updateRowOrderScheduled) {\n\t\t\twindow.cancelAnimationFrame(this._updateRowOrderScheduled);\n\t\t}\n\t\tif (this._updateRowOrderFilrtedBatchScheduled) {\n\t\t\twindow.cancelAnimationFrame(this._updateRowOrderFilrtedBatchScheduled);\n\t\t}\n\n\t\tif (!this._currentSort && !this._currentFilter) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst nonFilteredRows = this.tableRows.filter(row => this._filteredTableRows.indexOf(row) === -1);\n\t\tthis._updateRowOrderScheduled = window.requestAnimationFrame(function () {\n\t\t\t// Move all non-filtered rows to the top, with current sort order.\n\t\t\tprepend(this.tbody, nonFilteredRows);\n\t\t\tthis._updateRowOrderFilrtedBatchScheduled = window.requestAnimationFrame(function () {\n\t\t\t\t// Move all filtered rows to the bottom, with current sort order.\n\t\t\t\tappend(this.tbody, this._filteredTableRows);\n\t\t\t}.bind(this));\n\t\t}.bind(this));\n\t}\n\n\t/**\n\t * Filter the table and render the result.\n\t *\n\t * @access public\n\t * @param {number} headerIndex - The index of the table column to filter.\n\t * @param {string | Function} filter - How to filter the column (either a string to match or a callback function).\n\t * @returns {undefined}\n\t */\n\tfilter(headerIndex, filter) {\n\t\tthis._filterRowsByColumn(headerIndex, filter);\n\t\tthis.renderRowUpdates();\n\t}\n\n\t/**\n\t * Filters the table rows by a given column and filter.\n\t * This does not render the result to the DOM.\n\t *\n\t * @access private\n\t * @param {number} columnIndex - The index of the table column to filter.\n\t * @param {string | Function} filter - How to filter the column (either a string to match or a callback function).\n\t * @returns {undefined}\n\t */\n\t_filterRowsByColumn(columnIndex, filter) {\n\t\tthis._currentFilter = {\n\t\t\tcolumnIndex,\n\t\t\tfilter\n\t\t};\n\n\t\tif (typeof filter !== 'string' && typeof filter !== 'function') {\n\t\t\tthrow new Error(`Could not filter table column \"${columnIndex}\". Expected the filter to a string or function.`, this);\n\t\t}\n\n\t\t// Filter column headings.\n\t\tthis._filteredTableRows = [];\n\t\tthis.tableRows.forEach(row => {\n\t\t\tconst cell = row.querySelector(`td:nth-of-type(${columnIndex + 1})`);\n\t\t\tif (cell) {\n\t\t\t\tconst hideRow = BaseTable._filterMatch(cell, filter);\n\t\t\t\tif (hideRow) {\n\t\t\t\t\tthis._filteredTableRows.push(row);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Check if a given table cell matches the table filter.\n\t *\n\t * @access private\n\t * @param {Element} cell - The table cell to test the filter function against.\n\t * @param {string | Function} filter - The filter, either a string or callback function.\n\t * @returns {boolean} does the fliter match?\n\t */\n\tstatic _filterMatch(cell, filter) {\n\t\t// If the filter is a string create a filter function which:\n\t\t// - Always matches an emtpy string (no filter).\n\t\t// - Matches against only alpha numeric characters and \".\".\n\t\t// - Case insentivie.\n\t\t// - Whitespace insentivie.\n\t\tif (typeof filter === 'string') {\n\t\t\tconst filterValue = filter.replace(/[^\\w\\.]+/g, '').toLowerCase();\n\t\t\tfilter = (cell) => {\n\t\t\t\tconst cellValue = cell.textContent.replace(/[^\\w\\.]+/g, '').toLowerCase();\n\t\t\t\treturn filterValue ? cellValue.indexOf(filterValue) > -1 : true;\n\t\t\t};\n\t\t}\n\n\t\t// Check if the filter matches the given table cell.\n\t\treturn filter(cell) !== true;\n\t}\n\n\t/**\n\t * Which rows are hidden, e.g. by a filter.\n\t *\n\t * @returns {Array<Node>} the rows that should be hidden\n\t */\n\tget _rowsToHide() {\n\t\treturn this._filteredTableRows;\n\t}\n\n\t/**\n\t * Gets a table header for a given column index.\n\t *\n\t * @access public\n\t * @param {number} columnIndex - The index of the table column to get the header for.\n\t * @throws When no header is not found.\n\t * @returns {HTMLElement} the table header\n\t */\n\tgetTableHeader(columnIndex) {\n\t\tconst th = this.tableHeaders[columnIndex];\n\t\tif (!th) {\n\t\t\tthrow new Error(`Could not find header for column index \"${columnIndex}\".`);\n\t\t}\n\t\treturn th;\n\t}\n\n\t/**\n\t * Sort the table.\n\t *\n\t * @access public\n\t * @param {number} columnIndex - The index of the table column to sort.\n\t * @param {number} sortOrder - How to sort the column, \"ascending\" or \"descending\"\n\t * @returns {undefined}\n\t */\n\tsortRowsByColumn(columnIndex, sortOrder) {\n\t\t/**\n\t\t * Fires an \"oTable.sorting\" event. The sorting event can be cancelled to\n\t\t * provide a totally custom method of sorting the table.\n\t\t * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/dispatchEvent\n\t\t */\n\t\tconst defaultSort = this._dispatchEvent('sorting', {\n\t\t\tsort: sortOrder,\n\t\t\tcolumnIndex\n\t\t}, { cancelable: true });\n\n\t\tif (defaultSort) {\n\t\t\tthis._sorter.sortRowsByColumn(this, columnIndex, sortOrder);\n\t\t}\n\t}\n\n\t/**\n\t * Add sort buttons to the DOM within the table header.\n\t *\n\t * @returns {undefined}\n\t */\n\taddSortButtons() {\n\t\tif (!this._opts.sortable) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Create buttons for each table header.\n\t\tconst tableHeaderButtons = this.tableHeaders.map((th) => {\n\t\t\t// Don't add sort buttons to unsortable columns.\n\t\t\tif (th.hasAttribute('data-o-table-heading-disable-sort')) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\t// Don't add sort buttons to columns with no headings.\n\t\t\tif (!th.hasChildNodes()) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\t// Move heading text into button.\n\t\t\tconst headingNodes = Array.from(th.childNodes);\n\t\t\tconst headingHTML = headingNodes.reduce((html, node) => {\n\t\t\t\t// Maintain child elements of the heading which make sense in a button.\n\t\t\t\tconst maintainedElements = ['ABBR', 'B', 'BDI', 'BDO', 'BR', 'CODE', 'CITE', 'DATA', 'DFN', 'DEL', 'EM', 'I', 'S', 'SMALL', 'SPAN', 'STRONG', 'SUB', 'SUP', 'TIME', 'U', 'VAR', 'WBR'];\n\t\t\t\tif (node.nodeType === Node.ELEMENT_NODE && maintainedElements.indexOf(node.nodeName) !== -1) {\n\t\t\t\t\treturn html + node.outerHTML;\n\t\t\t\t}\n\t\t\t\t// Otherwise return text content.\n\t\t\t\tif (node.nodeType === Node.ELEMENT_NODE) {\n\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\tconsole.warn(`o-table has removed the element \"${node.nodeName}\" from the table heading to add a sort button on the column. Please remove this element from your table heading, disable sort on this column, or contact the Origami team for help.`, th);\n\t\t\t\t}\n\t\t\t\treturn html + node.textContent;\n\t\t\t}, '');\n\n\t\t\tconst sortButton = document.createElement('button');\n\t\t\tsortButton.innerHTML = headingHTML;\n\t\t\tsortButton.classList.add('o-table__sort');\n\t\t\t// In VoiceOver, button `aria-label` is repeated when moving from one column of tds to the next.\n\t\t\t// Using `title` avoids this, but risks not being announced by other screen readers.\n\t\t\tconst nextSort = this._getNextSortOrder(th);\n\t\t\tsortButton.setAttribute('title', `sort table by \"${th.textContent}\" ${nextSort}`);\n\t\t\treturn sortButton;\n\t\t});\n\n\t\t// Add sort buttons to table headers.\n\t\twindow.requestAnimationFrame(function (){\n\t\t\tthis.rootEl.classList.add('o-table--sortable');\n\t\t\tthis.tableHeaders.forEach((th, index) => {\n\t\t\t\tif (tableHeaderButtons[index]) {\n\t\t\t\t\tth.innerHTML = '';\n\t\t\t\t\tth.appendChild(tableHeaderButtons[index]);\n\t\t\t\t}\n\t\t\t});\n\t\t}.bind(this));\n\n\t\t// Add click event to buttons.\n\t\tconst listener = this._sortButtonHandler.bind(this);\n\t\tthis._rootElDomDelegate = this._rootElDomDelegate || new Delegate(this.rootEl);\n\t\tthis._rootElDomDelegate.on('click', '.o-table__sort', listener);\n\t}\n\n\t/**\n\t * Indicate that the table has been sorted after intercepting the sorting event.\n\t *\n\t * @access public\n\t * @param {object} sortDetails - Details of the current sort state.\n\t * @param {number | null} sortDetails.columnIndex - The index of the currently sorted column.\n\t * @param {string | null} sortDetails.sortOrder - The type of sort, \"ascending\" or \"descending\"\n\t */\n\tsorted({ columnIndex, sortOrder }) {\n\t\tif (isNaN(columnIndex)) {\n\t\t\tthrow new Error(`Expected a numerical column index but received \"${columnIndex}\".`);\n\t\t}\n\t\tif (!sortOrder) {\n\t\t\tthrow new Error(`Expected a sort order e.g. \"ascending\" or \"descending\".`);\n\t\t}\n\t\tthis._currentSort = {\n\t\t\tsortOrder,\n\t\t\tcolumnIndex\n\t\t};\n\n\t\t// Update the button title to reflect the new sort.\n\t\tconst th = this.getTableHeader(columnIndex);\n\t\tconst sortButton = th.querySelector('button');\n\t\tif (sortButton) {\n\t\t\tlet buttonTitle = sortButton.getAttribute('title');\n\t\t\tbuttonTitle = sortOrder === 'ascending' ?\n\t\t\t\tbuttonTitle.replace('ascending', 'descending') :\n\t\t\t\tbuttonTitle.replace('descending', 'ascending');\n\t\t\tsortButton.setAttribute('title', buttonTitle);\n\t\t}\n\n\t\tthis._dispatchEvent('sorted', this._currentSort);\n\t}\n\n\t/**\n\t * Gets the instance ready for deletion.\n\t * Removes event listeners that were added during instatiation of the component.\n\t *\n\t * @access public\n\t * @returns {undefined}\n\t */\n\tdestroy() {\n\t\tif (this._rootElDomDelegate) {\n\t\t\tthis._rootElDomDelegate.destroy();\n\t\t}\n\t\tthis._listeners.forEach(({ type, listener, element }) => {\n\t\t\telement.removeEventListener(type, listener);\n\t\t});\n\n\t\t// Remove DOM references.\n\t\tdelete this.thead;\n\t\tdelete this.tbody;\n\t\tdelete this.tableHeaders;\n\t\tdelete this.tableRows;\n\t\tdelete this._filteredTableRows;\n\t\tdelete this.wrapper;\n\t\tdelete this.container;\n\t\tdelete this.overlayWrapper;\n\t\tdelete this.filterContainer;\n\t}\n\n\t/**\n\t * Indicate that the table has been constructed successfully.\n\t *\n\t * @returns {undefined}\n\t */\n\t_ready() {\n\t\tthis._dispatchEvent('ready');\n\t}\n\n\t/**\n\t * Column sort orders are toggled. For a given column heading, return\n\t * the next sort order which should be applied.\n\t *\n\t * @param {Element} th - The heading for the column to be sorted.\n\t * @returns {string} - What the next sort order for the heading should be, 'ascending' or 'descending'.\n\t */\n\t_getNextSortOrder(th) {\n\t\t// Get the current table sort. Use the `aria-sort` attribute\n\t\t// which may have been applied by a client or server side sort.\n\t\tconst currentSort = th.getAttribute('aria-sort');\n\t\t// If there is no existing sort use a descending sort if that has been\n\t\t// configured as a preferred sort order for the given heading.\n\t\tconst noExistingSort = [null, 'none'].indexOf(currentSort) !== -1;\n\t\tif (noExistingSort && this._opts.preferredSortOrder === 'descending') {\n\t\t\treturn 'descending';\n\t\t}\n\t\t// Otherwise the next sort will be ascending by default, or descending\n\t\t// if the column is already sorted ascending.\n\t\treturn currentSort !== 'ascending' ? 'ascending' : 'descending';\n\t}\n\n\t/**\n\t * Handles a sort button click event. Toggles column sort.\n\t *\n\t * @param {MouseEvent} event - The click event.\n\t * @returns {undefined}\n\t */\n\t_sortButtonHandler(event) {\n\t\tconst sortButton = event.target;\n\t\tconst th = sortButton.closest('th');\n\t\tconst columnIndex = this.tableHeaders.indexOf(th);\n\t\tif (th && !isNaN(columnIndex)) {\n\t\t\tconst sortOrder = this._getNextSortOrder(th);\n\t\t\tthis.sortRowsByColumn(columnIndex, sortOrder);\n\t\t}\n\t}\n\n\t/**\n\t * Helper function to dispatch namespaced events.\n\t *\n\t * @param {string} event - The event name within `oTable` e.g. \"sorted\".\n\t * @param {object} data - Event data. `instance` is added automatically.\n\t * @param {object} opts - [Event options]{@link https://developer.mozilla.org/en-US/docs/Web/API/Event/Event#Values} (o-table events bubble by default).\n\t * @returns {boolean} false is cancelable and canceled, otherwise true\n\t */\n\t_dispatchEvent(event, data = {}, opts = {}) {\n\t\tObject.assign(data , {\n\t\t\tinstance: this\n\t\t});\n\t\treturn this.rootEl.dispatchEvent(new CustomEvent(`oTable.${event}`, Object.assign({\n\t\t\tdetail: data,\n\t\t\tbubbles: true\n\t\t}, opts)));\n\t}\n}\n\nexport default BaseTable;\n","/**\n * @file\n * Origami o-buttons wrapped\n */\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport validIcons from './icons';\nimport './styles.scss';\n\n/* eslint-disable react/button-has-type */\nexport const Button = ({\n  className,\n  selected,\n  type,\n  buttonType,\n  children,\n  big,\n  icon,\n  theme,\n  disabled,\n  label,\n  inverse,\n  ...props\n}) => (\n  <button\n    className={classnames(\n      className,\n      'o-buttons',\n      `o-buttons--${type}`,\n      theme && `o-buttons--${theme}`,\n      big && 'o-buttons--big',\n      icon && `o-buttons-icon o-buttons-icon--${icon}`,\n      icon && label && 'o-buttons-icon--icon-only',\n      inverse && 'o-buttons--inverse',\n    )}\n    type={buttonType}\n    aria-pressed={selected}\n    disabled={disabled}\n    {...props}\n  >\n    {label && icon ? <span className=\"o-buttons-icon__label\">{label}</span> : children}\n  </button>\n);\n\nButton.propTypes = {\n  className: PropTypes.string,\n  theme: PropTypes.oneOf(['mono', 'b2c', '']),\n  selected: PropTypes.bool,\n  disabled: PropTypes.bool,\n  big: PropTypes.bool,\n  buttonType: PropTypes.oneOf(['button', 'submit', 'reset']),\n  type: PropTypes.oneOf(['primary', 'secondary']),\n  children: PropTypes.oneOfType([PropTypes.node, PropTypes.arrayOf(PropTypes.node)]),\n  icon: PropTypes.oneOf([...validIcons, '']),\n  label: PropTypes.string,\n  inverse: PropTypes.bool,\n};\n\nButton.defaultProps = {\n  className: '',\n  theme: '',\n  selected: undefined,\n  disabled: false,\n  big: false,\n  icon: '',\n  type: 'secondary',\n  buttonType: 'button',\n  label: '',\n  inverse: false,\n  children: 'Click me',\n};\n\nexport const ButtonGroup = ({ children, className }) => (\n  <div className={classnames(className, 'o-buttons-group')}>{children}</div>\n);\n\nButtonGroup.propTypes = {\n  children: PropTypes.oneOfType([PropTypes.node, PropTypes.arrayOf(PropTypes.node)]).isRequired,\n  className: PropTypes.string,\n};\n\nButtonGroup.defaultProps = {\n  className: undefined,\n};\n\nexport const ButtonPaginationGroup = ({ children, className }) => (\n  <div className={classnames(className, 'o-buttons-pagination')}>{children}</div>\n);\n\nButtonPaginationGroup.propTypes = {\n  children: PropTypes.oneOfType([PropTypes.node, PropTypes.arrayOf(PropTypes.node)]).isRequired,\n  className: PropTypes.string,\n};\n\nButtonPaginationGroup.defaultProps = {\n  className: undefined,\n};\n\nexport default Button;\n","/**\n * @file\n * List of o-buttons compatible icon names\n */\n\nexport const icons = [\n  'arrow-left',\n  'arrow-right',\n  'upload',\n  'tick',\n  'plus',\n  'warning',\n  'arrow-down',\n  'arrow-up',\n  'grid',\n  'list',\n  'edit',\n  'download',\n  'search',\n];\n\nexport default icons;\n","import utils from './src/utils.js';\n\nconst throttle = utils.throttle;\nconst debounce = utils.debounce;\n\nconst listeners = {};\nconst intervals = {\n\tresize: 100,\n\torientation: 100,\n\tvisibility: 100,\n\tscroll: 100\n};\n\n/**\n *\n * @param {string} eventType - The type of event to throttle for this duration.\n * @param {number} interval - The duration to throttle in ms.\n * @returns {void}\n * @example\n * \t   // throttle for different events at different durations\n *     setThrottleInterval('scroll', 100)\n *     setThrottleInterval('resize', 300)\n *     setThrottleInterval('orientation', 30)\n *     setThrottleInterval('visibility', 30)\n * \t\t// throttle all events at 30ms\n *     setThrottleInterval(30);\n */\nfunction setThrottleInterval(eventType, interval) {\n\tif (typeof arguments[0] === 'number') {\n\t\tsetThrottleInterval('scroll', arguments[0]);\n\t\tsetThrottleInterval('resize', arguments[1]);\n\t\tsetThrottleInterval('orientation', arguments[2]);\n\t\tsetThrottleInterval('visibility', arguments[3]);\n\t} else if (interval) {\n\t\tintervals[eventType] = interval;\n\t}\n}\n\n/**\n * @access private\n */\nfunction listenToResize() {\n\tif (listeners.resize) {\n\t\treturn;\n\t}\n\tconst eventType = 'resize';\n\tconst handler = debounce(function(ev) {\n\t\tutils.broadcast('resize', {\n\t\t\tviewport: utils.getSize(),\n\t\t\toriginalEvent: ev\n\t\t});\n\t}, intervals.resize);\n\n\n\twindow.addEventListener(eventType, handler);\n\tlisteners.resize = {\n\t\teventType: eventType,\n\t\thandler: handler\n\t};\n}\n\n/**\n * @access private\n */\nfunction listenToOrientation() {\n\n\tif (listeners.orientation) {\n\t\treturn;\n\t}\n\n\tconst eventType = 'orientationchange';\n\tconst handler = debounce(function(ev) {\n\t\tutils.broadcast('orientation', {\n\t\t\tviewport: utils.getSize(),\n\t\t\torientation: utils.getOrientation(),\n\t\t\toriginalEvent: ev\n\t\t});\n\t}, intervals.orientation);\n\n\twindow.addEventListener(eventType, handler);\n\tlisteners.orientation = {\n\t\teventType: eventType,\n\t\thandler: handler\n\t};\n}\n\n/**\n * @access private\n */\nfunction listenToVisibility() {\n\n\tif (listeners.visibility) {\n\t\treturn;\n\t}\n\n\tconst eventType = 'visibilitychange';\n\tconst handler = debounce(function(ev) {\n\t\tutils.broadcast('visibility', {\n\t\t\thidden: utils.getVisibility(),\n\t\t\toriginalEvent: ev\n\t\t});\n\t}, intervals.visibility);\n\n\twindow.addEventListener(eventType, handler);\n\n\tlisteners.visibility = {\n\t\teventType: eventType,\n\t\thandler: handler\n\t};\n}\n\n/**\n * @access private\n */\nfunction listenToScroll() {\n\n\tif (listeners.scroll) {\n\t\treturn;\n\t}\n\n\tconst eventType = 'scroll';\n\tconst handler = throttle(function(ev) {\n\t\tconst scrollPos = utils.getScrollPosition();\n\t\tutils.broadcast('scroll', {\n\t\t\tviewport: utils.getSize(),\n\t\t\tscrollHeight: scrollPos.height,\n\t\t\tscrollLeft: scrollPos.left,\n\t\t\tscrollTop: scrollPos.top,\n\t\t\tscrollWidth: scrollPos.width,\n\t\t\toriginalEvent: ev\n\t\t});\n\t}, intervals.scroll);\n\n\twindow.addEventListener(eventType, handler);\n\tlisteners.scroll = {\n\t\teventType: eventType,\n\t\thandler: handler\n\t};\n}\n\n/**\n * Start listening for an event(s).\n *\n * @param {string} eventType - The event to start listening for. One of `resize`, `scroll`, `orientation`, `visibility` or `all`.\n * @example\n * \t\t// Start listening for all events.\n * \t\toViewport.listenTo('all');\n *\n * \t\t// It is now possible to listen for debounce o-viewport events such as `oViewport.orientation`.\n *      document.body.addEventListener('oViewport.orientation', function(event) {\n *      \tconsole.log(event.type); // oViewport.orientation\n *      });\n */\nfunction listenTo(eventType) {\n\tif (eventType === 'resize' || eventType === 'all') {\n\t\tlistenToResize();\n\t}\n\n\tif (eventType === 'scroll' || eventType === 'all') {\n\t\tlistenToScroll();\n\t}\n\n\tif (eventType === 'orientation' || eventType === 'all') {\n\t\tlistenToOrientation();\n\t}\n\n\tif (eventType === 'visibility' || eventType === 'all') {\n\t\tlistenToVisibility();\n\t}\n}\n\n/**\n * Stop listening for an event(s).\n *\n * @param {string} eventType - The event to stop listening for. One of `resize`, `scroll`, `orientation`, `visibility` or `all`.\n * @example\n * \t\t// Start listening for all events.\n * \t\toViewport.listenTo('all');\n * \t\t// We're done. Stop listening for all events.\n * \t\toViewport.stopListeningTo('all');\n */\nfunction stopListeningTo(eventType) {\n\tif (eventType === 'all') {\n\t\tObject.keys(listeners).forEach(stopListeningTo);\n\t} else if (listeners[eventType]) {\n\t\twindow.removeEventListener(listeners[eventType].eventType, listeners[eventType].handler);\n\t\tdelete listeners[eventType];\n\t}\n}\n\nexport default {\n\tdebug: function () {\n\t\tutils.debug();\n\t},\n\tlistenTo,\n\tstopListeningTo,\n\tsetThrottleInterval,\n\tgetOrientation: utils.getOrientation,\n\tgetSize: utils.getSize,\n\tgetScrollPosition: utils.getScrollPosition,\n\tgetVisibility: utils.getVisibility\n};\n","/* eslint-disable no-magic-numbers, no-underscore-dangle, no-prototype-builtins */\n// Source: https://github.com/FormidableLabs/victory/blob/7aa02aa0d7462e64f186e5a318a4e8d4299c29ca/packages/victory-core/src/victory-util/textsize.js\n// http://www.pearsonified.com/2012/01/characters-per-line.php\n\nimport assign from 'lodash.assign';\nimport defaults from 'lodash.defaults';\n\nconst fontDictionary = {\n  // Via: https://github.com/Financial-Times/font-profiler\n  Metric: 2.6127,\n  'MetricWeb-Regular': 2.6127,\n  'Metric Bold': 2.4775,\n  'MetricWeb-Bold': 2.4775,\n\n  // Remainder via: http://www.pearsonified.com/2012/01/characters-per-line.php\n  'American Typewriter': 2.09,\n  Baskerville: 2.51,\n  Georgia: 2.27,\n  'Hoefler Text': 2.39,\n  Palatino: 2.26,\n  'Times New Roman': 2.48,\n  Arial: 2.26,\n  'Gill Sans': 2.47,\n  'Gill Sans 300': 2.58,\n  'Helvetica Neue': 2.24,\n  'Lucida Grande': 2.05,\n  Tahoma: 2.25,\n  'Trebuchet MS': 2.2,\n  Verdana: 1.96,\n  'Courier New': 1.67,\n  cursive: 1.84,\n  fantasy: 2.09,\n  monospace: 1.81,\n  serif: 2.04,\n  'sans-serif': 1.89,\n};\n// https://developer.mozilla.org/en/docs/Web/CSS/length\n// Absolute sizes in pixels for obsolete measurement units.\nconst absoluteMeasurementUnitsToPixels = {\n  mm: 3.8,\n  sm: 38,\n  pt: 1.33,\n  pc: 16,\n  in: 96,\n  px: 1,\n};\nconst relativeMeasurementUnitsCoef = {\n  em: 1,\n  ex: 0.5,\n};\n\nconst coefficients = {\n  averageFontConstant: 2.1675, // Average pixels per glyph in existing font.\n  widthOverlapCoef: 1.25, // Coefficient for width value to prevent overlap.\n  heightOverlapCoef: 1.05, // Coefficient for height value to prevent overlap.\n  lineCapitalCoef: 1.15, // Coefficient for height value. Reserve space for capital chars.\n  lineSpaceHeightCoef: 0.2, // Coefficient for height value. Reserve space between lines.\n};\nconst defaultStyle = {\n  lineHeight: 1,\n  letterSpacing: '0px',\n  fontSize: 0,\n  angle: 0,\n  fontFamily: '',\n};\n\nconst _degreeToRadian = angle => (angle * Math.PI) / 180;\n\nconst _getFontCharacterConstant = fontFamily => {\n  const firstFont = fontFamily.split(',')[0].replace(/'|\"/g, '');\n  return fontDictionary[firstFont] || coefficients.averageFontConstant;\n};\n\nconst _splitToLines = text => {\n  return Array.isArray(text) ? text : text.toString().split(/\\r\\n|\\r|\\n/g);\n};\n\nconst _getSizeWithRotate = (axisSize, dependentSize, angle) => {\n  const angleInRadian = _degreeToRadian(angle);\n  return (\n    Math.abs(Math.cos(angleInRadian) * axisSize) + Math.abs(Math.sin(angleInRadian) * dependentSize)\n  );\n};\n\n/**\n * Convert length-type parameters from specific measurement units to pixels\n * @param  {string} length Css length string value.\n * @param  {number} fontSize Current text font-size.\n * @returns {number} Approximate Css length in pixels.\n */\nexport const convertLengthToPixels = (length, fontSize) => {\n  const attribute = length.match(/[a-zA-Z%]+/)[0];\n  const value = length.match(/[0-9.,]+/);\n  let result;\n  if (absoluteMeasurementUnitsToPixels.hasOwnProperty(attribute)) {\n    result = value * absoluteMeasurementUnitsToPixels[attribute];\n  } else if (relativeMeasurementUnitsCoef.hasOwnProperty(attribute)) {\n    result =\n      (fontSize ? value * fontSize : value * defaultStyle.fontSize) *\n      relativeMeasurementUnitsCoef[attribute];\n  } else {\n    result = value;\n  }\n  return result;\n};\n\nconst _prepareParams = (inputStyle, index) => {\n  const lineStyle = Array.isArray(inputStyle) ? inputStyle[index] : inputStyle;\n  const style = defaults({}, lineStyle, defaultStyle);\n  return assign({}, style, {\n    characterConstant: style.characterConstant || _getFontCharacterConstant(style.fontFamily),\n    letterSpacing: convertLengthToPixels(style.letterSpacing, style.fontSize),\n    fontSize:\n      typeof style.fontSize === 'number'\n        ? style.fontSize\n        : convertLengthToPixels(String(style.fontSize)),\n  });\n};\n\nconst _approximateTextWidthInternal = (text, style) => {\n  if (!text) {\n    return 0;\n  }\n  const widths = _splitToLines(text).map((line, index) => {\n    const len = line.toString().length;\n    const { fontSize, characterConstant, letterSpacing } = _prepareParams(style, index);\n    return (len * fontSize) / characterConstant + letterSpacing * Math.max(len - 1, 0);\n  });\n  return Math.max(...widths);\n};\n\nconst _approximateTextHeightInternal = (text, style) => {\n  if (!text) {\n    return 0;\n  }\n  return _splitToLines(text).reduce((total, line, index) => {\n    const lineStyle = _prepareParams(style, index);\n    const containsCaps = line.toString().match(/[(A-Z)(0-9)]/);\n    const height = containsCaps\n      ? lineStyle.fontSize * coefficients.lineCapitalCoef\n      : lineStyle.fontSize;\n    const emptySpace = index === 0 ? 0 : lineStyle.fontSize * coefficients.lineSpaceHeightCoef;\n    return total + lineStyle.lineHeight * (height + emptySpace);\n  }, 0);\n};\n\n/**\n * Predict text size by font params.\n * @param {string} text Content for width calculation.\n * @param {Object} style Text styles, ,fontFamily, fontSize, etc.\n * @param {string} style.fontFamily Text fontFamily.\n * @param {(number|string)} style.fontSize Text fontSize.\n * @param {number} style.angle Text rotate angle.\n * @param {string} style.letterSpacing Text letterSpacing(space between letters).\n * @param {number} style.characterConstant Average pixels per glyph.\n * @param {number} style.lineHeight Line height coefficient.\n * @returns {number} Approximate text label height.\n */\nexport const approximateTextSize = (text, style) => {\n  const angle = Array.isArray(style) ? style[0] && style[0].angle : style && style.angle;\n  const height = _approximateTextHeightInternal(text, style);\n  const width = _approximateTextWidthInternal(text, style);\n  const widthWithRotate = angle ? _getSizeWithRotate(width, height, angle) : width;\n  const heightWithRotate = angle ? _getSizeWithRotate(height, width, angle) : height;\n  return {\n    width: widthWithRotate * coefficients.widthOverlapCoef,\n    height: heightWithRotate * coefficients.heightOverlapCoef,\n  };\n};\n","import Toggle from './src/js/toggle.js';\n\nconst constructAll = () => {\n\tToggle.init();\n\tdocument.removeEventListener('o.DOMContentLoaded', constructAll);\n};\n\nif (typeof document !== 'undefined') {\n\tdocument.addEventListener('o.DOMContentLoaded', constructAll);\n}\n\nexport default Toggle;\n","/**\n*\n* Debounces function so it is only called after n milliseconds\n* without it not being called\n*\n* @example\n* Utils.debounce(myFunction() {}, 100);\n*\n* @param {Function} func - Function to be debounced\n* @param {number} wait - Time in miliseconds\n*\n* @returns {Function} - Debounced function\n*/\nfunction debounce(func, wait) {\n\tlet timeout;\n\treturn function() {\n\t\tconst args = arguments;\n\t\tconst later = () => {\n\t\t\ttimeout = null;\n\t\t\tfunc.apply(this, args);\n\t\t};\n\t\tclearTimeout(timeout);\n\t\ttimeout = setTimeout(later, wait);\n\t};\n}\n\n/**\n*\n* Throttle function so it is only called once every n milliseconds\n*\n* @example\n* Utils.throttle(myFunction() {}, 100);\n*\n* @param {Function} func - Function to be throttled\n* @param {number} wait - Time in miliseconds\n*\n* @returns {Function} - Throttled function\n*/\nfunction throttle(func, wait) {\n\tlet timeout;\n\treturn function() {\n\t\tif (timeout) {\n\t\t\treturn;\n\t\t}\n\t\tconst args = arguments;\n\t\tconst later = () => {\n\t\t\ttimeout = null;\n\t\t\tfunc.apply(this, args);\n\t\t};\n\n\t\ttimeout = setTimeout(later, wait);\n\t};\n}\n\nexport {\n\tdebounce,\n\tthrottle\n};\n","'use strict';\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nvar xtend = require('xtend');\nvar unified = require('unified');\nvar parse = require('remark-parse');\nvar PropTypes = require('prop-types');\nvar addListMetadata = require('mdast-add-list-metadata');\nvar naiveHtml = require('./plugins/naive-html');\nvar disallowNode = require('./plugins/disallow-node');\nvar astToReact = require('./ast-to-react');\nvar wrapTableRows = require('./wrap-table-rows');\nvar getDefinitions = require('./get-definitions');\nvar uriTransformer = require('./uriTransformer');\nvar defaultRenderers = require('./renderers');\n\nvar allTypes = Object.keys(defaultRenderers);\n\nvar ReactMarkdown = function ReactMarkdown(props) {\n  var src = props.source || props.children || '';\n\n  if (props.allowedTypes && props.disallowedTypes) {\n    throw new Error('Only one of `allowedTypes` and `disallowedTypes` should be defined');\n  }\n\n  var renderers = xtend(defaultRenderers, props.renderers);\n\n  var plugins = [parse].concat(props.plugins || []);\n  var parser = plugins.reduce(applyParserPlugin, unified());\n\n  var rawAst = parser.parse(src);\n  var renderProps = xtend(props, {\n    renderers: renderers,\n    definitions: getDefinitions(rawAst)\n  });\n\n  var astPlugins = determineAstPlugins(props);\n  var ast = astPlugins.reduce(function (node, plugin) {\n    return plugin(node, renderProps);\n  }, rawAst);\n\n  return astToReact(ast, renderProps);\n};\n\nfunction applyParserPlugin(parser, plugin) {\n  return Array.isArray(plugin) ? parser.use.apply(parser, _toConsumableArray(plugin)) : parser.use(plugin);\n}\n\nfunction determineAstPlugins(props) {\n  var plugins = [wrapTableRows, addListMetadata()];\n\n  var disallowedTypes = props.disallowedTypes;\n  if (props.allowedTypes) {\n    disallowedTypes = allTypes.filter(function (type) {\n      return type !== 'root' && props.allowedTypes.indexOf(type) === -1;\n    });\n  }\n\n  var removalMethod = props.unwrapDisallowed ? 'unwrap' : 'remove';\n  if (disallowedTypes && disallowedTypes.length > 0) {\n    plugins.push(disallowNode.ofType(disallowedTypes, removalMethod));\n  }\n\n  if (props.allowNode) {\n    plugins.push(disallowNode.ifNotMatch(props.allowNode, removalMethod));\n  }\n\n  var renderHtml = !props.escapeHtml && !props.skipHtml;\n  if (renderHtml) {\n    plugins.push(naiveHtml);\n  }\n\n  return props.astPlugins ? plugins.concat(props.astPlugins) : plugins;\n}\n\nReactMarkdown.defaultProps = {\n  renderers: {},\n  escapeHtml: true,\n  skipHtml: false,\n  sourcePos: false,\n  rawSourcePos: false,\n  transformLinkUri: uriTransformer,\n  astPlugins: [],\n  plugins: []\n};\n\nReactMarkdown.propTypes = {\n  className: PropTypes.string,\n  source: PropTypes.string,\n  children: PropTypes.string,\n  sourcePos: PropTypes.bool,\n  rawSourcePos: PropTypes.bool,\n  escapeHtml: PropTypes.bool,\n  skipHtml: PropTypes.bool,\n  allowNode: PropTypes.func,\n  allowedTypes: PropTypes.arrayOf(PropTypes.oneOf(allTypes)),\n  disallowedTypes: PropTypes.arrayOf(PropTypes.oneOf(allTypes)),\n  transformLinkUri: PropTypes.oneOfType([PropTypes.func, PropTypes.bool]),\n  linkTarget: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),\n  transformImageUri: PropTypes.func,\n  astPlugins: PropTypes.arrayOf(PropTypes.func),\n  unwrapDisallowed: PropTypes.bool,\n  renderers: PropTypes.object,\n  plugins: PropTypes.array\n};\n\nReactMarkdown.types = allTypes;\nReactMarkdown.renderers = defaultRenderers;\nReactMarkdown.uriTransformer = uriTransformer;\n\nmodule.exports = ReactMarkdown;","/**\n * General data munging functionality\n */\n\nimport { extent } from 'd3-array';\nimport { timeParse } from 'd3-time-format';\n\n/**\n * Returns dataset with date types in date column\n * @param  {[type]} data       [description]\n * @param  {[type]} dateFormat [description]\n * @return {[type]}            [description]\n */\nexport function formatData(data, dateFormat) {\n  const parseDate = timeParse(dateFormat);\n  // eslint-disable-next-line no-prototype-builtins\n  if (data[0].hasOwnProperty('date')) {\n    return data.map(point => ({\n      ...point,\n      date: parseDate(point.date),\n    }));\n  }\n  return data;\n}\n\n/**\n * Returns the seriesNames from the the dataset, excluding specified\n * @param  {[type]} data    [description]\n * @return {[type]}         [description]\n */\nexport function getSeriesNames(data, excludeColumns) {\n  const exclude = excludeColumns || ['date', 'label', 'annotate', 'highlight', 'type'];\n  const allSeriesNames = (Array.isArray(data)\n    ? data.reduce((acc, curr) => [...acc, ...Object.keys(curr)], [])\n    : Object.keys(data)\n  ).filter(d => !exclude.includes(d));\n  return [...new Set(allSeriesNames)];\n}\n\n/**\n * Calculates the extent of multiple columns\n * @param  {[type]} d       [description]\n * @param  {[type]} columns [description]\n * @param  {[type]} yMin    [description]\n * @return {[type]}         [description]\n */\nexport function extentMulti(d, columns, yMin) {\n  const ext = d.reduce((acc, row) => {\n    const values = columns\n      .map(key => row[key])\n      .map(item => {\n        if (item !== 0 && (!item || item === '*')) {\n          return yMin;\n        }\n        return Number(item);\n      });\n    const rowExtent = extent(values);\n    if (!acc.max) {\n      acc.max = rowExtent[1];\n      acc.min = rowExtent[0];\n    } else {\n      acc.max = Math.max(acc.max, rowExtent[1]);\n      acc.min = Math.min(acc.min, rowExtent[0]);\n    }\n    return acc;\n  }, {});\n  return [ext.min, ext.max];\n}\n","export default {\n\tunCapitalise: function(str) {\n\t\treturn str.charAt(0).toLowerCase() + str.substr(1);\n\t},\n\n\tcapitalise: function(str) {\n\t\treturn str.charAt(0).toUpperCase() + str.substr(1);\n\t},\n\n\tcopyContentFromElement: function(content, callback) {\n\t\tconst html = content.nodeName === 'SCRIPT' ? content.innerHTML : content.outerHTML;\n\t\tcallback(html);\n\t},\n\n\tcopyContentFromUrl: function(url, callback) {\n\t\tconst xhr = new XMLHttpRequest();\n\t\txhr.open('GET', url, true);\n\t\txhr.onload = function() { // eslint complains of e not being used\n\t\t\tif (xhr.readyState === 4) {\n\t\t\t\tif (xhr.status === 200) {\n\t\t\t\t\tcallback(xhr.responseText);\n\t\t\t\t} else {\n\t\t\t\t\tcallback('Content failed to load correctly');\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\txhr.onerror = function(e) {\n\t\t\tthrow new Error('\"o-overlay error\": Fetching content from ' + url + ' failed with errror ' + e);\n\t\t};\n\n\t\txhr.send(null);\n\t},\n\n\toptionsFromKey: function(key, value, opts) {\n\t\tconst dashIndex = key.indexOf('-');\n\t\tif (dashIndex === -1) {\n\t\t\ttry {\n\t\t\t\t// If it's a JSON, a boolean or a number, we want it stored like that, and not as a string\n\t\t\t\t// We also replace all ' with \" so JSON strings are parsed correctly\n\t\t\t\topts[key] = JSON.parse(value.replace(/\\'/g, '\"'));\n\t\t\t} catch (e) {\n\t\t\t\topts[key] = value;\n\t\t\t}\n\t\t} else {\n\t\t\t// Key that holds an object instead of a value\n\t\t\tconst subKey = key.substr(0, dashIndex);\n\n\t\t\t// If sub-object doesn't exist already, create it\n\t\t\tif (!opts[subKey]){\n\t\t\t\topts[subKey] = {};\n\t\t\t}\n\n\t\t\t// Run function again starting with the rest of the key\n\t\t\topts[subKey] = this.optionsFromKey(key.substr(dashIndex+1), value, opts[subKey]);\n\t\t}\n\n\t\treturn opts;\n\t},\n\n\t// Code based on this article to get coordinates independent of scroll: http://javascript.info/tutorial/coordinates\n\tgetOffsetRect: function(e) {\n\t\tconst eClientRect = e.getBoundingClientRect();\n\n\t\tconst body = document.body;\n\t\tconst docElem = document.documentElement;\n\n\t\t// docElem.scrollTop/Left for IE, use body as a last resort\n\t\tconst scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop;\n\t\tconst scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft;\n\n\t\t// IE sometimes shifts the upper left corner\n\t\tconst clientTop = docElem.clientTop || body.clientTop || 0;\n\t\tconst clientLeft = docElem.clientLeft || body.clientLeft || 0;\n\n\t\treturn {\n\t\t\t// IE8 doesn't support getBoundingClientRect().height and .weight\n\t\t\twidth: eClientRect.width || eClientRect.right - eClientRect.left,\n\t\t\theight: eClientRect.height || eClientRect.bottom - eClientRect.top,\n\t\t\ttop: eClientRect.top + scrollTop - clientTop,\n\t\t\tleft: eClientRect.left + scrollLeft - clientLeft\n\t\t};\n\t}\n};\n","/**\n * @file\n * CSS styles for <Axis />\n */\n\nimport { css } from '@emotion/core';\n\nexport const baseAxisStyles = css`\n  font-size: inherit !important;\n`;\n\nexport const webAxisStyles = css`\n  ${baseAxisStyles}\n\n  text {\n    font-family: metric, MetricWeb;\n    fill: #66605c;\n    font-size: 16px;\n  }\n\n  line {\n    stroke: #e6d9ce;\n    stroke-width: 1px;\n  }\n\n  .visx-axis-banding rect {\n    fill: #ccc1b7;\n    opacity: 0.4;\n  }\n\n  /* tick text on yAxis */\n  .visx-axis-left text,\n  .visx-axis-right text {\n    fill: #66605c;\n  }\n\n  .visx-axis-left text {\n    text-anchor: end;\n  }\n\n  .visx-axis-right text {\n    text-anchor: start;\n  }\n\n  /* tick line on yAxis */\n  .visx-axis-left line,\n  .visx-axis-right line {\n    stroke: #e6d9ce;\n    stroke-width: 1px;\n  }\n\n  /* tick text on xAxis */\n  .visx-axis-top text,\n  .visx-axis-bottom text {\n    fill: #66605c;\n    text-anchor: middle;\n  }\n\n  /* tick line on xAxis */\n  .visx-axis-top line,\n  .visx-axis-bottom line {\n    stroke: #e6d9ce;\n    stroke-width: 1px;\n  }\n`;\n\nexport const socialAxisStyles = css`\n  ${baseAxisStyles}\n\n  text {\n    fill: #8e9095;\n    font-size: 20px;\n  }\n\n  line {\n    stroke: #47494d;\n    stroke-width: 1px;\n  }\n\n  .visx-axis-banding rect {\n    fill: #ffffff;\n    opacity: 0.4;\n  }\n\n  /* tick text on yAxis */\n  .visx-axis-left text,\n  .visx-axis-right text {\n    fill: #8e9095;\n  }\n\n  .visx-axis-left text {\n    text-anchor: end;\n  }\n\n  .visx-axis-right text {\n    text-anchor: start;\n  }\n\n  /* tick line on yAxis */\n  .visx-axis-left line,\n  .visx-axis-right line {\n    stroke: #47494d;\n    stroke-width: 1px;\n  }\n\n  /* tick text on xAxis */\n  .visx-axis-top text,\n  .visx-axis-bottom text {\n    fill: #8e9095;\n    text-anchor: middle;\n  }\n\n  /* tick line on xAxis */\n  .visx-axis-top line,\n  .visx-axis-bottom line {\n    stroke: #47494d;\n    stroke-width: 1px;\n  }\n`;\n\nexport const videoAxisStyles = css`\n  ${baseAxisStyles}\n\n  text {\n    fill: #8e9095;\n    font-size: 48px;\n  }\n\n  line {\n    stroke: #47494d;\n    stroke-width: 3px;\n  }\n\n  .visx-axis-banding rect {\n    fill: #ffffff;\n    opacity: 0.4;\n  }\n\n  /* tick text on yAxis */\n  .visx-axis-left text,\n  .visx-axis-right text {\n    fill: #8e9095;\n  }\n\n  .visx-axis-left text {\n    text-anchor: end;\n  }\n\n  .visx-axis-right text {\n    text-anchor: start;\n  }\n\n  /* tick line on yAxis */\n  .visx-axis-left line,\n  .visx-axis-right line {\n    stroke: #47494d;\n    stroke-width: 3px;\n  }\n\n  /* tick text on xAxis */\n  .visx-axis-top text,\n  .visx-axis-bottom text {\n    fill: #8e9095;\n    text-anchor: middle;\n  }\n\n  /* tick line on xAxis */\n  .visx-axis-top line,\n  .visx-axis-bottom line {\n    stroke: #47494d;\n    stroke-width: 3px;\n  }\n`;\n\nexport const printAxisStyles = css`\n  ${baseAxisStyles}\n\n  text {\n    font-family: metric;\n    font-size: 9.6px;\n    fill: #000000;\n    text-anchor: end;\n  }\n\n  line {\n    stroke: #000000;\n    stroke-width: 0.3px;\n  }\n\n  .visx-axis-banding rect {\n    fill: #95bfc5;\n    opacity: 0.4;\n  }\n\n  /* tick text on yAxis */\n  .visx-axis-left text {\n    text-anchor: end;\n  }\n\n  .visx-axis-right text {\n    text-anchor: start;\n  }\n\n  /* tick line on yAxis */\n  .visx-axis-left line,\n  .visx-axis-right line {\n    stroke: #000000;\n    stroke-width: 0.3px;\n  }\n\n  /* tick text on xAxis */\n  .visx-axis-top text,\n  .visx-axis-bottom text {\n    text-anchor: middle;\n  }\n\n  /* tick line on xAxis */\n  .visx-axis-top line,\n  .visx-axis-bottom line {\n    stroke: #000000;\n    stroke-width: 0.3px;\n  }\n`;\n\nexport const combineStyles = (initialStyles, additionalStyles) =>\n  css`\n    ${initialStyles}\n    ${additionalStyles}\n  `;\n\nexport default webAxisStyles;\n","import { scaleOrdinal } from 'd3-scale';\nimport scaleOperator from '../operators/scaleOperator';\nexport var updateOrdinalScale = scaleOperator('domain', 'range', 'reverse', 'unknown');\nexport default function createOrdinalScale(config) {\n  return updateOrdinalScale(scaleOrdinal(), config);\n}","\nexports = module.exports = trim;\n\nfunction trim(str){\n  return str.replace(/^\\s*|\\s*$/g, '');\n}\n\nexports.left = function(str){\n  return str.replace(/^\\s*/, '');\n};\n\nexports.right = function(str){\n  return str.replace(/\\s*$/, '');\n};\n","import React, { useContext } from 'react';\nimport { Circle, LinePath } from '@visx/shape';\nimport { PlotContext } from '../chart-frame/plot-context';\nimport { useDelaunay } from './delaunay';\nimport { useTooltipEvents } from '../../util/hooks';\nimport { delaunayPropTypes } from '../prop-types';\nimport { delaunayDefaultProps } from '../default-props';\n\nconst DelaunayListener = ({ width, height, margin, padding, onMouseMove, onMouseOut }) => {\n  const top = margin.top + padding.top;\n  const left = margin.left + padding.left;\n\n  return (\n    <>\n      <rect\n        width={width}\n        height={height}\n        fill=\"transparent\"\n        onMouseMove={event => onMouseMove(event, { top, left, height })}\n        onMouseOut={onMouseOut}\n      />\n    </>\n  );\n};\n\nconst Delaunay = ({\n  xScale,\n  yScale,\n  colorScale,\n  yTransformFunction,\n  xVariable,\n  yVariable,\n  data,\n  debug,\n  tooltipPositionOverride,\n  showLine,\n  showCircle,\n  lineConfig,\n  circleConfig,\n  hoverRadius,\n}) => {\n  const { width, height, margin, padding, updateTooltip, hoveredData, mousePoint } = useContext(\n    PlotContext\n  );\n  xScale.range([0, width]);\n  yScale.range([height, 0]);\n\n  const transformedYScale = y => yScale(yTransformFunction ? yTransformFunction(y) : y);\n\n  const tooltipEvents = useTooltipEvents({ enabled: true, updateTooltip });\n\n  const { onMouseMove, onMouseOut, pathString } = useDelaunay({\n    width,\n    height,\n    xScale,\n    yScale: transformedYScale,\n    xVariable,\n    yVariable,\n    yTransformFunction,\n    data,\n    tooltipEvents,\n    tooltipPositionOverride,\n    hoverRadius,\n    debug,\n  });\n\n  const hoveredXPosition = hoveredData && xScale(hoveredData.x);\n  const hoveredYPosition =\n    hoveredData && yScale(yTransformFunction ? yTransformFunction(hoveredData.y) : hoveredData.y);\n\n  return (\n    width > 0 &&\n    height > 0 && (\n      <>\n        {showLine && hoveredData && (\n          <LinePath\n            data={[\n              { x: hoveredXPosition, y: 0 },\n              { x: hoveredXPosition, y: height },\n            ]}\n            x={({ x }) => x}\n            y={({ y }) => y}\n            {...lineConfig}\n          />\n        )}\n        {showCircle && hoveredData && (\n          <Circle\n            fill={colorScale(hoveredData.seriesName)}\n            cx={hoveredXPosition}\n            cy={hoveredYPosition}\n            {...circleConfig}\n          />\n        )}\n        <DelaunayListener\n          width={width}\n          height={height}\n          margin={margin}\n          padding={padding}\n          onMouseMove={onMouseMove}\n          onMouseOut={onMouseOut}\n          debug={debug}\n        />\n        {debug && <path d={pathString} fill=\"none\" stroke=\"red\" pointerEvents=\"none\" />}\n        {debug && hoverRadius && mousePoint && (\n          <Circle\n            fill=\"none\"\n            stroke=\"red\"\n            strokeDasharray=\"4,1\"\n            pointerEvents=\"none\"\n            r={hoverRadius}\n            cx={mousePoint.mx}\n            cy={mousePoint.my}\n          />\n        )}\n      </>\n    )\n  );\n};\n\nDelaunay.propTypes = delaunayPropTypes;\n\nDelaunay.defaultProps = delaunayDefaultProps;\n\nexport default Delaunay;\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","import {broadcast, containsCircularPaths, decode, encode, findCircularPathsIn, is} from '../utils.js';\n\n/**\n * Class for storing data\n * Will choose the 'best' storage method available. Can also specify a type of storage.\n *\n * @class  Store\n * @param {string} name - The name of the store\n * @param {object} config - Optional, config object for extra configuration\n * @param {string} [config.nameOverride] - The internal name for the store\n * @param {string} [config.domain] - The domain that should be used to store cookies on\n */\nconst Store = function (name, config = {}) {\n\n\t/**\n\t * Internal Storage key prefix.\n\t */\n\tconst keyPrefix = 'o-tracking';\n\n\n\tif (typeof name !== 'string' || name === '') {\n\t\tconst undefinedName = new Error('You must specify a name for the store.');\n\t\tbroadcast('oErrors', 'log', {\n\t\t\terror: undefinedName.message,\n\t\t\tinfo: { module: 'o-tracking' }\n\t\t});\n\t\tthrow undefinedName;\n\t}\n\n\tthis.config = Object.assign({}, config);\n\n\t/**\n\t * Store data.\n\t */\n\tthis.data = null;\n\n\t/**\n\t * The key/name of this store.\n\t */\n\tthis.storageKey = this.config.nameOverride ? this.config.nameOverride : [keyPrefix, name].join('_');\n\n\t/**\n\t * The storage method to use.\n\t *\n\t * @type {object}\n\t */\n\tthis.storage = {\n\t\t_type: 'localStorage',\n\t\tload: function (name) {\n\t\t\treturn window.localStorage.getItem(name);\n\t\t},\n\t\tsave: function (name, value) {\n\t\t\treturn window.localStorage.setItem(name, value);\n\t\t},\n\t\tremove: function (name) {\n\t\t\t// We attempt to remove the item from the old cookie storage\n\t\t\t// because otherwise the next time o-tracking is initialised for\n\t\t\t// this user, it will import the old value which was meant to\n\t\t\t// have been removed.\n\t\t\tcookieRemove(name);\n\t\t\treturn window.localStorage.removeItem(name);\n\t\t}\n\t};\n\n\tfunction cookieLoad(name) {\n\t\tname = name + '=';\n\n\t\tconst cookies = window.document.cookie.split(';');\n\t\tlet i;\n\t\tlet cookie;\n\n\t\tfor (i = 0; i < cookies.length; i = i + 1) {\n\t\t\tcookie = cookies[i].replace(/^\\s+|\\s+$/g, '');\n\t\t\tif (cookie.indexOf(name) === 0) {\n\t\t\t\treturn decode(cookie.substring(name.length, cookie.length));\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tfunction cookieSave(name, value, expiry) {\n\t\tlet d;\n\t\tlet expires = '';\n\n\t\tif (is(expiry, 'number')) {\n\t\t\td = new Date();\n\t\t\td.setTime(d.getTime() + expiry);\n\t\t\texpires = 'expires=' + d.toUTCString() + ';';\n\t\t}\n\n\t\tconst cookie = encode(name) + '=' + encode(value) + ';' + expires + 'path=/;' + (config.domain ? 'domain=.' + config.domain + ';' : '');\n\t\twindow.document.cookie = cookie;\n\t}\n\n\tfunction cookieRemove(name) {\n\t\tcookieSave(name, '', -1);\n\t}\n\n\t/**\n\t * Temporary var containing data from a previously saved store.\n\t *\n\t * @property {string|undefined} loadStore - JSON string of the previously saved store or undefined.\n\t */\n\t// Retrieve any previous store with the same name.\n\tconst loadStore = this.storage.load(this.storageKey);\n\tif (loadStore) {\n\t\ttry {\n\t\t\tthis.data = JSON.parse(loadStore);\n\t\t} catch (error) {\n\t\t\tbroadcast('oErrors', 'log', {\n\t\t\t\terror: error.message,\n\t\t\t\tmodule: 'o-tracking'\n\t\t\t});\n\t\t\tthis.data = loadStore;\n\t\t}\n\t}\n\n\t// If the user has previous data stored in the old cookie storage system\n\t// import the data into the new storage system and remove them from the cookie.\n\tconst oldCookieStoreData = cookieLoad(this.storageKey);\n\tif (oldCookieStoreData) {\n\t\ttry {\n\t\t\tif (this.storageKey === 'spoor-id') {\n\t\t\t\t// spoor-id is stored directly as a string and not as an object\n\t\t\t\tthis.data = oldCookieStoreData;\n\t\t\t} else {\n\t\t\t\tconst data = JSON.parse(oldCookieStoreData);\n\t\t\t\tif (this.data) {\n\t\t\t\t\tObject.assign(this.data, data);\n\t\t\t\t} else {\n\t\t\t\t\tthis.data = data;\n\t\t\t\t}\n\t\t\t\tfor (const name of Object.keys(data)) {\n\t\t\t\t\tif (name !== 'spoor-id') {\n\t\t\t\t\t\tcookieRemove(name);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tbroadcast('oErrors', 'log', {\n\t\t\t\terror: error.message,\n\t\t\t\tmodule: 'o-tracking'\n\t\t\t});\n\t\t\tthis.data = loadStore;\n\t\t}\n\t}\n\n\treturn this;\n};\n\n/**\n * Get/Read the current data.\n *\n * @returns {object} Returns the data from the store.\n */\nStore.prototype.read = function () {\n\treturn this.data;\n};\n\n/**\n * Write the supplied data to the store.\n *\n * @param {string} data - The data to write.\n * @returns {Store} - The instance of the store\n */\nStore.prototype.write = function (data) {\n\t// Set this.data, in-case we're on a file:// domain and can't set cookies.\n\tthis.data = data;\n\tlet value;\n\n\tif (typeof this.data === 'string') {\n\t\tvalue = this.data;\n\t} else {\n\t\tif (containsCircularPaths(this.data)) {\n\t\t\tconst errorMessage = \"o-tracking does not support circular references in the analytics data.\\n\" +\n\t\t\t\"Please remove the circular references in the data.\\n\" +\n\t\t\t\"Here are the paths in the data which are circular:\\n\" +\n\t\t\tJSON.stringify(findCircularPathsIn(this.data), undefined, 4);\n\t\t\tthrow new Error(errorMessage);\n\t\t}\n\t\tvalue = JSON.stringify(this.data);\n\t}\n\n\tthis.storage.save(this.storageKey, value);\n\n\treturn this;\n};\n\n/**\n * Delete the current data.\n *\n * @returns {Store} - The instance of the store\n */\nStore.prototype.destroy = function () {\n\tthis.data = null;\n\tthis.storage.remove(this.storageKey);\n\treturn this;\n};\n\nexport { Store };\n","export default function(x) {\n  return function() {\n    return x;\n  };\n}\n","/**\n * @file\n * Various hooks\n */\nimport { useCallback } from 'react';\nimport localPoint from '@visx/event/lib/localPoint';\n\nexport default null;\n\nexport const useTooltipEvents = ({ enabled, updateTooltip }) => {\n  const callbacks = useCallback(\n    (datum, overrides) => {\n      const handleMouseOver = event => {\n        if (!datum) updateTooltip({ tooltipOpen: false });\n        const coords = overrides || localPoint(event.currentTarget.ownerSVGElement, event);\n        updateTooltip({\n          tooltipOpen: true,\n          tooltipLeft: coords.x,\n          tooltipTop: coords.y,\n          tooltipData: datum,\n        });\n      };\n      return {\n        onMouseOver: handleMouseOver,\n        onFocus: handleMouseOver,\n        onMouseOut: () => updateTooltip({ tooltipOpen: false }),\n        onBlur: () => updateTooltip({ tooltipOpen: false }),\n      };\n    },\n    [updateTooltip]\n  );\n\n  return enabled ? callbacks : () => ({});\n};\n","/**\n * @file\n * CSS styles for <ChartFooter />\n */\n\nimport { css } from '@emotion/core';\n\nconst base = css`\n  font-family: MetricWeb, sans-serif;\n  font-weight: 400;\n`;\n\nexport const copyrightStylesBase = css`\n  ${base};\n  fill: #66605c;\n  font-style: italic;\n`;\n\nexport const sourceStylesBase = css`\n  ${base};\n  fill: #66605c;\n`;\n\nexport const sourceStylesPrint = css`\n  fill: #000000;\n`;\n\nexport const sourceStylesSocial = css`\n  fill: #8e9095;\n`;\n\nexport const sourceStylesVideo = css`\n  fill: #8e9095;\n`;\n","import interval from \"./interval.js\";\nimport {durationDay, durationMinute} from \"./duration.js\";\n\nvar day = interval(\n  date => date.setHours(0, 0, 0, 0),\n  (date, step) => date.setDate(date.getDate() + step),\n  (start, end) => (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay,\n  date => date.getDate() - 1\n);\n\nexport default day;\nexport var days = day.range;\n","const generateWords = text => text.toLowerCase().split(' ');\n\nexport const cleanSearchValue = searchValue => searchValue.toLowerCase().replace(/\\s/g, '');\n\nexport const findMatch = (searchList, searchValue) => {\n  return searchList.find(({ display, alternatives }) => {\n    const cleanedDisplay = cleanSearchValue(display);\n    const cleanedAlternatives = alternatives ? alternatives.map(a => cleanSearchValue(a)) : [];\n    const cleanedSearchValue = cleanSearchValue(searchValue);\n    return (\n      cleanedDisplay === cleanedSearchValue || cleanedAlternatives.includes(cleanedSearchValue)\n    );\n  });\n};\n\n// Function to score and get closest suggestions from list\nexport const getSuggestions = (value, searchList) => {\n  const inputValue = value.trim().toLowerCase();\n  const inputLength = inputValue.length;\n  const inputValueWords = inputValue.split(' ');\n\n  // Match from the beginning of the string, after N characters\n  const minimumInputLength = 1;\n  if (inputLength < minimumInputLength) {\n    return [];\n  }\n\n  // Score each entry in the list\n  const scoredList = searchList.map(({ display, words, alternativeWords, ...d }) => {\n    // Combine words with alternatives\n    const allWords = [words, ...alternativeWords];\n\n    // Calculate score for alternatives at the same time\n    const allScores = allWords.map(w => {\n      // Score each word in the country name\n      const scores = w.reduce((acc, word) => {\n        // For each word, try and find a partial match with one of the input value words\n        // (up to the length of the input word)\n        const match = inputValueWords.find(\n          inputValueWord => word.toLowerCase().slice(0, inputValueWord.length) === inputValueWord\n        );\n        return [\n          ...acc,\n          {\n            // Return the length of the match\n            matchLength: match ? match.length : 0,\n            // The total word length\n            wordLength: word.length,\n            // And the percentage of the word matched\n            pcMatch: match ? match.length / word.length : 0,\n          },\n        ];\n      }, []);\n\n      // Calculate total match length\n      const totalMatchLength = scores.reduce((acc, { matchLength }) => acc + matchLength, 0);\n      // Calculate total length\n      const totalLength = scores.reduce((acc, { wordLength }) => acc + wordLength, 0);\n\n      return {\n        totalMatchLength,\n        totalPercentageMatch: totalMatchLength > 0 ? totalMatchLength / totalLength : 0,\n      };\n    });\n\n    const highestScore = Math.max(...allScores.map(s => s.totalMatchLength));\n    const highestPercentageScore = Math.max(...allScores.map(s => s.totalPercentageMatch));\n\n    return {\n      display,\n      ...d,\n      score: highestScore,\n      pcScore: highestPercentageScore,\n    };\n  });\n\n  // Filter and score list by score (match scores below minimum input length if complete match)\n  return scoredList\n    .filter(d => d.score >= minimumInputLength || d.pcScore === 1)\n    .sort((a, b) => b.score - a.score);\n};\n\nexport const formatAreaList = (areaList, areasInData, selectedAreas) =>\n  areaList.map(area => {\n    const areaInData = areasInData.includes(area.display);\n    const areaSelected = selectedAreas.includes(area.value);\n    return {\n      ...area,\n      disabled: !areaInData,\n      selected: areaSelected,\n      words: generateWords(area.display),\n      alternativeWords: (area.alternatives || []).map(alt => generateWords(alt)),\n    };\n  });\n\nexport const generateErrorMessage = (selectedAreas, areasInData, options) => {\n  const selectedAreasNotInData = selectedAreas\n    .filter(({ display }) => !areasInData.includes(display))\n    .map(({ display }) => display);\n  const selectedAreasNotInDataText = selectedAreasNotInData.reduce(\n    (acc, curr, i, arr) => `${acc}${i > 0 ? (i === arr.length - 1 ? ' and ' : ', ') : ''}${curr}`,\n    ''\n  );\n\n  const errorMessage =\n    selectedAreasNotInData.length > 0\n      ? `${selectedAreasNotInDataText} ${\n          selectedAreasNotInData.length > 1 ? 'do' : 'does'\n        }  not appear on this view of the chart because ${\n          selectedAreasNotInData.length > 1\n            ? 'they do not yet have'\n            : selectedAreasNotInData[0] === 'World'\n            ? 'it does not have'\n            : 'it does not yet have'\n        } seven days of daily vaccination data. Please try other options`\n      : null;\n\n  return errorMessage;\n};\n\nexport default { findMatch, generateWords, getSuggestions, formatAreaList };\n","import React, { useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport Button from '@financial-times/g-components/button';\nimport Loading from '@financial-times/g-components/loading';\nimport './styles.scss';\n\nconst ButtonSelectionGroup = ({\n  items,\n  selected,\n  updateSelection,\n  width,\n  title,\n  equalButtons,\n  loadingTime,\n  disabled,\n}) => {\n  const [loading, setLoading] = useState(false);\n\n  useEffect(() => {\n    let timer;\n    if (loading && loadingTime > 0) {\n      timer = setTimeout(() => {\n        setLoading(false);\n        updateSelection(loading);\n      }, loadingTime); // Defaults to 100ms\n    }\n    return () => clearTimeout(timer);\n  }, [loading]);\n\n  const buttonsClassName = `button-selection-group__buttons${\n    !equalButtons ? ' button-selection-group__buttons--fit' : ''\n  }`;\n\n  return (\n    <div className=\"button-selection-group\" style={{ width }}>\n      {title && <div className=\"button-selection-group__title\">{title}</div>}\n      <div className={buttonsClassName}>\n        {items.map(({ value, display }) => (\n          <Button\n            id={value}\n            big\n            selected={value === selected}\n            theme=\"mono\"\n            key={value}\n            onClick={() => {\n              if (loadingTime > 0 && selected !== value) {\n                setLoading(value);\n              } else {\n                updateSelection(value);\n              }\n            }}\n            disabled={disabled}\n          >\n            {display}\n            {loading === value && (\n              <div className=\"button-selection-group__loading\">\n                <Loading size=\"small\" />\n              </div>\n            )}\n          </Button>\n        ))}\n      </div>\n    </div>\n  );\n};\n\nButtonSelectionGroup.propTypes = {\n  items: PropTypes.arrayOf(\n    PropTypes.shape({\n      value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n      display: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n    })\n  ).isRequired,\n  selected: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\n  updateSelection: PropTypes.func.isRequired,\n  width: PropTypes.string,\n  title: PropTypes.string,\n  equalButtons: PropTypes.bool,\n  loadingTime: PropTypes.number,\n  disabled: PropTypes.bool,\n};\n\nButtonSelectionGroup.defaultProps = {\n  equalButtons: true,\n  loadingTime: 100,\n  disabled: false,\n};\n\nexport default ButtonSelectionGroup;\n","import PropTypes from 'prop-types';\nimport { baseComponentPropTypes } from '@financial-times/vvc/components/prop-types';\n\nexport const labelComponentDefaultProps = {\n  fill: '#000000',\n  anchor: 'start',\n  fontSize: 14,\n  strokeColor: '#fff1e5',\n  strokeWidth: 4,\n  x: 0,\n  y: 0,\n  dx: 0,\n  dy: 0,\n  showArrow: false,\n  arrowWidth: 10,\n};\n\nexport const lineChartPropTypes = {\n  ...baseComponentPropTypes,\n  data: PropTypes.array.isRequired,\n  yVariable: PropTypes.array.isRequired,\n  xVariable: PropTypes.string.isRequired,\n  seriesToHighlight: PropTypes.arrayOf(PropTypes.string),\n  xMin: PropTypes.oneOfType([PropTypes.number, PropTypes.instanceOf(Date)]),\n  xMax: PropTypes.oneOfType([PropTypes.number, PropTypes.instanceOf(Date)]),\n  yMin: PropTypes.number,\n  yMax: PropTypes.number,\n  xScaleType: PropTypes.oneOf(['time', 'linear']),\n  xTickFormat: PropTypes.func,\n  xTickValues: PropTypes.array,\n  xAxisOrientation: PropTypes.oneOf(['top', 'bottom']),\n  xFullLengthTicks: PropTypes.bool,\n  yTickFormat: PropTypes.func,\n  yAxisOrientation: PropTypes.oneOf(['left', 'right']),\n  yFullLengthTicks: PropTypes.bool,\n  showLineEndDots: PropTypes.bool,\n  labelStrokeColor: PropTypes.string,\n  labelStrokeWidth: PropTypes.number,\n  dotStrokeColor: PropTypes.string,\n  dotStrokeWidth: PropTypes.number,\n  lineColorPalette: PropTypes.arrayOf(PropTypes.string).isRequired,\n  tooltipLineColor: PropTypes.string,\n  ghostLineColor: PropTypes.string,\n  ghostLineHoverColorScale: PropTypes.func,\n  ghostLineHoverLabelColorScale: PropTypes.func,\n  highlightedLineOutlineWidth: PropTypes.number,\n  showTooltips: PropTypes.bool,\n  allLinesHoverable: PropTypes.bool,\n  showTooltipLine: PropTypes.bool,\n  tooltipStyle: PropTypes.object,\n  tooltipComponent: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\n  showYAxisFade: PropTypes.bool,\n  labelFontSize: PropTypes.number,\n};\n\nexport const lineChartDefaultProps = {\n  xScaleType: 'linear',\n  xAxisOrientation: 'bottom',\n  xFullLengthTicks: false,\n  yAxisOrientation: 'left',\n  yFullLengthTicks: false,\n  hideEndTicks: false,\n  showLineEndDots: true,\n  labelStrokeColor: '#fff1e5',\n  labelStrokeWidth: 4,\n  dotStrokeColor: '#fff1e5',\n  dotStrokeWidth: 1,\n  tooltipLineColor: '#33302e',\n  ghostLineColor: '#b3a9a0',\n  ghostLineHoverColorScale: () => '#b3a9a0',\n  ghostLineHoverLabelColorScale: () => '#66605C',\n  highlightedLineOutlineWidth: 5,\n  showTooltips: true,\n  allLinesHoverable: true,\n  showTooltipLine: true,\n  tooltipStyle: {},\n  tooltipComponent: t => t,\n  showYAxisFade: true,\n  labelFontSize: 18,\n};\n\nexport default null;\n","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n  try {\n    var info = gen[key](arg);\n    var value = info.value;\n  } catch (error) {\n    reject(error);\n    return;\n  }\n\n  if (info.done) {\n    resolve(value);\n  } else {\n    Promise.resolve(value).then(_next, _throw);\n  }\n}\n\nfunction _asyncToGenerator(fn) {\n  return function () {\n    var self = this,\n        args = arguments;\n    return new Promise(function (resolve, reject) {\n      var gen = fn.apply(self, args);\n\n      function _next(value) {\n        asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n      }\n\n      function _throw(err) {\n        asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n      }\n\n      _next(undefined);\n    });\n  };\n}\n\nmodule.exports = _asyncToGenerator;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","/* @license\nPapa Parse\nv5.3.1\nhttps://github.com/mholt/PapaParse\nLicense: MIT\n*/\n!function(e,t){\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof module&&\"undefined\"!=typeof exports?module.exports=t():e.Papa=t()}(this,function s(){\"use strict\";var f=\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:void 0!==f?f:{};var n=!f.document&&!!f.postMessage,o=n&&/blob:/i.test((f.location||{}).protocol),a={},h=0,b={parse:function(e,t){var i=(t=t||{}).dynamicTyping||!1;M(i)&&(t.dynamicTypingFunction=i,i={});if(t.dynamicTyping=i,t.transform=!!M(t.transform)&&t.transform,t.worker&&b.WORKERS_SUPPORTED){var r=function(){if(!b.WORKERS_SUPPORTED)return!1;var e=(i=f.URL||f.webkitURL||null,r=s.toString(),b.BLOB_URL||(b.BLOB_URL=i.createObjectURL(new Blob([\"(\",r,\")();\"],{type:\"text/javascript\"})))),t=new f.Worker(e);var i,r;return t.onmessage=_,t.id=h++,a[t.id]=t}();return r.userStep=t.step,r.userChunk=t.chunk,r.userComplete=t.complete,r.userError=t.error,t.step=M(t.step),t.chunk=M(t.chunk),t.complete=M(t.complete),t.error=M(t.error),delete t.worker,void r.postMessage({input:e,config:t,workerId:r.id})}var n=null;b.NODE_STREAM_INPUT,\"string\"==typeof e?n=t.download?new l(t):new p(t):!0===e.readable&&M(e.read)&&M(e.on)?n=new g(t):(f.File&&e instanceof File||e instanceof Object)&&(n=new c(t));return n.stream(e)},unparse:function(e,t){var n=!1,_=!0,m=\",\",y=\"\\r\\n\",s='\"',a=s+s,i=!1,r=null,o=!1;!function(){if(\"object\"!=typeof t)return;\"string\"!=typeof t.delimiter||b.BAD_DELIMITERS.filter(function(e){return-1!==t.delimiter.indexOf(e)}).length||(m=t.delimiter);(\"boolean\"==typeof t.quotes||\"function\"==typeof t.quotes||Array.isArray(t.quotes))&&(n=t.quotes);\"boolean\"!=typeof t.skipEmptyLines&&\"string\"!=typeof t.skipEmptyLines||(i=t.skipEmptyLines);\"string\"==typeof t.newline&&(y=t.newline);\"string\"==typeof t.quoteChar&&(s=t.quoteChar);\"boolean\"==typeof t.header&&(_=t.header);if(Array.isArray(t.columns)){if(0===t.columns.length)throw new Error(\"Option columns is empty\");r=t.columns}void 0!==t.escapeChar&&(a=t.escapeChar+s);\"boolean\"==typeof t.escapeFormulae&&(o=t.escapeFormulae)}();var h=new RegExp(j(s),\"g\");\"string\"==typeof e&&(e=JSON.parse(e));if(Array.isArray(e)){if(!e.length||Array.isArray(e[0]))return u(null,e,i);if(\"object\"==typeof e[0])return u(r||Object.keys(e[0]),e,i)}else if(\"object\"==typeof e)return\"string\"==typeof e.data&&(e.data=JSON.parse(e.data)),Array.isArray(e.data)&&(e.fields||(e.fields=e.meta&&e.meta.fields),e.fields||(e.fields=Array.isArray(e.data[0])?e.fields:\"object\"==typeof e.data[0]?Object.keys(e.data[0]):[]),Array.isArray(e.data[0])||\"object\"==typeof e.data[0]||(e.data=[e.data])),u(e.fields||[],e.data||[],i);throw new Error(\"Unable to serialize unrecognized input\");function u(e,t,i){var r=\"\";\"string\"==typeof e&&(e=JSON.parse(e)),\"string\"==typeof t&&(t=JSON.parse(t));var n=Array.isArray(e)&&0<e.length,s=!Array.isArray(t[0]);if(n&&_){for(var a=0;a<e.length;a++)0<a&&(r+=m),r+=v(e[a],a);0<t.length&&(r+=y)}for(var o=0;o<t.length;o++){var h=n?e.length:t[o].length,u=!1,f=n?0===Object.keys(t[o]).length:0===t[o].length;if(i&&!n&&(u=\"greedy\"===i?\"\"===t[o].join(\"\").trim():1===t[o].length&&0===t[o][0].length),\"greedy\"===i&&n){for(var d=[],l=0;l<h;l++){var c=s?e[l]:l;d.push(t[o][c])}u=\"\"===d.join(\"\").trim()}if(!u){for(var p=0;p<h;p++){0<p&&!f&&(r+=m);var g=n&&s?e[p]:p;r+=v(t[o][g],p)}o<t.length-1&&(!i||0<h&&!f)&&(r+=y)}}return r}function v(e,t){if(null==e)return\"\";if(e.constructor===Date)return JSON.stringify(e).slice(1,25);!0===o&&\"string\"==typeof e&&null!==e.match(/^[=+\\-@].*$/)&&(e=\"'\"+e);var i=e.toString().replace(h,a),r=\"boolean\"==typeof n&&n||\"function\"==typeof n&&n(e,t)||Array.isArray(n)&&n[t]||function(e,t){for(var i=0;i<t.length;i++)if(-1<e.indexOf(t[i]))return!0;return!1}(i,b.BAD_DELIMITERS)||-1<i.indexOf(m)||\" \"===i.charAt(0)||\" \"===i.charAt(i.length-1);return r?s+i+s:i}}};if(b.RECORD_SEP=String.fromCharCode(30),b.UNIT_SEP=String.fromCharCode(31),b.BYTE_ORDER_MARK=\"\\ufeff\",b.BAD_DELIMITERS=[\"\\r\",\"\\n\",'\"',b.BYTE_ORDER_MARK],b.WORKERS_SUPPORTED=!n&&!!f.Worker,b.NODE_STREAM_INPUT=1,b.LocalChunkSize=10485760,b.RemoteChunkSize=5242880,b.DefaultDelimiter=\",\",b.Parser=E,b.ParserHandle=i,b.NetworkStreamer=l,b.FileStreamer=c,b.StringStreamer=p,b.ReadableStreamStreamer=g,f.jQuery){var d=f.jQuery;d.fn.parse=function(o){var i=o.config||{},h=[];return this.each(function(e){if(!(\"INPUT\"===d(this).prop(\"tagName\").toUpperCase()&&\"file\"===d(this).attr(\"type\").toLowerCase()&&f.FileReader)||!this.files||0===this.files.length)return!0;for(var t=0;t<this.files.length;t++)h.push({file:this.files[t],inputElem:this,instanceConfig:d.extend({},i)})}),e(),this;function e(){if(0!==h.length){var e,t,i,r,n=h[0];if(M(o.before)){var s=o.before(n.file,n.inputElem);if(\"object\"==typeof s){if(\"abort\"===s.action)return e=\"AbortError\",t=n.file,i=n.inputElem,r=s.reason,void(M(o.error)&&o.error({name:e},t,i,r));if(\"skip\"===s.action)return void u();\"object\"==typeof s.config&&(n.instanceConfig=d.extend(n.instanceConfig,s.config))}else if(\"skip\"===s)return void u()}var a=n.instanceConfig.complete;n.instanceConfig.complete=function(e){M(a)&&a(e,n.file,n.inputElem),u()},b.parse(n.file,n.instanceConfig)}else M(o.complete)&&o.complete()}function u(){h.splice(0,1),e()}}}function u(e){this._handle=null,this._finished=!1,this._completed=!1,this._halted=!1,this._input=null,this._baseIndex=0,this._partialLine=\"\",this._rowCount=0,this._start=0,this._nextChunk=null,this.isFirstChunk=!0,this._completeResults={data:[],errors:[],meta:{}},function(e){var t=w(e);t.chunkSize=parseInt(t.chunkSize),e.step||e.chunk||(t.chunkSize=null);this._handle=new i(t),(this._handle.streamer=this)._config=t}.call(this,e),this.parseChunk=function(e,t){if(this.isFirstChunk&&M(this._config.beforeFirstChunk)){var i=this._config.beforeFirstChunk(e);void 0!==i&&(e=i)}this.isFirstChunk=!1,this._halted=!1;var r=this._partialLine+e;this._partialLine=\"\";var n=this._handle.parse(r,this._baseIndex,!this._finished);if(!this._handle.paused()&&!this._handle.aborted()){var s=n.meta.cursor;this._finished||(this._partialLine=r.substring(s-this._baseIndex),this._baseIndex=s),n&&n.data&&(this._rowCount+=n.data.length);var a=this._finished||this._config.preview&&this._rowCount>=this._config.preview;if(o)f.postMessage({results:n,workerId:b.WORKER_ID,finished:a});else if(M(this._config.chunk)&&!t){if(this._config.chunk(n,this._handle),this._handle.paused()||this._handle.aborted())return void(this._halted=!0);n=void 0,this._completeResults=void 0}return this._config.step||this._config.chunk||(this._completeResults.data=this._completeResults.data.concat(n.data),this._completeResults.errors=this._completeResults.errors.concat(n.errors),this._completeResults.meta=n.meta),this._completed||!a||!M(this._config.complete)||n&&n.meta.aborted||(this._config.complete(this._completeResults,this._input),this._completed=!0),a||n&&n.meta.paused||this._nextChunk(),n}this._halted=!0},this._sendError=function(e){M(this._config.error)?this._config.error(e):o&&this._config.error&&f.postMessage({workerId:b.WORKER_ID,error:e,finished:!1})}}function l(e){var r;(e=e||{}).chunkSize||(e.chunkSize=b.RemoteChunkSize),u.call(this,e),this._nextChunk=n?function(){this._readChunk(),this._chunkLoaded()}:function(){this._readChunk()},this.stream=function(e){this._input=e,this._nextChunk()},this._readChunk=function(){if(this._finished)this._chunkLoaded();else{if(r=new XMLHttpRequest,this._config.withCredentials&&(r.withCredentials=this._config.withCredentials),n||(r.onload=v(this._chunkLoaded,this),r.onerror=v(this._chunkError,this)),r.open(this._config.downloadRequestBody?\"POST\":\"GET\",this._input,!n),this._config.downloadRequestHeaders){var e=this._config.downloadRequestHeaders;for(var t in e)r.setRequestHeader(t,e[t])}if(this._config.chunkSize){var i=this._start+this._config.chunkSize-1;r.setRequestHeader(\"Range\",\"bytes=\"+this._start+\"-\"+i)}try{r.send(this._config.downloadRequestBody)}catch(e){this._chunkError(e.message)}n&&0===r.status&&this._chunkError()}},this._chunkLoaded=function(){4===r.readyState&&(r.status<200||400<=r.status?this._chunkError():(this._start+=this._config.chunkSize?this._config.chunkSize:r.responseText.length,this._finished=!this._config.chunkSize||this._start>=function(e){var t=e.getResponseHeader(\"Content-Range\");if(null===t)return-1;return parseInt(t.substring(t.lastIndexOf(\"/\")+1))}(r),this.parseChunk(r.responseText)))},this._chunkError=function(e){var t=r.statusText||e;this._sendError(new Error(t))}}function c(e){var r,n;(e=e||{}).chunkSize||(e.chunkSize=b.LocalChunkSize),u.call(this,e);var s=\"undefined\"!=typeof FileReader;this.stream=function(e){this._input=e,n=e.slice||e.webkitSlice||e.mozSlice,s?((r=new FileReader).onload=v(this._chunkLoaded,this),r.onerror=v(this._chunkError,this)):r=new FileReaderSync,this._nextChunk()},this._nextChunk=function(){this._finished||this._config.preview&&!(this._rowCount<this._config.preview)||this._readChunk()},this._readChunk=function(){var e=this._input;if(this._config.chunkSize){var t=Math.min(this._start+this._config.chunkSize,this._input.size);e=n.call(e,this._start,t)}var i=r.readAsText(e,this._config.encoding);s||this._chunkLoaded({target:{result:i}})},this._chunkLoaded=function(e){this._start+=this._config.chunkSize,this._finished=!this._config.chunkSize||this._start>=this._input.size,this.parseChunk(e.target.result)},this._chunkError=function(){this._sendError(r.error)}}function p(e){var i;u.call(this,e=e||{}),this.stream=function(e){return i=e,this._nextChunk()},this._nextChunk=function(){if(!this._finished){var e,t=this._config.chunkSize;return t?(e=i.substring(0,t),i=i.substring(t)):(e=i,i=\"\"),this._finished=!i,this.parseChunk(e)}}}function g(e){u.call(this,e=e||{});var t=[],i=!0,r=!1;this.pause=function(){u.prototype.pause.apply(this,arguments),this._input.pause()},this.resume=function(){u.prototype.resume.apply(this,arguments),this._input.resume()},this.stream=function(e){this._input=e,this._input.on(\"data\",this._streamData),this._input.on(\"end\",this._streamEnd),this._input.on(\"error\",this._streamError)},this._checkIsFinished=function(){r&&1===t.length&&(this._finished=!0)},this._nextChunk=function(){this._checkIsFinished(),t.length?this.parseChunk(t.shift()):i=!0},this._streamData=v(function(e){try{t.push(\"string\"==typeof e?e:e.toString(this._config.encoding)),i&&(i=!1,this._checkIsFinished(),this.parseChunk(t.shift()))}catch(e){this._streamError(e)}},this),this._streamError=v(function(e){this._streamCleanUp(),this._sendError(e)},this),this._streamEnd=v(function(){this._streamCleanUp(),r=!0,this._streamData(\"\")},this),this._streamCleanUp=v(function(){this._input.removeListener(\"data\",this._streamData),this._input.removeListener(\"end\",this._streamEnd),this._input.removeListener(\"error\",this._streamError)},this)}function i(m){var a,o,h,r=Math.pow(2,53),n=-r,s=/^\\s*-?(\\d+\\.?|\\.\\d+|\\d+\\.\\d+)([eE][-+]?\\d+)?\\s*$/,u=/^(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d\\.\\d+([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z))$/,t=this,i=0,f=0,d=!1,e=!1,l=[],c={data:[],errors:[],meta:{}};if(M(m.step)){var p=m.step;m.step=function(e){if(c=e,_())g();else{if(g(),0===c.data.length)return;i+=e.data.length,m.preview&&i>m.preview?o.abort():(c.data=c.data[0],p(c,t))}}}function y(e){return\"greedy\"===m.skipEmptyLines?\"\"===e.join(\"\").trim():1===e.length&&0===e[0].length}function g(){if(c&&h&&(k(\"Delimiter\",\"UndetectableDelimiter\",\"Unable to auto-detect delimiting character; defaulted to '\"+b.DefaultDelimiter+\"'\"),h=!1),m.skipEmptyLines)for(var e=0;e<c.data.length;e++)y(c.data[e])&&c.data.splice(e--,1);return _()&&function(){if(!c)return;function e(e,t){M(m.transformHeader)&&(e=m.transformHeader(e,t)),l.push(e)}if(Array.isArray(c.data[0])){for(var t=0;_()&&t<c.data.length;t++)c.data[t].forEach(e);c.data.splice(0,1)}else c.data.forEach(e)}(),function(){if(!c||!m.header&&!m.dynamicTyping&&!m.transform)return c;function e(e,t){var i,r=m.header?{}:[];for(i=0;i<e.length;i++){var n=i,s=e[i];m.header&&(n=i>=l.length?\"__parsed_extra\":l[i]),m.transform&&(s=m.transform(s,n)),s=v(n,s),\"__parsed_extra\"===n?(r[n]=r[n]||[],r[n].push(s)):r[n]=s}return m.header&&(i>l.length?k(\"FieldMismatch\",\"TooManyFields\",\"Too many fields: expected \"+l.length+\" fields but parsed \"+i,f+t):i<l.length&&k(\"FieldMismatch\",\"TooFewFields\",\"Too few fields: expected \"+l.length+\" fields but parsed \"+i,f+t)),r}var t=1;!c.data.length||Array.isArray(c.data[0])?(c.data=c.data.map(e),t=c.data.length):c.data=e(c.data,0);m.header&&c.meta&&(c.meta.fields=l);return f+=t,c}()}function _(){return m.header&&0===l.length}function v(e,t){return i=e,m.dynamicTypingFunction&&void 0===m.dynamicTyping[i]&&(m.dynamicTyping[i]=m.dynamicTypingFunction(i)),!0===(m.dynamicTyping[i]||m.dynamicTyping)?\"true\"===t||\"TRUE\"===t||\"false\"!==t&&\"FALSE\"!==t&&(function(e){if(s.test(e)){var t=parseFloat(e);if(n<t&&t<r)return!0}return!1}(t)?parseFloat(t):u.test(t)?new Date(t):\"\"===t?null:t):t;var i}function k(e,t,i,r){var n={type:e,code:t,message:i};void 0!==r&&(n.row=r),c.errors.push(n)}this.parse=function(e,t,i){var r=m.quoteChar||'\"';if(m.newline||(m.newline=function(e,t){e=e.substring(0,1048576);var i=new RegExp(j(t)+\"([^]*?)\"+j(t),\"gm\"),r=(e=e.replace(i,\"\")).split(\"\\r\"),n=e.split(\"\\n\"),s=1<n.length&&n[0].length<r[0].length;if(1===r.length||s)return\"\\n\";for(var a=0,o=0;o<r.length;o++)\"\\n\"===r[o][0]&&a++;return a>=r.length/2?\"\\r\\n\":\"\\r\"}(e,r)),h=!1,m.delimiter)M(m.delimiter)&&(m.delimiter=m.delimiter(e),c.meta.delimiter=m.delimiter);else{var n=function(e,t,i,r,n){var s,a,o,h;n=n||[\",\",\"\\t\",\"|\",\";\",b.RECORD_SEP,b.UNIT_SEP];for(var u=0;u<n.length;u++){var f=n[u],d=0,l=0,c=0;o=void 0;for(var p=new E({comments:r,delimiter:f,newline:t,preview:10}).parse(e),g=0;g<p.data.length;g++)if(i&&y(p.data[g]))c++;else{var _=p.data[g].length;l+=_,void 0!==o?0<_&&(d+=Math.abs(_-o),o=_):o=_}0<p.data.length&&(l/=p.data.length-c),(void 0===a||d<=a)&&(void 0===h||h<l)&&1.99<l&&(a=d,s=f,h=l)}return{successful:!!(m.delimiter=s),bestDelimiter:s}}(e,m.newline,m.skipEmptyLines,m.comments,m.delimitersToGuess);n.successful?m.delimiter=n.bestDelimiter:(h=!0,m.delimiter=b.DefaultDelimiter),c.meta.delimiter=m.delimiter}var s=w(m);return m.preview&&m.header&&s.preview++,a=e,o=new E(s),c=o.parse(a,t,i),g(),d?{meta:{paused:!0}}:c||{meta:{paused:!1}}},this.paused=function(){return d},this.pause=function(){d=!0,o.abort(),a=M(m.chunk)?\"\":a.substring(o.getCharIndex())},this.resume=function(){t.streamer._halted?(d=!1,t.streamer.parseChunk(a,!0)):setTimeout(t.resume,3)},this.aborted=function(){return e},this.abort=function(){e=!0,o.abort(),c.meta.aborted=!0,M(m.complete)&&m.complete(c),a=\"\"}}function j(e){return e.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\")}function E(e){var S,O=(e=e||{}).delimiter,x=e.newline,I=e.comments,T=e.step,D=e.preview,A=e.fastMode,L=S=void 0===e.quoteChar?'\"':e.quoteChar;if(void 0!==e.escapeChar&&(L=e.escapeChar),(\"string\"!=typeof O||-1<b.BAD_DELIMITERS.indexOf(O))&&(O=\",\"),I===O)throw new Error(\"Comment character same as delimiter\");!0===I?I=\"#\":(\"string\"!=typeof I||-1<b.BAD_DELIMITERS.indexOf(I))&&(I=!1),\"\\n\"!==x&&\"\\r\"!==x&&\"\\r\\n\"!==x&&(x=\"\\n\");var F=0,z=!1;this.parse=function(r,t,i){if(\"string\"!=typeof r)throw new Error(\"Input must be a string\");var n=r.length,e=O.length,s=x.length,a=I.length,o=M(T),h=[],u=[],f=[],d=F=0;if(!r)return C();if(A||!1!==A&&-1===r.indexOf(S)){for(var l=r.split(x),c=0;c<l.length;c++){if(f=l[c],F+=f.length,c!==l.length-1)F+=x.length;else if(i)return C();if(!I||f.substring(0,a)!==I){if(o){if(h=[],k(f.split(O)),R(),z)return C()}else k(f.split(O));if(D&&D<=c)return h=h.slice(0,D),C(!0)}}return C()}for(var p=r.indexOf(O,F),g=r.indexOf(x,F),_=new RegExp(j(L)+j(S),\"g\"),m=r.indexOf(S,F);;)if(r[F]!==S)if(I&&0===f.length&&r.substring(F,F+a)===I){if(-1===g)return C();F=g+s,g=r.indexOf(x,F),p=r.indexOf(O,F)}else if(-1!==p&&(p<g||-1===g))f.push(r.substring(F,p)),F=p+e,p=r.indexOf(O,F);else{if(-1===g)break;if(f.push(r.substring(F,g)),w(g+s),o&&(R(),z))return C();if(D&&h.length>=D)return C(!0)}else for(m=F,F++;;){if(-1===(m=r.indexOf(S,m+1)))return i||u.push({type:\"Quotes\",code:\"MissingQuotes\",message:\"Quoted field unterminated\",row:h.length,index:F}),E();if(m===n-1)return E(r.substring(F,m).replace(_,S));if(S!==L||r[m+1]!==L){if(S===L||0===m||r[m-1]!==L){-1!==p&&p<m+1&&(p=r.indexOf(O,m+1)),-1!==g&&g<m+1&&(g=r.indexOf(x,m+1));var y=b(-1===g?p:Math.min(p,g));if(r[m+1+y]===O){f.push(r.substring(F,m).replace(_,S)),r[F=m+1+y+e]!==S&&(m=r.indexOf(S,F)),p=r.indexOf(O,F),g=r.indexOf(x,F);break}var v=b(g);if(r.substring(m+1+v,m+1+v+s)===x){if(f.push(r.substring(F,m).replace(_,S)),w(m+1+v+s),p=r.indexOf(O,F),m=r.indexOf(S,F),o&&(R(),z))return C();if(D&&h.length>=D)return C(!0);break}u.push({type:\"Quotes\",code:\"InvalidQuotes\",message:\"Trailing quote on quoted field is malformed\",row:h.length,index:F}),m++}}else m++}return E();function k(e){h.push(e),d=F}function b(e){var t=0;if(-1!==e){var i=r.substring(m+1,e);i&&\"\"===i.trim()&&(t=i.length)}return t}function E(e){return i||(void 0===e&&(e=r.substring(F)),f.push(e),F=n,k(f),o&&R()),C()}function w(e){F=e,k(f),f=[],g=r.indexOf(x,F)}function C(e){return{data:h,errors:u,meta:{delimiter:O,linebreak:x,aborted:z,truncated:!!e,cursor:d+(t||0)}}}function R(){T(C()),h=[],u=[]}},this.abort=function(){z=!0},this.getCharIndex=function(){return F}}function _(e){var t=e.data,i=a[t.workerId],r=!1;if(t.error)i.userError(t.error,t.file);else if(t.results&&t.results.data){var n={abort:function(){r=!0,m(t.workerId,{data:[],errors:[],meta:{aborted:!0}})},pause:y,resume:y};if(M(i.userStep)){for(var s=0;s<t.results.data.length&&(i.userStep({data:t.results.data[s],errors:t.results.errors,meta:t.results.meta},n),!r);s++);delete t.results}else M(i.userChunk)&&(i.userChunk(t.results,n,t.file),delete t.results)}t.finished&&!r&&m(t.workerId,t.results)}function m(e,t){var i=a[e];M(i.userComplete)&&i.userComplete(t),i.terminate(),delete a[e]}function y(){throw new Error(\"Not implemented.\")}function w(e){if(\"object\"!=typeof e||null===e)return e;var t=Array.isArray(e)?[]:{};for(var i in e)t[i]=w(e[i]);return t}function v(e,t){return function(){e.apply(t,arguments)}}function M(e){return\"function\"==typeof e}return o&&(f.onmessage=function(e){var t=e.data;void 0===b.WORKER_ID&&t&&(b.WORKER_ID=t.workerId);if(\"string\"==typeof t.input)f.postMessage({workerId:b.WORKER_ID,results:b.parse(t.input,t.config),finished:!0});else if(f.File&&t.input instanceof File||t.input instanceof Object){var i=b.parse(t.input,t.config);i&&f.postMessage({workerId:b.WORKER_ID,results:i,finished:!0})}}),(l.prototype=Object.create(u.prototype)).constructor=l,(c.prototype=Object.create(u.prototype)).constructor=c,(p.prototype=Object.create(p.prototype)).constructor=p,(g.prototype=Object.create(u.prototype)).constructor=g,b});","import interval from \"./interval.js\";\nimport {durationSecond} from \"./duration.js\";\n\nvar second = interval(function(date) {\n  date.setTime(date - date.getMilliseconds());\n}, function(date, step) {\n  date.setTime(+date + step * durationSecond);\n}, function(start, end) {\n  return (end - start) / durationSecond;\n}, function(date) {\n  return date.getUTCSeconds();\n});\n\nexport default second;\nexport var seconds = second.range;\n","/**\n * Capitalize first letter of string\n * @private\n * @param  {string} - String\n * @return {string} - String with first letter capitalized\n */\n export function capitalize (str) {\n  return str.charAt(0).toUpperCase() + str.substr(1)\n}\n\n/**\n * Clamp position between a range\n * @param  {number} - Value to be clamped\n * @param  {number} - Minimum value in range\n * @param  {number} - Maximum value in range\n * @return {number} - Clamped value\n */\nexport function clamp (value, min, max) {\n  return Math.min(Math.max(value, min), max)\n}","import getAlternativeAreaNames from '../../util/getAlternativeAreaNames';\n\nexport const getAreaList = data =>\n  [...new Set(data.map(({ area }) => area))].map(area => ({\n    display: area,\n    value: data.find(d => d.area === area).code.toLowerCase(),\n    alternatives: getAlternativeAreaNames(area),\n  }));\n\nexport const areaCodeToDisplay = (area, areaList) => {\n  const areaEntry = areaList.find(({ value }) => area === value);\n  return areaEntry?.display;\n};\n\nexport const getAreasInData = (data, attributeToVisualise) => {\n  const dataWithValues = data\n    .map(({ area, ...rest }) => ({ area, value: rest[attributeToVisualise] }))\n    .filter(({ value }) => value !== undefined);\n\n  return [...new Set(dataWithValues.map(({ area }) => area))];\n};\n\nexport const getAttributeFromOptions = ({\n  populationAdjusted,\n  cumulative,\n  rollingAverage,\n  doses,\n}) => {\n  if (doses === 'total') {\n    if (populationAdjusted) {\n      if (cumulative) {\n        return 'total_doses_per_100';\n      }\n      return rollingAverage ? 'vaccinations_new_7ma_perM' : 'vaccinations_new_perM';\n    }\n    if (cumulative) {\n      return 'vaccinations';\n    }\n    return rollingAverage ? 'vaccinations_new_7ma' : 'vaccinations_new';\n  }\n  if (doses === 'first') {\n    if (populationAdjusted) {\n      if (cumulative) {\n        return 'percent_dose1_vaccinated';\n      }\n      return rollingAverage ? 'people_vaccinated_new_7ma_perM' : 'people_vaccinated_new_perM';\n    }\n    if (cumulative) {\n      return 'people_vaccinated';\n    }\n    return rollingAverage ? 'people_vaccinated_new_7ma' : 'people_vaccinated_new';\n  }\n  if (doses === 'booster') {\n    if (populationAdjusted) {\n      if (cumulative) {\n        return 'booster_doses_per_100';\n      }\n      return rollingAverage ? 'boosters_new_7ma_perM' : 'boosters_new_perM';\n    }\n    if (cumulative) {\n      return 'boosters';\n    }\n    return rollingAverage ? 'boosters_new_7ma' : 'boosters_new';\n  }\n  if (populationAdjusted) {\n    if (cumulative) {\n      return 'percent_fully_vaccinated';\n    }\n    return rollingAverage\n      ? 'people_fully_vaccinated_new_7ma_perM'\n      : 'people_fully_vaccinated_new_perM';\n  }\n  if (cumulative) {\n    return 'people_fully_vaccinated';\n  }\n  return rollingAverage ? 'people_fully_vaccinated_new_7ma' : 'people_fully_vaccinated_new';\n};\n\nexport default null;\n","import _pt from \"prop-types\";\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport debounce from 'lodash/debounce';\nimport React, { useEffect, useMemo, useRef, useState } from 'react';\nimport ResizeObserver from 'resize-observer-polyfill';\nexport default function ParentSize(_ref) {\n  var className = _ref.className,\n      children = _ref.children,\n      _ref$debounceTime = _ref.debounceTime,\n      debounceTime = _ref$debounceTime === void 0 ? 300 : _ref$debounceTime,\n      _ref$ignoreDimensions = _ref.ignoreDimensions,\n      ignoreDimensions = _ref$ignoreDimensions === void 0 ? [] : _ref$ignoreDimensions,\n      _ref$parentSizeStyles = _ref.parentSizeStyles,\n      parentSizeStyles = _ref$parentSizeStyles === void 0 ? {\n    width: '100%',\n    height: '100%'\n  } : _ref$parentSizeStyles,\n      _ref$enableDebounceLe = _ref.enableDebounceLeadingCall,\n      enableDebounceLeadingCall = _ref$enableDebounceLe === void 0 ? true : _ref$enableDebounceLe,\n      restProps = _objectWithoutPropertiesLoose(_ref, [\"className\", \"children\", \"debounceTime\", \"ignoreDimensions\", \"parentSizeStyles\", \"enableDebounceLeadingCall\"]);\n\n  var target = useRef(null);\n  var animationFrameID = useRef(0);\n\n  var _useState = useState({\n    width: 0,\n    height: 0,\n    top: 0,\n    left: 0\n  }),\n      state = _useState[0],\n      setState = _useState[1];\n\n  var resize = useMemo(function () {\n    var normalized = Array.isArray(ignoreDimensions) ? ignoreDimensions : [ignoreDimensions];\n    return debounce(function (incoming) {\n      setState(function (existing) {\n        var stateKeys = Object.keys(existing);\n        var keysWithChanges = stateKeys.filter(function (key) {\n          return existing[key] !== incoming[key];\n        });\n        var shouldBail = keysWithChanges.every(function (key) {\n          return normalized.includes(key);\n        });\n        return shouldBail ? existing : incoming;\n      });\n    }, debounceTime, {\n      leading: enableDebounceLeadingCall\n    });\n  }, [debounceTime, enableDebounceLeadingCall, ignoreDimensions]);\n  useEffect(function () {\n    var observer = new ResizeObserver(function (entries\n    /** , observer */\n    ) {\n      if (entries === void 0) {\n        entries = [];\n      }\n\n      entries.forEach(function (entry) {\n        var _entry$contentRect = entry.contentRect,\n            left = _entry$contentRect.left,\n            top = _entry$contentRect.top,\n            width = _entry$contentRect.width,\n            height = _entry$contentRect.height;\n        animationFrameID.current = window.requestAnimationFrame(function () {\n          resize({\n            width: width,\n            height: height,\n            top: top,\n            left: left\n          });\n        });\n      });\n    });\n    if (target.current) observer.observe(target.current);\n    return function () {\n      window.cancelAnimationFrame(animationFrameID.current);\n      observer.disconnect();\n      if (resize && resize.cancel) resize.cancel();\n    };\n  }, [resize]);\n  return /*#__PURE__*/React.createElement(\"div\", _extends({\n    style: parentSizeStyles,\n    ref: target,\n    className: className\n  }, restProps), children(_extends({}, state, {\n    ref: target.current,\n    resize: resize\n  })));\n}\nParentSize.propTypes = {\n  className: _pt.string,\n  debounceTime: _pt.number,\n  enableDebounceLeadingCall: _pt.bool,\n  ignoreDimensions: _pt.oneOfType([_pt.any, _pt.arrayOf(_pt.any)]),\n  children: _pt.func.isRequired\n};","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","'use strict'\n\nmodule.exports = decimal\n\n// Check if the given character code, or the character code at the first\n// character, is decimal.\nfunction decimal(character) {\n  var code = typeof character === 'string' ? character.charCodeAt(0) : character\n\n  return code >= 48 && code <= 57 /* 0-9 */\n}\n","'use strict'\n\nmodule.exports = visit\n\nvar visitParents = require('unist-util-visit-parents')\n\nvar CONTINUE = visitParents.CONTINUE\nvar SKIP = visitParents.SKIP\nvar EXIT = visitParents.EXIT\n\nvisit.CONTINUE = CONTINUE\nvisit.SKIP = SKIP\nvisit.EXIT = EXIT\n\nfunction visit(tree, test, visitor, reverse) {\n  if (typeof test === 'function' && typeof visitor !== 'function') {\n    reverse = visitor\n    visitor = test\n    test = null\n  }\n\n  visitParents(tree, test, overload, reverse)\n\n  function overload(node, parents) {\n    var parent = parents[parents.length - 1]\n    var index = parent ? parent.children.indexOf(node) : null\n    return visitor(node, index, parent)\n  }\n}\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n","var eq = require('./eq');\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n  var length = array.length;\n  while (length--) {\n    if (eq(array[length][0], key)) {\n      return length;\n    }\n  }\n  return -1;\n}\n\nmodule.exports = assocIndexOf;\n","var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n  var data = map.__data__;\n  return isKeyable(key)\n    ? data[typeof key == 'string' ? 'string' : 'hash']\n    : data.map;\n}\n\nmodule.exports = getMapData;\n","export { default as Point } from './Point';","import React, { createElement } from 'react';\nimport { Group } from '@visx/group';\nimport { css } from '@emotion/core';\nimport {\n  goalpostsStyles,\n  stabRuleStyles,\n  stabRuleStylesSocial,\n  subtitleStylesBase,\n  subtitleStylesPrint,\n  subtitleStylesSocial,\n  subtitleStylesVideo,\n  titleStylesBase,\n  titleStylesPrint,\n  titleStylesSocial,\n  titleStylesVideo,\n} from './styles';\nimport { chartTopperPropTypes } from '../prop-types';\nimport { chartTopperDefaultProps } from '../default-props';\n\nconst titleStylesMap = {\n  print: titleStylesPrint,\n  social: titleStylesSocial,\n  video: titleStylesVideo,\n  web: null,\n};\nconst subtitleStylesMap = {\n  print: subtitleStylesPrint,\n  social: subtitleStylesSocial,\n  video: subtitleStylesVideo,\n  web: null,\n};\n\nconst ChartTopper = ({\n  height,\n  margin,\n  stabRule,\n  subtitle,\n  subtitleFontSize,\n  subtitleLineHeight,\n  subtitleMarkupCustom,\n  subtitlePosition,\n  subtitleStylesCustom,\n  title,\n  titleFontSize,\n  titleLineHeight,\n  titleMarkupCustom,\n  titlePosition,\n  titleStylesCustom,\n  type,\n  width,\n}) => {\n  return (\n    <Group>\n      {/* Stab rule */}\n      {typeof stabRule === 'boolean' && stabRule ? (\n        <rect\n          css={\n            type === 'social'\n              ? css`\n                  ${stabRuleStylesSocial};\n                  transform: translate(${margin.left}px, ${margin.left}px);\n                `\n              : stabRuleStyles\n          }\n          data-id=\"accent-bar\"\n          height=\"4\"\n          width=\"60\"\n        />\n      ) : (\n        stabRule && createElement(stabRule)\n      )}\n\n      {/* Goalposts for print */}\n      {type === 'print' && (\n        <path\n          css={goalpostsStyles}\n          d={[\n            `M 0, ${height} L ${width}, ${height}`,\n            `M 0, 15 L 0, 0 L ${width}, 0 L ${width}, 15`,\n          ]}\n        />\n      )}\n\n      {/* Title */}\n      <text\n        css={css`\n          font-size: ${titleFontSize}px;\n          ${titleStylesBase};\n          ${titleStylesMap[type]};\n          ${titleStylesCustom};\n        `}\n        data-id={`ft-webgraphic-${type}__title`}\n      >\n        {title && !titleMarkupCustom\n          ? title.split('|').map((line, i) => (\n              <tspan\n                data-id={`ft-webgraphic-${type}__title-line-${i}`}\n                key={`ft-webgraphic-${type}__title-line-${i}`} // eslint-disable-line react/no-array-index-key\n                x={titlePosition.x}\n                y={titlePosition.y + i * titleLineHeight}\n              >\n                {line}\n              </tspan>\n            ))\n          : title &&\n            title.split('|').map((line, i) => (\n              <tspan\n                dangerouslySetInnerHTML={{ __html: line }} // eslint-disable-line react/no-danger\n                data-id={`ft-webgraphic-${type}__title-line-${i}`}\n                key={`ft-webgraphic-${type}__title-line-${i}`} // eslint-disable-line react/no-array-index-key\n                x={titlePosition.x}\n                y={titlePosition.y + i * titleLineHeight}\n              />\n            ))}\n      </text>\n\n      {/* Subtitle */}\n      <text\n        css={css`\n          font-size: ${subtitleFontSize}px;\n          ${subtitleStylesBase};\n          ${subtitleStylesMap[type]};\n          ${subtitleStylesCustom};\n        `}\n        data-id={`ft-webgraphic-${type}__subtitle`}\n      >\n        {subtitle && !subtitleMarkupCustom\n          ? subtitle.split('|').map((line, i) => (\n              <tspan\n                data-id={`ft-webgraphic-${type}__subtitle-line-${i}`}\n                key={`ft-webgraphic-${type}__subtitle-line-${i}`} // eslint-disable-line react/no-array-index-key\n                x={subtitlePosition.x}\n                y={\n                  title && title.split('|').length > 1\n                    ? subtitlePosition.y +\n                      (title.split('|').length - 1) * titleLineHeight +\n                      i * subtitleLineHeight\n                    : subtitlePosition.y + i * subtitleLineHeight\n                }\n              >\n                {line}\n              </tspan>\n            ))\n          : subtitle &&\n            subtitle.split('|').map((line, i) => (\n              <tspan\n                dangerouslySetInnerHTML={{ __html: line }}\n                data-id={`ft-webgraphic-${type}__subtitle-line-${i}`}\n                key={`ft-webgraphic-${type}__subtitle-line-${i}`} // eslint-disable-line react/no-array-index-key\n                x={subtitlePosition.x}\n                y={\n                  title && title.split('|').length > 1\n                    ? subtitlePosition.y +\n                      (title.split('|').length - 1) * titleLineHeight +\n                      i * subtitleLineHeight\n                    : subtitlePosition.y + i * subtitleLineHeight\n                }\n              />\n            ))}\n      </text>\n    </Group>\n  );\n};\n\nChartTopper.propTypes = chartTopperPropTypes;\nChartTopper.defaultProps = chartTopperDefaultProps;\n\nexport default ChartTopper;\n","/**\n * @file\n * RegressionLine geometry\n * Code from https://gist.github.com/isaaguilar/fb92517c1ce878f7d3780cf9aa74a709\n */\n\nimport React, { useContext } from 'react';\nimport { Line } from '@visx/shape';\nimport { PlotContext } from '../chart-frame/plot-context';\nimport { regressionLineComponentPropTypes } from '../prop-types';\n\nconst linearRegression = (y, x) => {\n  const lr = {};\n  const n = y.length;\n  let sumX = 0;\n  let sumY = 0;\n  let sumXY = 0;\n  let sumXX = 0;\n  let sumYY = 0;\n\n  // eslint-disable-next-line no-plusplus\n  for (let i = 0; i < y.length; i++) {\n    sumX += x[i];\n    sumY += y[i];\n    sumXY += x[i] * y[i];\n    sumXX += x[i] * x[i];\n    sumYY += y[i] * y[i];\n  }\n\n  lr.slope = (n * sumXY - sumX * sumY) / (n * sumXX - sumX * sumX);\n  lr.intercept = (sumY - lr.slope * sumX) / n;\n  // eslint-disable-next-line no-restricted-properties\n  lr.r2 = Math.pow(\n    (n * sumXY - sumX * sumY) / Math.sqrt((n * sumXX - sumX * sumX) * (n * sumYY - sumY * sumY)),\n    2\n  );\n\n  // eslint-disable-next-line no-shadow\n  return x => {\n    return lr.slope * x + lr.intercept;\n  };\n};\n\nconst RegressionLine = props => {\n  const { data, xVariable, yVariable, xScale, yScale } = props;\n  const { width, height } = useContext(PlotContext);\n  xScale.range([0, width]);\n  yScale.range([height, 0]);\n\n  let xCoords = [];\n  let yCoords = [];\n  if (data[0].length) {\n    xCoords = data[0].map(n => n[xVariable]);\n    yCoords = data[0].map(n => n[yVariable]);\n  }\n\n  const trendline = linearRegression(yCoords, xCoords);\n\n  const lowestX = xCoords[0];\n  const highestX = xCoords[xCoords.length - 1];\n\n  return (\n    <Line\n      from={{ x: xScale(lowestX), y: yScale(trendline(lowestX)) }}\n      to={{ x: xScale(highestX), y: yScale(trendline(highestX)) }}\n      stroke=\"#000\"\n      strokeWidth={1}\n    />\n  );\n};\n\nRegressionLine.propTypes = regressionLineComponentPropTypes;\n\nexport default RegressionLine;\n","import React from 'react';\nimport Card from '@financial-times/g-components/card';\nimport './styles.scss';\n\nconst BasicCard = ({ children, title }) => {\n  return (\n    <Card className=\"g-basic-card\">\n      {title && <h3 className=\"g-basic-card__title\">{title}</h3>}\n      {children}\n    </Card>\n  );\n};\n\nexport default BasicCard;\n","/**\r\n * A collection of shims that provide minimal functionality of the ES6 collections.\r\n *\r\n * These implementations are not meant to be used outside of the ResizeObserver\r\n * modules as they cover only a limited range of use cases.\r\n */\r\n/* eslint-disable require-jsdoc, valid-jsdoc */\r\nvar MapShim = (function () {\r\n    if (typeof Map !== 'undefined') {\r\n        return Map;\r\n    }\r\n    /**\r\n     * Returns index in provided array that matches the specified key.\r\n     *\r\n     * @param {Array<Array>} arr\r\n     * @param {*} key\r\n     * @returns {number}\r\n     */\r\n    function getIndex(arr, key) {\r\n        var result = -1;\r\n        arr.some(function (entry, index) {\r\n            if (entry[0] === key) {\r\n                result = index;\r\n                return true;\r\n            }\r\n            return false;\r\n        });\r\n        return result;\r\n    }\r\n    return /** @class */ (function () {\r\n        function class_1() {\r\n            this.__entries__ = [];\r\n        }\r\n        Object.defineProperty(class_1.prototype, \"size\", {\r\n            /**\r\n             * @returns {boolean}\r\n             */\r\n            get: function () {\r\n                return this.__entries__.length;\r\n            },\r\n            enumerable: true,\r\n            configurable: true\r\n        });\r\n        /**\r\n         * @param {*} key\r\n         * @returns {*}\r\n         */\r\n        class_1.prototype.get = function (key) {\r\n            var index = getIndex(this.__entries__, key);\r\n            var entry = this.__entries__[index];\r\n            return entry && entry[1];\r\n        };\r\n        /**\r\n         * @param {*} key\r\n         * @param {*} value\r\n         * @returns {void}\r\n         */\r\n        class_1.prototype.set = function (key, value) {\r\n            var index = getIndex(this.__entries__, key);\r\n            if (~index) {\r\n                this.__entries__[index][1] = value;\r\n            }\r\n            else {\r\n                this.__entries__.push([key, value]);\r\n            }\r\n        };\r\n        /**\r\n         * @param {*} key\r\n         * @returns {void}\r\n         */\r\n        class_1.prototype.delete = function (key) {\r\n            var entries = this.__entries__;\r\n            var index = getIndex(entries, key);\r\n            if (~index) {\r\n                entries.splice(index, 1);\r\n            }\r\n        };\r\n        /**\r\n         * @param {*} key\r\n         * @returns {void}\r\n         */\r\n        class_1.prototype.has = function (key) {\r\n            return !!~getIndex(this.__entries__, key);\r\n        };\r\n        /**\r\n         * @returns {void}\r\n         */\r\n        class_1.prototype.clear = function () {\r\n            this.__entries__.splice(0);\r\n        };\r\n        /**\r\n         * @param {Function} callback\r\n         * @param {*} [ctx=null]\r\n         * @returns {void}\r\n         */\r\n        class_1.prototype.forEach = function (callback, ctx) {\r\n            if (ctx === void 0) { ctx = null; }\r\n            for (var _i = 0, _a = this.__entries__; _i < _a.length; _i++) {\r\n                var entry = _a[_i];\r\n                callback.call(ctx, entry[1], entry[0]);\r\n            }\r\n        };\r\n        return class_1;\r\n    }());\r\n})();\n\n/**\r\n * Detects whether window and document objects are available in current environment.\r\n */\r\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && window.document === document;\n\n// Returns global object of a current environment.\r\nvar global$1 = (function () {\r\n    if (typeof global !== 'undefined' && global.Math === Math) {\r\n        return global;\r\n    }\r\n    if (typeof self !== 'undefined' && self.Math === Math) {\r\n        return self;\r\n    }\r\n    if (typeof window !== 'undefined' && window.Math === Math) {\r\n        return window;\r\n    }\r\n    // eslint-disable-next-line no-new-func\r\n    return Function('return this')();\r\n})();\n\n/**\r\n * A shim for the requestAnimationFrame which falls back to the setTimeout if\r\n * first one is not supported.\r\n *\r\n * @returns {number} Requests' identifier.\r\n */\r\nvar requestAnimationFrame$1 = (function () {\r\n    if (typeof requestAnimationFrame === 'function') {\r\n        // It's required to use a bounded function because IE sometimes throws\r\n        // an \"Invalid calling object\" error if rAF is invoked without the global\r\n        // object on the left hand side.\r\n        return requestAnimationFrame.bind(global$1);\r\n    }\r\n    return function (callback) { return setTimeout(function () { return callback(Date.now()); }, 1000 / 60); };\r\n})();\n\n// Defines minimum timeout before adding a trailing call.\r\nvar trailingTimeout = 2;\r\n/**\r\n * Creates a wrapper function which ensures that provided callback will be\r\n * invoked only once during the specified delay period.\r\n *\r\n * @param {Function} callback - Function to be invoked after the delay period.\r\n * @param {number} delay - Delay after which to invoke callback.\r\n * @returns {Function}\r\n */\r\nfunction throttle (callback, delay) {\r\n    var leadingCall = false, trailingCall = false, lastCallTime = 0;\r\n    /**\r\n     * Invokes the original callback function and schedules new invocation if\r\n     * the \"proxy\" was called during current request.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    function resolvePending() {\r\n        if (leadingCall) {\r\n            leadingCall = false;\r\n            callback();\r\n        }\r\n        if (trailingCall) {\r\n            proxy();\r\n        }\r\n    }\r\n    /**\r\n     * Callback invoked after the specified delay. It will further postpone\r\n     * invocation of the original function delegating it to the\r\n     * requestAnimationFrame.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    function timeoutCallback() {\r\n        requestAnimationFrame$1(resolvePending);\r\n    }\r\n    /**\r\n     * Schedules invocation of the original function.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    function proxy() {\r\n        var timeStamp = Date.now();\r\n        if (leadingCall) {\r\n            // Reject immediately following calls.\r\n            if (timeStamp - lastCallTime < trailingTimeout) {\r\n                return;\r\n            }\r\n            // Schedule new call to be in invoked when the pending one is resolved.\r\n            // This is important for \"transitions\" which never actually start\r\n            // immediately so there is a chance that we might miss one if change\r\n            // happens amids the pending invocation.\r\n            trailingCall = true;\r\n        }\r\n        else {\r\n            leadingCall = true;\r\n            trailingCall = false;\r\n            setTimeout(timeoutCallback, delay);\r\n        }\r\n        lastCallTime = timeStamp;\r\n    }\r\n    return proxy;\r\n}\n\n// Minimum delay before invoking the update of observers.\r\nvar REFRESH_DELAY = 20;\r\n// A list of substrings of CSS properties used to find transition events that\r\n// might affect dimensions of observed elements.\r\nvar transitionKeys = ['top', 'right', 'bottom', 'left', 'width', 'height', 'size', 'weight'];\r\n// Check if MutationObserver is available.\r\nvar mutationObserverSupported = typeof MutationObserver !== 'undefined';\r\n/**\r\n * Singleton controller class which handles updates of ResizeObserver instances.\r\n */\r\nvar ResizeObserverController = /** @class */ (function () {\r\n    /**\r\n     * Creates a new instance of ResizeObserverController.\r\n     *\r\n     * @private\r\n     */\r\n    function ResizeObserverController() {\r\n        /**\r\n         * Indicates whether DOM listeners have been added.\r\n         *\r\n         * @private {boolean}\r\n         */\r\n        this.connected_ = false;\r\n        /**\r\n         * Tells that controller has subscribed for Mutation Events.\r\n         *\r\n         * @private {boolean}\r\n         */\r\n        this.mutationEventsAdded_ = false;\r\n        /**\r\n         * Keeps reference to the instance of MutationObserver.\r\n         *\r\n         * @private {MutationObserver}\r\n         */\r\n        this.mutationsObserver_ = null;\r\n        /**\r\n         * A list of connected observers.\r\n         *\r\n         * @private {Array<ResizeObserverSPI>}\r\n         */\r\n        this.observers_ = [];\r\n        this.onTransitionEnd_ = this.onTransitionEnd_.bind(this);\r\n        this.refresh = throttle(this.refresh.bind(this), REFRESH_DELAY);\r\n    }\r\n    /**\r\n     * Adds observer to observers list.\r\n     *\r\n     * @param {ResizeObserverSPI} observer - Observer to be added.\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverController.prototype.addObserver = function (observer) {\r\n        if (!~this.observers_.indexOf(observer)) {\r\n            this.observers_.push(observer);\r\n        }\r\n        // Add listeners if they haven't been added yet.\r\n        if (!this.connected_) {\r\n            this.connect_();\r\n        }\r\n    };\r\n    /**\r\n     * Removes observer from observers list.\r\n     *\r\n     * @param {ResizeObserverSPI} observer - Observer to be removed.\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverController.prototype.removeObserver = function (observer) {\r\n        var observers = this.observers_;\r\n        var index = observers.indexOf(observer);\r\n        // Remove observer if it's present in registry.\r\n        if (~index) {\r\n            observers.splice(index, 1);\r\n        }\r\n        // Remove listeners if controller has no connected observers.\r\n        if (!observers.length && this.connected_) {\r\n            this.disconnect_();\r\n        }\r\n    };\r\n    /**\r\n     * Invokes the update of observers. It will continue running updates insofar\r\n     * it detects changes.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverController.prototype.refresh = function () {\r\n        var changesDetected = this.updateObservers_();\r\n        // Continue running updates if changes have been detected as there might\r\n        // be future ones caused by CSS transitions.\r\n        if (changesDetected) {\r\n            this.refresh();\r\n        }\r\n    };\r\n    /**\r\n     * Updates every observer from observers list and notifies them of queued\r\n     * entries.\r\n     *\r\n     * @private\r\n     * @returns {boolean} Returns \"true\" if any observer has detected changes in\r\n     *      dimensions of it's elements.\r\n     */\r\n    ResizeObserverController.prototype.updateObservers_ = function () {\r\n        // Collect observers that have active observations.\r\n        var activeObservers = this.observers_.filter(function (observer) {\r\n            return observer.gatherActive(), observer.hasActive();\r\n        });\r\n        // Deliver notifications in a separate cycle in order to avoid any\r\n        // collisions between observers, e.g. when multiple instances of\r\n        // ResizeObserver are tracking the same element and the callback of one\r\n        // of them changes content dimensions of the observed target. Sometimes\r\n        // this may result in notifications being blocked for the rest of observers.\r\n        activeObservers.forEach(function (observer) { return observer.broadcastActive(); });\r\n        return activeObservers.length > 0;\r\n    };\r\n    /**\r\n     * Initializes DOM listeners.\r\n     *\r\n     * @private\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverController.prototype.connect_ = function () {\r\n        // Do nothing if running in a non-browser environment or if listeners\r\n        // have been already added.\r\n        if (!isBrowser || this.connected_) {\r\n            return;\r\n        }\r\n        // Subscription to the \"Transitionend\" event is used as a workaround for\r\n        // delayed transitions. This way it's possible to capture at least the\r\n        // final state of an element.\r\n        document.addEventListener('transitionend', this.onTransitionEnd_);\r\n        window.addEventListener('resize', this.refresh);\r\n        if (mutationObserverSupported) {\r\n            this.mutationsObserver_ = new MutationObserver(this.refresh);\r\n            this.mutationsObserver_.observe(document, {\r\n                attributes: true,\r\n                childList: true,\r\n                characterData: true,\r\n                subtree: true\r\n            });\r\n        }\r\n        else {\r\n            document.addEventListener('DOMSubtreeModified', this.refresh);\r\n            this.mutationEventsAdded_ = true;\r\n        }\r\n        this.connected_ = true;\r\n    };\r\n    /**\r\n     * Removes DOM listeners.\r\n     *\r\n     * @private\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverController.prototype.disconnect_ = function () {\r\n        // Do nothing if running in a non-browser environment or if listeners\r\n        // have been already removed.\r\n        if (!isBrowser || !this.connected_) {\r\n            return;\r\n        }\r\n        document.removeEventListener('transitionend', this.onTransitionEnd_);\r\n        window.removeEventListener('resize', this.refresh);\r\n        if (this.mutationsObserver_) {\r\n            this.mutationsObserver_.disconnect();\r\n        }\r\n        if (this.mutationEventsAdded_) {\r\n            document.removeEventListener('DOMSubtreeModified', this.refresh);\r\n        }\r\n        this.mutationsObserver_ = null;\r\n        this.mutationEventsAdded_ = false;\r\n        this.connected_ = false;\r\n    };\r\n    /**\r\n     * \"Transitionend\" event handler.\r\n     *\r\n     * @private\r\n     * @param {TransitionEvent} event\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverController.prototype.onTransitionEnd_ = function (_a) {\r\n        var _b = _a.propertyName, propertyName = _b === void 0 ? '' : _b;\r\n        // Detect whether transition may affect dimensions of an element.\r\n        var isReflowProperty = transitionKeys.some(function (key) {\r\n            return !!~propertyName.indexOf(key);\r\n        });\r\n        if (isReflowProperty) {\r\n            this.refresh();\r\n        }\r\n    };\r\n    /**\r\n     * Returns instance of the ResizeObserverController.\r\n     *\r\n     * @returns {ResizeObserverController}\r\n     */\r\n    ResizeObserverController.getInstance = function () {\r\n        if (!this.instance_) {\r\n            this.instance_ = new ResizeObserverController();\r\n        }\r\n        return this.instance_;\r\n    };\r\n    /**\r\n     * Holds reference to the controller's instance.\r\n     *\r\n     * @private {ResizeObserverController}\r\n     */\r\n    ResizeObserverController.instance_ = null;\r\n    return ResizeObserverController;\r\n}());\n\n/**\r\n * Defines non-writable/enumerable properties of the provided target object.\r\n *\r\n * @param {Object} target - Object for which to define properties.\r\n * @param {Object} props - Properties to be defined.\r\n * @returns {Object} Target object.\r\n */\r\nvar defineConfigurable = (function (target, props) {\r\n    for (var _i = 0, _a = Object.keys(props); _i < _a.length; _i++) {\r\n        var key = _a[_i];\r\n        Object.defineProperty(target, key, {\r\n            value: props[key],\r\n            enumerable: false,\r\n            writable: false,\r\n            configurable: true\r\n        });\r\n    }\r\n    return target;\r\n});\n\n/**\r\n * Returns the global object associated with provided element.\r\n *\r\n * @param {Object} target\r\n * @returns {Object}\r\n */\r\nvar getWindowOf = (function (target) {\r\n    // Assume that the element is an instance of Node, which means that it\r\n    // has the \"ownerDocument\" property from which we can retrieve a\r\n    // corresponding global object.\r\n    var ownerGlobal = target && target.ownerDocument && target.ownerDocument.defaultView;\r\n    // Return the local global object if it's not possible extract one from\r\n    // provided element.\r\n    return ownerGlobal || global$1;\r\n});\n\n// Placeholder of an empty content rectangle.\r\nvar emptyRect = createRectInit(0, 0, 0, 0);\r\n/**\r\n * Converts provided string to a number.\r\n *\r\n * @param {number|string} value\r\n * @returns {number}\r\n */\r\nfunction toFloat(value) {\r\n    return parseFloat(value) || 0;\r\n}\r\n/**\r\n * Extracts borders size from provided styles.\r\n *\r\n * @param {CSSStyleDeclaration} styles\r\n * @param {...string} positions - Borders positions (top, right, ...)\r\n * @returns {number}\r\n */\r\nfunction getBordersSize(styles) {\r\n    var positions = [];\r\n    for (var _i = 1; _i < arguments.length; _i++) {\r\n        positions[_i - 1] = arguments[_i];\r\n    }\r\n    return positions.reduce(function (size, position) {\r\n        var value = styles['border-' + position + '-width'];\r\n        return size + toFloat(value);\r\n    }, 0);\r\n}\r\n/**\r\n * Extracts paddings sizes from provided styles.\r\n *\r\n * @param {CSSStyleDeclaration} styles\r\n * @returns {Object} Paddings box.\r\n */\r\nfunction getPaddings(styles) {\r\n    var positions = ['top', 'right', 'bottom', 'left'];\r\n    var paddings = {};\r\n    for (var _i = 0, positions_1 = positions; _i < positions_1.length; _i++) {\r\n        var position = positions_1[_i];\r\n        var value = styles['padding-' + position];\r\n        paddings[position] = toFloat(value);\r\n    }\r\n    return paddings;\r\n}\r\n/**\r\n * Calculates content rectangle of provided SVG element.\r\n *\r\n * @param {SVGGraphicsElement} target - Element content rectangle of which needs\r\n *      to be calculated.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getSVGContentRect(target) {\r\n    var bbox = target.getBBox();\r\n    return createRectInit(0, 0, bbox.width, bbox.height);\r\n}\r\n/**\r\n * Calculates content rectangle of provided HTMLElement.\r\n *\r\n * @param {HTMLElement} target - Element for which to calculate the content rectangle.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getHTMLElementContentRect(target) {\r\n    // Client width & height properties can't be\r\n    // used exclusively as they provide rounded values.\r\n    var clientWidth = target.clientWidth, clientHeight = target.clientHeight;\r\n    // By this condition we can catch all non-replaced inline, hidden and\r\n    // detached elements. Though elements with width & height properties less\r\n    // than 0.5 will be discarded as well.\r\n    //\r\n    // Without it we would need to implement separate methods for each of\r\n    // those cases and it's not possible to perform a precise and performance\r\n    // effective test for hidden elements. E.g. even jQuery's ':visible' filter\r\n    // gives wrong results for elements with width & height less than 0.5.\r\n    if (!clientWidth && !clientHeight) {\r\n        return emptyRect;\r\n    }\r\n    var styles = getWindowOf(target).getComputedStyle(target);\r\n    var paddings = getPaddings(styles);\r\n    var horizPad = paddings.left + paddings.right;\r\n    var vertPad = paddings.top + paddings.bottom;\r\n    // Computed styles of width & height are being used because they are the\r\n    // only dimensions available to JS that contain non-rounded values. It could\r\n    // be possible to utilize the getBoundingClientRect if only it's data wasn't\r\n    // affected by CSS transformations let alone paddings, borders and scroll bars.\r\n    var width = toFloat(styles.width), height = toFloat(styles.height);\r\n    // Width & height include paddings and borders when the 'border-box' box\r\n    // model is applied (except for IE).\r\n    if (styles.boxSizing === 'border-box') {\r\n        // Following conditions are required to handle Internet Explorer which\r\n        // doesn't include paddings and borders to computed CSS dimensions.\r\n        //\r\n        // We can say that if CSS dimensions + paddings are equal to the \"client\"\r\n        // properties then it's either IE, and thus we don't need to subtract\r\n        // anything, or an element merely doesn't have paddings/borders styles.\r\n        if (Math.round(width + horizPad) !== clientWidth) {\r\n            width -= getBordersSize(styles, 'left', 'right') + horizPad;\r\n        }\r\n        if (Math.round(height + vertPad) !== clientHeight) {\r\n            height -= getBordersSize(styles, 'top', 'bottom') + vertPad;\r\n        }\r\n    }\r\n    // Following steps can't be applied to the document's root element as its\r\n    // client[Width/Height] properties represent viewport area of the window.\r\n    // Besides, it's as well not necessary as the <html> itself neither has\r\n    // rendered scroll bars nor it can be clipped.\r\n    if (!isDocumentElement(target)) {\r\n        // In some browsers (only in Firefox, actually) CSS width & height\r\n        // include scroll bars size which can be removed at this step as scroll\r\n        // bars are the only difference between rounded dimensions + paddings\r\n        // and \"client\" properties, though that is not always true in Chrome.\r\n        var vertScrollbar = Math.round(width + horizPad) - clientWidth;\r\n        var horizScrollbar = Math.round(height + vertPad) - clientHeight;\r\n        // Chrome has a rather weird rounding of \"client\" properties.\r\n        // E.g. for an element with content width of 314.2px it sometimes gives\r\n        // the client width of 315px and for the width of 314.7px it may give\r\n        // 314px. And it doesn't happen all the time. So just ignore this delta\r\n        // as a non-relevant.\r\n        if (Math.abs(vertScrollbar) !== 1) {\r\n            width -= vertScrollbar;\r\n        }\r\n        if (Math.abs(horizScrollbar) !== 1) {\r\n            height -= horizScrollbar;\r\n        }\r\n    }\r\n    return createRectInit(paddings.left, paddings.top, width, height);\r\n}\r\n/**\r\n * Checks whether provided element is an instance of the SVGGraphicsElement.\r\n *\r\n * @param {Element} target - Element to be checked.\r\n * @returns {boolean}\r\n */\r\nvar isSVGGraphicsElement = (function () {\r\n    // Some browsers, namely IE and Edge, don't have the SVGGraphicsElement\r\n    // interface.\r\n    if (typeof SVGGraphicsElement !== 'undefined') {\r\n        return function (target) { return target instanceof getWindowOf(target).SVGGraphicsElement; };\r\n    }\r\n    // If it's so, then check that element is at least an instance of the\r\n    // SVGElement and that it has the \"getBBox\" method.\r\n    // eslint-disable-next-line no-extra-parens\r\n    return function (target) { return (target instanceof getWindowOf(target).SVGElement &&\r\n        typeof target.getBBox === 'function'); };\r\n})();\r\n/**\r\n * Checks whether provided element is a document element (<html>).\r\n *\r\n * @param {Element} target - Element to be checked.\r\n * @returns {boolean}\r\n */\r\nfunction isDocumentElement(target) {\r\n    return target === getWindowOf(target).document.documentElement;\r\n}\r\n/**\r\n * Calculates an appropriate content rectangle for provided html or svg element.\r\n *\r\n * @param {Element} target - Element content rectangle of which needs to be calculated.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getContentRect(target) {\r\n    if (!isBrowser) {\r\n        return emptyRect;\r\n    }\r\n    if (isSVGGraphicsElement(target)) {\r\n        return getSVGContentRect(target);\r\n    }\r\n    return getHTMLElementContentRect(target);\r\n}\r\n/**\r\n * Creates rectangle with an interface of the DOMRectReadOnly.\r\n * Spec: https://drafts.fxtf.org/geometry/#domrectreadonly\r\n *\r\n * @param {DOMRectInit} rectInit - Object with rectangle's x/y coordinates and dimensions.\r\n * @returns {DOMRectReadOnly}\r\n */\r\nfunction createReadOnlyRect(_a) {\r\n    var x = _a.x, y = _a.y, width = _a.width, height = _a.height;\r\n    // If DOMRectReadOnly is available use it as a prototype for the rectangle.\r\n    var Constr = typeof DOMRectReadOnly !== 'undefined' ? DOMRectReadOnly : Object;\r\n    var rect = Object.create(Constr.prototype);\r\n    // Rectangle's properties are not writable and non-enumerable.\r\n    defineConfigurable(rect, {\r\n        x: x, y: y, width: width, height: height,\r\n        top: y,\r\n        right: x + width,\r\n        bottom: height + y,\r\n        left: x\r\n    });\r\n    return rect;\r\n}\r\n/**\r\n * Creates DOMRectInit object based on the provided dimensions and the x/y coordinates.\r\n * Spec: https://drafts.fxtf.org/geometry/#dictdef-domrectinit\r\n *\r\n * @param {number} x - X coordinate.\r\n * @param {number} y - Y coordinate.\r\n * @param {number} width - Rectangle's width.\r\n * @param {number} height - Rectangle's height.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction createRectInit(x, y, width, height) {\r\n    return { x: x, y: y, width: width, height: height };\r\n}\n\n/**\r\n * Class that is responsible for computations of the content rectangle of\r\n * provided DOM element and for keeping track of it's changes.\r\n */\r\nvar ResizeObservation = /** @class */ (function () {\r\n    /**\r\n     * Creates an instance of ResizeObservation.\r\n     *\r\n     * @param {Element} target - Element to be observed.\r\n     */\r\n    function ResizeObservation(target) {\r\n        /**\r\n         * Broadcasted width of content rectangle.\r\n         *\r\n         * @type {number}\r\n         */\r\n        this.broadcastWidth = 0;\r\n        /**\r\n         * Broadcasted height of content rectangle.\r\n         *\r\n         * @type {number}\r\n         */\r\n        this.broadcastHeight = 0;\r\n        /**\r\n         * Reference to the last observed content rectangle.\r\n         *\r\n         * @private {DOMRectInit}\r\n         */\r\n        this.contentRect_ = createRectInit(0, 0, 0, 0);\r\n        this.target = target;\r\n    }\r\n    /**\r\n     * Updates content rectangle and tells whether it's width or height properties\r\n     * have changed since the last broadcast.\r\n     *\r\n     * @returns {boolean}\r\n     */\r\n    ResizeObservation.prototype.isActive = function () {\r\n        var rect = getContentRect(this.target);\r\n        this.contentRect_ = rect;\r\n        return (rect.width !== this.broadcastWidth ||\r\n            rect.height !== this.broadcastHeight);\r\n    };\r\n    /**\r\n     * Updates 'broadcastWidth' and 'broadcastHeight' properties with a data\r\n     * from the corresponding properties of the last observed content rectangle.\r\n     *\r\n     * @returns {DOMRectInit} Last observed content rectangle.\r\n     */\r\n    ResizeObservation.prototype.broadcastRect = function () {\r\n        var rect = this.contentRect_;\r\n        this.broadcastWidth = rect.width;\r\n        this.broadcastHeight = rect.height;\r\n        return rect;\r\n    };\r\n    return ResizeObservation;\r\n}());\n\nvar ResizeObserverEntry = /** @class */ (function () {\r\n    /**\r\n     * Creates an instance of ResizeObserverEntry.\r\n     *\r\n     * @param {Element} target - Element that is being observed.\r\n     * @param {DOMRectInit} rectInit - Data of the element's content rectangle.\r\n     */\r\n    function ResizeObserverEntry(target, rectInit) {\r\n        var contentRect = createReadOnlyRect(rectInit);\r\n        // According to the specification following properties are not writable\r\n        // and are also not enumerable in the native implementation.\r\n        //\r\n        // Property accessors are not being used as they'd require to define a\r\n        // private WeakMap storage which may cause memory leaks in browsers that\r\n        // don't support this type of collections.\r\n        defineConfigurable(this, { target: target, contentRect: contentRect });\r\n    }\r\n    return ResizeObserverEntry;\r\n}());\n\nvar ResizeObserverSPI = /** @class */ (function () {\r\n    /**\r\n     * Creates a new instance of ResizeObserver.\r\n     *\r\n     * @param {ResizeObserverCallback} callback - Callback function that is invoked\r\n     *      when one of the observed elements changes it's content dimensions.\r\n     * @param {ResizeObserverController} controller - Controller instance which\r\n     *      is responsible for the updates of observer.\r\n     * @param {ResizeObserver} callbackCtx - Reference to the public\r\n     *      ResizeObserver instance which will be passed to callback function.\r\n     */\r\n    function ResizeObserverSPI(callback, controller, callbackCtx) {\r\n        /**\r\n         * Collection of resize observations that have detected changes in dimensions\r\n         * of elements.\r\n         *\r\n         * @private {Array<ResizeObservation>}\r\n         */\r\n        this.activeObservations_ = [];\r\n        /**\r\n         * Registry of the ResizeObservation instances.\r\n         *\r\n         * @private {Map<Element, ResizeObservation>}\r\n         */\r\n        this.observations_ = new MapShim();\r\n        if (typeof callback !== 'function') {\r\n            throw new TypeError('The callback provided as parameter 1 is not a function.');\r\n        }\r\n        this.callback_ = callback;\r\n        this.controller_ = controller;\r\n        this.callbackCtx_ = callbackCtx;\r\n    }\r\n    /**\r\n     * Starts observing provided element.\r\n     *\r\n     * @param {Element} target - Element to be observed.\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverSPI.prototype.observe = function (target) {\r\n        if (!arguments.length) {\r\n            throw new TypeError('1 argument required, but only 0 present.');\r\n        }\r\n        // Do nothing if current environment doesn't have the Element interface.\r\n        if (typeof Element === 'undefined' || !(Element instanceof Object)) {\r\n            return;\r\n        }\r\n        if (!(target instanceof getWindowOf(target).Element)) {\r\n            throw new TypeError('parameter 1 is not of type \"Element\".');\r\n        }\r\n        var observations = this.observations_;\r\n        // Do nothing if element is already being observed.\r\n        if (observations.has(target)) {\r\n            return;\r\n        }\r\n        observations.set(target, new ResizeObservation(target));\r\n        this.controller_.addObserver(this);\r\n        // Force the update of observations.\r\n        this.controller_.refresh();\r\n    };\r\n    /**\r\n     * Stops observing provided element.\r\n     *\r\n     * @param {Element} target - Element to stop observing.\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverSPI.prototype.unobserve = function (target) {\r\n        if (!arguments.length) {\r\n            throw new TypeError('1 argument required, but only 0 present.');\r\n        }\r\n        // Do nothing if current environment doesn't have the Element interface.\r\n        if (typeof Element === 'undefined' || !(Element instanceof Object)) {\r\n            return;\r\n        }\r\n        if (!(target instanceof getWindowOf(target).Element)) {\r\n            throw new TypeError('parameter 1 is not of type \"Element\".');\r\n        }\r\n        var observations = this.observations_;\r\n        // Do nothing if element is not being observed.\r\n        if (!observations.has(target)) {\r\n            return;\r\n        }\r\n        observations.delete(target);\r\n        if (!observations.size) {\r\n            this.controller_.removeObserver(this);\r\n        }\r\n    };\r\n    /**\r\n     * Stops observing all elements.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverSPI.prototype.disconnect = function () {\r\n        this.clearActive();\r\n        this.observations_.clear();\r\n        this.controller_.removeObserver(this);\r\n    };\r\n    /**\r\n     * Collects observation instances the associated element of which has changed\r\n     * it's content rectangle.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverSPI.prototype.gatherActive = function () {\r\n        var _this = this;\r\n        this.clearActive();\r\n        this.observations_.forEach(function (observation) {\r\n            if (observation.isActive()) {\r\n                _this.activeObservations_.push(observation);\r\n            }\r\n        });\r\n    };\r\n    /**\r\n     * Invokes initial callback function with a list of ResizeObserverEntry\r\n     * instances collected from active resize observations.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverSPI.prototype.broadcastActive = function () {\r\n        // Do nothing if observer doesn't have active observations.\r\n        if (!this.hasActive()) {\r\n            return;\r\n        }\r\n        var ctx = this.callbackCtx_;\r\n        // Create ResizeObserverEntry instance for every active observation.\r\n        var entries = this.activeObservations_.map(function (observation) {\r\n            return new ResizeObserverEntry(observation.target, observation.broadcastRect());\r\n        });\r\n        this.callback_.call(ctx, entries, ctx);\r\n        this.clearActive();\r\n    };\r\n    /**\r\n     * Clears the collection of active observations.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverSPI.prototype.clearActive = function () {\r\n        this.activeObservations_.splice(0);\r\n    };\r\n    /**\r\n     * Tells whether observer has active observations.\r\n     *\r\n     * @returns {boolean}\r\n     */\r\n    ResizeObserverSPI.prototype.hasActive = function () {\r\n        return this.activeObservations_.length > 0;\r\n    };\r\n    return ResizeObserverSPI;\r\n}());\n\n// Registry of internal observers. If WeakMap is not available use current shim\r\n// for the Map collection as it has all required methods and because WeakMap\r\n// can't be fully polyfilled anyway.\r\nvar observers = typeof WeakMap !== 'undefined' ? new WeakMap() : new MapShim();\r\n/**\r\n * ResizeObserver API. Encapsulates the ResizeObserver SPI implementation\r\n * exposing only those methods and properties that are defined in the spec.\r\n */\r\nvar ResizeObserver = /** @class */ (function () {\r\n    /**\r\n     * Creates a new instance of ResizeObserver.\r\n     *\r\n     * @param {ResizeObserverCallback} callback - Callback that is invoked when\r\n     *      dimensions of the observed elements change.\r\n     */\r\n    function ResizeObserver(callback) {\r\n        if (!(this instanceof ResizeObserver)) {\r\n            throw new TypeError('Cannot call a class as a function.');\r\n        }\r\n        if (!arguments.length) {\r\n            throw new TypeError('1 argument required, but only 0 present.');\r\n        }\r\n        var controller = ResizeObserverController.getInstance();\r\n        var observer = new ResizeObserverSPI(callback, controller, this);\r\n        observers.set(this, observer);\r\n    }\r\n    return ResizeObserver;\r\n}());\r\n// Expose public methods of ResizeObserver.\r\n[\r\n    'observe',\r\n    'unobserve',\r\n    'disconnect'\r\n].forEach(function (method) {\r\n    ResizeObserver.prototype[method] = function () {\r\n        var _a;\r\n        return (_a = observers.get(this))[method].apply(_a, arguments);\r\n    };\r\n});\n\nvar index = (function () {\r\n    // Export existing implementation if available.\r\n    if (typeof global$1.ResizeObserver !== 'undefined') {\r\n        return global$1.ResizeObserver;\r\n    }\r\n    return ResizeObserver;\r\n})();\n\nexport default index;\n","function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar Point = /*#__PURE__*/function () {\n  function Point(_ref) {\n    var _ref$x = _ref.x,\n        x = _ref$x === void 0 ? 0 : _ref$x,\n        _ref$y = _ref.y,\n        y = _ref$y === void 0 ? 0 : _ref$y;\n\n    _defineProperty(this, \"x\", 0);\n\n    _defineProperty(this, \"y\", 0);\n\n    this.x = x;\n    this.y = y;\n  }\n\n  var _proto = Point.prototype;\n\n  _proto.value = function value() {\n    return {\n      x: this.x,\n      y: this.y\n    };\n  };\n\n  _proto.toArray = function toArray() {\n    return [this.x, this.y];\n  };\n\n  return Point;\n}();\n\nexport { Point as default };","var TEST_TIME = new Date(Date.UTC(2020, 1, 2, 3, 4, 5));\nvar TEST_FORMAT = '%Y-%m-%d %H:%M';\n/**\n * Check if the scale is UTC or Time scale\n * When local time is equal to UTC, always return true\n * @param scale time or utc scale\n */\n\nexport default function isUtcScale(scale) {\n  // The only difference between time and utc scale is\n  // whether the tick format function is utcFormat or timeFormat\n  var output = scale.tickFormat(1, TEST_FORMAT)(TEST_TIME);\n  return output === '2020-02-02 03:04';\n}","export default function(a, b) {\n  return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","\"use strict\";\n\nexports.__esModule = true;\nexports.default = localPoint;\n\nvar _localPointGeneric = _interopRequireDefault(require(\"./localPointGeneric\"));\n\nvar _typeGuards = require(\"./typeGuards\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/** Handles two signatures for backwards compatibility. */\nfunction localPoint(nodeOrEvent, maybeEvent) {\n  // localPoint(node, event)\n  if ((0, _typeGuards.isElement)(nodeOrEvent) && maybeEvent) {\n    return (0, _localPointGeneric.default)(nodeOrEvent, maybeEvent);\n  } // localPoint(event)\n\n\n  if ((0, _typeGuards.isEvent)(nodeOrEvent)) {\n    var event = nodeOrEvent;\n    var node = event.target;\n    if (node) return (0, _localPointGeneric.default)(node, event);\n  }\n\n  return null;\n}","export default function nice(domain, interval) {\n  domain = domain.slice();\n\n  var i0 = 0,\n      i1 = domain.length - 1,\n      x0 = domain[i0],\n      x1 = domain[i1],\n      t;\n\n  if (x1 < x0) {\n    t = i0, i0 = i1, i1 = t;\n    t = x0, x0 = x1, x1 = t;\n  }\n\n  domain[i0] = interval.floor(x0);\n  domain[i1] = interval.ceil(x1);\n  return domain;\n}\n","/**\n * @file\n * Basic card component\n */\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport './styles.scss';\n\nconst Icon = ({ className, iconName, iconColor, width, height }) => {\n  const colorHex = iconColor.replace('#', '');\n  return (\n    <i\n      className={classNames(className, 'g-icon')}\n      style={{\n        backgroundImage: `url('https://www.ft.com/__origami/service/image/v2/images/raw/fticon-v1:${iconName}?source=o-icons&tint=%23${colorHex},%23${colorHex}&format=svg')`,\n        width,\n        height,\n      }}\n    />\n  );\n};\n\nIcon.propTypes = {\n  className: PropTypes.string,\n  iconName: PropTypes.string.isRequired,\n  iconColor: PropTypes.string,\n  width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  height: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n};\n\nIcon.defaultProps = {\n  className: null,\n  iconColor: '#000000',\n  width: 20,\n  height: 20,\n};\n\nexport default Icon;\n","import { isZeroOrDefined, identity } from '@financial-times/vvc/util';\n\nconst repositionLabels = (\n  initialLabelPositions,\n  positionVariable = 'yPosition',\n  orderVariable = 'y',\n  spacing = 18,\n  alpha = 0.5\n) => {\n  const copiedLabelPositions = initialLabelPositions.map(d => ({ ...d }));\n\n  const automaticallyRepositionLabels = labelPositions =>\n    labelPositions.forEach(d1 => {\n      const position1 = d1[positionVariable];\n      const order1 = d1[orderVariable];\n\n      labelPositions.forEach(d2 => {\n        const position2 = d2[positionVariable];\n        const order2 = d2[orderVariable];\n\n        /* Difference between current order variables for each label\n          This ensures the labels are always in the correct order */\n        const deltaOrder = order1 - order2;\n        /* Difference between current positions\n          When this is below the required minimum spacing the positioning\n          algorithm should stop */\n        const deltaPosition = position1 - position2;\n\n        if (d1 !== d2 && Math.abs(deltaPosition) <= spacing) {\n          const sign = deltaOrder > 0 ? -1 : 1;\n          const adjust = sign * alpha;\n\n          d1[positionVariable] = +position1 + adjust;\n          d2[positionVariable] = +position2 - adjust;\n\n          automaticallyRepositionLabels(\n            labelPositions,\n            positionVariable,\n            orderVariable,\n            spacing,\n            alpha\n          );\n        }\n      });\n    });\n\n  automaticallyRepositionLabels(copiedLabelPositions);\n\n  return copiedLabelPositions;\n};\n\nconst getLineEndPositions = (data, seriesNames, xVariable, yVariable, yMax) => {\n  // Generate object with entry for each line end position\n  const lineEndPositions = seriesNames.reduce((acc, series) => {\n    const sortedData = [...data].sort((a, b) => a[xVariable] - b[xVariable]);\n    const reverseSortedData = [...sortedData].reverse();\n    const endEntry = reverseSortedData.find(d => isZeroOrDefined(d[series]));\n    // Find the first entry that is greater than yMax\n    const firstIntersectionEntry = sortedData.find(\n      d => isZeroOrDefined(d[series]) && d[series] > yMax\n    );\n\n    return {\n      ...acc,\n      // Add single dot for each series\n      [series]: [\n        {\n          x: endEntry[xVariable],\n          y: endEntry[series],\n          yAxisIntersectionX: firstIntersectionEntry && firstIntersectionEntry[xVariable],\n          label: series,\n          color: series,\n        },\n      ],\n    };\n  }, {});\n\n  return lineEndPositions;\n};\n\nexport { getLineEndPositions, repositionLabels };\nexport default null;\n","import {xhr} from './xhr.js';\nimport {sendBeacon} from './send-beacon.js';\nimport {image} from './image.js';\n\nexport {\n\txhr,\n\tsendBeacon,\n\timage\n};\n\n/**\n * @type {object|undefined} - mock transport for testing\n */\nexport const mock = {};\n\n/**\n * Given the name of a transport, returns that transport if it exists.\n *\n * @param {string} name - The name of the transport to use\n * @returns {Function|undefined} - The transport function or undefined if not found.\n */\nexport function get(name) {\n\tif (mock.transport) {\n\t\treturn mock.transport;\n\t}\n\tswitch (name) {\n\t\tcase 'xhr': {\n\t\t\treturn xhr;\n\t\t}\n\t\tcase 'sendBeacon': {\n\t\t\treturn sendBeacon;\n\t\t}\n\t\tcase 'image': {\n\t\t\treturn image;\n\t\t}\n\t\tdefault: {\n\t\t\treturn undefined;\n\t\t}\n\t}\n}\n","import Overlay from '@financial-times/o-overlay';\n\nconst form = `<form id=\"o-comments-displayname-form\" class=\"o-forms o-forms o-comments__displayname-form\">\n\t\t\t<label for=\"o-comments-displayname-input\" class=\"o-forms-field o-comments__displayname-field\">\n\t\t\t\t<span class=\"o-forms-title\">Display name</span>\n\t\t\t</label>\n\t\t\t<div class=\"o-comments__displayname-container\">\n\t\t\t\t<span class=\"o-forms-input o-forms-input--text o-comments__displayname-input\">\n\t\t\t\t\t<input id=\"o-comments-displayname-input\" type=\"text\" name=\"text\" value=\"\" required=\"\">\n\t\t\t\t</span>\n\t\t\t\t<button type=\"submit\" class=\"o-comments__displayname-submit\">Save</button>\n\t\t\t</div>\n\t\t\t<span id=\"o-comments-displayname-error\" class=\"o-forms-input__error o-comments__displayname-error\" aria-live=\"assertive\"></span>\n\t</form>\n</form>`;\n\nconst isUnique = (displayName) => {\n\tconst url = `https://comments-api.ft.com/displayname/isavailable/${encodeURIComponent(displayName)}`;\n\n\treturn fetch(url, { method: 'GET' })\n\t\t.then(response => response.json())\n\t\t.then(({available}) => {\n\t\t\treturn available;\n\t\t});\n};\n\nconst findInvalidCharacters = (displayName) => {\n\t/*\n\t * Allowed Characters\n\t * The below regex matches any character not in the allowed characters set\n\t * All allowed characters are case insensitive\n\t * Anything in the range A-Z or 0-9 is allowed\n\t * Any of the below special characters are allowed\n\t * !#$%'`()*+,-./:;=@[]^_{|}\n\t * Spaces are allowed\n\t */\n\n\tconst matchInvalidCharacters = /[^0-9a-z!#$%'`()*+,\\-.\\/:;=@[\\]\\^_{}\\|\\s]/gi;\n\tconst matchingCharacters = displayName\n\t\t.match(matchInvalidCharacters);\n\tconst uniqueMatchingCharacters = matchingCharacters && matchingCharacters.length ?\n\t\tmatchingCharacters\n\t\t\t.filter((character, position) => matchingCharacters.indexOf(character) === position) :\n\t\t[];\n\n\treturn uniqueMatchingCharacters.length ?\n\t\tuniqueMatchingCharacters.join('') :\n\t\tfalse;\n};\n\nconst prompt = () => {\n\tconst overlay = new Overlay('displayName', {\n\t\thtml: form,\n\t\tclass: 'o-comments__displayname-prompt',\n\t\tcompact: true,\n\t\theading: {\n\t\t\ttitle: 'Choose a commenting display name'\n\t\t}\n\t});\n\n\toverlay.open();\n\n\treturn overlay;\n};\n\nconst validation = (displayName) => {\n\treturn new Promise((resolve, reject) => {\n\t\tif (!displayName) {\n\t\t\treturn reject(new Error('Empty display name'));\n\t\t}\n\n\t\tconst invalidCharacters = findInvalidCharacters(displayName);\n\n\t\tif (invalidCharacters) {\n\t\t\treturn reject(new Error(`The display name contains the following invalid characters: ${invalidCharacters}`));\n\t\t} else {\n\t\t\tisUnique(displayName)\n\t\t\t\t.then(isUnique => {\n\t\t\t\t\tif (!isUnique) {\n\t\t\t\t\t\treturn reject(new Error('Unfortunately that display name is already taken'));\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn resolve(displayName);\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.catch(() => {\n\t\t\t\t\tconst apiError = new Error('Sorry, we are unable to update display names. Please try again later.');\n\n\t\t\t\t\tapiError.name = 'CommentsApiError';\n\n\t\t\t\t\treturn reject(apiError);\n\t\t\t\t});\n\t\t}\n\t});\n};\n\nconst promptValidation = (event) => {\n\tevent.preventDefault();\n\n\treturn new Promise(resolve => {\n\t\tconst displayNameForm = event.srcElement;\n\t\tconst input = displayNameForm.querySelector('input');\n\t\tconst displayName = input.value.trim();\n\t\tconst errorMessage = displayNameForm.querySelector('#o-comments-displayname-error');\n\n\t\terrorMessage.innerText = '';\n\t\tdisplayNameForm.classList.remove('o-forms-input--invalid');\n\n\n\t\treturn validation(displayName)\n\t\t\t.then(displayName => resolve(displayName))\n\t\t\t.catch(error => {\n\t\t\t\terrorMessage.innerText = error.message;\n\t\t\t\tdisplayNameForm.classList.add('o-forms-input--invalid');\n\n\t\t\t\tif (error.name === 'CommentsApiError') {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t});\n\t});\n};\n\nexport default {\n\tprompt,\n\tvalidation,\n\tpromptValidation\n};\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\n/**\n * DOM event delegator\n *\n * The delegator will listen\n * for events that bubble up\n * to the root node.\n *\n * @constructor\n * @param {Node|string} [root] The root node or a selector string matching the root node\n */\nfunction Delegate(root) {\n  /**\n   * Maintain a map of listener\n   * lists, keyed by event name.\n   *\n   * @type Object\n   */\n  this.listenerMap = [{}, {}];\n\n  if (root) {\n    this.root(root);\n  }\n  /** @type function() */\n\n\n  this.handle = Delegate.prototype.handle.bind(this); // Cache of event listeners removed during an event cycle\n\n  this._removedListeners = [];\n}\n/**\n * Start listening for events\n * on the provided DOM element\n *\n * @param  {Node|string} [root] The root node or a selector string matching the root node\n * @returns {Delegate} This method is chainable\n */\n\n\nDelegate.prototype.root = function (root) {\n  var listenerMap = this.listenerMap;\n  var eventType; // Remove master event listeners\n\n  if (this.rootElement) {\n    for (eventType in listenerMap[1]) {\n      if (listenerMap[1].hasOwnProperty(eventType)) {\n        this.rootElement.removeEventListener(eventType, this.handle, true);\n      }\n    }\n\n    for (eventType in listenerMap[0]) {\n      if (listenerMap[0].hasOwnProperty(eventType)) {\n        this.rootElement.removeEventListener(eventType, this.handle, false);\n      }\n    }\n  } // If no root or root is not\n  // a dom node, then remove internal\n  // root reference and exit here\n\n\n  if (!root || !root.addEventListener) {\n    if (this.rootElement) {\n      delete this.rootElement;\n    }\n\n    return this;\n  }\n  /**\n   * The root node at which\n   * listeners are attached.\n   *\n   * @type Node\n   */\n\n\n  this.rootElement = root; // Set up master event listeners\n\n  for (eventType in listenerMap[1]) {\n    if (listenerMap[1].hasOwnProperty(eventType)) {\n      this.rootElement.addEventListener(eventType, this.handle, true);\n    }\n  }\n\n  for (eventType in listenerMap[0]) {\n    if (listenerMap[0].hasOwnProperty(eventType)) {\n      this.rootElement.addEventListener(eventType, this.handle, false);\n    }\n  }\n\n  return this;\n};\n/**\n * @param {string} eventType\n * @returns boolean\n */\n\n\nDelegate.prototype.captureForType = function (eventType) {\n  return ['blur', 'error', 'focus', 'load', 'resize', 'scroll'].indexOf(eventType) !== -1;\n};\n/**\n * Attach a handler to one\n * event for all elements\n * that match the selector,\n * now or in the future\n *\n * The handler function receives\n * three arguments: the DOM event\n * object, the node that matched\n * the selector while the event\n * was bubbling and a reference\n * to itself. Within the handler,\n * 'this' is equal to the second\n * argument.\n *\n * The node that actually received\n * the event can be accessed via\n * 'event.target'.\n *\n * @param {string} eventType Listen for these events\n * @param {string|undefined} selector Only handle events on elements matching this selector, if undefined match root element\n * @param {function()} handler Handler function - event data passed here will be in event.data\n * @param {boolean} [useCapture] see 'useCapture' in <https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener>\n * @returns {Delegate} This method is chainable\n */\n\n\nDelegate.prototype.on = function (eventType, selector, handler, useCapture) {\n  var root;\n  var listenerMap;\n  var matcher;\n  var matcherParam;\n\n  if (!eventType) {\n    throw new TypeError('Invalid event type: ' + eventType);\n  } // handler can be passed as\n  // the second or third argument\n\n\n  if (typeof selector === 'function') {\n    useCapture = handler;\n    handler = selector;\n    selector = null;\n  } // Fallback to sensible defaults\n  // if useCapture not set\n\n\n  if (useCapture === undefined) {\n    useCapture = this.captureForType(eventType);\n  }\n\n  if (typeof handler !== 'function') {\n    throw new TypeError('Handler must be a type of Function');\n  }\n\n  root = this.rootElement;\n  listenerMap = this.listenerMap[useCapture ? 1 : 0]; // Add master handler for type if not created yet\n\n  if (!listenerMap[eventType]) {\n    if (root) {\n      root.addEventListener(eventType, this.handle, useCapture);\n    }\n\n    listenerMap[eventType] = [];\n  }\n\n  if (!selector) {\n    matcherParam = null; // COMPLEX - matchesRoot needs to have access to\n    // this.rootElement, so bind the function to this.\n\n    matcher = matchesRoot.bind(this); // Compile a matcher for the given selector\n  } else if (/^[a-z]+$/i.test(selector)) {\n    matcherParam = selector;\n    matcher = matchesTag;\n  } else if (/^#[a-z0-9\\-_]+$/i.test(selector)) {\n    matcherParam = selector.slice(1);\n    matcher = matchesId;\n  } else {\n    matcherParam = selector;\n    matcher = Element.prototype.matches;\n  } // Add to the list of listeners\n\n\n  listenerMap[eventType].push({\n    selector: selector,\n    handler: handler,\n    matcher: matcher,\n    matcherParam: matcherParam\n  });\n  return this;\n};\n/**\n * Remove an event handler\n * for elements that match\n * the selector, forever\n *\n * @param {string} [eventType] Remove handlers for events matching this type, considering the other parameters\n * @param {string} [selector] If this parameter is omitted, only handlers which match the other two will be removed\n * @param {function()} [handler] If this parameter is omitted, only handlers which match the previous two will be removed\n * @returns {Delegate} This method is chainable\n */\n\n\nDelegate.prototype.off = function (eventType, selector, handler, useCapture) {\n  var i;\n  var listener;\n  var listenerMap;\n  var listenerList;\n  var singleEventType; // Handler can be passed as\n  // the second or third argument\n\n  if (typeof selector === 'function') {\n    useCapture = handler;\n    handler = selector;\n    selector = null;\n  } // If useCapture not set, remove\n  // all event listeners\n\n\n  if (useCapture === undefined) {\n    this.off(eventType, selector, handler, true);\n    this.off(eventType, selector, handler, false);\n    return this;\n  }\n\n  listenerMap = this.listenerMap[useCapture ? 1 : 0];\n\n  if (!eventType) {\n    for (singleEventType in listenerMap) {\n      if (listenerMap.hasOwnProperty(singleEventType)) {\n        this.off(singleEventType, selector, handler);\n      }\n    }\n\n    return this;\n  }\n\n  listenerList = listenerMap[eventType];\n\n  if (!listenerList || !listenerList.length) {\n    return this;\n  } // Remove only parameter matches\n  // if specified\n\n\n  for (i = listenerList.length - 1; i >= 0; i--) {\n    listener = listenerList[i];\n\n    if ((!selector || selector === listener.selector) && (!handler || handler === listener.handler)) {\n      this._removedListeners.push(listener);\n\n      listenerList.splice(i, 1);\n    }\n  } // All listeners removed\n\n\n  if (!listenerList.length) {\n    delete listenerMap[eventType]; // Remove the main handler\n\n    if (this.rootElement) {\n      this.rootElement.removeEventListener(eventType, this.handle, useCapture);\n    }\n  }\n\n  return this;\n};\n/**\n * Handle an arbitrary event.\n *\n * @param {Event} event\n */\n\n\nDelegate.prototype.handle = function (event) {\n  var i;\n  var l;\n  var type = event.type;\n  var root;\n  var phase;\n  var listener;\n  var returned;\n  var listenerList = [];\n  var target;\n  var eventIgnore = 'ftLabsDelegateIgnore';\n\n  if (event[eventIgnore] === true) {\n    return;\n  }\n\n  target = event.target; // Hardcode value of Node.TEXT_NODE\n  // as not defined in IE8\n\n  if (target.nodeType === 3) {\n    target = target.parentNode;\n  } // Handle SVG <use> elements in IE\n\n\n  if (target.correspondingUseElement) {\n    target = target.correspondingUseElement;\n  }\n\n  root = this.rootElement;\n  phase = event.eventPhase || (event.target !== event.currentTarget ? 3 : 2); // eslint-disable-next-line default-case\n\n  switch (phase) {\n    case 1:\n      //Event.CAPTURING_PHASE:\n      listenerList = this.listenerMap[1][type];\n      break;\n\n    case 2:\n      //Event.AT_TARGET:\n      if (this.listenerMap[0] && this.listenerMap[0][type]) {\n        listenerList = listenerList.concat(this.listenerMap[0][type]);\n      }\n\n      if (this.listenerMap[1] && this.listenerMap[1][type]) {\n        listenerList = listenerList.concat(this.listenerMap[1][type]);\n      }\n\n      break;\n\n    case 3:\n      //Event.BUBBLING_PHASE:\n      listenerList = this.listenerMap[0][type];\n      break;\n  }\n\n  var toFire = []; // Need to continuously check\n  // that the specific list is\n  // still populated in case one\n  // of the callbacks actually\n  // causes the list to be destroyed.\n\n  l = listenerList.length;\n\n  while (target && l) {\n    for (i = 0; i < l; i++) {\n      listener = listenerList[i]; // Bail from this loop if\n      // the length changed and\n      // no more listeners are\n      // defined between i and l.\n\n      if (!listener) {\n        break;\n      }\n\n      if (target.tagName && [\"button\", \"input\", \"select\", \"textarea\"].indexOf(target.tagName.toLowerCase()) > -1 && target.hasAttribute(\"disabled\")) {\n        // Remove things that have previously fired\n        toFire = [];\n      } // Check for match and fire\n      // the event if there's one\n      //\n      // TODO:MCG:20120117: Need a way\n      // to check if event#stopImmediatePropagation\n      // was called. If so, break both loops.\n      else if (listener.matcher.call(target, listener.matcherParam, target)) {\n          toFire.push([event, target, listener]);\n        }\n    } // TODO:MCG:20120117: Need a way to\n    // check if event#stopPropagation\n    // was called. If so, break looping\n    // through the DOM. Stop if the\n    // delegation root has been reached\n\n\n    if (target === root) {\n      break;\n    }\n\n    l = listenerList.length; // Fall back to parentNode since SVG children have no parentElement in IE\n\n    target = target.parentElement || target.parentNode; // Do not traverse up to document root when using parentNode, though\n\n    if (target instanceof HTMLDocument) {\n      break;\n    }\n  }\n\n  var ret;\n\n  for (i = 0; i < toFire.length; i++) {\n    // Has it been removed during while the event function was fired\n    if (this._removedListeners.indexOf(toFire[i][2]) > -1) {\n      continue;\n    }\n\n    returned = this.fire.apply(this, toFire[i]); // Stop propagation to subsequent\n    // callbacks if the callback returned\n    // false\n\n    if (returned === false) {\n      toFire[i][0][eventIgnore] = true;\n      toFire[i][0].preventDefault();\n      ret = false;\n      break;\n    }\n  }\n\n  return ret;\n};\n/**\n * Fire a listener on a target.\n *\n * @param {Event} event\n * @param {Node} target\n * @param {Object} listener\n * @returns {boolean}\n */\n\n\nDelegate.prototype.fire = function (event, target, listener) {\n  return listener.handler.call(target, event, target);\n};\n/**\n * Check whether an element\n * matches a tag selector.\n *\n * Tags are NOT case-sensitive,\n * except in XML (and XML-based\n * languages such as XHTML).\n *\n * @param {string} tagName The tag name to test against\n * @param {Element} element The element to test with\n * @returns boolean\n */\n\n\nfunction matchesTag(tagName, element) {\n  return tagName.toLowerCase() === element.tagName.toLowerCase();\n}\n/**\n * Check whether an element\n * matches the root.\n *\n * @param {?String} selector In this case this is always passed through as null and not used\n * @param {Element} element The element to test with\n * @returns boolean\n */\n\n\nfunction matchesRoot(selector, element) {\n  if (this.rootElement === window) {\n    return (// Match the outer document (dispatched from document)\n      element === document || // The <html> element (dispatched from document.body or document.documentElement)\n      element === document.documentElement || // Or the window itself (dispatched from window)\n      element === window\n    );\n  }\n\n  return this.rootElement === element;\n}\n/**\n * Check whether the ID of\n * the element in 'this'\n * matches the given ID.\n *\n * IDs are case-sensitive.\n *\n * @param {string} id The ID to test against\n * @param {Element} element The element to test with\n * @returns boolean\n */\n\n\nfunction matchesId(id, element) {\n  return id === element.id;\n}\n/**\n * Short hand for off()\n * and root(), ie both\n * with no parameters\n *\n * @return void\n */\n\n\nDelegate.prototype.destroy = function () {\n  this.off();\n  this.root();\n};\n\nvar _default = Delegate;\nexports.default = _default;\nmodule.exports = exports.default;","import React, { useEffect, useRef } from 'react';\nimport PropTypes from 'prop-types';\n\nconst getEmbedUrl = (flourishUrl) => {\n  return flourishUrl.replace(\n    /https:\\/\\/public\\.flourish\\.studio\\/(visualisation|story)\\/(\\d+)\\//g,\n    'https://flo.uri.sh/$1/$2/embed?auto=1',\n  );\n};\n\nconst FlourishEmbed = ({ url, alt }) => {\n  const elRef = useRef(null);\n\n  useEffect(() => {\n    window.addEventListener('message', (event) => {\n      if (event.origin === 'https://flo.uri.sh') {\n        const eventData = JSON.parse(event.data);\n        if (eventData.src && elRef.current.src === eventData.src.replace('#slide-0', '')) {\n          elRef.current.height = eventData.height;\n        }\n      }\n    });\n  }, []);\n\n  return (\n    <iframe\n      ref={elRef}\n      src={getEmbedUrl(url)}\n      title={alt}\n      scrolling=\"no\"\n      frameBorder=\"0\"\n      width=\"100%\"\n      height=\"600px\"\n      sandbox=\"allow-same-origin allow-forms allow-scripts allow-downloads allow-popups allow-popups-to-escape-sandbox allow-top-navigation-by-user-activation\"\n    />\n  );\n};\n\nFlourishEmbed.propTypes = {\n  url: PropTypes.string.isRequired,\n  alt: PropTypes.string.isRequired,\n};\n\nFlourishEmbed.displayName = 'GFlourishEmbed';\n\nexport default FlourishEmbed;\n","import interval from \"./interval.js\";\nimport {durationMinute, durationWeek} from \"./duration.js\";\n\nfunction weekday(i) {\n  return interval(function(date) {\n    date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n    date.setHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setDate(date.getDate() + step * 7);\n  }, function(start, end) {\n    return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n  });\n}\n\nexport var sunday = weekday(0);\nexport var monday = weekday(1);\nexport var tuesday = weekday(2);\nexport var wednesday = weekday(3);\nexport var thursday = weekday(4);\nexport var friday = weekday(5);\nexport var saturday = weekday(6);\n\nexport var sundays = sunday.range;\nexport var mondays = monday.range;\nexport var tuesdays = tuesday.range;\nexport var wednesdays = wednesday.range;\nexport var thursdays = thursday.range;\nexport var fridays = friday.range;\nexport var saturdays = saturday.range;\n","import interval from \"./interval.js\";\n\nvar year = interval(function(date) {\n  date.setMonth(0, 1);\n  date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n  date.setFullYear(date.getFullYear() + step);\n}, function(start, end) {\n  return end.getFullYear() - start.getFullYear();\n}, function(date) {\n  return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\nyear.every = function(k) {\n  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n    date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n    date.setMonth(0, 1);\n    date.setHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setFullYear(date.getFullYear() + step * k);\n  });\n};\n\nexport default year;\nexport var years = year.range;\n","/**\n * Module dependencies\n */\nvar balanced = require(\"balanced-match\")\nvar reduceFunctionCall = require(\"reduce-function-call\")\nvar mexp = require(\"math-expression-evaluator\")\n\n/**\n * Constantes\n */\nvar MAX_STACK = 100 // should be enough for a single calc()...\nvar NESTED_CALC_RE = /(\\+|\\-|\\*|\\\\|[^a-z]|)(\\s*)(\\()/g\n\n/**\n * Global variables\n */\nvar stack\n\n/**\n * Expose reduceCSSCalc plugin\n *\n * @type {Function}\n */\nmodule.exports = reduceCSSCalc\n\n/**\n * Reduce CSS calc() in a string, whenever it's possible\n *\n * @param {String} value css input\n */\nfunction reduceCSSCalc(value, decimalPrecision) {\n  stack = 0\n  decimalPrecision = Math.pow(10, decimalPrecision === undefined ? 5 : decimalPrecision)\n\n  // Allow calc() on multiple lines\n  value = value.replace(/\\n+/g, \" \")\n\n  /**\n   * Evaluates an expression\n   *\n   * @param {String} expression\n   * @returns {String}\n   */\n  function evaluateExpression (expression, functionIdentifier, call) {\n    if (stack++ > MAX_STACK) {\n      stack = 0\n      throw new Error(\"Call stack overflow for \" + call)\n    }\n\n    if (expression === \"\") {\n      throw new Error(functionIdentifier + \"(): '\" + call + \"' must contain a non-whitespace string\")\n    }\n\n    expression = evaluateNestedExpression(expression, call)\n\n    var units = getUnitsInExpression(expression)\n\n    // If the expression contains multiple units or CSS variables,\n    // then let the expression be (i.e. browser calc())\n    if (units.length > 1 || expression.indexOf(\"var(\") > -1) {\n      return functionIdentifier + \"(\" + expression + \")\"\n    }\n\n    var unit = units[0] || \"\"\n\n    if (unit === \"%\") {\n      // Convert percentages to numbers, to handle expressions like: 50% * 50% (will become: 25%):\n      // console.log(expression)\n      expression = expression.replace(/\\b[0-9\\.]+%/g, function(percent) {\n        return parseFloat(percent.slice(0, -1)) * 0.01\n      })\n    }\n\n    // Remove units in expression:\n    var toEvaluate = expression.replace(new RegExp(unit, \"gi\"), \"\")\n    var result\n\n    try {\n      result = mexp.eval(toEvaluate)\n    }\n    catch (e) {\n      return functionIdentifier + \"(\" + expression + \")\"\n    }\n\n    // Transform back to a percentage result:\n    if (unit === \"%\") {\n      result *= 100\n    }\n\n    // adjust rounding shit\n    // (0.1 * 0.2 === 0.020000000000000004)\n    if (functionIdentifier.length || unit === \"%\") {\n      result = Math.round(result * decimalPrecision) / decimalPrecision\n    }\n\n    // Add unit\n    result += unit\n\n    return result\n  }\n\n  /**\n   * Evaluates nested expressions\n   *\n   * @param {String} expression\n   * @returns {String}\n   */\n  function evaluateNestedExpression(expression, call) {\n    // Remove the calc part from nested expressions to ensure\n    // better browser compatibility\n    expression = expression.replace(/((?:\\-[a-z]+\\-)?calc)/g, \"\")\n    var evaluatedPart = \"\"\n    var nonEvaluatedPart = expression\n    var matches\n    while ((matches = NESTED_CALC_RE.exec(nonEvaluatedPart))) {\n      if (matches[0].index > 0) {\n        evaluatedPart += nonEvaluatedPart.substring(0, matches[0].index)\n      }\n\n      var balancedExpr = balanced(\"(\", \")\", nonEvaluatedPart.substring([0].index))\n      if (balancedExpr.body === \"\") {\n        throw new Error(\"'\" + expression + \"' must contain a non-whitespace string\")\n      }\n\n      var evaluated = evaluateExpression(balancedExpr.body, \"\", call)\n\n      evaluatedPart += balancedExpr.pre + evaluated\n      nonEvaluatedPart = balancedExpr.post\n    }\n\n    return evaluatedPart + nonEvaluatedPart\n  }\n\n  return reduceFunctionCall(value, /((?:\\-[a-z]+\\-)?calc)\\(/, evaluateExpression)\n}\n\n/**\n * Checks what units are used in an expression\n *\n * @param {String} expression\n * @returns {Array}\n */\n\nfunction getUnitsInExpression(expression) {\n  var uniqueUnits = []\n  var uniqueLowerCaseUnits = []\n  var unitRegEx = /[\\.0-9]([%a-z]+)/gi\n  var matches = unitRegEx.exec(expression)\n\n  while (matches) {\n    if (!matches || !matches[1]) {\n      continue\n    }\n\n    if (uniqueLowerCaseUnits.indexOf(matches[1].toLowerCase()) === -1) {\n      uniqueUnits.push(matches[1])\n      uniqueLowerCaseUnits.push(matches[1].toLowerCase())\n    }\n\n    matches = unitRegEx.exec(expression)\n  }\n\n  return uniqueUnits\n}\n","/**\n * @file\n * CSS styles for VVC <Legend>\n */\n\nimport { css } from '@emotion/core';\n\nexport const baseAxisStyles = css`\n  font-size: inherit !important;\n`;\n\nexport const legendCategoricalStyles = css`\n  ${baseAxisStyles}\n\n  text {\n    font-family: metric, MetricWeb;\n    fill: #66605c;\n    font-size: 16px;\n  }\n\n  line {\n    stroke-width: 3px;\n    stroke-linejoin: round;\n    stroke-linecap: but;\n  }\n\n  svg text {\n    font-feature-settings: 'tnum', 1;\n    -webkit-font-feature-settings: 'tnum';\n    -moz-font-feature-settings: 'tnum';\n  }\n`;\n\nexport const legendThresholdStyles = css`\n  ${baseAxisStyles}\n\n  text {\n    font-family: metric, MetricWeb;\n    fill: #66605c;\n    font-size: 16px;\n  }\n\n  polygon {\n    fill: #e6d9ce;\n  }\n\n  line {\n    stroke: #66605c;\n    stroke-width: 0.6px;\n    stroke-linejoin: round;\n    stroke-linecap: but;\n  }\n\n  circle {\n    stroke: #66605c;\n    stroke-width: 0.6px;\n    stroke-linejoin: round;\n    stroke-linecap: but;\n  }\n\n  svg text {\n    font-feature-settings: 'tnum', 1;\n    -webkit-font-feature-settings: 'tnum';\n    -moz-font-feature-settings: 'tnum';\n  }\n`;\n\nexport const legendMagnitudeStyles = css`\n  ${baseAxisStyles}\n\n  text {\n    font-family: metric, MetricWeb;\n    fill: #66605c;\n    font-size: 16px;\n  }\n\n  line {\n    stroke: #6b6e68;\n    stroke-width: 1pt;\n  }\n\n  circle {\n    stroke: #6b6e68;\n    stroke-width: 1pt;\n    fill: none;\n  }\n\n  svg text {\n    font-feature-settings: 'tnum', 1;\n    -webkit-font-feature-settings: 'tnum';\n    -moz-font-feature-settings: 'tnum';\n  }\n`;\n","/**\n * @file\n * CSS styles for <MarimekkoKey />\n */\n\nimport { css } from '@emotion/core';\n\nexport const baseStyles = css`\n  text-transform: uppercase;\n  -webkit-font-smoothing: antialiased;\n`;\n\nexport const titleStyles = css`\n  fill: #666666;\n  font-size: 14px;\n  letter-spacing: 1px;\n`;\n\nexport const annotationStyles = css`\n  fill: #33302e;\n  font-size: 13px;\n  letter-spacing: 0.28px;\n  line-height: 1.08;\n`;\n","const getDosageText = doses => {\n  return doses === 'first' ? 'first ' : doses === 'full' ? 'second or only ' : '';\n};\n\nexport const generateHeaderText = ({ areasToHighlightInChart }) => {\n  const areaText = areasToHighlightInChart.reduce(\n    (acc, curr, i, arr) => `${acc}${i > 0 ? (i === arr.length - 1 ? ' and ' : ', ') : ''}${curr}`,\n    ''\n  );\n  const areaTextWithPrefix = areaText !== '' ? `in ${areaText}` : '';\n\n  return `Vaccination doses administered ${areaTextWithPrefix}`;\n};\n\nexport const generateSubheadText = ({ cumulative, populationAdjusted, rollingAverage, doses }) => {\n  const cumulativeText = cumulative\n    ? 'Cumulative'\n    : rollingAverage\n    ? 'Seven-day rolling average of daily'\n    : 'daily';\n  const perN = '100';\n  const populationAdjustedText = populationAdjusted ? `per ${perN} residents` : '';\n\n  return `${cumulativeText} ${getDosageText(doses)}doses administered ${populationAdjustedText}`;\n};\n\nexport const generateSourceText = ({ source, timestamp }) => {\n  return `${source}. | Data updated ${timestamp}. Interactive version: ft.com/covid-vaccine`;\n};\n\nexport default null;\n","import { timeDay, timeWeek, timeMonth, timeYear } from 'd3-time';\nimport { timeFormat } from 'd3-time-format';\n\nconst getUniqueDateTicks = ticks =>\n  ticks.filter((date, i, arr) => arr.findIndex(d => d.getTime() === date.getTime()) === i);\n\nexport const generateXTickDateValues = (xMin, xMax, breakpoint, minTicks = 4) => {\n  // By default we want a tick for each month\n  const monthTicks = timeMonth.range(xMin, xMax);\n  // If less than 4 month ticks, generate a tick for each fortnight instead\n  if (monthTicks.length >= minTicks) {\n    return { uniqueTicks: getUniqueDateTicks([xMin, ...monthTicks]), tickIncrement: 'month' };\n  }\n\n  const fortnightTicks = timeWeek.range(xMin, xMax, 2);\n  // If less than 4 fortnight ticks, generate a tick for each week instead\n  if (fortnightTicks.length >= minTicks) {\n    return {\n      uniqueTicks: getUniqueDateTicks([xMin, ...fortnightTicks]),\n      tickIncrement: 'fortnight',\n    };\n  }\n\n  const weekTicks = timeWeek.range(xMin, xMax);\n  // If less than 4 week ticks, generate a tick for every 3 days instead\n  if (weekTicks.length >= minTicks) {\n    return {\n      uniqueTicks: getUniqueDateTicks([xMin, ...weekTicks]),\n      tickIncrement: 'week',\n    };\n  }\n\n  const threeDayTicks = timeDay.range(xMin, xMax, 3);\n  // If less than 4 three day ticks, generate a tick for every day instead\n  if (threeDayTicks.length >= minTicks) {\n    return {\n      uniqueTicks: getUniqueDateTicks([xMin, ...threeDayTicks]),\n      tickIncrement: 'three-day',\n    };\n  }\n\n  const dayTicks = timeDay.range(xMin, xMax);\n  return {\n    uniqueTicks: getUniqueDateTicks([xMin, ...dayTicks]),\n    tickIncrement: 'day',\n  };\n};\n\nexport const filterXTickDateValues = (\n  ticks,\n  xMin,\n  xMax,\n  tickSpacingMin = 0.05,\n  maxNumTicks = 12,\n  hideEveryNTicks = 2\n) => {\n  const totalNumberOfDaysInRange = timeDay.count(xMin, xMax);\n  const daysBetweenFirstTwoTicks = timeDay.count(ticks[0], ticks[1]);\n  const spaceBetweenFirstTwoTicks = daysBetweenFirstTwoTicks / totalNumberOfDaysInRange;\n\n  // Ignore first tick when getting ticks length\n  const maxTicksBreached = ticks.length - 1 > maxNumTicks;\n  // If number of ticks above max, hide every Nth tick\n  const ticksToHide = maxTicksBreached\n    ? ticks.slice(1).filter((t, index) => index % hideEveryNTicks === 0)\n    : [];\n  // Hide first tick label if spacing between first two ticks is below minimum\n  const hideFirstTick = spaceBetweenFirstTwoTicks < tickSpacingMin && !maxTicksBreached;\n\n  return [hideFirstTick && ticks[0].getTime(), ...ticksToHide.map(t => t.getTime())].filter(\n    Boolean\n  );\n};\n\nexport const generateXTickFormatFunction = (ticks, breakpoint, tickIncrement, tickLabelsToHide) => {\n  const firstYear = timeYear.floor(ticks[0]);\n  const secondYear = timeYear.floor(ticks[ticks.length - 1]);\n\n  const ticksSpanMoreThanOneYear = firstYear.getTime() !== secondYear.getTime();\n  const ticksToShow = ticks.filter(t => !tickLabelsToHide.includes(t.getTime()));\n  const firstTickInSecondYear = ticksToShow.find(tick => tick >= secondYear);\n\n  return (t, index) => {\n    // Hide tick label if in array\n    if (tickLabelsToHide.includes(t.getTime())) {\n      return '';\n    }\n\n    // Always show full date if first tick\n    if (index === 0) {\n      // e.g. Sep 1 | 2020\n      return timeFormat('%b %-d | %Y')(t);\n    }\n\n    // Default e.g. Sep 1\n    let tickFormatString = '%b %-d';\n    if (tickIncrement === 'month') {\n      // e.g. Sep\n      tickFormatString = '%b';\n    }\n\n    // Add year to format if first tick in second year\n    if (firstTickInSecondYear && t.getTime() === firstTickInSecondYear.getTime()) {\n      tickFormatString += ' | %Y';\n    }\n\n    return timeFormat(tickFormatString)(t);\n  };\n};\n\nexport default null;\n","import _pt from \"prop-types\";\nimport React from 'react';\nimport cx from 'classnames';\nimport { Group } from '@visx/group';\nimport { LinePath } from '@visx/shape';\nexport default function LinePathAnnotation(_ref) {\n  var _ref$top = _ref.top,\n      top = _ref$top === void 0 ? 0 : _ref$top,\n      _ref$left = _ref.left,\n      left = _ref$left === void 0 ? 0 : _ref$left,\n      _ref$points = _ref.points,\n      points = _ref$points === void 0 ? [] : _ref$points,\n      _ref$stroke = _ref.stroke,\n      stroke = _ref$stroke === void 0 ? 'black' : _ref$stroke,\n      _ref$strokeWidth = _ref.strokeWidth,\n      strokeWidth = _ref$strokeWidth === void 0 ? 1 : _ref$strokeWidth,\n      className = _ref.className,\n      label = _ref.label,\n      _ref$labelAnchor = _ref.labelAnchor,\n      labelAnchor = _ref$labelAnchor === void 0 ? 'middle' : _ref$labelAnchor,\n      _ref$labelDx = _ref.labelDx,\n      labelDx = _ref$labelDx === void 0 ? 0 : _ref$labelDx,\n      _ref$labelDy = _ref.labelDy,\n      labelDy = _ref$labelDy === void 0 ? 0 : _ref$labelDy,\n      labelFill = _ref.labelFill,\n      _ref$labelFontSize = _ref.labelFontSize,\n      labelFontSize = _ref$labelFontSize === void 0 ? 10 : _ref$labelFontSize,\n      _ref$labelStroke = _ref.labelStroke,\n      labelStroke = _ref$labelStroke === void 0 ? 'white' : _ref$labelStroke,\n      _ref$labelStrokeWidth = _ref.labelStrokeWidth,\n      labelStrokeWidth = _ref$labelStrokeWidth === void 0 ? 3 : _ref$labelStrokeWidth,\n      _ref$labelPaintOrder = _ref.labelPaintOrder,\n      labelPaintOrder = _ref$labelPaintOrder === void 0 ? 'stroke' : _ref$labelPaintOrder;\n  var endPoint = points[points.length - 1];\n  return /*#__PURE__*/React.createElement(Group, {\n    className: \"visx-line-path-annotation-group\",\n    top: top,\n    left: left\n  }, /*#__PURE__*/React.createElement(LinePath, {\n    className: cx('visx-line-path-annotation', className),\n    data: points,\n    x: function x(p) {\n      return p.x;\n    },\n    y: function y(p) {\n      return p.y;\n    },\n    stroke: stroke,\n    strokeWidth: strokeWidth\n  }), label && endPoint && /*#__PURE__*/React.createElement(\"text\", {\n    x: endPoint.x,\n    y: endPoint.y,\n    dx: labelDx,\n    dy: labelDy,\n    fontSize: labelFontSize,\n    fill: labelFill || stroke,\n    stroke: labelStroke,\n    strokeWidth: labelStrokeWidth,\n    textAnchor: labelAnchor,\n    paintOrder: labelPaintOrder\n  }, label));\n}\nLinePathAnnotation.propTypes = {\n  top: _pt.number,\n  left: _pt.number,\n  points: _pt.array,\n  stroke: _pt.string,\n  strokeWidth: _pt.number,\n  className: _pt.string,\n  label: _pt.string,\n  labelAnchor: _pt.oneOf(['start', 'middle', 'end']),\n  labelDx: _pt.number,\n  labelDy: _pt.number,\n  labelFill: _pt.string,\n  labelFontSize: _pt.number,\n  labelStroke: _pt.string,\n  labelStrokeWidth: _pt.number,\n  labelPaintOrder: _pt.string\n};","var pi = Math.PI,\n    tau = 2 * pi,\n    epsilon = 1e-6,\n    tauEpsilon = tau - epsilon;\n\nfunction Path() {\n  this._x0 = this._y0 = // start of current subpath\n  this._x1 = this._y1 = null; // end of current subpath\n  this._ = \"\";\n}\n\nfunction path() {\n  return new Path;\n}\n\nPath.prototype = path.prototype = {\n  constructor: Path,\n  moveTo: function(x, y) {\n    this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n  },\n  closePath: function() {\n    if (this._x1 !== null) {\n      this._x1 = this._x0, this._y1 = this._y0;\n      this._ += \"Z\";\n    }\n  },\n  lineTo: function(x, y) {\n    this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n  },\n  quadraticCurveTo: function(x1, y1, x, y) {\n    this._ += \"Q\" + (+x1) + \",\" + (+y1) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n  },\n  bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n    this._ += \"C\" + (+x1) + \",\" + (+y1) + \",\" + (+x2) + \",\" + (+y2) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n  },\n  arcTo: function(x1, y1, x2, y2, r) {\n    x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n    var x0 = this._x1,\n        y0 = this._y1,\n        x21 = x2 - x1,\n        y21 = y2 - y1,\n        x01 = x0 - x1,\n        y01 = y0 - y1,\n        l01_2 = x01 * x01 + y01 * y01;\n\n    // Is the radius negative? Error.\n    if (r < 0) throw new Error(\"negative radius: \" + r);\n\n    // Is this path empty? Move to (x1,y1).\n    if (this._x1 === null) {\n      this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n    }\n\n    // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n    else if (!(l01_2 > epsilon));\n\n    // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n    // Equivalently, is (x1,y1) coincident with (x2,y2)?\n    // Or, is the radius zero? Line to (x1,y1).\n    else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n      this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n    }\n\n    // Otherwise, draw an arc!\n    else {\n      var x20 = x2 - x0,\n          y20 = y2 - y0,\n          l21_2 = x21 * x21 + y21 * y21,\n          l20_2 = x20 * x20 + y20 * y20,\n          l21 = Math.sqrt(l21_2),\n          l01 = Math.sqrt(l01_2),\n          l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n          t01 = l / l01,\n          t21 = l / l21;\n\n      // If the start tangent is not coincident with (x0,y0), line to.\n      if (Math.abs(t01 - 1) > epsilon) {\n        this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n      }\n\n      this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n    }\n  },\n  arc: function(x, y, r, a0, a1, ccw) {\n    x = +x, y = +y, r = +r, ccw = !!ccw;\n    var dx = r * Math.cos(a0),\n        dy = r * Math.sin(a0),\n        x0 = x + dx,\n        y0 = y + dy,\n        cw = 1 ^ ccw,\n        da = ccw ? a0 - a1 : a1 - a0;\n\n    // Is the radius negative? Error.\n    if (r < 0) throw new Error(\"negative radius: \" + r);\n\n    // Is this path empty? Move to (x0,y0).\n    if (this._x1 === null) {\n      this._ += \"M\" + x0 + \",\" + y0;\n    }\n\n    // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n    else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n      this._ += \"L\" + x0 + \",\" + y0;\n    }\n\n    // Is this arc empty? We’re done.\n    if (!r) return;\n\n    // Does the angle go the wrong way? Flip the direction.\n    if (da < 0) da = da % tau + tau;\n\n    // Is this a complete circle? Draw two arcs to complete the circle.\n    if (da > tauEpsilon) {\n      this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n    }\n\n    // Is this arc non-empty? Draw an arc!\n    else if (da > epsilon) {\n      this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n    }\n  },\n  rect: function(x, y, w, h) {\n    this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + (+w) + \"v\" + (+h) + \"h\" + (-w) + \"Z\";\n  },\n  toString: function() {\n    return this._;\n  }\n};\n\nexport default path;\n","export default function(x) {\n  return function constant() {\n    return x;\n  };\n}\n","export var abs = Math.abs;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var max = Math.max;\nexport var min = Math.min;\nexport var sin = Math.sin;\nexport var sqrt = Math.sqrt;\n\nexport var epsilon = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = 2 * pi;\n\nexport function acos(x) {\n  return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n  return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","function Linear(context) {\n  this._context = context;\n}\n\nLinear.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; // proceed\n      default: this._context.lineTo(x, y); break;\n    }\n  }\n};\n\nexport default function(context) {\n  return new Linear(context);\n}\n","export function x(p) {\n  return p[0];\n}\n\nexport function y(p) {\n  return p[1];\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function() {\n  var x = pointX,\n      y = pointY,\n      defined = constant(true),\n      context = null,\n      curve = curveLinear,\n      output = null;\n\n  function line(data) {\n    var i,\n        n = data.length,\n        d,\n        defined0 = false,\n        buffer;\n\n    if (context == null) output = curve(buffer = path());\n\n    for (i = 0; i <= n; ++i) {\n      if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n        if (defined0 = !defined0) output.lineStart();\n        else output.lineEnd();\n      }\n      if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n    }\n\n    if (buffer) return output = null, buffer + \"\" || null;\n  }\n\n  line.x = function(_) {\n    return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n  };\n\n  line.y = function(_) {\n    return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n  };\n\n  line.defined = function(_) {\n    return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n  };\n\n  line.curve = function(_) {\n    return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n  };\n\n  line.context = function(_) {\n    return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n  };\n\n  return line;\n}\n","import curveLinear from \"./linear.js\";\n\nexport var curveRadialLinear = curveRadial(curveLinear);\n\nfunction Radial(curve) {\n  this._curve = curve;\n}\n\nRadial.prototype = {\n  areaStart: function() {\n    this._curve.areaStart();\n  },\n  areaEnd: function() {\n    this._curve.areaEnd();\n  },\n  lineStart: function() {\n    this._curve.lineStart();\n  },\n  lineEnd: function() {\n    this._curve.lineEnd();\n  },\n  point: function(a, r) {\n    this._curve.point(r * Math.sin(a), r * -Math.cos(a));\n  }\n};\n\nexport default function curveRadial(curve) {\n\n  function radial(context) {\n    return new Radial(curve(context));\n  }\n\n  radial._curve = curve;\n\n  return radial;\n}\n","export var slice = Array.prototype.slice;\n","import curveRadial, {curveRadialLinear} from \"./curve/radial.js\";\nimport line from \"./line.js\";\n\nexport function lineRadial(l) {\n  var c = l.curve;\n\n  l.angle = l.x, delete l.x;\n  l.radius = l.y, delete l.y;\n\n  l.curve = function(_) {\n    return arguments.length ? c(curveRadial(_)) : c()._curve;\n  };\n\n  return l;\n}\n\nexport default function() {\n  return lineRadial(line().curve(curveRadialLinear));\n}\n","export default function(series, order) {\n  if (!((n = series.length) > 1)) return;\n  for (var i = 1, j, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {\n    s0 = s1, s1 = series[order[i]];\n    for (j = 0; j < m; ++j) {\n      s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];\n    }\n  }\n}\n","export default function(series) {\n  var n = series.length, o = new Array(n);\n  while (--n >= 0) o[n] = n;\n  return o;\n}\n","/**\n * This is a workaround for TypeScript not inferring the correct\n * method overload/signature for some d3 shape methods.\n */\nexport default function setNumberOrNumberAccessor(func, value) {\n  if (typeof value === 'number') func(value);else func(value);\n}","import none from \"./none.js\";\n\nexport default function(series) {\n  var sums = series.map(sum);\n  return none(series).sort(function(a, b) { return sums[a] - sums[b]; });\n}\n\nexport function sum(series) {\n  var s = 0, i = -1, n = series.length, v;\n  while (++i < n) if (v = +series[i][1]) s += v;\n  return s;\n}\n","import none from \"./none.js\";\n\nexport default function(series) {\n  var peaks = series.map(peak);\n  return none(series).sort(function(a, b) { return peaks[a] - peaks[b]; });\n}\n\nfunction peak(series) {\n  var i = -1, j = 0, n = series.length, vi, vj = -Infinity;\n  while (++i < n) if ((vi = +series[i][1]) > vj) vj = vi, j = i;\n  return j;\n}\n","import appearance from \"./appearance.js\";\nimport {sum} from \"./ascending.js\";\n\nexport default function(series) {\n  var n = series.length,\n      i,\n      j,\n      sums = series.map(sum),\n      order = appearance(series),\n      top = 0,\n      bottom = 0,\n      tops = [],\n      bottoms = [];\n\n  for (i = 0; i < n; ++i) {\n    j = order[i];\n    if (top < bottom) {\n      top += sums[j];\n      tops.push(j);\n    } else {\n      bottom += sums[j];\n      bottoms.push(j);\n    }\n  }\n\n  return bottoms.reverse().concat(tops);\n}\n","import { stackOrderAscending, stackOrderDescending, stackOrderInsideOut, stackOrderNone, stackOrderReverse } from 'd3-shape';\nexport var STACK_ORDERS = {\n  ascending: stackOrderAscending,\n  descending: stackOrderDescending,\n  insideout: stackOrderInsideOut,\n  none: stackOrderNone,\n  reverse: stackOrderReverse\n};\nexport var STACK_ORDER_NAMES = Object.keys(STACK_ORDERS);\nexport default function stackOrder(order) {\n  return order && STACK_ORDERS[order] || STACK_ORDERS.none;\n}","import ascending from \"./ascending.js\";\n\nexport default function(series) {\n  return ascending(series).reverse();\n}\n","import none from \"./none.js\";\n\nexport default function(series) {\n  return none(series).reverse();\n}\n","import none from \"./none.js\";\n\nexport default function(series, order) {\n  if (!((n = series.length) > 0)) return;\n  for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) {\n    for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0;\n    if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y;\n  }\n  none(series, order);\n}\n","import { stackOffsetExpand, stackOffsetDiverging, stackOffsetNone, stackOffsetSilhouette, stackOffsetWiggle } from 'd3-shape';\nexport var STACK_OFFSETS = {\n  expand: stackOffsetExpand,\n  diverging: stackOffsetDiverging,\n  none: stackOffsetNone,\n  silhouette: stackOffsetSilhouette,\n  wiggle: stackOffsetWiggle\n};\nexport var STACK_OFFSET_NAMES = Object.keys(STACK_OFFSETS);\nexport default function stackOffset(offset) {\n  return offset && STACK_OFFSETS[offset] || STACK_OFFSETS.none;\n}","export default function(series, order) {\n  if (!((n = series.length) > 0)) return;\n  for (var i, j = 0, d, dy, yp, yn, n, m = series[order[0]].length; j < m; ++j) {\n    for (yp = yn = 0, i = 0; i < n; ++i) {\n      if ((dy = (d = series[order[i]][j])[1] - d[0]) > 0) {\n        d[0] = yp, d[1] = yp += dy;\n      } else if (dy < 0) {\n        d[1] = yn, d[0] = yn += dy;\n      } else {\n        d[0] = 0, d[1] = dy;\n      }\n    }\n  }\n}\n","import none from \"./none.js\";\n\nexport default function(series, order) {\n  if (!((n = series.length) > 0)) return;\n  for (var j = 0, s0 = series[order[0]], n, m = s0.length; j < m; ++j) {\n    for (var i = 0, y = 0; i < n; ++i) y += series[i][j][1] || 0;\n    s0[j][1] += s0[j][0] = -y / 2;\n  }\n  none(series, order);\n}\n","import none from \"./none.js\";\n\nexport default function(series, order) {\n  if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return;\n  for (var y = 0, j = 1, s0, m, n; j < m; ++j) {\n    for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) {\n      var si = series[order[i]],\n          sij0 = si[j][1] || 0,\n          sij1 = si[j - 1][1] || 0,\n          s3 = (sij0 - sij1) / 2;\n      for (var k = 0; k < i; ++k) {\n        var sk = series[order[k]],\n            skj0 = sk[j][1] || 0,\n            skj1 = sk[j - 1][1] || 0;\n        s3 += skj0 - skj1;\n      }\n      s1 += sij0, s2 += s3 * sij0;\n    }\n    s0[j - 1][1] += s0[j - 1][0] = y;\n    if (s1) y -= s2 / s1;\n  }\n  s0[j - 1][1] += s0[j - 1][0] = y;\n  none(series, order);\n}\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from 'react';\nimport cx from 'classnames';\nimport { line } from '../util/D3ShapeFactories';\nexport default function LinePath(_ref) {\n  var children = _ref.children,\n      _ref$data = _ref.data,\n      data = _ref$data === void 0 ? [] : _ref$data,\n      x = _ref.x,\n      y = _ref.y,\n      _ref$fill = _ref.fill,\n      fill = _ref$fill === void 0 ? 'transparent' : _ref$fill,\n      className = _ref.className,\n      curve = _ref.curve,\n      innerRef = _ref.innerRef,\n      _ref$defined = _ref.defined,\n      defined = _ref$defined === void 0 ? function () {\n    return true;\n  } : _ref$defined,\n      restProps = _objectWithoutPropertiesLoose(_ref, [\"children\", \"data\", \"x\", \"y\", \"fill\", \"className\", \"curve\", \"innerRef\", \"defined\"]);\n\n  var path = line({\n    x: x,\n    y: y,\n    defined: defined,\n    curve: curve\n  }); // eslint-disable-next-line react/jsx-no-useless-fragment\n\n  if (children) return /*#__PURE__*/React.createElement(React.Fragment, null, children({\n    path: path\n  }));\n  return /*#__PURE__*/React.createElement(\"path\", _extends({\n    ref: innerRef,\n    className: cx('visx-linepath', className),\n    d: path(data) || '',\n    fill: fill // without this a datum surrounded by nulls will not be visible\n    // https://github.com/d3/d3-shape#line_defined\n    ,\n    strokeLinecap: \"round\"\n  }, restProps));\n}","import { arc as d3Arc, area as d3Area, line as d3Line, pie as d3Pie, radialLine as d3RadialLine, stack as d3Stack } from 'd3-shape';\nimport setNumberOrNumberAccessor from './setNumberOrNumberAccessor';\nimport stackOrder from './stackOrder';\nimport stackOffset from './stackOffset';\nexport function arc(_temp) {\n  var _ref = _temp === void 0 ? {} : _temp,\n      innerRadius = _ref.innerRadius,\n      outerRadius = _ref.outerRadius,\n      cornerRadius = _ref.cornerRadius,\n      startAngle = _ref.startAngle,\n      endAngle = _ref.endAngle,\n      padAngle = _ref.padAngle,\n      padRadius = _ref.padRadius;\n\n  var path = d3Arc();\n  if (innerRadius != null) setNumberOrNumberAccessor(path.innerRadius, innerRadius);\n  if (outerRadius != null) setNumberOrNumberAccessor(path.outerRadius, outerRadius);\n  if (cornerRadius != null) setNumberOrNumberAccessor(path.cornerRadius, cornerRadius);\n  if (startAngle != null) setNumberOrNumberAccessor(path.startAngle, startAngle);\n  if (endAngle != null) setNumberOrNumberAccessor(path.endAngle, endAngle);\n  if (padAngle != null) setNumberOrNumberAccessor(path.padAngle, padAngle);\n  if (padRadius != null) setNumberOrNumberAccessor(path.padRadius, padRadius);\n  return path;\n}\nexport function area(_temp2) {\n  var _ref2 = _temp2 === void 0 ? {} : _temp2,\n      x = _ref2.x,\n      x0 = _ref2.x0,\n      x1 = _ref2.x1,\n      y = _ref2.y,\n      y0 = _ref2.y0,\n      y1 = _ref2.y1,\n      defined = _ref2.defined,\n      curve = _ref2.curve;\n\n  var path = d3Area();\n  if (x) setNumberOrNumberAccessor(path.x, x);\n  if (x0) setNumberOrNumberAccessor(path.x0, x0);\n  if (x1) setNumberOrNumberAccessor(path.x1, x1);\n  if (y) setNumberOrNumberAccessor(path.y, y);\n  if (y0) setNumberOrNumberAccessor(path.y0, y0);\n  if (y1) setNumberOrNumberAccessor(path.y1, y1);\n  if (defined) path.defined(defined);\n  if (curve) path.curve(curve);\n  return path;\n}\nexport function line(_temp3) {\n  var _ref3 = _temp3 === void 0 ? {} : _temp3,\n      x = _ref3.x,\n      y = _ref3.y,\n      defined = _ref3.defined,\n      curve = _ref3.curve;\n\n  var path = d3Line();\n  if (x) setNumberOrNumberAccessor(path.x, x);\n  if (y) setNumberOrNumberAccessor(path.y, y);\n  if (defined) path.defined(defined);\n  if (curve) path.curve(curve);\n  return path;\n}\nexport function pie(_temp4) {\n  var _ref4 = _temp4 === void 0 ? {} : _temp4,\n      startAngle = _ref4.startAngle,\n      endAngle = _ref4.endAngle,\n      padAngle = _ref4.padAngle,\n      value = _ref4.value,\n      sort = _ref4.sort,\n      sortValues = _ref4.sortValues;\n\n  var path = d3Pie(); // ts can't distinguish between these method overloads\n\n  if (sort === null) path.sort(sort);else if (sort != null) path.sort(sort);\n  if (sortValues === null) path.sortValues(sortValues);else if (sortValues != null) path.sortValues(sortValues);\n  if (value != null) path.value(value);\n  if (padAngle != null) setNumberOrNumberAccessor(path.padAngle, padAngle);\n  if (startAngle != null) setNumberOrNumberAccessor(path.startAngle, startAngle);\n  if (endAngle != null) setNumberOrNumberAccessor(path.endAngle, endAngle);\n  return path;\n}\nexport function radialLine(_temp5) {\n  var _ref5 = _temp5 === void 0 ? {} : _temp5,\n      angle = _ref5.angle,\n      radius = _ref5.radius,\n      defined = _ref5.defined,\n      curve = _ref5.curve;\n\n  var path = d3RadialLine();\n  if (angle) setNumberOrNumberAccessor(path.angle, angle);\n  if (radius) setNumberOrNumberAccessor(path.radius, radius);\n  if (defined) path.defined(defined);\n  if (curve) path.curve(curve);\n  return path;\n}\nexport function stack(_ref6) {\n  var keys = _ref6.keys,\n      value = _ref6.value,\n      order = _ref6.order,\n      offset = _ref6.offset;\n  var path = d3Stack();\n  if (keys) path.keys(keys);\n  if (value) setNumberOrNumberAccessor(path.value, value);\n  if (order) path.order(stackOrder(order));\n  if (offset) path.offset(stackOffset(offset));\n  return path;\n}","'use strict'\n\nvar legacy = require('character-entities-legacy')\nvar invalid = require('character-reference-invalid')\nvar decimal = require('is-decimal')\nvar hexadecimal = require('is-hexadecimal')\nvar alphanumerical = require('is-alphanumerical')\nvar decodeEntity = require('./decode-entity')\n\nmodule.exports = parseEntities\n\nvar own = {}.hasOwnProperty\nvar fromCharCode = String.fromCharCode\nvar noop = Function.prototype\n\n// Default settings.\nvar defaults = {\n  warning: null,\n  reference: null,\n  text: null,\n  warningContext: null,\n  referenceContext: null,\n  textContext: null,\n  position: {},\n  additional: null,\n  attribute: false,\n  nonTerminated: true\n}\n\n// Characters.\nvar tab = 9 // '\\t'\nvar lineFeed = 10 // '\\n'\nvar formFeed = 12 //  '\\f'\nvar space = 32 // ' '\nvar ampersand = 38 //  '&'\nvar semicolon = 59 //  ';'\nvar lessThan = 60 //  '<'\nvar equalsTo = 61 //  '='\nvar numberSign = 35 //  '#'\nvar uppercaseX = 88 //  'X'\nvar lowercaseX = 120 //  'x'\nvar replacementCharacter = 65533 // '�'\n\n// Reference types.\nvar name = 'named'\nvar hexa = 'hexadecimal'\nvar deci = 'decimal'\n\n// Map of bases.\nvar bases = {}\n\nbases[hexa] = 16\nbases[deci] = 10\n\n// Map of types to tests.\n// Each type of character reference accepts different characters.\n// This test is used to detect whether a reference has ended (as the semicolon\n// is not strictly needed).\nvar tests = {}\n\ntests[name] = alphanumerical\ntests[deci] = decimal\ntests[hexa] = hexadecimal\n\n// Warning types.\nvar namedNotTerminated = 1\nvar numericNotTerminated = 2\nvar namedEmpty = 3\nvar numericEmpty = 4\nvar namedUnknown = 5\nvar numericDisallowed = 6\nvar numericProhibited = 7\n\n// Warning messages.\nvar messages = {}\n\nmessages[namedNotTerminated] =\n  'Named character references must be terminated by a semicolon'\nmessages[numericNotTerminated] =\n  'Numeric character references must be terminated by a semicolon'\nmessages[namedEmpty] = 'Named character references cannot be empty'\nmessages[numericEmpty] = 'Numeric character references cannot be empty'\nmessages[namedUnknown] = 'Named character references must be known'\nmessages[numericDisallowed] =\n  'Numeric character references cannot be disallowed'\nmessages[numericProhibited] =\n  'Numeric character references cannot be outside the permissible Unicode range'\n\n// Wrap to ensure clean parameters are given to `parse`.\nfunction parseEntities(value, options) {\n  var settings = {}\n  var option\n  var key\n\n  if (!options) {\n    options = {}\n  }\n\n  for (key in defaults) {\n    option = options[key]\n    settings[key] =\n      option === null || option === undefined ? defaults[key] : option\n  }\n\n  if (settings.position.indent || settings.position.start) {\n    settings.indent = settings.position.indent || []\n    settings.position = settings.position.start\n  }\n\n  return parse(value, settings)\n}\n\n// Parse entities.\n// eslint-disable-next-line complexity\nfunction parse(value, settings) {\n  var additional = settings.additional\n  var nonTerminated = settings.nonTerminated\n  var handleText = settings.text\n  var handleReference = settings.reference\n  var handleWarning = settings.warning\n  var textContext = settings.textContext\n  var referenceContext = settings.referenceContext\n  var warningContext = settings.warningContext\n  var pos = settings.position\n  var indent = settings.indent || []\n  var length = value.length\n  var index = 0\n  var lines = -1\n  var column = pos.column || 1\n  var line = pos.line || 1\n  var queue = ''\n  var result = []\n  var entityCharacters\n  var namedEntity\n  var terminated\n  var characters\n  var character\n  var reference\n  var following\n  var warning\n  var reason\n  var output\n  var entity\n  var begin\n  var start\n  var type\n  var test\n  var prev\n  var next\n  var diff\n  var end\n\n  if (typeof additional === 'string') {\n    additional = additional.charCodeAt(0)\n  }\n\n  // Cache the current point.\n  prev = now()\n\n  // Wrap `handleWarning`.\n  warning = handleWarning ? parseError : noop\n\n  // Ensure the algorithm walks over the first character and the end (inclusive).\n  index--\n  length++\n\n  while (++index < length) {\n    // If the previous character was a newline.\n    if (character === lineFeed) {\n      column = indent[lines] || 1\n    }\n\n    character = value.charCodeAt(index)\n\n    if (character === ampersand) {\n      following = value.charCodeAt(index + 1)\n\n      // The behaviour depends on the identity of the next character.\n      if (\n        following === tab ||\n        following === lineFeed ||\n        following === formFeed ||\n        following === space ||\n        following === ampersand ||\n        following === lessThan ||\n        following !== following ||\n        (additional && following === additional)\n      ) {\n        // Not a character reference.\n        // No characters are consumed, and nothing is returned.\n        // This is not an error, either.\n        queue += fromCharCode(character)\n        column++\n\n        continue\n      }\n\n      start = index + 1\n      begin = start\n      end = start\n\n      if (following === numberSign) {\n        // Numerical entity.\n        end = ++begin\n\n        // The behaviour further depends on the next character.\n        following = value.charCodeAt(end)\n\n        if (following === uppercaseX || following === lowercaseX) {\n          // ASCII hex digits.\n          type = hexa\n          end = ++begin\n        } else {\n          // ASCII digits.\n          type = deci\n        }\n      } else {\n        // Named entity.\n        type = name\n      }\n\n      entityCharacters = ''\n      entity = ''\n      characters = ''\n      test = tests[type]\n      end--\n\n      while (++end < length) {\n        following = value.charCodeAt(end)\n\n        if (!test(following)) {\n          break\n        }\n\n        characters += fromCharCode(following)\n\n        // Check if we can match a legacy named reference.\n        // If so, we cache that as the last viable named reference.\n        // This ensures we do not need to walk backwards later.\n        if (type === name && own.call(legacy, characters)) {\n          entityCharacters = characters\n          entity = legacy[characters]\n        }\n      }\n\n      terminated = value.charCodeAt(end) === semicolon\n\n      if (terminated) {\n        end++\n\n        namedEntity = type === name ? decodeEntity(characters) : false\n\n        if (namedEntity) {\n          entityCharacters = characters\n          entity = namedEntity\n        }\n      }\n\n      diff = 1 + end - start\n\n      if (!terminated && !nonTerminated) {\n        // Empty.\n      } else if (!characters) {\n        // An empty (possible) entity is valid, unless it’s numeric (thus an\n        // ampersand followed by an octothorp).\n        if (type !== name) {\n          warning(numericEmpty, diff)\n        }\n      } else if (type === name) {\n        // An ampersand followed by anything unknown, and not terminated, is\n        // invalid.\n        if (terminated && !entity) {\n          warning(namedUnknown, 1)\n        } else {\n          // If theres something after an entity name which is not known, cap\n          // the reference.\n          if (entityCharacters !== characters) {\n            end = begin + entityCharacters.length\n            diff = 1 + end - begin\n            terminated = false\n          }\n\n          // If the reference is not terminated, warn.\n          if (!terminated) {\n            reason = entityCharacters ? namedNotTerminated : namedEmpty\n\n            if (settings.attribute) {\n              following = value.charCodeAt(end)\n\n              if (following === equalsTo) {\n                warning(reason, diff)\n                entity = null\n              } else if (alphanumerical(following)) {\n                entity = null\n              } else {\n                warning(reason, diff)\n              }\n            } else {\n              warning(reason, diff)\n            }\n          }\n        }\n\n        reference = entity\n      } else {\n        if (!terminated) {\n          // All non-terminated numeric entities are not rendered, and trigger a\n          // warning.\n          warning(numericNotTerminated, diff)\n        }\n\n        // When terminated and number, parse as either hexadecimal or decimal.\n        reference = parseInt(characters, bases[type])\n\n        // Trigger a warning when the parsed number is prohibited, and replace\n        // with replacement character.\n        if (prohibited(reference)) {\n          warning(numericProhibited, diff)\n          reference = fromCharCode(replacementCharacter)\n        } else if (reference in invalid) {\n          // Trigger a warning when the parsed number is disallowed, and replace\n          // by an alternative.\n          warning(numericDisallowed, diff)\n          reference = invalid[reference]\n        } else {\n          // Parse the number.\n          output = ''\n\n          // Trigger a warning when the parsed number should not be used.\n          if (disallowed(reference)) {\n            warning(numericDisallowed, diff)\n          }\n\n          // Stringify the number.\n          if (reference > 0xffff) {\n            reference -= 0x10000\n            output += fromCharCode((reference >>> (10 & 0x3ff)) | 0xd800)\n            reference = 0xdc00 | (reference & 0x3ff)\n          }\n\n          reference = output + fromCharCode(reference)\n        }\n      }\n\n      // Found it!\n      // First eat the queued characters as normal text, then eat an entity.\n      if (reference) {\n        flush()\n\n        prev = now()\n        index = end - 1\n        column += end - start + 1\n        result.push(reference)\n        next = now()\n        next.offset++\n\n        if (handleReference) {\n          handleReference.call(\n            referenceContext,\n            reference,\n            {start: prev, end: next},\n            value.slice(start - 1, end)\n          )\n        }\n\n        prev = next\n      } else {\n        // If we could not find a reference, queue the checked characters (as\n        // normal characters), and move the pointer to their end.\n        // This is possible because we can be certain neither newlines nor\n        // ampersands are included.\n        characters = value.slice(start - 1, end)\n        queue += characters\n        column += characters.length\n        index = end - 1\n      }\n    } else {\n      // Handle anything other than an ampersand, including newlines and EOF.\n      if (\n        character === 10 // Line feed\n      ) {\n        line++\n        lines++\n        column = 0\n      }\n\n      if (character === character) {\n        queue += fromCharCode(character)\n        column++\n      } else {\n        flush()\n      }\n    }\n  }\n\n  // Return the reduced nodes, and any possible warnings.\n  return result.join('')\n\n  // Get current position.\n  function now() {\n    return {\n      line: line,\n      column: column,\n      offset: index + (pos.offset || 0)\n    }\n  }\n\n  // “Throw” a parse-error: a warning.\n  function parseError(code, offset) {\n    var position = now()\n\n    position.column += offset\n    position.offset += offset\n\n    handleWarning.call(warningContext, messages[code], position, code)\n  }\n\n  // Flush `queue` (normal text).\n  // Macro invoked before each entity and at the end of `value`.\n  // Does nothing when `queue` is empty.\n  function flush() {\n    if (queue) {\n      result.push(queue)\n\n      if (handleText) {\n        handleText.call(textContext, queue, {start: prev, end: now()})\n      }\n\n      queue = ''\n    }\n  }\n}\n\n// Check if `character` is outside the permissible unicode range.\nfunction prohibited(code) {\n  return (code >= 0xd800 && code <= 0xdfff) || code > 0x10ffff\n}\n\n// Check if `character` is disallowed.\nfunction disallowed(code) {\n  return (\n    (code >= 0x0001 && code <= 0x0008) ||\n    code === 0x000b ||\n    (code >= 0x000d && code <= 0x001f) ||\n    (code >= 0x007f && code <= 0x009f) ||\n    (code >= 0xfdd0 && code <= 0xfdef) ||\n    (code & 0xffff) === 0xffff ||\n    (code & 0xffff) === 0xfffe\n  )\n}\n","/*!\n * repeat-string <https://github.com/jonschlinkert/repeat-string>\n *\n * Copyright (c) 2014-2015, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n\n'use strict';\n\n/**\n * Results cache\n */\n\nvar res = '';\nvar cache;\n\n/**\n * Expose `repeat`\n */\n\nmodule.exports = repeat;\n\n/**\n * Repeat the given `string` the specified `number`\n * of times.\n *\n * **Example:**\n *\n * ```js\n * var repeat = require('repeat-string');\n * repeat('A', 5);\n * //=> AAAAA\n * ```\n *\n * @param {String} `string` The string to repeat\n * @param {Number} `number` The number of times to repeat the string\n * @return {String} Repeated string\n * @api public\n */\n\nfunction repeat(str, num) {\n  if (typeof str !== 'string') {\n    throw new TypeError('expected a string');\n  }\n\n  // cover common, quick use cases\n  if (num === 1) return str;\n  if (num === 2) return str + str;\n\n  var max = str.length * num;\n  if (cache !== str || typeof cache === 'undefined') {\n    cache = str;\n    res = '';\n  } else if (res.length >= max) {\n    return res.substr(0, max);\n  }\n\n  while (max > res.length && num > 1) {\n    if (num & 1) {\n      res += str;\n    }\n\n    num >>= 1;\n    str += str;\n  }\n\n  res += str;\n  res = res.substr(0, max);\n  return res;\n}\n","'use strict'\n\nmodule.exports = trimTrailingLines\n\n// Remove final newline characters from `value`.\nfunction trimTrailingLines(value) {\n  return String(value).replace(/\\n+$/, '')\n}\n","'use strict';\n\nmodule.exports = interrupt;\n\nfunction interrupt(interruptors, tokenizers, ctx, params) {\n  var bools = ['pedantic', 'commonmark'];\n  var count = bools.length;\n  var length = interruptors.length;\n  var index = -1;\n  var interruptor;\n  var config;\n  var fn;\n  var offset;\n  var bool;\n  var ignore;\n\n  while (++index < length) {\n    interruptor = interruptors[index];\n    config = interruptor[1] || {};\n    fn = interruptor[0];\n    offset = -1;\n    ignore = false;\n\n    while (++offset < count) {\n      bool = bools[offset];\n\n      if (config[bool] !== undefined && config[bool] !== ctx.options[bool]) {\n        ignore = true;\n        break;\n      }\n    }\n\n    if (ignore) {\n      continue;\n    }\n\n    if (tokenizers[fn].apply(ctx, params)) {\n      return true;\n    }\n  }\n\n  return false;\n}\n","'use strict';\n\nvar collapseWhiteSpace = require('collapse-white-space');\n\nmodule.exports = normalize;\n\n/* Normalize an identifier.  Collapses multiple white space\n * characters into a single space, and removes casing. */\nfunction normalize(value) {\n  return collapseWhiteSpace(value).toLowerCase();\n}\n","\"use strict\";\n\nexports.__esModule = true;\nexports.isElement = isElement;\nexports.isSVGElement = isSVGElement;\nexports.isSVGSVGElement = isSVGSVGElement;\nexports.isSVGGraphicsElement = isSVGGraphicsElement;\nexports.isTouchEvent = isTouchEvent;\nexports.isMouseEvent = isMouseEvent;\nexports.isEvent = isEvent;\n\nfunction isElement(elem) {\n  return !!elem && elem instanceof Element;\n} // functional definition of isSVGElement. Note that SVGSVGElements are HTMLElements\n\n\nfunction isSVGElement(elem) {\n  return !!elem && (elem instanceof SVGElement || 'ownerSVGElement' in elem);\n} // functional definition of SVGGElement\n\n\nfunction isSVGSVGElement(elem) {\n  return !!elem && 'createSVGPoint' in elem;\n}\n\nfunction isSVGGraphicsElement(elem) {\n  return !!elem && 'getScreenCTM' in elem;\n} // functional definition of TouchEvent\n\n\nfunction isTouchEvent(event) {\n  return !!event && 'changedTouches' in event;\n} // functional definition of MouseEvent\n\n\nfunction isMouseEvent(event) {\n  return !!event && 'clientX' in event;\n} // functional definition of event\n\n\nfunction isEvent(event) {\n  return !!event && (event instanceof Event || 'nativeEvent' in event && event.nativeEvent instanceof Event);\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports[\"default\"] = compareObjects;\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction compareObjects(objA, objB) {\n  var keys = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n\n  if (objA === objB) {\n    return false;\n  }\n\n  var aKeys = Object.keys(objA);\n  var bKeys = Object.keys(objB);\n\n  if (aKeys.length !== bKeys.length) {\n    return true;\n  }\n\n  var keysMap = {};\n  var i, len;\n\n  for (i = 0, len = keys.length; i < len; i++) {\n    keysMap[keys[i]] = true;\n  }\n\n  for (i = 0, len = aKeys.length; i < len; i++) {\n    var key = aKeys[i];\n    var aValue = objA[key];\n    var bValue = objB[key];\n\n    if (aValue === bValue) {\n      continue;\n    }\n\n    if (!keysMap[key] || aValue === null || bValue === null || _typeof(aValue) !== 'object' || _typeof(bValue) !== 'object') {\n      return true;\n    }\n\n    var aValueKeys = Object.keys(aValue);\n    var bValueKeys = Object.keys(bValue);\n\n    if (aValueKeys.length !== bValueKeys.length) {\n      return true;\n    }\n\n    for (var n = 0, length = aValueKeys.length; n < length; n++) {\n      var aValueKey = aValueKeys[n];\n\n      if (aValue[aValueKey] !== bValue[aValueKey]) {\n        return true;\n      }\n    }\n  }\n\n  return false;\n}","/**\n * XHR based transport mechanism\n *\n * @returns {object} - Object with three properties: name, send and complete\n */\nfunction xhr() {\n\tconst xhr = new window.XMLHttpRequest();\n\n\treturn {\n\t\tname: 'xhr',\n\t\tsend: function (url, data) {\n\t\t\txhr.open('POST', url, true);\n\t\t\txhr.withCredentials = true;\n\t\t\txhr.setRequestHeader('Content-type', 'application/json');\n\t\t\txhr.send(data);\n\t\t},\n\t\tcomplete: function (callback) {\n\t\t\txhr.onerror = function () {\n\t\t\t\tcallback(this);\n\t\t\t};\n\t\t\txhr.onload = function () {\n\t\t\t\tif (xhr.status >= 200 && xhr.status < 300) {\n\t\t\t\t\tcallback();\n\t\t\t\t} else {\n\t\t\t\t\tcallback('Incorrect response: ' + xhr.status);\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t};\n}\n\nexport { xhr };\n","/**\n * Beacon based transport mechanism\n *\n * @returns {object} - Object with three properties: name, send and complete\n */\nfunction sendBeacon() {\n\tlet resolver;\n\tlet rejecter;\n\tconst p = new Promise((resolve, reject) => {\n\t\tresolver = resolve;\n\t\trejecter = reject;\n\t});\n\treturn {\n\t\tname: 'sendBeacon',\n\t\tsend: function (url, data) {\n\t\t\tif (navigator.sendBeacon(url, data)) {\n\t\t\t\tresolver();\n\t\t\t} else {\n\t\t\t\trejecter(new Error('Failed to send beacon event: ' + data.toString()));\n\t\t\t}\n\n\t\t},\n\t\tcomplete: function (callback) {\n\t\t\tif (callback) {\n\t\t\t\tp.then(callback, callback);\n\t\t\t}\n\t\t}\n\t};\n}\n\nexport { sendBeacon };\n","import {encode} from '../../utils.js';\n\n/**\n * Image based transport mechanism\n *\n * @returns {object} - Object with three properties: name, send and complete\n */\nfunction image () {\n\tconst image = new Image(1,1);\n\n\treturn {\n\t\tname: 'image',\n\t\tsend: function (url, data) {\n\t\t\turl = url.replace('https://spoor-api.ft.com/ingest', 'https://spoor-api.ft.com/px.gif');\n\t\t\timage.src = url + (url.indexOf('?') > -1 ? '&' : '?') + 'data=' + encode(data);\n\t\t},\n\t\tcomplete: function (callback) {\n\t\t\tif (image.addEventListener) {\n\t\t\t\timage.addEventListener('error', callback);\n\t\t\t\timage.addEventListener('load', () => callback());\n\t\t\t} else { // it's IE!\n\t\t\t\timage.attachEvent('onerror', callback);\n\t\t\t\timage.attachEvent('onload', () => callback());\n\t\t\t}\n\t\t}\n\t};\n}\n\nexport { image };\n","\nimport Overlay from './src/js/overlay.js';\n\nconst constructAll = function() {\n\tOverlay.init();\n\tdocument.removeEventListener('o.DOMContentLoaded', constructAll);\n};\n\nif (typeof document !== 'undefined') {\n\tdocument.addEventListener('o.DOMContentLoaded', constructAll);\n}\n\nexport default Overlay;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nfunction _defineProperties(target, props) {\n  for (var i = 0; i < props.length; i++) {\n    var descriptor = props[i];\n    descriptor.enumerable = descriptor.enumerable || false;\n    descriptor.configurable = true;\n    if (\"value\" in descriptor) descriptor.writable = true;\n    Object.defineProperty(target, descriptor.key, descriptor);\n  }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n  if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n  if (staticProps) _defineProperties(Constructor, staticProps);\n  return Constructor;\n}\n\nfunction _inheritsLoose(subClass, superClass) {\n  subClass.prototype = Object.create(superClass.prototype);\n  subClass.prototype.constructor = subClass;\n  subClass.__proto__ = superClass;\n}\n\nfunction _getPrototypeOf(o) {\n  _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n    return o.__proto__ || Object.getPrototypeOf(o);\n  };\n  return _getPrototypeOf(o);\n}\n\nfunction _setPrototypeOf(o, p) {\n  _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n    o.__proto__ = p;\n    return o;\n  };\n\n  return _setPrototypeOf(o, p);\n}\n\nfunction _isNativeReflectConstruct() {\n  if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n  if (Reflect.construct.sham) return false;\n  if (typeof Proxy === \"function\") return true;\n\n  try {\n    Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n\nfunction _construct(Parent, args, Class) {\n  if (_isNativeReflectConstruct()) {\n    _construct = Reflect.construct;\n  } else {\n    _construct = function _construct(Parent, args, Class) {\n      var a = [null];\n      a.push.apply(a, args);\n      var Constructor = Function.bind.apply(Parent, a);\n      var instance = new Constructor();\n      if (Class) _setPrototypeOf(instance, Class.prototype);\n      return instance;\n    };\n  }\n\n  return _construct.apply(null, arguments);\n}\n\nfunction _isNativeFunction(fn) {\n  return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}\n\nfunction _wrapNativeSuper(Class) {\n  var _cache = typeof Map === \"function\" ? new Map() : undefined;\n\n  _wrapNativeSuper = function _wrapNativeSuper(Class) {\n    if (Class === null || !_isNativeFunction(Class)) return Class;\n\n    if (typeof Class !== \"function\") {\n      throw new TypeError(\"Super expression must either be null or a function\");\n    }\n\n    if (typeof _cache !== \"undefined\") {\n      if (_cache.has(Class)) return _cache.get(Class);\n\n      _cache.set(Class, Wrapper);\n    }\n\n    function Wrapper() {\n      return _construct(Class, arguments, _getPrototypeOf(this).constructor);\n    }\n\n    Wrapper.prototype = Object.create(Class.prototype, {\n      constructor: {\n        value: Wrapper,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }\n    });\n    return _setPrototypeOf(Wrapper, Class);\n  };\n\n  return _wrapNativeSuper(Class);\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n  if (source == null) return {};\n  var target = {};\n  var sourceKeys = Object.keys(source);\n  var key, i;\n\n  for (i = 0; i < sourceKeys.length; i++) {\n    key = sourceKeys[i];\n    if (excluded.indexOf(key) >= 0) continue;\n    target[key] = source[key];\n  }\n\n  return target;\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n  if (!o) return;\n  if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n  var n = Object.prototype.toString.call(o).slice(8, -1);\n  if (n === \"Object\" && o.constructor) n = o.constructor.name;\n  if (n === \"Map\" || n === \"Set\") return Array.from(n);\n  if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n  if (len == null || len > arr.length) len = arr.length;\n\n  for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n  return arr2;\n}\n\nfunction _createForOfIteratorHelperLoose(o) {\n  var i = 0;\n\n  if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) {\n    if (Array.isArray(o) || (o = _unsupportedIterableToArray(o))) return function () {\n      if (i >= o.length) return {\n        done: true\n      };\n      return {\n        done: false,\n        value: o[i++]\n      };\n    };\n    throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n  }\n\n  i = o[Symbol.iterator]();\n  return i.next.bind(i);\n}\n\n// these aren't really private, but nor are they really useful to document\n\n/**\n * @private\n */\nvar LuxonError = /*#__PURE__*/function (_Error) {\n  _inheritsLoose(LuxonError, _Error);\n\n  function LuxonError() {\n    return _Error.apply(this, arguments) || this;\n  }\n\n  return LuxonError;\n}( /*#__PURE__*/_wrapNativeSuper(Error));\n/**\n * @private\n */\n\n\nvar InvalidDateTimeError = /*#__PURE__*/function (_LuxonError) {\n  _inheritsLoose(InvalidDateTimeError, _LuxonError);\n\n  function InvalidDateTimeError(reason) {\n    return _LuxonError.call(this, \"Invalid DateTime: \" + reason.toMessage()) || this;\n  }\n\n  return InvalidDateTimeError;\n}(LuxonError);\n/**\n * @private\n */\n\nvar InvalidIntervalError = /*#__PURE__*/function (_LuxonError2) {\n  _inheritsLoose(InvalidIntervalError, _LuxonError2);\n\n  function InvalidIntervalError(reason) {\n    return _LuxonError2.call(this, \"Invalid Interval: \" + reason.toMessage()) || this;\n  }\n\n  return InvalidIntervalError;\n}(LuxonError);\n/**\n * @private\n */\n\nvar InvalidDurationError = /*#__PURE__*/function (_LuxonError3) {\n  _inheritsLoose(InvalidDurationError, _LuxonError3);\n\n  function InvalidDurationError(reason) {\n    return _LuxonError3.call(this, \"Invalid Duration: \" + reason.toMessage()) || this;\n  }\n\n  return InvalidDurationError;\n}(LuxonError);\n/**\n * @private\n */\n\nvar ConflictingSpecificationError = /*#__PURE__*/function (_LuxonError4) {\n  _inheritsLoose(ConflictingSpecificationError, _LuxonError4);\n\n  function ConflictingSpecificationError() {\n    return _LuxonError4.apply(this, arguments) || this;\n  }\n\n  return ConflictingSpecificationError;\n}(LuxonError);\n/**\n * @private\n */\n\nvar InvalidUnitError = /*#__PURE__*/function (_LuxonError5) {\n  _inheritsLoose(InvalidUnitError, _LuxonError5);\n\n  function InvalidUnitError(unit) {\n    return _LuxonError5.call(this, \"Invalid unit \" + unit) || this;\n  }\n\n  return InvalidUnitError;\n}(LuxonError);\n/**\n * @private\n */\n\nvar InvalidArgumentError = /*#__PURE__*/function (_LuxonError6) {\n  _inheritsLoose(InvalidArgumentError, _LuxonError6);\n\n  function InvalidArgumentError() {\n    return _LuxonError6.apply(this, arguments) || this;\n  }\n\n  return InvalidArgumentError;\n}(LuxonError);\n/**\n * @private\n */\n\nvar ZoneIsAbstractError = /*#__PURE__*/function (_LuxonError7) {\n  _inheritsLoose(ZoneIsAbstractError, _LuxonError7);\n\n  function ZoneIsAbstractError() {\n    return _LuxonError7.call(this, \"Zone is an abstract class\") || this;\n  }\n\n  return ZoneIsAbstractError;\n}(LuxonError);\n\n/**\n * @private\n */\nvar n = \"numeric\",\n    s = \"short\",\n    l = \"long\";\nvar DATE_SHORT = {\n  year: n,\n  month: n,\n  day: n\n};\nvar DATE_MED = {\n  year: n,\n  month: s,\n  day: n\n};\nvar DATE_MED_WITH_WEEKDAY = {\n  year: n,\n  month: s,\n  day: n,\n  weekday: s\n};\nvar DATE_FULL = {\n  year: n,\n  month: l,\n  day: n\n};\nvar DATE_HUGE = {\n  year: n,\n  month: l,\n  day: n,\n  weekday: l\n};\nvar TIME_SIMPLE = {\n  hour: n,\n  minute: n\n};\nvar TIME_WITH_SECONDS = {\n  hour: n,\n  minute: n,\n  second: n\n};\nvar TIME_WITH_SHORT_OFFSET = {\n  hour: n,\n  minute: n,\n  second: n,\n  timeZoneName: s\n};\nvar TIME_WITH_LONG_OFFSET = {\n  hour: n,\n  minute: n,\n  second: n,\n  timeZoneName: l\n};\nvar TIME_24_SIMPLE = {\n  hour: n,\n  minute: n,\n  hour12: false\n};\n/**\n * {@link toLocaleString}; format like '09:30:23', always 24-hour.\n */\n\nvar TIME_24_WITH_SECONDS = {\n  hour: n,\n  minute: n,\n  second: n,\n  hour12: false\n};\n/**\n * {@link toLocaleString}; format like '09:30:23 EDT', always 24-hour.\n */\n\nvar TIME_24_WITH_SHORT_OFFSET = {\n  hour: n,\n  minute: n,\n  second: n,\n  hour12: false,\n  timeZoneName: s\n};\n/**\n * {@link toLocaleString}; format like '09:30:23 Eastern Daylight Time', always 24-hour.\n */\n\nvar TIME_24_WITH_LONG_OFFSET = {\n  hour: n,\n  minute: n,\n  second: n,\n  hour12: false,\n  timeZoneName: l\n};\n/**\n * {@link toLocaleString}; format like '10/14/1983, 9:30 AM'. Only 12-hour if the locale is.\n */\n\nvar DATETIME_SHORT = {\n  year: n,\n  month: n,\n  day: n,\n  hour: n,\n  minute: n\n};\n/**\n * {@link toLocaleString}; format like '10/14/1983, 9:30:33 AM'. Only 12-hour if the locale is.\n */\n\nvar DATETIME_SHORT_WITH_SECONDS = {\n  year: n,\n  month: n,\n  day: n,\n  hour: n,\n  minute: n,\n  second: n\n};\nvar DATETIME_MED = {\n  year: n,\n  month: s,\n  day: n,\n  hour: n,\n  minute: n\n};\nvar DATETIME_MED_WITH_SECONDS = {\n  year: n,\n  month: s,\n  day: n,\n  hour: n,\n  minute: n,\n  second: n\n};\nvar DATETIME_MED_WITH_WEEKDAY = {\n  year: n,\n  month: s,\n  day: n,\n  weekday: s,\n  hour: n,\n  minute: n\n};\nvar DATETIME_FULL = {\n  year: n,\n  month: l,\n  day: n,\n  hour: n,\n  minute: n,\n  timeZoneName: s\n};\nvar DATETIME_FULL_WITH_SECONDS = {\n  year: n,\n  month: l,\n  day: n,\n  hour: n,\n  minute: n,\n  second: n,\n  timeZoneName: s\n};\nvar DATETIME_HUGE = {\n  year: n,\n  month: l,\n  day: n,\n  weekday: l,\n  hour: n,\n  minute: n,\n  timeZoneName: l\n};\nvar DATETIME_HUGE_WITH_SECONDS = {\n  year: n,\n  month: l,\n  day: n,\n  weekday: l,\n  hour: n,\n  minute: n,\n  second: n,\n  timeZoneName: l\n};\n\n/*\n  This is just a junk drawer, containing anything used across multiple classes.\n  Because Luxon is small(ish), this should stay small and we won't worry about splitting\n  it up into, say, parsingUtil.js and basicUtil.js and so on. But they are divided up by feature area.\n*/\n/**\n * @private\n */\n// TYPES\n\nfunction isUndefined(o) {\n  return typeof o === \"undefined\";\n}\nfunction isNumber(o) {\n  return typeof o === \"number\";\n}\nfunction isInteger(o) {\n  return typeof o === \"number\" && o % 1 === 0;\n}\nfunction isString(o) {\n  return typeof o === \"string\";\n}\nfunction isDate(o) {\n  return Object.prototype.toString.call(o) === \"[object Date]\";\n} // CAPABILITIES\n\nfunction hasIntl() {\n  try {\n    return typeof Intl !== \"undefined\" && Intl.DateTimeFormat;\n  } catch (e) {\n    return false;\n  }\n}\nfunction hasFormatToParts() {\n  return !isUndefined(Intl.DateTimeFormat.prototype.formatToParts);\n}\nfunction hasRelative() {\n  try {\n    return typeof Intl !== \"undefined\" && !!Intl.RelativeTimeFormat;\n  } catch (e) {\n    return false;\n  }\n} // OBJECTS AND ARRAYS\n\nfunction maybeArray(thing) {\n  return Array.isArray(thing) ? thing : [thing];\n}\nfunction bestBy(arr, by, compare) {\n  if (arr.length === 0) {\n    return undefined;\n  }\n\n  return arr.reduce(function (best, next) {\n    var pair = [by(next), next];\n\n    if (!best) {\n      return pair;\n    } else if (compare(best[0], pair[0]) === best[0]) {\n      return best;\n    } else {\n      return pair;\n    }\n  }, null)[1];\n}\nfunction pick(obj, keys) {\n  return keys.reduce(function (a, k) {\n    a[k] = obj[k];\n    return a;\n  }, {});\n}\nfunction hasOwnProperty(obj, prop) {\n  return Object.prototype.hasOwnProperty.call(obj, prop);\n} // NUMBERS AND STRINGS\n\nfunction integerBetween(thing, bottom, top) {\n  return isInteger(thing) && thing >= bottom && thing <= top;\n} // x % n but takes the sign of n instead of x\n\nfunction floorMod(x, n) {\n  return x - n * Math.floor(x / n);\n}\nfunction padStart(input, n) {\n  if (n === void 0) {\n    n = 2;\n  }\n\n  var minus = input < 0 ? \"-\" : \"\";\n  var target = minus ? input * -1 : input;\n  var result;\n\n  if (target.toString().length < n) {\n    result = (\"0\".repeat(n) + target).slice(-n);\n  } else {\n    result = target.toString();\n  }\n\n  return \"\" + minus + result;\n}\nfunction parseInteger(string) {\n  if (isUndefined(string) || string === null || string === \"\") {\n    return undefined;\n  } else {\n    return parseInt(string, 10);\n  }\n}\nfunction parseMillis(fraction) {\n  // Return undefined (instead of 0) in these cases, where fraction is not set\n  if (isUndefined(fraction) || fraction === null || fraction === \"\") {\n    return undefined;\n  } else {\n    var f = parseFloat(\"0.\" + fraction) * 1000;\n    return Math.floor(f);\n  }\n}\nfunction roundTo(number, digits, towardZero) {\n  if (towardZero === void 0) {\n    towardZero = false;\n  }\n\n  var factor = Math.pow(10, digits),\n      rounder = towardZero ? Math.trunc : Math.round;\n  return rounder(number * factor) / factor;\n} // DATE BASICS\n\nfunction isLeapYear(year) {\n  return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n}\nfunction daysInYear(year) {\n  return isLeapYear(year) ? 366 : 365;\n}\nfunction daysInMonth(year, month) {\n  var modMonth = floorMod(month - 1, 12) + 1,\n      modYear = year + (month - modMonth) / 12;\n\n  if (modMonth === 2) {\n    return isLeapYear(modYear) ? 29 : 28;\n  } else {\n    return [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][modMonth - 1];\n  }\n} // covert a calendar object to a local timestamp (epoch, but with the offset baked in)\n\nfunction objToLocalTS(obj) {\n  var d = Date.UTC(obj.year, obj.month - 1, obj.day, obj.hour, obj.minute, obj.second, obj.millisecond); // for legacy reasons, years between 0 and 99 are interpreted as 19XX; revert that\n\n  if (obj.year < 100 && obj.year >= 0) {\n    d = new Date(d);\n    d.setUTCFullYear(d.getUTCFullYear() - 1900);\n  }\n\n  return +d;\n}\nfunction weeksInWeekYear(weekYear) {\n  var p1 = (weekYear + Math.floor(weekYear / 4) - Math.floor(weekYear / 100) + Math.floor(weekYear / 400)) % 7,\n      last = weekYear - 1,\n      p2 = (last + Math.floor(last / 4) - Math.floor(last / 100) + Math.floor(last / 400)) % 7;\n  return p1 === 4 || p2 === 3 ? 53 : 52;\n}\nfunction untruncateYear(year) {\n  if (year > 99) {\n    return year;\n  } else return year > 60 ? 1900 + year : 2000 + year;\n} // PARSING\n\nfunction parseZoneInfo(ts, offsetFormat, locale, timeZone) {\n  if (timeZone === void 0) {\n    timeZone = null;\n  }\n\n  var date = new Date(ts),\n      intlOpts = {\n    hour12: false,\n    year: \"numeric\",\n    month: \"2-digit\",\n    day: \"2-digit\",\n    hour: \"2-digit\",\n    minute: \"2-digit\"\n  };\n\n  if (timeZone) {\n    intlOpts.timeZone = timeZone;\n  }\n\n  var modified = Object.assign({\n    timeZoneName: offsetFormat\n  }, intlOpts),\n      intl = hasIntl();\n\n  if (intl && hasFormatToParts()) {\n    var parsed = new Intl.DateTimeFormat(locale, modified).formatToParts(date).find(function (m) {\n      return m.type.toLowerCase() === \"timezonename\";\n    });\n    return parsed ? parsed.value : null;\n  } else if (intl) {\n    // this probably doesn't work for all locales\n    var without = new Intl.DateTimeFormat(locale, intlOpts).format(date),\n        included = new Intl.DateTimeFormat(locale, modified).format(date),\n        diffed = included.substring(without.length),\n        trimmed = diffed.replace(/^[, \\u200e]+/, \"\");\n    return trimmed;\n  } else {\n    return null;\n  }\n} // signedOffset('-5', '30') -> -330\n\nfunction signedOffset(offHourStr, offMinuteStr) {\n  var offHour = parseInt(offHourStr, 10); // don't || this because we want to preserve -0\n\n  if (Number.isNaN(offHour)) {\n    offHour = 0;\n  }\n\n  var offMin = parseInt(offMinuteStr, 10) || 0,\n      offMinSigned = offHour < 0 || Object.is(offHour, -0) ? -offMin : offMin;\n  return offHour * 60 + offMinSigned;\n} // COERCION\n\nfunction asNumber(value) {\n  var numericValue = Number(value);\n  if (typeof value === \"boolean\" || value === \"\" || Number.isNaN(numericValue)) throw new InvalidArgumentError(\"Invalid unit value \" + value);\n  return numericValue;\n}\nfunction normalizeObject(obj, normalizer, nonUnitKeys) {\n  var normalized = {};\n\n  for (var u in obj) {\n    if (hasOwnProperty(obj, u)) {\n      if (nonUnitKeys.indexOf(u) >= 0) continue;\n      var v = obj[u];\n      if (v === undefined || v === null) continue;\n      normalized[normalizer(u)] = asNumber(v);\n    }\n  }\n\n  return normalized;\n}\nfunction formatOffset(offset, format) {\n  var hours = Math.trunc(Math.abs(offset / 60)),\n      minutes = Math.trunc(Math.abs(offset % 60)),\n      sign = offset >= 0 ? \"+\" : \"-\";\n\n  switch (format) {\n    case \"short\":\n      return \"\" + sign + padStart(hours, 2) + \":\" + padStart(minutes, 2);\n\n    case \"narrow\":\n      return \"\" + sign + hours + (minutes > 0 ? \":\" + minutes : \"\");\n\n    case \"techie\":\n      return \"\" + sign + padStart(hours, 2) + padStart(minutes, 2);\n\n    default:\n      throw new RangeError(\"Value format \" + format + \" is out of range for property format\");\n  }\n}\nfunction timeObject(obj) {\n  return pick(obj, [\"hour\", \"minute\", \"second\", \"millisecond\"]);\n}\nvar ianaRegex = /[A-Za-z_+-]{1,256}(:?\\/[A-Za-z_+-]{1,256}(\\/[A-Za-z_+-]{1,256})?)?/;\n\nfunction stringify(obj) {\n  return JSON.stringify(obj, Object.keys(obj).sort());\n}\n/**\n * @private\n */\n\n\nvar monthsLong = [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"];\nvar monthsShort = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"];\nvar monthsNarrow = [\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"];\nfunction months(length) {\n  switch (length) {\n    case \"narrow\":\n      return [].concat(monthsNarrow);\n\n    case \"short\":\n      return [].concat(monthsShort);\n\n    case \"long\":\n      return [].concat(monthsLong);\n\n    case \"numeric\":\n      return [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"];\n\n    case \"2-digit\":\n      return [\"01\", \"02\", \"03\", \"04\", \"05\", \"06\", \"07\", \"08\", \"09\", \"10\", \"11\", \"12\"];\n\n    default:\n      return null;\n  }\n}\nvar weekdaysLong = [\"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\", \"Sunday\"];\nvar weekdaysShort = [\"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\"];\nvar weekdaysNarrow = [\"M\", \"T\", \"W\", \"T\", \"F\", \"S\", \"S\"];\nfunction weekdays(length) {\n  switch (length) {\n    case \"narrow\":\n      return [].concat(weekdaysNarrow);\n\n    case \"short\":\n      return [].concat(weekdaysShort);\n\n    case \"long\":\n      return [].concat(weekdaysLong);\n\n    case \"numeric\":\n      return [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\"];\n\n    default:\n      return null;\n  }\n}\nvar meridiems = [\"AM\", \"PM\"];\nvar erasLong = [\"Before Christ\", \"Anno Domini\"];\nvar erasShort = [\"BC\", \"AD\"];\nvar erasNarrow = [\"B\", \"A\"];\nfunction eras(length) {\n  switch (length) {\n    case \"narrow\":\n      return [].concat(erasNarrow);\n\n    case \"short\":\n      return [].concat(erasShort);\n\n    case \"long\":\n      return [].concat(erasLong);\n\n    default:\n      return null;\n  }\n}\nfunction meridiemForDateTime(dt) {\n  return meridiems[dt.hour < 12 ? 0 : 1];\n}\nfunction weekdayForDateTime(dt, length) {\n  return weekdays(length)[dt.weekday - 1];\n}\nfunction monthForDateTime(dt, length) {\n  return months(length)[dt.month - 1];\n}\nfunction eraForDateTime(dt, length) {\n  return eras(length)[dt.year < 0 ? 0 : 1];\n}\nfunction formatRelativeTime(unit, count, numeric, narrow) {\n  if (numeric === void 0) {\n    numeric = \"always\";\n  }\n\n  if (narrow === void 0) {\n    narrow = false;\n  }\n\n  var units = {\n    years: [\"year\", \"yr.\"],\n    quarters: [\"quarter\", \"qtr.\"],\n    months: [\"month\", \"mo.\"],\n    weeks: [\"week\", \"wk.\"],\n    days: [\"day\", \"day\", \"days\"],\n    hours: [\"hour\", \"hr.\"],\n    minutes: [\"minute\", \"min.\"],\n    seconds: [\"second\", \"sec.\"]\n  };\n  var lastable = [\"hours\", \"minutes\", \"seconds\"].indexOf(unit) === -1;\n\n  if (numeric === \"auto\" && lastable) {\n    var isDay = unit === \"days\";\n\n    switch (count) {\n      case 1:\n        return isDay ? \"tomorrow\" : \"next \" + units[unit][0];\n\n      case -1:\n        return isDay ? \"yesterday\" : \"last \" + units[unit][0];\n\n      case 0:\n        return isDay ? \"today\" : \"this \" + units[unit][0];\n\n    }\n  }\n\n  var isInPast = Object.is(count, -0) || count < 0,\n      fmtValue = Math.abs(count),\n      singular = fmtValue === 1,\n      lilUnits = units[unit],\n      fmtUnit = narrow ? singular ? lilUnits[1] : lilUnits[2] || lilUnits[1] : singular ? units[unit][0] : unit;\n  return isInPast ? fmtValue + \" \" + fmtUnit + \" ago\" : \"in \" + fmtValue + \" \" + fmtUnit;\n}\nfunction formatString(knownFormat) {\n  // these all have the offsets removed because we don't have access to them\n  // without all the intl stuff this is backfilling\n  var filtered = pick(knownFormat, [\"weekday\", \"era\", \"year\", \"month\", \"day\", \"hour\", \"minute\", \"second\", \"timeZoneName\", \"hour12\"]),\n      key = stringify(filtered),\n      dateTimeHuge = \"EEEE, LLLL d, yyyy, h:mm a\";\n\n  switch (key) {\n    case stringify(DATE_SHORT):\n      return \"M/d/yyyy\";\n\n    case stringify(DATE_MED):\n      return \"LLL d, yyyy\";\n\n    case stringify(DATE_MED_WITH_WEEKDAY):\n      return \"EEE, LLL d, yyyy\";\n\n    case stringify(DATE_FULL):\n      return \"LLLL d, yyyy\";\n\n    case stringify(DATE_HUGE):\n      return \"EEEE, LLLL d, yyyy\";\n\n    case stringify(TIME_SIMPLE):\n      return \"h:mm a\";\n\n    case stringify(TIME_WITH_SECONDS):\n      return \"h:mm:ss a\";\n\n    case stringify(TIME_WITH_SHORT_OFFSET):\n      return \"h:mm a\";\n\n    case stringify(TIME_WITH_LONG_OFFSET):\n      return \"h:mm a\";\n\n    case stringify(TIME_24_SIMPLE):\n      return \"HH:mm\";\n\n    case stringify(TIME_24_WITH_SECONDS):\n      return \"HH:mm:ss\";\n\n    case stringify(TIME_24_WITH_SHORT_OFFSET):\n      return \"HH:mm\";\n\n    case stringify(TIME_24_WITH_LONG_OFFSET):\n      return \"HH:mm\";\n\n    case stringify(DATETIME_SHORT):\n      return \"M/d/yyyy, h:mm a\";\n\n    case stringify(DATETIME_MED):\n      return \"LLL d, yyyy, h:mm a\";\n\n    case stringify(DATETIME_FULL):\n      return \"LLLL d, yyyy, h:mm a\";\n\n    case stringify(DATETIME_HUGE):\n      return dateTimeHuge;\n\n    case stringify(DATETIME_SHORT_WITH_SECONDS):\n      return \"M/d/yyyy, h:mm:ss a\";\n\n    case stringify(DATETIME_MED_WITH_SECONDS):\n      return \"LLL d, yyyy, h:mm:ss a\";\n\n    case stringify(DATETIME_MED_WITH_WEEKDAY):\n      return \"EEE, d LLL yyyy, h:mm a\";\n\n    case stringify(DATETIME_FULL_WITH_SECONDS):\n      return \"LLLL d, yyyy, h:mm:ss a\";\n\n    case stringify(DATETIME_HUGE_WITH_SECONDS):\n      return \"EEEE, LLLL d, yyyy, h:mm:ss a\";\n\n    default:\n      return dateTimeHuge;\n  }\n}\n\nfunction stringifyTokens(splits, tokenToString) {\n  var s = \"\";\n\n  for (var _iterator = _createForOfIteratorHelperLoose(splits), _step; !(_step = _iterator()).done;) {\n    var token = _step.value;\n\n    if (token.literal) {\n      s += token.val;\n    } else {\n      s += tokenToString(token.val);\n    }\n  }\n\n  return s;\n}\n\nvar _macroTokenToFormatOpts = {\n  D: DATE_SHORT,\n  DD: DATE_MED,\n  DDD: DATE_FULL,\n  DDDD: DATE_HUGE,\n  t: TIME_SIMPLE,\n  tt: TIME_WITH_SECONDS,\n  ttt: TIME_WITH_SHORT_OFFSET,\n  tttt: TIME_WITH_LONG_OFFSET,\n  T: TIME_24_SIMPLE,\n  TT: TIME_24_WITH_SECONDS,\n  TTT: TIME_24_WITH_SHORT_OFFSET,\n  TTTT: TIME_24_WITH_LONG_OFFSET,\n  f: DATETIME_SHORT,\n  ff: DATETIME_MED,\n  fff: DATETIME_FULL,\n  ffff: DATETIME_HUGE,\n  F: DATETIME_SHORT_WITH_SECONDS,\n  FF: DATETIME_MED_WITH_SECONDS,\n  FFF: DATETIME_FULL_WITH_SECONDS,\n  FFFF: DATETIME_HUGE_WITH_SECONDS\n};\n/**\n * @private\n */\n\nvar Formatter = /*#__PURE__*/function () {\n  Formatter.create = function create(locale, opts) {\n    if (opts === void 0) {\n      opts = {};\n    }\n\n    return new Formatter(locale, opts);\n  };\n\n  Formatter.parseFormat = function parseFormat(fmt) {\n    var current = null,\n        currentFull = \"\",\n        bracketed = false;\n    var splits = [];\n\n    for (var i = 0; i < fmt.length; i++) {\n      var c = fmt.charAt(i);\n\n      if (c === \"'\") {\n        if (currentFull.length > 0) {\n          splits.push({\n            literal: bracketed,\n            val: currentFull\n          });\n        }\n\n        current = null;\n        currentFull = \"\";\n        bracketed = !bracketed;\n      } else if (bracketed) {\n        currentFull += c;\n      } else if (c === current) {\n        currentFull += c;\n      } else {\n        if (currentFull.length > 0) {\n          splits.push({\n            literal: false,\n            val: currentFull\n          });\n        }\n\n        currentFull = c;\n        current = c;\n      }\n    }\n\n    if (currentFull.length > 0) {\n      splits.push({\n        literal: bracketed,\n        val: currentFull\n      });\n    }\n\n    return splits;\n  };\n\n  Formatter.macroTokenToFormatOpts = function macroTokenToFormatOpts(token) {\n    return _macroTokenToFormatOpts[token];\n  };\n\n  function Formatter(locale, formatOpts) {\n    this.opts = formatOpts;\n    this.loc = locale;\n    this.systemLoc = null;\n  }\n\n  var _proto = Formatter.prototype;\n\n  _proto.formatWithSystemDefault = function formatWithSystemDefault(dt, opts) {\n    if (this.systemLoc === null) {\n      this.systemLoc = this.loc.redefaultToSystem();\n    }\n\n    var df = this.systemLoc.dtFormatter(dt, Object.assign({}, this.opts, opts));\n    return df.format();\n  };\n\n  _proto.formatDateTime = function formatDateTime(dt, opts) {\n    if (opts === void 0) {\n      opts = {};\n    }\n\n    var df = this.loc.dtFormatter(dt, Object.assign({}, this.opts, opts));\n    return df.format();\n  };\n\n  _proto.formatDateTimeParts = function formatDateTimeParts(dt, opts) {\n    if (opts === void 0) {\n      opts = {};\n    }\n\n    var df = this.loc.dtFormatter(dt, Object.assign({}, this.opts, opts));\n    return df.formatToParts();\n  };\n\n  _proto.resolvedOptions = function resolvedOptions(dt, opts) {\n    if (opts === void 0) {\n      opts = {};\n    }\n\n    var df = this.loc.dtFormatter(dt, Object.assign({}, this.opts, opts));\n    return df.resolvedOptions();\n  };\n\n  _proto.num = function num(n, p) {\n    if (p === void 0) {\n      p = 0;\n    }\n\n    // we get some perf out of doing this here, annoyingly\n    if (this.opts.forceSimple) {\n      return padStart(n, p);\n    }\n\n    var opts = Object.assign({}, this.opts);\n\n    if (p > 0) {\n      opts.padTo = p;\n    }\n\n    return this.loc.numberFormatter(opts).format(n);\n  };\n\n  _proto.formatDateTimeFromString = function formatDateTimeFromString(dt, fmt) {\n    var _this = this;\n\n    var knownEnglish = this.loc.listingMode() === \"en\",\n        useDateTimeFormatter = this.loc.outputCalendar && this.loc.outputCalendar !== \"gregory\" && hasFormatToParts(),\n        string = function string(opts, extract) {\n      return _this.loc.extract(dt, opts, extract);\n    },\n        formatOffset = function formatOffset(opts) {\n      if (dt.isOffsetFixed && dt.offset === 0 && opts.allowZ) {\n        return \"Z\";\n      }\n\n      return dt.isValid ? dt.zone.formatOffset(dt.ts, opts.format) : \"\";\n    },\n        meridiem = function meridiem() {\n      return knownEnglish ? meridiemForDateTime(dt) : string({\n        hour: \"numeric\",\n        hour12: true\n      }, \"dayperiod\");\n    },\n        month = function month(length, standalone) {\n      return knownEnglish ? monthForDateTime(dt, length) : string(standalone ? {\n        month: length\n      } : {\n        month: length,\n        day: \"numeric\"\n      }, \"month\");\n    },\n        weekday = function weekday(length, standalone) {\n      return knownEnglish ? weekdayForDateTime(dt, length) : string(standalone ? {\n        weekday: length\n      } : {\n        weekday: length,\n        month: \"long\",\n        day: \"numeric\"\n      }, \"weekday\");\n    },\n        maybeMacro = function maybeMacro(token) {\n      var formatOpts = Formatter.macroTokenToFormatOpts(token);\n\n      if (formatOpts) {\n        return _this.formatWithSystemDefault(dt, formatOpts);\n      } else {\n        return token;\n      }\n    },\n        era = function era(length) {\n      return knownEnglish ? eraForDateTime(dt, length) : string({\n        era: length\n      }, \"era\");\n    },\n        tokenToString = function tokenToString(token) {\n      // Where possible: http://cldr.unicode.org/translation/date-time-1/date-time#TOC-Standalone-vs.-Format-Styles\n      switch (token) {\n        // ms\n        case \"S\":\n          return _this.num(dt.millisecond);\n\n        case \"u\": // falls through\n\n        case \"SSS\":\n          return _this.num(dt.millisecond, 3);\n        // seconds\n\n        case \"s\":\n          return _this.num(dt.second);\n\n        case \"ss\":\n          return _this.num(dt.second, 2);\n        // minutes\n\n        case \"m\":\n          return _this.num(dt.minute);\n\n        case \"mm\":\n          return _this.num(dt.minute, 2);\n        // hours\n\n        case \"h\":\n          return _this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12);\n\n        case \"hh\":\n          return _this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12, 2);\n\n        case \"H\":\n          return _this.num(dt.hour);\n\n        case \"HH\":\n          return _this.num(dt.hour, 2);\n        // offset\n\n        case \"Z\":\n          // like +6\n          return formatOffset({\n            format: \"narrow\",\n            allowZ: _this.opts.allowZ\n          });\n\n        case \"ZZ\":\n          // like +06:00\n          return formatOffset({\n            format: \"short\",\n            allowZ: _this.opts.allowZ\n          });\n\n        case \"ZZZ\":\n          // like +0600\n          return formatOffset({\n            format: \"techie\",\n            allowZ: _this.opts.allowZ\n          });\n\n        case \"ZZZZ\":\n          // like EST\n          return dt.zone.offsetName(dt.ts, {\n            format: \"short\",\n            locale: _this.loc.locale\n          });\n\n        case \"ZZZZZ\":\n          // like Eastern Standard Time\n          return dt.zone.offsetName(dt.ts, {\n            format: \"long\",\n            locale: _this.loc.locale\n          });\n        // zone\n\n        case \"z\":\n          // like America/New_York\n          return dt.zoneName;\n        // meridiems\n\n        case \"a\":\n          return meridiem();\n        // dates\n\n        case \"d\":\n          return useDateTimeFormatter ? string({\n            day: \"numeric\"\n          }, \"day\") : _this.num(dt.day);\n\n        case \"dd\":\n          return useDateTimeFormatter ? string({\n            day: \"2-digit\"\n          }, \"day\") : _this.num(dt.day, 2);\n        // weekdays - standalone\n\n        case \"c\":\n          // like 1\n          return _this.num(dt.weekday);\n\n        case \"ccc\":\n          // like 'Tues'\n          return weekday(\"short\", true);\n\n        case \"cccc\":\n          // like 'Tuesday'\n          return weekday(\"long\", true);\n\n        case \"ccccc\":\n          // like 'T'\n          return weekday(\"narrow\", true);\n        // weekdays - format\n\n        case \"E\":\n          // like 1\n          return _this.num(dt.weekday);\n\n        case \"EEE\":\n          // like 'Tues'\n          return weekday(\"short\", false);\n\n        case \"EEEE\":\n          // like 'Tuesday'\n          return weekday(\"long\", false);\n\n        case \"EEEEE\":\n          // like 'T'\n          return weekday(\"narrow\", false);\n        // months - standalone\n\n        case \"L\":\n          // like 1\n          return useDateTimeFormatter ? string({\n            month: \"numeric\",\n            day: \"numeric\"\n          }, \"month\") : _this.num(dt.month);\n\n        case \"LL\":\n          // like 01, doesn't seem to work\n          return useDateTimeFormatter ? string({\n            month: \"2-digit\",\n            day: \"numeric\"\n          }, \"month\") : _this.num(dt.month, 2);\n\n        case \"LLL\":\n          // like Jan\n          return month(\"short\", true);\n\n        case \"LLLL\":\n          // like January\n          return month(\"long\", true);\n\n        case \"LLLLL\":\n          // like J\n          return month(\"narrow\", true);\n        // months - format\n\n        case \"M\":\n          // like 1\n          return useDateTimeFormatter ? string({\n            month: \"numeric\"\n          }, \"month\") : _this.num(dt.month);\n\n        case \"MM\":\n          // like 01\n          return useDateTimeFormatter ? string({\n            month: \"2-digit\"\n          }, \"month\") : _this.num(dt.month, 2);\n\n        case \"MMM\":\n          // like Jan\n          return month(\"short\", false);\n\n        case \"MMMM\":\n          // like January\n          return month(\"long\", false);\n\n        case \"MMMMM\":\n          // like J\n          return month(\"narrow\", false);\n        // years\n\n        case \"y\":\n          // like 2014\n          return useDateTimeFormatter ? string({\n            year: \"numeric\"\n          }, \"year\") : _this.num(dt.year);\n\n        case \"yy\":\n          // like 14\n          return useDateTimeFormatter ? string({\n            year: \"2-digit\"\n          }, \"year\") : _this.num(dt.year.toString().slice(-2), 2);\n\n        case \"yyyy\":\n          // like 0012\n          return useDateTimeFormatter ? string({\n            year: \"numeric\"\n          }, \"year\") : _this.num(dt.year, 4);\n\n        case \"yyyyyy\":\n          // like 000012\n          return useDateTimeFormatter ? string({\n            year: \"numeric\"\n          }, \"year\") : _this.num(dt.year, 6);\n        // eras\n\n        case \"G\":\n          // like AD\n          return era(\"short\");\n\n        case \"GG\":\n          // like Anno Domini\n          return era(\"long\");\n\n        case \"GGGGG\":\n          return era(\"narrow\");\n\n        case \"kk\":\n          return _this.num(dt.weekYear.toString().slice(-2), 2);\n\n        case \"kkkk\":\n          return _this.num(dt.weekYear, 4);\n\n        case \"W\":\n          return _this.num(dt.weekNumber);\n\n        case \"WW\":\n          return _this.num(dt.weekNumber, 2);\n\n        case \"o\":\n          return _this.num(dt.ordinal);\n\n        case \"ooo\":\n          return _this.num(dt.ordinal, 3);\n\n        case \"q\":\n          // like 1\n          return _this.num(dt.quarter);\n\n        case \"qq\":\n          // like 01\n          return _this.num(dt.quarter, 2);\n\n        case \"X\":\n          return _this.num(Math.floor(dt.ts / 1000));\n\n        case \"x\":\n          return _this.num(dt.ts);\n\n        default:\n          return maybeMacro(token);\n      }\n    };\n\n    return stringifyTokens(Formatter.parseFormat(fmt), tokenToString);\n  };\n\n  _proto.formatDurationFromString = function formatDurationFromString(dur, fmt) {\n    var _this2 = this;\n\n    var tokenToField = function tokenToField(token) {\n      switch (token[0]) {\n        case \"S\":\n          return \"millisecond\";\n\n        case \"s\":\n          return \"second\";\n\n        case \"m\":\n          return \"minute\";\n\n        case \"h\":\n          return \"hour\";\n\n        case \"d\":\n          return \"day\";\n\n        case \"M\":\n          return \"month\";\n\n        case \"y\":\n          return \"year\";\n\n        default:\n          return null;\n      }\n    },\n        tokenToString = function tokenToString(lildur) {\n      return function (token) {\n        var mapped = tokenToField(token);\n\n        if (mapped) {\n          return _this2.num(lildur.get(mapped), token.length);\n        } else {\n          return token;\n        }\n      };\n    },\n        tokens = Formatter.parseFormat(fmt),\n        realTokens = tokens.reduce(function (found, _ref) {\n      var literal = _ref.literal,\n          val = _ref.val;\n      return literal ? found : found.concat(val);\n    }, []),\n        collapsed = dur.shiftTo.apply(dur, realTokens.map(tokenToField).filter(function (t) {\n      return t;\n    }));\n\n    return stringifyTokens(tokens, tokenToString(collapsed));\n  };\n\n  return Formatter;\n}();\n\nvar Invalid = /*#__PURE__*/function () {\n  function Invalid(reason, explanation) {\n    this.reason = reason;\n    this.explanation = explanation;\n  }\n\n  var _proto = Invalid.prototype;\n\n  _proto.toMessage = function toMessage() {\n    if (this.explanation) {\n      return this.reason + \": \" + this.explanation;\n    } else {\n      return this.reason;\n    }\n  };\n\n  return Invalid;\n}();\n\n/**\n * @interface\n */\n\nvar Zone = /*#__PURE__*/function () {\n  function Zone() {}\n\n  var _proto = Zone.prototype;\n\n  /**\n   * Returns the offset's common name (such as EST) at the specified timestamp\n   * @abstract\n   * @param {number} ts - Epoch milliseconds for which to get the name\n   * @param {Object} opts - Options to affect the format\n   * @param {string} opts.format - What style of offset to return. Accepts 'long' or 'short'.\n   * @param {string} opts.locale - What locale to return the offset name in.\n   * @return {string}\n   */\n  _proto.offsetName = function offsetName(ts, opts) {\n    throw new ZoneIsAbstractError();\n  }\n  /**\n   * Returns the offset's value as a string\n   * @abstract\n   * @param {number} ts - Epoch milliseconds for which to get the offset\n   * @param {string} format - What style of offset to return.\n   *                          Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively\n   * @return {string}\n   */\n  ;\n\n  _proto.formatOffset = function formatOffset(ts, format) {\n    throw new ZoneIsAbstractError();\n  }\n  /**\n   * Return the offset in minutes for this zone at the specified timestamp.\n   * @abstract\n   * @param {number} ts - Epoch milliseconds for which to compute the offset\n   * @return {number}\n   */\n  ;\n\n  _proto.offset = function offset(ts) {\n    throw new ZoneIsAbstractError();\n  }\n  /**\n   * Return whether this Zone is equal to another zone\n   * @abstract\n   * @param {Zone} otherZone - the zone to compare\n   * @return {boolean}\n   */\n  ;\n\n  _proto.equals = function equals(otherZone) {\n    throw new ZoneIsAbstractError();\n  }\n  /**\n   * Return whether this Zone is valid.\n   * @abstract\n   * @type {boolean}\n   */\n  ;\n\n  _createClass(Zone, [{\n    key: \"type\",\n\n    /**\n     * The type of zone\n     * @abstract\n     * @type {string}\n     */\n    get: function get() {\n      throw new ZoneIsAbstractError();\n    }\n    /**\n     * The name of this zone.\n     * @abstract\n     * @type {string}\n     */\n\n  }, {\n    key: \"name\",\n    get: function get() {\n      throw new ZoneIsAbstractError();\n    }\n    /**\n     * Returns whether the offset is known to be fixed for the whole year.\n     * @abstract\n     * @type {boolean}\n     */\n\n  }, {\n    key: \"universal\",\n    get: function get() {\n      throw new ZoneIsAbstractError();\n    }\n  }, {\n    key: \"isValid\",\n    get: function get() {\n      throw new ZoneIsAbstractError();\n    }\n  }]);\n\n  return Zone;\n}();\n\nvar singleton = null;\n/**\n * Represents the local zone for this JavaScript environment.\n * @implements {Zone}\n */\n\nvar LocalZone = /*#__PURE__*/function (_Zone) {\n  _inheritsLoose(LocalZone, _Zone);\n\n  function LocalZone() {\n    return _Zone.apply(this, arguments) || this;\n  }\n\n  var _proto = LocalZone.prototype;\n\n  /** @override **/\n  _proto.offsetName = function offsetName(ts, _ref) {\n    var format = _ref.format,\n        locale = _ref.locale;\n    return parseZoneInfo(ts, format, locale);\n  }\n  /** @override **/\n  ;\n\n  _proto.formatOffset = function formatOffset$1(ts, format) {\n    return formatOffset(this.offset(ts), format);\n  }\n  /** @override **/\n  ;\n\n  _proto.offset = function offset(ts) {\n    return -new Date(ts).getTimezoneOffset();\n  }\n  /** @override **/\n  ;\n\n  _proto.equals = function equals(otherZone) {\n    return otherZone.type === \"local\";\n  }\n  /** @override **/\n  ;\n\n  _createClass(LocalZone, [{\n    key: \"type\",\n\n    /** @override **/\n    get: function get() {\n      return \"local\";\n    }\n    /** @override **/\n\n  }, {\n    key: \"name\",\n    get: function get() {\n      if (hasIntl()) {\n        return new Intl.DateTimeFormat().resolvedOptions().timeZone;\n      } else return \"local\";\n    }\n    /** @override **/\n\n  }, {\n    key: \"universal\",\n    get: function get() {\n      return false;\n    }\n  }, {\n    key: \"isValid\",\n    get: function get() {\n      return true;\n    }\n  }], [{\n    key: \"instance\",\n\n    /**\n     * Get a singleton instance of the local zone\n     * @return {LocalZone}\n     */\n    get: function get() {\n      if (singleton === null) {\n        singleton = new LocalZone();\n      }\n\n      return singleton;\n    }\n  }]);\n\n  return LocalZone;\n}(Zone);\n\nvar matchingRegex = RegExp(\"^\" + ianaRegex.source + \"$\");\nvar dtfCache = {};\n\nfunction makeDTF(zone) {\n  if (!dtfCache[zone]) {\n    dtfCache[zone] = new Intl.DateTimeFormat(\"en-US\", {\n      hour12: false,\n      timeZone: zone,\n      year: \"numeric\",\n      month: \"2-digit\",\n      day: \"2-digit\",\n      hour: \"2-digit\",\n      minute: \"2-digit\",\n      second: \"2-digit\"\n    });\n  }\n\n  return dtfCache[zone];\n}\n\nvar typeToPos = {\n  year: 0,\n  month: 1,\n  day: 2,\n  hour: 3,\n  minute: 4,\n  second: 5\n};\n\nfunction hackyOffset(dtf, date) {\n  var formatted = dtf.format(date).replace(/\\u200E/g, \"\"),\n      parsed = /(\\d+)\\/(\\d+)\\/(\\d+),? (\\d+):(\\d+):(\\d+)/.exec(formatted),\n      fMonth = parsed[1],\n      fDay = parsed[2],\n      fYear = parsed[3],\n      fHour = parsed[4],\n      fMinute = parsed[5],\n      fSecond = parsed[6];\n  return [fYear, fMonth, fDay, fHour, fMinute, fSecond];\n}\n\nfunction partsOffset(dtf, date) {\n  var formatted = dtf.formatToParts(date),\n      filled = [];\n\n  for (var i = 0; i < formatted.length; i++) {\n    var _formatted$i = formatted[i],\n        type = _formatted$i.type,\n        value = _formatted$i.value,\n        pos = typeToPos[type];\n\n    if (!isUndefined(pos)) {\n      filled[pos] = parseInt(value, 10);\n    }\n  }\n\n  return filled;\n}\n\nvar ianaZoneCache = {};\n/**\n * A zone identified by an IANA identifier, like America/New_York\n * @implements {Zone}\n */\n\nvar IANAZone = /*#__PURE__*/function (_Zone) {\n  _inheritsLoose(IANAZone, _Zone);\n\n  /**\n   * @param {string} name - Zone name\n   * @return {IANAZone}\n   */\n  IANAZone.create = function create(name) {\n    if (!ianaZoneCache[name]) {\n      ianaZoneCache[name] = new IANAZone(name);\n    }\n\n    return ianaZoneCache[name];\n  }\n  /**\n   * Reset local caches. Should only be necessary in testing scenarios.\n   * @return {void}\n   */\n  ;\n\n  IANAZone.resetCache = function resetCache() {\n    ianaZoneCache = {};\n    dtfCache = {};\n  }\n  /**\n   * Returns whether the provided string is a valid specifier. This only checks the string's format, not that the specifier identifies a known zone; see isValidZone for that.\n   * @param {string} s - The string to check validity on\n   * @example IANAZone.isValidSpecifier(\"America/New_York\") //=> true\n   * @example IANAZone.isValidSpecifier(\"Fantasia/Castle\") //=> true\n   * @example IANAZone.isValidSpecifier(\"Sport~~blorp\") //=> false\n   * @return {boolean}\n   */\n  ;\n\n  IANAZone.isValidSpecifier = function isValidSpecifier(s) {\n    return !!(s && s.match(matchingRegex));\n  }\n  /**\n   * Returns whether the provided string identifies a real zone\n   * @param {string} zone - The string to check\n   * @example IANAZone.isValidZone(\"America/New_York\") //=> true\n   * @example IANAZone.isValidZone(\"Fantasia/Castle\") //=> false\n   * @example IANAZone.isValidZone(\"Sport~~blorp\") //=> false\n   * @return {boolean}\n   */\n  ;\n\n  IANAZone.isValidZone = function isValidZone(zone) {\n    try {\n      new Intl.DateTimeFormat(\"en-US\", {\n        timeZone: zone\n      }).format();\n      return true;\n    } catch (e) {\n      return false;\n    }\n  } // Etc/GMT+8 -> -480\n\n  /** @ignore */\n  ;\n\n  IANAZone.parseGMTOffset = function parseGMTOffset(specifier) {\n    if (specifier) {\n      var match = specifier.match(/^Etc\\/GMT(0|[+-]\\d{1,2})$/i);\n\n      if (match) {\n        return -60 * parseInt(match[1]);\n      }\n    }\n\n    return null;\n  };\n\n  function IANAZone(name) {\n    var _this;\n\n    _this = _Zone.call(this) || this;\n    /** @private **/\n\n    _this.zoneName = name;\n    /** @private **/\n\n    _this.valid = IANAZone.isValidZone(name);\n    return _this;\n  }\n  /** @override **/\n\n\n  var _proto = IANAZone.prototype;\n\n  /** @override **/\n  _proto.offsetName = function offsetName(ts, _ref) {\n    var format = _ref.format,\n        locale = _ref.locale;\n    return parseZoneInfo(ts, format, locale, this.name);\n  }\n  /** @override **/\n  ;\n\n  _proto.formatOffset = function formatOffset$1(ts, format) {\n    return formatOffset(this.offset(ts), format);\n  }\n  /** @override **/\n  ;\n\n  _proto.offset = function offset(ts) {\n    var date = new Date(ts);\n    if (isNaN(date)) return NaN;\n\n    var dtf = makeDTF(this.name),\n        _ref2 = dtf.formatToParts ? partsOffset(dtf, date) : hackyOffset(dtf, date),\n        year = _ref2[0],\n        month = _ref2[1],\n        day = _ref2[2],\n        hour = _ref2[3],\n        minute = _ref2[4],\n        second = _ref2[5],\n        adjustedHour = hour === 24 ? 0 : hour;\n\n    var asUTC = objToLocalTS({\n      year: year,\n      month: month,\n      day: day,\n      hour: adjustedHour,\n      minute: minute,\n      second: second,\n      millisecond: 0\n    });\n    var asTS = +date;\n    var over = asTS % 1000;\n    asTS -= over >= 0 ? over : 1000 + over;\n    return (asUTC - asTS) / (60 * 1000);\n  }\n  /** @override **/\n  ;\n\n  _proto.equals = function equals(otherZone) {\n    return otherZone.type === \"iana\" && otherZone.name === this.name;\n  }\n  /** @override **/\n  ;\n\n  _createClass(IANAZone, [{\n    key: \"type\",\n    get: function get() {\n      return \"iana\";\n    }\n    /** @override **/\n\n  }, {\n    key: \"name\",\n    get: function get() {\n      return this.zoneName;\n    }\n    /** @override **/\n\n  }, {\n    key: \"universal\",\n    get: function get() {\n      return false;\n    }\n  }, {\n    key: \"isValid\",\n    get: function get() {\n      return this.valid;\n    }\n  }]);\n\n  return IANAZone;\n}(Zone);\n\nvar singleton$1 = null;\n/**\n * A zone with a fixed offset (meaning no DST)\n * @implements {Zone}\n */\n\nvar FixedOffsetZone = /*#__PURE__*/function (_Zone) {\n  _inheritsLoose(FixedOffsetZone, _Zone);\n\n  /**\n   * Get an instance with a specified offset\n   * @param {number} offset - The offset in minutes\n   * @return {FixedOffsetZone}\n   */\n  FixedOffsetZone.instance = function instance(offset) {\n    return offset === 0 ? FixedOffsetZone.utcInstance : new FixedOffsetZone(offset);\n  }\n  /**\n   * Get an instance of FixedOffsetZone from a UTC offset string, like \"UTC+6\"\n   * @param {string} s - The offset string to parse\n   * @example FixedOffsetZone.parseSpecifier(\"UTC+6\")\n   * @example FixedOffsetZone.parseSpecifier(\"UTC+06\")\n   * @example FixedOffsetZone.parseSpecifier(\"UTC-6:00\")\n   * @return {FixedOffsetZone}\n   */\n  ;\n\n  FixedOffsetZone.parseSpecifier = function parseSpecifier(s) {\n    if (s) {\n      var r = s.match(/^utc(?:([+-]\\d{1,2})(?::(\\d{2}))?)?$/i);\n\n      if (r) {\n        return new FixedOffsetZone(signedOffset(r[1], r[2]));\n      }\n    }\n\n    return null;\n  };\n\n  _createClass(FixedOffsetZone, null, [{\n    key: \"utcInstance\",\n\n    /**\n     * Get a singleton instance of UTC\n     * @return {FixedOffsetZone}\n     */\n    get: function get() {\n      if (singleton$1 === null) {\n        singleton$1 = new FixedOffsetZone(0);\n      }\n\n      return singleton$1;\n    }\n  }]);\n\n  function FixedOffsetZone(offset) {\n    var _this;\n\n    _this = _Zone.call(this) || this;\n    /** @private **/\n\n    _this.fixed = offset;\n    return _this;\n  }\n  /** @override **/\n\n\n  var _proto = FixedOffsetZone.prototype;\n\n  /** @override **/\n  _proto.offsetName = function offsetName() {\n    return this.name;\n  }\n  /** @override **/\n  ;\n\n  _proto.formatOffset = function formatOffset$1(ts, format) {\n    return formatOffset(this.fixed, format);\n  }\n  /** @override **/\n  ;\n\n  /** @override **/\n  _proto.offset = function offset() {\n    return this.fixed;\n  }\n  /** @override **/\n  ;\n\n  _proto.equals = function equals(otherZone) {\n    return otherZone.type === \"fixed\" && otherZone.fixed === this.fixed;\n  }\n  /** @override **/\n  ;\n\n  _createClass(FixedOffsetZone, [{\n    key: \"type\",\n    get: function get() {\n      return \"fixed\";\n    }\n    /** @override **/\n\n  }, {\n    key: \"name\",\n    get: function get() {\n      return this.fixed === 0 ? \"UTC\" : \"UTC\" + formatOffset(this.fixed, \"narrow\");\n    }\n  }, {\n    key: \"universal\",\n    get: function get() {\n      return true;\n    }\n  }, {\n    key: \"isValid\",\n    get: function get() {\n      return true;\n    }\n  }]);\n\n  return FixedOffsetZone;\n}(Zone);\n\n/**\n * A zone that failed to parse. You should never need to instantiate this.\n * @implements {Zone}\n */\n\nvar InvalidZone = /*#__PURE__*/function (_Zone) {\n  _inheritsLoose(InvalidZone, _Zone);\n\n  function InvalidZone(zoneName) {\n    var _this;\n\n    _this = _Zone.call(this) || this;\n    /**  @private */\n\n    _this.zoneName = zoneName;\n    return _this;\n  }\n  /** @override **/\n\n\n  var _proto = InvalidZone.prototype;\n\n  /** @override **/\n  _proto.offsetName = function offsetName() {\n    return null;\n  }\n  /** @override **/\n  ;\n\n  _proto.formatOffset = function formatOffset() {\n    return \"\";\n  }\n  /** @override **/\n  ;\n\n  _proto.offset = function offset() {\n    return NaN;\n  }\n  /** @override **/\n  ;\n\n  _proto.equals = function equals() {\n    return false;\n  }\n  /** @override **/\n  ;\n\n  _createClass(InvalidZone, [{\n    key: \"type\",\n    get: function get() {\n      return \"invalid\";\n    }\n    /** @override **/\n\n  }, {\n    key: \"name\",\n    get: function get() {\n      return this.zoneName;\n    }\n    /** @override **/\n\n  }, {\n    key: \"universal\",\n    get: function get() {\n      return false;\n    }\n  }, {\n    key: \"isValid\",\n    get: function get() {\n      return false;\n    }\n  }]);\n\n  return InvalidZone;\n}(Zone);\n\n/**\n * @private\n */\nfunction normalizeZone(input, defaultZone) {\n  var offset;\n\n  if (isUndefined(input) || input === null) {\n    return defaultZone;\n  } else if (input instanceof Zone) {\n    return input;\n  } else if (isString(input)) {\n    var lowered = input.toLowerCase();\n    if (lowered === \"local\") return defaultZone;else if (lowered === \"utc\" || lowered === \"gmt\") return FixedOffsetZone.utcInstance;else if ((offset = IANAZone.parseGMTOffset(input)) != null) {\n      // handle Etc/GMT-4, which V8 chokes on\n      return FixedOffsetZone.instance(offset);\n    } else if (IANAZone.isValidSpecifier(lowered)) return IANAZone.create(input);else return FixedOffsetZone.parseSpecifier(lowered) || new InvalidZone(input);\n  } else if (isNumber(input)) {\n    return FixedOffsetZone.instance(input);\n  } else if (typeof input === \"object\" && input.offset && typeof input.offset === \"number\") {\n    // This is dumb, but the instanceof check above doesn't seem to really work\n    // so we're duck checking it\n    return input;\n  } else {\n    return new InvalidZone(input);\n  }\n}\n\nvar now = function now() {\n  return Date.now();\n},\n    defaultZone = null,\n    // not setting this directly to LocalZone.instance bc loading order issues\ndefaultLocale = null,\n    defaultNumberingSystem = null,\n    defaultOutputCalendar = null,\n    throwOnInvalid = false;\n/**\n * Settings contains static getters and setters that control Luxon's overall behavior. Luxon is a simple library with few options, but the ones it does have live here.\n */\n\n\nvar Settings = /*#__PURE__*/function () {\n  function Settings() {}\n\n  /**\n   * Reset Luxon's global caches. Should only be necessary in testing scenarios.\n   * @return {void}\n   */\n  Settings.resetCaches = function resetCaches() {\n    Locale.resetCache();\n    IANAZone.resetCache();\n  };\n\n  _createClass(Settings, null, [{\n    key: \"now\",\n\n    /**\n     * Get the callback for returning the current timestamp.\n     * @type {function}\n     */\n    get: function get() {\n      return now;\n    }\n    /**\n     * Set the callback for returning the current timestamp.\n     * The function should return a number, which will be interpreted as an Epoch millisecond count\n     * @type {function}\n     * @example Settings.now = () => Date.now() + 3000 // pretend it is 3 seconds in the future\n     * @example Settings.now = () => 0 // always pretend it's Jan 1, 1970 at midnight in UTC time\n     */\n    ,\n    set: function set(n) {\n      now = n;\n    }\n    /**\n     * Get the default time zone to create DateTimes in.\n     * @type {string}\n     */\n\n  }, {\n    key: \"defaultZoneName\",\n    get: function get() {\n      return Settings.defaultZone.name;\n    }\n    /**\n     * Set the default time zone to create DateTimes in. Does not affect existing instances.\n     * @type {string}\n     */\n    ,\n    set: function set(z) {\n      if (!z) {\n        defaultZone = null;\n      } else {\n        defaultZone = normalizeZone(z);\n      }\n    }\n    /**\n     * Get the default time zone object to create DateTimes in. Does not affect existing instances.\n     * @type {Zone}\n     */\n\n  }, {\n    key: \"defaultZone\",\n    get: function get() {\n      return defaultZone || LocalZone.instance;\n    }\n    /**\n     * Get the default locale to create DateTimes with. Does not affect existing instances.\n     * @type {string}\n     */\n\n  }, {\n    key: \"defaultLocale\",\n    get: function get() {\n      return defaultLocale;\n    }\n    /**\n     * Set the default locale to create DateTimes with. Does not affect existing instances.\n     * @type {string}\n     */\n    ,\n    set: function set(locale) {\n      defaultLocale = locale;\n    }\n    /**\n     * Get the default numbering system to create DateTimes with. Does not affect existing instances.\n     * @type {string}\n     */\n\n  }, {\n    key: \"defaultNumberingSystem\",\n    get: function get() {\n      return defaultNumberingSystem;\n    }\n    /**\n     * Set the default numbering system to create DateTimes with. Does not affect existing instances.\n     * @type {string}\n     */\n    ,\n    set: function set(numberingSystem) {\n      defaultNumberingSystem = numberingSystem;\n    }\n    /**\n     * Get the default output calendar to create DateTimes with. Does not affect existing instances.\n     * @type {string}\n     */\n\n  }, {\n    key: \"defaultOutputCalendar\",\n    get: function get() {\n      return defaultOutputCalendar;\n    }\n    /**\n     * Set the default output calendar to create DateTimes with. Does not affect existing instances.\n     * @type {string}\n     */\n    ,\n    set: function set(outputCalendar) {\n      defaultOutputCalendar = outputCalendar;\n    }\n    /**\n     * Get whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals\n     * @type {boolean}\n     */\n\n  }, {\n    key: \"throwOnInvalid\",\n    get: function get() {\n      return throwOnInvalid;\n    }\n    /**\n     * Set whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals\n     * @type {boolean}\n     */\n    ,\n    set: function set(t) {\n      throwOnInvalid = t;\n    }\n  }]);\n\n  return Settings;\n}();\n\nvar intlDTCache = {};\n\nfunction getCachedDTF(locString, opts) {\n  if (opts === void 0) {\n    opts = {};\n  }\n\n  var key = JSON.stringify([locString, opts]);\n  var dtf = intlDTCache[key];\n\n  if (!dtf) {\n    dtf = new Intl.DateTimeFormat(locString, opts);\n    intlDTCache[key] = dtf;\n  }\n\n  return dtf;\n}\n\nvar intlNumCache = {};\n\nfunction getCachedINF(locString, opts) {\n  if (opts === void 0) {\n    opts = {};\n  }\n\n  var key = JSON.stringify([locString, opts]);\n  var inf = intlNumCache[key];\n\n  if (!inf) {\n    inf = new Intl.NumberFormat(locString, opts);\n    intlNumCache[key] = inf;\n  }\n\n  return inf;\n}\n\nvar intlRelCache = {};\n\nfunction getCachedRTF(locString, opts) {\n  if (opts === void 0) {\n    opts = {};\n  }\n\n  var _opts = opts,\n      base = _opts.base,\n      cacheKeyOpts = _objectWithoutPropertiesLoose(_opts, [\"base\"]); // exclude `base` from the options\n\n\n  var key = JSON.stringify([locString, cacheKeyOpts]);\n  var inf = intlRelCache[key];\n\n  if (!inf) {\n    inf = new Intl.RelativeTimeFormat(locString, opts);\n    intlRelCache[key] = inf;\n  }\n\n  return inf;\n}\n\nvar sysLocaleCache = null;\n\nfunction systemLocale() {\n  if (sysLocaleCache) {\n    return sysLocaleCache;\n  } else if (hasIntl()) {\n    var computedSys = new Intl.DateTimeFormat().resolvedOptions().locale; // node sometimes defaults to \"und\". Override that because that is dumb\n\n    sysLocaleCache = !computedSys || computedSys === \"und\" ? \"en-US\" : computedSys;\n    return sysLocaleCache;\n  } else {\n    sysLocaleCache = \"en-US\";\n    return sysLocaleCache;\n  }\n}\n\nfunction parseLocaleString(localeStr) {\n  // I really want to avoid writing a BCP 47 parser\n  // see, e.g. https://github.com/wooorm/bcp-47\n  // Instead, we'll do this:\n  // a) if the string has no -u extensions, just leave it alone\n  // b) if it does, use Intl to resolve everything\n  // c) if Intl fails, try again without the -u\n  var uIndex = localeStr.indexOf(\"-u-\");\n\n  if (uIndex === -1) {\n    return [localeStr];\n  } else {\n    var options;\n    var smaller = localeStr.substring(0, uIndex);\n\n    try {\n      options = getCachedDTF(localeStr).resolvedOptions();\n    } catch (e) {\n      options = getCachedDTF(smaller).resolvedOptions();\n    }\n\n    var _options = options,\n        numberingSystem = _options.numberingSystem,\n        calendar = _options.calendar; // return the smaller one so that we can append the calendar and numbering overrides to it\n\n    return [smaller, numberingSystem, calendar];\n  }\n}\n\nfunction intlConfigString(localeStr, numberingSystem, outputCalendar) {\n  if (hasIntl()) {\n    if (outputCalendar || numberingSystem) {\n      localeStr += \"-u\";\n\n      if (outputCalendar) {\n        localeStr += \"-ca-\" + outputCalendar;\n      }\n\n      if (numberingSystem) {\n        localeStr += \"-nu-\" + numberingSystem;\n      }\n\n      return localeStr;\n    } else {\n      return localeStr;\n    }\n  } else {\n    return [];\n  }\n}\n\nfunction mapMonths(f) {\n  var ms = [];\n\n  for (var i = 1; i <= 12; i++) {\n    var dt = DateTime.utc(2016, i, 1);\n    ms.push(f(dt));\n  }\n\n  return ms;\n}\n\nfunction mapWeekdays(f) {\n  var ms = [];\n\n  for (var i = 1; i <= 7; i++) {\n    var dt = DateTime.utc(2016, 11, 13 + i);\n    ms.push(f(dt));\n  }\n\n  return ms;\n}\n\nfunction listStuff(loc, length, defaultOK, englishFn, intlFn) {\n  var mode = loc.listingMode(defaultOK);\n\n  if (mode === \"error\") {\n    return null;\n  } else if (mode === \"en\") {\n    return englishFn(length);\n  } else {\n    return intlFn(length);\n  }\n}\n\nfunction supportsFastNumbers(loc) {\n  if (loc.numberingSystem && loc.numberingSystem !== \"latn\") {\n    return false;\n  } else {\n    return loc.numberingSystem === \"latn\" || !loc.locale || loc.locale.startsWith(\"en\") || hasIntl() && new Intl.DateTimeFormat(loc.intl).resolvedOptions().numberingSystem === \"latn\";\n  }\n}\n/**\n * @private\n */\n\n\nvar PolyNumberFormatter = /*#__PURE__*/function () {\n  function PolyNumberFormatter(intl, forceSimple, opts) {\n    this.padTo = opts.padTo || 0;\n    this.floor = opts.floor || false;\n\n    if (!forceSimple && hasIntl()) {\n      var intlOpts = {\n        useGrouping: false\n      };\n      if (opts.padTo > 0) intlOpts.minimumIntegerDigits = opts.padTo;\n      this.inf = getCachedINF(intl, intlOpts);\n    }\n  }\n\n  var _proto = PolyNumberFormatter.prototype;\n\n  _proto.format = function format(i) {\n    if (this.inf) {\n      var fixed = this.floor ? Math.floor(i) : i;\n      return this.inf.format(fixed);\n    } else {\n      // to match the browser's numberformatter defaults\n      var _fixed = this.floor ? Math.floor(i) : roundTo(i, 3);\n\n      return padStart(_fixed, this.padTo);\n    }\n  };\n\n  return PolyNumberFormatter;\n}();\n/**\n * @private\n */\n\n\nvar PolyDateFormatter = /*#__PURE__*/function () {\n  function PolyDateFormatter(dt, intl, opts) {\n    this.opts = opts;\n    this.hasIntl = hasIntl();\n    var z;\n\n    if (dt.zone.universal && this.hasIntl) {\n      // UTC-8 or Etc/UTC-8 are not part of tzdata, only Etc/GMT+8 and the like.\n      // That is why fixed-offset TZ is set to that unless it is:\n      // 1. Representing offset 0 when UTC is used to maintain previous behavior and does not become GMT.\n      // 2. Unsupported by the browser:\n      //    - some do not support Etc/\n      //    - < Etc/GMT-14, > Etc/GMT+12, and 30-minute or 45-minute offsets are not part of tzdata\n      var gmtOffset = -1 * (dt.offset / 60);\n      var offsetZ = gmtOffset >= 0 ? \"Etc/GMT+\" + gmtOffset : \"Etc/GMT\" + gmtOffset;\n      var isOffsetZoneSupported = IANAZone.isValidZone(offsetZ);\n\n      if (dt.offset !== 0 && isOffsetZoneSupported) {\n        z = offsetZ;\n        this.dt = dt;\n      } else {\n        // Not all fixed-offset zones like Etc/+4:30 are present in tzdata.\n        // So we have to make do. Two cases:\n        // 1. The format options tell us to show the zone. We can't do that, so the best\n        // we can do is format the date in UTC.\n        // 2. The format options don't tell us to show the zone. Then we can adjust them\n        // the time and tell the formatter to show it to us in UTC, so that the time is right\n        // and the bad zone doesn't show up.\n        z = \"UTC\";\n\n        if (opts.timeZoneName) {\n          this.dt = dt;\n        } else {\n          this.dt = dt.offset === 0 ? dt : DateTime.fromMillis(dt.ts + dt.offset * 60 * 1000);\n        }\n      }\n    } else if (dt.zone.type === \"local\") {\n      this.dt = dt;\n    } else {\n      this.dt = dt;\n      z = dt.zone.name;\n    }\n\n    if (this.hasIntl) {\n      var intlOpts = Object.assign({}, this.opts);\n\n      if (z) {\n        intlOpts.timeZone = z;\n      }\n\n      this.dtf = getCachedDTF(intl, intlOpts);\n    }\n  }\n\n  var _proto2 = PolyDateFormatter.prototype;\n\n  _proto2.format = function format() {\n    if (this.hasIntl) {\n      return this.dtf.format(this.dt.toJSDate());\n    } else {\n      var tokenFormat = formatString(this.opts),\n          loc = Locale.create(\"en-US\");\n      return Formatter.create(loc).formatDateTimeFromString(this.dt, tokenFormat);\n    }\n  };\n\n  _proto2.formatToParts = function formatToParts() {\n    if (this.hasIntl && hasFormatToParts()) {\n      return this.dtf.formatToParts(this.dt.toJSDate());\n    } else {\n      // This is kind of a cop out. We actually could do this for English. However, we couldn't do it for intl strings\n      // and IMO it's too weird to have an uncanny valley like that\n      return [];\n    }\n  };\n\n  _proto2.resolvedOptions = function resolvedOptions() {\n    if (this.hasIntl) {\n      return this.dtf.resolvedOptions();\n    } else {\n      return {\n        locale: \"en-US\",\n        numberingSystem: \"latn\",\n        outputCalendar: \"gregory\"\n      };\n    }\n  };\n\n  return PolyDateFormatter;\n}();\n/**\n * @private\n */\n\n\nvar PolyRelFormatter = /*#__PURE__*/function () {\n  function PolyRelFormatter(intl, isEnglish, opts) {\n    this.opts = Object.assign({\n      style: \"long\"\n    }, opts);\n\n    if (!isEnglish && hasRelative()) {\n      this.rtf = getCachedRTF(intl, opts);\n    }\n  }\n\n  var _proto3 = PolyRelFormatter.prototype;\n\n  _proto3.format = function format(count, unit) {\n    if (this.rtf) {\n      return this.rtf.format(count, unit);\n    } else {\n      return formatRelativeTime(unit, count, this.opts.numeric, this.opts.style !== \"long\");\n    }\n  };\n\n  _proto3.formatToParts = function formatToParts(count, unit) {\n    if (this.rtf) {\n      return this.rtf.formatToParts(count, unit);\n    } else {\n      return [];\n    }\n  };\n\n  return PolyRelFormatter;\n}();\n/**\n * @private\n */\n\n\nvar Locale = /*#__PURE__*/function () {\n  Locale.fromOpts = function fromOpts(opts) {\n    return Locale.create(opts.locale, opts.numberingSystem, opts.outputCalendar, opts.defaultToEN);\n  };\n\n  Locale.create = function create(locale, numberingSystem, outputCalendar, defaultToEN) {\n    if (defaultToEN === void 0) {\n      defaultToEN = false;\n    }\n\n    var specifiedLocale = locale || Settings.defaultLocale,\n        // the system locale is useful for human readable strings but annoying for parsing/formatting known formats\n    localeR = specifiedLocale || (defaultToEN ? \"en-US\" : systemLocale()),\n        numberingSystemR = numberingSystem || Settings.defaultNumberingSystem,\n        outputCalendarR = outputCalendar || Settings.defaultOutputCalendar;\n    return new Locale(localeR, numberingSystemR, outputCalendarR, specifiedLocale);\n  };\n\n  Locale.resetCache = function resetCache() {\n    sysLocaleCache = null;\n    intlDTCache = {};\n    intlNumCache = {};\n    intlRelCache = {};\n  };\n\n  Locale.fromObject = function fromObject(_temp) {\n    var _ref = _temp === void 0 ? {} : _temp,\n        locale = _ref.locale,\n        numberingSystem = _ref.numberingSystem,\n        outputCalendar = _ref.outputCalendar;\n\n    return Locale.create(locale, numberingSystem, outputCalendar);\n  };\n\n  function Locale(locale, numbering, outputCalendar, specifiedLocale) {\n    var _parseLocaleString = parseLocaleString(locale),\n        parsedLocale = _parseLocaleString[0],\n        parsedNumberingSystem = _parseLocaleString[1],\n        parsedOutputCalendar = _parseLocaleString[2];\n\n    this.locale = parsedLocale;\n    this.numberingSystem = numbering || parsedNumberingSystem || null;\n    this.outputCalendar = outputCalendar || parsedOutputCalendar || null;\n    this.intl = intlConfigString(this.locale, this.numberingSystem, this.outputCalendar);\n    this.weekdaysCache = {\n      format: {},\n      standalone: {}\n    };\n    this.monthsCache = {\n      format: {},\n      standalone: {}\n    };\n    this.meridiemCache = null;\n    this.eraCache = {};\n    this.specifiedLocale = specifiedLocale;\n    this.fastNumbersCached = null;\n  }\n\n  var _proto4 = Locale.prototype;\n\n  _proto4.listingMode = function listingMode(defaultOK) {\n    if (defaultOK === void 0) {\n      defaultOK = true;\n    }\n\n    var intl = hasIntl(),\n        hasFTP = intl && hasFormatToParts(),\n        isActuallyEn = this.isEnglish(),\n        hasNoWeirdness = (this.numberingSystem === null || this.numberingSystem === \"latn\") && (this.outputCalendar === null || this.outputCalendar === \"gregory\");\n\n    if (!hasFTP && !(isActuallyEn && hasNoWeirdness) && !defaultOK) {\n      return \"error\";\n    } else if (!hasFTP || isActuallyEn && hasNoWeirdness) {\n      return \"en\";\n    } else {\n      return \"intl\";\n    }\n  };\n\n  _proto4.clone = function clone(alts) {\n    if (!alts || Object.getOwnPropertyNames(alts).length === 0) {\n      return this;\n    } else {\n      return Locale.create(alts.locale || this.specifiedLocale, alts.numberingSystem || this.numberingSystem, alts.outputCalendar || this.outputCalendar, alts.defaultToEN || false);\n    }\n  };\n\n  _proto4.redefaultToEN = function redefaultToEN(alts) {\n    if (alts === void 0) {\n      alts = {};\n    }\n\n    return this.clone(Object.assign({}, alts, {\n      defaultToEN: true\n    }));\n  };\n\n  _proto4.redefaultToSystem = function redefaultToSystem(alts) {\n    if (alts === void 0) {\n      alts = {};\n    }\n\n    return this.clone(Object.assign({}, alts, {\n      defaultToEN: false\n    }));\n  };\n\n  _proto4.months = function months$1(length, format, defaultOK) {\n    var _this = this;\n\n    if (format === void 0) {\n      format = false;\n    }\n\n    if (defaultOK === void 0) {\n      defaultOK = true;\n    }\n\n    return listStuff(this, length, defaultOK, months, function () {\n      var intl = format ? {\n        month: length,\n        day: \"numeric\"\n      } : {\n        month: length\n      },\n          formatStr = format ? \"format\" : \"standalone\";\n\n      if (!_this.monthsCache[formatStr][length]) {\n        _this.monthsCache[formatStr][length] = mapMonths(function (dt) {\n          return _this.extract(dt, intl, \"month\");\n        });\n      }\n\n      return _this.monthsCache[formatStr][length];\n    });\n  };\n\n  _proto4.weekdays = function weekdays$1(length, format, defaultOK) {\n    var _this2 = this;\n\n    if (format === void 0) {\n      format = false;\n    }\n\n    if (defaultOK === void 0) {\n      defaultOK = true;\n    }\n\n    return listStuff(this, length, defaultOK, weekdays, function () {\n      var intl = format ? {\n        weekday: length,\n        year: \"numeric\",\n        month: \"long\",\n        day: \"numeric\"\n      } : {\n        weekday: length\n      },\n          formatStr = format ? \"format\" : \"standalone\";\n\n      if (!_this2.weekdaysCache[formatStr][length]) {\n        _this2.weekdaysCache[formatStr][length] = mapWeekdays(function (dt) {\n          return _this2.extract(dt, intl, \"weekday\");\n        });\n      }\n\n      return _this2.weekdaysCache[formatStr][length];\n    });\n  };\n\n  _proto4.meridiems = function meridiems$1(defaultOK) {\n    var _this3 = this;\n\n    if (defaultOK === void 0) {\n      defaultOK = true;\n    }\n\n    return listStuff(this, undefined, defaultOK, function () {\n      return meridiems;\n    }, function () {\n      // In theory there could be aribitrary day periods. We're gonna assume there are exactly two\n      // for AM and PM. This is probably wrong, but it's makes parsing way easier.\n      if (!_this3.meridiemCache) {\n        var intl = {\n          hour: \"numeric\",\n          hour12: true\n        };\n        _this3.meridiemCache = [DateTime.utc(2016, 11, 13, 9), DateTime.utc(2016, 11, 13, 19)].map(function (dt) {\n          return _this3.extract(dt, intl, \"dayperiod\");\n        });\n      }\n\n      return _this3.meridiemCache;\n    });\n  };\n\n  _proto4.eras = function eras$1(length, defaultOK) {\n    var _this4 = this;\n\n    if (defaultOK === void 0) {\n      defaultOK = true;\n    }\n\n    return listStuff(this, length, defaultOK, eras, function () {\n      var intl = {\n        era: length\n      }; // This is problematic. Different calendars are going to define eras totally differently. What I need is the minimum set of dates\n      // to definitely enumerate them.\n\n      if (!_this4.eraCache[length]) {\n        _this4.eraCache[length] = [DateTime.utc(-40, 1, 1), DateTime.utc(2017, 1, 1)].map(function (dt) {\n          return _this4.extract(dt, intl, \"era\");\n        });\n      }\n\n      return _this4.eraCache[length];\n    });\n  };\n\n  _proto4.extract = function extract(dt, intlOpts, field) {\n    var df = this.dtFormatter(dt, intlOpts),\n        results = df.formatToParts(),\n        matching = results.find(function (m) {\n      return m.type.toLowerCase() === field;\n    });\n    return matching ? matching.value : null;\n  };\n\n  _proto4.numberFormatter = function numberFormatter(opts) {\n    if (opts === void 0) {\n      opts = {};\n    }\n\n    // this forcesimple option is never used (the only caller short-circuits on it, but it seems safer to leave)\n    // (in contrast, the rest of the condition is used heavily)\n    return new PolyNumberFormatter(this.intl, opts.forceSimple || this.fastNumbers, opts);\n  };\n\n  _proto4.dtFormatter = function dtFormatter(dt, intlOpts) {\n    if (intlOpts === void 0) {\n      intlOpts = {};\n    }\n\n    return new PolyDateFormatter(dt, this.intl, intlOpts);\n  };\n\n  _proto4.relFormatter = function relFormatter(opts) {\n    if (opts === void 0) {\n      opts = {};\n    }\n\n    return new PolyRelFormatter(this.intl, this.isEnglish(), opts);\n  };\n\n  _proto4.isEnglish = function isEnglish() {\n    return this.locale === \"en\" || this.locale.toLowerCase() === \"en-us\" || hasIntl() && new Intl.DateTimeFormat(this.intl).resolvedOptions().locale.startsWith(\"en-us\");\n  };\n\n  _proto4.equals = function equals(other) {\n    return this.locale === other.locale && this.numberingSystem === other.numberingSystem && this.outputCalendar === other.outputCalendar;\n  };\n\n  _createClass(Locale, [{\n    key: \"fastNumbers\",\n    get: function get() {\n      if (this.fastNumbersCached == null) {\n        this.fastNumbersCached = supportsFastNumbers(this);\n      }\n\n      return this.fastNumbersCached;\n    }\n  }]);\n\n  return Locale;\n}();\n\n/*\n * This file handles parsing for well-specified formats. Here's how it works:\n * Two things go into parsing: a regex to match with and an extractor to take apart the groups in the match.\n * An extractor is just a function that takes a regex match array and returns a { year: ..., month: ... } object\n * parse() does the work of executing the regex and applying the extractor. It takes multiple regex/extractor pairs to try in sequence.\n * Extractors can take a \"cursor\" representing the offset in the match to look at. This makes it easy to combine extractors.\n * combineExtractors() does the work of combining them, keeping track of the cursor through multiple extractions.\n * Some extractions are super dumb and simpleParse and fromStrings help DRY them.\n */\n\nfunction combineRegexes() {\n  for (var _len = arguments.length, regexes = new Array(_len), _key = 0; _key < _len; _key++) {\n    regexes[_key] = arguments[_key];\n  }\n\n  var full = regexes.reduce(function (f, r) {\n    return f + r.source;\n  }, \"\");\n  return RegExp(\"^\" + full + \"$\");\n}\n\nfunction combineExtractors() {\n  for (var _len2 = arguments.length, extractors = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n    extractors[_key2] = arguments[_key2];\n  }\n\n  return function (m) {\n    return extractors.reduce(function (_ref, ex) {\n      var mergedVals = _ref[0],\n          mergedZone = _ref[1],\n          cursor = _ref[2];\n\n      var _ex = ex(m, cursor),\n          val = _ex[0],\n          zone = _ex[1],\n          next = _ex[2];\n\n      return [Object.assign(mergedVals, val), mergedZone || zone, next];\n    }, [{}, null, 1]).slice(0, 2);\n  };\n}\n\nfunction parse(s) {\n  if (s == null) {\n    return [null, null];\n  }\n\n  for (var _len3 = arguments.length, patterns = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n    patterns[_key3 - 1] = arguments[_key3];\n  }\n\n  for (var _i = 0, _patterns = patterns; _i < _patterns.length; _i++) {\n    var _patterns$_i = _patterns[_i],\n        regex = _patterns$_i[0],\n        extractor = _patterns$_i[1];\n    var m = regex.exec(s);\n\n    if (m) {\n      return extractor(m);\n    }\n  }\n\n  return [null, null];\n}\n\nfunction simpleParse() {\n  for (var _len4 = arguments.length, keys = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n    keys[_key4] = arguments[_key4];\n  }\n\n  return function (match, cursor) {\n    var ret = {};\n    var i;\n\n    for (i = 0; i < keys.length; i++) {\n      ret[keys[i]] = parseInteger(match[cursor + i]);\n    }\n\n    return [ret, null, cursor + i];\n  };\n} // ISO and SQL parsing\n\n\nvar offsetRegex = /(?:(Z)|([+-]\\d\\d)(?::?(\\d\\d))?)/,\n    isoTimeBaseRegex = /(\\d\\d)(?::?(\\d\\d)(?::?(\\d\\d)(?:[.,](\\d{1,30}))?)?)?/,\n    isoTimeRegex = RegExp(\"\" + isoTimeBaseRegex.source + offsetRegex.source + \"?\"),\n    isoTimeExtensionRegex = RegExp(\"(?:T\" + isoTimeRegex.source + \")?\"),\n    isoYmdRegex = /([+-]\\d{6}|\\d{4})(?:-?(\\d\\d)(?:-?(\\d\\d))?)?/,\n    isoWeekRegex = /(\\d{4})-?W(\\d\\d)(?:-?(\\d))?/,\n    isoOrdinalRegex = /(\\d{4})-?(\\d{3})/,\n    extractISOWeekData = simpleParse(\"weekYear\", \"weekNumber\", \"weekDay\"),\n    extractISOOrdinalData = simpleParse(\"year\", \"ordinal\"),\n    sqlYmdRegex = /(\\d{4})-(\\d\\d)-(\\d\\d)/,\n    // dumbed-down version of the ISO one\nsqlTimeRegex = RegExp(isoTimeBaseRegex.source + \" ?(?:\" + offsetRegex.source + \"|(\" + ianaRegex.source + \"))?\"),\n    sqlTimeExtensionRegex = RegExp(\"(?: \" + sqlTimeRegex.source + \")?\");\n\nfunction int(match, pos, fallback) {\n  var m = match[pos];\n  return isUndefined(m) ? fallback : parseInteger(m);\n}\n\nfunction extractISOYmd(match, cursor) {\n  var item = {\n    year: int(match, cursor),\n    month: int(match, cursor + 1, 1),\n    day: int(match, cursor + 2, 1)\n  };\n  return [item, null, cursor + 3];\n}\n\nfunction extractISOTime(match, cursor) {\n  var item = {\n    hours: int(match, cursor, 0),\n    minutes: int(match, cursor + 1, 0),\n    seconds: int(match, cursor + 2, 0),\n    milliseconds: parseMillis(match[cursor + 3])\n  };\n  return [item, null, cursor + 4];\n}\n\nfunction extractISOOffset(match, cursor) {\n  var local = !match[cursor] && !match[cursor + 1],\n      fullOffset = signedOffset(match[cursor + 1], match[cursor + 2]),\n      zone = local ? null : FixedOffsetZone.instance(fullOffset);\n  return [{}, zone, cursor + 3];\n}\n\nfunction extractIANAZone(match, cursor) {\n  var zone = match[cursor] ? IANAZone.create(match[cursor]) : null;\n  return [{}, zone, cursor + 1];\n} // ISO time parsing\n\n\nvar isoTimeOnly = RegExp(\"^T?\" + isoTimeBaseRegex.source + \"$\"); // ISO duration parsing\n\nvar isoDuration = /^-?P(?:(?:(-?\\d{1,9})Y)?(?:(-?\\d{1,9})M)?(?:(-?\\d{1,9})W)?(?:(-?\\d{1,9})D)?(?:T(?:(-?\\d{1,9})H)?(?:(-?\\d{1,9})M)?(?:(-?\\d{1,20})(?:[.,](-?\\d{1,9}))?S)?)?)$/;\n\nfunction extractISODuration(match) {\n  var s = match[0],\n      yearStr = match[1],\n      monthStr = match[2],\n      weekStr = match[3],\n      dayStr = match[4],\n      hourStr = match[5],\n      minuteStr = match[6],\n      secondStr = match[7],\n      millisecondsStr = match[8];\n  var hasNegativePrefix = s[0] === \"-\";\n  var negativeSeconds = secondStr && secondStr[0] === \"-\";\n\n  var maybeNegate = function maybeNegate(num, force) {\n    if (force === void 0) {\n      force = false;\n    }\n\n    return num !== undefined && (force || num && hasNegativePrefix) ? -num : num;\n  };\n\n  return [{\n    years: maybeNegate(parseInteger(yearStr)),\n    months: maybeNegate(parseInteger(monthStr)),\n    weeks: maybeNegate(parseInteger(weekStr)),\n    days: maybeNegate(parseInteger(dayStr)),\n    hours: maybeNegate(parseInteger(hourStr)),\n    minutes: maybeNegate(parseInteger(minuteStr)),\n    seconds: maybeNegate(parseInteger(secondStr), secondStr === \"-0\"),\n    milliseconds: maybeNegate(parseMillis(millisecondsStr), negativeSeconds)\n  }];\n} // These are a little braindead. EDT *should* tell us that we're in, say, America/New_York\n// and not just that we're in -240 *right now*. But since I don't think these are used that often\n// I'm just going to ignore that\n\n\nvar obsOffsets = {\n  GMT: 0,\n  EDT: -4 * 60,\n  EST: -5 * 60,\n  CDT: -5 * 60,\n  CST: -6 * 60,\n  MDT: -6 * 60,\n  MST: -7 * 60,\n  PDT: -7 * 60,\n  PST: -8 * 60\n};\n\nfunction fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {\n  var result = {\n    year: yearStr.length === 2 ? untruncateYear(parseInteger(yearStr)) : parseInteger(yearStr),\n    month: monthsShort.indexOf(monthStr) + 1,\n    day: parseInteger(dayStr),\n    hour: parseInteger(hourStr),\n    minute: parseInteger(minuteStr)\n  };\n  if (secondStr) result.second = parseInteger(secondStr);\n\n  if (weekdayStr) {\n    result.weekday = weekdayStr.length > 3 ? weekdaysLong.indexOf(weekdayStr) + 1 : weekdaysShort.indexOf(weekdayStr) + 1;\n  }\n\n  return result;\n} // RFC 2822/5322\n\n\nvar rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\\d\\d)(\\d\\d)))$/;\n\nfunction extractRFC2822(match) {\n  var weekdayStr = match[1],\n      dayStr = match[2],\n      monthStr = match[3],\n      yearStr = match[4],\n      hourStr = match[5],\n      minuteStr = match[6],\n      secondStr = match[7],\n      obsOffset = match[8],\n      milOffset = match[9],\n      offHourStr = match[10],\n      offMinuteStr = match[11],\n      result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n  var offset;\n\n  if (obsOffset) {\n    offset = obsOffsets[obsOffset];\n  } else if (milOffset) {\n    offset = 0;\n  } else {\n    offset = signedOffset(offHourStr, offMinuteStr);\n  }\n\n  return [result, new FixedOffsetZone(offset)];\n}\n\nfunction preprocessRFC2822(s) {\n  // Remove comments and folding whitespace and replace multiple-spaces with a single space\n  return s.replace(/\\([^)]*\\)|[\\n\\t]/g, \" \").replace(/(\\s\\s+)/g, \" \").trim();\n} // http date\n\n\nvar rfc1123 = /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\\d\\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\\d{4}) (\\d\\d):(\\d\\d):(\\d\\d) GMT$/,\n    rfc850 = /^(Monday|Tuesday|Wedsday|Thursday|Friday|Saturday|Sunday), (\\d\\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\\d\\d) (\\d\\d):(\\d\\d):(\\d\\d) GMT$/,\n    ascii = /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \\d|\\d\\d) (\\d\\d):(\\d\\d):(\\d\\d) (\\d{4})$/;\n\nfunction extractRFC1123Or850(match) {\n  var weekdayStr = match[1],\n      dayStr = match[2],\n      monthStr = match[3],\n      yearStr = match[4],\n      hourStr = match[5],\n      minuteStr = match[6],\n      secondStr = match[7],\n      result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n  return [result, FixedOffsetZone.utcInstance];\n}\n\nfunction extractASCII(match) {\n  var weekdayStr = match[1],\n      monthStr = match[2],\n      dayStr = match[3],\n      hourStr = match[4],\n      minuteStr = match[5],\n      secondStr = match[6],\n      yearStr = match[7],\n      result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n  return [result, FixedOffsetZone.utcInstance];\n}\n\nvar isoYmdWithTimeExtensionRegex = combineRegexes(isoYmdRegex, isoTimeExtensionRegex);\nvar isoWeekWithTimeExtensionRegex = combineRegexes(isoWeekRegex, isoTimeExtensionRegex);\nvar isoOrdinalWithTimeExtensionRegex = combineRegexes(isoOrdinalRegex, isoTimeExtensionRegex);\nvar isoTimeCombinedRegex = combineRegexes(isoTimeRegex);\nvar extractISOYmdTimeAndOffset = combineExtractors(extractISOYmd, extractISOTime, extractISOOffset);\nvar extractISOWeekTimeAndOffset = combineExtractors(extractISOWeekData, extractISOTime, extractISOOffset);\nvar extractISOOrdinalDateAndTime = combineExtractors(extractISOOrdinalData, extractISOTime, extractISOOffset);\nvar extractISOTimeAndOffset = combineExtractors(extractISOTime, extractISOOffset);\n/**\n * @private\n */\n\nfunction parseISODate(s) {\n  return parse(s, [isoYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset], [isoWeekWithTimeExtensionRegex, extractISOWeekTimeAndOffset], [isoOrdinalWithTimeExtensionRegex, extractISOOrdinalDateAndTime], [isoTimeCombinedRegex, extractISOTimeAndOffset]);\n}\nfunction parseRFC2822Date(s) {\n  return parse(preprocessRFC2822(s), [rfc2822, extractRFC2822]);\n}\nfunction parseHTTPDate(s) {\n  return parse(s, [rfc1123, extractRFC1123Or850], [rfc850, extractRFC1123Or850], [ascii, extractASCII]);\n}\nfunction parseISODuration(s) {\n  return parse(s, [isoDuration, extractISODuration]);\n}\nvar extractISOTimeOnly = combineExtractors(extractISOTime);\nfunction parseISOTimeOnly(s) {\n  return parse(s, [isoTimeOnly, extractISOTimeOnly]);\n}\nvar sqlYmdWithTimeExtensionRegex = combineRegexes(sqlYmdRegex, sqlTimeExtensionRegex);\nvar sqlTimeCombinedRegex = combineRegexes(sqlTimeRegex);\nvar extractISOYmdTimeOffsetAndIANAZone = combineExtractors(extractISOYmd, extractISOTime, extractISOOffset, extractIANAZone);\nvar extractISOTimeOffsetAndIANAZone = combineExtractors(extractISOTime, extractISOOffset, extractIANAZone);\nfunction parseSQL(s) {\n  return parse(s, [sqlYmdWithTimeExtensionRegex, extractISOYmdTimeOffsetAndIANAZone], [sqlTimeCombinedRegex, extractISOTimeOffsetAndIANAZone]);\n}\n\nvar INVALID = \"Invalid Duration\"; // unit conversion constants\n\nvar lowOrderMatrix = {\n  weeks: {\n    days: 7,\n    hours: 7 * 24,\n    minutes: 7 * 24 * 60,\n    seconds: 7 * 24 * 60 * 60,\n    milliseconds: 7 * 24 * 60 * 60 * 1000\n  },\n  days: {\n    hours: 24,\n    minutes: 24 * 60,\n    seconds: 24 * 60 * 60,\n    milliseconds: 24 * 60 * 60 * 1000\n  },\n  hours: {\n    minutes: 60,\n    seconds: 60 * 60,\n    milliseconds: 60 * 60 * 1000\n  },\n  minutes: {\n    seconds: 60,\n    milliseconds: 60 * 1000\n  },\n  seconds: {\n    milliseconds: 1000\n  }\n},\n    casualMatrix = Object.assign({\n  years: {\n    quarters: 4,\n    months: 12,\n    weeks: 52,\n    days: 365,\n    hours: 365 * 24,\n    minutes: 365 * 24 * 60,\n    seconds: 365 * 24 * 60 * 60,\n    milliseconds: 365 * 24 * 60 * 60 * 1000\n  },\n  quarters: {\n    months: 3,\n    weeks: 13,\n    days: 91,\n    hours: 91 * 24,\n    minutes: 91 * 24 * 60,\n    seconds: 91 * 24 * 60 * 60,\n    milliseconds: 91 * 24 * 60 * 60 * 1000\n  },\n  months: {\n    weeks: 4,\n    days: 30,\n    hours: 30 * 24,\n    minutes: 30 * 24 * 60,\n    seconds: 30 * 24 * 60 * 60,\n    milliseconds: 30 * 24 * 60 * 60 * 1000\n  }\n}, lowOrderMatrix),\n    daysInYearAccurate = 146097.0 / 400,\n    daysInMonthAccurate = 146097.0 / 4800,\n    accurateMatrix = Object.assign({\n  years: {\n    quarters: 4,\n    months: 12,\n    weeks: daysInYearAccurate / 7,\n    days: daysInYearAccurate,\n    hours: daysInYearAccurate * 24,\n    minutes: daysInYearAccurate * 24 * 60,\n    seconds: daysInYearAccurate * 24 * 60 * 60,\n    milliseconds: daysInYearAccurate * 24 * 60 * 60 * 1000\n  },\n  quarters: {\n    months: 3,\n    weeks: daysInYearAccurate / 28,\n    days: daysInYearAccurate / 4,\n    hours: daysInYearAccurate * 24 / 4,\n    minutes: daysInYearAccurate * 24 * 60 / 4,\n    seconds: daysInYearAccurate * 24 * 60 * 60 / 4,\n    milliseconds: daysInYearAccurate * 24 * 60 * 60 * 1000 / 4\n  },\n  months: {\n    weeks: daysInMonthAccurate / 7,\n    days: daysInMonthAccurate,\n    hours: daysInMonthAccurate * 24,\n    minutes: daysInMonthAccurate * 24 * 60,\n    seconds: daysInMonthAccurate * 24 * 60 * 60,\n    milliseconds: daysInMonthAccurate * 24 * 60 * 60 * 1000\n  }\n}, lowOrderMatrix); // units ordered by size\n\nvar orderedUnits = [\"years\", \"quarters\", \"months\", \"weeks\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\nvar reverseUnits = orderedUnits.slice(0).reverse(); // clone really means \"create another instance just like this one, but with these changes\"\n\nfunction clone(dur, alts, clear) {\n  if (clear === void 0) {\n    clear = false;\n  }\n\n  // deep merge for vals\n  var conf = {\n    values: clear ? alts.values : Object.assign({}, dur.values, alts.values || {}),\n    loc: dur.loc.clone(alts.loc),\n    conversionAccuracy: alts.conversionAccuracy || dur.conversionAccuracy\n  };\n  return new Duration(conf);\n}\n\nfunction antiTrunc(n) {\n  return n < 0 ? Math.floor(n) : Math.ceil(n);\n} // NB: mutates parameters\n\n\nfunction convert(matrix, fromMap, fromUnit, toMap, toUnit) {\n  var conv = matrix[toUnit][fromUnit],\n      raw = fromMap[fromUnit] / conv,\n      sameSign = Math.sign(raw) === Math.sign(toMap[toUnit]),\n      // ok, so this is wild, but see the matrix in the tests\n  added = !sameSign && toMap[toUnit] !== 0 && Math.abs(raw) <= 1 ? antiTrunc(raw) : Math.trunc(raw);\n  toMap[toUnit] += added;\n  fromMap[fromUnit] -= added * conv;\n} // NB: mutates parameters\n\n\nfunction normalizeValues(matrix, vals) {\n  reverseUnits.reduce(function (previous, current) {\n    if (!isUndefined(vals[current])) {\n      if (previous) {\n        convert(matrix, vals, previous, vals, current);\n      }\n\n      return current;\n    } else {\n      return previous;\n    }\n  }, null);\n}\n/**\n * A Duration object represents a period of time, like \"2 months\" or \"1 day, 1 hour\". Conceptually, it's just a map of units to their quantities, accompanied by some additional configuration and methods for creating, parsing, interrogating, transforming, and formatting them. They can be used on their own or in conjunction with other Luxon types; for example, you can use {@link DateTime.plus} to add a Duration object to a DateTime, producing another DateTime.\n *\n * Here is a brief overview of commonly used methods and getters in Duration:\n *\n * * **Creation** To create a Duration, use {@link Duration.fromMillis}, {@link Duration.fromObject}, or {@link Duration.fromISO}.\n * * **Unit values** See the {@link Duration.years}, {@link Duration.months}, {@link Duration.weeks}, {@link Duration.days}, {@link Duration.hours}, {@link Duration.minutes}, {@link Duration.seconds}, {@link Duration.milliseconds} accessors.\n * * **Configuration** See  {@link Duration.locale} and {@link Duration.numberingSystem} accessors.\n * * **Transformation** To create new Durations out of old ones use {@link Duration.plus}, {@link Duration.minus}, {@link Duration.normalize}, {@link Duration.set}, {@link Duration.reconfigure}, {@link Duration.shiftTo}, and {@link Duration.negate}.\n * * **Output** To convert the Duration into other representations, see {@link Duration.as}, {@link Duration.toISO}, {@link Duration.toFormat}, and {@link Duration.toJSON}\n *\n * There's are more methods documented below. In addition, for more information on subtler topics like internationalization and validity, see the external documentation.\n */\n\n\nvar Duration = /*#__PURE__*/function () {\n  /**\n   * @private\n   */\n  function Duration(config) {\n    var accurate = config.conversionAccuracy === \"longterm\" || false;\n    /**\n     * @access private\n     */\n\n    this.values = config.values;\n    /**\n     * @access private\n     */\n\n    this.loc = config.loc || Locale.create();\n    /**\n     * @access private\n     */\n\n    this.conversionAccuracy = accurate ? \"longterm\" : \"casual\";\n    /**\n     * @access private\n     */\n\n    this.invalid = config.invalid || null;\n    /**\n     * @access private\n     */\n\n    this.matrix = accurate ? accurateMatrix : casualMatrix;\n    /**\n     * @access private\n     */\n\n    this.isLuxonDuration = true;\n  }\n  /**\n   * Create Duration from a number of milliseconds.\n   * @param {number} count of milliseconds\n   * @param {Object} opts - options for parsing\n   * @param {string} [opts.locale='en-US'] - the locale to use\n   * @param {string} opts.numberingSystem - the numbering system to use\n   * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n   * @return {Duration}\n   */\n\n\n  Duration.fromMillis = function fromMillis(count, opts) {\n    return Duration.fromObject(Object.assign({\n      milliseconds: count\n    }, opts));\n  }\n  /**\n   * Create a Duration from a JavaScript object with keys like 'years' and 'hours'.\n   * If this object is empty then a zero milliseconds duration is returned.\n   * @param {Object} obj - the object to create the DateTime from\n   * @param {number} obj.years\n   * @param {number} obj.quarters\n   * @param {number} obj.months\n   * @param {number} obj.weeks\n   * @param {number} obj.days\n   * @param {number} obj.hours\n   * @param {number} obj.minutes\n   * @param {number} obj.seconds\n   * @param {number} obj.milliseconds\n   * @param {string} [obj.locale='en-US'] - the locale to use\n   * @param {string} obj.numberingSystem - the numbering system to use\n   * @param {string} [obj.conversionAccuracy='casual'] - the conversion system to use\n   * @return {Duration}\n   */\n  ;\n\n  Duration.fromObject = function fromObject(obj) {\n    if (obj == null || typeof obj !== \"object\") {\n      throw new InvalidArgumentError(\"Duration.fromObject: argument expected to be an object, got \" + (obj === null ? \"null\" : typeof obj));\n    }\n\n    return new Duration({\n      values: normalizeObject(obj, Duration.normalizeUnit, [\"locale\", \"numberingSystem\", \"conversionAccuracy\", \"zone\" // a bit of debt; it's super inconvenient internally not to be able to blindly pass this\n      ]),\n      loc: Locale.fromObject(obj),\n      conversionAccuracy: obj.conversionAccuracy\n    });\n  }\n  /**\n   * Create a Duration from an ISO 8601 duration string.\n   * @param {string} text - text to parse\n   * @param {Object} opts - options for parsing\n   * @param {string} [opts.locale='en-US'] - the locale to use\n   * @param {string} opts.numberingSystem - the numbering system to use\n   * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n   * @see https://en.wikipedia.org/wiki/ISO_8601#Durations\n   * @example Duration.fromISO('P3Y6M1W4DT12H30M5S').toObject() //=> { years: 3, months: 6, weeks: 1, days: 4, hours: 12, minutes: 30, seconds: 5 }\n   * @example Duration.fromISO('PT23H').toObject() //=> { hours: 23 }\n   * @example Duration.fromISO('P5Y3M').toObject() //=> { years: 5, months: 3 }\n   * @return {Duration}\n   */\n  ;\n\n  Duration.fromISO = function fromISO(text, opts) {\n    var _parseISODuration = parseISODuration(text),\n        parsed = _parseISODuration[0];\n\n    if (parsed) {\n      var obj = Object.assign(parsed, opts);\n      return Duration.fromObject(obj);\n    } else {\n      return Duration.invalid(\"unparsable\", \"the input \\\"\" + text + \"\\\" can't be parsed as ISO 8601\");\n    }\n  }\n  /**\n   * Create a Duration from an ISO 8601 time string.\n   * @param {string} text - text to parse\n   * @param {Object} opts - options for parsing\n   * @param {string} [opts.locale='en-US'] - the locale to use\n   * @param {string} opts.numberingSystem - the numbering system to use\n   * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n   * @see https://en.wikipedia.org/wiki/ISO_8601#Times\n   * @example Duration.fromISOTime('11:22:33.444').toObject() //=> { hours: 11, minutes: 22, seconds: 33, milliseconds: 444 }\n   * @example Duration.fromISOTime('11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n   * @example Duration.fromISOTime('T11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n   * @example Duration.fromISOTime('1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n   * @example Duration.fromISOTime('T1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n   * @return {Duration}\n   */\n  ;\n\n  Duration.fromISOTime = function fromISOTime(text, opts) {\n    var _parseISOTimeOnly = parseISOTimeOnly(text),\n        parsed = _parseISOTimeOnly[0];\n\n    if (parsed) {\n      var obj = Object.assign(parsed, opts);\n      return Duration.fromObject(obj);\n    } else {\n      return Duration.invalid(\"unparsable\", \"the input \\\"\" + text + \"\\\" can't be parsed as ISO 8601\");\n    }\n  }\n  /**\n   * Create an invalid Duration.\n   * @param {string} reason - simple string of why this datetime is invalid. Should not contain parameters or anything else data-dependent\n   * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n   * @return {Duration}\n   */\n  ;\n\n  Duration.invalid = function invalid(reason, explanation) {\n    if (explanation === void 0) {\n      explanation = null;\n    }\n\n    if (!reason) {\n      throw new InvalidArgumentError(\"need to specify a reason the Duration is invalid\");\n    }\n\n    var invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n    if (Settings.throwOnInvalid) {\n      throw new InvalidDurationError(invalid);\n    } else {\n      return new Duration({\n        invalid: invalid\n      });\n    }\n  }\n  /**\n   * @private\n   */\n  ;\n\n  Duration.normalizeUnit = function normalizeUnit(unit) {\n    var normalized = {\n      year: \"years\",\n      years: \"years\",\n      quarter: \"quarters\",\n      quarters: \"quarters\",\n      month: \"months\",\n      months: \"months\",\n      week: \"weeks\",\n      weeks: \"weeks\",\n      day: \"days\",\n      days: \"days\",\n      hour: \"hours\",\n      hours: \"hours\",\n      minute: \"minutes\",\n      minutes: \"minutes\",\n      second: \"seconds\",\n      seconds: \"seconds\",\n      millisecond: \"milliseconds\",\n      milliseconds: \"milliseconds\"\n    }[unit ? unit.toLowerCase() : unit];\n    if (!normalized) throw new InvalidUnitError(unit);\n    return normalized;\n  }\n  /**\n   * Check if an object is a Duration. Works across context boundaries\n   * @param {object} o\n   * @return {boolean}\n   */\n  ;\n\n  Duration.isDuration = function isDuration(o) {\n    return o && o.isLuxonDuration || false;\n  }\n  /**\n   * Get  the locale of a Duration, such 'en-GB'\n   * @type {string}\n   */\n  ;\n\n  var _proto = Duration.prototype;\n\n  /**\n   * Returns a string representation of this Duration formatted according to the specified format string. You may use these tokens:\n   * * `S` for milliseconds\n   * * `s` for seconds\n   * * `m` for minutes\n   * * `h` for hours\n   * * `d` for days\n   * * `M` for months\n   * * `y` for years\n   * Notes:\n   * * Add padding by repeating the token, e.g. \"yy\" pads the years to two digits, \"hhhh\" pads the hours out to four digits\n   * * The duration will be converted to the set of units in the format string using {@link Duration.shiftTo} and the Durations's conversion accuracy setting.\n   * @param {string} fmt - the format string\n   * @param {Object} opts - options\n   * @param {boolean} [opts.floor=true] - floor numerical values\n   * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"y d s\") //=> \"1 6 2\"\n   * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"yy dd sss\") //=> \"01 06 002\"\n   * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"M S\") //=> \"12 518402000\"\n   * @return {string}\n   */\n  _proto.toFormat = function toFormat(fmt, opts) {\n    if (opts === void 0) {\n      opts = {};\n    }\n\n    // reverse-compat since 1.2; we always round down now, never up, and we do it by default\n    var fmtOpts = Object.assign({}, opts, {\n      floor: opts.round !== false && opts.floor !== false\n    });\n    return this.isValid ? Formatter.create(this.loc, fmtOpts).formatDurationFromString(this, fmt) : INVALID;\n  }\n  /**\n   * Returns a JavaScript object with this Duration's values.\n   * @param opts - options for generating the object\n   * @param {boolean} [opts.includeConfig=false] - include configuration attributes in the output\n   * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toObject() //=> { years: 1, days: 6, seconds: 2 }\n   * @return {Object}\n   */\n  ;\n\n  _proto.toObject = function toObject(opts) {\n    if (opts === void 0) {\n      opts = {};\n    }\n\n    if (!this.isValid) return {};\n    var base = Object.assign({}, this.values);\n\n    if (opts.includeConfig) {\n      base.conversionAccuracy = this.conversionAccuracy;\n      base.numberingSystem = this.loc.numberingSystem;\n      base.locale = this.loc.locale;\n    }\n\n    return base;\n  }\n  /**\n   * Returns an ISO 8601-compliant string representation of this Duration.\n   * @see https://en.wikipedia.org/wiki/ISO_8601#Durations\n   * @example Duration.fromObject({ years: 3, seconds: 45 }).toISO() //=> 'P3YT45S'\n   * @example Duration.fromObject({ months: 4, seconds: 45 }).toISO() //=> 'P4MT45S'\n   * @example Duration.fromObject({ months: 5 }).toISO() //=> 'P5M'\n   * @example Duration.fromObject({ minutes: 5 }).toISO() //=> 'PT5M'\n   * @example Duration.fromObject({ milliseconds: 6 }).toISO() //=> 'PT0.006S'\n   * @return {string}\n   */\n  ;\n\n  _proto.toISO = function toISO() {\n    // we could use the formatter, but this is an easier way to get the minimum string\n    if (!this.isValid) return null;\n    var s = \"P\";\n    if (this.years !== 0) s += this.years + \"Y\";\n    if (this.months !== 0 || this.quarters !== 0) s += this.months + this.quarters * 3 + \"M\";\n    if (this.weeks !== 0) s += this.weeks + \"W\";\n    if (this.days !== 0) s += this.days + \"D\";\n    if (this.hours !== 0 || this.minutes !== 0 || this.seconds !== 0 || this.milliseconds !== 0) s += \"T\";\n    if (this.hours !== 0) s += this.hours + \"H\";\n    if (this.minutes !== 0) s += this.minutes + \"M\";\n    if (this.seconds !== 0 || this.milliseconds !== 0) // this will handle \"floating point madness\" by removing extra decimal places\n      // https://stackoverflow.com/questions/588004/is-floating-point-math-broken\n      s += roundTo(this.seconds + this.milliseconds / 1000, 3) + \"S\";\n    if (s === \"P\") s += \"T0S\";\n    return s;\n  }\n  /**\n   * Returns an ISO 8601-compliant string representation of this Duration, formatted as a time of day.\n   * Note that this will return null if the duration is invalid, negative, or equal to or greater than 24 hours.\n   * @see https://en.wikipedia.org/wiki/ISO_8601#Times\n   * @param {Object} opts - options\n   * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n   * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n   * @param {boolean} [opts.includePrefix=false] - include the `T` prefix\n   * @param {string} [opts.format='extended'] - choose between the basic and extended format\n   * @example Duration.fromObject({ hours: 11 }).toISOTime() //=> '11:00:00.000'\n   * @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressMilliseconds: true }) //=> '11:00:00'\n   * @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressSeconds: true }) //=> '11:00'\n   * @example Duration.fromObject({ hours: 11 }).toISOTime({ includePrefix: true }) //=> 'T11:00:00.000'\n   * @example Duration.fromObject({ hours: 11 }).toISOTime({ format: 'basic' }) //=> '110000.000'\n   * @return {string}\n   */\n  ;\n\n  _proto.toISOTime = function toISOTime(opts) {\n    if (opts === void 0) {\n      opts = {};\n    }\n\n    if (!this.isValid) return null;\n    var millis = this.toMillis();\n    if (millis < 0 || millis >= 86400000) return null;\n    opts = Object.assign({\n      suppressMilliseconds: false,\n      suppressSeconds: false,\n      includePrefix: false,\n      format: \"extended\"\n    }, opts);\n    var value = this.shiftTo(\"hours\", \"minutes\", \"seconds\", \"milliseconds\");\n    var fmt = opts.format === \"basic\" ? \"hhmm\" : \"hh:mm\";\n\n    if (!opts.suppressSeconds || value.seconds !== 0 || value.milliseconds !== 0) {\n      fmt += opts.format === \"basic\" ? \"ss\" : \":ss\";\n\n      if (!opts.suppressMilliseconds || value.milliseconds !== 0) {\n        fmt += \".SSS\";\n      }\n    }\n\n    var str = value.toFormat(fmt);\n\n    if (opts.includePrefix) {\n      str = \"T\" + str;\n    }\n\n    return str;\n  }\n  /**\n   * Returns an ISO 8601 representation of this Duration appropriate for use in JSON.\n   * @return {string}\n   */\n  ;\n\n  _proto.toJSON = function toJSON() {\n    return this.toISO();\n  }\n  /**\n   * Returns an ISO 8601 representation of this Duration appropriate for use in debugging.\n   * @return {string}\n   */\n  ;\n\n  _proto.toString = function toString() {\n    return this.toISO();\n  }\n  /**\n   * Returns an milliseconds value of this Duration.\n   * @return {number}\n   */\n  ;\n\n  _proto.toMillis = function toMillis() {\n    return this.as(\"milliseconds\");\n  }\n  /**\n   * Returns an milliseconds value of this Duration. Alias of {@link toMillis}\n   * @return {number}\n   */\n  ;\n\n  _proto.valueOf = function valueOf() {\n    return this.toMillis();\n  }\n  /**\n   * Make this Duration longer by the specified amount. Return a newly-constructed Duration.\n   * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n   * @return {Duration}\n   */\n  ;\n\n  _proto.plus = function plus(duration) {\n    if (!this.isValid) return this;\n    var dur = friendlyDuration(duration),\n        result = {};\n\n    for (var _iterator = _createForOfIteratorHelperLoose(orderedUnits), _step; !(_step = _iterator()).done;) {\n      var k = _step.value;\n\n      if (hasOwnProperty(dur.values, k) || hasOwnProperty(this.values, k)) {\n        result[k] = dur.get(k) + this.get(k);\n      }\n    }\n\n    return clone(this, {\n      values: result\n    }, true);\n  }\n  /**\n   * Make this Duration shorter by the specified amount. Return a newly-constructed Duration.\n   * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n   * @return {Duration}\n   */\n  ;\n\n  _proto.minus = function minus(duration) {\n    if (!this.isValid) return this;\n    var dur = friendlyDuration(duration);\n    return this.plus(dur.negate());\n  }\n  /**\n   * Scale this Duration by the specified amount. Return a newly-constructed Duration.\n   * @param {function} fn - The function to apply to each unit. Arity is 1 or 2: the value of the unit and, optionally, the unit name. Must return a number.\n   * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnit(x => x * 2) //=> { hours: 2, minutes: 60 }\n   * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnit((x, u) => u === \"hour\" ? x * 2 : x) //=> { hours: 2, minutes: 30 }\n   * @return {Duration}\n   */\n  ;\n\n  _proto.mapUnits = function mapUnits(fn) {\n    if (!this.isValid) return this;\n    var result = {};\n\n    for (var _i = 0, _Object$keys = Object.keys(this.values); _i < _Object$keys.length; _i++) {\n      var k = _Object$keys[_i];\n      result[k] = asNumber(fn(this.values[k], k));\n    }\n\n    return clone(this, {\n      values: result\n    }, true);\n  }\n  /**\n   * Get the value of unit.\n   * @param {string} unit - a unit such as 'minute' or 'day'\n   * @example Duration.fromObject({years: 2, days: 3}).get('years') //=> 2\n   * @example Duration.fromObject({years: 2, days: 3}).get('months') //=> 0\n   * @example Duration.fromObject({years: 2, days: 3}).get('days') //=> 3\n   * @return {number}\n   */\n  ;\n\n  _proto.get = function get(unit) {\n    return this[Duration.normalizeUnit(unit)];\n  }\n  /**\n   * \"Set\" the values of specified units. Return a newly-constructed Duration.\n   * @param {Object} values - a mapping of units to numbers\n   * @example dur.set({ years: 2017 })\n   * @example dur.set({ hours: 8, minutes: 30 })\n   * @return {Duration}\n   */\n  ;\n\n  _proto.set = function set(values) {\n    if (!this.isValid) return this;\n    var mixed = Object.assign(this.values, normalizeObject(values, Duration.normalizeUnit, []));\n    return clone(this, {\n      values: mixed\n    });\n  }\n  /**\n   * \"Set\" the locale and/or numberingSystem.  Returns a newly-constructed Duration.\n   * @example dur.reconfigure({ locale: 'en-GB' })\n   * @return {Duration}\n   */\n  ;\n\n  _proto.reconfigure = function reconfigure(_temp) {\n    var _ref = _temp === void 0 ? {} : _temp,\n        locale = _ref.locale,\n        numberingSystem = _ref.numberingSystem,\n        conversionAccuracy = _ref.conversionAccuracy;\n\n    var loc = this.loc.clone({\n      locale: locale,\n      numberingSystem: numberingSystem\n    }),\n        opts = {\n      loc: loc\n    };\n\n    if (conversionAccuracy) {\n      opts.conversionAccuracy = conversionAccuracy;\n    }\n\n    return clone(this, opts);\n  }\n  /**\n   * Return the length of the duration in the specified unit.\n   * @param {string} unit - a unit such as 'minutes' or 'days'\n   * @example Duration.fromObject({years: 1}).as('days') //=> 365\n   * @example Duration.fromObject({years: 1}).as('months') //=> 12\n   * @example Duration.fromObject({hours: 60}).as('days') //=> 2.5\n   * @return {number}\n   */\n  ;\n\n  _proto.as = function as(unit) {\n    return this.isValid ? this.shiftTo(unit).get(unit) : NaN;\n  }\n  /**\n   * Reduce this Duration to its canonical representation in its current units.\n   * @example Duration.fromObject({ years: 2, days: 5000 }).normalize().toObject() //=> { years: 15, days: 255 }\n   * @example Duration.fromObject({ hours: 12, minutes: -45 }).normalize().toObject() //=> { hours: 11, minutes: 15 }\n   * @return {Duration}\n   */\n  ;\n\n  _proto.normalize = function normalize() {\n    if (!this.isValid) return this;\n    var vals = this.toObject();\n    normalizeValues(this.matrix, vals);\n    return clone(this, {\n      values: vals\n    }, true);\n  }\n  /**\n   * Convert this Duration into its representation in a different set of units.\n   * @example Duration.fromObject({ hours: 1, seconds: 30 }).shiftTo('minutes', 'milliseconds').toObject() //=> { minutes: 60, milliseconds: 30000 }\n   * @return {Duration}\n   */\n  ;\n\n  _proto.shiftTo = function shiftTo() {\n    for (var _len = arguments.length, units = new Array(_len), _key = 0; _key < _len; _key++) {\n      units[_key] = arguments[_key];\n    }\n\n    if (!this.isValid) return this;\n\n    if (units.length === 0) {\n      return this;\n    }\n\n    units = units.map(function (u) {\n      return Duration.normalizeUnit(u);\n    });\n    var built = {},\n        accumulated = {},\n        vals = this.toObject();\n    var lastUnit;\n\n    for (var _iterator2 = _createForOfIteratorHelperLoose(orderedUnits), _step2; !(_step2 = _iterator2()).done;) {\n      var k = _step2.value;\n\n      if (units.indexOf(k) >= 0) {\n        lastUnit = k;\n        var own = 0; // anything we haven't boiled down yet should get boiled to this unit\n\n        for (var ak in accumulated) {\n          own += this.matrix[ak][k] * accumulated[ak];\n          accumulated[ak] = 0;\n        } // plus anything that's already in this unit\n\n\n        if (isNumber(vals[k])) {\n          own += vals[k];\n        }\n\n        var i = Math.trunc(own);\n        built[k] = i;\n        accumulated[k] = own - i; // we'd like to absorb these fractions in another unit\n        // plus anything further down the chain that should be rolled up in to this\n\n        for (var down in vals) {\n          if (orderedUnits.indexOf(down) > orderedUnits.indexOf(k)) {\n            convert(this.matrix, vals, down, built, k);\n          }\n        } // otherwise, keep it in the wings to boil it later\n\n      } else if (isNumber(vals[k])) {\n        accumulated[k] = vals[k];\n      }\n    } // anything leftover becomes the decimal for the last unit\n    // lastUnit must be defined since units is not empty\n\n\n    for (var key in accumulated) {\n      if (accumulated[key] !== 0) {\n        built[lastUnit] += key === lastUnit ? accumulated[key] : accumulated[key] / this.matrix[lastUnit][key];\n      }\n    }\n\n    return clone(this, {\n      values: built\n    }, true).normalize();\n  }\n  /**\n   * Return the negative of this Duration.\n   * @example Duration.fromObject({ hours: 1, seconds: 30 }).negate().toObject() //=> { hours: -1, seconds: -30 }\n   * @return {Duration}\n   */\n  ;\n\n  _proto.negate = function negate() {\n    if (!this.isValid) return this;\n    var negated = {};\n\n    for (var _i2 = 0, _Object$keys2 = Object.keys(this.values); _i2 < _Object$keys2.length; _i2++) {\n      var k = _Object$keys2[_i2];\n      negated[k] = -this.values[k];\n    }\n\n    return clone(this, {\n      values: negated\n    }, true);\n  }\n  /**\n   * Get the years.\n   * @type {number}\n   */\n  ;\n\n  /**\n   * Equality check\n   * Two Durations are equal iff they have the same units and the same values for each unit.\n   * @param {Duration} other\n   * @return {boolean}\n   */\n  _proto.equals = function equals(other) {\n    if (!this.isValid || !other.isValid) {\n      return false;\n    }\n\n    if (!this.loc.equals(other.loc)) {\n      return false;\n    }\n\n    function eq(v1, v2) {\n      // Consider 0 and undefined as equal\n      if (v1 === undefined || v1 === 0) return v2 === undefined || v2 === 0;\n      return v1 === v2;\n    }\n\n    for (var _iterator3 = _createForOfIteratorHelperLoose(orderedUnits), _step3; !(_step3 = _iterator3()).done;) {\n      var u = _step3.value;\n\n      if (!eq(this.values[u], other.values[u])) {\n        return false;\n      }\n    }\n\n    return true;\n  };\n\n  _createClass(Duration, [{\n    key: \"locale\",\n    get: function get() {\n      return this.isValid ? this.loc.locale : null;\n    }\n    /**\n     * Get the numbering system of a Duration, such 'beng'. The numbering system is used when formatting the Duration\n     *\n     * @type {string}\n     */\n\n  }, {\n    key: \"numberingSystem\",\n    get: function get() {\n      return this.isValid ? this.loc.numberingSystem : null;\n    }\n  }, {\n    key: \"years\",\n    get: function get() {\n      return this.isValid ? this.values.years || 0 : NaN;\n    }\n    /**\n     * Get the quarters.\n     * @type {number}\n     */\n\n  }, {\n    key: \"quarters\",\n    get: function get() {\n      return this.isValid ? this.values.quarters || 0 : NaN;\n    }\n    /**\n     * Get the months.\n     * @type {number}\n     */\n\n  }, {\n    key: \"months\",\n    get: function get() {\n      return this.isValid ? this.values.months || 0 : NaN;\n    }\n    /**\n     * Get the weeks\n     * @type {number}\n     */\n\n  }, {\n    key: \"weeks\",\n    get: function get() {\n      return this.isValid ? this.values.weeks || 0 : NaN;\n    }\n    /**\n     * Get the days.\n     * @type {number}\n     */\n\n  }, {\n    key: \"days\",\n    get: function get() {\n      return this.isValid ? this.values.days || 0 : NaN;\n    }\n    /**\n     * Get the hours.\n     * @type {number}\n     */\n\n  }, {\n    key: \"hours\",\n    get: function get() {\n      return this.isValid ? this.values.hours || 0 : NaN;\n    }\n    /**\n     * Get the minutes.\n     * @type {number}\n     */\n\n  }, {\n    key: \"minutes\",\n    get: function get() {\n      return this.isValid ? this.values.minutes || 0 : NaN;\n    }\n    /**\n     * Get the seconds.\n     * @return {number}\n     */\n\n  }, {\n    key: \"seconds\",\n    get: function get() {\n      return this.isValid ? this.values.seconds || 0 : NaN;\n    }\n    /**\n     * Get the milliseconds.\n     * @return {number}\n     */\n\n  }, {\n    key: \"milliseconds\",\n    get: function get() {\n      return this.isValid ? this.values.milliseconds || 0 : NaN;\n    }\n    /**\n     * Returns whether the Duration is invalid. Invalid durations are returned by diff operations\n     * on invalid DateTimes or Intervals.\n     * @return {boolean}\n     */\n\n  }, {\n    key: \"isValid\",\n    get: function get() {\n      return this.invalid === null;\n    }\n    /**\n     * Returns an error code if this Duration became invalid, or null if the Duration is valid\n     * @return {string}\n     */\n\n  }, {\n    key: \"invalidReason\",\n    get: function get() {\n      return this.invalid ? this.invalid.reason : null;\n    }\n    /**\n     * Returns an explanation of why this Duration became invalid, or null if the Duration is valid\n     * @type {string}\n     */\n\n  }, {\n    key: \"invalidExplanation\",\n    get: function get() {\n      return this.invalid ? this.invalid.explanation : null;\n    }\n  }]);\n\n  return Duration;\n}();\nfunction friendlyDuration(durationish) {\n  if (isNumber(durationish)) {\n    return Duration.fromMillis(durationish);\n  } else if (Duration.isDuration(durationish)) {\n    return durationish;\n  } else if (typeof durationish === \"object\") {\n    return Duration.fromObject(durationish);\n  } else {\n    throw new InvalidArgumentError(\"Unknown duration argument \" + durationish + \" of type \" + typeof durationish);\n  }\n}\n\nvar INVALID$1 = \"Invalid Interval\"; // checks if the start is equal to or before the end\n\nfunction validateStartEnd(start, end) {\n  if (!start || !start.isValid) {\n    return Interval.invalid(\"missing or invalid start\");\n  } else if (!end || !end.isValid) {\n    return Interval.invalid(\"missing or invalid end\");\n  } else if (end < start) {\n    return Interval.invalid(\"end before start\", \"The end of an interval must be after its start, but you had start=\" + start.toISO() + \" and end=\" + end.toISO());\n  } else {\n    return null;\n  }\n}\n/**\n * An Interval object represents a half-open interval of time, where each endpoint is a {@link DateTime}. Conceptually, it's a container for those two endpoints, accompanied by methods for creating, parsing, interrogating, comparing, transforming, and formatting them.\n *\n * Here is a brief overview of the most commonly used methods and getters in Interval:\n *\n * * **Creation** To create an Interval, use {@link fromDateTimes}, {@link after}, {@link before}, or {@link fromISO}.\n * * **Accessors** Use {@link start} and {@link end} to get the start and end.\n * * **Interrogation** To analyze the Interval, use {@link count}, {@link length}, {@link hasSame}, {@link contains}, {@link isAfter}, or {@link isBefore}.\n * * **Transformation** To create other Intervals out of this one, use {@link set}, {@link splitAt}, {@link splitBy}, {@link divideEqually}, {@link merge}, {@link xor}, {@link union}, {@link intersection}, or {@link difference}.\n * * **Comparison** To compare this Interval to another one, use {@link equals}, {@link overlaps}, {@link abutsStart}, {@link abutsEnd}, {@link engulfs}.\n * * **Output** To convert the Interval into other representations, see {@link toString}, {@link toISO}, {@link toISODate}, {@link toISOTime}, {@link toFormat}, and {@link toDuration}.\n */\n\n\nvar Interval = /*#__PURE__*/function () {\n  /**\n   * @private\n   */\n  function Interval(config) {\n    /**\n     * @access private\n     */\n    this.s = config.start;\n    /**\n     * @access private\n     */\n\n    this.e = config.end;\n    /**\n     * @access private\n     */\n\n    this.invalid = config.invalid || null;\n    /**\n     * @access private\n     */\n\n    this.isLuxonInterval = true;\n  }\n  /**\n   * Create an invalid Interval.\n   * @param {string} reason - simple string of why this Interval is invalid. Should not contain parameters or anything else data-dependent\n   * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n   * @return {Interval}\n   */\n\n\n  Interval.invalid = function invalid(reason, explanation) {\n    if (explanation === void 0) {\n      explanation = null;\n    }\n\n    if (!reason) {\n      throw new InvalidArgumentError(\"need to specify a reason the Interval is invalid\");\n    }\n\n    var invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n    if (Settings.throwOnInvalid) {\n      throw new InvalidIntervalError(invalid);\n    } else {\n      return new Interval({\n        invalid: invalid\n      });\n    }\n  }\n  /**\n   * Create an Interval from a start DateTime and an end DateTime. Inclusive of the start but not the end.\n   * @param {DateTime|Date|Object} start\n   * @param {DateTime|Date|Object} end\n   * @return {Interval}\n   */\n  ;\n\n  Interval.fromDateTimes = function fromDateTimes(start, end) {\n    var builtStart = friendlyDateTime(start),\n        builtEnd = friendlyDateTime(end);\n    var validateError = validateStartEnd(builtStart, builtEnd);\n\n    if (validateError == null) {\n      return new Interval({\n        start: builtStart,\n        end: builtEnd\n      });\n    } else {\n      return validateError;\n    }\n  }\n  /**\n   * Create an Interval from a start DateTime and a Duration to extend to.\n   * @param {DateTime|Date|Object} start\n   * @param {Duration|Object|number} duration - the length of the Interval.\n   * @return {Interval}\n   */\n  ;\n\n  Interval.after = function after(start, duration) {\n    var dur = friendlyDuration(duration),\n        dt = friendlyDateTime(start);\n    return Interval.fromDateTimes(dt, dt.plus(dur));\n  }\n  /**\n   * Create an Interval from an end DateTime and a Duration to extend backwards to.\n   * @param {DateTime|Date|Object} end\n   * @param {Duration|Object|number} duration - the length of the Interval.\n   * @return {Interval}\n   */\n  ;\n\n  Interval.before = function before(end, duration) {\n    var dur = friendlyDuration(duration),\n        dt = friendlyDateTime(end);\n    return Interval.fromDateTimes(dt.minus(dur), dt);\n  }\n  /**\n   * Create an Interval from an ISO 8601 string.\n   * Accepts `<start>/<end>`, `<start>/<duration>`, and `<duration>/<end>` formats.\n   * @param {string} text - the ISO string to parse\n   * @param {Object} [opts] - options to pass {@link DateTime.fromISO} and optionally {@link Duration.fromISO}\n   * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n   * @return {Interval}\n   */\n  ;\n\n  Interval.fromISO = function fromISO(text, opts) {\n    var _split = (text || \"\").split(\"/\", 2),\n        s = _split[0],\n        e = _split[1];\n\n    if (s && e) {\n      var start, startIsValid;\n\n      try {\n        start = DateTime.fromISO(s, opts);\n        startIsValid = start.isValid;\n      } catch (e) {\n        startIsValid = false;\n      }\n\n      var end, endIsValid;\n\n      try {\n        end = DateTime.fromISO(e, opts);\n        endIsValid = end.isValid;\n      } catch (e) {\n        endIsValid = false;\n      }\n\n      if (startIsValid && endIsValid) {\n        return Interval.fromDateTimes(start, end);\n      }\n\n      if (startIsValid) {\n        var dur = Duration.fromISO(e, opts);\n\n        if (dur.isValid) {\n          return Interval.after(start, dur);\n        }\n      } else if (endIsValid) {\n        var _dur = Duration.fromISO(s, opts);\n\n        if (_dur.isValid) {\n          return Interval.before(end, _dur);\n        }\n      }\n    }\n\n    return Interval.invalid(\"unparsable\", \"the input \\\"\" + text + \"\\\" can't be parsed as ISO 8601\");\n  }\n  /**\n   * Check if an object is an Interval. Works across context boundaries\n   * @param {object} o\n   * @return {boolean}\n   */\n  ;\n\n  Interval.isInterval = function isInterval(o) {\n    return o && o.isLuxonInterval || false;\n  }\n  /**\n   * Returns the start of the Interval\n   * @type {DateTime}\n   */\n  ;\n\n  var _proto = Interval.prototype;\n\n  /**\n   * Returns the length of the Interval in the specified unit.\n   * @param {string} unit - the unit (such as 'hours' or 'days') to return the length in.\n   * @return {number}\n   */\n  _proto.length = function length(unit) {\n    if (unit === void 0) {\n      unit = \"milliseconds\";\n    }\n\n    return this.isValid ? this.toDuration.apply(this, [unit]).get(unit) : NaN;\n  }\n  /**\n   * Returns the count of minutes, hours, days, months, or years included in the Interval, even in part.\n   * Unlike {@link length} this counts sections of the calendar, not periods of time, e.g. specifying 'day'\n   * asks 'what dates are included in this interval?', not 'how many days long is this interval?'\n   * @param {string} [unit='milliseconds'] - the unit of time to count.\n   * @return {number}\n   */\n  ;\n\n  _proto.count = function count(unit) {\n    if (unit === void 0) {\n      unit = \"milliseconds\";\n    }\n\n    if (!this.isValid) return NaN;\n    var start = this.start.startOf(unit),\n        end = this.end.startOf(unit);\n    return Math.floor(end.diff(start, unit).get(unit)) + 1;\n  }\n  /**\n   * Returns whether this Interval's start and end are both in the same unit of time\n   * @param {string} unit - the unit of time to check sameness on\n   * @return {boolean}\n   */\n  ;\n\n  _proto.hasSame = function hasSame(unit) {\n    return this.isValid ? this.isEmpty() || this.e.minus(1).hasSame(this.s, unit) : false;\n  }\n  /**\n   * Return whether this Interval has the same start and end DateTimes.\n   * @return {boolean}\n   */\n  ;\n\n  _proto.isEmpty = function isEmpty() {\n    return this.s.valueOf() === this.e.valueOf();\n  }\n  /**\n   * Return whether this Interval's start is after the specified DateTime.\n   * @param {DateTime} dateTime\n   * @return {boolean}\n   */\n  ;\n\n  _proto.isAfter = function isAfter(dateTime) {\n    if (!this.isValid) return false;\n    return this.s > dateTime;\n  }\n  /**\n   * Return whether this Interval's end is before the specified DateTime.\n   * @param {DateTime} dateTime\n   * @return {boolean}\n   */\n  ;\n\n  _proto.isBefore = function isBefore(dateTime) {\n    if (!this.isValid) return false;\n    return this.e <= dateTime;\n  }\n  /**\n   * Return whether this Interval contains the specified DateTime.\n   * @param {DateTime} dateTime\n   * @return {boolean}\n   */\n  ;\n\n  _proto.contains = function contains(dateTime) {\n    if (!this.isValid) return false;\n    return this.s <= dateTime && this.e > dateTime;\n  }\n  /**\n   * \"Sets\" the start and/or end dates. Returns a newly-constructed Interval.\n   * @param {Object} values - the values to set\n   * @param {DateTime} values.start - the starting DateTime\n   * @param {DateTime} values.end - the ending DateTime\n   * @return {Interval}\n   */\n  ;\n\n  _proto.set = function set(_temp) {\n    var _ref = _temp === void 0 ? {} : _temp,\n        start = _ref.start,\n        end = _ref.end;\n\n    if (!this.isValid) return this;\n    return Interval.fromDateTimes(start || this.s, end || this.e);\n  }\n  /**\n   * Split this Interval at each of the specified DateTimes\n   * @param {...[DateTime]} dateTimes - the unit of time to count.\n   * @return {[Interval]}\n   */\n  ;\n\n  _proto.splitAt = function splitAt() {\n    var _this = this;\n\n    if (!this.isValid) return [];\n\n    for (var _len = arguments.length, dateTimes = new Array(_len), _key = 0; _key < _len; _key++) {\n      dateTimes[_key] = arguments[_key];\n    }\n\n    var sorted = dateTimes.map(friendlyDateTime).filter(function (d) {\n      return _this.contains(d);\n    }).sort(),\n        results = [];\n    var s = this.s,\n        i = 0;\n\n    while (s < this.e) {\n      var added = sorted[i] || this.e,\n          next = +added > +this.e ? this.e : added;\n      results.push(Interval.fromDateTimes(s, next));\n      s = next;\n      i += 1;\n    }\n\n    return results;\n  }\n  /**\n   * Split this Interval into smaller Intervals, each of the specified length.\n   * Left over time is grouped into a smaller interval\n   * @param {Duration|Object|number} duration - The length of each resulting interval.\n   * @return {[Interval]}\n   */\n  ;\n\n  _proto.splitBy = function splitBy(duration) {\n    var dur = friendlyDuration(duration);\n\n    if (!this.isValid || !dur.isValid || dur.as(\"milliseconds\") === 0) {\n      return [];\n    }\n\n    var s = this.s,\n        idx = 1,\n        next;\n    var results = [];\n\n    while (s < this.e) {\n      var added = this.start.plus(dur.mapUnits(function (x) {\n        return x * idx;\n      }));\n      next = +added > +this.e ? this.e : added;\n      results.push(Interval.fromDateTimes(s, next));\n      s = next;\n      idx += 1;\n    }\n\n    return results;\n  }\n  /**\n   * Split this Interval into the specified number of smaller intervals.\n   * @param {number} numberOfParts - The number of Intervals to divide the Interval into.\n   * @return {[Interval]}\n   */\n  ;\n\n  _proto.divideEqually = function divideEqually(numberOfParts) {\n    if (!this.isValid) return [];\n    return this.splitBy(this.length() / numberOfParts).slice(0, numberOfParts);\n  }\n  /**\n   * Return whether this Interval overlaps with the specified Interval\n   * @param {Interval} other\n   * @return {boolean}\n   */\n  ;\n\n  _proto.overlaps = function overlaps(other) {\n    return this.e > other.s && this.s < other.e;\n  }\n  /**\n   * Return whether this Interval's end is adjacent to the specified Interval's start.\n   * @param {Interval} other\n   * @return {boolean}\n   */\n  ;\n\n  _proto.abutsStart = function abutsStart(other) {\n    if (!this.isValid) return false;\n    return +this.e === +other.s;\n  }\n  /**\n   * Return whether this Interval's start is adjacent to the specified Interval's end.\n   * @param {Interval} other\n   * @return {boolean}\n   */\n  ;\n\n  _proto.abutsEnd = function abutsEnd(other) {\n    if (!this.isValid) return false;\n    return +other.e === +this.s;\n  }\n  /**\n   * Return whether this Interval engulfs the start and end of the specified Interval.\n   * @param {Interval} other\n   * @return {boolean}\n   */\n  ;\n\n  _proto.engulfs = function engulfs(other) {\n    if (!this.isValid) return false;\n    return this.s <= other.s && this.e >= other.e;\n  }\n  /**\n   * Return whether this Interval has the same start and end as the specified Interval.\n   * @param {Interval} other\n   * @return {boolean}\n   */\n  ;\n\n  _proto.equals = function equals(other) {\n    if (!this.isValid || !other.isValid) {\n      return false;\n    }\n\n    return this.s.equals(other.s) && this.e.equals(other.e);\n  }\n  /**\n   * Return an Interval representing the intersection of this Interval and the specified Interval.\n   * Specifically, the resulting Interval has the maximum start time and the minimum end time of the two Intervals.\n   * Returns null if the intersection is empty, meaning, the intervals don't intersect.\n   * @param {Interval} other\n   * @return {Interval}\n   */\n  ;\n\n  _proto.intersection = function intersection(other) {\n    if (!this.isValid) return this;\n    var s = this.s > other.s ? this.s : other.s,\n        e = this.e < other.e ? this.e : other.e;\n\n    if (s >= e) {\n      return null;\n    } else {\n      return Interval.fromDateTimes(s, e);\n    }\n  }\n  /**\n   * Return an Interval representing the union of this Interval and the specified Interval.\n   * Specifically, the resulting Interval has the minimum start time and the maximum end time of the two Intervals.\n   * @param {Interval} other\n   * @return {Interval}\n   */\n  ;\n\n  _proto.union = function union(other) {\n    if (!this.isValid) return this;\n    var s = this.s < other.s ? this.s : other.s,\n        e = this.e > other.e ? this.e : other.e;\n    return Interval.fromDateTimes(s, e);\n  }\n  /**\n   * Merge an array of Intervals into a equivalent minimal set of Intervals.\n   * Combines overlapping and adjacent Intervals.\n   * @param {[Interval]} intervals\n   * @return {[Interval]}\n   */\n  ;\n\n  Interval.merge = function merge(intervals) {\n    var _intervals$sort$reduc = intervals.sort(function (a, b) {\n      return a.s - b.s;\n    }).reduce(function (_ref2, item) {\n      var sofar = _ref2[0],\n          current = _ref2[1];\n\n      if (!current) {\n        return [sofar, item];\n      } else if (current.overlaps(item) || current.abutsStart(item)) {\n        return [sofar, current.union(item)];\n      } else {\n        return [sofar.concat([current]), item];\n      }\n    }, [[], null]),\n        found = _intervals$sort$reduc[0],\n        final = _intervals$sort$reduc[1];\n\n    if (final) {\n      found.push(final);\n    }\n\n    return found;\n  }\n  /**\n   * Return an array of Intervals representing the spans of time that only appear in one of the specified Intervals.\n   * @param {[Interval]} intervals\n   * @return {[Interval]}\n   */\n  ;\n\n  Interval.xor = function xor(intervals) {\n    var _Array$prototype;\n\n    var start = null,\n        currentCount = 0;\n\n    var results = [],\n        ends = intervals.map(function (i) {\n      return [{\n        time: i.s,\n        type: \"s\"\n      }, {\n        time: i.e,\n        type: \"e\"\n      }];\n    }),\n        flattened = (_Array$prototype = Array.prototype).concat.apply(_Array$prototype, ends),\n        arr = flattened.sort(function (a, b) {\n      return a.time - b.time;\n    });\n\n    for (var _iterator = _createForOfIteratorHelperLoose(arr), _step; !(_step = _iterator()).done;) {\n      var i = _step.value;\n      currentCount += i.type === \"s\" ? 1 : -1;\n\n      if (currentCount === 1) {\n        start = i.time;\n      } else {\n        if (start && +start !== +i.time) {\n          results.push(Interval.fromDateTimes(start, i.time));\n        }\n\n        start = null;\n      }\n    }\n\n    return Interval.merge(results);\n  }\n  /**\n   * Return an Interval representing the span of time in this Interval that doesn't overlap with any of the specified Intervals.\n   * @param {...Interval} intervals\n   * @return {[Interval]}\n   */\n  ;\n\n  _proto.difference = function difference() {\n    var _this2 = this;\n\n    for (var _len2 = arguments.length, intervals = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      intervals[_key2] = arguments[_key2];\n    }\n\n    return Interval.xor([this].concat(intervals)).map(function (i) {\n      return _this2.intersection(i);\n    }).filter(function (i) {\n      return i && !i.isEmpty();\n    });\n  }\n  /**\n   * Returns a string representation of this Interval appropriate for debugging.\n   * @return {string}\n   */\n  ;\n\n  _proto.toString = function toString() {\n    if (!this.isValid) return INVALID$1;\n    return \"[\" + this.s.toISO() + \" \\u2013 \" + this.e.toISO() + \")\";\n  }\n  /**\n   * Returns an ISO 8601-compliant string representation of this Interval.\n   * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n   * @param {Object} opts - The same options as {@link DateTime.toISO}\n   * @return {string}\n   */\n  ;\n\n  _proto.toISO = function toISO(opts) {\n    if (!this.isValid) return INVALID$1;\n    return this.s.toISO(opts) + \"/\" + this.e.toISO(opts);\n  }\n  /**\n   * Returns an ISO 8601-compliant string representation of date of this Interval.\n   * The time components are ignored.\n   * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n   * @return {string}\n   */\n  ;\n\n  _proto.toISODate = function toISODate() {\n    if (!this.isValid) return INVALID$1;\n    return this.s.toISODate() + \"/\" + this.e.toISODate();\n  }\n  /**\n   * Returns an ISO 8601-compliant string representation of time of this Interval.\n   * The date components are ignored.\n   * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n   * @param {Object} opts - The same options as {@link DateTime.toISO}\n   * @return {string}\n   */\n  ;\n\n  _proto.toISOTime = function toISOTime(opts) {\n    if (!this.isValid) return INVALID$1;\n    return this.s.toISOTime(opts) + \"/\" + this.e.toISOTime(opts);\n  }\n  /**\n   * Returns a string representation of this Interval formatted according to the specified format string.\n   * @param {string} dateFormat - the format string. This string formats the start and end time. See {@link DateTime.toFormat} for details.\n   * @param {Object} opts - options\n   * @param {string} [opts.separator =  ' – '] - a separator to place between the start and end representations\n   * @return {string}\n   */\n  ;\n\n  _proto.toFormat = function toFormat(dateFormat, _temp2) {\n    var _ref3 = _temp2 === void 0 ? {} : _temp2,\n        _ref3$separator = _ref3.separator,\n        separator = _ref3$separator === void 0 ? \" – \" : _ref3$separator;\n\n    if (!this.isValid) return INVALID$1;\n    return \"\" + this.s.toFormat(dateFormat) + separator + this.e.toFormat(dateFormat);\n  }\n  /**\n   * Return a Duration representing the time spanned by this interval.\n   * @param {string|string[]} [unit=['milliseconds']] - the unit or units (such as 'hours' or 'days') to include in the duration.\n   * @param {Object} opts - options that affect the creation of the Duration\n   * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n   * @example Interval.fromDateTimes(dt1, dt2).toDuration().toObject() //=> { milliseconds: 88489257 }\n   * @example Interval.fromDateTimes(dt1, dt2).toDuration('days').toObject() //=> { days: 1.0241812152777778 }\n   * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes']).toObject() //=> { hours: 24, minutes: 34.82095 }\n   * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes', 'seconds']).toObject() //=> { hours: 24, minutes: 34, seconds: 49.257 }\n   * @example Interval.fromDateTimes(dt1, dt2).toDuration('seconds').toObject() //=> { seconds: 88489.257 }\n   * @return {Duration}\n   */\n  ;\n\n  _proto.toDuration = function toDuration(unit, opts) {\n    if (!this.isValid) {\n      return Duration.invalid(this.invalidReason);\n    }\n\n    return this.e.diff(this.s, unit, opts);\n  }\n  /**\n   * Run mapFn on the interval start and end, returning a new Interval from the resulting DateTimes\n   * @param {function} mapFn\n   * @return {Interval}\n   * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.toUTC())\n   * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.plus({ hours: 2 }))\n   */\n  ;\n\n  _proto.mapEndpoints = function mapEndpoints(mapFn) {\n    return Interval.fromDateTimes(mapFn(this.s), mapFn(this.e));\n  };\n\n  _createClass(Interval, [{\n    key: \"start\",\n    get: function get() {\n      return this.isValid ? this.s : null;\n    }\n    /**\n     * Returns the end of the Interval\n     * @type {DateTime}\n     */\n\n  }, {\n    key: \"end\",\n    get: function get() {\n      return this.isValid ? this.e : null;\n    }\n    /**\n     * Returns whether this Interval's end is at least its start, meaning that the Interval isn't 'backwards'.\n     * @type {boolean}\n     */\n\n  }, {\n    key: \"isValid\",\n    get: function get() {\n      return this.invalidReason === null;\n    }\n    /**\n     * Returns an error code if this Interval is invalid, or null if the Interval is valid\n     * @type {string}\n     */\n\n  }, {\n    key: \"invalidReason\",\n    get: function get() {\n      return this.invalid ? this.invalid.reason : null;\n    }\n    /**\n     * Returns an explanation of why this Interval became invalid, or null if the Interval is valid\n     * @type {string}\n     */\n\n  }, {\n    key: \"invalidExplanation\",\n    get: function get() {\n      return this.invalid ? this.invalid.explanation : null;\n    }\n  }]);\n\n  return Interval;\n}();\n\n/**\n * The Info class contains static methods for retrieving general time and date related data. For example, it has methods for finding out if a time zone has a DST, for listing the months in any supported locale, and for discovering which of Luxon features are available in the current environment.\n */\n\nvar Info = /*#__PURE__*/function () {\n  function Info() {}\n\n  /**\n   * Return whether the specified zone contains a DST.\n   * @param {string|Zone} [zone='local'] - Zone to check. Defaults to the environment's local zone.\n   * @return {boolean}\n   */\n  Info.hasDST = function hasDST(zone) {\n    if (zone === void 0) {\n      zone = Settings.defaultZone;\n    }\n\n    var proto = DateTime.now().setZone(zone).set({\n      month: 12\n    });\n    return !zone.universal && proto.offset !== proto.set({\n      month: 6\n    }).offset;\n  }\n  /**\n   * Return whether the specified zone is a valid IANA specifier.\n   * @param {string} zone - Zone to check\n   * @return {boolean}\n   */\n  ;\n\n  Info.isValidIANAZone = function isValidIANAZone(zone) {\n    return IANAZone.isValidSpecifier(zone) && IANAZone.isValidZone(zone);\n  }\n  /**\n   * Converts the input into a {@link Zone} instance.\n   *\n   * * If `input` is already a Zone instance, it is returned unchanged.\n   * * If `input` is a string containing a valid time zone name, a Zone instance\n   *   with that name is returned.\n   * * If `input` is a string that doesn't refer to a known time zone, a Zone\n   *   instance with {@link Zone.isValid} == false is returned.\n   * * If `input is a number, a Zone instance with the specified fixed offset\n   *   in minutes is returned.\n   * * If `input` is `null` or `undefined`, the default zone is returned.\n   * @param {string|Zone|number} [input] - the value to be converted\n   * @return {Zone}\n   */\n  ;\n\n  Info.normalizeZone = function normalizeZone$1(input) {\n    return normalizeZone(input, Settings.defaultZone);\n  }\n  /**\n   * Return an array of standalone month names.\n   * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n   * @param {string} [length='long'] - the length of the month representation, such as \"numeric\", \"2-digit\", \"narrow\", \"short\", \"long\"\n   * @param {Object} opts - options\n   * @param {string} [opts.locale] - the locale code\n   * @param {string} [opts.numberingSystem=null] - the numbering system\n   * @param {string} [opts.locObj=null] - an existing locale object to use\n   * @param {string} [opts.outputCalendar='gregory'] - the calendar\n   * @example Info.months()[0] //=> 'January'\n   * @example Info.months('short')[0] //=> 'Jan'\n   * @example Info.months('numeric')[0] //=> '1'\n   * @example Info.months('short', { locale: 'fr-CA' } )[0] //=> 'janv.'\n   * @example Info.months('numeric', { locale: 'ar' })[0] //=> '١'\n   * @example Info.months('long', { outputCalendar: 'islamic' })[0] //=> 'Rabiʻ I'\n   * @return {[string]}\n   */\n  ;\n\n  Info.months = function months(length, _temp) {\n    if (length === void 0) {\n      length = \"long\";\n    }\n\n    var _ref = _temp === void 0 ? {} : _temp,\n        _ref$locale = _ref.locale,\n        locale = _ref$locale === void 0 ? null : _ref$locale,\n        _ref$numberingSystem = _ref.numberingSystem,\n        numberingSystem = _ref$numberingSystem === void 0 ? null : _ref$numberingSystem,\n        _ref$locObj = _ref.locObj,\n        locObj = _ref$locObj === void 0 ? null : _ref$locObj,\n        _ref$outputCalendar = _ref.outputCalendar,\n        outputCalendar = _ref$outputCalendar === void 0 ? \"gregory\" : _ref$outputCalendar;\n\n    return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length);\n  }\n  /**\n   * Return an array of format month names.\n   * Format months differ from standalone months in that they're meant to appear next to the day of the month. In some languages, that\n   * changes the string.\n   * See {@link months}\n   * @param {string} [length='long'] - the length of the month representation, such as \"numeric\", \"2-digit\", \"narrow\", \"short\", \"long\"\n   * @param {Object} opts - options\n   * @param {string} [opts.locale] - the locale code\n   * @param {string} [opts.numberingSystem=null] - the numbering system\n   * @param {string} [opts.locObj=null] - an existing locale object to use\n   * @param {string} [opts.outputCalendar='gregory'] - the calendar\n   * @return {[string]}\n   */\n  ;\n\n  Info.monthsFormat = function monthsFormat(length, _temp2) {\n    if (length === void 0) {\n      length = \"long\";\n    }\n\n    var _ref2 = _temp2 === void 0 ? {} : _temp2,\n        _ref2$locale = _ref2.locale,\n        locale = _ref2$locale === void 0 ? null : _ref2$locale,\n        _ref2$numberingSystem = _ref2.numberingSystem,\n        numberingSystem = _ref2$numberingSystem === void 0 ? null : _ref2$numberingSystem,\n        _ref2$locObj = _ref2.locObj,\n        locObj = _ref2$locObj === void 0 ? null : _ref2$locObj,\n        _ref2$outputCalendar = _ref2.outputCalendar,\n        outputCalendar = _ref2$outputCalendar === void 0 ? \"gregory\" : _ref2$outputCalendar;\n\n    return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length, true);\n  }\n  /**\n   * Return an array of standalone week names.\n   * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n   * @param {string} [length='long'] - the length of the weekday representation, such as \"narrow\", \"short\", \"long\".\n   * @param {Object} opts - options\n   * @param {string} [opts.locale] - the locale code\n   * @param {string} [opts.numberingSystem=null] - the numbering system\n   * @param {string} [opts.locObj=null] - an existing locale object to use\n   * @example Info.weekdays()[0] //=> 'Monday'\n   * @example Info.weekdays('short')[0] //=> 'Mon'\n   * @example Info.weekdays('short', { locale: 'fr-CA' })[0] //=> 'lun.'\n   * @example Info.weekdays('short', { locale: 'ar' })[0] //=> 'الاثنين'\n   * @return {[string]}\n   */\n  ;\n\n  Info.weekdays = function weekdays(length, _temp3) {\n    if (length === void 0) {\n      length = \"long\";\n    }\n\n    var _ref3 = _temp3 === void 0 ? {} : _temp3,\n        _ref3$locale = _ref3.locale,\n        locale = _ref3$locale === void 0 ? null : _ref3$locale,\n        _ref3$numberingSystem = _ref3.numberingSystem,\n        numberingSystem = _ref3$numberingSystem === void 0 ? null : _ref3$numberingSystem,\n        _ref3$locObj = _ref3.locObj,\n        locObj = _ref3$locObj === void 0 ? null : _ref3$locObj;\n\n    return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length);\n  }\n  /**\n   * Return an array of format week names.\n   * Format weekdays differ from standalone weekdays in that they're meant to appear next to more date information. In some languages, that\n   * changes the string.\n   * See {@link weekdays}\n   * @param {string} [length='long'] - the length of the weekday representation, such as \"narrow\", \"short\", \"long\".\n   * @param {Object} opts - options\n   * @param {string} [opts.locale=null] - the locale code\n   * @param {string} [opts.numberingSystem=null] - the numbering system\n   * @param {string} [opts.locObj=null] - an existing locale object to use\n   * @return {[string]}\n   */\n  ;\n\n  Info.weekdaysFormat = function weekdaysFormat(length, _temp4) {\n    if (length === void 0) {\n      length = \"long\";\n    }\n\n    var _ref4 = _temp4 === void 0 ? {} : _temp4,\n        _ref4$locale = _ref4.locale,\n        locale = _ref4$locale === void 0 ? null : _ref4$locale,\n        _ref4$numberingSystem = _ref4.numberingSystem,\n        numberingSystem = _ref4$numberingSystem === void 0 ? null : _ref4$numberingSystem,\n        _ref4$locObj = _ref4.locObj,\n        locObj = _ref4$locObj === void 0 ? null : _ref4$locObj;\n\n    return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length, true);\n  }\n  /**\n   * Return an array of meridiems.\n   * @param {Object} opts - options\n   * @param {string} [opts.locale] - the locale code\n   * @example Info.meridiems() //=> [ 'AM', 'PM' ]\n   * @example Info.meridiems({ locale: 'my' }) //=> [ 'နံနက်', 'ညနေ' ]\n   * @return {[string]}\n   */\n  ;\n\n  Info.meridiems = function meridiems(_temp5) {\n    var _ref5 = _temp5 === void 0 ? {} : _temp5,\n        _ref5$locale = _ref5.locale,\n        locale = _ref5$locale === void 0 ? null : _ref5$locale;\n\n    return Locale.create(locale).meridiems();\n  }\n  /**\n   * Return an array of eras, such as ['BC', 'AD']. The locale can be specified, but the calendar system is always Gregorian.\n   * @param {string} [length='short'] - the length of the era representation, such as \"short\" or \"long\".\n   * @param {Object} opts - options\n   * @param {string} [opts.locale] - the locale code\n   * @example Info.eras() //=> [ 'BC', 'AD' ]\n   * @example Info.eras('long') //=> [ 'Before Christ', 'Anno Domini' ]\n   * @example Info.eras('long', { locale: 'fr' }) //=> [ 'avant Jésus-Christ', 'après Jésus-Christ' ]\n   * @return {[string]}\n   */\n  ;\n\n  Info.eras = function eras(length, _temp6) {\n    if (length === void 0) {\n      length = \"short\";\n    }\n\n    var _ref6 = _temp6 === void 0 ? {} : _temp6,\n        _ref6$locale = _ref6.locale,\n        locale = _ref6$locale === void 0 ? null : _ref6$locale;\n\n    return Locale.create(locale, null, \"gregory\").eras(length);\n  }\n  /**\n   * Return the set of available features in this environment.\n   * Some features of Luxon are not available in all environments. For example, on older browsers, timezone support is not available. Use this function to figure out if that's the case.\n   * Keys:\n   * * `zones`: whether this environment supports IANA timezones\n   * * `intlTokens`: whether this environment supports internationalized token-based formatting/parsing\n   * * `intl`: whether this environment supports general internationalization\n   * * `relative`: whether this environment supports relative time formatting\n   * @example Info.features() //=> { intl: true, intlTokens: false, zones: true, relative: false }\n   * @return {Object}\n   */\n  ;\n\n  Info.features = function features() {\n    var intl = false,\n        intlTokens = false,\n        zones = false,\n        relative = false;\n\n    if (hasIntl()) {\n      intl = true;\n      intlTokens = hasFormatToParts();\n      relative = hasRelative();\n\n      try {\n        zones = new Intl.DateTimeFormat(\"en\", {\n          timeZone: \"America/New_York\"\n        }).resolvedOptions().timeZone === \"America/New_York\";\n      } catch (e) {\n        zones = false;\n      }\n    }\n\n    return {\n      intl: intl,\n      intlTokens: intlTokens,\n      zones: zones,\n      relative: relative\n    };\n  };\n\n  return Info;\n}();\n\nfunction dayDiff(earlier, later) {\n  var utcDayStart = function utcDayStart(dt) {\n    return dt.toUTC(0, {\n      keepLocalTime: true\n    }).startOf(\"day\").valueOf();\n  },\n      ms = utcDayStart(later) - utcDayStart(earlier);\n\n  return Math.floor(Duration.fromMillis(ms).as(\"days\"));\n}\n\nfunction highOrderDiffs(cursor, later, units) {\n  var differs = [[\"years\", function (a, b) {\n    return b.year - a.year;\n  }], [\"quarters\", function (a, b) {\n    return b.quarter - a.quarter;\n  }], [\"months\", function (a, b) {\n    return b.month - a.month + (b.year - a.year) * 12;\n  }], [\"weeks\", function (a, b) {\n    var days = dayDiff(a, b);\n    return (days - days % 7) / 7;\n  }], [\"days\", dayDiff]];\n  var results = {};\n  var lowestOrder, highWater;\n\n  for (var _i = 0, _differs = differs; _i < _differs.length; _i++) {\n    var _differs$_i = _differs[_i],\n        unit = _differs$_i[0],\n        differ = _differs$_i[1];\n\n    if (units.indexOf(unit) >= 0) {\n      var _cursor$plus;\n\n      lowestOrder = unit;\n      var delta = differ(cursor, later);\n      highWater = cursor.plus((_cursor$plus = {}, _cursor$plus[unit] = delta, _cursor$plus));\n\n      if (highWater > later) {\n        var _cursor$plus2;\n\n        cursor = cursor.plus((_cursor$plus2 = {}, _cursor$plus2[unit] = delta - 1, _cursor$plus2));\n        delta -= 1;\n      } else {\n        cursor = highWater;\n      }\n\n      results[unit] = delta;\n    }\n  }\n\n  return [cursor, results, highWater, lowestOrder];\n}\n\nfunction _diff (earlier, later, units, opts) {\n  var _highOrderDiffs = highOrderDiffs(earlier, later, units),\n      cursor = _highOrderDiffs[0],\n      results = _highOrderDiffs[1],\n      highWater = _highOrderDiffs[2],\n      lowestOrder = _highOrderDiffs[3];\n\n  var remainingMillis = later - cursor;\n  var lowerOrderUnits = units.filter(function (u) {\n    return [\"hours\", \"minutes\", \"seconds\", \"milliseconds\"].indexOf(u) >= 0;\n  });\n\n  if (lowerOrderUnits.length === 0) {\n    if (highWater < later) {\n      var _cursor$plus3;\n\n      highWater = cursor.plus((_cursor$plus3 = {}, _cursor$plus3[lowestOrder] = 1, _cursor$plus3));\n    }\n\n    if (highWater !== cursor) {\n      results[lowestOrder] = (results[lowestOrder] || 0) + remainingMillis / (highWater - cursor);\n    }\n  }\n\n  var duration = Duration.fromObject(Object.assign(results, opts));\n\n  if (lowerOrderUnits.length > 0) {\n    var _Duration$fromMillis;\n\n    return (_Duration$fromMillis = Duration.fromMillis(remainingMillis, opts)).shiftTo.apply(_Duration$fromMillis, lowerOrderUnits).plus(duration);\n  } else {\n    return duration;\n  }\n}\n\nvar numberingSystems = {\n  arab: \"[\\u0660-\\u0669]\",\n  arabext: \"[\\u06F0-\\u06F9]\",\n  bali: \"[\\u1B50-\\u1B59]\",\n  beng: \"[\\u09E6-\\u09EF]\",\n  deva: \"[\\u0966-\\u096F]\",\n  fullwide: \"[\\uFF10-\\uFF19]\",\n  gujr: \"[\\u0AE6-\\u0AEF]\",\n  hanidec: \"[〇|一|二|三|四|五|六|七|八|九]\",\n  khmr: \"[\\u17E0-\\u17E9]\",\n  knda: \"[\\u0CE6-\\u0CEF]\",\n  laoo: \"[\\u0ED0-\\u0ED9]\",\n  limb: \"[\\u1946-\\u194F]\",\n  mlym: \"[\\u0D66-\\u0D6F]\",\n  mong: \"[\\u1810-\\u1819]\",\n  mymr: \"[\\u1040-\\u1049]\",\n  orya: \"[\\u0B66-\\u0B6F]\",\n  tamldec: \"[\\u0BE6-\\u0BEF]\",\n  telu: \"[\\u0C66-\\u0C6F]\",\n  thai: \"[\\u0E50-\\u0E59]\",\n  tibt: \"[\\u0F20-\\u0F29]\",\n  latn: \"\\\\d\"\n};\nvar numberingSystemsUTF16 = {\n  arab: [1632, 1641],\n  arabext: [1776, 1785],\n  bali: [6992, 7001],\n  beng: [2534, 2543],\n  deva: [2406, 2415],\n  fullwide: [65296, 65303],\n  gujr: [2790, 2799],\n  khmr: [6112, 6121],\n  knda: [3302, 3311],\n  laoo: [3792, 3801],\n  limb: [6470, 6479],\n  mlym: [3430, 3439],\n  mong: [6160, 6169],\n  mymr: [4160, 4169],\n  orya: [2918, 2927],\n  tamldec: [3046, 3055],\n  telu: [3174, 3183],\n  thai: [3664, 3673],\n  tibt: [3872, 3881]\n}; // eslint-disable-next-line\n\nvar hanidecChars = numberingSystems.hanidec.replace(/[\\[|\\]]/g, \"\").split(\"\");\nfunction parseDigits(str) {\n  var value = parseInt(str, 10);\n\n  if (isNaN(value)) {\n    value = \"\";\n\n    for (var i = 0; i < str.length; i++) {\n      var code = str.charCodeAt(i);\n\n      if (str[i].search(numberingSystems.hanidec) !== -1) {\n        value += hanidecChars.indexOf(str[i]);\n      } else {\n        for (var key in numberingSystemsUTF16) {\n          var _numberingSystemsUTF = numberingSystemsUTF16[key],\n              min = _numberingSystemsUTF[0],\n              max = _numberingSystemsUTF[1];\n\n          if (code >= min && code <= max) {\n            value += code - min;\n          }\n        }\n      }\n    }\n\n    return parseInt(value, 10);\n  } else {\n    return value;\n  }\n}\nfunction digitRegex(_ref, append) {\n  var numberingSystem = _ref.numberingSystem;\n\n  if (append === void 0) {\n    append = \"\";\n  }\n\n  return new RegExp(\"\" + numberingSystems[numberingSystem || \"latn\"] + append);\n}\n\nvar MISSING_FTP = \"missing Intl.DateTimeFormat.formatToParts support\";\n\nfunction intUnit(regex, post) {\n  if (post === void 0) {\n    post = function post(i) {\n      return i;\n    };\n  }\n\n  return {\n    regex: regex,\n    deser: function deser(_ref) {\n      var s = _ref[0];\n      return post(parseDigits(s));\n    }\n  };\n}\n\nvar NBSP = String.fromCharCode(160);\nvar spaceOrNBSP = \"( |\" + NBSP + \")\";\nvar spaceOrNBSPRegExp = new RegExp(spaceOrNBSP, \"g\");\n\nfunction fixListRegex(s) {\n  // make dots optional and also make them literal\n  // make space and non breakable space characters interchangeable\n  return s.replace(/\\./g, \"\\\\.?\").replace(spaceOrNBSPRegExp, spaceOrNBSP);\n}\n\nfunction stripInsensitivities(s) {\n  return s.replace(/\\./g, \"\") // ignore dots that were made optional\n  .replace(spaceOrNBSPRegExp, \" \") // interchange space and nbsp\n  .toLowerCase();\n}\n\nfunction oneOf(strings, startIndex) {\n  if (strings === null) {\n    return null;\n  } else {\n    return {\n      regex: RegExp(strings.map(fixListRegex).join(\"|\")),\n      deser: function deser(_ref2) {\n        var s = _ref2[0];\n        return strings.findIndex(function (i) {\n          return stripInsensitivities(s) === stripInsensitivities(i);\n        }) + startIndex;\n      }\n    };\n  }\n}\n\nfunction offset(regex, groups) {\n  return {\n    regex: regex,\n    deser: function deser(_ref3) {\n      var h = _ref3[1],\n          m = _ref3[2];\n      return signedOffset(h, m);\n    },\n    groups: groups\n  };\n}\n\nfunction simple(regex) {\n  return {\n    regex: regex,\n    deser: function deser(_ref4) {\n      var s = _ref4[0];\n      return s;\n    }\n  };\n}\n\nfunction escapeToken(value) {\n  // eslint-disable-next-line no-useless-escape\n  return value.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, \"\\\\$&\");\n}\n\nfunction unitForToken(token, loc) {\n  var one = digitRegex(loc),\n      two = digitRegex(loc, \"{2}\"),\n      three = digitRegex(loc, \"{3}\"),\n      four = digitRegex(loc, \"{4}\"),\n      six = digitRegex(loc, \"{6}\"),\n      oneOrTwo = digitRegex(loc, \"{1,2}\"),\n      oneToThree = digitRegex(loc, \"{1,3}\"),\n      oneToSix = digitRegex(loc, \"{1,6}\"),\n      oneToNine = digitRegex(loc, \"{1,9}\"),\n      twoToFour = digitRegex(loc, \"{2,4}\"),\n      fourToSix = digitRegex(loc, \"{4,6}\"),\n      literal = function literal(t) {\n    return {\n      regex: RegExp(escapeToken(t.val)),\n      deser: function deser(_ref5) {\n        var s = _ref5[0];\n        return s;\n      },\n      literal: true\n    };\n  },\n      unitate = function unitate(t) {\n    if (token.literal) {\n      return literal(t);\n    }\n\n    switch (t.val) {\n      // era\n      case \"G\":\n        return oneOf(loc.eras(\"short\", false), 0);\n\n      case \"GG\":\n        return oneOf(loc.eras(\"long\", false), 0);\n      // years\n\n      case \"y\":\n        return intUnit(oneToSix);\n\n      case \"yy\":\n        return intUnit(twoToFour, untruncateYear);\n\n      case \"yyyy\":\n        return intUnit(four);\n\n      case \"yyyyy\":\n        return intUnit(fourToSix);\n\n      case \"yyyyyy\":\n        return intUnit(six);\n      // months\n\n      case \"M\":\n        return intUnit(oneOrTwo);\n\n      case \"MM\":\n        return intUnit(two);\n\n      case \"MMM\":\n        return oneOf(loc.months(\"short\", true, false), 1);\n\n      case \"MMMM\":\n        return oneOf(loc.months(\"long\", true, false), 1);\n\n      case \"L\":\n        return intUnit(oneOrTwo);\n\n      case \"LL\":\n        return intUnit(two);\n\n      case \"LLL\":\n        return oneOf(loc.months(\"short\", false, false), 1);\n\n      case \"LLLL\":\n        return oneOf(loc.months(\"long\", false, false), 1);\n      // dates\n\n      case \"d\":\n        return intUnit(oneOrTwo);\n\n      case \"dd\":\n        return intUnit(two);\n      // ordinals\n\n      case \"o\":\n        return intUnit(oneToThree);\n\n      case \"ooo\":\n        return intUnit(three);\n      // time\n\n      case \"HH\":\n        return intUnit(two);\n\n      case \"H\":\n        return intUnit(oneOrTwo);\n\n      case \"hh\":\n        return intUnit(two);\n\n      case \"h\":\n        return intUnit(oneOrTwo);\n\n      case \"mm\":\n        return intUnit(two);\n\n      case \"m\":\n        return intUnit(oneOrTwo);\n\n      case \"q\":\n        return intUnit(oneOrTwo);\n\n      case \"qq\":\n        return intUnit(two);\n\n      case \"s\":\n        return intUnit(oneOrTwo);\n\n      case \"ss\":\n        return intUnit(two);\n\n      case \"S\":\n        return intUnit(oneToThree);\n\n      case \"SSS\":\n        return intUnit(three);\n\n      case \"u\":\n        return simple(oneToNine);\n      // meridiem\n\n      case \"a\":\n        return oneOf(loc.meridiems(), 0);\n      // weekYear (k)\n\n      case \"kkkk\":\n        return intUnit(four);\n\n      case \"kk\":\n        return intUnit(twoToFour, untruncateYear);\n      // weekNumber (W)\n\n      case \"W\":\n        return intUnit(oneOrTwo);\n\n      case \"WW\":\n        return intUnit(two);\n      // weekdays\n\n      case \"E\":\n      case \"c\":\n        return intUnit(one);\n\n      case \"EEE\":\n        return oneOf(loc.weekdays(\"short\", false, false), 1);\n\n      case \"EEEE\":\n        return oneOf(loc.weekdays(\"long\", false, false), 1);\n\n      case \"ccc\":\n        return oneOf(loc.weekdays(\"short\", true, false), 1);\n\n      case \"cccc\":\n        return oneOf(loc.weekdays(\"long\", true, false), 1);\n      // offset/zone\n\n      case \"Z\":\n      case \"ZZ\":\n        return offset(new RegExp(\"([+-]\" + oneOrTwo.source + \")(?::(\" + two.source + \"))?\"), 2);\n\n      case \"ZZZ\":\n        return offset(new RegExp(\"([+-]\" + oneOrTwo.source + \")(\" + two.source + \")?\"), 2);\n      // we don't support ZZZZ (PST) or ZZZZZ (Pacific Standard Time) in parsing\n      // because we don't have any way to figure out what they are\n\n      case \"z\":\n        return simple(/[a-z_+-/]{1,256}?/i);\n\n      default:\n        return literal(t);\n    }\n  };\n\n  var unit = unitate(token) || {\n    invalidReason: MISSING_FTP\n  };\n  unit.token = token;\n  return unit;\n}\n\nvar partTypeStyleToTokenVal = {\n  year: {\n    \"2-digit\": \"yy\",\n    numeric: \"yyyyy\"\n  },\n  month: {\n    numeric: \"M\",\n    \"2-digit\": \"MM\",\n    short: \"MMM\",\n    long: \"MMMM\"\n  },\n  day: {\n    numeric: \"d\",\n    \"2-digit\": \"dd\"\n  },\n  weekday: {\n    short: \"EEE\",\n    long: \"EEEE\"\n  },\n  dayperiod: \"a\",\n  dayPeriod: \"a\",\n  hour: {\n    numeric: \"h\",\n    \"2-digit\": \"hh\"\n  },\n  minute: {\n    numeric: \"m\",\n    \"2-digit\": \"mm\"\n  },\n  second: {\n    numeric: \"s\",\n    \"2-digit\": \"ss\"\n  }\n};\n\nfunction tokenForPart(part, locale, formatOpts) {\n  var type = part.type,\n      value = part.value;\n\n  if (type === \"literal\") {\n    return {\n      literal: true,\n      val: value\n    };\n  }\n\n  var style = formatOpts[type];\n  var val = partTypeStyleToTokenVal[type];\n\n  if (typeof val === \"object\") {\n    val = val[style];\n  }\n\n  if (val) {\n    return {\n      literal: false,\n      val: val\n    };\n  }\n\n  return undefined;\n}\n\nfunction buildRegex(units) {\n  var re = units.map(function (u) {\n    return u.regex;\n  }).reduce(function (f, r) {\n    return f + \"(\" + r.source + \")\";\n  }, \"\");\n  return [\"^\" + re + \"$\", units];\n}\n\nfunction match(input, regex, handlers) {\n  var matches = input.match(regex);\n\n  if (matches) {\n    var all = {};\n    var matchIndex = 1;\n\n    for (var i in handlers) {\n      if (hasOwnProperty(handlers, i)) {\n        var h = handlers[i],\n            groups = h.groups ? h.groups + 1 : 1;\n\n        if (!h.literal && h.token) {\n          all[h.token.val[0]] = h.deser(matches.slice(matchIndex, matchIndex + groups));\n        }\n\n        matchIndex += groups;\n      }\n    }\n\n    return [matches, all];\n  } else {\n    return [matches, {}];\n  }\n}\n\nfunction dateTimeFromMatches(matches) {\n  var toField = function toField(token) {\n    switch (token) {\n      case \"S\":\n        return \"millisecond\";\n\n      case \"s\":\n        return \"second\";\n\n      case \"m\":\n        return \"minute\";\n\n      case \"h\":\n      case \"H\":\n        return \"hour\";\n\n      case \"d\":\n        return \"day\";\n\n      case \"o\":\n        return \"ordinal\";\n\n      case \"L\":\n      case \"M\":\n        return \"month\";\n\n      case \"y\":\n        return \"year\";\n\n      case \"E\":\n      case \"c\":\n        return \"weekday\";\n\n      case \"W\":\n        return \"weekNumber\";\n\n      case \"k\":\n        return \"weekYear\";\n\n      case \"q\":\n        return \"quarter\";\n\n      default:\n        return null;\n    }\n  };\n\n  var zone;\n\n  if (!isUndefined(matches.Z)) {\n    zone = new FixedOffsetZone(matches.Z);\n  } else if (!isUndefined(matches.z)) {\n    zone = IANAZone.create(matches.z);\n  } else {\n    zone = null;\n  }\n\n  if (!isUndefined(matches.q)) {\n    matches.M = (matches.q - 1) * 3 + 1;\n  }\n\n  if (!isUndefined(matches.h)) {\n    if (matches.h < 12 && matches.a === 1) {\n      matches.h += 12;\n    } else if (matches.h === 12 && matches.a === 0) {\n      matches.h = 0;\n    }\n  }\n\n  if (matches.G === 0 && matches.y) {\n    matches.y = -matches.y;\n  }\n\n  if (!isUndefined(matches.u)) {\n    matches.S = parseMillis(matches.u);\n  }\n\n  var vals = Object.keys(matches).reduce(function (r, k) {\n    var f = toField(k);\n\n    if (f) {\n      r[f] = matches[k];\n    }\n\n    return r;\n  }, {});\n  return [vals, zone];\n}\n\nvar dummyDateTimeCache = null;\n\nfunction getDummyDateTime() {\n  if (!dummyDateTimeCache) {\n    dummyDateTimeCache = DateTime.fromMillis(1555555555555);\n  }\n\n  return dummyDateTimeCache;\n}\n\nfunction maybeExpandMacroToken(token, locale) {\n  if (token.literal) {\n    return token;\n  }\n\n  var formatOpts = Formatter.macroTokenToFormatOpts(token.val);\n\n  if (!formatOpts) {\n    return token;\n  }\n\n  var formatter = Formatter.create(locale, formatOpts);\n  var parts = formatter.formatDateTimeParts(getDummyDateTime());\n  var tokens = parts.map(function (p) {\n    return tokenForPart(p, locale, formatOpts);\n  });\n\n  if (tokens.includes(undefined)) {\n    return token;\n  }\n\n  return tokens;\n}\n\nfunction expandMacroTokens(tokens, locale) {\n  var _Array$prototype;\n\n  return (_Array$prototype = Array.prototype).concat.apply(_Array$prototype, tokens.map(function (t) {\n    return maybeExpandMacroToken(t, locale);\n  }));\n}\n/**\n * @private\n */\n\n\nfunction explainFromTokens(locale, input, format) {\n  var tokens = expandMacroTokens(Formatter.parseFormat(format), locale),\n      units = tokens.map(function (t) {\n    return unitForToken(t, locale);\n  }),\n      disqualifyingUnit = units.find(function (t) {\n    return t.invalidReason;\n  });\n\n  if (disqualifyingUnit) {\n    return {\n      input: input,\n      tokens: tokens,\n      invalidReason: disqualifyingUnit.invalidReason\n    };\n  } else {\n    var _buildRegex = buildRegex(units),\n        regexString = _buildRegex[0],\n        handlers = _buildRegex[1],\n        regex = RegExp(regexString, \"i\"),\n        _match = match(input, regex, handlers),\n        rawMatches = _match[0],\n        matches = _match[1],\n        _ref6 = matches ? dateTimeFromMatches(matches) : [null, null],\n        result = _ref6[0],\n        zone = _ref6[1];\n\n    if (hasOwnProperty(matches, \"a\") && hasOwnProperty(matches, \"H\")) {\n      throw new ConflictingSpecificationError(\"Can't include meridiem when specifying 24-hour format\");\n    }\n\n    return {\n      input: input,\n      tokens: tokens,\n      regex: regex,\n      rawMatches: rawMatches,\n      matches: matches,\n      result: result,\n      zone: zone\n    };\n  }\n}\nfunction parseFromTokens(locale, input, format) {\n  var _explainFromTokens = explainFromTokens(locale, input, format),\n      result = _explainFromTokens.result,\n      zone = _explainFromTokens.zone,\n      invalidReason = _explainFromTokens.invalidReason;\n\n  return [result, zone, invalidReason];\n}\n\nvar nonLeapLadder = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334],\n    leapLadder = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335];\n\nfunction unitOutOfRange(unit, value) {\n  return new Invalid(\"unit out of range\", \"you specified \" + value + \" (of type \" + typeof value + \") as a \" + unit + \", which is invalid\");\n}\n\nfunction dayOfWeek(year, month, day) {\n  var js = new Date(Date.UTC(year, month - 1, day)).getUTCDay();\n  return js === 0 ? 7 : js;\n}\n\nfunction computeOrdinal(year, month, day) {\n  return day + (isLeapYear(year) ? leapLadder : nonLeapLadder)[month - 1];\n}\n\nfunction uncomputeOrdinal(year, ordinal) {\n  var table = isLeapYear(year) ? leapLadder : nonLeapLadder,\n      month0 = table.findIndex(function (i) {\n    return i < ordinal;\n  }),\n      day = ordinal - table[month0];\n  return {\n    month: month0 + 1,\n    day: day\n  };\n}\n/**\n * @private\n */\n\n\nfunction gregorianToWeek(gregObj) {\n  var year = gregObj.year,\n      month = gregObj.month,\n      day = gregObj.day,\n      ordinal = computeOrdinal(year, month, day),\n      weekday = dayOfWeek(year, month, day);\n  var weekNumber = Math.floor((ordinal - weekday + 10) / 7),\n      weekYear;\n\n  if (weekNumber < 1) {\n    weekYear = year - 1;\n    weekNumber = weeksInWeekYear(weekYear);\n  } else if (weekNumber > weeksInWeekYear(year)) {\n    weekYear = year + 1;\n    weekNumber = 1;\n  } else {\n    weekYear = year;\n  }\n\n  return Object.assign({\n    weekYear: weekYear,\n    weekNumber: weekNumber,\n    weekday: weekday\n  }, timeObject(gregObj));\n}\nfunction weekToGregorian(weekData) {\n  var weekYear = weekData.weekYear,\n      weekNumber = weekData.weekNumber,\n      weekday = weekData.weekday,\n      weekdayOfJan4 = dayOfWeek(weekYear, 1, 4),\n      yearInDays = daysInYear(weekYear);\n  var ordinal = weekNumber * 7 + weekday - weekdayOfJan4 - 3,\n      year;\n\n  if (ordinal < 1) {\n    year = weekYear - 1;\n    ordinal += daysInYear(year);\n  } else if (ordinal > yearInDays) {\n    year = weekYear + 1;\n    ordinal -= daysInYear(weekYear);\n  } else {\n    year = weekYear;\n  }\n\n  var _uncomputeOrdinal = uncomputeOrdinal(year, ordinal),\n      month = _uncomputeOrdinal.month,\n      day = _uncomputeOrdinal.day;\n\n  return Object.assign({\n    year: year,\n    month: month,\n    day: day\n  }, timeObject(weekData));\n}\nfunction gregorianToOrdinal(gregData) {\n  var year = gregData.year,\n      month = gregData.month,\n      day = gregData.day,\n      ordinal = computeOrdinal(year, month, day);\n  return Object.assign({\n    year: year,\n    ordinal: ordinal\n  }, timeObject(gregData));\n}\nfunction ordinalToGregorian(ordinalData) {\n  var year = ordinalData.year,\n      ordinal = ordinalData.ordinal,\n      _uncomputeOrdinal2 = uncomputeOrdinal(year, ordinal),\n      month = _uncomputeOrdinal2.month,\n      day = _uncomputeOrdinal2.day;\n\n  return Object.assign({\n    year: year,\n    month: month,\n    day: day\n  }, timeObject(ordinalData));\n}\nfunction hasInvalidWeekData(obj) {\n  var validYear = isInteger(obj.weekYear),\n      validWeek = integerBetween(obj.weekNumber, 1, weeksInWeekYear(obj.weekYear)),\n      validWeekday = integerBetween(obj.weekday, 1, 7);\n\n  if (!validYear) {\n    return unitOutOfRange(\"weekYear\", obj.weekYear);\n  } else if (!validWeek) {\n    return unitOutOfRange(\"week\", obj.week);\n  } else if (!validWeekday) {\n    return unitOutOfRange(\"weekday\", obj.weekday);\n  } else return false;\n}\nfunction hasInvalidOrdinalData(obj) {\n  var validYear = isInteger(obj.year),\n      validOrdinal = integerBetween(obj.ordinal, 1, daysInYear(obj.year));\n\n  if (!validYear) {\n    return unitOutOfRange(\"year\", obj.year);\n  } else if (!validOrdinal) {\n    return unitOutOfRange(\"ordinal\", obj.ordinal);\n  } else return false;\n}\nfunction hasInvalidGregorianData(obj) {\n  var validYear = isInteger(obj.year),\n      validMonth = integerBetween(obj.month, 1, 12),\n      validDay = integerBetween(obj.day, 1, daysInMonth(obj.year, obj.month));\n\n  if (!validYear) {\n    return unitOutOfRange(\"year\", obj.year);\n  } else if (!validMonth) {\n    return unitOutOfRange(\"month\", obj.month);\n  } else if (!validDay) {\n    return unitOutOfRange(\"day\", obj.day);\n  } else return false;\n}\nfunction hasInvalidTimeData(obj) {\n  var hour = obj.hour,\n      minute = obj.minute,\n      second = obj.second,\n      millisecond = obj.millisecond;\n  var validHour = integerBetween(hour, 0, 23) || hour === 24 && minute === 0 && second === 0 && millisecond === 0,\n      validMinute = integerBetween(minute, 0, 59),\n      validSecond = integerBetween(second, 0, 59),\n      validMillisecond = integerBetween(millisecond, 0, 999);\n\n  if (!validHour) {\n    return unitOutOfRange(\"hour\", hour);\n  } else if (!validMinute) {\n    return unitOutOfRange(\"minute\", minute);\n  } else if (!validSecond) {\n    return unitOutOfRange(\"second\", second);\n  } else if (!validMillisecond) {\n    return unitOutOfRange(\"millisecond\", millisecond);\n  } else return false;\n}\n\nvar INVALID$2 = \"Invalid DateTime\";\nvar MAX_DATE = 8.64e15;\n\nfunction unsupportedZone(zone) {\n  return new Invalid(\"unsupported zone\", \"the zone \\\"\" + zone.name + \"\\\" is not supported\");\n} // we cache week data on the DT object and this intermediates the cache\n\n\nfunction possiblyCachedWeekData(dt) {\n  if (dt.weekData === null) {\n    dt.weekData = gregorianToWeek(dt.c);\n  }\n\n  return dt.weekData;\n} // clone really means, \"make a new object with these modifications\". all \"setters\" really use this\n// to create a new object while only changing some of the properties\n\n\nfunction clone$1(inst, alts) {\n  var current = {\n    ts: inst.ts,\n    zone: inst.zone,\n    c: inst.c,\n    o: inst.o,\n    loc: inst.loc,\n    invalid: inst.invalid\n  };\n  return new DateTime(Object.assign({}, current, alts, {\n    old: current\n  }));\n} // find the right offset a given local time. The o input is our guess, which determines which\n// offset we'll pick in ambiguous cases (e.g. there are two 3 AMs b/c Fallback DST)\n\n\nfunction fixOffset(localTS, o, tz) {\n  // Our UTC time is just a guess because our offset is just a guess\n  var utcGuess = localTS - o * 60 * 1000; // Test whether the zone matches the offset for this ts\n\n  var o2 = tz.offset(utcGuess); // If so, offset didn't change and we're done\n\n  if (o === o2) {\n    return [utcGuess, o];\n  } // If not, change the ts by the difference in the offset\n\n\n  utcGuess -= (o2 - o) * 60 * 1000; // If that gives us the local time we want, we're done\n\n  var o3 = tz.offset(utcGuess);\n\n  if (o2 === o3) {\n    return [utcGuess, o2];\n  } // If it's different, we're in a hole time. The offset has changed, but the we don't adjust the time\n\n\n  return [localTS - Math.min(o2, o3) * 60 * 1000, Math.max(o2, o3)];\n} // convert an epoch timestamp into a calendar object with the given offset\n\n\nfunction tsToObj(ts, offset) {\n  ts += offset * 60 * 1000;\n  var d = new Date(ts);\n  return {\n    year: d.getUTCFullYear(),\n    month: d.getUTCMonth() + 1,\n    day: d.getUTCDate(),\n    hour: d.getUTCHours(),\n    minute: d.getUTCMinutes(),\n    second: d.getUTCSeconds(),\n    millisecond: d.getUTCMilliseconds()\n  };\n} // convert a calendar object to a epoch timestamp\n\n\nfunction objToTS(obj, offset, zone) {\n  return fixOffset(objToLocalTS(obj), offset, zone);\n} // create a new DT instance by adding a duration, adjusting for DSTs\n\n\nfunction adjustTime(inst, dur) {\n  var oPre = inst.o,\n      year = inst.c.year + Math.trunc(dur.years),\n      month = inst.c.month + Math.trunc(dur.months) + Math.trunc(dur.quarters) * 3,\n      c = Object.assign({}, inst.c, {\n    year: year,\n    month: month,\n    day: Math.min(inst.c.day, daysInMonth(year, month)) + Math.trunc(dur.days) + Math.trunc(dur.weeks) * 7\n  }),\n      millisToAdd = Duration.fromObject({\n    years: dur.years - Math.trunc(dur.years),\n    quarters: dur.quarters - Math.trunc(dur.quarters),\n    months: dur.months - Math.trunc(dur.months),\n    weeks: dur.weeks - Math.trunc(dur.weeks),\n    days: dur.days - Math.trunc(dur.days),\n    hours: dur.hours,\n    minutes: dur.minutes,\n    seconds: dur.seconds,\n    milliseconds: dur.milliseconds\n  }).as(\"milliseconds\"),\n      localTS = objToLocalTS(c);\n\n  var _fixOffset = fixOffset(localTS, oPre, inst.zone),\n      ts = _fixOffset[0],\n      o = _fixOffset[1];\n\n  if (millisToAdd !== 0) {\n    ts += millisToAdd; // that could have changed the offset by going over a DST, but we want to keep the ts the same\n\n    o = inst.zone.offset(ts);\n  }\n\n  return {\n    ts: ts,\n    o: o\n  };\n} // helper useful in turning the results of parsing into real dates\n// by handling the zone options\n\n\nfunction parseDataToDateTime(parsed, parsedZone, opts, format, text) {\n  var setZone = opts.setZone,\n      zone = opts.zone;\n\n  if (parsed && Object.keys(parsed).length !== 0) {\n    var interpretationZone = parsedZone || zone,\n        inst = DateTime.fromObject(Object.assign(parsed, opts, {\n      zone: interpretationZone,\n      // setZone is a valid option in the calling methods, but not in fromObject\n      setZone: undefined\n    }));\n    return setZone ? inst : inst.setZone(zone);\n  } else {\n    return DateTime.invalid(new Invalid(\"unparsable\", \"the input \\\"\" + text + \"\\\" can't be parsed as \" + format));\n  }\n} // if you want to output a technical format (e.g. RFC 2822), this helper\n// helps handle the details\n\n\nfunction toTechFormat(dt, format, allowZ) {\n  if (allowZ === void 0) {\n    allowZ = true;\n  }\n\n  return dt.isValid ? Formatter.create(Locale.create(\"en-US\"), {\n    allowZ: allowZ,\n    forceSimple: true\n  }).formatDateTimeFromString(dt, format) : null;\n} // technical time formats (e.g. the time part of ISO 8601), take some options\n// and this commonizes their handling\n\n\nfunction toTechTimeFormat(dt, _ref) {\n  var _ref$suppressSeconds = _ref.suppressSeconds,\n      suppressSeconds = _ref$suppressSeconds === void 0 ? false : _ref$suppressSeconds,\n      _ref$suppressMillisec = _ref.suppressMilliseconds,\n      suppressMilliseconds = _ref$suppressMillisec === void 0 ? false : _ref$suppressMillisec,\n      includeOffset = _ref.includeOffset,\n      _ref$includePrefix = _ref.includePrefix,\n      includePrefix = _ref$includePrefix === void 0 ? false : _ref$includePrefix,\n      _ref$includeZone = _ref.includeZone,\n      includeZone = _ref$includeZone === void 0 ? false : _ref$includeZone,\n      _ref$spaceZone = _ref.spaceZone,\n      spaceZone = _ref$spaceZone === void 0 ? false : _ref$spaceZone,\n      _ref$format = _ref.format,\n      format = _ref$format === void 0 ? \"extended\" : _ref$format;\n  var fmt = format === \"basic\" ? \"HHmm\" : \"HH:mm\";\n\n  if (!suppressSeconds || dt.second !== 0 || dt.millisecond !== 0) {\n    fmt += format === \"basic\" ? \"ss\" : \":ss\";\n\n    if (!suppressMilliseconds || dt.millisecond !== 0) {\n      fmt += \".SSS\";\n    }\n  }\n\n  if ((includeZone || includeOffset) && spaceZone) {\n    fmt += \" \";\n  }\n\n  if (includeZone) {\n    fmt += \"z\";\n  } else if (includeOffset) {\n    fmt += format === \"basic\" ? \"ZZZ\" : \"ZZ\";\n  }\n\n  var str = toTechFormat(dt, fmt);\n\n  if (includePrefix) {\n    str = \"T\" + str;\n  }\n\n  return str;\n} // defaults for unspecified units in the supported calendars\n\n\nvar defaultUnitValues = {\n  month: 1,\n  day: 1,\n  hour: 0,\n  minute: 0,\n  second: 0,\n  millisecond: 0\n},\n    defaultWeekUnitValues = {\n  weekNumber: 1,\n  weekday: 1,\n  hour: 0,\n  minute: 0,\n  second: 0,\n  millisecond: 0\n},\n    defaultOrdinalUnitValues = {\n  ordinal: 1,\n  hour: 0,\n  minute: 0,\n  second: 0,\n  millisecond: 0\n}; // Units in the supported calendars, sorted by bigness\n\nvar orderedUnits$1 = [\"year\", \"month\", \"day\", \"hour\", \"minute\", \"second\", \"millisecond\"],\n    orderedWeekUnits = [\"weekYear\", \"weekNumber\", \"weekday\", \"hour\", \"minute\", \"second\", \"millisecond\"],\n    orderedOrdinalUnits = [\"year\", \"ordinal\", \"hour\", \"minute\", \"second\", \"millisecond\"]; // standardize case and plurality in units\n\nfunction normalizeUnit(unit) {\n  var normalized = {\n    year: \"year\",\n    years: \"year\",\n    month: \"month\",\n    months: \"month\",\n    day: \"day\",\n    days: \"day\",\n    hour: \"hour\",\n    hours: \"hour\",\n    minute: \"minute\",\n    minutes: \"minute\",\n    quarter: \"quarter\",\n    quarters: \"quarter\",\n    second: \"second\",\n    seconds: \"second\",\n    millisecond: \"millisecond\",\n    milliseconds: \"millisecond\",\n    weekday: \"weekday\",\n    weekdays: \"weekday\",\n    weeknumber: \"weekNumber\",\n    weeksnumber: \"weekNumber\",\n    weeknumbers: \"weekNumber\",\n    weekyear: \"weekYear\",\n    weekyears: \"weekYear\",\n    ordinal: \"ordinal\"\n  }[unit.toLowerCase()];\n  if (!normalized) throw new InvalidUnitError(unit);\n  return normalized;\n} // this is a dumbed down version of fromObject() that runs about 60% faster\n// but doesn't do any validation, makes a bunch of assumptions about what units\n// are present, and so on.\n\n\nfunction quickDT(obj, zone) {\n  // assume we have the higher-order units\n  for (var _iterator = _createForOfIteratorHelperLoose(orderedUnits$1), _step; !(_step = _iterator()).done;) {\n    var u = _step.value;\n\n    if (isUndefined(obj[u])) {\n      obj[u] = defaultUnitValues[u];\n    }\n  }\n\n  var invalid = hasInvalidGregorianData(obj) || hasInvalidTimeData(obj);\n\n  if (invalid) {\n    return DateTime.invalid(invalid);\n  }\n\n  var tsNow = Settings.now(),\n      offsetProvis = zone.offset(tsNow),\n      _objToTS = objToTS(obj, offsetProvis, zone),\n      ts = _objToTS[0],\n      o = _objToTS[1];\n\n  return new DateTime({\n    ts: ts,\n    zone: zone,\n    o: o\n  });\n}\n\nfunction diffRelative(start, end, opts) {\n  var round = isUndefined(opts.round) ? true : opts.round,\n      format = function format(c, unit) {\n    c = roundTo(c, round || opts.calendary ? 0 : 2, true);\n    var formatter = end.loc.clone(opts).relFormatter(opts);\n    return formatter.format(c, unit);\n  },\n      differ = function differ(unit) {\n    if (opts.calendary) {\n      if (!end.hasSame(start, unit)) {\n        return end.startOf(unit).diff(start.startOf(unit), unit).get(unit);\n      } else return 0;\n    } else {\n      return end.diff(start, unit).get(unit);\n    }\n  };\n\n  if (opts.unit) {\n    return format(differ(opts.unit), opts.unit);\n  }\n\n  for (var _iterator2 = _createForOfIteratorHelperLoose(opts.units), _step2; !(_step2 = _iterator2()).done;) {\n    var unit = _step2.value;\n    var count = differ(unit);\n\n    if (Math.abs(count) >= 1) {\n      return format(count, unit);\n    }\n  }\n\n  return format(start > end ? -0 : 0, opts.units[opts.units.length - 1]);\n}\n/**\n * A DateTime is an immutable data structure representing a specific date and time and accompanying methods. It contains class and instance methods for creating, parsing, interrogating, transforming, and formatting them.\n *\n * A DateTime comprises of:\n * * A timestamp. Each DateTime instance refers to a specific millisecond of the Unix epoch.\n * * A time zone. Each instance is considered in the context of a specific zone (by default the local system's zone).\n * * Configuration properties that effect how output strings are formatted, such as `locale`, `numberingSystem`, and `outputCalendar`.\n *\n * Here is a brief overview of the most commonly used functionality it provides:\n *\n * * **Creation**: To create a DateTime from its components, use one of its factory class methods: {@link local}, {@link utc}, and (most flexibly) {@link fromObject}. To create one from a standard string format, use {@link fromISO}, {@link fromHTTP}, and {@link fromRFC2822}. To create one from a custom string format, use {@link fromFormat}. To create one from a native JS date, use {@link fromJSDate}.\n * * **Gregorian calendar and time**: To examine the Gregorian properties of a DateTime individually (i.e as opposed to collectively through {@link toObject}), use the {@link year}, {@link month},\n * {@link day}, {@link hour}, {@link minute}, {@link second}, {@link millisecond} accessors.\n * * **Week calendar**: For ISO week calendar attributes, see the {@link weekYear}, {@link weekNumber}, and {@link weekday} accessors.\n * * **Configuration** See the {@link locale} and {@link numberingSystem} accessors.\n * * **Transformation**: To transform the DateTime into other DateTimes, use {@link set}, {@link reconfigure}, {@link setZone}, {@link setLocale}, {@link plus}, {@link minus}, {@link endOf}, {@link startOf}, {@link toUTC}, and {@link toLocal}.\n * * **Output**: To convert the DateTime to other representations, use the {@link toRelative}, {@link toRelativeCalendar}, {@link toJSON}, {@link toISO}, {@link toHTTP}, {@link toObject}, {@link toRFC2822}, {@link toString}, {@link toLocaleString}, {@link toFormat}, {@link toMillis} and {@link toJSDate}.\n *\n * There's plenty others documented below. In addition, for more information on subtler topics like internationalization, time zones, alternative calendars, validity, and so on, see the external documentation.\n */\n\n\nvar DateTime = /*#__PURE__*/function () {\n  /**\n   * @access private\n   */\n  function DateTime(config) {\n    var zone = config.zone || Settings.defaultZone;\n    var invalid = config.invalid || (Number.isNaN(config.ts) ? new Invalid(\"invalid input\") : null) || (!zone.isValid ? unsupportedZone(zone) : null);\n    /**\n     * @access private\n     */\n\n    this.ts = isUndefined(config.ts) ? Settings.now() : config.ts;\n    var c = null,\n        o = null;\n\n    if (!invalid) {\n      var unchanged = config.old && config.old.ts === this.ts && config.old.zone.equals(zone);\n\n      if (unchanged) {\n        var _ref2 = [config.old.c, config.old.o];\n        c = _ref2[0];\n        o = _ref2[1];\n      } else {\n        var ot = zone.offset(this.ts);\n        c = tsToObj(this.ts, ot);\n        invalid = Number.isNaN(c.year) ? new Invalid(\"invalid input\") : null;\n        c = invalid ? null : c;\n        o = invalid ? null : ot;\n      }\n    }\n    /**\n     * @access private\n     */\n\n\n    this._zone = zone;\n    /**\n     * @access private\n     */\n\n    this.loc = config.loc || Locale.create();\n    /**\n     * @access private\n     */\n\n    this.invalid = invalid;\n    /**\n     * @access private\n     */\n\n    this.weekData = null;\n    /**\n     * @access private\n     */\n\n    this.c = c;\n    /**\n     * @access private\n     */\n\n    this.o = o;\n    /**\n     * @access private\n     */\n\n    this.isLuxonDateTime = true;\n  } // CONSTRUCT\n\n  /**\n   * Create a DateTime for the current instant, in the system's time zone.\n   *\n   * Use Settings to override these default values if needed.\n   * @example DateTime.now().toISO() //~> now in the ISO format\n   * @return {DateTime}\n   */\n\n\n  DateTime.now = function now() {\n    return new DateTime({});\n  }\n  /**\n   * Create a local DateTime\n   * @param {number} [year] - The calendar year. If omitted (as in, call `local()` with no arguments), the current time will be used\n   * @param {number} [month=1] - The month, 1-indexed\n   * @param {number} [day=1] - The day of the month, 1-indexed\n   * @param {number} [hour=0] - The hour of the day, in 24-hour time\n   * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59\n   * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59\n   * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999\n   * @example DateTime.local()                            //~> now\n   * @example DateTime.local(2017)                        //~> 2017-01-01T00:00:00\n   * @example DateTime.local(2017, 3)                     //~> 2017-03-01T00:00:00\n   * @example DateTime.local(2017, 3, 12)                 //~> 2017-03-12T00:00:00\n   * @example DateTime.local(2017, 3, 12, 5)              //~> 2017-03-12T05:00:00\n   * @example DateTime.local(2017, 3, 12, 5, 45)          //~> 2017-03-12T05:45:00\n   * @example DateTime.local(2017, 3, 12, 5, 45, 10)      //~> 2017-03-12T05:45:10\n   * @example DateTime.local(2017, 3, 12, 5, 45, 10, 765) //~> 2017-03-12T05:45:10.765\n   * @return {DateTime}\n   */\n  ;\n\n  DateTime.local = function local(year, month, day, hour, minute, second, millisecond) {\n    if (isUndefined(year)) {\n      return DateTime.now();\n    } else {\n      return quickDT({\n        year: year,\n        month: month,\n        day: day,\n        hour: hour,\n        minute: minute,\n        second: second,\n        millisecond: millisecond\n      }, Settings.defaultZone);\n    }\n  }\n  /**\n   * Create a DateTime in UTC\n   * @param {number} [year] - The calendar year. If omitted (as in, call `utc()` with no arguments), the current time will be used\n   * @param {number} [month=1] - The month, 1-indexed\n   * @param {number} [day=1] - The day of the month\n   * @param {number} [hour=0] - The hour of the day, in 24-hour time\n   * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59\n   * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59\n   * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999\n   * @example DateTime.utc()                            //~> now\n   * @example DateTime.utc(2017)                        //~> 2017-01-01T00:00:00Z\n   * @example DateTime.utc(2017, 3)                     //~> 2017-03-01T00:00:00Z\n   * @example DateTime.utc(2017, 3, 12)                 //~> 2017-03-12T00:00:00Z\n   * @example DateTime.utc(2017, 3, 12, 5)              //~> 2017-03-12T05:00:00Z\n   * @example DateTime.utc(2017, 3, 12, 5, 45)          //~> 2017-03-12T05:45:00Z\n   * @example DateTime.utc(2017, 3, 12, 5, 45, 10)      //~> 2017-03-12T05:45:10Z\n   * @example DateTime.utc(2017, 3, 12, 5, 45, 10, 765) //~> 2017-03-12T05:45:10.765Z\n   * @return {DateTime}\n   */\n  ;\n\n  DateTime.utc = function utc(year, month, day, hour, minute, second, millisecond) {\n    if (isUndefined(year)) {\n      return new DateTime({\n        ts: Settings.now(),\n        zone: FixedOffsetZone.utcInstance\n      });\n    } else {\n      return quickDT({\n        year: year,\n        month: month,\n        day: day,\n        hour: hour,\n        minute: minute,\n        second: second,\n        millisecond: millisecond\n      }, FixedOffsetZone.utcInstance);\n    }\n  }\n  /**\n   * Create a DateTime from a JavaScript Date object. Uses the default zone.\n   * @param {Date} date - a JavaScript Date object\n   * @param {Object} options - configuration options for the DateTime\n   * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n   * @return {DateTime}\n   */\n  ;\n\n  DateTime.fromJSDate = function fromJSDate(date, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    var ts = isDate(date) ? date.valueOf() : NaN;\n\n    if (Number.isNaN(ts)) {\n      return DateTime.invalid(\"invalid input\");\n    }\n\n    var zoneToUse = normalizeZone(options.zone, Settings.defaultZone);\n\n    if (!zoneToUse.isValid) {\n      return DateTime.invalid(unsupportedZone(zoneToUse));\n    }\n\n    return new DateTime({\n      ts: ts,\n      zone: zoneToUse,\n      loc: Locale.fromObject(options)\n    });\n  }\n  /**\n   * Create a DateTime from a number of milliseconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone.\n   * @param {number} milliseconds - a number of milliseconds since 1970 UTC\n   * @param {Object} options - configuration options for the DateTime\n   * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n   * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n   * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance\n   * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance\n   * @return {DateTime}\n   */\n  ;\n\n  DateTime.fromMillis = function fromMillis(milliseconds, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    if (!isNumber(milliseconds)) {\n      throw new InvalidArgumentError(\"fromMillis requires a numerical input, but received a \" + typeof milliseconds + \" with value \" + milliseconds);\n    } else if (milliseconds < -MAX_DATE || milliseconds > MAX_DATE) {\n      // this isn't perfect because because we can still end up out of range because of additional shifting, but it's a start\n      return DateTime.invalid(\"Timestamp out of range\");\n    } else {\n      return new DateTime({\n        ts: milliseconds,\n        zone: normalizeZone(options.zone, Settings.defaultZone),\n        loc: Locale.fromObject(options)\n      });\n    }\n  }\n  /**\n   * Create a DateTime from a number of seconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone.\n   * @param {number} seconds - a number of seconds since 1970 UTC\n   * @param {Object} options - configuration options for the DateTime\n   * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n   * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n   * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance\n   * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance\n   * @return {DateTime}\n   */\n  ;\n\n  DateTime.fromSeconds = function fromSeconds(seconds, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    if (!isNumber(seconds)) {\n      throw new InvalidArgumentError(\"fromSeconds requires a numerical input\");\n    } else {\n      return new DateTime({\n        ts: seconds * 1000,\n        zone: normalizeZone(options.zone, Settings.defaultZone),\n        loc: Locale.fromObject(options)\n      });\n    }\n  }\n  /**\n   * Create a DateTime from a JavaScript object with keys like 'year' and 'hour' with reasonable defaults.\n   * @param {Object} obj - the object to create the DateTime from\n   * @param {number} obj.year - a year, such as 1987\n   * @param {number} obj.month - a month, 1-12\n   * @param {number} obj.day - a day of the month, 1-31, depending on the month\n   * @param {number} obj.ordinal - day of the year, 1-365 or 366\n   * @param {number} obj.weekYear - an ISO week year\n   * @param {number} obj.weekNumber - an ISO week number, between 1 and 52 or 53, depending on the year\n   * @param {number} obj.weekday - an ISO weekday, 1-7, where 1 is Monday and 7 is Sunday\n   * @param {number} obj.hour - hour of the day, 0-23\n   * @param {number} obj.minute - minute of the hour, 0-59\n   * @param {number} obj.second - second of the minute, 0-59\n   * @param {number} obj.millisecond - millisecond of the second, 0-999\n   * @param {string|Zone} [obj.zone='local'] - interpret the numbers in the context of a particular zone. Can take any value taken as the first argument to setZone()\n   * @param {string} [obj.locale='system's locale'] - a locale to set on the resulting DateTime instance\n   * @param {string} obj.outputCalendar - the output calendar to set on the resulting DateTime instance\n   * @param {string} obj.numberingSystem - the numbering system to set on the resulting DateTime instance\n   * @example DateTime.fromObject({ year: 1982, month: 5, day: 25}).toISODate() //=> '1982-05-25'\n   * @example DateTime.fromObject({ year: 1982 }).toISODate() //=> '1982-01-01'\n   * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }) //~> today at 10:26:06\n   * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6, zone: 'utc' }),\n   * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6, zone: 'local' })\n   * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6, zone: 'America/New_York' })\n   * @example DateTime.fromObject({ weekYear: 2016, weekNumber: 2, weekday: 3 }).toISODate() //=> '2016-01-13'\n   * @return {DateTime}\n   */\n  ;\n\n  DateTime.fromObject = function fromObject(obj) {\n    var zoneToUse = normalizeZone(obj.zone, Settings.defaultZone);\n\n    if (!zoneToUse.isValid) {\n      return DateTime.invalid(unsupportedZone(zoneToUse));\n    }\n\n    var tsNow = Settings.now(),\n        offsetProvis = zoneToUse.offset(tsNow),\n        normalized = normalizeObject(obj, normalizeUnit, [\"zone\", \"locale\", \"outputCalendar\", \"numberingSystem\"]),\n        containsOrdinal = !isUndefined(normalized.ordinal),\n        containsGregorYear = !isUndefined(normalized.year),\n        containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day),\n        containsGregor = containsGregorYear || containsGregorMD,\n        definiteWeekDef = normalized.weekYear || normalized.weekNumber,\n        loc = Locale.fromObject(obj); // cases:\n    // just a weekday -> this week's instance of that weekday, no worries\n    // (gregorian data or ordinal) + (weekYear or weekNumber) -> error\n    // (gregorian month or day) + ordinal -> error\n    // otherwise just use weeks or ordinals or gregorian, depending on what's specified\n\n    if ((containsGregor || containsOrdinal) && definiteWeekDef) {\n      throw new ConflictingSpecificationError(\"Can't mix weekYear/weekNumber units with year/month/day or ordinals\");\n    }\n\n    if (containsGregorMD && containsOrdinal) {\n      throw new ConflictingSpecificationError(\"Can't mix ordinal dates with month/day\");\n    }\n\n    var useWeekData = definiteWeekDef || normalized.weekday && !containsGregor; // configure ourselves to deal with gregorian dates or week stuff\n\n    var units,\n        defaultValues,\n        objNow = tsToObj(tsNow, offsetProvis);\n\n    if (useWeekData) {\n      units = orderedWeekUnits;\n      defaultValues = defaultWeekUnitValues;\n      objNow = gregorianToWeek(objNow);\n    } else if (containsOrdinal) {\n      units = orderedOrdinalUnits;\n      defaultValues = defaultOrdinalUnitValues;\n      objNow = gregorianToOrdinal(objNow);\n    } else {\n      units = orderedUnits$1;\n      defaultValues = defaultUnitValues;\n    } // set default values for missing stuff\n\n\n    var foundFirst = false;\n\n    for (var _iterator3 = _createForOfIteratorHelperLoose(units), _step3; !(_step3 = _iterator3()).done;) {\n      var u = _step3.value;\n      var v = normalized[u];\n\n      if (!isUndefined(v)) {\n        foundFirst = true;\n      } else if (foundFirst) {\n        normalized[u] = defaultValues[u];\n      } else {\n        normalized[u] = objNow[u];\n      }\n    } // make sure the values we have are in range\n\n\n    var higherOrderInvalid = useWeekData ? hasInvalidWeekData(normalized) : containsOrdinal ? hasInvalidOrdinalData(normalized) : hasInvalidGregorianData(normalized),\n        invalid = higherOrderInvalid || hasInvalidTimeData(normalized);\n\n    if (invalid) {\n      return DateTime.invalid(invalid);\n    } // compute the actual time\n\n\n    var gregorian = useWeekData ? weekToGregorian(normalized) : containsOrdinal ? ordinalToGregorian(normalized) : normalized,\n        _objToTS2 = objToTS(gregorian, offsetProvis, zoneToUse),\n        tsFinal = _objToTS2[0],\n        offsetFinal = _objToTS2[1],\n        inst = new DateTime({\n      ts: tsFinal,\n      zone: zoneToUse,\n      o: offsetFinal,\n      loc: loc\n    }); // gregorian data + weekday serves only to validate\n\n\n    if (normalized.weekday && containsGregor && obj.weekday !== inst.weekday) {\n      return DateTime.invalid(\"mismatched weekday\", \"you can't specify both a weekday of \" + normalized.weekday + \" and a date of \" + inst.toISO());\n    }\n\n    return inst;\n  }\n  /**\n   * Create a DateTime from an ISO 8601 string\n   * @param {string} text - the ISO string\n   * @param {Object} opts - options to affect the creation\n   * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the time to this zone\n   * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one\n   * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n   * @param {string} [opts.outputCalendar] - the output calendar to set on the resulting DateTime instance\n   * @param {string} [opts.numberingSystem] - the numbering system to set on the resulting DateTime instance\n   * @example DateTime.fromISO('2016-05-25T09:08:34.123')\n   * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00')\n   * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00', {setZone: true})\n   * @example DateTime.fromISO('2016-05-25T09:08:34.123', {zone: 'utc'})\n   * @example DateTime.fromISO('2016-W05-4')\n   * @return {DateTime}\n   */\n  ;\n\n  DateTime.fromISO = function fromISO(text, opts) {\n    if (opts === void 0) {\n      opts = {};\n    }\n\n    var _parseISODate = parseISODate(text),\n        vals = _parseISODate[0],\n        parsedZone = _parseISODate[1];\n\n    return parseDataToDateTime(vals, parsedZone, opts, \"ISO 8601\", text);\n  }\n  /**\n   * Create a DateTime from an RFC 2822 string\n   * @param {string} text - the RFC 2822 string\n   * @param {Object} opts - options to affect the creation\n   * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since the offset is always specified in the string itself, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in.\n   * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one\n   * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n   * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n   * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n   * @example DateTime.fromRFC2822('25 Nov 2016 13:23:12 GMT')\n   * @example DateTime.fromRFC2822('Fri, 25 Nov 2016 13:23:12 +0600')\n   * @example DateTime.fromRFC2822('25 Nov 2016 13:23 Z')\n   * @return {DateTime}\n   */\n  ;\n\n  DateTime.fromRFC2822 = function fromRFC2822(text, opts) {\n    if (opts === void 0) {\n      opts = {};\n    }\n\n    var _parseRFC2822Date = parseRFC2822Date(text),\n        vals = _parseRFC2822Date[0],\n        parsedZone = _parseRFC2822Date[1];\n\n    return parseDataToDateTime(vals, parsedZone, opts, \"RFC 2822\", text);\n  }\n  /**\n   * Create a DateTime from an HTTP header date\n   * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1\n   * @param {string} text - the HTTP header date\n   * @param {Object} opts - options to affect the creation\n   * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since HTTP dates are always in UTC, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in.\n   * @param {boolean} [opts.setZone=false] - override the zone with the fixed-offset zone specified in the string. For HTTP dates, this is always UTC, so this option is equivalent to setting the `zone` option to 'utc', but this option is included for consistency with similar methods.\n   * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n   * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n   * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n   * @example DateTime.fromHTTP('Sun, 06 Nov 1994 08:49:37 GMT')\n   * @example DateTime.fromHTTP('Sunday, 06-Nov-94 08:49:37 GMT')\n   * @example DateTime.fromHTTP('Sun Nov  6 08:49:37 1994')\n   * @return {DateTime}\n   */\n  ;\n\n  DateTime.fromHTTP = function fromHTTP(text, opts) {\n    if (opts === void 0) {\n      opts = {};\n    }\n\n    var _parseHTTPDate = parseHTTPDate(text),\n        vals = _parseHTTPDate[0],\n        parsedZone = _parseHTTPDate[1];\n\n    return parseDataToDateTime(vals, parsedZone, opts, \"HTTP\", opts);\n  }\n  /**\n   * Create a DateTime from an input string and format string.\n   * Defaults to en-US if no locale has been specified, regardless of the system's locale.\n   * @see https://moment.github.io/luxon/docs/manual/parsing.html#table-of-tokens\n   * @param {string} text - the string to parse\n   * @param {string} fmt - the format the string is expected to be in (see the link below for the formats)\n   * @param {Object} opts - options to affect the creation\n   * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone\n   * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one\n   * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale\n   * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system\n   * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n   * @return {DateTime}\n   */\n  ;\n\n  DateTime.fromFormat = function fromFormat(text, fmt, opts) {\n    if (opts === void 0) {\n      opts = {};\n    }\n\n    if (isUndefined(text) || isUndefined(fmt)) {\n      throw new InvalidArgumentError(\"fromFormat requires an input string and a format\");\n    }\n\n    var _opts = opts,\n        _opts$locale = _opts.locale,\n        locale = _opts$locale === void 0 ? null : _opts$locale,\n        _opts$numberingSystem = _opts.numberingSystem,\n        numberingSystem = _opts$numberingSystem === void 0 ? null : _opts$numberingSystem,\n        localeToUse = Locale.fromOpts({\n      locale: locale,\n      numberingSystem: numberingSystem,\n      defaultToEN: true\n    }),\n        _parseFromTokens = parseFromTokens(localeToUse, text, fmt),\n        vals = _parseFromTokens[0],\n        parsedZone = _parseFromTokens[1],\n        invalid = _parseFromTokens[2];\n\n    if (invalid) {\n      return DateTime.invalid(invalid);\n    } else {\n      return parseDataToDateTime(vals, parsedZone, opts, \"format \" + fmt, text);\n    }\n  }\n  /**\n   * @deprecated use fromFormat instead\n   */\n  ;\n\n  DateTime.fromString = function fromString(text, fmt, opts) {\n    if (opts === void 0) {\n      opts = {};\n    }\n\n    return DateTime.fromFormat(text, fmt, opts);\n  }\n  /**\n   * Create a DateTime from a SQL date, time, or datetime\n   * Defaults to en-US if no locale has been specified, regardless of the system's locale\n   * @param {string} text - the string to parse\n   * @param {Object} opts - options to affect the creation\n   * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone\n   * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one\n   * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale\n   * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system\n   * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n   * @example DateTime.fromSQL('2017-05-15')\n   * @example DateTime.fromSQL('2017-05-15 09:12:34')\n   * @example DateTime.fromSQL('2017-05-15 09:12:34.342')\n   * @example DateTime.fromSQL('2017-05-15 09:12:34.342+06:00')\n   * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles')\n   * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles', { setZone: true })\n   * @example DateTime.fromSQL('2017-05-15 09:12:34.342', { zone: 'America/Los_Angeles' })\n   * @example DateTime.fromSQL('09:12:34.342')\n   * @return {DateTime}\n   */\n  ;\n\n  DateTime.fromSQL = function fromSQL(text, opts) {\n    if (opts === void 0) {\n      opts = {};\n    }\n\n    var _parseSQL = parseSQL(text),\n        vals = _parseSQL[0],\n        parsedZone = _parseSQL[1];\n\n    return parseDataToDateTime(vals, parsedZone, opts, \"SQL\", text);\n  }\n  /**\n   * Create an invalid DateTime.\n   * @param {string} reason - simple string of why this DateTime is invalid. Should not contain parameters or anything else data-dependent\n   * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n   * @return {DateTime}\n   */\n  ;\n\n  DateTime.invalid = function invalid(reason, explanation) {\n    if (explanation === void 0) {\n      explanation = null;\n    }\n\n    if (!reason) {\n      throw new InvalidArgumentError(\"need to specify a reason the DateTime is invalid\");\n    }\n\n    var invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n    if (Settings.throwOnInvalid) {\n      throw new InvalidDateTimeError(invalid);\n    } else {\n      return new DateTime({\n        invalid: invalid\n      });\n    }\n  }\n  /**\n   * Check if an object is a DateTime. Works across context boundaries\n   * @param {object} o\n   * @return {boolean}\n   */\n  ;\n\n  DateTime.isDateTime = function isDateTime(o) {\n    return o && o.isLuxonDateTime || false;\n  } // INFO\n\n  /**\n   * Get the value of unit.\n   * @param {string} unit - a unit such as 'minute' or 'day'\n   * @example DateTime.local(2017, 7, 4).get('month'); //=> 7\n   * @example DateTime.local(2017, 7, 4).get('day'); //=> 4\n   * @return {number}\n   */\n  ;\n\n  var _proto = DateTime.prototype;\n\n  _proto.get = function get(unit) {\n    return this[unit];\n  }\n  /**\n   * Returns whether the DateTime is valid. Invalid DateTimes occur when:\n   * * The DateTime was created from invalid calendar information, such as the 13th month or February 30\n   * * The DateTime was created by an operation on another invalid date\n   * @type {boolean}\n   */\n  ;\n\n  /**\n   * Returns the resolved Intl options for this DateTime.\n   * This is useful in understanding the behavior of formatting methods\n   * @param {Object} opts - the same options as toLocaleString\n   * @return {Object}\n   */\n  _proto.resolvedLocaleOpts = function resolvedLocaleOpts(opts) {\n    if (opts === void 0) {\n      opts = {};\n    }\n\n    var _Formatter$create$res = Formatter.create(this.loc.clone(opts), opts).resolvedOptions(this),\n        locale = _Formatter$create$res.locale,\n        numberingSystem = _Formatter$create$res.numberingSystem,\n        calendar = _Formatter$create$res.calendar;\n\n    return {\n      locale: locale,\n      numberingSystem: numberingSystem,\n      outputCalendar: calendar\n    };\n  } // TRANSFORM\n\n  /**\n   * \"Set\" the DateTime's zone to UTC. Returns a newly-constructed DateTime.\n   *\n   * Equivalent to {@link setZone}('utc')\n   * @param {number} [offset=0] - optionally, an offset from UTC in minutes\n   * @param {Object} [opts={}] - options to pass to `setZone()`\n   * @return {DateTime}\n   */\n  ;\n\n  _proto.toUTC = function toUTC(offset, opts) {\n    if (offset === void 0) {\n      offset = 0;\n    }\n\n    if (opts === void 0) {\n      opts = {};\n    }\n\n    return this.setZone(FixedOffsetZone.instance(offset), opts);\n  }\n  /**\n   * \"Set\" the DateTime's zone to the host's local zone. Returns a newly-constructed DateTime.\n   *\n   * Equivalent to `setZone('local')`\n   * @return {DateTime}\n   */\n  ;\n\n  _proto.toLocal = function toLocal() {\n    return this.setZone(Settings.defaultZone);\n  }\n  /**\n   * \"Set\" the DateTime's zone to specified zone. Returns a newly-constructed DateTime.\n   *\n   * By default, the setter keeps the underlying time the same (as in, the same timestamp), but the new instance will report different local times and consider DSTs when making computations, as with {@link plus}. You may wish to use {@link toLocal} and {@link toUTC} which provide simple convenience wrappers for commonly used zones.\n   * @param {string|Zone} [zone='local'] - a zone identifier. As a string, that can be any IANA zone supported by the host environment, or a fixed-offset name of the form 'UTC+3', or the strings 'local' or 'utc'. You may also supply an instance of a {@link Zone} class.\n   * @param {Object} opts - options\n   * @param {boolean} [opts.keepLocalTime=false] - If true, adjust the underlying time so that the local time stays the same, but in the target zone. You should rarely need this.\n   * @return {DateTime}\n   */\n  ;\n\n  _proto.setZone = function setZone(zone, _temp) {\n    var _ref3 = _temp === void 0 ? {} : _temp,\n        _ref3$keepLocalTime = _ref3.keepLocalTime,\n        keepLocalTime = _ref3$keepLocalTime === void 0 ? false : _ref3$keepLocalTime,\n        _ref3$keepCalendarTim = _ref3.keepCalendarTime,\n        keepCalendarTime = _ref3$keepCalendarTim === void 0 ? false : _ref3$keepCalendarTim;\n\n    zone = normalizeZone(zone, Settings.defaultZone);\n\n    if (zone.equals(this.zone)) {\n      return this;\n    } else if (!zone.isValid) {\n      return DateTime.invalid(unsupportedZone(zone));\n    } else {\n      var newTS = this.ts;\n\n      if (keepLocalTime || keepCalendarTime) {\n        var offsetGuess = zone.offset(this.ts);\n        var asObj = this.toObject();\n\n        var _objToTS3 = objToTS(asObj, offsetGuess, zone);\n\n        newTS = _objToTS3[0];\n      }\n\n      return clone$1(this, {\n        ts: newTS,\n        zone: zone\n      });\n    }\n  }\n  /**\n   * \"Set\" the locale, numberingSystem, or outputCalendar. Returns a newly-constructed DateTime.\n   * @param {Object} properties - the properties to set\n   * @example DateTime.local(2017, 5, 25).reconfigure({ locale: 'en-GB' })\n   * @return {DateTime}\n   */\n  ;\n\n  _proto.reconfigure = function reconfigure(_temp2) {\n    var _ref4 = _temp2 === void 0 ? {} : _temp2,\n        locale = _ref4.locale,\n        numberingSystem = _ref4.numberingSystem,\n        outputCalendar = _ref4.outputCalendar;\n\n    var loc = this.loc.clone({\n      locale: locale,\n      numberingSystem: numberingSystem,\n      outputCalendar: outputCalendar\n    });\n    return clone$1(this, {\n      loc: loc\n    });\n  }\n  /**\n   * \"Set\" the locale. Returns a newly-constructed DateTime.\n   * Just a convenient alias for reconfigure({ locale })\n   * @example DateTime.local(2017, 5, 25).setLocale('en-GB')\n   * @return {DateTime}\n   */\n  ;\n\n  _proto.setLocale = function setLocale(locale) {\n    return this.reconfigure({\n      locale: locale\n    });\n  }\n  /**\n   * \"Set\" the values of specified units. Returns a newly-constructed DateTime.\n   * You can only set units with this method; for \"setting\" metadata, see {@link reconfigure} and {@link setZone}.\n   * @param {Object} values - a mapping of units to numbers\n   * @example dt.set({ year: 2017 })\n   * @example dt.set({ hour: 8, minute: 30 })\n   * @example dt.set({ weekday: 5 })\n   * @example dt.set({ year: 2005, ordinal: 234 })\n   * @return {DateTime}\n   */\n  ;\n\n  _proto.set = function set(values) {\n    if (!this.isValid) return this;\n    var normalized = normalizeObject(values, normalizeUnit, []),\n        settingWeekStuff = !isUndefined(normalized.weekYear) || !isUndefined(normalized.weekNumber) || !isUndefined(normalized.weekday),\n        containsOrdinal = !isUndefined(normalized.ordinal),\n        containsGregorYear = !isUndefined(normalized.year),\n        containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day),\n        containsGregor = containsGregorYear || containsGregorMD,\n        definiteWeekDef = normalized.weekYear || normalized.weekNumber;\n\n    if ((containsGregor || containsOrdinal) && definiteWeekDef) {\n      throw new ConflictingSpecificationError(\"Can't mix weekYear/weekNumber units with year/month/day or ordinals\");\n    }\n\n    if (containsGregorMD && containsOrdinal) {\n      throw new ConflictingSpecificationError(\"Can't mix ordinal dates with month/day\");\n    }\n\n    var mixed;\n\n    if (settingWeekStuff) {\n      mixed = weekToGregorian(Object.assign(gregorianToWeek(this.c), normalized));\n    } else if (!isUndefined(normalized.ordinal)) {\n      mixed = ordinalToGregorian(Object.assign(gregorianToOrdinal(this.c), normalized));\n    } else {\n      mixed = Object.assign(this.toObject(), normalized); // if we didn't set the day but we ended up on an overflow date,\n      // use the last day of the right month\n\n      if (isUndefined(normalized.day)) {\n        mixed.day = Math.min(daysInMonth(mixed.year, mixed.month), mixed.day);\n      }\n    }\n\n    var _objToTS4 = objToTS(mixed, this.o, this.zone),\n        ts = _objToTS4[0],\n        o = _objToTS4[1];\n\n    return clone$1(this, {\n      ts: ts,\n      o: o\n    });\n  }\n  /**\n   * Add a period of time to this DateTime and return the resulting DateTime\n   *\n   * Adding hours, minutes, seconds, or milliseconds increases the timestamp by the right number of milliseconds. Adding days, months, or years shifts the calendar, accounting for DSTs and leap years along the way. Thus, `dt.plus({ hours: 24 })` may result in a different time than `dt.plus({ days: 1 })` if there's a DST shift in between.\n   * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n   * @example DateTime.now().plus(123) //~> in 123 milliseconds\n   * @example DateTime.now().plus({ minutes: 15 }) //~> in 15 minutes\n   * @example DateTime.now().plus({ days: 1 }) //~> this time tomorrow\n   * @example DateTime.now().plus({ days: -1 }) //~> this time yesterday\n   * @example DateTime.now().plus({ hours: 3, minutes: 13 }) //~> in 3 hr, 13 min\n   * @example DateTime.now().plus(Duration.fromObject({ hours: 3, minutes: 13 })) //~> in 3 hr, 13 min\n   * @return {DateTime}\n   */\n  ;\n\n  _proto.plus = function plus(duration) {\n    if (!this.isValid) return this;\n    var dur = friendlyDuration(duration);\n    return clone$1(this, adjustTime(this, dur));\n  }\n  /**\n   * Subtract a period of time to this DateTime and return the resulting DateTime\n   * See {@link plus}\n   * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n   @return {DateTime}\n  */\n  ;\n\n  _proto.minus = function minus(duration) {\n    if (!this.isValid) return this;\n    var dur = friendlyDuration(duration).negate();\n    return clone$1(this, adjustTime(this, dur));\n  }\n  /**\n   * \"Set\" this DateTime to the beginning of a unit of time.\n   * @param {string} unit - The unit to go to the beginning of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'.\n   * @example DateTime.local(2014, 3, 3).startOf('month').toISODate(); //=> '2014-03-01'\n   * @example DateTime.local(2014, 3, 3).startOf('year').toISODate(); //=> '2014-01-01'\n   * @example DateTime.local(2014, 3, 3).startOf('week').toISODate(); //=> '2014-03-03', weeks always start on Mondays\n   * @example DateTime.local(2014, 3, 3, 5, 30).startOf('day').toISOTime(); //=> '00:00.000-05:00'\n   * @example DateTime.local(2014, 3, 3, 5, 30).startOf('hour').toISOTime(); //=> '05:00:00.000-05:00'\n   * @return {DateTime}\n   */\n  ;\n\n  _proto.startOf = function startOf(unit) {\n    if (!this.isValid) return this;\n    var o = {},\n        normalizedUnit = Duration.normalizeUnit(unit);\n\n    switch (normalizedUnit) {\n      case \"years\":\n        o.month = 1;\n      // falls through\n\n      case \"quarters\":\n      case \"months\":\n        o.day = 1;\n      // falls through\n\n      case \"weeks\":\n      case \"days\":\n        o.hour = 0;\n      // falls through\n\n      case \"hours\":\n        o.minute = 0;\n      // falls through\n\n      case \"minutes\":\n        o.second = 0;\n      // falls through\n\n      case \"seconds\":\n        o.millisecond = 0;\n        break;\n      // no default, invalid units throw in normalizeUnit()\n    }\n\n    if (normalizedUnit === \"weeks\") {\n      o.weekday = 1;\n    }\n\n    if (normalizedUnit === \"quarters\") {\n      var q = Math.ceil(this.month / 3);\n      o.month = (q - 1) * 3 + 1;\n    }\n\n    return this.set(o);\n  }\n  /**\n   * \"Set\" this DateTime to the end (meaning the last millisecond) of a unit of time\n   * @param {string} unit - The unit to go to the end of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'.\n   * @example DateTime.local(2014, 3, 3).endOf('month').toISO(); //=> '2014-03-31T23:59:59.999-05:00'\n   * @example DateTime.local(2014, 3, 3).endOf('year').toISO(); //=> '2014-12-31T23:59:59.999-05:00'\n   * @example DateTime.local(2014, 3, 3).endOf('week').toISO(); // => '2014-03-09T23:59:59.999-05:00', weeks start on Mondays\n   * @example DateTime.local(2014, 3, 3, 5, 30).endOf('day').toISO(); //=> '2014-03-03T23:59:59.999-05:00'\n   * @example DateTime.local(2014, 3, 3, 5, 30).endOf('hour').toISO(); //=> '2014-03-03T05:59:59.999-05:00'\n   * @return {DateTime}\n   */\n  ;\n\n  _proto.endOf = function endOf(unit) {\n    var _this$plus;\n\n    return this.isValid ? this.plus((_this$plus = {}, _this$plus[unit] = 1, _this$plus)).startOf(unit).minus(1) : this;\n  } // OUTPUT\n\n  /**\n   * Returns a string representation of this DateTime formatted according to the specified format string.\n   * **You may not want this.** See {@link toLocaleString} for a more flexible formatting tool. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/docs/manual/formatting.html#table-of-tokens).\n   * Defaults to en-US if no locale has been specified, regardless of the system's locale.\n   * @see https://moment.github.io/luxon/docs/manual/formatting.html#table-of-tokens\n   * @param {string} fmt - the format string\n   * @param {Object} opts - opts to override the configuration options\n   * @example DateTime.now().toFormat('yyyy LLL dd') //=> '2017 Apr 22'\n   * @example DateTime.now().setLocale('fr').toFormat('yyyy LLL dd') //=> '2017 avr. 22'\n   * @example DateTime.now().toFormat('yyyy LLL dd', { locale: \"fr\" }) //=> '2017 avr. 22'\n   * @example DateTime.now().toFormat(\"HH 'hours and' mm 'minutes'\") //=> '20 hours and 55 minutes'\n   * @return {string}\n   */\n  ;\n\n  _proto.toFormat = function toFormat(fmt, opts) {\n    if (opts === void 0) {\n      opts = {};\n    }\n\n    return this.isValid ? Formatter.create(this.loc.redefaultToEN(opts)).formatDateTimeFromString(this, fmt) : INVALID$2;\n  }\n  /**\n   * Returns a localized string representing this date. Accepts the same options as the Intl.DateTimeFormat constructor and any presets defined by Luxon, such as `DateTime.DATE_FULL` or `DateTime.TIME_SIMPLE`.\n   * The exact behavior of this method is browser-specific, but in general it will return an appropriate representation\n   * of the DateTime in the assigned locale.\n   * Defaults to the system's locale if no locale has been specified\n   * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n   * @param opts {Object} - Intl.DateTimeFormat constructor options and configuration options\n   * @example DateTime.now().toLocaleString(); //=> 4/20/2017\n   * @example DateTime.now().setLocale('en-gb').toLocaleString(); //=> '20/04/2017'\n   * @example DateTime.now().toLocaleString({ locale: 'en-gb' }); //=> '20/04/2017'\n   * @example DateTime.now().toLocaleString(DateTime.DATE_FULL); //=> 'April 20, 2017'\n   * @example DateTime.now().toLocaleString(DateTime.TIME_SIMPLE); //=> '11:32 AM'\n   * @example DateTime.now().toLocaleString(DateTime.DATETIME_SHORT); //=> '4/20/2017, 11:32 AM'\n   * @example DateTime.now().toLocaleString({ weekday: 'long', month: 'long', day: '2-digit' }); //=> 'Thursday, April 20'\n   * @example DateTime.now().toLocaleString({ weekday: 'short', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }); //=> 'Thu, Apr 20, 11:27 AM'\n   * @example DateTime.now().toLocaleString({ hour: '2-digit', minute: '2-digit', hour12: false }); //=> '11:32'\n   * @return {string}\n   */\n  ;\n\n  _proto.toLocaleString = function toLocaleString(opts) {\n    if (opts === void 0) {\n      opts = DATE_SHORT;\n    }\n\n    return this.isValid ? Formatter.create(this.loc.clone(opts), opts).formatDateTime(this) : INVALID$2;\n  }\n  /**\n   * Returns an array of format \"parts\", meaning individual tokens along with metadata. This is allows callers to post-process individual sections of the formatted output.\n   * Defaults to the system's locale if no locale has been specified\n   * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat/formatToParts\n   * @param opts {Object} - Intl.DateTimeFormat constructor options, same as `toLocaleString`.\n   * @example DateTime.now().toLocaleParts(); //=> [\n   *                                   //=>   { type: 'day', value: '25' },\n   *                                   //=>   { type: 'literal', value: '/' },\n   *                                   //=>   { type: 'month', value: '05' },\n   *                                   //=>   { type: 'literal', value: '/' },\n   *                                   //=>   { type: 'year', value: '1982' }\n   *                                   //=> ]\n   */\n  ;\n\n  _proto.toLocaleParts = function toLocaleParts(opts) {\n    if (opts === void 0) {\n      opts = {};\n    }\n\n    return this.isValid ? Formatter.create(this.loc.clone(opts), opts).formatDateTimeParts(this) : [];\n  }\n  /**\n   * Returns an ISO 8601-compliant string representation of this DateTime\n   * @param {Object} opts - options\n   * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n   * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n   * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n   * @param {string} [opts.format='extended'] - choose between the basic and extended format\n   * @example DateTime.utc(1982, 5, 25).toISO() //=> '1982-05-25T00:00:00.000Z'\n   * @example DateTime.now().toISO() //=> '2017-04-22T20:47:05.335-04:00'\n   * @example DateTime.now().toISO({ includeOffset: false }) //=> '2017-04-22T20:47:05.335'\n   * @example DateTime.now().toISO({ format: 'basic' }) //=> '20170422T204705.335-0400'\n   * @return {string}\n   */\n  ;\n\n  _proto.toISO = function toISO(opts) {\n    if (opts === void 0) {\n      opts = {};\n    }\n\n    if (!this.isValid) {\n      return null;\n    }\n\n    return this.toISODate(opts) + \"T\" + this.toISOTime(opts);\n  }\n  /**\n   * Returns an ISO 8601-compliant string representation of this DateTime's date component\n   * @param {Object} opts - options\n   * @param {string} [opts.format='extended'] - choose between the basic and extended format\n   * @example DateTime.utc(1982, 5, 25).toISODate() //=> '1982-05-25'\n   * @example DateTime.utc(1982, 5, 25).toISODate({ format: 'basic' }) //=> '19820525'\n   * @return {string}\n   */\n  ;\n\n  _proto.toISODate = function toISODate(_temp3) {\n    var _ref5 = _temp3 === void 0 ? {} : _temp3,\n        _ref5$format = _ref5.format,\n        format = _ref5$format === void 0 ? \"extended\" : _ref5$format;\n\n    var fmt = format === \"basic\" ? \"yyyyMMdd\" : \"yyyy-MM-dd\";\n\n    if (this.year > 9999) {\n      fmt = \"+\" + fmt;\n    }\n\n    return toTechFormat(this, fmt);\n  }\n  /**\n   * Returns an ISO 8601-compliant string representation of this DateTime's week date\n   * @example DateTime.utc(1982, 5, 25).toISOWeekDate() //=> '1982-W21-2'\n   * @return {string}\n   */\n  ;\n\n  _proto.toISOWeekDate = function toISOWeekDate() {\n    return toTechFormat(this, \"kkkk-'W'WW-c\");\n  }\n  /**\n   * Returns an ISO 8601-compliant string representation of this DateTime's time component\n   * @param {Object} opts - options\n   * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n   * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n   * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n   * @param {boolean} [opts.includePrefix=false] - include the `T` prefix\n   * @param {string} [opts.format='extended'] - choose between the basic and extended format\n   * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime() //=> '07:34:19.361Z'\n   * @example DateTime.utc().set({ hour: 7, minute: 34, seconds: 0, milliseconds: 0 }).toISOTime({ suppressSeconds: true }) //=> '07:34Z'\n   * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ format: 'basic' }) //=> '073419.361Z'\n   * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ includePrefix: true }) //=> 'T07:34:19.361Z'\n   * @return {string}\n   */\n  ;\n\n  _proto.toISOTime = function toISOTime(_temp4) {\n    var _ref6 = _temp4 === void 0 ? {} : _temp4,\n        _ref6$suppressMillise = _ref6.suppressMilliseconds,\n        suppressMilliseconds = _ref6$suppressMillise === void 0 ? false : _ref6$suppressMillise,\n        _ref6$suppressSeconds = _ref6.suppressSeconds,\n        suppressSeconds = _ref6$suppressSeconds === void 0 ? false : _ref6$suppressSeconds,\n        _ref6$includeOffset = _ref6.includeOffset,\n        includeOffset = _ref6$includeOffset === void 0 ? true : _ref6$includeOffset,\n        _ref6$includePrefix = _ref6.includePrefix,\n        includePrefix = _ref6$includePrefix === void 0 ? false : _ref6$includePrefix,\n        _ref6$format = _ref6.format,\n        format = _ref6$format === void 0 ? \"extended\" : _ref6$format;\n\n    return toTechTimeFormat(this, {\n      suppressSeconds: suppressSeconds,\n      suppressMilliseconds: suppressMilliseconds,\n      includeOffset: includeOffset,\n      includePrefix: includePrefix,\n      format: format\n    });\n  }\n  /**\n   * Returns an RFC 2822-compatible string representation of this DateTime, always in UTC\n   * @example DateTime.utc(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 +0000'\n   * @example DateTime.local(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 -0400'\n   * @return {string}\n   */\n  ;\n\n  _proto.toRFC2822 = function toRFC2822() {\n    return toTechFormat(this, \"EEE, dd LLL yyyy HH:mm:ss ZZZ\", false);\n  }\n  /**\n   * Returns a string representation of this DateTime appropriate for use in HTTP headers.\n   * Specifically, the string conforms to RFC 1123.\n   * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1\n   * @example DateTime.utc(2014, 7, 13).toHTTP() //=> 'Sun, 13 Jul 2014 00:00:00 GMT'\n   * @example DateTime.utc(2014, 7, 13, 19).toHTTP() //=> 'Sun, 13 Jul 2014 19:00:00 GMT'\n   * @return {string}\n   */\n  ;\n\n  _proto.toHTTP = function toHTTP() {\n    return toTechFormat(this.toUTC(), \"EEE, dd LLL yyyy HH:mm:ss 'GMT'\");\n  }\n  /**\n   * Returns a string representation of this DateTime appropriate for use in SQL Date\n   * @example DateTime.utc(2014, 7, 13).toSQLDate() //=> '2014-07-13'\n   * @return {string}\n   */\n  ;\n\n  _proto.toSQLDate = function toSQLDate() {\n    return toTechFormat(this, \"yyyy-MM-dd\");\n  }\n  /**\n   * Returns a string representation of this DateTime appropriate for use in SQL Time\n   * @param {Object} opts - options\n   * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset.\n   * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n   * @example DateTime.utc().toSQL() //=> '05:15:16.345'\n   * @example DateTime.now().toSQL() //=> '05:15:16.345 -04:00'\n   * @example DateTime.now().toSQL({ includeOffset: false }) //=> '05:15:16.345'\n   * @example DateTime.now().toSQL({ includeZone: false }) //=> '05:15:16.345 America/New_York'\n   * @return {string}\n   */\n  ;\n\n  _proto.toSQLTime = function toSQLTime(_temp5) {\n    var _ref7 = _temp5 === void 0 ? {} : _temp5,\n        _ref7$includeOffset = _ref7.includeOffset,\n        includeOffset = _ref7$includeOffset === void 0 ? true : _ref7$includeOffset,\n        _ref7$includeZone = _ref7.includeZone,\n        includeZone = _ref7$includeZone === void 0 ? false : _ref7$includeZone;\n\n    return toTechTimeFormat(this, {\n      includeOffset: includeOffset,\n      includeZone: includeZone,\n      spaceZone: true\n    });\n  }\n  /**\n   * Returns a string representation of this DateTime appropriate for use in SQL DateTime\n   * @param {Object} opts - options\n   * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset.\n   * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n   * @example DateTime.utc(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 Z'\n   * @example DateTime.local(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 -04:00'\n   * @example DateTime.local(2014, 7, 13).toSQL({ includeOffset: false }) //=> '2014-07-13 00:00:00.000'\n   * @example DateTime.local(2014, 7, 13).toSQL({ includeZone: true }) //=> '2014-07-13 00:00:00.000 America/New_York'\n   * @return {string}\n   */\n  ;\n\n  _proto.toSQL = function toSQL(opts) {\n    if (opts === void 0) {\n      opts = {};\n    }\n\n    if (!this.isValid) {\n      return null;\n    }\n\n    return this.toSQLDate() + \" \" + this.toSQLTime(opts);\n  }\n  /**\n   * Returns a string representation of this DateTime appropriate for debugging\n   * @return {string}\n   */\n  ;\n\n  _proto.toString = function toString() {\n    return this.isValid ? this.toISO() : INVALID$2;\n  }\n  /**\n   * Returns the epoch milliseconds of this DateTime. Alias of {@link toMillis}\n   * @return {number}\n   */\n  ;\n\n  _proto.valueOf = function valueOf() {\n    return this.toMillis();\n  }\n  /**\n   * Returns the epoch milliseconds of this DateTime.\n   * @return {number}\n   */\n  ;\n\n  _proto.toMillis = function toMillis() {\n    return this.isValid ? this.ts : NaN;\n  }\n  /**\n   * Returns the epoch seconds of this DateTime.\n   * @return {number}\n   */\n  ;\n\n  _proto.toSeconds = function toSeconds() {\n    return this.isValid ? this.ts / 1000 : NaN;\n  }\n  /**\n   * Returns an ISO 8601 representation of this DateTime appropriate for use in JSON.\n   * @return {string}\n   */\n  ;\n\n  _proto.toJSON = function toJSON() {\n    return this.toISO();\n  }\n  /**\n   * Returns a BSON serializable equivalent to this DateTime.\n   * @return {Date}\n   */\n  ;\n\n  _proto.toBSON = function toBSON() {\n    return this.toJSDate();\n  }\n  /**\n   * Returns a JavaScript object with this DateTime's year, month, day, and so on.\n   * @param opts - options for generating the object\n   * @param {boolean} [opts.includeConfig=false] - include configuration attributes in the output\n   * @example DateTime.now().toObject() //=> { year: 2017, month: 4, day: 22, hour: 20, minute: 49, second: 42, millisecond: 268 }\n   * @return {Object}\n   */\n  ;\n\n  _proto.toObject = function toObject(opts) {\n    if (opts === void 0) {\n      opts = {};\n    }\n\n    if (!this.isValid) return {};\n    var base = Object.assign({}, this.c);\n\n    if (opts.includeConfig) {\n      base.outputCalendar = this.outputCalendar;\n      base.numberingSystem = this.loc.numberingSystem;\n      base.locale = this.loc.locale;\n    }\n\n    return base;\n  }\n  /**\n   * Returns a JavaScript Date equivalent to this DateTime.\n   * @return {Date}\n   */\n  ;\n\n  _proto.toJSDate = function toJSDate() {\n    return new Date(this.isValid ? this.ts : NaN);\n  } // COMPARE\n\n  /**\n   * Return the difference between two DateTimes as a Duration.\n   * @param {DateTime} otherDateTime - the DateTime to compare this one to\n   * @param {string|string[]} [unit=['milliseconds']] - the unit or array of units (such as 'hours' or 'days') to include in the duration.\n   * @param {Object} opts - options that affect the creation of the Duration\n   * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n   * @example\n   * var i1 = DateTime.fromISO('1982-05-25T09:45'),\n   *     i2 = DateTime.fromISO('1983-10-14T10:30');\n   * i2.diff(i1).toObject() //=> { milliseconds: 43807500000 }\n   * i2.diff(i1, 'hours').toObject() //=> { hours: 12168.75 }\n   * i2.diff(i1, ['months', 'days']).toObject() //=> { months: 16, days: 19.03125 }\n   * i2.diff(i1, ['months', 'days', 'hours']).toObject() //=> { months: 16, days: 19, hours: 0.75 }\n   * @return {Duration}\n   */\n  ;\n\n  _proto.diff = function diff(otherDateTime, unit, opts) {\n    if (unit === void 0) {\n      unit = \"milliseconds\";\n    }\n\n    if (opts === void 0) {\n      opts = {};\n    }\n\n    if (!this.isValid || !otherDateTime.isValid) {\n      return Duration.invalid(this.invalid || otherDateTime.invalid, \"created by diffing an invalid DateTime\");\n    }\n\n    var durOpts = Object.assign({\n      locale: this.locale,\n      numberingSystem: this.numberingSystem\n    }, opts);\n\n    var units = maybeArray(unit).map(Duration.normalizeUnit),\n        otherIsLater = otherDateTime.valueOf() > this.valueOf(),\n        earlier = otherIsLater ? this : otherDateTime,\n        later = otherIsLater ? otherDateTime : this,\n        diffed = _diff(earlier, later, units, durOpts);\n\n    return otherIsLater ? diffed.negate() : diffed;\n  }\n  /**\n   * Return the difference between this DateTime and right now.\n   * See {@link diff}\n   * @param {string|string[]} [unit=['milliseconds']] - the unit or units units (such as 'hours' or 'days') to include in the duration\n   * @param {Object} opts - options that affect the creation of the Duration\n   * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n   * @return {Duration}\n   */\n  ;\n\n  _proto.diffNow = function diffNow(unit, opts) {\n    if (unit === void 0) {\n      unit = \"milliseconds\";\n    }\n\n    if (opts === void 0) {\n      opts = {};\n    }\n\n    return this.diff(DateTime.now(), unit, opts);\n  }\n  /**\n   * Return an Interval spanning between this DateTime and another DateTime\n   * @param {DateTime} otherDateTime - the other end point of the Interval\n   * @return {Interval}\n   */\n  ;\n\n  _proto.until = function until(otherDateTime) {\n    return this.isValid ? Interval.fromDateTimes(this, otherDateTime) : this;\n  }\n  /**\n   * Return whether this DateTime is in the same unit of time as another DateTime.\n   * Higher-order units must also be identical for this function to return `true`.\n   * Note that time zones are **ignored** in this comparison, which compares the **local** calendar time. Use {@link setZone} to convert one of the dates if needed.\n   * @param {DateTime} otherDateTime - the other DateTime\n   * @param {string} unit - the unit of time to check sameness on\n   * @example DateTime.now().hasSame(otherDT, 'day'); //~> true if otherDT is in the same current calendar day\n   * @return {boolean}\n   */\n  ;\n\n  _proto.hasSame = function hasSame(otherDateTime, unit) {\n    if (!this.isValid) return false;\n    var inputMs = otherDateTime.valueOf();\n    var otherZoneDateTime = this.setZone(otherDateTime.zone, {\n      keepLocalTime: true\n    });\n    return otherZoneDateTime.startOf(unit) <= inputMs && inputMs <= otherZoneDateTime.endOf(unit);\n  }\n  /**\n   * Equality check\n   * Two DateTimes are equal iff they represent the same millisecond, have the same zone and location, and are both valid.\n   * To compare just the millisecond values, use `+dt1 === +dt2`.\n   * @param {DateTime} other - the other DateTime\n   * @return {boolean}\n   */\n  ;\n\n  _proto.equals = function equals(other) {\n    return this.isValid && other.isValid && this.valueOf() === other.valueOf() && this.zone.equals(other.zone) && this.loc.equals(other.loc);\n  }\n  /**\n   * Returns a string representation of a this time relative to now, such as \"in two days\". Can only internationalize if your\n   * platform supports Intl.RelativeTimeFormat. Rounds down by default.\n   * @param {Object} options - options that affect the output\n   * @param {DateTime} [options.base=DateTime.now()] - the DateTime to use as the basis to which this time is compared. Defaults to now.\n   * @param {string} [options.style=\"long\"] - the style of units, must be \"long\", \"short\", or \"narrow\"\n   * @param {string|string[]} options.unit - use a specific unit or array of units; if omitted, or an array, the method will pick the best unit. Use an array or one of \"years\", \"quarters\", \"months\", \"weeks\", \"days\", \"hours\", \"minutes\", or \"seconds\"\n   * @param {boolean} [options.round=true] - whether to round the numbers in the output.\n   * @param {number} [options.padding=0] - padding in milliseconds. This allows you to round up the result if it fits inside the threshold. Don't use in combination with {round: false} because the decimal output will include the padding.\n   * @param {string} options.locale - override the locale of this DateTime\n   * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this\n   * @example DateTime.now().plus({ days: 1 }).toRelative() //=> \"in 1 day\"\n   * @example DateTime.now().setLocale(\"es\").toRelative({ days: 1 }) //=> \"dentro de 1 día\"\n   * @example DateTime.now().plus({ days: 1 }).toRelative({ locale: \"fr\" }) //=> \"dans 23 heures\"\n   * @example DateTime.now().minus({ days: 2 }).toRelative() //=> \"2 days ago\"\n   * @example DateTime.now().minus({ days: 2 }).toRelative({ unit: \"hours\" }) //=> \"48 hours ago\"\n   * @example DateTime.now().minus({ hours: 36 }).toRelative({ round: false }) //=> \"1.5 days ago\"\n   */\n  ;\n\n  _proto.toRelative = function toRelative(options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    if (!this.isValid) return null;\n    var base = options.base || DateTime.fromObject({\n      zone: this.zone\n    }),\n        padding = options.padding ? this < base ? -options.padding : options.padding : 0;\n    var units = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\"];\n    var unit = options.unit;\n\n    if (Array.isArray(options.unit)) {\n      units = options.unit;\n      unit = undefined;\n    }\n\n    return diffRelative(base, this.plus(padding), Object.assign(options, {\n      numeric: \"always\",\n      units: units,\n      unit: unit\n    }));\n  }\n  /**\n   * Returns a string representation of this date relative to today, such as \"yesterday\" or \"next month\".\n   * Only internationalizes on platforms that supports Intl.RelativeTimeFormat.\n   * @param {Object} options - options that affect the output\n   * @param {DateTime} [options.base=DateTime.now()] - the DateTime to use as the basis to which this time is compared. Defaults to now.\n   * @param {string} options.locale - override the locale of this DateTime\n   * @param {string} options.unit - use a specific unit; if omitted, the method will pick the unit. Use one of \"years\", \"quarters\", \"months\", \"weeks\", or \"days\"\n   * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this\n   * @example DateTime.now().plus({ days: 1 }).toRelativeCalendar() //=> \"tomorrow\"\n   * @example DateTime.now().setLocale(\"es\").plus({ days: 1 }).toRelative() //=> \"\"mañana\"\n   * @example DateTime.now().plus({ days: 1 }).toRelativeCalendar({ locale: \"fr\" }) //=> \"demain\"\n   * @example DateTime.now().minus({ days: 2 }).toRelativeCalendar() //=> \"2 days ago\"\n   */\n  ;\n\n  _proto.toRelativeCalendar = function toRelativeCalendar(options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    if (!this.isValid) return null;\n    return diffRelative(options.base || DateTime.fromObject({\n      zone: this.zone\n    }), this, Object.assign(options, {\n      numeric: \"auto\",\n      units: [\"years\", \"months\", \"days\"],\n      calendary: true\n    }));\n  }\n  /**\n   * Return the min of several date times\n   * @param {...DateTime} dateTimes - the DateTimes from which to choose the minimum\n   * @return {DateTime} the min DateTime, or undefined if called with no argument\n   */\n  ;\n\n  DateTime.min = function min() {\n    for (var _len = arguments.length, dateTimes = new Array(_len), _key = 0; _key < _len; _key++) {\n      dateTimes[_key] = arguments[_key];\n    }\n\n    if (!dateTimes.every(DateTime.isDateTime)) {\n      throw new InvalidArgumentError(\"min requires all arguments be DateTimes\");\n    }\n\n    return bestBy(dateTimes, function (i) {\n      return i.valueOf();\n    }, Math.min);\n  }\n  /**\n   * Return the max of several date times\n   * @param {...DateTime} dateTimes - the DateTimes from which to choose the maximum\n   * @return {DateTime} the max DateTime, or undefined if called with no argument\n   */\n  ;\n\n  DateTime.max = function max() {\n    for (var _len2 = arguments.length, dateTimes = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      dateTimes[_key2] = arguments[_key2];\n    }\n\n    if (!dateTimes.every(DateTime.isDateTime)) {\n      throw new InvalidArgumentError(\"max requires all arguments be DateTimes\");\n    }\n\n    return bestBy(dateTimes, function (i) {\n      return i.valueOf();\n    }, Math.max);\n  } // MISC\n\n  /**\n   * Explain how a string would be parsed by fromFormat()\n   * @param {string} text - the string to parse\n   * @param {string} fmt - the format the string is expected to be in (see description)\n   * @param {Object} options - options taken by fromFormat()\n   * @return {Object}\n   */\n  ;\n\n  DateTime.fromFormatExplain = function fromFormatExplain(text, fmt, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    var _options = options,\n        _options$locale = _options.locale,\n        locale = _options$locale === void 0 ? null : _options$locale,\n        _options$numberingSys = _options.numberingSystem,\n        numberingSystem = _options$numberingSys === void 0 ? null : _options$numberingSys,\n        localeToUse = Locale.fromOpts({\n      locale: locale,\n      numberingSystem: numberingSystem,\n      defaultToEN: true\n    });\n    return explainFromTokens(localeToUse, text, fmt);\n  }\n  /**\n   * @deprecated use fromFormatExplain instead\n   */\n  ;\n\n  DateTime.fromStringExplain = function fromStringExplain(text, fmt, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    return DateTime.fromFormatExplain(text, fmt, options);\n  } // FORMAT PRESETS\n\n  /**\n   * {@link toLocaleString} format like 10/14/1983\n   * @type {Object}\n   */\n  ;\n\n  _createClass(DateTime, [{\n    key: \"isValid\",\n    get: function get() {\n      return this.invalid === null;\n    }\n    /**\n     * Returns an error code if this DateTime is invalid, or null if the DateTime is valid\n     * @type {string}\n     */\n\n  }, {\n    key: \"invalidReason\",\n    get: function get() {\n      return this.invalid ? this.invalid.reason : null;\n    }\n    /**\n     * Returns an explanation of why this DateTime became invalid, or null if the DateTime is valid\n     * @type {string}\n     */\n\n  }, {\n    key: \"invalidExplanation\",\n    get: function get() {\n      return this.invalid ? this.invalid.explanation : null;\n    }\n    /**\n     * Get the locale of a DateTime, such 'en-GB'. The locale is used when formatting the DateTime\n     *\n     * @type {string}\n     */\n\n  }, {\n    key: \"locale\",\n    get: function get() {\n      return this.isValid ? this.loc.locale : null;\n    }\n    /**\n     * Get the numbering system of a DateTime, such 'beng'. The numbering system is used when formatting the DateTime\n     *\n     * @type {string}\n     */\n\n  }, {\n    key: \"numberingSystem\",\n    get: function get() {\n      return this.isValid ? this.loc.numberingSystem : null;\n    }\n    /**\n     * Get the output calendar of a DateTime, such 'islamic'. The output calendar is used when formatting the DateTime\n     *\n     * @type {string}\n     */\n\n  }, {\n    key: \"outputCalendar\",\n    get: function get() {\n      return this.isValid ? this.loc.outputCalendar : null;\n    }\n    /**\n     * Get the time zone associated with this DateTime.\n     * @type {Zone}\n     */\n\n  }, {\n    key: \"zone\",\n    get: function get() {\n      return this._zone;\n    }\n    /**\n     * Get the name of the time zone.\n     * @type {string}\n     */\n\n  }, {\n    key: \"zoneName\",\n    get: function get() {\n      return this.isValid ? this.zone.name : null;\n    }\n    /**\n     * Get the year\n     * @example DateTime.local(2017, 5, 25).year //=> 2017\n     * @type {number}\n     */\n\n  }, {\n    key: \"year\",\n    get: function get() {\n      return this.isValid ? this.c.year : NaN;\n    }\n    /**\n     * Get the quarter\n     * @example DateTime.local(2017, 5, 25).quarter //=> 2\n     * @type {number}\n     */\n\n  }, {\n    key: \"quarter\",\n    get: function get() {\n      return this.isValid ? Math.ceil(this.c.month / 3) : NaN;\n    }\n    /**\n     * Get the month (1-12).\n     * @example DateTime.local(2017, 5, 25).month //=> 5\n     * @type {number}\n     */\n\n  }, {\n    key: \"month\",\n    get: function get() {\n      return this.isValid ? this.c.month : NaN;\n    }\n    /**\n     * Get the day of the month (1-30ish).\n     * @example DateTime.local(2017, 5, 25).day //=> 25\n     * @type {number}\n     */\n\n  }, {\n    key: \"day\",\n    get: function get() {\n      return this.isValid ? this.c.day : NaN;\n    }\n    /**\n     * Get the hour of the day (0-23).\n     * @example DateTime.local(2017, 5, 25, 9).hour //=> 9\n     * @type {number}\n     */\n\n  }, {\n    key: \"hour\",\n    get: function get() {\n      return this.isValid ? this.c.hour : NaN;\n    }\n    /**\n     * Get the minute of the hour (0-59).\n     * @example DateTime.local(2017, 5, 25, 9, 30).minute //=> 30\n     * @type {number}\n     */\n\n  }, {\n    key: \"minute\",\n    get: function get() {\n      return this.isValid ? this.c.minute : NaN;\n    }\n    /**\n     * Get the second of the minute (0-59).\n     * @example DateTime.local(2017, 5, 25, 9, 30, 52).second //=> 52\n     * @type {number}\n     */\n\n  }, {\n    key: \"second\",\n    get: function get() {\n      return this.isValid ? this.c.second : NaN;\n    }\n    /**\n     * Get the millisecond of the second (0-999).\n     * @example DateTime.local(2017, 5, 25, 9, 30, 52, 654).millisecond //=> 654\n     * @type {number}\n     */\n\n  }, {\n    key: \"millisecond\",\n    get: function get() {\n      return this.isValid ? this.c.millisecond : NaN;\n    }\n    /**\n     * Get the week year\n     * @see https://en.wikipedia.org/wiki/ISO_week_date\n     * @example DateTime.local(2014, 12, 31).weekYear //=> 2015\n     * @type {number}\n     */\n\n  }, {\n    key: \"weekYear\",\n    get: function get() {\n      return this.isValid ? possiblyCachedWeekData(this).weekYear : NaN;\n    }\n    /**\n     * Get the week number of the week year (1-52ish).\n     * @see https://en.wikipedia.org/wiki/ISO_week_date\n     * @example DateTime.local(2017, 5, 25).weekNumber //=> 21\n     * @type {number}\n     */\n\n  }, {\n    key: \"weekNumber\",\n    get: function get() {\n      return this.isValid ? possiblyCachedWeekData(this).weekNumber : NaN;\n    }\n    /**\n     * Get the day of the week.\n     * 1 is Monday and 7 is Sunday\n     * @see https://en.wikipedia.org/wiki/ISO_week_date\n     * @example DateTime.local(2014, 11, 31).weekday //=> 4\n     * @type {number}\n     */\n\n  }, {\n    key: \"weekday\",\n    get: function get() {\n      return this.isValid ? possiblyCachedWeekData(this).weekday : NaN;\n    }\n    /**\n     * Get the ordinal (meaning the day of the year)\n     * @example DateTime.local(2017, 5, 25).ordinal //=> 145\n     * @type {number|DateTime}\n     */\n\n  }, {\n    key: \"ordinal\",\n    get: function get() {\n      return this.isValid ? gregorianToOrdinal(this.c).ordinal : NaN;\n    }\n    /**\n     * Get the human readable short month name, such as 'Oct'.\n     * Defaults to the system's locale if no locale has been specified\n     * @example DateTime.local(2017, 10, 30).monthShort //=> Oct\n     * @type {string}\n     */\n\n  }, {\n    key: \"monthShort\",\n    get: function get() {\n      return this.isValid ? Info.months(\"short\", {\n        locObj: this.loc\n      })[this.month - 1] : null;\n    }\n    /**\n     * Get the human readable long month name, such as 'October'.\n     * Defaults to the system's locale if no locale has been specified\n     * @example DateTime.local(2017, 10, 30).monthLong //=> October\n     * @type {string}\n     */\n\n  }, {\n    key: \"monthLong\",\n    get: function get() {\n      return this.isValid ? Info.months(\"long\", {\n        locObj: this.loc\n      })[this.month - 1] : null;\n    }\n    /**\n     * Get the human readable short weekday, such as 'Mon'.\n     * Defaults to the system's locale if no locale has been specified\n     * @example DateTime.local(2017, 10, 30).weekdayShort //=> Mon\n     * @type {string}\n     */\n\n  }, {\n    key: \"weekdayShort\",\n    get: function get() {\n      return this.isValid ? Info.weekdays(\"short\", {\n        locObj: this.loc\n      })[this.weekday - 1] : null;\n    }\n    /**\n     * Get the human readable long weekday, such as 'Monday'.\n     * Defaults to the system's locale if no locale has been specified\n     * @example DateTime.local(2017, 10, 30).weekdayLong //=> Monday\n     * @type {string}\n     */\n\n  }, {\n    key: \"weekdayLong\",\n    get: function get() {\n      return this.isValid ? Info.weekdays(\"long\", {\n        locObj: this.loc\n      })[this.weekday - 1] : null;\n    }\n    /**\n     * Get the UTC offset of this DateTime in minutes\n     * @example DateTime.now().offset //=> -240\n     * @example DateTime.utc().offset //=> 0\n     * @type {number}\n     */\n\n  }, {\n    key: \"offset\",\n    get: function get() {\n      return this.isValid ? +this.o : NaN;\n    }\n    /**\n     * Get the short human name for the zone's current offset, for example \"EST\" or \"EDT\".\n     * Defaults to the system's locale if no locale has been specified\n     * @type {string}\n     */\n\n  }, {\n    key: \"offsetNameShort\",\n    get: function get() {\n      if (this.isValid) {\n        return this.zone.offsetName(this.ts, {\n          format: \"short\",\n          locale: this.locale\n        });\n      } else {\n        return null;\n      }\n    }\n    /**\n     * Get the long human name for the zone's current offset, for example \"Eastern Standard Time\" or \"Eastern Daylight Time\".\n     * Defaults to the system's locale if no locale has been specified\n     * @type {string}\n     */\n\n  }, {\n    key: \"offsetNameLong\",\n    get: function get() {\n      if (this.isValid) {\n        return this.zone.offsetName(this.ts, {\n          format: \"long\",\n          locale: this.locale\n        });\n      } else {\n        return null;\n      }\n    }\n    /**\n     * Get whether this zone's offset ever changes, as in a DST.\n     * @type {boolean}\n     */\n\n  }, {\n    key: \"isOffsetFixed\",\n    get: function get() {\n      return this.isValid ? this.zone.universal : null;\n    }\n    /**\n     * Get whether the DateTime is in a DST.\n     * @type {boolean}\n     */\n\n  }, {\n    key: \"isInDST\",\n    get: function get() {\n      if (this.isOffsetFixed) {\n        return false;\n      } else {\n        return this.offset > this.set({\n          month: 1\n        }).offset || this.offset > this.set({\n          month: 5\n        }).offset;\n      }\n    }\n    /**\n     * Returns true if this DateTime is in a leap year, false otherwise\n     * @example DateTime.local(2016).isInLeapYear //=> true\n     * @example DateTime.local(2013).isInLeapYear //=> false\n     * @type {boolean}\n     */\n\n  }, {\n    key: \"isInLeapYear\",\n    get: function get() {\n      return isLeapYear(this.year);\n    }\n    /**\n     * Returns the number of days in this DateTime's month\n     * @example DateTime.local(2016, 2).daysInMonth //=> 29\n     * @example DateTime.local(2016, 3).daysInMonth //=> 31\n     * @type {number}\n     */\n\n  }, {\n    key: \"daysInMonth\",\n    get: function get() {\n      return daysInMonth(this.year, this.month);\n    }\n    /**\n     * Returns the number of days in this DateTime's year\n     * @example DateTime.local(2016).daysInYear //=> 366\n     * @example DateTime.local(2013).daysInYear //=> 365\n     * @type {number}\n     */\n\n  }, {\n    key: \"daysInYear\",\n    get: function get() {\n      return this.isValid ? daysInYear(this.year) : NaN;\n    }\n    /**\n     * Returns the number of weeks in this DateTime's year\n     * @see https://en.wikipedia.org/wiki/ISO_week_date\n     * @example DateTime.local(2004).weeksInWeekYear //=> 53\n     * @example DateTime.local(2013).weeksInWeekYear //=> 52\n     * @type {number}\n     */\n\n  }, {\n    key: \"weeksInWeekYear\",\n    get: function get() {\n      return this.isValid ? weeksInWeekYear(this.weekYear) : NaN;\n    }\n  }], [{\n    key: \"DATE_SHORT\",\n    get: function get() {\n      return DATE_SHORT;\n    }\n    /**\n     * {@link toLocaleString} format like 'Oct 14, 1983'\n     * @type {Object}\n     */\n\n  }, {\n    key: \"DATE_MED\",\n    get: function get() {\n      return DATE_MED;\n    }\n    /**\n     * {@link toLocaleString} format like 'Fri, Oct 14, 1983'\n     * @type {Object}\n     */\n\n  }, {\n    key: \"DATE_MED_WITH_WEEKDAY\",\n    get: function get() {\n      return DATE_MED_WITH_WEEKDAY;\n    }\n    /**\n     * {@link toLocaleString} format like 'October 14, 1983'\n     * @type {Object}\n     */\n\n  }, {\n    key: \"DATE_FULL\",\n    get: function get() {\n      return DATE_FULL;\n    }\n    /**\n     * {@link toLocaleString} format like 'Tuesday, October 14, 1983'\n     * @type {Object}\n     */\n\n  }, {\n    key: \"DATE_HUGE\",\n    get: function get() {\n      return DATE_HUGE;\n    }\n    /**\n     * {@link toLocaleString} format like '09:30 AM'. Only 12-hour if the locale is.\n     * @type {Object}\n     */\n\n  }, {\n    key: \"TIME_SIMPLE\",\n    get: function get() {\n      return TIME_SIMPLE;\n    }\n    /**\n     * {@link toLocaleString} format like '09:30:23 AM'. Only 12-hour if the locale is.\n     * @type {Object}\n     */\n\n  }, {\n    key: \"TIME_WITH_SECONDS\",\n    get: function get() {\n      return TIME_WITH_SECONDS;\n    }\n    /**\n     * {@link toLocaleString} format like '09:30:23 AM EDT'. Only 12-hour if the locale is.\n     * @type {Object}\n     */\n\n  }, {\n    key: \"TIME_WITH_SHORT_OFFSET\",\n    get: function get() {\n      return TIME_WITH_SHORT_OFFSET;\n    }\n    /**\n     * {@link toLocaleString} format like '09:30:23 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n     * @type {Object}\n     */\n\n  }, {\n    key: \"TIME_WITH_LONG_OFFSET\",\n    get: function get() {\n      return TIME_WITH_LONG_OFFSET;\n    }\n    /**\n     * {@link toLocaleString} format like '09:30', always 24-hour.\n     * @type {Object}\n     */\n\n  }, {\n    key: \"TIME_24_SIMPLE\",\n    get: function get() {\n      return TIME_24_SIMPLE;\n    }\n    /**\n     * {@link toLocaleString} format like '09:30:23', always 24-hour.\n     * @type {Object}\n     */\n\n  }, {\n    key: \"TIME_24_WITH_SECONDS\",\n    get: function get() {\n      return TIME_24_WITH_SECONDS;\n    }\n    /**\n     * {@link toLocaleString} format like '09:30:23 EDT', always 24-hour.\n     * @type {Object}\n     */\n\n  }, {\n    key: \"TIME_24_WITH_SHORT_OFFSET\",\n    get: function get() {\n      return TIME_24_WITH_SHORT_OFFSET;\n    }\n    /**\n     * {@link toLocaleString} format like '09:30:23 Eastern Daylight Time', always 24-hour.\n     * @type {Object}\n     */\n\n  }, {\n    key: \"TIME_24_WITH_LONG_OFFSET\",\n    get: function get() {\n      return TIME_24_WITH_LONG_OFFSET;\n    }\n    /**\n     * {@link toLocaleString} format like '10/14/1983, 9:30 AM'. Only 12-hour if the locale is.\n     * @type {Object}\n     */\n\n  }, {\n    key: \"DATETIME_SHORT\",\n    get: function get() {\n      return DATETIME_SHORT;\n    }\n    /**\n     * {@link toLocaleString} format like '10/14/1983, 9:30:33 AM'. Only 12-hour if the locale is.\n     * @type {Object}\n     */\n\n  }, {\n    key: \"DATETIME_SHORT_WITH_SECONDS\",\n    get: function get() {\n      return DATETIME_SHORT_WITH_SECONDS;\n    }\n    /**\n     * {@link toLocaleString} format like 'Oct 14, 1983, 9:30 AM'. Only 12-hour if the locale is.\n     * @type {Object}\n     */\n\n  }, {\n    key: \"DATETIME_MED\",\n    get: function get() {\n      return DATETIME_MED;\n    }\n    /**\n     * {@link toLocaleString} format like 'Oct 14, 1983, 9:30:33 AM'. Only 12-hour if the locale is.\n     * @type {Object}\n     */\n\n  }, {\n    key: \"DATETIME_MED_WITH_SECONDS\",\n    get: function get() {\n      return DATETIME_MED_WITH_SECONDS;\n    }\n    /**\n     * {@link toLocaleString} format like 'Fri, 14 Oct 1983, 9:30 AM'. Only 12-hour if the locale is.\n     * @type {Object}\n     */\n\n  }, {\n    key: \"DATETIME_MED_WITH_WEEKDAY\",\n    get: function get() {\n      return DATETIME_MED_WITH_WEEKDAY;\n    }\n    /**\n     * {@link toLocaleString} format like 'October 14, 1983, 9:30 AM EDT'. Only 12-hour if the locale is.\n     * @type {Object}\n     */\n\n  }, {\n    key: \"DATETIME_FULL\",\n    get: function get() {\n      return DATETIME_FULL;\n    }\n    /**\n     * {@link toLocaleString} format like 'October 14, 1983, 9:30:33 AM EDT'. Only 12-hour if the locale is.\n     * @type {Object}\n     */\n\n  }, {\n    key: \"DATETIME_FULL_WITH_SECONDS\",\n    get: function get() {\n      return DATETIME_FULL_WITH_SECONDS;\n    }\n    /**\n     * {@link toLocaleString} format like 'Friday, October 14, 1983, 9:30 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n     * @type {Object}\n     */\n\n  }, {\n    key: \"DATETIME_HUGE\",\n    get: function get() {\n      return DATETIME_HUGE;\n    }\n    /**\n     * {@link toLocaleString} format like 'Friday, October 14, 1983, 9:30:33 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n     * @type {Object}\n     */\n\n  }, {\n    key: \"DATETIME_HUGE_WITH_SECONDS\",\n    get: function get() {\n      return DATETIME_HUGE_WITH_SECONDS;\n    }\n  }]);\n\n  return DateTime;\n}();\nfunction friendlyDateTime(dateTimeish) {\n  if (DateTime.isDateTime(dateTimeish)) {\n    return dateTimeish;\n  } else if (dateTimeish && dateTimeish.valueOf && isNumber(dateTimeish.valueOf())) {\n    return DateTime.fromJSDate(dateTimeish);\n  } else if (dateTimeish && typeof dateTimeish === \"object\") {\n    return DateTime.fromObject(dateTimeish);\n  } else {\n    throw new InvalidArgumentError(\"Unknown datetime argument: \" + dateTimeish + \", of type \" + typeof dateTimeish);\n  }\n}\n\nvar VERSION = \"1.28.0\";\n\nexports.DateTime = DateTime;\nexports.Duration = Duration;\nexports.FixedOffsetZone = FixedOffsetZone;\nexports.IANAZone = IANAZone;\nexports.Info = Info;\nexports.Interval = Interval;\nexports.InvalidZone = InvalidZone;\nexports.LocalZone = LocalZone;\nexports.Settings = Settings;\nexports.VERSION = VERSION;\nexports.Zone = Zone;\n//# sourceMappingURL=luxon.js.map\n","import React, { useEffect, useState, useRef, useCallback } from 'react';\nimport { hot } from 'react-hot-loader/root';\nimport Papa from 'papaparse';\nimport Layout from '@financial-times/g-components/article-layout';\nimport BigTopper from '@financial-times/g-components/big-topper';\nimport Epilogue from '@financial-times/g-components/epilogue';\nimport { GridChild, GridRow, GridContainer } from '@financial-times/g-components/grid';\nimport Loading from '@financial-times/g-components/loading';\nimport FlourishEmbed from '@financial-times/g-components/flourish-embed';\nimport ReactMarkdown from 'react-markdown';\nimport { QueryParamProvider, ArrayParam, StringParam, BooleanParam } from 'use-query-params';\nimport BasicCard from './components/basic-card';\nimport ListCard from './components/list-card';\nimport ScatterChart from './components/scatter';\nimport Total from './components/total';\nimport Table from './components/table';\nimport TrajectoryChartPanel from './components/trajectory-chart-panel';\nimport NavigationHeader from './components/navigation-header';\nimport StickyHeader from './components/sticky-header';\nimport YoutubeEmbed from './components/youtube-embed';\nimport { replaceMarkdown, formatNumber } from './utils.js';\nimport { queryParamDateParser } from './components/date-picker-input/helpers';\nimport useQueryParamsWithState from './hooks/useQueryParamsWithState';\nimport introCopy from './copy/intro.md';\nimport scatterChartCopy from './copy/scatter-chart-copy.md';\nimport sources from './copy/sources.md';\nimport related from './copy/related.md';\nimport byline from './copy/byline.md';\n\nconst App = () => {\n  const isPrerendering = navigator.userAgent === 'ReactSnap';\n  const [context, setContext] = useState(null);\n  const mainRef = useRef();\n\n  const [state, setState] = useQueryParamsWithState({\n    areas: {\n      type: ArrayParam,\n      default: ['gbr', 'isr', 'usa', 'eue', 'are', 'chn', 'chl'],\n      maxLength: 7,\n    },\n    populationAdjusted: { type: BooleanParam, default: true },\n    cumulative: { type: BooleanParam, default: true },\n    rollingAverage: { type: BooleanParam, default: true, ignoreInQueryParams: true },\n    startDate: { type: StringParam, default: '2020-12-07', ignoreInQueryParams: true },\n    doses: { type: StringParam, default: 'total' },\n  });\n\n  const { areas, populationAdjusted, cumulative, rollingAverage, startDate, doses } = state;\n\n  const earliestDateAllowed = new Date(2020, 11, 7);\n  const latestDateAllowed = new Date();\n  const parsedStartDate = queryParamDateParser(startDate);\n\n  // Update state function (accepts an array of key+value pairs or key,value)\n  const updateState = useCallback(stateToAdd => setState({ ...state, ...stateToAdd }), [\n    setState,\n    state,\n  ]);\n\n  const [data, setData] = useState({\n    latestData: [],\n    trajectoryData: [],\n    initialTrajectoryData: [],\n  });\n  const {\n    latestData,\n    initialTrajectoryData,\n    trajectoryData,\n    dataLastUpdated,\n    totals,\n    maxTotalDosesPer100,\n  } = data;\n\n  // Asynchronous effects should update state as per below\n  useEffect(() => {\n    if (context) {\n      // N.b., do async in an async IIFE, don't make the useEffect callback async\n      (async () => {\n        const trajectories = [];\n        const { data: vaccineTotalsResponse } = await fetch(\n          `https://ft-ig-content-prod.s3-eu-west-1.amazonaws.com/v2/Financial-Times/data-journalism-covid19-data/${\n            !isPrerendering ? context.dataBranch : 'main'\n          }/world_vax_totals.csv`\n        )\n          .then(d => d.text())\n          .then(d => Papa.parse(d, { header: true, dynamicTyping: true, skipEmptyLines: true }));\n\n        const { last_updated: lastUpdated } = vaccineTotalsResponse[0] || {};\n\n        const vaccineLatestResponse = await fetch(\n          `https://ft-ig-content-prod.s3-eu-west-1.amazonaws.com/v2/Financial-Times/data-journalism-covid19-data/${\n            !isPrerendering ? context.dataBranch : 'main'\n          }/country_vax_totals.csv`\n        )\n          .then(d => d.text())\n          .then(d =>\n            Papa.parse(d, {\n              header: true,\n              dynamicTyping: true,\n              skipEmptyLines: true,\n              transform: a => (a === 'NA' ? null : a),\n            })\n          )\n          .then(d => {\n            return d.data.map(a => {\n              // delete empty keys or keys with \"NA\"\n              Object.keys(a).forEach(\n                k => !a[k] && a[k] !== undefined && a[k] !== 'NA' && delete a[k]\n              );\n              return a;\n            });\n          });\n\n        await Promise.all(\n          state.areas.map(async country => {\n            const vaccineTrajectoryResponse = await fetch(\n              `https://ft-ig-content-prod.s3-eu-west-1.amazonaws.com/v2/Financial-Times/data-journalism-covid19-data/${\n                !isPrerendering ? context.dataBranch : 'main'\n              }/countries/${country.toUpperCase()}_vax.csv`\n            )\n              .then(d => d.text())\n              .then(d =>\n                Papa.parse(d, {\n                  header: true,\n                  dynamicTyping: true,\n                  skipEmptyLines: true,\n                  transform: a => (a === 'NA' ? null : a),\n                })\n              )\n              .then(d => {\n                return d.data.map(a => {\n                  // delete empty keys or keys with \"NA\"\n                  Object.keys(a).forEach(\n                    k => !a[k] && a[k] !== undefined && a[k] !== 'NA' && delete a[k]\n                  );\n                  return a;\n                });\n              });\n\n            trajectories.push(...vaccineTrajectoryResponse);\n          })\n        );\n\n        setData({\n          latestData: vaccineLatestResponse,\n          initialTrajectoryData: trajectories,\n          trajectoryData: [],\n          dataLastUpdated: lastUpdated,\n          totals: vaccineTotalsResponse[0],\n          maxTotalDosesPer100: Math.max(...latestData.map(d => d.total_doses_per_100)), // For setting the yMax on the scatter chart\n        });\n      })();\n    }\n  }, [context]);\n\n  useEffect(() => {\n    if (initialTrajectoryData.length > 0 && trajectoryData.length <= 0) {\n      (async () => {\n        const vaccineTrajectoryResponse = await fetch(\n          `https://ft-ig-content-prod.s3-eu-west-1.amazonaws.com/v2/Financial-Times/data-journalism-covid19-data/${\n            !isPrerendering ? context.dataBranch : 'main'\n          }/vaccine_trajectories.csv`\n        )\n          .then(d => d.text())\n          .then(d =>\n            Papa.parse(d, {\n              header: true,\n              dynamicTyping: true,\n              skipEmptyLines: true,\n              transform: a => (a === 'NA' ? null : a),\n            })\n          )\n          .then(d => {\n            return d.data.map(a => {\n              // delete empty keys or keys with \"NA\"\n              Object.keys(a).forEach(\n                k => !a[k] && a[k] !== undefined && a[k] !== 'NA' && delete a[k]\n              );\n              return a;\n            });\n          });\n        setData({\n          latestData: data.latestData,\n          initialTrajectoryData: data.initialTrajectoryData,\n          trajectoryData: vaccineTrajectoryResponse,\n          dataLastUpdated: data.dataLastUpdated,\n          totals: data.totals,\n          maxTotalDosesPer100: data.maxTotalDosesPer100,\n        });\n      })();\n    }\n  }, [initialTrajectoryData]);\n\n  useEffect(() => {\n    (async () => {\n      setContext({\n        ...(await (await fetch('./context.json')).json()),\n        buildTime: window.BUILD_TIME,\n      });\n    })();\n  }, []);\n\n  return context ? (\n    <Layout {...context}>\n      <StickyHeader containerRef={mainRef} height={{ default: 48, S: 40, M: 40, L: 40, XL: 40 }}>\n        <NavigationHeader\n          {...context.navigationConfig}\n          currentPage=\"https://ig.ft.com/coronavirus-vaccine-tracker/\"\n        />\n      </StickyHeader>\n      <main key=\"main\" role=\"main\" ref={mainRef}>\n        <article className=\"article\" itemScope itemType=\"http://schema.org/Article\">\n          <GridContainer className=\"article-head\">\n            <GridRow>\n              <GridChild colspan=\"12 S11 Scenter M9 L8 XL7\">\n                <BigTopper\n                  {...context}\n                  bylines={dataLastUpdated ? context.bylines : false}\n                  publishedDate={dataLastUpdated || context.publishedDate}\n                  byline={{ prefix: 'Updated', dateFirst: true }}\n                  share={{ size: 'small', separated: true }}\n                />\n              </GridChild>\n            </GridRow>\n          </GridContainer>\n          <div className=\"article-body o-editorial-typography-body\" itemProp=\"articleBody\">\n            <GridContainer>\n              <GridRow>\n                <GridChild colspan=\"12 S11 Scenter M9 L8 XL7\">\n                  <div className=\"o-editorial-layout-wrapper\">\n                    <section id=\"intro\" className=\"intro-paragraph\">\n                      {totals ? (\n                        <ReactMarkdown\n                          source={replaceMarkdown(introCopy, [\n                            {\n                              key: 'TOTAL_FIGURE',\n                              replacement: formatNumber(totals.vaccinations, 2),\n                            },\n                            {\n                              key: 'TOTAL_COUNTRIES',\n                              replacement: totals.countries,\n                            },\n                          ])}\n                        />\n                      ) : null}\n\n                      {!isPrerendering && totals ? <Total totalsData={totals} /> : null}\n                    </section>\n                  </div>\n                </GridChild>\n\n                <GridChild colspan=\"12 center S10\">\n                  <section id=\"table\" className=\"table\">\n                    {!isPrerendering && latestData.length > 0 ? (\n                      <Table data={latestData} />\n                    ) : (\n                      <div className=\"loading-container\">\n                        <Loading size=\"large\" />\n                      </div>\n                    )}\n                  </section>\n\n                  {/* <ListCard title=\"Related\" source={related} /> */}\n                </GridChild>\n\n                {!isPrerendering && initialTrajectoryData.length > 0 ? (\n                  <TrajectoryChartPanel\n                    id=\"world\"\n                    data={trajectoryData.length > 0 ? trajectoryData : initialTrajectoryData}\n                    areas={areas}\n                    lastUpdated={dataLastUpdated}\n                    updateState={updateState}\n                    options={{\n                      populationAdjusted,\n                      cumulative,\n                      rollingAverage,\n                      startDate: parsedStartDate,\n                      doses,\n                    }}\n                    earliestDateAllowed={earliestDateAllowed}\n                    latestDateAllowed={latestDateAllowed}\n                  />\n                ) : (\n                  <GridChild colspan=\"12\">\n                    <div className=\"loading-container\">\n                      <Loading size=\"large\" />\n                    </div>\n                  </GridChild>\n                )}\n\n                <GridChild colspan=\"12 S11 Scenter M9 L8 XL7\">\n                  <div className=\"o-editorial-layout-wrapper\">\n                    <ReactMarkdown source={replaceMarkdown(scatterChartCopy)} />\n                  </div>\n                </GridChild>\n\n                <GridChild colspan=\"12\">\n                  <section className=\"chart-holder\" id=\"flourish1\">\n                    <header className=\"chart-topper\">\n                      <div className=\"chart-topper__header\">\n                        The world's lowest-income countries are far behind the rest of the world on\n                        Covid vaccination\n                      </div>\n                      <div className=\"chart-topper__subhead\">\n                        Doses administered per 100 residents\n                      </div>\n                    </header>\n                    <FlourishEmbed\n                      alt=\"Line charts showing total doses, first doses, fully vaccinated and booster doses for low income, lower middle income, upper middle income and high income countries\"\n                      url=\"https://public.flourish.studio/visualisation/8009483/\n                      \"\n                    />\n                  </section>\n                </GridChild>\n\n                <GridChild colspan=\"12 L6\">\n                  <section className=\"chart-holder\" id=\"flourish2\">\n                    <header className=\"chart-topper\">\n                      <div className=\"chart-topper__header\">\n                        The world’s poorest countries have barely started Covid vaccination\n                        campaigns as wealthy countries roll out boosters\n                      </div>\n                      <div className=\"chart-topper__subhead\">\n                        Share of population by vaccination status (%)\n                      </div>\n                    </header>\n                    <FlourishEmbed\n                      alt=\"Stacked bar chart showing the share of population by vaccination status in low income, lower middle income, upper middle income and high income countries\"\n                      url=\"https://public.flourish.studio/visualisation/8011215/\"\n                    />\n                  </section>\n                </GridChild>\n\n                <GridChild colspan=\"12 L6\">\n                  <section className=\"chart-holder\" id=\"flourish3\">\n                    <header className=\"chart-topper\">\n                      <div className=\"chart-topper__header\">\n                        More{' '}\n                        <span style={{ color: '#1162B3', fontWeight: '500' }}>\n                          booster doses in high income countries\n                        </span>{' '}\n                        have been administered than{' '}\n                        <span style={{ color: '#EB5E8D', fontWeight: '500' }}>\n                          total doses in low income countries\n                        </span>\n                      </div>\n                      <div className=\"chart-topper__subhead\">\n                        Doses administered per 100 residents\n                      </div>\n                    </header>\n                    <FlourishEmbed\n                      alt=\"Line chart showing booster doses in high income countries versus total doses in low income countries\"\n                      url=\"https://public.flourish.studio/visualisation/7936420/\"\n                    />\n                  </section>\n                </GridChild>\n\n                <GridChild colspan=\"12\">\n                  {!isPrerendering && trajectoryData.length > 0 && latestData.length > 0 ? (\n                    <ScatterChart\n                      data={trajectoryData}\n                      areasToLabel={areas}\n                      maxTotalDosesPer100={maxTotalDosesPer100}\n                    />\n                  ) : (\n                    <div className=\"loading-container\">\n                      <Loading size=\"large\" />\n                    </div>\n                  )}\n                </GridChild>\n\n                <GridChild colspan=\"12 S11 Scenter M9 L8 XL7\">\n                  <div className=\"o-editorial-layout-wrapper\">\n                    <YoutubeEmbed videoId=\"0BuCt2vtVjc\" />\n\n                    <section id=\"sources\" className=\"sources\">\n                      <BasicCard title=\"Sources\">\n                        <ReactMarkdown\n                          source={sources}\n                          renderers={{\n                            list: ({ children }) => (\n                              <ul className=\"o-typography-list o-typography-list--unordered\">\n                                {children}\n                              </ul>\n                            ),\n                          }}\n                        />\n                      </BasicCard>\n                    </section>\n\n                    <section id=\"credits\" className=\"credits\">\n                      <ReactMarkdown source={byline} />\n                    </section>\n                  </div>\n                </GridChild>\n              </GridRow>\n            </GridContainer>\n          </div>\n          <Epilogue />\n        </article>\n      </main>\n    </Layout>\n  ) : null;\n};\n\nconst AppWithQueryParams = () => (\n  <QueryParamProvider>\n    <App />\n  </QueryParamProvider>\n);\n\nexport default hot(AppWithQueryParams);\n","import search from './search.js';\nimport mega from './mega.js';\nimport drawer from './drawer.js';\nimport subnav from './subnav.js';\nimport sticky from './sticky.js';\n\nclass Header {\n\n\tconstructor (headerEl) {\n\t\tif (!headerEl) {\n\t\t\theaderEl = document.querySelector('[data-o-component=\"o-header\"]');\n\t\t} else if (typeof headerEl === 'string') {\n\t\t\theaderEl = document.querySelector(headerEl);\n\t\t}\n\n\t\tif (headerEl.hasAttribute('data-o-header--js')) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.headerEl = headerEl;\n\n\t\tsearch.init(this.headerEl);\n\t\tmega.init(this.headerEl);\n\t\tdrawer.init(this.headerEl);\n\t\tsubnav.init(this.headerEl);\n\t\tsticky.init(this.headerEl);\n\n\t\tthis.headerEl.removeAttribute('data-o-header--no-js');\n\t\tthis.headerEl.setAttribute('data-o-header--js', '');\n\t}\n\n\tstatic init (rootEl) {\n\t\tif (!rootEl) {\n\t\t\trootEl = document.body;\n\t\t}\n\t\tif (!(rootEl instanceof HTMLElement)) {\n\t\t\trootEl = document.querySelector(rootEl);\n\t\t}\n\t\tif (/\\bo-header\\b/.test(rootEl.getAttribute('data-o-component'))) {\n\t\t\treturn new Header(rootEl);\n\t\t}\n\n\t\treturn [].map.call(rootEl.querySelectorAll('[data-o-component=\"o-header\"]'), el => {\n\t\t\tif (!el.hasAttribute('data-o-header--js')) {\n\t\t\t\treturn new Header(el);\n\t\t\t}\n\t\t}).filter((header) => {\n\t\t\treturn header !== undefined;\n\t\t});\n\t}\n\n}\n\nexport default Header;\n","import Target from './target.js';\n\n// Some assistive technologies, like screen readers, suggest to press 'space'\n// when interacting with a link with a role of 'button'.\n// We need to ensure that we replicate this functionality that exists on a button element.\nfunction handleSpaceKeydown (e) {\n\t// if the pressed key is a space, we'll simulate a click\n\tif (e.keyCode === 32) {\n\t\tthis.toggle(e);\n\t}\n}\n\nclass Toggle {\n\n\tconstructor(toggleEl, config) {\n\t\tif (!Toggle._targets) {\n\t\t\tToggle._targets = new Map();\n\t\t}\n\n\t\tif (!toggleEl) {\n\t\t\treturn;\n\t\t} else if (!(toggleEl instanceof HTMLElement)) {\n\t\t\ttoggleEl = document.querySelector(toggleEl);\n\t\t}\n\n\t\tif (toggleEl.hasAttribute('data-o-toggle--js')) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!config) {\n\t\t\tconfig = {};\n\t\t\t// Try to get config set declaratively on the element\n\t\t\tArray.prototype.forEach.call(toggleEl.attributes, (attr) => {\n\t\t\t\tif (attr.name.indexOf('data-o-toggle') === 0) {\n\t\t\t\t\t// Remove the prefix part of the data attribute name\n\t\t\t\t\tconst key = attr.name.replace('data-o-toggle-', '');\n\t\t\t\t\ttry {\n\t\t\t\t\t\t// If it's a JSON, a boolean or a number, we want it stored like that, and not as a string\n\t\t\t\t\t\t// We also replace all ' with \" so JSON strings are parsed correctly\n\t\t\t\t\t\tconfig[key] = JSON.parse(attr.value.replace(/\\'/g, '\"'));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tconfig[key] = attr.value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t// Set the toggle callback if its a string.\n\t\tif (config.callback && typeof config.callback === 'string') {\n\t\t\t// Error if the callback is a string and a global function of that name does not exist.\n\t\t\tif (typeof window[config.callback] !== 'function') {\n\t\t\t\tthrow new Error(`Could not find o-toggle callback \"${config.callback}\".`);\n\t\t\t}\n\t\t\tthis.callback = window[config.callback];\n\t\t}\n\t\t// Set the toggle callback if its a funciton.\n\t\tif (config.callback && typeof config.callback === 'function') {\n\t\t\tthis.callback = config.callback;\n\t\t}\n\t\t// Error if some callback value has been given but has not been set.\n\t\tif (config.callback && !this.callback) {\n\t\t\tthrow new Error(`The o-toggle callback must be a string or function.`);\n\t\t}\n\n\t\t// Set the toggle element.\n\t\tthis.toggleEl = toggleEl;\n\n\t\tif (this.toggleEl.nodeName === 'A') {\n\t\t\tthis.toggleEl.setAttribute('role', 'button');\n\t\t\tthis.toggleEl.addEventListener('keydown', handleSpaceKeydown.bind(this));\n\t\t\t// If a user drags their mouse slightly when trying to interact with the toggle\n\t\t\t// it will trigger the 'drag and drop' functionality.\n\t\t\t// Regular buttons prevent this and ensure as long as the mouse is still above the\n\t\t\t// button that the click will register.\n\t\t\t// This will help users with motor impairments and those less familiar with a trackpad.\n\t\t\tthis.toggleEl.setAttribute('draggable', 'false');\n\t\t}\n\n\t\tthis.toggle = this.toggle.bind(this);\n\t\tthis.toggleEl.addEventListener('click', this.toggle);\n\n\t\tthis.toggleEl.setAttribute('data-o-toggle--js', 'true');\n\n\t\tthis.targetEl = config.target;\n\t\tif (!(this.targetEl instanceof HTMLElement)) {\n\t\t\tthis.targetEl = document.querySelector(this.targetEl);\n\t\t}\n\n\t\tif (Toggle._targets.get(this.targetEl) === undefined) {\n\t\t\tthis.target = new Toggle.Target(this);\n\t\t\tToggle._targets.set(this.targetEl, this.target);\n\t\t} else {\n\t\t\tthis.target = Toggle._targets.get(this.targetEl);\n\t\t}\n\n\t\tthis.target.addToggle(this);\n\t\tthis.target.close();\n\t}\n\n\topen() {\n\t\tthis.toggleEl.setAttribute('aria-expanded', 'true');\n\t}\n\n\tclose() {\n\t\tthis.toggleEl.setAttribute('aria-expanded', 'false');\n\t}\n\n\t// toggle is bound to the Toggle instance in the constructor\n\ttoggle(e) {\n\n\t\tthis.target.toggle();\n\n\t\tif(e) {\n\t\t\te.preventDefault();\n\t\t}\n\n\t\tif (this.callback){\n\t\t\tconst stateName = this.target.isOpen() ? 'open' : 'close';\n\t\t\tthis.callback(stateName, e);\n\t\t}\n\t}\n\n\tdestroy() {\n\t\tif (this.toggleEl.nodeName === 'A') {\n\t\t\tthis.toggleEl.removeEventListener('keydown', handleSpaceKeydown);\n\t\t}\n\t\tthis.toggleEl.removeEventListener('click', this.toggle);\n\t\tthis.toggleEl.removeAttribute('aria-expanded');\n\t\tthis.toggleEl.removeAttribute('role');\n\t\tthis.toggleEl.removeAttribute('data-o-toggle--js');\n\n\t\tthis.target.removeToggle(this);\n\n\t\tthis.target = undefined;\n\t\tthis.toggleEl = undefined;\n\t\tthis.callback = undefined;\n\t}\n\n\tstatic init(el, config) {\n\t\tif (!el) {\n\t\t\tel = document.body;\n\t\t} else if (!(el instanceof HTMLElement)) {\n\t\t\tel = document.querySelector(el);\n\t\t}\n\t\tconst toggleEls = el.querySelectorAll('[data-o-component=\"o-toggle\"]');\n\t\tconst toggles = [];\n\t\tfor (const toggleEl of toggleEls) {\n\t\t\tif (!toggleEl.hasAttribute('data-o-toggle--js')) {\n\t\t\t\ttoggles.push(new Toggle(toggleEl, config));\n\t\t\t}\n\t\t}\n\t\treturn toggles;\n\t}\n}\n\nToggle.Target = Target;\nexport default Toggle;\n","import Stream from './stream.js';\nimport Count from './count.js';\n\nclass Comments {\n\tconstructor (rootEl, opts) {\n\t\tthis.options = Object.assign({}, {}, opts || Comments.getDataAttributes(rootEl));\n\t\tconst isCount = rootEl.getAttribute('data-o-comments-count') === 'true';\n\t\tif (!this.options.articleId) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.error('Missing required configuration option: `articleId`. Documentation on how to construct an instance of Comments is at https://registry.origami.ft.com/components/o-comments@7.7.3/readme#constructing-an-o-comments');\n\t\t}\n\t\tif (!this.options.articleUrl) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.error('Missing required configuration option: `articleUrl`. Documentation on how to construct an instance of Comments is at https://registry.origami.ft.com/components/o-comments@7.7.3/readme#constructing-an-o-comments');\n\t\t}\n\t\tif (!this.options.title) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.error('Missing required configuration option: `title`. Documentation on how to construct an instance of Comments is at https://registry.origami.ft.com/components/o-comments@7.7.3/readme#constructing-an-o-comments');\n\t\t}\n\n\t\tif (isCount) {\n\t\t\tconst count = new Count(rootEl, this.options);\n\t\t\tcount.renderCount();\n\n\t\t\treturn count;\n\t\t} else {\n\t\t\tconst stream = new Stream(rootEl, this.options);\n\t\t\tstream.init();\n\n\t\t\treturn stream;\n\t\t}\n\t}\n\n\tstatic getCount (id) {\n\t\treturn Count.fetchCount(id);\n\t}\n\n\t/**\n\t * Get the data attributes from the element. If the component is being set up\n\t * declaratively, this method is used to extract the data attributes from the DOM.\n\t *\n\t * @param {HTMLElement} rootEl - The component element in the DOM\n\t * @returns {object} - Data attributes as an object\n\t */\n\tstatic getDataAttributes (rootEl) {\n\t\tif (!(rootEl instanceof HTMLElement)) {\n\t\t\treturn {};\n\t\t}\n\t\treturn Object.keys(rootEl.dataset).reduce((options, key) => {\n\n\t\t\t// Ignore data-o-component\n\t\t\tif (key === 'oComponent') {\n\t\t\t\treturn options;\n\t\t\t}\n\n\t\t\t// Build a concise key and get the option value\n\t\t\tconst shortKey = key.replace(/^oComments(\\w)(\\w+)$/, (m, m1, m2) => m1.toLowerCase() + m2);\n\t\t\tconst value = rootEl.dataset[key];\n\n\t\t\t// Try parsing the value as JSON, otherwise just set it as a string\n\t\t\ttry {\n\t\t\t\toptions[shortKey] = JSON.parse(value.replace(/\\'/g, '\"'));\n\t\t\t} catch (error) {\n\t\t\t\toptions[shortKey] = value;\n\t\t\t}\n\n\t\t\treturn options;\n\t\t}, {});\n\t}\n\n\t/**\n\t * Initialise the component.\n\t *\n\t * @param {(HTMLElement | string)} rootEl - The root element to intialise the component in, or a CSS selector for the root element\n\t * @param {object} [opts={}] - An options object for configuring the component\n\t * @returns {(Comments|Array<Comments>)} - Comments instance(s)\n\t */\n\tstatic init (rootEl, opts) {\n\t\tif (!rootEl) {\n\t\t\trootEl = document.body;\n\t\t}\n\t\tif (!(rootEl instanceof HTMLElement)) {\n\t\t\trootEl = document.querySelector(rootEl);\n\t\t}\n\t\tif (rootEl instanceof HTMLElement && rootEl.matches('[data-o-component=o-comments]')) {\n\t\t\treturn new Comments(rootEl, opts);\n\t\t}\n\t\treturn Array.from(rootEl.querySelectorAll('[data-o-component=\"o-comments\"]'), rootEl => new Comments(rootEl, opts));\n\t}\n}\n\nexport default Comments;\n","import Delegate from 'ftdomdelegate';\nimport viewport from '@financial-times/o-viewport';\nimport utils from './utils.js';\nimport focusable from 'focusable';\n\nconst overlays = {};\n\nconst checkOptions = function (opts) {\n\tif (opts.trigger && !(opts.trigger instanceof HTMLElement)) {\n\t\topts.trigger = document.querySelector(opts.trigger);\n\t}\n\n\tif (opts.heading && (!opts.heading.title || !opts.heading.title.trim())) {\n\t\tthrow new Error(\n\t\t\t'\"o-overlay error\": To have a heading, a non-empty title needs to be set'\n\t\t);\n\t}\n\n\t// Overlays should be modal and layers by default\n\tif (typeof opts.modal === 'undefined') {\n\t\topts.modal = true;\n\t}\n\tif (typeof opts.layer === 'undefined') {\n\t\topts.layer = true;\n\t}\n\n\tif (opts.compact && opts.heading && opts.heading.shaded) {\n\t\tthrow new Error(\n\t\t\t'\"o-overlay error\": Compact overlays can\\'t have a shaded header'\n\t\t);\n\t}\n\n\treturn opts;\n};\n\nconst getOptionsFromTrigger = function (trigger) {\n\tlet opts = {};\n\t// Get config from data attributes set in the trigger if they haven't been passed via JS\n\tif (trigger instanceof HTMLElement) {\n\t\tArray.prototype.forEach.call(trigger.attributes, function (attr) {\n\t\t\tif (attr.name.indexOf('data-o-overlay') === 0) {\n\t\t\t\t// Remove the unnecessary part of the string the first time this is run for each attribute\n\t\t\t\tconst key = attr.name.replace('data-o-overlay-', '');\n\t\t\t\topts = utils.optionsFromKey(key, attr.value, opts);\n\t\t\t}\n\t\t});\n\t\topts.trigger = trigger;\n\t}\n\treturn opts;\n};\n\nconst triggerClickHandler = function (id, ev) {\n\tev.stopPropagation();\n\tconst overlay = overlays[id];\n\tif (overlay) {\n\t\tif (overlay.visible === true) {\n\t\t\toverlay.close();\n\t\t} else {\n\t\t\toverlay.open();\n\t\t}\n\t}\n};\n\nconst isVisible = function (element) {\n\treturn Boolean(element.offsetHeight);\n};\n\nconst focusTrap = function (event) {\n\tconst tabKeyCode = 9;\n\tconst overlayFocusableElements = [].slice\n\t\t.call(\n\t\t\tthis.wrapper.querySelectorAll(focusable)\n\t\t)\n\t\t.filter(element => {\n\t\t\tconst elementVisible = isVisible(element);\n\t\t\t// Inputs for radio and checkboxes are visually hidden,\n\t\t\t// so check the label visibility of inputs too when determining\n\t\t\t// whether to trap focus.\n\t\t\tconst elementLabelVisible =\n\t\t\t\telement.labels && [].slice.call(element.labels).some(l => isVisible(l));\n\t\t\t// When tabbing, the checked radio input of a group is focused, not each radio input.\n\t\t\tconst elementIsUncheckedRadio =\n\t\t\t\telement.type === 'radio' && element.checked !== true;\n\t\t\treturn (\n\t\t\t\t!element.disabled &&\n\t\t\t\t!elementIsUncheckedRadio &&\n\t\t\t\t(elementVisible || elementLabelVisible)\n\t\t\t);\n\t\t});\n\n\tif (overlayFocusableElements.length && event.keyCode === tabKeyCode) {\n\t\tconst lastElement =\n\t\t\toverlayFocusableElements[overlayFocusableElements.length - 1];\n\t\t// Loop focus back to the first element if focus has reached the focusable element\n\t\tif (event.target === lastElement) {\n\t\t\toverlayFocusableElements[0].focus();\n\t\t\tevent.preventDefault();\n\t\t} else if (event.shiftKey && event.target === overlayFocusableElements[0]) {\n\t\t\t// loop to the bottom when shift+tabbing.\n\t\t\tlastElement.focus();\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n};\n\n/**\n * Represents an Overlay.\n */\nclass Overlay {\n\t/**\n\t * Construct an overlay.\n\t *\n\t * @class\n\t * @param {HTMLElement} id - String. A unique identifier for the overlay within the page. (Required)\n\t * @param {object} opts - An options object for configuring the Overlay. This object MUST have either `src` or `html` set. (Required)\n\t * @param {string} opts.heading.title - Your overlay's title\n\t * @param {boolean} opts.heading.visuallyhidetitle - If you want to provide a different title style, this option will prevent the title span from being added to the overlay. (In this case the title is only used for aria labelling) Default: false.\n\t * @param {boolean} opts.heading.shaded - Whether to shade the background of the header. Default: to false\n\t * @param {boolean} opts.modal - Whether the overlay should have modal behaviour or not. Setting this as true will add a translucent shadow between the page and the overlay\n\t * @param {boolean} opts.compact - If true, the .o-overlay--compact class will be added to the overlay that reduces heading font-size and paddings in the content.\n\t * @param {string} opts.src - Either a url from which HTML to populate the overlay can be loaded, or a querySelector string identifying an element from which the textContent should be extracted.\n\t * @param {string} opts.html - String or HTMLElement. Raw HTML (cannot be set declaratively)\n\t * @param {string} opts.trigger - querySelector expression or HTMLElement. When there's a trigger set, a click event handler will be added to it that will open or close the overlay accordingly. (cannot be set declaratively)\n\t * @param {string} opts.zindex - Value of the CSS z-index property of the overlay. Default set via CSS: '10'\n\t * @param {boolean} opts.preventclosing - Prevents closure of overlay via standard x button or escape key. For use when you are directing the user to somewhere else. Only valid with modal set to true.\n\t * @param {boolean} opts.customclose - If you do not use the heading, but want to provide a close button in your html / src (with a class of o-overlay__close), setting customclose to true will attach o-overlay's close handler function to that button.\n\t * @param {string} opts.parentnode - Should be a query selector for a DOM element. If set, the overlay will be appended as a child of this rather than the document body or target. If multiple nodes are matched, it will use the first. If nothing matches this selector, the body will be used.\n\t * @param {boolean} opts.nested - If set to true, the resize, escape, and layer listeners will not be set up. This boolean should be used in conjunction with the parentnode setting to allow an overlay to be positioned within a DOM element rather than overlaid on top of everything. Default: false.\n\t * @param {boolean} opts.nofocus - If set to true, the tabindex will not be set on the wrapper element. Useful in conjunction with the nested and parentnode options. Default: false.\n\t * @param {boolean} opts.fullscreen - If set to true, the overlay will display full screen. This overlay disables scroll on the underlying document and is dismissible with the back button.\n\t * @throws {Error} Will throw an error if the `id` parameter is not unique.\n\t */\n\tconstructor(id, opts) {\n\t\tif (overlays[id]) {\n\t\t\tthrow new Error(\n\t\t\t\t`o-overlay with id \"${id}\" already exists. Creating an overlay twice with the same id may result in unexpected behaviour.`\n\t\t\t);\n\t\t}\n\n\t\tviewport.listenTo('resize');\n\t\tthis.visible = false;\n\t\tthis.id = id;\n\n\t\ttry {\n\t\t\tthis.opts = checkOptions(opts);\n\t\t} catch (e) {\n\t\t\tthis.broadcast('log', 'oErrors', {\n\t\t\t\terror: e,\n\t\t\t});\n\t\t\tthrow e;\n\t\t}\n\n\t\tif (!this.opts) {\n\t\t\tconst noOptError = new Error(\n\t\t\t\t'\"o-overlay error\": Required options have not been set'\n\t\t\t);\n\t\t\tthis.broadcast('log', 'oErrors', {\n\t\t\t\terror: noOptError,\n\t\t\t});\n\t\t\tthrow noOptError;\n\t\t}\n\t\tif (this.opts.trigger) {\n\t\t\tthis.opts.trigger.addEventListener(\n\t\t\t\t'click',\n\t\t\t\ttriggerClickHandler.bind(this.opts.trigger, id),\n\t\t\t\tfalse\n\t\t\t);\n\t\t\tthis.context = document.body;\n\t\t} else {\n\t\t\tif (document.querySelector(this.opts.parentnode)) {\n\t\t\t\tthis.context = document.querySelector(this.opts.parentnode);\n\t\t\t} else {\n\t\t\t\tthis.context = document.body;\n\t\t\t}\n\t\t}\n\n\t\tthis.delegates = {\n\t\t\tdoc: new Delegate(),\n\t\t\twrap: new Delegate(),\n\t\t\tcontext: new Delegate(),\n\t\t};\n\n\t\t// Add this overlay to the overlays hashmap\n\t\toverlays[id] = this;\n\t}\n\n\topen() {\n\t\t// Prevent page scroll for open modals or fullscreen overlays.\n\t\tif (this.opts.modal || this.opts.fullscreen) {\n\t\t\tthis.originalOverflow = document.documentElement.style.overflow;\n\t\t\tdocument.documentElement.style.overflow = 'hidden';\n\t\t}\n\n\t\t// A full screen overlay can look like a new page so add to history.\n\t\t// The browser back button can then be used to close a full-screen overlay.\n\t\tif (window.history.pushState && this.opts.fullscreen) {\n\t\t\t// Push overlay state to history.\n\t\t\twindow.history.pushState(\n\t\t\t\t{[`o-overlay-${this.id}`]: 'fullscreen'},\n\t\t\t\twindow.location.href\n\t\t\t);\n\t\t\t// When history changes check for the overlay and close it.\n\t\t\tthis.popstateHandler = function () {\n\t\t\t\tif (\n\t\t\t\t\twindow.history.state &&\n\t\t\t\t\twindow.history.state[`o-overlay-${this.id}`]\n\t\t\t\t) {\n\t\t\t\t\tthis.close();\n\t\t\t\t}\n\t\t\t}.bind(this);\n\t\t\twindow.addEventListener('popstate', this.popstateHandler);\n\t\t}\n\n\t\tif (this.opts.trigger) {\n\t\t\tthis.opts.trigger.setAttribute('aria-pressed', 'true');\n\t\t}\n\n\t\tif (!this.content) {\n\t\t\tconst overlay = this;\n\t\t\tthis.loadContent(function (html) {\n\t\t\t\toverlay.opts.html = html;\n\t\t\t\tif (!overlay.opts.html) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t'\"o-overlay error\": Content for the overlay needs to be set via the \"html\" or the \"src\" option.'\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\toverlay.render();\n\t\t\t});\n\t\t} else {\n\t\t\tthis.show();\n\t\t}\n\t}\n\n\tloadContent(callback) {\n\t\tif (!this.opts.html && this.opts.src) {\n\t\t\tif (/^(https?\\:\\/)?\\//.test(this.opts.src)) {\n\t\t\t\tutils.copyContentFromUrl(this.opts.src, function (html) {\n\t\t\t\t\tcallback(html);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tutils.copyContentFromElement(\n\t\t\t\t\tdocument.querySelector(this.opts.src),\n\t\t\t\t\tfunction (html) {\n\t\t\t\t\t\tcallback(html);\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\tcallback(this.opts.html);\n\t\t}\n\t}\n\n\trender() {\n\t\tconst wrapperEl = document.createElement('div');\n\t\twrapperEl.className = 'o-overlay';\n\t\twrapperEl.classList.add('o-overlay--' + this.id.replace(' ', '-'));\n\n\t\t// Add custom classes to the newly created overlay wrapper.\n\t\tif (this.opts.class) {\n\t\t\ttry {\n\t\t\t\twrapperEl.classList.add(...this.opts.class.split(' '));\n\t\t\t} catch (error) {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.warn(`Could not add the classes: ${this.opts.class}`);\n\t\t\t}\n\t\t}\n\n\t\tif (this.opts.fullscreen) {\n\t\t\twrapperEl.classList.add('o-overlay--full-screen');\n\t\t}\n\n\t\twrapperEl.setAttribute('role', 'dialog');\n\t\tif (this.opts.zindex) {\n\t\t\twrapperEl.style.zIndex = this.opts.zindex;\n\t\t}\n\t\tthis.wrapper = wrapperEl;\n\n\t\tif (this.opts.heading) {\n\t\t\tconst heading = document.createElement('header');\n\t\t\tconst headingId = this.opts.heading.title\n\t\t\t\t.toLowerCase()\n\t\t\t\t// replace non-ascii alphanums with hyphens\n\t\t\t\t.replace(/[^a-z0-9-]/g, '-')\n\t\t\t\t// replace repeated hyphens with a single hyphen\n\t\t\t\t.replace(/[\\s-]+/g, '-');\n\t\t\theading.classList.add('o-overlay__heading');\n\t\t\twrapperEl.setAttribute('aria-labelledby', headingId);\n\n\t\t\tif (this.opts.heading.shaded) {\n\t\t\t\theading.classList.add('o-overlay__heading--shaded');\n\t\t\t}\n\n\t\t\tif (!this.opts.preventclosing) {\n\t\t\t\tconst button = document.createElement('button');\n\t\t\t\tbutton.className = 'o-overlay__close';\n\t\t\t\tbutton.setAttribute('aria-label', 'Close');\n\t\t\t\tbutton.setAttribute('title', 'Close');\n\n\t\t\t\tif (!this.opts.nofocus) {\n\t\t\t\t\tbutton.setAttribute('tabindex', '0');\n\t\t\t\t}\n\t\t\t\theading.appendChild(button);\n\t\t\t}\n\n\t\t\tconst title = document.createElement('span');\n\t\t\ttitle.setAttribute('role', 'heading');\n\t\t\ttitle.setAttribute('aria-level', '1');\n\t\t\ttitle.className = 'o-overlay__title';\n\t\t\ttitle.innerHTML = this.opts.heading.title;\n\t\t\ttitle.setAttribute('id', headingId);\n\n\t\t\tif (this.opts.heading.visuallyhidetitle) {\n\t\t\t\ttitle.classList.add('o-overlay__title--sr-only');\n\t\t\t}\n\n\t\t\theading.appendChild(title);\n\t\t\twrapperEl.appendChild(heading);\n\t\t}\n\n\t\tif (this.opts.tooltip) {\n\t\t\tconst button = document.createElement('a');\n\t\t\tbutton.className = 'o-overlay__close';\n\t\t\tbutton.setAttribute('role', 'button');\n\t\t\tbutton.setAttribute('href', '#void');\n\t\t\tbutton.setAttribute('aria-label', 'Close');\n\t\t\tbutton.setAttribute('title', 'Close');\n\t\t\tif (!this.opts.nofocus) {\n\t\t\t\tbutton.setAttribute('tabindex', '0');\n\t\t\t}\n\n\t\t\twrapperEl.appendChild(button);\n\t\t\twrapperEl.classList.add('o-overlay--compact');\n\t\t}\n\n\t\tconst content = document.createElement('section');\n\t\tcontent.className = 'o-overlay__content';\n\t\twrapperEl.appendChild(content);\n\n\t\tthis.content = content;\n\n\t\tif (this.opts.compact) {\n\t\t\twrapperEl.classList.add('o-overlay--compact');\n\t\t}\n\n\t\tthis.show();\n\t}\n\n\t_trapFocus() {\n\t\t// Trap the focus inside the overlay so keyboard navigation doesn't escape the overlay\n\t\tdocument.addEventListener('keydown', focusTrap.bind(this));\n\t}\n\n\t/**\n\t * Show the overlay\n\t *\n\t * @fires oOverlay#ready\n\t */\n\tshow() {\n\t\tif (this.opts.modal) {\n\t\t\tthis.wrapper.classList.add('o-overlay--modal');\n\t\t\tconst shadow = document.createElement('div');\n\t\t\tshadow.className = 'o-overlay-shadow';\n\t\t\tthis.shadow = shadow;\n\n\t\t\tif (this.opts.zindex) {\n\t\t\t\tshadow.style.zIndex = this.opts.zindex - 1;\n\t\t\t}\n\n\t\t\tdocument.body.appendChild(shadow);\n\t\t}\n\n\t\tthis.delegates.doc.root(document.body);\n\t\tthis.delegates.wrap.root(this.wrapper);\n\t\tthis.delegates.context.root(this.context);\n\n\t\tthis.closeHandler = this.close.bind(this);\n\n\t\t// If the overlay is nested within a DOM element don't attach the viewport resize listeners.\n\t\tif (!this.opts.nested) {\n\t\t\tthis.resizeListenerHandler = this.resizeListener.bind(this);\n\t\t\tthis.delegates.doc.on(\n\t\t\t\t'oViewport.resize',\n\t\t\t\t'body',\n\t\t\t\tthis.resizeListenerHandler\n\t\t\t);\n\n\t\t\tthis.closeOnEscapePressHandler = this.closeOnEscapePress.bind(this);\n\t\t\tthis.delegates.doc.on('keyup', this.closeOnEscapePressHandler);\n\t\t}\n\n\t\tif (this.opts.layer) {\n\t\t\tthis.closeOnNewLayerHandler = this.closeOnNewLayer.bind(this);\n\t\t\tthis.delegates.context.on('oOverlay.layerOpen', this.closeOnNewLayerHandler);\n\n\t\t\tthis.broadcast('layerOpen');\n\t\t}\n\n\t\tif (this.opts.heading || this.opts.tooltip || this.opts.customclose) {\n\t\t\tthis.delegates.wrap.on('click', '.o-overlay__close', this.closeHandler);\n\t\t\tthis.delegates.wrap.on(\n\t\t\t\t'touchend',\n\t\t\t\t'.o-overlay__close',\n\t\t\t\tthis.closeHandler\n\t\t\t);\n\t\t}\n\n\t\tthis.closeOnExternalClickHandler = this.closeOnExternalClick.bind(this);\n\t\tthis.delegates.doc.on('click', 'body', this.closeOnExternalClickHandler);\n\t\tthis.delegates.doc.on('touchend', 'body', this.closeOnExternalClickHandler);\n\n\t\tthis.context.appendChild(this.wrapper);\n\n\t\t// Give the overlay focus\n\t\tif (!this.opts.nofocus) {\n\t\t\tthis.wrapper.setAttribute('tabindex', '0');\n\t\t\tthis.wrapper.style.outline = 0;\n\t\t}\n\n\t\t// Renders content after overlay has been added so css is applied before that\n\t\t// Thay way if an element has autofocus, the window won't scroll to the bottom\n\t\t// in Safari as the overlay is already in position\n\t\twindow.requestAnimationFrame(\n\t\t\tfunction () {\n\t\t\t\tif (!this.content.innerHTML) {\n\t\t\t\t\tif (typeof this.opts.html === 'string') {\n\t\t\t\t\t\tthis.content.innerHTML = this.opts.html;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.content.appendChild(this.opts.html);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis.width = this.getWidth();\n\t\t\t\tthis.height = this.getHeight();\n\n\t\t\t\t// If the overlay is nested within a DOM element don't resize according to the viewport.\n\t\t\t\tif (!this.opts.nested) {\n\t\t\t\t\tthis.realign();\n\t\t\t\t}\n\t\t\t\tthis.visible = true;\n\t\t\t\tthis.wrapper.focus();\n\t\t\t\t/**\n\t\t\t\t * Ready event\n\t\t\t\t *\n\t\t\t\t * @event oOverlay#ready\n\t\t\t\t * @type {object}\n\t\t\t\t * @property {Overlay} instance - the firing instance\n\t\t\t\t */\n\t\t\t\tthis.broadcast('ready', 'oOverlay', {\n\t\t\t\t\tinstance: this\n\t\t\t\t});\n\n\t\t\t\t// Add o-tracking integration\n\t\t\t\tthis.broadcast('event', 'oTracking', {\n\t\t\t\t\tcategory: 'overlay',\n\t\t\t\t\taction: 'show',\n\t\t\t\t\toverlay_id: this.id,\n\t\t\t\t});\n\n\t\t\t\tthis._trapFocus();\n\t\t\t}.bind(this)\n\t\t);\n\t}\n\n\tclose() {\n\t\tthis.delegates.doc.destroy();\n\t\tthis.delegates.wrap.destroy();\n\t\tthis.delegates.context.destroy();\n\n\t\t// Restore document scroll when modals or fullscreen overlays are closed.\n\t\tif (this.opts.modal || this.opts.fullscreen) {\n\t\t\tdocument.documentElement.style.overflow = this.originalOverflow;\n\t\t}\n\n\t\t// Remove fullscreen popstate handler and re-enable document scroll.\n\t\tif (this.opts.fullscreen) {\n\t\t\twindow.removeEventListener('popstate', this.popstateHandler);\n\t\t}\n\t\t// Remove state from history if fullscreen state is still in history.\n\t\t// E.g.The close button was clicked directly rather than the browser back button.\n\t\tif (\n\t\t\twindow.history.pushState &&\n\t\t\twindow.history.state &&\n\t\t\twindow.history.state[`o-overlay-${this.id}`] === 'fullscreen'\n\t\t) {\n\t\t\twindow.history.back();\n\t\t}\n\n\t\tviewport.stopListeningTo('resize');\n\n\t\tthis.broadcast('destroy');\n\t\tthis.broadcast('event', 'oTracking', {\n\t\t\tcategory: 'overlay',\n\t\t\taction: 'close',\n\t\t\toverlay_id: this.id,\n\t\t});\n\n\t\tthis.context.removeChild(this.wrapper);\n\t\tif (this.opts.modal) {\n\t\t\tthis.shadow.parentNode.removeChild(this.shadow);\n\t\t}\n\n\t\t// Put focus back on the triggering element\n\t\tif (this.opts.trigger) {\n\t\t\tthis.opts.trigger.focus();\n\t\t\tthis.opts.trigger.setAttribute('aria-pressed', 'false');\n\t\t}\n\t\tdocument.removeEventListener('keydown', focusTrap);\n\n\t\tthis.visible = false;\n\n\t\tif (this.opts.layer) {\n\t\t\tthis.broadcast('layerClose');\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tcloseOnExternalClick(ev) {\n\t\tif (\n\t\t\t!this.wrapper.contains(ev.target) &&\n\t\t\t!this.opts.modal &&\n\t\t\tthis.opts.trigger &&\n\t\t\t!this.opts.trigger.contains(ev.target)\n\t\t) {\n\t\t\tthis.close();\n\t\t}\n\t}\n\n\tcloseOnEscapePress(ev) {\n\t\tif (!this.opts.preventclosing && ev.keyCode === 27) {\n\t\t\tthis.close();\n\t\t}\n\t}\n\n\tcloseOnNewLayer(ev) {\n\t\tif (!ev.detail || ev.detail.el !== this) {\n\t\t\tthis.close();\n\t\t}\n\t}\n\n\tresizeListener(ev) {\n\t\tif (!this.wrapper.contains(ev.target)) {\n\t\t\tthis.respondToWindow();\n\t\t}\n\t}\n\n\tbroadcast(eventType, namespace, detail) {\n\t\tnamespace = namespace || 'oOverlay';\n\n\t\tconst isLayerEvent = eventType === 'layerOpen' || eventType === 'layerClose';\n\t\tconst target = isLayerEvent ? this.context : this.wrapper || document.body;\n\n\t\tdetail = detail || {};\n\n\t\tif (namespace !== 'oTracking') {\n\t\t\tdetail.el = this;\n\t\t}\n\n\t\ttarget.dispatchEvent(\n\t\t\tnew CustomEvent(namespace + '.' + eventType, {\n\t\t\t\tdetail: detail,\n\t\t\t\tbubbles: true,\n\t\t\t})\n\t\t);\n\t}\n\n\trealign(dimension, size) {\n\t\t// Realign both height and width according to the window by default.\n\t\tif (!dimension && !size) {\n\t\t\tthis._align('width', viewport.getSize().width);\n\t\t\tthis._align('height', viewport.getSize().height);\n\t\t\treturn;\n\t\t}\n\n\t\t// For a given dimension realign according to the viewport by default.\n\t\tif (dimension && !size) {\n\t\t\tthis._align(dimension, viewport.getSize()['dimension']);\n\t\t\treturn;\n\t\t}\n\n\t\tthis._align(dimension, size);\n\t}\n\n\t_align(dimension, size) {\n\t\tif (dimension !== 'width' && dimension !== 'height') {\n\t\t\tthrow new Error(\n\t\t\t\t`Can not realign the overlay for the dimension \"${dimension}\". \"height\" or \"width\" expected.`\n\t\t\t);\n\t\t}\n\n\t\tif (isNaN(size)) {\n\t\t\tthrow new Error(\n\t\t\t\t`Can not realign the overlay for the size ${size}. A number is expected.`\n\t\t\t);\n\t\t}\n\n\t\tconst edge = dimension === 'width' ? 'left' : 'top';\n\n\t\t// Update overlay size for realignment calculation.\n\t\t// We may be realigning because the content within the overlay has changed.\n\t\tthis.width = this.getWidth();\n\t\tthis.height = this.getHeight();\n\n\t\t// E.g. viewport dimension <= overlay dimension\n\t\tif (size <= this[dimension]) {\n\t\t\tthis.wrapper.classList.add('o-overlay--full-' + dimension);\n\t\t\tthis.wrapper.style[edge] = '0';\n\t\t\tthis.wrapper.style['margin' + utils.capitalise(edge)] = 0;\n\t\t\tif (dimension === 'height') {\n\t\t\t\t// Set the exact height that the content of the overlay will have which is the total\n\t\t\t\t// height of the overlay minus the heading if there is one. If height = 100%, the\n\t\t\t\t// heading is part of that 100%, so some content is truncated.\n\t\t\t\tconst borderHeight =\n\t\t\t\t\tthis.wrapper.offsetHeight - this.wrapper.clientHeight;\n\t\t\t\tthis.content.style.height =\n\t\t\t\t\tthis.wrapper.offsetHeight -\n\t\t\t\t\t(this.opts.heading\n\t\t\t\t\t\t? this.wrapper.querySelector('header').offsetHeight\n\t\t\t\t\t\t: 0) -\n\t\t\t\t\tborderHeight +\n\t\t\t\t\t'px';\n\t\t\t}\n\t\t} else {\n\t\t\tif (dimension === 'height') {\n\t\t\t\t// Remove the property and let the overlay extend to its content\n\t\t\t\tthis.content.style.height = null;\n\t\t\t}\n\t\t\tthis.wrapper.classList.remove('o-overlay--full-' + dimension);\n\t\t\tthis.wrapper.style['margin' + utils.capitalise(edge)] =\n\t\t\t\t-(this.wrapper['offset' + utils.capitalise(dimension)] / 2) + 'px';\n\n\t\t\t// Set alignment in JavaScript (not via CSS) after all other styles have been applied\n\t\t\t// so that browsers compute it properly. If it's applied earlier, when the negative\n\t\t\t// margin is calculated, the overlay might not fit, so it shrinks and the negative\n\t\t\t// margin would be incorrect\n\t\t\tthis.wrapper.style[edge] = '50%';\n\t\t}\n\t}\n\n\trespondToWindow() {\n\t\tthis.realign();\n\t}\n\n\tfills(dimension) {\n\t\treturn this.wrapper.classList.contains('o-overlay--full-' + dimension);\n\t}\n\n\tdestroy() {\n\t\tif (this.visible === true) {\n\t\t\tthis.close();\n\t\t}\n\t\tif (this.opts.trigger) {\n\t\t\tthis.opts.trigger.removeEventListener('click', triggerClickHandler);\n\t\t}\n\t\tdelete overlays[this.id];\n\t}\n\n\tgetHeight() {\n\t\tconst borderHeight = this.wrapper.offsetHeight - this.wrapper.clientHeight;\n\t\treturn (\n\t\t\tthis.content.scrollHeight +\n\t\t\t(this.opts.heading\n\t\t\t\t? this.wrapper.querySelector('header').offsetHeight\n\t\t\t\t: 0) +\n\t\t\tborderHeight\n\t\t);\n\t}\n\n\tgetWidth() {\n\t\tconst borderWidth = this.wrapper.offsetWidth - this.wrapper.clientWidth;\n\t\treturn this.content.scrollWidth + borderWidth;\n\t}\n\n\tstatic init(el) {\n\t\tif (!el) {\n\t\t\tel = document.body;\n\t\t}\n\t\tif (!(el instanceof HTMLElement)) {\n\t\t\tel = document.querySelector(el);\n\t\t}\n\t\tconst triggers = el.querySelectorAll('.o-overlay-trigger');\n\t\tconst overlaysArray = [];\n\t\tfor (let t = 0; t < triggers.length; t++) {\n\t\t\t// There can only be one overlay per trigger when set declaratively, so the first trigger found for a given overlay will be the one used to create the overlay\n\t\t\tif (!overlays[triggers[t].getAttribute('data-o-overlay-id')]) {\n\t\t\t\toverlaysArray.push(\n\t\t\t\t\tnew Overlay(\n\t\t\t\t\t\ttriggers[t].getAttribute('data-o-overlay-id'),\n\t\t\t\t\t\tgetOptionsFromTrigger(triggers[t])\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\treturn overlaysArray;\n\t}\n\n\tstatic destroy() {\n\t\tconst overlayIds = Object.keys(overlays);\n\t\toverlayIds.forEach(function (id) {\n\t\t\toverlays[id].destroy();\n\t\t});\n\t}\n\n\tstatic getOverlays() {\n\t\treturn overlays;\n\t}\n}\n\nexport default Overlay;\n","class Count {\n\t/**\n\t * Class constructor.\n\t *\n\t * @param {HTMLElement} [countEl] - The component element in the DOM\n\t * @param {object} [opts={}] - An options object for configuring the component\n\t */\n\tconstructor (countEl, opts = {}) {\n\t\tthis.countEl = countEl;\n\t\tthis.articleId = opts.articleId;\n\t\tthis.useStagingEnvironment = Boolean(opts.useStagingEnvironment);\n\t}\n\n\t/**\n\t * Render a comment count instance.\n\t *\n\t * @access private\n\t * @returns {Promise<void>} A promise that resolves when the count has been updated\n\t */\n\trenderCount () {\n\t\tif (this.countEl && !(this.countEl instanceof HTMLElement)) {\n\t\t\tthis.countEl = document.querySelector(this.countEl);\n\t\t}\n\n\t\tif (!this.countEl) {\n\t\t\tthrow new Error('Element must be a HTMLElement');\n\t\t}\n\n\t\treturn Count.fetchCount(this.articleId, this.useStagingEnvironment)\n\t\t\t.then((count) => {\n\t\t\t\tthis.countEl.textContent = count;\n\n\t\t\t\tconst countLabel = Count.getCountLabel(count);\n\t\t\t\tthis.countEl.setAttribute('aria-label', countLabel);\n\t\t\t});\n\t}\n\n\t/**\n\t * Get the aria-label for the count element.\n\t *\n\t * @param {number} count - The comment count\n\t * @returns {string} The string that should be used as the aria-label\n\t */\n\tstatic getCountLabel (count) {\n\t\tif (count === 1) {\n\t\t\treturn 'There is 1 comment, click to go to the comment section.';\n\t\t} else {\n\t\t\treturn `There are ${count} comments, click to go to the comment section.`;\n\t\t}\n\t}\n\n\tstatic fetchCount (id, useStaging) {\n\t\tconst url = `https://comments-api.ft.com/story/count/${id}` + (useStaging ? '?staging=1' : '');\n\n\t\treturn fetch(url)\n\t\t\t.then(res => res.json())\n\t\t\t.then(json => json.commentCount)\n\t\t\t.catch(error => {\n\t\t\t\tthrow new Error(`Error with fetching comment count: ${error.message}`);\n\t\t\t});\n\t}\n}\n\nexport default Count;\n","import Toggle from '@financial-times/o-toggle';\nimport layout from './layout.js';\n\n\nconst COLLAPSIBLE_BREAKPOINTS = ['default', 'XS', 'S'];\n\nclass Footer {\n\n\tconstructor (footerEl) {\n\t\tif (!footerEl) {\n\t\t\tfooterEl = document.querySelector('[data-o-component=\"o-footer\"]');\n\t\t} else if (typeof footerEl === 'string') {\n\t\t\tfooterEl = document.querySelector(footerEl);\n\t\t}\n\n\t\tthis.footerEl = footerEl;\n\n\t\tlayout(breakpoint => {\n\t\t\tconst shouldCollapse = Footer.shouldCollapse(breakpoint);\n\n\t\t\tif (shouldCollapse && !this._toggles) {\n\t\t\t\treturn this.setup();\n\t\t\t}\n\n\t\t\tif (!shouldCollapse && this._toggles) {\n\t\t\t\treturn this.destroy();\n\t\t\t}\n\t\t});\n\n\t\tthis.footerEl.removeAttribute('data-o-footer--no-js');\n\t\tthis.footerEl.setAttribute('data-o-footer--js', '');\n\t}\n\n\tsetup () {\n\t\tthis._toggles = [];\n\n\t\tconst toggleEls = this.footerEl.querySelectorAll('[aria-controls]');\n\n\t\tArray.prototype.forEach.call(toggleEls, toggleEl => {\n\t\t\tconst target = document.getElementById(toggleEl.getAttribute('aria-controls'));\n\t\t\ttoggleEl.setAttribute('role', 'button');\n\t\t\ttoggleEl.setAttribute('tabindex', '0');\n\t\t\tthis._toggles.push(new Toggle(toggleEl, { target }));\n\t\t});\n\t}\n\n\tdestroy () {\n\t\tthis._toggles.forEach(toggle => toggle.destroy());\n\t\tthis._toggles = null;\n\t}\n\n\tstatic get collapsibleBreakpoints(){\n\t\treturn COLLAPSIBLE_BREAKPOINTS;\n\t}\n\n\tstatic shouldCollapse(breakpoint) {\n\t\treturn COLLAPSIBLE_BREAKPOINTS.indexOf(breakpoint) !== -1;\n\t}\n\n\tstatic init (rootEl) {\n\t\tif (!rootEl) {\n\t\t\trootEl = document.body;\n\t\t} else if (typeof rootEl === 'string') {\n\t\t\trootEl = document.querySelector(rootEl);\n\t\t}\n\n\t\tconst footerEl = rootEl.querySelector('[data-o-component=\"o-footer\"]');\n\n\t\tif (footerEl) {\n\t\t\treturn new Footer(footerEl);\n\t\t}\n\t}\n}\n\nexport default Footer;\n","/* eslint-disable no-console */\nconst missingDataMessage = 'Could not find layout information. ' +\n\t'You may need to include o-grid css. See the README (https://registry.origami.ft.com/components/o-grid/readme) ' +\n\t'for more information.';\n\n/**\n * Grab grid properties\n *\n * @returns {object} layout names and gutter widths\n */\nfunction getGridProperties() {\n\tconst properties = getGridFromDoc('after');\n\tif (Object.keys(properties).length === 0) {\n\t\tconsole.warn(missingDataMessage);\n\t}\n\treturn properties;\n}\n\n/**\n * Get all layout sizes.\n * CSS must be included so JavaScript can retrieve layout information.\n * See the README for more information.\n *\n * @returns {object} layout names and sizes\n */\nfunction getGridBreakpoints() {\n\tconst breakpoints = getGridFromDoc('before');\n\tif (Object.keys(breakpoints).length === 0) {\n\t\tconsole.warn(missingDataMessage);\n\t}\n\treturn breakpoints;\n}\n\n/**\n * Grab grid properties surfaced in html:after and html:before's content\n *\n * @param {string} position Whether to get all properties in :before, or current properties in :after\n * @returns {object} layout names and gutter widths\n */\nfunction getGridFromDoc(position) {\n\t// Contained in a try/catch as it should not error if o-grid styles are not (deliberately or accidentally) loaded\n\t// e.g. o-tracking will always try to read this property, but the page is not obliged to use o-grid for layout\n\ttry {\n\t\tlet gridProperties = window.getComputedStyle(document.documentElement, ':' + position).getPropertyValue('content');\n\t\t// Firefox computes: \"{\\\"foo\\\": \\\"bar\\\"}\"\n\t\t// We want readable JSON: {\"foo\": \"bar\"}\n\t\tgridProperties = gridProperties.replace(/'/g, '').replace(/\\\\/g, '').replace(/^\"/, '').replace(/\"$/, '');\n\t\treturn JSON.parse(gridProperties);\n\t} catch (e) {\n\t\treturn {};\n\t}\n}\n\n/**\n * Grab the current layout.\n * CSS must be included so JavaScript can retrieve layout information.\n * See the README for more information.\n *\n * @returns {string} Layout name\n */\nfunction getCurrentLayout() {\n\treturn getGridProperties().layout;\n}\n\n/**\n * Grab the current space between columns.\n * CSS must be included so JavaScript can retrieve layout information.\n * See the README for more information.\n *\n * @returns {string} Gutter width in pixels\n */\nfunction getCurrentGutter() {\n\treturn getGridProperties().gutter;\n}\n\n/**\n * This sets MediaQueryListeners on all the o-grid breakpoints\n * and fires a `o-grid.layoutChange` event on layout change.\n * CSS must be included so JavaScript can retrieve layout information.\n * See the README for more information.\n *\n * @returns {void}\n */\nfunction enableLayoutChangeEvents() {\n\t// Create a map containing all breakpoints exposed via html:before\n\tconst gridLayouts = getGridBreakpoints();\n\t// eslint-disable-next-line no-prototype-builtins\n\tif (gridLayouts.hasOwnProperty('layouts')) {\n\t\tconst layouts = gridLayouts.layouts;\n\t\tconst breakpoints = [\n\t\t\t...Object.entries(layouts),\n\t\t\t['default', '240px']\n\t\t].sort((a, b) => parseFloat(a[1]) - parseFloat(b[1]));\n\n\t\tconst setupQuery = (query, size) => {\n\t\t\t// matchMedia listener handler: Dispatch `o-grid.layoutChange` event if a match\n\t\t\tconst handleMQChange = mql => {\n\t\t\t\tif (mql.matches) {\n\t\t\t\t\twindow.dispatchEvent(new CustomEvent('o-grid.layoutChange', {\n\t\t\t\t\t\tdetail: {\n\t\t\t\t\t\t\tlayout: size,\n\t\t\t\t\t\t}\n\t\t\t\t\t}));\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconst mql = window.matchMedia(query);\n\t\t\tmql.addListener(handleMQChange);\n\t\t\thandleMQChange(mql);\n\t\t};\n\n\t\t// Generate media queries for each\n\t\tconst decr1 = val => `${Number(val.replace('px', '') - 1)}px`;\n\t\tfor (let index = 0; index < breakpoints.length; index++) {\n\t\t\tconst [layoutName, layoutWidth] = breakpoints[index];\n\t\t\tconst isLast = index === breakpoints.length - 1;\n\t\t\tif (isLast) {\n\t\t\t\tsetupQuery(`(min-width: ${layoutWidth})`, layoutName);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst [,nextLayoutWidth] = breakpoints[index + 1];\n\t\t\tsetupQuery(`(min-width: ${layoutWidth}) and (max-width: ${decr1(nextLayoutWidth)})`, layoutName);\n\t\t}\n\t} else {\n\t\tconsole.error('Could not enable grid layout change events. Include o-grid css. See the README (https://registry.origami.ft.com/components/o-grid/readme) for more details.');\n\t}\n}\n\nexport {\n\tgetCurrentLayout,\n\tgetCurrentGutter,\n\tgetGridBreakpoints,\n\tenableLayoutChangeEvents\n};\n\nexport default {\n\tgetCurrentLayout,\n\tgetCurrentGutter,\n\tgetGridBreakpoints,\n\tenableLayoutChangeEvents\n};\n","import DomDelegate from 'ftdomdelegate';\n\nconst socialUrls = {\n\ttwitter: \"https://twitter.com/intent/tweet?url={{url}}&text={{title}}&related={{relatedTwitterAccounts}}&via=FT\",\n\tfacebook: \"http://www.facebook.com/sharer.php?u={{url}}\",\n\tlinkedin: \"http://www.linkedin.com/shareArticle?mini=true&url={{url}}&title={{title}}+%7C+{{titleExtra}}&summary={{summary}}&source=Financial+Times\",\n\tpinterest: \"http://www.pinterest.com/pin/create/button/?url={{url}}&description={{title}}\",\n\twhatsapp: \"whatsapp://send?text={{title}}%20({{titleExtra}})%20-%20{{url}}\",\n\tlink: \"{{url}}\",\n\tenterpriseSharing: \"{{url}}\",\n};\n\nconst descriptiveLinkText = {\n\ttwitter: 'Share {{title}} on Twitter (opens a new window)',\n\tfacebook: 'Share {{title}} on Facebook (opens a new window)',\n\tlinkedin: 'Share {{title}} on LinkedIn (opens a new window)',\n\tpinterest: 'Share {{title}} on Pinterest (opens a new window)',\n\twhatsapp: 'Share {{title}} on Whatsapp (opens a new window)',\n\tlink: 'Open link in new window',\n\tenterpriseSharing: 'Share {{title}} with your Enterprise Sharing tools (opens a new window)',\n};\n\n/**\n * The `oShare.open` open event fires when a social network share action is\n * triggered, to open a new window.\n *\n * @event \"oShare.open\"\n * @type {object}\n * @property {boolean} share - The o-share instance.\n * @property {boolean} action - The kind of share i.e. \"social\".\n * @property {boolean} url - The social share url opened.\n */\n\n/**\n * The `oShare.ready` fires when a o-share instance has been initialised.\n *\n * @event \"oShare.ready\"\n * @type {object}\n * @property {boolean} share - The initialised o-share instance.\n */\n\n/**\n * @class Share\n * @param {(HTMLElement|string)} rootEl [el=document.body] - Element where to search for an o-share component. You can pass an HTMLElement or a selector string\n * @param {object} config - Optional\n * @param {string} config.url - Optional, url to share\n * @param {string} config.title - Optional, title to be used in social network sharing\n * @param {string} config.titleExtra - Optional, extra bit to add to the title for some social networks\n * @param {string} config.summary - Optional, summary of the page that's being shared\n * @param {string} config.relatedTwitterAccounts - Optional, extra information for sharing on Twitter\n * @param {object[]} config.links - Optional, array of strings of supported social network names that you want rendered\n */\nfunction Share(rootEl, config) {\n\tconst oShare = this;\n\tconst openWindows = {};\n\n\t/**\n\t * Helper function to dispatch namespaced events, namespace defaults to oShare\n\t *\n\t * @param {string} eventName - event to dispatch\n\t * @param {object} data - the payload\n\t * @param {string} namespace - the namespace for the event\n\t * @returns {void}\n\t * @private\n\t */\n\tfunction dispatchCustomEvent(eventName, data = {}, namespace = 'oShare') {\n\t\toShare.rootEl.dispatchEvent(new CustomEvent(namespace + '.' + eventName, {\n\t\t\tdetail: data,\n\t\t\tbubbles: true\n\t\t}));\n\t}\n\n\t/**\n\t * Click event handler that checks the event target is an o-share action\n\t *\n\t * @param {Event} ev - The event to handle\n\t * @returns {undefined}\n\t * @private\n\t */\n\tfunction handleClick(ev) {\n\t\tconst actionEl = ev.target.closest('li.o-share__action');\n\n\t\tif (oShare.rootEl.contains(actionEl) && actionEl.querySelector('a[href]')) {\n\t\t\tev.preventDefault();\n\t\t\tev.stopPropagation();\n\n\t\t\tconst url = actionEl.querySelector('a[href]').href;\n\t\t\tconst shareLocation = oShare.rootEl.dataset.oShareLocation || '';\n\n\t\t\tdispatchCustomEvent('event', {\n\t\t\t\tcategory: 'share',\n\t\t\t\taction: 'click',\n\t\t\t\tbutton: actionEl.textContent.trim().toLowerCase(),\n\t\t\t\tlocation: shareLocation\n\t\t\t}, 'oTracking');\n\n\t\t\tshareSocial(url);\n\t\t}\n\t}\n\n\t/**\n\t * Event handler for social network actions. Opens up a new window for that social network and dispatched the 'oShare.open' event\n\t *\n\t * @private\n\t * @param {string} url - URL to be loaded in the new window\n\t * @returns {undefined}\n\t * @fires \"oShare.open\"\n\t */\n\tfunction shareSocial(url) {\n\t\tif (url) {\n\t\t\tif (openWindows[url] && !openWindows[url].closed) {\n\t\t\t\topenWindows[url].focus();\n\t\t\t} else {\n\t\t\t\topenWindows[url] = window.open(url, '', 'width=646,height=436');\n\t\t\t\topenWindows[url].opener = null;\n\t\t\t}\n\n\t\t\tdispatchCustomEvent('open', {\n\t\t\t\tshare: oShare,\n\t\t\t\taction: \"social\",\n\t\t\t\turl: url\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Transforms the default social urls\n\t *\n\t * @private\n\t * @param {string} socialNetwork - Name of the social network that we support (e.g. twitter, facebook, linkedin, pinterest)\n\t * @returns {string} - the generated url\n\t */\n\tfunction generateSocialUrl(socialNetwork) {\n\t\tlet templateUrl = socialUrls[socialNetwork];\n\t\ttemplateUrl = templateUrl.replace('{{url}}', encodeURIComponent(config.url))\n\t\t\t.replace('{{title}}', encodeURIComponent(config.title))\n\t\t\t.replace('{{titleExtra}}', encodeURIComponent(config.titleExtra))\n\t\t\t.replace('{{summary}}', encodeURIComponent(config.summary))\n\t\t\t.replace('{{relatedTwitterAccounts}}', encodeURIComponent(config.relatedTwitterAccounts));\n\t\treturn templateUrl;\n\t}\n\n\t/**\n\t * Transforms the descriptive text for social links\n\t *\n\t * @private\n\t * @param {string} socialNetwork - Name of the social network that we support (e.g. twitter, facebook, linkedin, pinterest)\n\t * @returns {string} - A lovely URL\n\t */\n\tfunction generateDesriptiveLinkText (socialNetwork) {\n\t\tlet templateLinkText = descriptiveLinkText[socialNetwork];\n\t\ttemplateLinkText = templateLinkText.replace('{{title}}', config.title);\n\t\treturn templateLinkText;\n\t}\n\n\t/**\n\t * Renders the list of social networks in {@link config.links}\n\t *\n\t * @returns {void}\n\t * @private\n\t */\n\tfunction render() {\n\t\tnormaliseConfig();\n\n\t\tconst ulElement = document.createElement('ul');\n\t\tfor (let i = 0; i < config.links.length; i++) {\n\t\t\tconst liElement = document.createElement('li');\n\t\t\tconst spanElement = document.createElement('span');\n\t\t\tconst aElement = document.createElement('a');\n\n\t\t\tliElement.classList.add('o-share__action', `o-share__action--${config.links[i]}`);\n\n\t\t\tspanElement.classList.add('o-share__text');\n\t\t\tspanElement.innerText = generateDesriptiveLinkText(config.links[i]);\n\n\t\t\taElement.classList.add('o-share__icon', `o-share__icon--${config.links[i]}`);\n\t\t\taElement.href = generateSocialUrl(config.links[i]);\n\t\t\taElement.setAttribute('target', '_blank');\n\t\t\taElement.setAttribute('rel', 'noopener');\n\n\t\t\taElement.appendChild(spanElement);\n\t\t\tliElement.appendChild(aElement);\n\t\t\tulElement.appendChild(liElement);\n\t\t}\n\t\toShare.rootEl.appendChild(ulElement);\n\t}\n\n\t/**\n\t * Normalises any data in the configuration, converting relative URLs to ready-to-share\n\t * absolute versions\n\t *\n\t * @returns {undefined}\n\t * @private\n\t */\n\tfunction normaliseConfig() {\n\t\tconst link = document.createElement('a');\n\t\tlink.href = config.url;\n\t\tconfig.url = link.protocol + '//' + link.host + link.pathname + link.search + link.hash;\n\t}\n\n\t/**\n\t * Initialises the Share class, rendering the o-share element if it's empty with {@link config} options,\n\t * or from corresponding data attributes and sets up dom-delegates.\n\t * Dispatches 'oShare.ready' at the end\n\t *\n\t * @returns {undefined}\n\t * @fires \"oShare.ready\"\n\t */\n\tfunction init() {\n\t\tif (!rootEl) {\n\t\t\trootEl = document.body;\n\t\t} else if (!(rootEl instanceof HTMLElement)) {\n\t\t\trootEl = document.querySelector(rootEl);\n\t\t}\n\n\t\tconst rootDelegate = new DomDelegate(rootEl);\n\t\trootDelegate.on('click', handleClick);\n\t\trootEl.setAttribute('data-o-share--js', '');\n\n\t\toShare.rootDomDelegate = rootDelegate;\n\t\toShare.rootEl = rootEl;\n\n\t\tif (rootEl.children.length === 0) {\n\t\t\tif (!config) {\n\t\t\t\tconfig = {};\n\t\t\t\tconfig.links = rootEl.hasAttribute('data-o-share-links') ?\n\t\t\t\t\trootEl.getAttribute('data-o-share-links').split(' ') : [];\n\t\t\t\tconfig.url = rootEl.getAttribute('data-o-share-url') || '';\n\t\t\t\tconfig.title = rootEl.getAttribute('data-o-share-title') || '';\n\t\t\t\tconfig.titleExtra = rootEl.getAttribute('data-o-share-titleExtra') || '';\n\t\t\t\tconfig.summary = rootEl.getAttribute('data-o-share-summary') || '';\n\t\t\t\tconfig.relatedTwitterAccounts = rootEl.getAttribute('data-o-share-relatedTwitterAccounts') || '';\n\t\t\t}\n\t\t\trender();\n\t\t}\n\n\t\tdispatchCustomEvent('ready', {\n\t\t\tshare: oShare\n\t\t});\n\t}\n\n\tinit();\n}\n\n/**\n * Destroys the Share instance, disables dom-delegates\n *\n * @returns {undefined}\n */\nShare.prototype.destroy = function () {\n\tthis.rootDomDelegate.destroy();\n\t// Should destroy remove its children? Maybe setting .innerHTML to '' is faster\n\tfor (let i = 0; i < this.rootEl.children; i++) {\n\t\tthis.rootEl.removeChild(this.rootEl.children[i]);\n\t}\n\n\tthis.rootEl.removeAttribute('data-o-share--js');\n\tthis.rootEl = undefined;\n};\n\n/**\n * Initialises all o-share components inside the element passed as the first parameter\n *\n * @param {(HTMLElement|string)} rootEl [el=document.body] - Element where to search for o-share components. You can pass an HTMLElement or a selector string\n * @returns {Share|Share[]} - A Share or an array of Shares\n */\nShare.init = function (rootEl = document.body) {\n\tif (!(rootEl instanceof HTMLElement)) {\n\t\trootEl = document.querySelector(rootEl);\n\t}\n\tif (rootEl instanceof HTMLElement && rootEl.matches('[data-o-component=o-share]')) {\n\t\treturn new Share(rootEl);\n\t}\n\treturn Array.from(rootEl.querySelectorAll('[data-o-component=o-share]'), rootEl => new Share(rootEl));\n};\n\nexport default Share;\n","import ftDateFormat from '@financial-times/ft-date-format';\n\nconst updateEventName = 'update';\nlet interval;\n\nfunction ftDateFormatWarning(methodName) {\n\t// eslint-disable-next-line no-console\n\tconsole.warn(`The o-date method \"${methodName}\" is deprecated. Use the \"ft-date-format\" package instead or contact the Origami team for help: https://github.com/Financial-Times/ft-date-format`);\n}\n\n/**\n * Initialise the o-date component.\n *\n * @param {HTMLElement | string} rootElement - The root element or CSS selector to initialise\n */\nclass ODate {\n\n\tconstructor(rootEl) {\n\n\t\tif (!rootEl) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.warn('To initialise all o-date elements on the page use ' +\n\t\t\t\t'the `init` method. Passing no arguments to the constructor ' +\n\t\t\t\t'is deprecated.');\n\t\t}\n\n\t\tif (rootEl && !(rootEl instanceof HTMLElement)) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.warn('Using the constructor to initialise one or more ' +\n\t\t\t\t'o-date elements with a query selector is deprecated. ' +\n\t\t\t\t'Pass a single o-date HTMLElement to initialise or use the ' +\n\t\t\t\t'`init` method.');\n\t\t}\n\n\t\tif (!rootEl) {\n\t\t\trootEl = document.body;\n\t\t} else if (!(rootEl instanceof HTMLElement)) {\n\t\t\trootEl = document.querySelector(rootEl);\n\t\t}\n\n\t\tif (rootEl.getAttribute('data-o-component') === \"o-date\") {\n\t\t\tthis.el = rootEl;\n\t\t} else {\n\t\t\tthis.el = rootEl.querySelector('[data-o-component~=\"o-date\"]');\n\t\t}\n\n\t\tif (this.el) {\n\t\t\tdocument.body.addEventListener(updateEventName, this);\n\n\t\t\tthis.update();\n\t\t\tthis.el.setAttribute('data-o-date-js', '');\n\t\t}\n\n\t\tif (this.el && !interval) {\n\t\t\tinterval = setInterval(function () {\n\t\t\t\tdocument.body.dispatchEvent(new CustomEvent(updateEventName));\n\t\t\t}, 60000);\n\t\t}\n\t}\n\n\t// Use object-level event listener method so a new function doesn't need to be bound for each instance\n\thandleEvent(e) {\n\t\tif (e.type === updateEventName) {\n\t\t\tthis.update();\n\t\t}\n\t}\n\n\t/**\n\t * Re-render the formatted date within the `time` element.\n\t *\n\t * @returns {undefined}\n\t */\n\tupdate() {\n\t\tconst el = this.el;\n\n\t\t// Find the date to render.\n\t\t// Use the current date if the `datetime` attribute is not set and\n\t\t// the o-date `time` element has no text content.\n\t\tconst dateTime = el.getAttribute('datetime');\n\t\tlet date = dateTime ? ftDateFormat.toDate(dateTime) : null;\n\t\tif (!date && this.el.textContent === '') {\n\t\t\tdate = new Date();\n\t\t}\n\n\t\tif (!date) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Find elements to render formatted dates to.\n\t\t// @deprecated - The class `.o-date__printer` is deprecated.\n\t\t// `.o-date__printer` should be removed in the next major.\n\t\t// Use `[data-o-date-printer]` instead of `.o-date__printer`.\n\t\tlet printers = el.querySelectorAll('.o-date__printer,[data-o-date-printer]');\n\t\tprinters = printers.length ? printers : [el];\n\n\t\t// Render the found date in each printer element.\n\t\tfor (const printer of printers) {\n\t\t\tthis._renderDateFor(printer, date);\n\t\t}\n\n\t\t// If no printers result in output, e.g. because the,\n\t\t// format chosen does not output the time after x hours,\n\t\t// then hide the `time` element.\n\t\tif (el.textContent) {\n\t\t\tel.setAttribute('title', ftDateFormat.format(date, 'datetime'));\n\t\t\tel.removeAttribute('aria-hidden');\n\t\t} else {\n\t\t\tel.setAttribute('aria-hidden', true);\n\t\t}\n\t}\n\n\t/**\n\t * Remove o-date from the `time` element i.e. remove event\n\t * listeners and drop references to the element.\n\t *\n\t * @returns {undefined}\n\t */\n\tdestroy() {\n\t\tdocument.body.removeEventListener(updateEventName, this);\n\t\tthis.el = null;\n\t}\n\n\t/**\n\t * Initialise the o-date component.\n\t *\n\t * @param {HTMLElement | string} el - The root element or CSS selector to initialise\n\t * @returns {Array<ODate> | ODate} - An o-date instance or array of o-date instances.\n\t */\n\tstatic init (el) {\n\t\tif (!el) {\n\t\t\tel = document.body;\n\t\t}\n\t\tif (!(el instanceof HTMLElement)) {\n\t\t\tel = document.querySelector(el);\n\t\t}\n\t\t/* If el's data-o-component has \\bo-date\\b in it, ie it is itself a date,\n\t\t return a new o-date */\n\t\tif (/\\bo-date\\b/.test(el.getAttribute('data-o-component'))) {\n\t\t\treturn new ODate(el);\n\t\t}\n\n\t\t// If el contains date components, return o-dates\n\t\tconst dateEls = el.querySelectorAll('[data-o-component~=\"o-date\"]');\n\t\treturn [].map.call(dateEls, function (el) {\n\t\t\treturn new ODate(el);\n\t\t});\n\t}\n\n\t/**\n\t * Render the date to the \"printer\" element in the requested format.\n\t *\n\t * @param {HTMLElement} printer - The element to render the date in\n\t * @param {Date} date - The date to format\n\t * @returns {undefined}\n\t */\n\t_renderDateFor(printer, date) {\n\t\t// Use the printer `data-o-date-format` if found or fallback to the\n\t\t// root element if not found.\n\t\tconst format = printer.getAttribute('data-o-date-format') ||\n\t\t\tthis.el.getAttribute('data-o-date-format');\n\n\t\tlet formattedDate;\n\n\t\tif (format === 'today-or-yesterday-or-nothing') {\n\t\t\tformattedDate = ftDateFormat.asTodayOrYesterdayOrNothing(date);\n\t\t} else if (format === 'date-only') {\n\t\t\tformattedDate = ftDateFormat.format(date, 'date');\n\t\t} else if (format === 'time-ago-limit-4-hours') {\n\t\t\tformattedDate = ftDateFormat.timeAgo(date, { limit: 4 * ftDateFormat.inSeconds.hour });\n\t\t} else if (format === 'time-ago-limit-24-hours') {\n\t\t\tformattedDate = ftDateFormat.timeAgo(date, { limit: 24 * ftDateFormat.inSeconds.hour });\n\t\t} else if (format === 'time-ago-abbreviated') {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.warn('The o-date format \"time-ago-abbreviated\" is deprecated and the time is no longer abbreviated. Consider using \"time-ago-limit-4-hours\" instead.');\n\t\t\tformattedDate = ftDateFormat.timeAgo(date);\n\t\t} else if (format === 'time-ago-abbreviated-limit-4-hours') {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.warn('The o-date format \"time-ago-abbreviated-limit-4-hours\" is deprecated and the time is no longer abbreviated. Use \"time-ago-limit-4-hours\" instead.');\n\t\t\tformattedDate = ftDateFormat.timeAgo(date, { limit: 4 * ftDateFormat.inSeconds.hour });\n\t\t} else if (format === 'time-ago-no-seconds') {\n\t\t\tformattedDate = ftDateFormat.timeAgoNoSeconds(date);\n\t\t} else if (format !== null) {\n\t\t\tformattedDate = ftDateFormat.format(date, format);\n\t\t} else {\n\t\t\tformattedDate = ftDateFormat.ftTime(date);\n\t\t}\n\n\t\t// To avoid triggering a parent live region unnecessarily\n\t\t// <https://github.com/Financial-Times/o-date/pull/43>\n\t\tconst hasSingleTextNode = printer.childNodes.length === 1 &&\n\t\t\tprinter.firstChild &&\n\t\t\tprinter.firstChild.nodeType === 3;\n\n\t\tif (hasSingleTextNode) {\n\t\t\tprinter.firstChild.nodeValue = formattedDate;\n\t\t} else {\n\t\t\tprinter.innerHTML = formattedDate;\n\t\t}\n\t}\n\n\t/**\n\t * @deprecated Use [ft-date-format]{@link https://github.com/Financial-Times/ft-date-format} instead.\n\t * @returns {string} - A formatted date or empty string.\n\t */\n\tstatic toDate() {\n\t\tftDateFormatWarning('toDate');\n\t\treturn ftDateFormat.toDate(...arguments);\n\t}\n\n\t/**\n\t * @deprecated Use [ft-date-format]{@link https://github.com/Financial-Times/ft-date-format} instead.\n\t * @returns {string} - A formatted date or empty string.\n\t */\n\tstatic format() {\n\t\tftDateFormatWarning('format');\n\t\treturn ftDateFormat.format(...arguments);\n\t}\n\n\t/**\n\t * @deprecated Use [ft-date-format]{@link https://github.com/Financial-Times/ft-date-format} instead.\n\t * @returns {string} - A formatted date or empty string.\n\t */\n\tstatic getSecondsBetween() {\n\t\tftDateFormatWarning('getSecondsBetween');\n\t\treturn ftDateFormat.getSecondsBetween(...arguments);\n\t}\n\n\t/**\n\t * @deprecated Use [ft-date-format]{@link https://github.com/Financial-Times/ft-date-format} instead.\n\t * @returns {string} - A formatted date or empty string.\n\t */\n\tstatic ftTime() {\n\t\tftDateFormatWarning('ftTime');\n\t\treturn ftDateFormat.ftTime(...arguments);\n\t}\n\n\t/**\n\t * @deprecated Use [ft-date-format]{@link https://github.com/Financial-Times/ft-date-format} instead.\n\t * @returns {string} - A formatted date or empty string.\n\t */\n\tstatic isNearFuture() {\n\t\tftDateFormatWarning('isNearFuture');\n\t\treturn ftDateFormat.isNearFuture(...arguments);\n\t}\n\n\t/**\n\t * @deprecated Use [ft-date-format]{@link https://github.com/Financial-Times/ft-date-format} instead.\n\t * @returns {string} - A formatted date or empty string.\n\t */\n\tstatic isFarFuture() {\n\t\tftDateFormatWarning('isFarFuture');\n\t\treturn ftDateFormat.isFarFuture(...arguments);\n\t}\n\n\t/**\n\t * @deprecated Use [ft-date-format]{@link https://github.com/Financial-Times/ft-date-format} instead.\n\t * @returns {string} - A formatted date or empty string.\n\t */\n\tstatic isToday() {\n\t\tftDateFormatWarning('isToday');\n\t\treturn ftDateFormat.isToday(...arguments);\n\t}\n\n\t/**\n\t * @deprecated Use [ft-date-format]{@link https://github.com/Financial-Times/ft-date-format} instead.\n\t * @returns {string} - A formatted date or empty string.\n\t */\n\tstatic isYesterday() {\n\t\tftDateFormatWarning('isYesterday');\n\t\treturn ftDateFormat.isYesterday(...arguments);\n\t}\n\n\t/**\n\t * @deprecated Use [ft-date-format]{@link https://github.com/Financial-Times/ft-date-format} instead.\n\t * @returns {string} - A formatted date or empty string.\n\t */\n\tstatic timeAgo() {\n\t\tftDateFormatWarning('timeAgo');\n\t\treturn ftDateFormat.timeAgo(...arguments);\n\t}\n\n\t/**\n\t * @deprecated Use [ft-date-format]{@link https://github.com/Financial-Times/ft-date-format} instead.\n\t * @returns {string} - A formatted date or empty string.\n\t */\n\tstatic asTodayOrYesterdayOrNothing() {\n\t\tftDateFormatWarning('asTodayOrYesterdayOrNothing');\n\t\treturn ftDateFormat.asTodayOrYesterdayOrNothing(...arguments);\n\t}\n\n\t/**\n\t * @deprecated Use [ft-date-format]{@link https://github.com/Financial-Times/ft-date-format} instead.\n\t * @returns {string} - A formatted date or empty string.\n\t */\n\tstatic timeAgoNoSeconds() {\n\t\tftDateFormatWarning('timeAgoNoSeconds');\n\t\treturn ftDateFormat.timeAgoNoSeconds(...arguments);\n\t}\n\n}\n\nexport default ODate;\n","/**\n * @file\n * vv-axis arrows and label\n */\n\nimport React from 'react';\nimport { Group } from '@visx/group';\nimport { Line } from '@visx/shape';\nimport { Point } from '@visx/point';\nimport { axisArrowsStyles as css } from './styles-arrows';\nimport { axisArrowsComponentPropTypes } from '../prop-types';\nimport { axisArrowsComponentDefaultProps } from '../default-props';\n\nconst AxisArrows = ({ axisArrows, axisArrowsScale, axisArrowsPadding, orientation }) => {\n  const {\n    // top: paddingTop,\n    right: paddingRight,\n    // bottom: paddingBottom,\n    left: paddingLeft,\n  } = axisArrowsPadding;\n  const labelArrowGap = 10; // vertical gap between the arrow and its label on AxisTop\n  const labelArrowGapBottom = 20; // vertical gap between the arrow and its label on AxisBottom\n  const axisHeight = 35; // @TODO calculate this better?\n\n  return (\n    <Group css={css}>\n      <defs>\n        <marker\n          id=\"axis-arrow-triangle\"\n          viewBox=\"0 0 8 8\"\n          refX=\"1\"\n          refY=\"4\"\n          markerUnits=\"strokeWidth\"\n          markerWidth=\"8\"\n          markerHeight=\"8\"\n          orient=\"auto\"\n        >\n          <path d=\"M 0 0 L 8 4 L 0 8 z\" />\n        </marker>\n      </defs>\n      {axisArrows.map(({ value, startValue, direction, length }) => {\n        return (\n          <Group\n            key={`visx-axis-arrows--${value}`}\n            transform={`translate(${direction === 'right' ? paddingLeft : -paddingRight}, ${\n              orientation === 'top' ? -axisHeight : axisHeight\n            })`}\n          >\n            <Line\n              from={new Point({ x: axisArrowsScale(startValue), y: 0 })}\n              to={\n                new Point({\n                  x:\n                    direction === 'right'\n                      ? axisArrowsScale(startValue) + length\n                      : axisArrowsScale(startValue) - length,\n                  y: 0,\n                })\n              }\n              markerEnd=\"url(#axis-arrow-triangle)\"\n            />\n            <text>\n              <tspan\n                key={`text_${value}`}\n                x={axisArrowsScale(startValue)}\n                y={orientation === 'top' ? -labelArrowGap : labelArrowGapBottom}\n                textAnchor={direction === 'right' ? 'start' : 'end'}\n              >\n                {value}\n              </tspan>\n            </text>\n          </Group>\n        );\n      })}\n    </Group>\n  );\n};\n\nAxisArrows.propTypes = axisArrowsComponentPropTypes;\nAxisArrows.defaultProps = axisArrowsComponentDefaultProps;\n\nexport default AxisArrows;\n","import interval from \"./interval.js\";\n\nvar month = interval(function(date) {\n  date.setDate(1);\n  date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n  date.setMonth(date.getMonth() + step);\n}, function(start, end) {\n  return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, function(date) {\n  return date.getMonth();\n});\n\nexport default month;\nexport var months = month.range;\n","import {initRange} from \"./init.js\";\n\nexport const implicit = Symbol(\"implicit\");\n\nexport default function ordinal() {\n  var index = new Map(),\n      domain = [],\n      range = [],\n      unknown = implicit;\n\n  function scale(d) {\n    var key = d + \"\", i = index.get(key);\n    if (!i) {\n      if (unknown !== implicit) return unknown;\n      index.set(key, i = domain.push(d));\n    }\n    return range[(i - 1) % range.length];\n  }\n\n  scale.domain = function(_) {\n    if (!arguments.length) return domain.slice();\n    domain = [], index = new Map();\n    for (const value of _) {\n      const key = value + \"\";\n      if (index.has(key)) continue;\n      index.set(key, domain.push(value));\n    }\n    return scale;\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = Array.from(_), scale) : range.slice();\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.copy = function() {\n    return ordinal(domain, range).unknown(unknown);\n  };\n\n  initRange.apply(scale, arguments);\n\n  return scale;\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n  if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n  var match;\n  return new FormatSpecifier({\n    fill: match[1],\n    align: match[2],\n    sign: match[3],\n    symbol: match[4],\n    zero: match[5],\n    width: match[6],\n    comma: match[7],\n    precision: match[8] && match[8].slice(1),\n    trim: match[9],\n    type: match[10]\n  });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n  this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n  this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n  this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n  this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n  this.zero = !!specifier.zero;\n  this.width = specifier.width === undefined ? undefined : +specifier.width;\n  this.comma = !!specifier.comma;\n  this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n  this.trim = !!specifier.trim;\n  this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n  return this.fill\n      + this.align\n      + this.sign\n      + this.symbol\n      + (this.zero ? \"0\" : \"\")\n      + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n      + (this.comma ? \",\" : \"\")\n      + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n      + (this.trim ? \"~\" : \"\")\n      + this.type;\n};\n","import ascending from \"./ascending.js\";\n\nexport default function(f) {\n  let delta = f;\n  let compare = f;\n\n  if (f.length === 1) {\n    delta = (d, x) => f(d) - x;\n    compare = ascendingComparator(f);\n  }\n\n  function left(a, x, lo, hi) {\n    if (lo == null) lo = 0;\n    if (hi == null) hi = a.length;\n    while (lo < hi) {\n      const mid = (lo + hi) >>> 1;\n      if (compare(a[mid], x) < 0) lo = mid + 1;\n      else hi = mid;\n    }\n    return lo;\n  }\n\n  function right(a, x, lo, hi) {\n    if (lo == null) lo = 0;\n    if (hi == null) hi = a.length;\n    while (lo < hi) {\n      const mid = (lo + hi) >>> 1;\n      if (compare(a[mid], x) > 0) hi = mid;\n      else lo = mid + 1;\n    }\n    return lo;\n  }\n\n  function center(a, x, lo, hi) {\n    if (lo == null) lo = 0;\n    if (hi == null) hi = a.length;\n    const i = left(a, x, lo, hi - 1);\n    return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n  }\n\n  return {left, center, right};\n}\n\nfunction ascendingComparator(f) {\n  return (d, x) => ascending(f(d), x);\n}\n","const legendCategoricalData = {\n        'Whippet': '#1E558C',\n        'Greyhound': '#94d2e6',\n        'Saluki': '#1E8FCC',\n        'Italian Greyhound': '#B3325D',\n        'Afghan Houndey': '#FF75A3',\n        'Silken Windhoundey': '#D9CCC3',\n        'Kanni': '#AECC70',\n        'Galgo Español': '#F34D5B',\n    };\n\nexport default legendCategoricalData;","import { useCallback, useMemo } from 'react';\nimport { Delaunay } from 'd3-delaunay';\nimport localPoint from '@visx/event/lib/localPoint';\nimport { isZeroOrDefined } from '../../util';\n\nexport const useDelaunay = ({\n  width,\n  height,\n  xScale,\n  yScale,\n  xVariable,\n  yVariable,\n  yTransformFunction,\n  data,\n  tooltipEvents,\n  tooltipPositionOverride,\n  hoverRadius,\n  debug,\n}) => {\n  // Filter out data which is undefined\n  const filteredData = useMemo(\n    () => data.filter((d) => isZeroOrDefined(d[xVariable]) && isZeroOrDefined(d[yVariable])),\n    [data, xVariable, yVariable]\n  );\n\n  // Generate Delaunay triangulation\n  const delaunay = useMemo(\n    () =>\n      Delaunay.from(\n        filteredData.filter((d) => isZeroOrDefined(d[xVariable]) && isZeroOrDefined(d[yVariable])),\n        (d) => xScale(d[xVariable]),\n        (d) => yScale(d[yVariable])\n      ),\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [data, width, height, xScale, xVariable, yScale, yVariable]\n  );\n\n  // Generate path string for debugging if prop set\n  const pathString = useMemo(() => debug && delaunay.render(), [debug, delaunay]);\n\n  // Generate mouse move callback\n  const onMouseMove = useCallback(\n    (event, { top, left, height }) => {\n      // Get the point from the mouse event\n      const point = localPoint(event) || { x: 0, y: 0 };\n      // Recalculate the coordinates using left and top offsets (sum of padding and margins)\n      const [mx, my] = [point.x - left, point.y - top];\n      // Find the closest point\n      const pointIndex = delaunay.find(mx, my);\n      // Get the data associated with that point\n      const pointData = filteredData[pointIndex];\n      // Calculate the distance between the mouse point and the closest point\n      const pointDistance = Math.hypot(\n        mx - xScale(pointData[xVariable]),\n        my - yScale(pointData[yVariable])\n      );\n\n      let tooltipDataObject;\n      let tooltipPosition;\n\n      // If hover radius isn't set or the point distance is within the radius, update the state\n      if (!hoverRadius || pointDistance <= hoverRadius) {\n        const {\n          isHighlighted,\n          labelData: tooltipContent,\n          seriesName,\n          [yVariable]: dataY,\n          [xVariable]: dataX,\n        } = pointData;\n\n        tooltipDataObject =\n          // Check that highlighted lines are being used\n          isHighlighted !== undefined\n            ? isHighlighted\n              ? // Set the state to a specific data point in the series\n                {\n                  content: tooltipContent,\n                  dataYPosition: top + yScale(dataY),\n                  // This is used to reposition the tooltip\n                  maxOffsetY: top + height,\n                  data: { y: dataY, x: dataX, seriesName },\n                }\n              : // Only set the seriesName in the state so that the whole line is selected\n                { seriesName }\n            : {\n                content: tooltipContent,\n              };\n\n        tooltipPosition =\n          tooltipPositionOverride &&\n          tooltipPositionOverride({\n            data: pointData,\n            xScale: (x) => left + xScale(x),\n            yScale: (y) => top + yScale(y),\n          });\n      }\n\n      // Add the current mouse position to the state if in debug mode\n      const { onMouseOver } = tooltipEvents(\n        debug ? { ...tooltipDataObject, mousePoint: { mx, my } } : tooltipDataObject,\n        tooltipPosition\n      );\n\n      // Call the mouse over event\n      onMouseOver(event);\n    },\n    [\n      debug,\n      delaunay,\n      filteredData,\n      hoverRadius,\n      tooltipEvents,\n      tooltipPositionOverride,\n      xScale,\n      xVariable,\n      yScale,\n      yVariable,\n    ]\n  );\n\n  // Setup mouse out callback (which hides the tooltip)\n  const onMouseOut = useCallback(() => {\n    const { onMouseOut } = tooltipEvents();\n    // Call the mouse out event\n    onMouseOut();\n  }, [tooltipEvents]);\n\n  return { onMouseMove, onMouseOut, pathString };\n};\n\nexport default null;\n","function _getPrototypeOf(o) {\n  module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n    return o.__proto__ || Object.getPrototypeOf(o);\n  };\n  module.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n  return _getPrototypeOf(o);\n}\n\nmodule.exports = _getPrototypeOf;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","import FlatTable from './Tables/FlatTable.js';\nimport ScrollTable from './Tables/ScrollTable.js';\nimport OverflowTable from './Tables/OverflowTable.js';\nimport BasicTable from './Tables/BasicTable.js';\n\nimport TableSorter from './Sort/TableSorter.js';\nconst sorter = new TableSorter();\n\n/**\n * Table options.\n *\n * @typedef {object} OTableOptions - Table options.\n * @property {boolean} sortable [true] - Disable the table's sort feature.\n * @property {undefined | boolean} expanded [Undefined] - Allow the \"OverflowTable\" to hide results behind a \"show more\" button. The table is expanded by default when \"true\", contracted when \"false\", or not expandable if not set.\n * @property {number} minimumRowCount [20] - When the `expanded` option is set, the number of rows to show when the table is not expanded.\n */\n\nclass OTable {\n\n\t/**\n\t * Constructs an o-table component.\n\t *\n\t * @param {HTMLElement} rootEl - An o-table element.\n\t * @param {OTableOptions} opts - A table options object.\n\t * @returns {FlatTable | ScrollTable | OverflowTable | BasicTable} - A table instance.\n\t */\n\tconstructor(rootEl, opts = {}) {\n\t\tconst tableType = rootEl.getAttribute('data-o-table-responsive');\n\t\tlet Table;\n\t\tswitch (tableType) {\n\t\t\tcase 'flat':\n\t\t\t\tTable = FlatTable;\n\t\t\t\tbreak;\n\t\t\tcase 'scroll':\n\t\t\t\tTable = ScrollTable;\n\t\t\t\tbreak;\n\t\t\tcase 'overflow':\n\t\t\t\tTable = OverflowTable;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tTable = BasicTable;\n\t\t\t\tbreak;\n\t\t}\n\t\treturn new Table(rootEl, sorter, opts);\n\t}\n\n\t/**\n\t * Constructs all o-table components inside the element passed as the first parameter.\n\t *\n\t * @access public\n\t * @param {(HTMLElement|string)} [el=document.body] - Element where to search for o-table components. You can pass an HTMLElement or a selector string.\n\t * @param {OTableOptions} opts - A table options object.\n\t * @returns {Array<FlatTable | ScrollTable | OverflowTable | BasicTable> | FlatTable | ScrollTable | OverflowTable | BasicTable} - A table instance or array of table instances.\n\t */\n\tstatic init(el = document.body, opts = {}) {\n\t\tif (!(el instanceof HTMLElement)) {\n\t\t\tel = document.querySelector(el);\n\t\t}\n\t\tif (/\\bo-table\\b/.test(el.getAttribute('data-o-component'))) {\n\t\t\treturn new OTable(el, opts);\n\t\t}\n\t\tconst tableEls = Array.from(el.querySelectorAll('[data-o-component~=\"o-table\"]'));\n\t\treturn tableEls.map(el => {\n\t\t\treturn new OTable(el, opts);\n\t\t});\n\t}\n\n\n\t/**\n\t * The custom formatter accepts a table cell and returns a sort value for that cell.\n\t * This could be used to define a custom sort order for an unsupported format, such as emoji's, or a new date format.\n\t *\n\t * @callback formatFunction\n\t * @param {HTMLElement} cell\n\t */\n\n\t/**\n\t * Set a custom sort formatter for a given data type.\n\t *\n\t * @example <caption>Mapping table cells which contain emojis to a numerical sort value.</caption>\n\t *\timport OTable from 'o-table';\n\t *\t// Set a filter for custom data type \"emoji-time\".\n\t *\t// The return value may be a string or number.\n\t *\tOTable.setSortFormatterForType('emoji-time', (cell) => {\n\t *\t\tconst text = cell.textContent.trim();\n\t *\t\tif (text === '🌑') {\n\t *\t\t\treturn 1;\n\t *\t\t}\n\t *\t\tif (text === '🌤️️') {\n\t *\t\t\treturn 2;\n\t *\t\t}\n\t *\t\treturn 0;\n\t *\t});\n\t *\tOTable.init();\n\t * @param {string} type - The data type to apply the filter function to.\n\t * @param {formatFunction} formatFunction - The function used to format the cell\n\t * @access public\n\t */\n\tstatic setSortFormatterForType(type, formatFunction) {\n\t\tsorter.setCellFormatterForType(type, formatFunction);\n\t}\n}\n\nexport default OTable;\n","import React, { useRef, useEffect, useState } from 'react';\nimport * as d3 from 'd3-time-format';\nimport { getDaysInMonth, getYearRange, monthsList, getDayMonthYear } from './helpers';\nimport './styles.scss';\n\nconst DatePickerInput = ({\n  minDate,\n  maxDate,\n  selectedDate,\n  fallbackDate,\n  inputDateFormat,\n  storedDateFormat,\n  inputRef,\n  setFallbackDate,\n  supportsDateType,\n  setSupportsDateType,\n  inputName,\n}) => {\n  const inputDateFormatter = d3.timeFormat(inputDateFormat);\n  const inputDateParser = d3.timeParse(inputDateFormat);\n\n  useEffect(() => {\n    // Check browser supports date type, otherwise fallback\n    if (inputRef && inputRef.current.type === 'text') {\n      setSupportsDateType(false);\n    }\n  }, []);\n\n  useEffect(() => {\n    if (inputRef) {\n      inputRef.current.value = inputDateFormatter(selectedDate);\n    }\n  }, [selectedDate]);\n\n  return (\n    <div className={`date-picker-input${!supportsDateType ? ' date-picker-input--fallback' : ''}`}>\n      {supportsDateType ? (\n        <input\n          type=\"date\"\n          name={inputName}\n          ref={inputRef}\n          min={inputDateFormatter(minDate)}\n          max={inputDateFormatter(maxDate)}\n          onChange={event => {\n            inputRef.current.value = event.target.value;\n            setFallbackDate(inputDateParser(inputRef.current.value));\n          }}\n        />\n      ) : (\n        <DatePickerInputSelectFallback\n          minDate={minDate}\n          maxDate={maxDate}\n          selectedDate={fallbackDate}\n          setFallbackDate={setFallbackDate}\n        />\n      )}\n    </div>\n  );\n};\n\nconst DatePickerInputDaySelect = ({ selectedDay, days, onChange }) => (\n  <label className=\"o-forms-field\">\n    <span className=\"o-forms-input o-forms-input--select\">\n      <select name=\"starting-date-day\" onChange={onChange} value={selectedDay}>\n        {days.map(value => (\n          <option key={value} value={value}>\n            {value}\n          </option>\n        ))}\n      </select>\n    </span>\n  </label>\n);\n\nconst DatePickerInputMonthSelect = ({ selectedMonth, months, onChange }) => (\n  <label className=\"o-forms-field\">\n    <span className=\"o-forms-input o-forms-input--select\">\n      <select name=\"starting-date-month\" onChange={onChange} value={selectedMonth}>\n        {months.map((month, index) => (\n          <option key={month} value={monthsList.indexOf(month)}>\n            {month}\n          </option>\n        ))}\n      </select>\n    </span>\n  </label>\n);\n\nconst DatePickerInputYearSelect = ({ selectedYear, years, onChange }) => (\n  <label className=\"o-forms-field\">\n    <span className=\"o-forms-input o-forms-input--select\">\n      <select\n        name=\"starting-date-years\"\n        onChange={onChange}\n        value={selectedYear}\n        disabled={years.length === 1}\n      >\n        {years.map(year => (\n          <option key={year} value={year}>\n            {year}\n          </option>\n        ))}\n      </select>\n    </span>\n  </label>\n);\n\nconst DatePickerInputSelectFallback = ({ minDate, maxDate, selectedDate, setFallbackDate }) => {\n  const { day: selectedDay, month: selectedMonth, year: selectedYear } = getDayMonthYear(\n    selectedDate\n  );\n  const { day: minDateDay, month: minDateMonth, year: minDateYear } = getDayMonthYear(minDate);\n  const { day: maxDateDay, month: maxDateMonth, year: maxDateYear } = getDayMonthYear(maxDate);\n\n  const yearRange = getYearRange(minDate, maxDate);\n\n  // Get number of days in selected month\n  const numberOfdaysInMonth = getDaysInMonth(selectedDate.getMonth(), selectedDate.getFullYear());\n  // Generate list of days in selected month for selected month\n  const listOfdaysInMonth = [...Array(numberOfdaysInMonth).keys()].map(day => day + 1);\n  const filteredListOfDaysInMonth = listOfdaysInMonth.filter(day => {\n    // If the selected month and year are the same as the max for the input,\n    // filter out all days <= the max day for the input\n    if (selectedMonth === maxDateMonth && selectedYear === maxDateYear) {\n      return day <= maxDateDay;\n    }\n    // If the selected month and year are the same as the min for the input,\n    // filter out all days >= the min day for the input\n    if (selectedMonth === minDateMonth && selectedYear === minDateYear) {\n      return day >= minDateDay;\n    }\n    return true;\n  });\n\n  // Get available months for month dropdown\n  const months = monthsList.filter((m, monthIndex) => {\n    // If selected year is equal to max year and min year,\n    // filter out months > max month and < min month\n    if (selectedYear === maxDateYear && selectedYear === minDateYear) {\n      return monthIndex <= maxDateMonth && monthIndex >= minDateMonth;\n    }\n    if (selectedYear === maxDateYear) {\n      return monthIndex <= maxDateMonth;\n    }\n    if (selectedYear === minDateYear) {\n      return monthIndex => minDateMonth;\n    }\n    return true;\n  });\n\n  return (\n    <React.Fragment>\n      <DatePickerInputDaySelect\n        selectedDay={selectedDay}\n        days={filteredListOfDaysInMonth}\n        onChange={event => {\n          const newDate = new Date(selectedDate.getTime());\n          newDate.setDate(event.target.value);\n          setFallbackDate(newDate);\n        }}\n      />\n      <DatePickerInputMonthSelect\n        selectedMonth={selectedMonth}\n        months={months}\n        onChange={event => {\n          const newMonthIndex = event.target.value;\n          let newDate = new Date(selectedDate.getTime());\n          newDate.setMonth(newMonthIndex);\n\n          // If current day is greater than the max allowed date for that month\n          // e.g. in the future, set the day to the max day allowed\n          if (\n            Number(newMonthIndex) === maxDateMonth &&\n            selectedYear === maxDateYear &&\n            newDate.getDate() > maxDateDay\n          ) {\n            newDate = new Date(selectedYear, newMonthIndex, maxDateDay);\n          }\n\n          // If current day e.g. 31 doesn't appear in newly selected month,\n          // set day to last day in month\n          if (newDate.getMonth().toString() !== newMonthIndex) {\n            const daysInMonth = getDaysInMonth(newMonthIndex, selectedYear);\n            newDate = new Date(selectedYear, newMonthIndex, daysInMonth);\n          }\n\n          setFallbackDate(newDate);\n        }}\n      />\n      <DatePickerInputYearSelect\n        selectedYear={selectedYear}\n        years={yearRange}\n        onChange={event => {\n          const newDate = new Date(selectedDate.getTime());\n          newDate.setFullYear(event.target.value);\n          setFallbackDate(newDate);\n        }}\n      />\n    </React.Fragment>\n  );\n};\n\nexport default DatePickerInput;\n","// From: https://dev.to/n8tb1t/tracking-scroll-position-with-react-hooks-3bbj\n\nimport { useRef, useLayoutEffect } from 'react';\n\nconst isBrowser = typeof window !== `undefined`;\n\nconst getScrollPosition = ({ element, useWindow }) => {\n  if (!isBrowser) return { x: 0, y: 0 };\n\n  const target = element ? element.current : document.body;\n  const position = target.getBoundingClientRect();\n\n  return useWindow\n    ? { x: window.scrollX, y: window.scrollY }\n    : { x: position.left, y: position.top };\n};\n\nconst useScrollPosition = (effect, deps, element, useWindow, wait) => {\n  const position = useRef(getScrollPosition({ useWindow }));\n\n  let throttleTimeout = null;\n\n  const callBack = () => {\n    const currPos = getScrollPosition({ element, useWindow });\n    effect({ prevPos: position.current, currPos });\n    position.current = currPos;\n    throttleTimeout = null;\n  };\n\n  useLayoutEffect(() => {\n    const handleScroll = () => {\n      if (wait) {\n        if (throttleTimeout === null) {\n          throttleTimeout = setTimeout(callBack, wait);\n        }\n      } else {\n        callBack();\n      }\n    };\n\n    window.addEventListener('scroll', handleScroll);\n\n    return () => window.removeEventListener('scroll', handleScroll);\n  }, deps);\n};\n\nexport default useScrollPosition;\n","import { useState, useEffect, useMemo } from 'react';\nimport { useQueryParams, ArrayParam } from 'use-query-params';\nimport { sendSpoorEvent } from '../utils';\n\nconst useQueryParamsWithState = params => {\n  // Extract param types\n  const queryParams = Object.entries(params).reduce(\n    (allParams, [paramName, { type, ignoreInQueryParams }]) =>\n      !ignoreInQueryParams\n        ? {\n            ...allParams,\n            [paramName]: type,\n          }\n        : allParams,\n    {}\n  );\n\n  // Generate list of attributes to exclude\n  const excludeFromQueryParams = Object.entries(params)\n    .filter(\n      ([, { hideFromQueryParams, ignoreInQueryParams }]) =>\n        ignoreInQueryParams || hideFromQueryParams\n    )\n    .map(([paramName]) => paramName);\n\n  // Setup query params\n  const [query, setQuery] = useQueryParams(queryParams);\n  const hasQuery = useMemo(() => Object.values(query).some(d => d), []); // eslint-disable-line\n\n  // Extract defaults from query param string or those given to hook\n  const defaults = Object.entries(params).reduce(\n    (allParams, [paramName, { default: defaultValue, options, type, maxLength }]) => {\n      // If options is a function, run it to generate the options array\n      const optionsArray = typeof options === 'function' ? options(query) : options;\n      const queryParamValue = query[paramName];\n      const validatedQueryParam = optionsArray // eslint-disable-line no-nested-ternary\n        ? optionsArray.includes(queryParamValue)\n          ? // If options set, check the value is in the array\n            queryParamValue\n          : // Otherwise return the default value\n            defaultValue\n        : queryParamValue !== undefined\n        ? // If a query param value was found set that\n          queryParamValue\n        : // Otheriwse use the default value\n          defaultValue;\n      // If query param type is array and has a max length, limit the array length\n      const filteredQueryParam =\n        type === ArrayParam && maxLength\n          ? validatedQueryParam.slice(0, maxLength)\n          : validatedQueryParam;\n      return {\n        ...allParams,\n        [paramName]: filteredQueryParam,\n      };\n    },\n    {}\n  );\n\n  // Setup state\n  const [state, setState] = useState({ ...defaults, hasQuery });\n\n  // When state updates, update query params\n  useEffect(() => {\n    const filteredState = Object.entries(state)\n      .filter(\n        ([paramName]) => !excludeFromQueryParams.includes(paramName) && paramName !== 'hasQuery'\n      )\n      .reduce((acc, [key, value]) => ({ ...acc, [key]: value }), {});\n\n    setQuery(filteredState, 'replace');\n    sendSpoorEvent('coronavirus-vaccine-tracker', 'search', filteredState);\n  }, [excludeFromQueryParams, setQuery, state]);\n\n  return [state, setState];\n};\n\nexport default useQueryParamsWithState;\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function tickFormat(start, stop, count, specifier) {\n  var step = tickStep(start, stop, count),\n      precision;\n  specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n  switch (specifier.type) {\n    case \"s\": {\n      var value = Math.max(Math.abs(start), Math.abs(stop));\n      if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n      return formatPrefix(specifier, value);\n    }\n    case \"\":\n    case \"e\":\n    case \"g\":\n    case \"p\":\n    case \"r\": {\n      if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n      break;\n    }\n    case \"f\":\n    case \"%\": {\n      if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n      break;\n    }\n  }\n  return format(specifier);\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, value) {\n  return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, max) {\n  step = Math.abs(step), max = Math.abs(max) - step;\n  return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step) {\n  return Math.max(0, -exponent(Math.abs(step)));\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport tickFormat from \"./tickFormat.js\";\n\nexport function linearish(scale) {\n  var domain = scale.domain;\n\n  scale.ticks = function(count) {\n    var d = domain();\n    return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n  };\n\n  scale.tickFormat = function(count, specifier) {\n    var d = domain();\n    return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n  };\n\n  scale.nice = function(count) {\n    if (count == null) count = 10;\n\n    var d = domain();\n    var i0 = 0;\n    var i1 = d.length - 1;\n    var start = d[i0];\n    var stop = d[i1];\n    var prestep;\n    var step;\n    var maxIter = 10;\n\n    if (stop < start) {\n      step = start, start = stop, stop = step;\n      step = i0, i0 = i1, i1 = step;\n    }\n    \n    while (maxIter-- > 0) {\n      step = tickIncrement(start, stop, count);\n      if (step === prestep) {\n        d[i0] = start\n        d[i1] = stop\n        return domain(d);\n      } else if (step > 0) {\n        start = Math.floor(start / step) * step;\n        stop = Math.ceil(stop / step) * step;\n      } else if (step < 0) {\n        start = Math.ceil(start * step) / step;\n        stop = Math.floor(stop * step) / step;\n      } else {\n        break;\n      }\n      prestep = step;\n    }\n\n    return scale;\n  };\n\n  return scale;\n}\n\nexport default function linear() {\n  var scale = continuous();\n\n  scale.copy = function() {\n    return copy(scale, linear());\n  };\n\n  initRange.apply(scale, arguments);\n\n  return linearish(scale);\n}\n","export function basis(t1, v0, v1, v2, v3) {\n  var t2 = t1 * t1, t3 = t2 * t1;\n  return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n      + (4 - 6 * t2 + 3 * t3) * v1\n      + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n      + t3 * v3) / 6;\n}\n\nexport default function(values) {\n  var n = values.length - 1;\n  return function(t) {\n    var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n        v1 = values[i],\n        v2 = values[i + 1],\n        v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n        v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n    return basis((t - i / n) * n, v0, v1, v2, v3);\n  };\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n  var color = gamma(y);\n\n  function rgb(start, end) {\n    var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n        g = color(start.g, end.g),\n        b = color(start.b, end.b),\n        opacity = nogamma(start.opacity, end.opacity);\n    return function(t) {\n      start.r = r(t);\n      start.g = g(t);\n      start.b = b(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n\n  rgb.gamma = rgbGamma;\n\n  return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n  return function(colors) {\n    var n = colors.length,\n        r = new Array(n),\n        g = new Array(n),\n        b = new Array(n),\n        i, color;\n    for (i = 0; i < n; ++i) {\n      color = colorRgb(colors[i]);\n      r[i] = color.r || 0;\n      g[i] = color.g || 0;\n      b[i] = color.b || 0;\n    }\n    r = spline(r);\n    g = spline(g);\n    b = spline(b);\n    color.opacity = 1;\n    return function(t) {\n      color.r = r(t);\n      color.g = g(t);\n      color.b = b(t);\n      return color + \"\";\n    };\n  };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","import {basis} from \"./basis.js\";\n\nexport default function(values) {\n  var n = values.length;\n  return function(t) {\n    var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n        v0 = values[(i + n - 1) % n],\n        v1 = values[i % n],\n        v2 = values[(i + 1) % n],\n        v3 = values[(i + 2) % n];\n    return basis((t - i / n) * n, v0, v1, v2, v3);\n  };\n}\n","import { scaleBand } from 'd3-scale';\nimport scaleOperator from '../operators/scaleOperator';\nexport var updateBandScale = scaleOperator('domain', 'range', 'reverse', 'align', 'padding', 'round');\nexport default function createBandScale(config) {\n  return updateBandScale(scaleBand(), config);\n}","import {linearish} from \"./linear.js\";\nimport {copy, identity, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformPow(exponent) {\n  return function(x) {\n    return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n  };\n}\n\nfunction transformSqrt(x) {\n  return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x);\n}\n\nfunction transformSquare(x) {\n  return x < 0 ? -x * x : x * x;\n}\n\nexport function powish(transform) {\n  var scale = transform(identity, identity),\n      exponent = 1;\n\n  function rescale() {\n    return exponent === 1 ? transform(identity, identity)\n        : exponent === 0.5 ? transform(transformSqrt, transformSquare)\n        : transform(transformPow(exponent), transformPow(1 / exponent));\n  }\n\n  scale.exponent = function(_) {\n    return arguments.length ? (exponent = +_, rescale()) : exponent;\n  };\n\n  return linearish(scale);\n}\n\nexport default function pow() {\n  var scale = powish(transformer());\n\n  scale.copy = function() {\n    return copy(scale, pow()).exponent(scale.exponent());\n  };\n\n  initRange.apply(scale, arguments);\n\n  return scale;\n}\n\nexport function sqrt() {\n  return pow.apply(null, arguments).exponent(0.5);\n}\n","import { scaleSqrt } from 'd3-scale';\nimport scaleOperator from '../operators/scaleOperator';\nexport var updateSqrtScale = scaleOperator('domain', 'range', 'reverse', 'clamp', 'interpolate', 'nice', 'round', 'zero');\nexport default function createSqrtScale(config) {\n  return updateSqrtScale(scaleSqrt(), config);\n}","import {ticks} from \"d3-array\";\nimport {format} from \"d3-format\";\nimport nice from \"./nice.js\";\nimport {copy, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformLog(x) {\n  return Math.log(x);\n}\n\nfunction transformExp(x) {\n  return Math.exp(x);\n}\n\nfunction transformLogn(x) {\n  return -Math.log(-x);\n}\n\nfunction transformExpn(x) {\n  return -Math.exp(-x);\n}\n\nfunction pow10(x) {\n  return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n  return base === 10 ? pow10\n      : base === Math.E ? Math.exp\n      : function(x) { return Math.pow(base, x); };\n}\n\nfunction logp(base) {\n  return base === Math.E ? Math.log\n      : base === 10 && Math.log10\n      || base === 2 && Math.log2\n      || (base = Math.log(base), function(x) { return Math.log(x) / base; });\n}\n\nfunction reflect(f) {\n  return function(x) {\n    return -f(-x);\n  };\n}\n\nexport function loggish(transform) {\n  var scale = transform(transformLog, transformExp),\n      domain = scale.domain,\n      base = 10,\n      logs,\n      pows;\n\n  function rescale() {\n    logs = logp(base), pows = powp(base);\n    if (domain()[0] < 0) {\n      logs = reflect(logs), pows = reflect(pows);\n      transform(transformLogn, transformExpn);\n    } else {\n      transform(transformLog, transformExp);\n    }\n    return scale;\n  }\n\n  scale.base = function(_) {\n    return arguments.length ? (base = +_, rescale()) : base;\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain(_), rescale()) : domain();\n  };\n\n  scale.ticks = function(count) {\n    var d = domain(),\n        u = d[0],\n        v = d[d.length - 1],\n        r;\n\n    if (r = v < u) i = u, u = v, v = i;\n\n    var i = logs(u),\n        j = logs(v),\n        p,\n        k,\n        t,\n        n = count == null ? 10 : +count,\n        z = [];\n\n    if (!(base % 1) && j - i < n) {\n      i = Math.floor(i), j = Math.ceil(j);\n      if (u > 0) for (; i <= j; ++i) {\n        for (k = 1, p = pows(i); k < base; ++k) {\n          t = p * k;\n          if (t < u) continue;\n          if (t > v) break;\n          z.push(t);\n        }\n      } else for (; i <= j; ++i) {\n        for (k = base - 1, p = pows(i); k >= 1; --k) {\n          t = p * k;\n          if (t < u) continue;\n          if (t > v) break;\n          z.push(t);\n        }\n      }\n      if (z.length * 2 < n) z = ticks(u, v, n);\n    } else {\n      z = ticks(i, j, Math.min(j - i, n)).map(pows);\n    }\n\n    return r ? z.reverse() : z;\n  };\n\n  scale.tickFormat = function(count, specifier) {\n    if (specifier == null) specifier = base === 10 ? \".0e\" : \",\";\n    if (typeof specifier !== \"function\") specifier = format(specifier);\n    if (count === Infinity) return specifier;\n    if (count == null) count = 10;\n    var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n    return function(d) {\n      var i = d / pows(Math.round(logs(d)));\n      if (i * base < base - 0.5) i *= base;\n      return i <= k ? specifier(d) : \"\";\n    };\n  };\n\n  scale.nice = function() {\n    return domain(nice(domain(), {\n      floor: function(x) { return pows(Math.floor(logs(x))); },\n      ceil: function(x) { return pows(Math.ceil(logs(x))); }\n    }));\n  };\n\n  return scale;\n}\n\nexport default function log() {\n  var scale = loggish(transformer()).domain([1, 10]);\n\n  scale.copy = function() {\n    return copy(scale, log()).base(scale.base());\n  };\n\n  initRange.apply(scale, arguments);\n\n  return scale;\n}\n","import { scaleLog } from 'd3-scale';\nimport scaleOperator from '../operators/scaleOperator';\nexport var updateLogScale = scaleOperator('domain', 'range', 'reverse', 'base', 'clamp', 'interpolate', 'nice', 'round');\nexport default function createLogScale(config) {\n  return updateLogScale(scaleLog(), config);\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","function _arrayLikeToArray(arr, len) {\n  if (len == null || len > arr.length) len = arr.length;\n\n  for (var i = 0, arr2 = new Array(len); i < len; i++) {\n    arr2[i] = arr[i];\n  }\n\n  return arr2;\n}\n\nmodule.exports = _arrayLikeToArray;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","var arrayLikeToArray = require(\"./arrayLikeToArray.js\");\n\nfunction _unsupportedIterableToArray(o, minLen) {\n  if (!o) return;\n  if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n  var n = Object.prototype.toString.call(o).slice(8, -1);\n  if (n === \"Object\" && o.constructor) n = o.constructor.name;\n  if (n === \"Map\" || n === \"Set\") return Array.from(o);\n  if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}\n\nmodule.exports = _unsupportedIterableToArray;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","import {get as getSetting} from './settings.js';\nimport {broadcast, is, findCircularPathsIn, containsCircularPaths, merge, addEvent, log} from '../utils.js';\nimport {Queue} from './queue.js';\nimport {get as getTransport} from './transports/index.js';\n\n/**\n * Queue queue.\n *\n * @type {Queue}\n */\nlet queue;\n\n/**\n * Consistent check to see if we should use sendBeacon or not.\n *\n * @returns {boolean} Should we use sendBeacon?\n */\nfunction should_use_sendBeacon() {\n\tlet config = getSetting('config') || {};\n\tif (config.queue === true) {\n\t\treturn false;\n\t} else {\n\t\treturn Boolean(navigator.sendBeacon);\n\t}\n}\n\n/**\n * Attempts to send a tracking request.\n *\n * @param {object} request The request to be sent.\n * @param {Function=} callback Callback to fire the next item in the queue.\n * @returns {void}\n */\nfunction sendRequest(request, callback) {\n\tconst queueTime = request.queueTime;\n\tconst offlineLag = new Date().getTime() - queueTime;\n\n\tconst transport = should_use_sendBeacon() ? getTransport('sendBeacon')() :\n\t\twindow.XMLHttpRequest && 'withCredentials' in new window.XMLHttpRequest() ? getTransport('xhr')() :\n\t\t\tgetTransport('image')();\n\tconst user_callback = request.callback;\n\n\tconst core_system = getSetting('config') && getSetting('config').system || {};\n\tconst system = merge(core_system, {\n\t\tversion: getSetting('version'), // Version of the tracking client e.g. '1.2'\n\t\tsource: getSetting('source'), // Source of the tracking client e.g. 'o-tracking'\n\t\ttransport: transport.name, // The transport method used.\n\t});\n\n\tif (getSetting('config').test || getSetting('config').test_data) {\n\t\tsystem.is_live = false;\n\t} else {\n\t\tsystem.is_live = true;\n\t}\n\n\n\trequest = merge({ system: system }, request);\n\n\t// Only bothered about offlineLag if it's longer than a second, but less than 12 months. (Especially as Date can be dodgy)\n\tif (offlineLag > 1000 && offlineLag < 12 * 30 * 24 * 60 * 60 * 1000) {\n\t\trequest.time = request.time || {};\n\t\trequest.time.offset = offlineLag;\n\t}\n\tdelete request.callback;\n\tdelete request.type;\n\tdelete request.queueTime;\n\n\tlog('user_callback', user_callback);\n\tlog('PreSend', request);\n\n\tif (containsCircularPaths(request)) {\n\t\tconst errorMessage = \"o-tracking does not support circular references in the analytics data.\\n\" +\n\t\t\"Please remove the circular references in the data.\\n\" +\n\t\t\"Here are the paths in the data which are circular:\\n\" +\n\t\tJSON.stringify(findCircularPathsIn(request), undefined, 4);\n\t\tthrow new Error(errorMessage);\n\t}\n\n\tconst stringifiedData = JSON.stringify(request);\n\n\ttransport.complete(function (error) {\n\t\tif (is(user_callback, 'function')) {\n\t\t\tuser_callback.call(request);\n\t\t\tlog('calling user_callback');\n\t\t}\n\n\t\tif (error) {\n\t\t\t// Re-add to the queue if it failed.\n\t\t\t// Re-apply queueTime here\n\t\t\trequest.queueTime = queueTime;\n\t\t\tqueue.add(request).save();\n\n\t\t\tbroadcast('oErrors', 'log', {\n\t\t\t\terror: error.message,\n\t\t\t\tinfo: { module: 'o-tracking' }\n\t\t\t});\n\t\t} else if (callback) {\n\t\t\tcallback();\n\t\t}\n\t});\n\t/**\n\t * Default collection server.\n\t */\n\tlet url = 'https://spoor-api.ft.com/ingest';\n\n\tif (request && request.category && request.action) {\n\t\turl += `?type=${request.category}:${request.action}`;\n\t}\n\n\ttransport.send(url, stringifiedData);\n}\n\n/**\n * Adds a new request to the list of pending requests\n *\n * @param {object} request The request to queue\n * @returns {void}\n */\nfunction add(request) {\n\trequest.queueTime = new Date().getTime();\n\tif (should_use_sendBeacon()) {\n\t\tsendRequest(request);\n\t} else {\n\t\tqueue.add(request).save();\n\t}\n\tlog('AddedToQueue', queue);\n}\n\n/**\n * If there are any requests queued, attempts to send the next one\n * Otherwise, does nothing\n *\n * @param {Function} [callback] - Optional callback\n * @returns {void}\n */\nfunction run(callback = function () { /* empty */}) {\n\t// Investigate queue lengths bug\n\t// https://jira.ft.com/browse/DTP-330\n\tconst all_events = queue.all();\n\n\tif (all_events.length > 200) {\n\t\tconst counts = {};\n\n\t\tall_events.forEach(function (event) {\n\t\t\tconst label = [event.category, event.action].join(':');\n\n\t\t\tif (!Object.prototype.hasOwnProperty.call(counts, label)) {\n\t\t\t\tcounts[label] = 0;\n\t\t\t}\n\n\t\t\tcounts[label] += 1;\n\t\t});\n\n\t\tqueue.replace([]);\n\n\t\tqueue.add({\n\t\t\tcategory: 'o-tracking',\n\t\t\taction: 'queue-bug',\n\t\t\tcontext: {\n\t\t\t\turl: document.URL,\n\t\t\t\tqueue_length: all_events.length,\n\t\t\t\tcounts: counts,\n\t\t\t\tstorage: queue.storage.storage._type\n\t\t\t}\n\t\t});\n\t}\n\n\tconst next = function () {\n\t\trun();\n\t\tcallback();\n\t};\n\tconst nextRequest = queue.shift();\n\n\t// Cancel if we've run out of requests.\n\tif (!nextRequest) {\n\t\treturn callback();\n\t}\n\n\t// Send this request, then try run again.\n\treturn sendRequest(nextRequest, next);\n}\n\n/**\n * Convenience function to add and run a request all in one go.\n *\n * @param {object} request The request to queue and run.\n * @returns {void}\n */\nfunction addAndRun(request) {\n\tadd(request);\n\trun();\n}\n\n/**\n * Init a queue and send any leftover events.\n *\n * @returns {Queue} An initialised queue.\n */\nfunction init() {\n\tqueue = new Queue('requests');\n\n\t// If any tracking calls are made whilst offline, try sending them the next time the device comes online\n\taddEvent(window, 'online', function() {\n\t\trun();\n\t});\n\n\t// On startup, try sending any requests queued from a previous session.\n\trun();\n\n\treturn queue;\n}\n\nexport {\n\tinit,\n\tadd,\n\trun,\n\taddAndRun\n};\n","/**\n * cuid.js\n * Collision-resistant UID generator for browsers and node.\n * Sequential for fast db lookups and recency sorting.\n * Safe for element IDs and server-side lookups.\n *\n * Extracted from CLCTR\n *\n * Copyright (c) Eric Elliott 2012\n * MIT License\n */\nlet c = 0;\nconst blockSize = 4;\nconst base = 36;\nconst discreteValues = Math.pow(base, blockSize);\n\nconst pad = function pad(num, size) {\n\tconst s = \"000000000\" + num;\n\treturn s.substr(s.length-size);\n};\n\nconst randomBlock = function randomBlock() {\n\treturn pad((Math.random() *\n\t\tdiscreteValues << 0)\n\t\t.toString(base), blockSize);\n};\n\nconst safeCounter = () => {\n\tc = c < discreteValues ? c : 0;\n\tc++; // this is not subliminal\n\treturn c - 1;\n};\n\nconst api = function cuid() {\n\t// Starting with a lowercase letter makes\n\t// it HTML element ID friendly.\n\t// hard-coded allows for sequential access\n\tconst letter = 'c';\n\n\t// timestamp\n\t// warning: this exposes the exact date and time\n\t// that the uid was created.\n\tconst timestamp = new Date().getTime().toString(base);\n\n\n\t// A few chars to generate distinct ids for different\n\t// clients (so different computers are far less\n\t// likely to generate the same id)\n\tconst fingerprint = api.fingerprint();\n\n\t// Grab some more chars from Math.random()\n\tconst random = randomBlock() + randomBlock();\n\n\t// Prevent same-machine collisions.\n\tconst counter = pad(safeCounter().toString(base), blockSize);\n\n\treturn letter + timestamp + counter + fingerprint + random;\n};\n\napi.slug = function slug() {\n\tconst date = new Date().getTime().toString(36);\n\n\tconst print = api.fingerprint().slice(0,1) +\n\t\tapi.fingerprint().slice(-1);\n\n\tconst random = randomBlock().slice(-2);\n\n\tconst counter = safeCounter().toString(36).slice(-4);\n\n\treturn date.slice(-2) +\n\t\tcounter + print + random;\n};\n\napi.globalCount = function globalCount() {\n\t// We want to cache the results of this\n\tconst cache = (function calc() {\n\t\tlet count = 0;\n\n\t\tfor (const i in window) { // eslint-disable-line no-unused-vars, guard-for-in\n\t\t\tcount++;\n\t\t}\n\n\t\treturn count;\n\t}());\n\n\tapi.globalCount = () => cache;\n\treturn cache;\n};\n\napi.fingerprint = function browserPrint() {\n\treturn pad((navigator.mimeTypes.length +\n\t\tnavigator.userAgent.length).toString(36) +\n\t\tapi.globalCount().toString(36), 4);\n};\n\nexport { api };\n","import {is, isUndefined, broadcast} from '../utils.js';\nimport {Store} from './store.js';\n\n/**\n * Class for handling a queue backed up by a store.\n *\n * @class Queue\n *\n * @param {string} name - The name of the queue.\n * @returns {Queue} - Returns the instance of the queue.\n */\nfunction Queue (name) {\n\tif (isUndefined(name)) {\n\t\tconst undefinedName = new Error('You must specify a name for the queue.');\n\t\tbroadcast('oErrors', 'log', {\n\t\t\terror: undefinedName.message,\n\t\t\tinfo: { module: 'o-tracking' }\n\t\t});\n\t\tthrow undefinedName;\n\t}\n\n\t/**\n\t * Queue data.\n\t *\n\t * @type {Array}\n\t */\n\tthis.queue = [];\n\n\t/**\n\t * The storage method to use. Determines best storage method.\n\t *\n\t * @type {object}\n\t */\n\tthis.storage = new Store(name);\n\n\t// Retrieve any previous store with the same name.\n\tif (this.storage.read()) {\n\t\tthis.queue = this.storage.read();\n\t}\n\n\treturn this;\n}\n\n/**\n * Gets the contents of the store.\n *\n * @returns {Array} The array of items.\n */\nQueue.prototype.all = function () {\n\tif (this.queue.length === 0) {\n\t\treturn [];\n\t}\n\n\tconst items = [];\n\n\tfor (let i = 0; i < this.queue.length; i = i + 1) {\n\t\titems.push(this.queue[i].item);\n\t}\n\n\treturn items;\n};\n\n/**\n * Gets the first item in the store.\n *\n * @returns {object} Returns the item.\n */\nQueue.prototype.first = function () {\n\tif (this.queue.length === 0) {\n\t\treturn null;\n\t}\n\n\treturn this.queue[0].item;\n};\n\n/**\n * Gets the last item in the store.\n *\n * @returns {object} Returns the item.\n */\nQueue.prototype.last = function () {\n\tif (this.queue.length === 0) {\n\t\treturn null;\n\t}\n\n\treturn this.queue.slice(-1)[0].item;\n};\n\n/**\n * Add data to the store.\n *\n * @param {object} item - An item or an array of items.\n *\n * @returns {Queue} - Returns the instance of the queue.\n */\nQueue.prototype.add = function (item) {\n\t// I was trying to turn this whole add function into a little module, to stop doAdd function being created everytime, but couldn't work out how to get to 'this' from within the module.\n\n\tconst self = this;\n\tlet i;\n\n\tfunction doAdd(item) {\n\t\tself.queue.push({\n\t\t\tcreated_at: new Date().valueOf(),\n\t\t\titem: item\n\t\t});\n\t}\n\n\tif (is(item, 'object') && item.constructor.toString().match(/array/i)) {\n\t\tfor (i = 0; i < item.length; i = i + 1) {\n\t\t\tdoAdd(item[i]);\n\t\t}\n\t} else {\n\t\tdoAdd(item);\n\t}\n\n\treturn self;\n};\n\n/**\n * Overwrite the store with something completely new.\n *\n * @param {Array} items The new array of data.\n *\n * @returns {Queue} - Returns the instance of the queue.\n */\nQueue.prototype.replace = function (items) {\n\tif (Array.isArray(items)) {\n\t\tthis.queue = [];\n\t\tthis.add(items).save();\n\n\t\treturn this;\n\t}\n\n\tconst invalidArg = new Error('Argument invalid, must be an array.');\n\tbroadcast('oErrors', 'log', {\n\t\terror: invalidArg.message,\n\t\tinfo: { module: 'o-tracking' }\n\t});\n\tthrow invalidArg;\n};\n\n/**\n * Pop the first item from the queue.\n *\n * @returns {object} The item.\n */\nQueue.prototype.shift = function () {\n\tif (this.queue.length === 0) {\n\t\treturn null;\n\t}\n\n\tconst item = this.queue.shift().item;\n\n\tthis.save();\n\n\treturn item;\n};\n\n/**\n * Save the current store to localStorage so that old requests can still be sent after a page refresh.\n *\n * @returns {Queue} - Returns the instance of the queue.\n */\nQueue.prototype.save = function () {\n\tthis.storage.write(this.queue);\n\n\treturn this;\n};\n\nexport { Queue };\n","import {guid} from '../utils.js';\nimport {Store} from './store.js';\n\nlet userID;\nlet store;\n\n/**\n * Init\n *\n * @param {string} value The value of a userID to use if one is not stored\n * @param {string} cookieDomain The domain that should be used to cookie te user\n * @returns {string} - The user ID if present, or a generated UID if not\n */\nfunction init(value, cookieDomain) {\n\tconst defaultUserConfig = {\n\t\tstorage: 'cookie',\n\t\tname: 'spoor-id',\n\t\tnameOverride: 'spoor-id',\n\t\tvalue: null,\n\n\t\t// Set the store cookie domain to .ft.com for ft.com and all its subdomains\n\t\tdomain: location.hostname.match(/^(?:.+\\.)?ft\\.com$/) ? 'ft.com' : null,\n\t};\n\tif ( cookieDomain ) {\n\t\tdefaultUserConfig.domain = cookieDomain;\n\t}\n\n\tstore = new Store(defaultUserConfig.name, defaultUserConfig);\n\tlet id = store.read();\n\n\tif (!id) {\n\t\tid = value;\n\t}\n\n\treturn setUser(id); // Refresh cookies and update state\n}\n\n/**\n * setUser\n *\n * @param {string} id The userID to set.\n * @returns {string} - The user ID if present, or a generated UID if not\n */\nfunction setUser(id) {\n\tuserID = id;\n\n\tif (!userID) {\n\t\tuserID = guid();\n\t}\n\n\tstore.write(userID); // Refreshes the cookie...\n\n\treturn userID;\n}\n\n/**\n * Delete the current user data.\n *\n * @returns {void}\n */\nfunction destroy() {\n\tstore.destroy();\n}\n\n/**\n * Get the user ID\n *\n * @returns {string} - The user ID\n */\nfunction id() {\n\treturn userID;\n}\n\nexport {\n\tinit,\n\tsetUser,\n\tid as userID,\n\tdestroy\n};\n","import {is, merge, isUndefined, guid} from '../utils.js';\nimport {Store} from './store.js';\n\n/**\n * @typedef {object} Session\n * @property {string} id - The id of the session\n * @property {boolean} isNew - Whether it is a brand new session\n */\n\nlet store;\nconst defaultSessionConfig = {\n\tstorage: 'best',\n\tname: 'session',\n\texpires: 30 * 60 * 1000 // 30 minutes\n};\n\n/**\n * Set the session in the store.\n *\n * @param {string} session - The session to be stored.\n * @returns {void}\n */\nfunction setSession(session) {\n\tconst d = new Date();\n\td.setTime(d.getTime() + store.config.expires);\n\n\tstore.write({\n\t\tvalue: session,\n\t\texpiry: d.valueOf()\n\t});\n}\n\n/**\n * Get the session from the store. Expiry and gen of a new session are handled here.\n *\n * @returns {Session} the current session\n */\nfunction getSession() {\n\tconst s = store.read();\n\tlet session;\n\tlet isNew = false;\n\n\tif (s) {\n\t\tconst d = new Date().valueOf();\n\t\tconst exp = parseInt(s.expiry, 10);\n\n\t\t// If current session is active.\n\t\tif (exp >= d) {\n\t\t\tsession = s.value;\n\t\t}\n\t}\n\n\t// No active session, gen a new one.\n\tif (!session) {\n\t\tsession = guid();\n\t\tisNew = true;\n\t}\n\n\t// Refreshes the cookie...\n\tsetSession(session);\n\n\treturn {\n\t\tid: session,\n\t\tisNew: isNew\n\t};\n}\n\n/**\n * Init\n *\n * @param {string|object} [config] The name used to store the session or configuration object.\n * @returns {Session} - The session\n */\nfunction init(config) {\n\tif (is(config, 'string')) {\n\t\tconfig = { name: config };\n\t}\n\n\tif (isUndefined(config)) {\n\t\tconfig = {};\n\t}\n\n\tconst c = merge(defaultSessionConfig, config);\n\n\t// config.name is important here, means the user has specifically asked for a cookie name.\n\tif (c.storage === 'cookie' && config.name) {\n\t\tc.nameOverride = c.name;\n\t}\n\n\tstore = new Store(c.name, c);\n\n\treturn getSession();\n}\n\nexport { getSession as session, init };\n","module.exports = function(md, options) {\n  options = options || {};\n  options.listUnicodeChar = options.hasOwnProperty('listUnicodeChar') ? options.listUnicodeChar : false;\n  options.stripListLeaders = options.hasOwnProperty('stripListLeaders') ? options.stripListLeaders : true;\n  options.gfm = options.hasOwnProperty('gfm') ? options.gfm : true;\n  options.useImgAltText = options.hasOwnProperty('useImgAltText') ? options.useImgAltText : true;\n\n  var output = md || '';\n\n  // Remove horizontal rules (stripListHeaders conflict with this rule, which is why it has been moved to the top)\n  output = output.replace(/^(-\\s*?|\\*\\s*?|_\\s*?){3,}\\s*$/gm, '');\n\n  try {\n    if (options.stripListLeaders) {\n      if (options.listUnicodeChar)\n        output = output.replace(/^([\\s\\t]*)([\\*\\-\\+]|\\d+\\.)\\s+/gm, options.listUnicodeChar + ' $1');\n      else\n        output = output.replace(/^([\\s\\t]*)([\\*\\-\\+]|\\d+\\.)\\s+/gm, '$1');\n    }\n    if (options.gfm) {\n      output = output\n        // Header\n        .replace(/\\n={2,}/g, '\\n')\n        // Fenced codeblocks\n        .replace(/~{3}.*\\n/g, '')\n        // Strikethrough\n        .replace(/~~/g, '')\n        // Fenced codeblocks\n        .replace(/`{3}.*\\n/g, '');\n    }\n    output = output\n      // Remove HTML tags\n      .replace(/<[^>]*>/g, '')\n      // Remove setext-style headers\n      .replace(/^[=\\-]{2,}\\s*$/g, '')\n      // Remove footnotes?\n      .replace(/\\[\\^.+?\\](\\: .*?$)?/g, '')\n      .replace(/\\s{0,2}\\[.*?\\]: .*?$/g, '')\n      // Remove images\n      .replace(/\\!\\[(.*?)\\][\\[\\(].*?[\\]\\)]/g, options.useImgAltText ? '$1' : '')\n      // Remove inline links\n      .replace(/\\[(.*?)\\][\\[\\(].*?[\\]\\)]/g, '$1')\n      // Remove blockquotes\n      .replace(/^\\s{0,3}>\\s?/g, '')\n      // Remove reference-style links?\n      .replace(/^\\s{1,2}\\[(.*?)\\]: (\\S+)( \".*?\")?\\s*$/g, '')\n      // Remove atx-style headers\n      .replace(/^(\\n)?\\s{0,}#{1,6}\\s+| {0,}(\\n)?\\s{0,}#{0,} {0,}(\\n)?\\s{0,}$/gm, '$1$2$3')\n      // Remove emphasis (repeat the line to remove double emphasis)\n      .replace(/([\\*_]{1,3})(\\S.*?\\S{0,1})\\1/g, '$2')\n      .replace(/([\\*_]{1,3})(\\S.*?\\S{0,1})\\1/g, '$2')\n      // Remove code blocks\n      .replace(/(`{3,})(.*?)\\1/gm, '$2')\n      // Remove inline code\n      .replace(/`(.+?)`/g, '$1')\n      // Replace two or more newlines with exactly two? Not entirely sure this belongs here...\n      .replace(/\\n{2,}/g, '\\n\\n');\n  } catch(e) {\n    console.error(e);\n    return md;\n  }\n  return output;\n};\n","/* eslint-disable no-console */\nconst missingDataMessage = 'Could not find layout information. ' +\n\t'You may need to include o-grid css. See the README (https://registry.origami.ft.com/components/o-grid/readme) ' +\n\t'for more information.';\n\n/**\n * Grab grid properties\n *\n * @returns {object} layout names and gutter widths\n */\nfunction getGridProperties() {\n\tconst properties = getGridFromDoc('after');\n\tif (Object.keys(properties).length === 0) {\n\t\tconsole.warn(missingDataMessage);\n\t}\n\treturn properties;\n}\n\n/**\n * Get all layout sizes.\n * CSS must be included so JavaScript can retrieve layout information.\n * See the README for more information.\n *\n * @returns {object} layout names and sizes\n */\nfunction getGridBreakpoints() {\n\tconst breakpoints = getGridFromDoc('before');\n\tif (Object.keys(breakpoints).length === 0) {\n\t\tconsole.warn(missingDataMessage);\n\t}\n\treturn breakpoints;\n}\n\n/**\n * Grab grid properties surfaced in html:after and html:before's content\n *\n * @param {string} position Whether to get all properties in :before, or current properties in :after\n * @returns {object} layout names and gutter widths\n */\nfunction getGridFromDoc(position) {\n\t// Contained in a try/catch as it should not error if o-grid styles are not (deliberately or accidentally) loaded\n\t// e.g. o-tracking will always try to read this property, but the page is not obliged to use o-grid for layout\n\ttry {\n\t\tlet gridProperties = window.getComputedStyle(document.documentElement, ':' + position).getPropertyValue('content');\n\t\t// Firefox computes: \"{\\\"foo\\\": \\\"bar\\\"}\"\n\t\t// We want readable JSON: {\"foo\": \"bar\"}\n\t\tgridProperties = gridProperties.replace(/'/g, '').replace(/\\\\/g, '').replace(/^\"/, '').replace(/\"$/, '');\n\t\treturn JSON.parse(gridProperties);\n\t} catch (e) {\n\t\treturn {};\n\t}\n}\n\n/**\n * Grab the current layout.\n * CSS must be included so JavaScript can retrieve layout information.\n * See the README for more information.\n *\n * @returns {string} Layout name\n */\nfunction getCurrentLayout() {\n\treturn getGridProperties().layout;\n}\n\n/**\n * Grab the current space between columns.\n * CSS must be included so JavaScript can retrieve layout information.\n * See the README for more information.\n *\n * @returns {string} Gutter width in pixels\n */\nfunction getCurrentGutter() {\n\treturn getGridProperties().gutter;\n}\n\n/**\n * This sets MediaQueryListeners on all the o-grid breakpoints\n * and fires a `o-grid.layoutChange` event on layout change.\n * CSS must be included so JavaScript can retrieve layout information.\n * See the README for more information.\n *\n * @returns {void}\n */\nfunction enableLayoutChangeEvents() {\n\t// Create a map containing all breakpoints exposed via html:before\n\tconst gridLayouts = getGridBreakpoints();\n\t// eslint-disable-next-line no-prototype-builtins\n\tif (gridLayouts.hasOwnProperty('layouts')) {\n\t\tconst layouts = gridLayouts.layouts;\n\t\tconst breakpoints = [\n\t\t\t...Object.entries(layouts),\n\t\t\t['default', '240px']\n\t\t].sort((a, b) => parseFloat(a[1]) - parseFloat(b[1]));\n\n\t\tconst setupQuery = (query, size) => {\n\t\t\t// matchMedia listener handler: Dispatch `o-grid.layoutChange` event if a match\n\t\t\tconst handleMQChange = mql => {\n\t\t\t\tif (mql.matches) {\n\t\t\t\t\twindow.dispatchEvent(new CustomEvent('o-grid.layoutChange', {\n\t\t\t\t\t\tdetail: {\n\t\t\t\t\t\t\tlayout: size,\n\t\t\t\t\t\t}\n\t\t\t\t\t}));\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconst mql = window.matchMedia(query);\n\t\t\tmql.addListener(handleMQChange);\n\t\t\thandleMQChange(mql);\n\t\t};\n\n\t\t// Generate media queries for each\n\t\tconst decr1 = val => `${Number(val.replace('px', '') - 1)}px`;\n\t\tfor (let index = 0; index < breakpoints.length; index++) {\n\t\t\tconst [layoutName, layoutWidth] = breakpoints[index];\n\t\t\tconst isLast = index === breakpoints.length - 1;\n\t\t\tif (isLast) {\n\t\t\t\tsetupQuery(`(min-width: ${layoutWidth})`, layoutName);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst [,nextLayoutWidth] = breakpoints[index + 1];\n\t\t\tsetupQuery(`(min-width: ${layoutWidth}) and (max-width: ${decr1(nextLayoutWidth)})`, layoutName);\n\t\t}\n\t} else {\n\t\tconsole.error('Could not enable grid layout change events. Include o-grid css. See the README (https://registry.origami.ft.com/components/o-grid/readme) for more details.');\n\t}\n}\n\nexport {\n\tgetCurrentLayout,\n\tgetCurrentGutter,\n\tgetGridBreakpoints,\n\tenableLayoutChangeEvents\n};\n\nexport default {\n\tgetCurrentLayout,\n\tgetCurrentGutter,\n\tgetGridBreakpoints,\n\tenableLayoutChangeEvents\n};\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","// .dirname, .basename, and .extname methods are extracted from Node.js v8.11.1,\n// backported and transplited with Babel, with backwards-compat fixes\n\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes, empty elements, or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n  // if the path tries to go above the root, `up` ends up > 0\n  var up = 0;\n  for (var i = parts.length - 1; i >= 0; i--) {\n    var last = parts[i];\n    if (last === '.') {\n      parts.splice(i, 1);\n    } else if (last === '..') {\n      parts.splice(i, 1);\n      up++;\n    } else if (up) {\n      parts.splice(i, 1);\n      up--;\n    }\n  }\n\n  // if the path is allowed to go above the root, restore leading ..s\n  if (allowAboveRoot) {\n    for (; up--; up) {\n      parts.unshift('..');\n    }\n  }\n\n  return parts;\n}\n\n// path.resolve([from ...], to)\n// posix version\nexports.resolve = function() {\n  var resolvedPath = '',\n      resolvedAbsolute = false;\n\n  for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n    var path = (i >= 0) ? arguments[i] : process.cwd();\n\n    // Skip empty and invalid entries\n    if (typeof path !== 'string') {\n      throw new TypeError('Arguments to path.resolve must be strings');\n    } else if (!path) {\n      continue;\n    }\n\n    resolvedPath = path + '/' + resolvedPath;\n    resolvedAbsolute = path.charAt(0) === '/';\n  }\n\n  // At this point the path should be resolved to a full absolute path, but\n  // handle relative paths to be safe (might happen when process.cwd() fails)\n\n  // Normalize the path\n  resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {\n    return !!p;\n  }), !resolvedAbsolute).join('/');\n\n  return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\n};\n\n// path.normalize(path)\n// posix version\nexports.normalize = function(path) {\n  var isAbsolute = exports.isAbsolute(path),\n      trailingSlash = substr(path, -1) === '/';\n\n  // Normalize the path\n  path = normalizeArray(filter(path.split('/'), function(p) {\n    return !!p;\n  }), !isAbsolute).join('/');\n\n  if (!path && !isAbsolute) {\n    path = '.';\n  }\n  if (path && trailingSlash) {\n    path += '/';\n  }\n\n  return (isAbsolute ? '/' : '') + path;\n};\n\n// posix version\nexports.isAbsolute = function(path) {\n  return path.charAt(0) === '/';\n};\n\n// posix version\nexports.join = function() {\n  var paths = Array.prototype.slice.call(arguments, 0);\n  return exports.normalize(filter(paths, function(p, index) {\n    if (typeof p !== 'string') {\n      throw new TypeError('Arguments to path.join must be strings');\n    }\n    return p;\n  }).join('/'));\n};\n\n\n// path.relative(from, to)\n// posix version\nexports.relative = function(from, to) {\n  from = exports.resolve(from).substr(1);\n  to = exports.resolve(to).substr(1);\n\n  function trim(arr) {\n    var start = 0;\n    for (; start < arr.length; start++) {\n      if (arr[start] !== '') break;\n    }\n\n    var end = arr.length - 1;\n    for (; end >= 0; end--) {\n      if (arr[end] !== '') break;\n    }\n\n    if (start > end) return [];\n    return arr.slice(start, end - start + 1);\n  }\n\n  var fromParts = trim(from.split('/'));\n  var toParts = trim(to.split('/'));\n\n  var length = Math.min(fromParts.length, toParts.length);\n  var samePartsLength = length;\n  for (var i = 0; i < length; i++) {\n    if (fromParts[i] !== toParts[i]) {\n      samePartsLength = i;\n      break;\n    }\n  }\n\n  var outputParts = [];\n  for (var i = samePartsLength; i < fromParts.length; i++) {\n    outputParts.push('..');\n  }\n\n  outputParts = outputParts.concat(toParts.slice(samePartsLength));\n\n  return outputParts.join('/');\n};\n\nexports.sep = '/';\nexports.delimiter = ':';\n\nexports.dirname = function (path) {\n  if (typeof path !== 'string') path = path + '';\n  if (path.length === 0) return '.';\n  var code = path.charCodeAt(0);\n  var hasRoot = code === 47 /*/*/;\n  var end = -1;\n  var matchedSlash = true;\n  for (var i = path.length - 1; i >= 1; --i) {\n    code = path.charCodeAt(i);\n    if (code === 47 /*/*/) {\n        if (!matchedSlash) {\n          end = i;\n          break;\n        }\n      } else {\n      // We saw the first non-path separator\n      matchedSlash = false;\n    }\n  }\n\n  if (end === -1) return hasRoot ? '/' : '.';\n  if (hasRoot && end === 1) {\n    // return '//';\n    // Backwards-compat fix:\n    return '/';\n  }\n  return path.slice(0, end);\n};\n\nfunction basename(path) {\n  if (typeof path !== 'string') path = path + '';\n\n  var start = 0;\n  var end = -1;\n  var matchedSlash = true;\n  var i;\n\n  for (i = path.length - 1; i >= 0; --i) {\n    if (path.charCodeAt(i) === 47 /*/*/) {\n        // If we reached a path separator that was not part of a set of path\n        // separators at the end of the string, stop now\n        if (!matchedSlash) {\n          start = i + 1;\n          break;\n        }\n      } else if (end === -1) {\n      // We saw the first non-path separator, mark this as the end of our\n      // path component\n      matchedSlash = false;\n      end = i + 1;\n    }\n  }\n\n  if (end === -1) return '';\n  return path.slice(start, end);\n}\n\n// Uses a mixed approach for backwards-compatibility, as ext behavior changed\n// in new Node.js versions, so only basename() above is backported here\nexports.basename = function (path, ext) {\n  var f = basename(path);\n  if (ext && f.substr(-1 * ext.length) === ext) {\n    f = f.substr(0, f.length - ext.length);\n  }\n  return f;\n};\n\nexports.extname = function (path) {\n  if (typeof path !== 'string') path = path + '';\n  var startDot = -1;\n  var startPart = 0;\n  var end = -1;\n  var matchedSlash = true;\n  // Track the state of characters (if any) we see before our first dot and\n  // after any path separator we find\n  var preDotState = 0;\n  for (var i = path.length - 1; i >= 0; --i) {\n    var code = path.charCodeAt(i);\n    if (code === 47 /*/*/) {\n        // If we reached a path separator that was not part of a set of path\n        // separators at the end of the string, stop now\n        if (!matchedSlash) {\n          startPart = i + 1;\n          break;\n        }\n        continue;\n      }\n    if (end === -1) {\n      // We saw the first non-path separator, mark this as the end of our\n      // extension\n      matchedSlash = false;\n      end = i + 1;\n    }\n    if (code === 46 /*.*/) {\n        // If this is our first dot, mark it as the start of our extension\n        if (startDot === -1)\n          startDot = i;\n        else if (preDotState !== 1)\n          preDotState = 1;\n    } else if (startDot !== -1) {\n      // We saw a non-dot and non-path separator before our dot, so we should\n      // have a good chance at having a non-empty extension\n      preDotState = -1;\n    }\n  }\n\n  if (startDot === -1 || end === -1 ||\n      // We saw a non-dot character immediately before the dot\n      preDotState === 0 ||\n      // The (right-most) trimmed path component is exactly '..'\n      preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n    return '';\n  }\n  return path.slice(startDot, end);\n};\n\nfunction filter (xs, f) {\n    if (xs.filter) return xs.filter(f);\n    var res = [];\n    for (var i = 0; i < xs.length; i++) {\n        if (f(xs[i], i, xs)) res.push(xs[i]);\n    }\n    return res;\n}\n\n// String.prototype.substr - negative index don't work in IE8\nvar substr = 'ab'.substr(-1) === 'b'\n    ? function (str, start, len) { return str.substr(start, len) }\n    : function (str, start, len) {\n        if (start < 0) start = str.length + start;\n        return str.substr(start, len);\n    }\n;\n","'use strict'\n\nmodule.exports = alphabetical\n\n// Check if the given character code, or the character code at the first\n// character, is alphabetical.\nfunction alphabetical(character) {\n  var code = typeof character === 'string' ? character.charCodeAt(0) : character\n\n  return (\n    (code >= 97 && code <= 122) /* a-z */ ||\n    (code >= 65 && code <= 90) /* A-Z */\n  )\n}\n","'use strict';\n\nmodule.exports = {\n  position: true,\n  gfm: true,\n  commonmark: false,\n  footnotes: false,\n  pedantic: false,\n  blocks: require('./block-elements.json')\n};\n","'use strict';\n\nmodule.exports = indentation;\n\n/* Map of characters, and their column length,\n * which can be used as indentation. */\nvar characters = {' ': 1, '\\t': 4};\n\n/* Gets indentation information for a line. */\nfunction indentation(value) {\n  var index = 0;\n  var indent = 0;\n  var character = value.charAt(index);\n  var stops = {};\n  var size;\n\n  while (character in characters) {\n    size = characters[character];\n\n    indent += size;\n\n    if (size > 1) {\n      indent = Math.floor(indent / size) * size;\n    }\n\n    stops[indent] = index;\n\n    character = value.charAt(++index);\n  }\n\n  return {indent: indent, stops: stops};\n}\n","'use strict';\n\nvar attributeName = '[a-zA-Z_:][a-zA-Z0-9:._-]*';\nvar unquoted = '[^\"\\'=<>`\\\\u0000-\\\\u0020]+';\nvar singleQuoted = '\\'[^\\']*\\'';\nvar doubleQuoted = '\"[^\"]*\"';\nvar attributeValue = '(?:' + unquoted + '|' + singleQuoted + '|' + doubleQuoted + ')';\nvar attribute = '(?:\\\\s+' + attributeName + '(?:\\\\s*=\\\\s*' + attributeValue + ')?)';\nvar openTag = '<[A-Za-z][A-Za-z0-9\\\\-]*' + attribute + '*\\\\s*\\\\/?>';\nvar closeTag = '<\\\\/[A-Za-z][A-Za-z0-9\\\\-]*\\\\s*>';\nvar comment = '<!---->|<!--(?:-?[^>-])(?:-?[^-])*-->';\nvar processing = '<[?].*?[?]>';\nvar declaration = '<![A-Za-z]+\\\\s+[^>]*>';\nvar cdata = '<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>';\n\nexports.openCloseTag = new RegExp('^(?:' + openTag + '|' + closeTag + ')');\n\nexports.tag = new RegExp('^(?:' +\n  openTag + '|' +\n  closeTag + '|' +\n  comment + '|' +\n  processing + '|' +\n  declaration + '|' +\n  cdata +\n')');\n","'use strict';\n\nmodule.exports = locate;\n\nfunction locate(value, fromIndex) {\n  return value.indexOf('<', fromIndex);\n}\n","'use strict';\n\nmodule.exports = locate;\n\nfunction locate(value, fromIndex) {\n  var link = value.indexOf('[', fromIndex);\n  var image = value.indexOf('![', fromIndex);\n\n  if (image === -1) {\n    return link;\n  }\n\n  /* Link can never be `-1` if an image is found, so we don’t need\n   * to check for that :) */\n  return link < image ? link : image;\n}\n","function _setPrototypeOf(o, p) {\n  module.exports = _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n    o.__proto__ = p;\n    return o;\n  };\n\n  module.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n  return _setPrototypeOf(o, p);\n}\n\nmodule.exports = _setPrototypeOf;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","/**\n * @file\n * Bar chart template\n */\n\nimport React from 'react';\nimport { scaleBand, scaleLinear } from '@visx/scale';\nimport { extent } from 'd3-array';\nimport ChartFrame from '../../components/chart-frame';\nimport Bars from '../../components/bars';\nimport Axis from '../../components/axis';\nimport { barChartPropTypes } from '../../components/prop-types';\nimport { barChartDefaultProps } from '../../components/default-props';\n\nconst BarChart = ({\n  additionalAxisStyles,\n  automaticallyAddPaddingForTicks,\n  hideXAxisLine,\n  hideXAxisTicks,\n  hideYAxisLine,\n  hideYAxisTicks,\n  xAxisOrientation,\n  xTickLength,\n  yAxisOrientation,\n  yTickComponent,\n  yTickFormat,\n  yTickLength,\n  xMax: xMaxOverride,\n  // Base\n  height,\n  margin,\n  padding,\n  width,\n  // <ChartFrame />\n  background,\n  hideFooter,\n  hideTopper,\n  type,\n  description,\n  // <Bars />\n  data,\n  fill,\n  fixedBarHeight,\n  paddingInner,\n  paddingOuter,\n  roundScale,\n  xVariable,\n  yVariable,\n}) => {\n  // Construct scales *without* specifying ranges. Components that receive scales as props will specify their own ranges based on the width/height props they receive (directly or via <ChartFrame />)\n  const dataExtent = extent(data, (d) => d[xVariable]);\n  const xMax = xMaxOverride || Math.max(dataExtent[1], 0);\n  const xScale = scaleLinear({\n    domain: [Math.min(0, dataExtent[0]), xMax],\n    round: roundScale,\n  });\n  const yScaleOptions = {\n    domain: data.map((d) => d[yVariable]),\n    paddingInner,\n    paddingOuter,\n    round: roundScale,\n  };\n  const yScale = fixedBarHeight\n    ? scaleBand({ ...yScaleOptions, range: [0, fixedBarHeight * data.length] })\n    : scaleBand(yScaleOptions);\n\n  return (\n    <ChartFrame\n      background={background}\n      height={height}\n      hideFooter={hideFooter}\n      hideTopper={hideTopper}\n      margin={margin}\n      padding={padding}\n      type={type}\n      width={width}\n      description={description}\n    >\n      {/* y-axis */}\n      {yAxisOrientation && (\n        <Axis\n          additionalAxisStyles={additionalAxisStyles}\n          automaticallyAddPaddingForTicks={automaticallyAddPaddingForTicks}\n          automaticallySetRange={!fixedBarHeight}\n          hideAxisLine={hideYAxisLine}\n          hideTicks={hideYAxisTicks}\n          orientation={yAxisOrientation}\n          scale={yScale}\n          tickComponent={yTickComponent}\n          tickFormat={yTickFormat}\n          tickLengthOverride={yTickLength}\n        />\n      )}\n\n      {/* x-axis */}\n      {xAxisOrientation && (\n        <Axis\n          automaticallySetRange={!fixedBarHeight}\n          hideAxisLine={hideXAxisLine}\n          hideTicks={hideXAxisTicks}\n          orientation={xAxisOrientation}\n          scale={xScale}\n          tickLengthOverride={xTickLength}\n        />\n      )}\n\n      <Bars\n        data={data}\n        fill={fill}\n        fixedBarHeight={fixedBarHeight}\n        // Set the range in the bars component if not set by either axes\n        automaticallySetRange={!xAxisOrientation || !yAxisOrientation}\n        xScale={xScale}\n        xVariable={xVariable}\n        yScale={yScale}\n        yVariable={yVariable}\n      />\n    </ChartFrame>\n  );\n};\n\nBarChart.propTypes = barChartPropTypes;\nBarChart.defaultProps = barChartDefaultProps;\n\nexport default BarChart;\n","var Symbol = require('./_Symbol'),\n    getRawTag = require('./_getRawTag'),\n    objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n    undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n  if (value == null) {\n    return value === undefined ? undefinedTag : nullTag;\n  }\n  return (symToStringTag && symToStringTag in Object(value))\n    ? getRawTag(value)\n    : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var baseIsNative = require('./_baseIsNative'),\n    getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = getValue(object, key);\n  return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","/**\n * @file\n * Scatter chart template\n */\n\nimport React from 'react';\nimport * as GChartcolour from 'g-chartcolour';\nimport groupBy from 'lodash.groupby';\nimport { scaleLinear, scaleOrdinal } from '@visx/scale';\nimport { extent } from 'd3-array';\nimport { Group } from '@visx/group';\nimport ChartFrame from '../../components/chart-frame';\nimport Legend from '../../components/legend';\nimport { Dots } from '../../components/dots';\nimport { Line } from '../../components/lines';\nimport Axis from '../../components/axis';\nimport { connectedScatterChartPropTypes } from '../../components/prop-types';\nimport { connectedScatterChartDefaultProps } from '../../components/default-props';\n\nconst ConnectedScatterChart = (props) => {\n  const {\n    data,\n    type,\n    width,\n    height,\n    margin,\n    description,\n    xAxisOrientation,\n    yAxisOrientation,\n    xVariable,\n    yVariable,\n    orderVariable,\n    colorVariable,\n    labelColumn,\n  } = props;\n\n  // Set scales\n  const xScale = scaleLinear({\n    domain: [\n      Math.min(0, extent(data, (d) => d[xVariable])[0]),\n      extent(data, (d) => d[xVariable])[1],\n    ],\n  });\n  const yScale = scaleLinear({\n    domain: [\n      Math.min(0, extent(data, (d) => d[yVariable])[0]),\n      extent(data, (d) => d[yVariable])[1],\n    ],\n  });\n  const colorScale = scaleOrdinal({\n    domain: [...new Set(data.map((d) => d[colorVariable]))],\n    range:\n      type === 'print' // eslint-disable-line no-nested-ternary\n        ? GChartcolour.linePrint\n        : type === 'social' || type === 'video'\n        ? GChartcolour.lineSocial\n        : GChartcolour.lineWeb,\n  });\n\n  // Order data ascending by the `orderVariable`\n  const orderedData = data.sort((a, b) => {\n    if (orderVariable === 'date') {\n      return new Date(a[orderVariable]) - new Date(b[orderVariable]);\n    }\n    return a[orderVariable] - b[orderVariable];\n  });\n  // Group data by `group`\n  const parsedData = groupBy(orderedData, 'group');\n\n  return (\n    <ChartFrame type={type} width={width} height={height} margin={margin} description={description}>\n      {Object.keys(parsedData).map((key) => {\n        return (\n          <Group key={`group__${key}`}>\n            <Dots\n              data={parsedData[key]}\n              xScale={xScale}\n              yScale={yScale}\n              colorScale={colorScale}\n              xVariable={xVariable}\n              yVariable={yVariable}\n              colorVariable={colorVariable}\n              labelVariable={labelColumn}\n            />\n            <Line\n              data={parsedData[key]}\n              xVariable={xVariable}\n              yVariable={yVariable}\n              xScale={xScale}\n              yScale={yScale}\n              color={colorScale(key)}\n            />\n          </Group>\n        );\n      })}\n\n      {/* y-axis */}\n      <Axis orientation={yAxisOrientation} scale={yScale} />\n\n      {/* x-axis */}\n      <Axis orientation={xAxisOrientation} scale={xScale} />\n    </ChartFrame>\n  );\n};\n\nConnectedScatterChart.propTypes = connectedScatterChartPropTypes;\nConnectedScatterChart.defaultProps = connectedScatterChartDefaultProps;\n\nexport default ConnectedScatterChart;\n","/**\n * @file\n * Line chart template\n */\n\nimport React from 'react';\nimport { scaleLinear, scaleTime, scaleOrdinal, scaleLog } from '@visx/scale';\nimport { extent } from 'd3-array';\nimport * as GChartcolour from 'g-chartcolour';\nimport { Group } from '@visx/group';\nimport { formatData, getSeriesNames, extentMulti } from '../../util/parseData';\nimport Legend from '../../components/legend';\nimport ChartFrame from '../../components/chart-frame';\nimport { Lines } from '../../components/lines';\nimport Axis from '../../components/axis';\nimport { Dots } from '../../components/dots';\nimport { lineChartPropTypes } from '../../components/prop-types';\nimport { lineChartDefaultProps } from '../../components/default-props';\nimport { isZeroOrDefined, identity } from '../../util';\nimport Delaunay from '../../components/delaunay';\nimport AxisFade from './axis-fade';\n\nconst LineChart = (props) => {\n  const {\n    data: rawData,\n    // Axis and scale\n    xAxisOrientation,\n    yAxisOrientation,\n    logScale,\n    yTickValues,\n    additionalYTickValues,\n    yTickFormat,\n    yFullLengthTicks,\n    yMin: yMinOverride,\n    yMax: yMaxOverride,\n    xScaleType,\n    xTickValues,\n    xTickFormat,\n    xFullLengthTicks,\n    xMin: xMinOverride,\n    xMax: xMaxOverride,\n    yTransformFunction,\n    hideEndTicks,\n    additionalAxisStyles,\n    xAxisLabel,\n    xAxisLabelOffset,\n    xAxisLabelProps,\n    // Base\n    height,\n    margin,\n    width,\n    // <ChartFrame />\n    type,\n    hideTopper,\n    hideFooter,\n    hideTitleTooltip,\n    stabRule,\n    description,\n    // Lines\n    xVariable,\n    yVariable,\n    // Legend\n    showLegend,\n    // Line end dots\n    showLineEndDots,\n    labelStrokeColor,\n    labelStrokeWidth,\n    // Highlights\n    seriesToHighlight,\n    // Tooltips\n    showTooltips,\n    tooltipStyle,\n    tooltipComponent,\n    showTooltipLine,\n    allLinesHoverable,\n    hoverRadius,\n    // Color palettes\n    lineColorPalette,\n    labelColorPalette,\n    ghostLineColor,\n    ghostLineHoverColorScale,\n    ghostLineHoverLabelColorScale,\n    // Line outline/halo\n    highlightedLineOutlineWidth,\n    // Y-Axis fade\n    showYAxisFade,\n  } = props;\n  const data = xScaleType === 'time' ? formatData(rawData, '%-d/%-m/%Y') : rawData;\n  const seriesNames = Array.isArray(data) && data.length ? getSeriesNames(data) : [];\n\n  const yValueExtent = extentMulti(data, seriesNames);\n  // yMin cannot be zero for a log scale\n  const yMin = isZeroOrDefined(yMinOverride)\n    ? yMinOverride\n    : logScale && yValueExtent[0] === 0\n    ? 1\n    : yValueExtent[0];\n  const yMax = yMaxOverride || yValueExtent[1];\n  const transformedYMin = yTransformFunction ? yTransformFunction(yMin) : yMin;\n  const transformedYMax = yTransformFunction ? yTransformFunction(yMax) : yMax;\n  const yScale = logScale\n    ? scaleLog({ domain: [transformedYMin, transformedYMax] })\n    : scaleLinear({\n        domain: [transformedYMin, transformedYMax],\n      });\n\n  const xValueExtent = extent(data, (d) => d[xVariable]);\n  const xMin = xMinOverride || xValueExtent[0];\n  const xMax = xMaxOverride || xValueExtent[1];\n  const xScale =\n    xScaleType === 'time'\n      ? scaleTime({\n          domain: [xMin, xMax],\n        })\n      : scaleLinear({ domain: [xMin, xMax] });\n\n  if (hideEndTicks) {\n    // Before we hide the last tick, make sure the scale is rounded out\n    xScale.nice();\n  }\n\n  /* eslint-disable no-nested-ternary */\n  const colorScaleDomain = yVariable.length\n    ? yVariable\n    : seriesToHighlight.length\n    ? seriesToHighlight\n    : seriesNames;\n  const colorScaleDefaultRange =\n    type === 'print'\n      ? GChartcolour.linePrint\n      : type === 'social' || type === 'video'\n      ? GChartcolour.lineSocial\n      : GChartcolour.lineWeb;\n  /* eslint-enable no-nested-ternary */\n\n  const lineColorScale = scaleOrdinal({\n    domain: colorScaleDomain,\n    range: lineColorPalette || colorScaleDefaultRange,\n  });\n\n  const labelColorScale = labelColorPalette\n    ? scaleOrdinal({ domain: colorScaleDomain, range: labelColorPalette })\n    : lineColorScale;\n\n  const nonEmptyYVariable = Array.isArray(yVariable) && yVariable.length;\n  const seriesToShow = nonEmptyYVariable ? yVariable : seriesNames;\n\n  const nonEmptySeriesToHighlight = Array.isArray(seriesToHighlight) && seriesToHighlight.length;\n  // Generate line end dot for each line\n  const lineEndDots = showLineEndDots\n    ? seriesNames.reduce((acc, series) => {\n        const sortedData = [...data].sort((a, b) => a[xVariable] - b[xVariable]);\n        const reverseSortedData = [...sortedData].reverse();\n        const endEntry = reverseSortedData.find((d) => isZeroOrDefined(d[series]));\n        // Find the first entry that is greater than yMax\n        const firstIntersectionEntry = sortedData.find(\n          (d) => isZeroOrDefined(d[series]) && d[series] > yMax\n        );\n\n        return {\n          ...acc,\n          [series]: [\n            {\n              color: series,\n              x: endEntry[xVariable],\n              y: endEntry[series],\n              yAxisIntersectionX: firstIntersectionEntry && firstIntersectionEntry[xVariable],\n              label: true,\n              labelText: series,\n            },\n          ],\n        };\n      }, {})\n    : {};\n\n  // Filter out highlights from main array so we don't draw them twice\n  const seriesToShowFiltered = nonEmptySeriesToHighlight\n    ? seriesToShow.filter((s) => !seriesToHighlight.includes(s))\n    : seriesToShow;\n\n  const showAllSeriesAsGhostLines = nonEmptyYVariable && nonEmptySeriesToHighlight === 0;\n\n  // Format data for voronoi\n  const voronoiData = allLinesHoverable\n    ? data.flatMap((d) =>\n        seriesNames.map((e) => ({\n          [xVariable]: d[xVariable],\n          y: d[e],\n          seriesName: e,\n          labelData: { seriesName: e, yValue: d[e], xValue: d[xVariable] },\n          isHighlighted: seriesToHighlight.includes(e),\n        }))\n      )\n    : nonEmptySeriesToHighlight\n    ? data\n        .filter((d) => seriesToHighlight.some((seriesName) => isZeroOrDefined(d[seriesName]))) // Or empty string\n        .flatMap((d) =>\n          seriesToHighlight.map((e) => ({\n            [xVariable]: d[xVariable],\n            y: d[e],\n            seriesName: e,\n            labelData: { seriesName: e, yValue: d[e], xValue: d[xVariable] },\n            isHighlighted: seriesToHighlight.includes(e),\n          }))\n        )\n    : [];\n\n  return (\n    <ChartFrame\n      type={type}\n      width={width}\n      height={height}\n      margin={margin}\n      stabRule={stabRule}\n      description={description}\n      tooltipStyle={tooltipStyle}\n      tooltipComponent={tooltipComponent}\n      hideTopper={hideTopper}\n      hideFooter={hideFooter}\n      hideTitleTooltip={hideTitleTooltip}\n    >\n      {/* x-axis */}\n      <Axis\n        orientation={xAxisOrientation}\n        scale={xScale}\n        fullLengthTicks={xFullLengthTicks}\n        hideEndTicks={hideEndTicks}\n        additionalAxisStyles={additionalAxisStyles}\n        label={xAxisLabel}\n        labelOffset={xAxisLabelOffset}\n        labelProps={xAxisLabelProps}\n        tickValues={xTickValues}\n        tickFormat={xTickFormat}\n      />\n\n      {/* y-axis */}\n      <Axis\n        orientation={yAxisOrientation}\n        scale={yScale}\n        tickValues={yTickValues}\n        additionalTickValues={additionalYTickValues}\n        // Use custom y tick format if set, if log scale default to identity function\n        tickFormat={yTickFormat || (logScale && identity)}\n        fullLengthTicks={yFullLengthTicks}\n        additionalAxisStyles={additionalAxisStyles}\n      />\n\n      {showYAxisFade && <AxisFade orientation=\"vertical\" id=\"gradientMask\" />}\n\n      {showLegend && <Legend {...props} scale={lineColorScale} shape=\"line\" />}\n\n      <Group id=\"lines\" mask={showYAxisFade && `url(#gradientMask)`}>\n        <Group id=\"background-lines\">\n          <Lines\n            seriesNames={seriesToShowFiltered}\n            data={data}\n            xScale={xScale}\n            xVariable={xVariable}\n            yScale={yScale}\n            yTransformFunction={yTransformFunction}\n            colorScale={\n              nonEmptySeriesToHighlight || showAllSeriesAsGhostLines\n                ? () => ghostLineColor\n                : lineColorScale\n            }\n            strokeWidth={nonEmptySeriesToHighlight || showAllSeriesAsGhostLines ? 1 : 3}\n            highlightLinesOnHover={allLinesHoverable}\n            hoveredLinesColorScale={ghostLineHoverColorScale}\n            highlightedLineOutlineWidth={highlightedLineOutlineWidth}\n          />\n        </Group>\n        <Group id=\"highlighted-lines\">\n          {nonEmptySeriesToHighlight && (\n            <Lines\n              seriesNames={seriesToHighlight}\n              data={data}\n              xScale={xScale}\n              xVariable={xVariable}\n              yScale={yScale}\n              yTransformFunction={yTransformFunction}\n              colorScale={lineColorScale}\n              highlightedLineOutlineWidth={highlightedLineOutlineWidth}\n            />\n          )}\n        </Group>\n      </Group>\n\n      {showLineEndDots && (\n        <Dots\n          seriesNames={seriesToHighlight}\n          data={lineEndDots}\n          xScale={xScale}\n          xVariable=\"x\"\n          yScale={yScale}\n          yTransformFunction={yTransformFunction}\n          yVariable=\"y\"\n          colorScale={lineColorScale}\n          colorVariable=\"color\"\n          labelVariable=\"labelText\"\n          labelColorScale={labelColorScale}\n          labelProps={(cx, cy, r, color) => ({\n            labelAnchor: 'start',\n            points: [{ x: cx, y: cy }],\n            // @TODO change to scaled font value\n            labelFontSize: 18,\n            labelDx: 2 * r,\n            labelDy: r,\n          })}\n          strokeColor=\"#fff1e5\"\n          strokeWidth={1}\n          labelStrokeColor={labelStrokeColor}\n          labelStrokeWidth={labelStrokeWidth}\n          highlightDotsOnHover={allLinesHoverable}\n          hoveredDotsColorScale={ghostLineHoverColorScale}\n          hoveredDotsLabelColorScale={ghostLineHoverLabelColorScale}\n        />\n      )}\n\n      {showTooltips &&\n        ((showAllSeriesAsGhostLines && allLinesHoverable) || nonEmptySeriesToHighlight) && (\n          <Delaunay\n            xScale={xScale}\n            yScale={yScale}\n            colorScale={lineColorScale}\n            xVariable={xVariable}\n            yVariable=\"y\"\n            data={voronoiData}\n            yTransformFunction={yTransformFunction}\n            tooltipPositionOverride={({ data, xScale, yScale }) => ({\n              x: xScale(data.date),\n              y: yScale(yMax),\n            })}\n            showLine={showTooltipLine}\n            showCircle={showTooltipLine}\n            lineConfig={{\n              stroke: '#33302e',\n              strokeDasharray: '3, 1',\n            }}\n            circleConfig={{\n              r: 5,\n              stroke: '#fff1e5',\n              strokeWidth: 1,\n            }}\n            hoverRadius={hoverRadius}\n            // debug\n          />\n        )}\n    </ChartFrame>\n  );\n};\n\nLineChart.propTypes = lineChartPropTypes;\nLineChart.defaultProps = lineChartDefaultProps;\n\nexport default LineChart;\n","/**\n * @file\n * Scatter chart template\n */\n\nimport React from 'react';\nimport { PlotContext } from '../../components/chart-frame/plot-context';\nimport { scaleLinear, scaleOrdinal, scaleLog, scaleSqrt } from '@visx/scale';\nimport { extent } from 'd3-array';\nimport * as GChartcolour from 'g-chartcolour';\nimport ChartFrame from '../../components/chart-frame';\nimport { Dots } from '../../components/dots';\nimport Legend from '../../components/legend';\nimport RegressionLine from '../../components/regression-line';\nimport Axis from '../../components/axis';\nimport Delaunay from '../../components/delaunay';\nimport { isZeroOrDefined, identity } from '../../util';\nimport { scatterChartPropTypes } from '../../components/prop-types';\nimport { scatterChartDefaultProps } from '../../components/default-props';\n\nconst ScatterChart = ({\n  // Base\n  type,\n  data,\n  width,\n  height,\n  margin,\n  // ChartFrame\n  title,\n  subtitle,\n  description,\n  hideTopper,\n  hideFooter,\n  hideTitleTooltip,\n  stabRule,\n  // Legend\n  hideLegend,\n  legendOrientation,\n  legendGeometry,\n  hideSizeLegend,\n  sizeLegendX,\n  sizeLegendY,\n  // Tooltips\n  showTooltips,\n  tooltipStyle,\n  tooltipComponent,\n  tooltipPositionOverride,\n  tooltipHoverRadius,\n  hoveredDotsStrokeColor,\n  hoveredDotsStrokeWidth,\n  // Config\n  xAxisOrientation,\n  yAxisOrientation,\n  xAxisLabel,\n  yAxisLabel,\n  xVariable,\n  yVariable,\n  sizeVariable,\n  colorVariable,\n  colorScale: inputColorScale,\n  logScaleX,\n  logScaleY,\n  yTickFormat,\n  yTransformFunction,\n  yTickValues,\n  xTickFormat,\n  xTransformFunction,\n  xTickValues,\n  opacity,\n  scaleFactor,\n  maxCircleSize,\n  hollowDots,\n  dotsStrokeWidth,\n  lineOfRegression,\n  labelColumn,\n  xDomain,\n  yDomain,\n  sizeDomain,\n}) => {\n  // If we have variable size circles, sort data array by sizeVariable so small circles appear on top (rendered last in the DOM)\n  if (sizeVariable) {\n    data.sort((a, b) => b[sizeVariable] - a[sizeVariable]);\n  }\n\n  // Checks for the minimum and maximum values in the data\n  const xExtent = extent(data, (d) => d[xVariable]);\n  const yExtent = extent(data, (d) => d[yVariable]);\n  const sizeExtent = sizeVariable ? extent(data, (d) => d[sizeVariable]) : null;\n\n  const xMin = Math.min(xDomain[0], xExtent[0]);\n  const xMax = Math.max(xDomain[1], xExtent[1]);\n  const yMin =\n    logScaleY && Math.min(yDomain[0], yExtent[0]) === 0 ? 1 : Math.min(yDomain[0], yExtent[0]);\n  const yMax = Math.max(yDomain[1], yExtent[1]);\n  const transformedXMin = xTransformFunction ? xTransformFunction(xMin) : xMin;\n  const transformedXMax = xTransformFunction ? xTransformFunction(xMax) : xMax;\n  const transformedYMin = yTransformFunction ? yTransformFunction(yMin) : yMin;\n  const transformedYMax = yTransformFunction ? yTransformFunction(yMax) : yMax;\n\n  let xScale = scaleLinear({\n    domain: [transformedXMin, transformedXMax],\n  });\n  if (logScaleX) {\n    xScale = scaleLog({\n      domain: [transformedXMin, transformedXMax],\n    });\n  }\n\n  let yScale = scaleLinear({\n    domain: [transformedYMin, transformedYMax],\n  });\n\n  if (logScaleY) {\n    yScale = scaleLog({\n      domain: [transformedYMin, transformedYMax],\n    });\n  }\n\n  const sizeScale = sizeVariable\n    ? scaleSqrt({\n        domain: [Math.min(sizeDomain[0], 0), Math.max(sizeDomain[1], sizeExtent[1])],\n        range: [0, maxCircleSize[type] * scaleFactor],\n      })\n    : () => {\n        return maxCircleSize[type] * scaleFactor;\n      };\n\n  const colorScale =\n    inputColorScale ||\n    scaleOrdinal({\n      domain: [...new Set(data.map((d) => d[colorVariable]))],\n      range:\n        type === 'print' // eslint-disable-line no-nested-ternary\n          ? GChartcolour.linePrint\n          : type === 'social' || type === 'video'\n          ? GChartcolour.lineSocial\n          : GChartcolour.lineWeb,\n    });\n\n  return (\n    <ChartFrame\n      type={type}\n      width={width}\n      height={height}\n      margin={margin}\n      title={title}\n      subtitle={subtitle}\n      description={description}\n      stabRule={stabRule}\n      hideTopper={hideTopper}\n      hideFooter={hideFooter}\n      hideTitleTooltip={hideTitleTooltip}\n      tooltipComponent={tooltipComponent}\n      tooltipStyle={tooltipStyle}\n    >\n      {/* y-axis */}\n      <Axis\n        orientation={yAxisOrientation}\n        scale={yScale}\n        label={yAxisLabel || yVariable}\n        tickFormat={yTickFormat || (logScaleY && identity)}\n        tickValues={yTickValues}\n      />\n\n      {/* x-axis */}\n      <Axis\n        orientation={xAxisOrientation}\n        scale={xScale}\n        label={xAxisLabel || xVariable}\n        tickFormat={xTickFormat || (logScaleX && identity)}\n        tickValues={xTickValues}\n      />\n\n      {!hideLegend && Object.prototype.hasOwnProperty.call(colorScale, 'domain') && (\n        <Legend\n          scale={colorScale}\n          geometry={legendGeometry}\n          orientation={legendOrientation}\n          draggable={false}\n        />\n      )}\n\n      {sizeVariable && !hideSizeLegend && (\n        <Legend\n          legendType=\"magnitude\"\n          scale={sizeScale}\n          seriesNames={sizeExtent}\n          label=\"population\"\n          posX={sizeLegendX}\n          posY={sizeLegendY}\n          draggable={false}\n        />\n      )}\n\n      {lineOfRegression && (\n        <RegressionLine\n          data={[data]}\n          xScale={xScale}\n          yScale={yScale}\n          colorScale={colorScale}\n          xVariable={xVariable}\n          yVariable={yVariable}\n          sizeVariable={sizeVariable}\n          colorVariable={colorVariable}\n        />\n      )}\n\n      <Dots\n        data={data}\n        xScale={xScale}\n        yScale={yScale}\n        sizeScale={sizeScale}\n        colorScale={colorScale}\n        xVariable={xVariable}\n        yVariable={yVariable}\n        sizeVariable={sizeVariable}\n        colorVariable={colorVariable}\n        opacity={opacity}\n        strokeWidth={dotsStrokeWidth}\n        hollowDots={hollowDots}\n        labelVariable={labelColumn}\n        highlightDotsOnHover={showTooltips}\n        hoveredDotsStrokeColor={hoveredDotsStrokeColor}\n        hoveredDotsStrokeWidth={hoveredDotsStrokeWidth}\n      />\n\n      {showTooltips && (\n        <Delaunay\n          data={data}\n          xScale={xScale}\n          yScale={yScale}\n          colorScale={colorScale}\n          xVariable={xVariable}\n          yVariable={yVariable}\n          tooltipPositionOverride={tooltipPositionOverride}\n          hoverRadius={tooltipHoverRadius}\n        />\n      )}\n    </ChartFrame>\n  );\n};\n\nScatterChart.propTypes = scatterChartPropTypes;\nScatterChart.defaultProps = scatterChartDefaultProps;\n\nexport default ScatterChart;\n","/**\n * @file\n * Small bar chart template\n */\n\nimport React, { useContext } from 'react';\nimport { scaleBand, scaleLinear } from '@visx/scale';\nimport { Group } from '@visx/group';\nimport { max } from 'd3-array';\nimport { approximateTextSize } from '../../util/victory-textsize';\nimport ChartFrame from '../../components/chart-frame';\nimport { PlotContext } from '../../components/chart-frame/plot-context';\nimport Bars from '../../components/bars';\nimport { smallBarChartPropTypes } from '../../components/prop-types';\nimport { smallBarChartDefaultProps } from '../../components/default-props';\n\nconst chartTopperConfig = {\n  stabRule: false,\n  titleStyle: {\n    fontSize: 18,\n    fontWeight: 600,\n  },\n  titlePosition: {\n    x: 1,\n    y: 18,\n  },\n  subtitle: false,\n};\n\nconst chartFooterConfig = {\n  sourceFontSize: 14,\n  sourcePosition: {\n    x: 1,\n  },\n  sourcePlotYOffset: 0,\n  copyright: false,\n};\n\nconst SmallBars = ({\n  paddingBetweenLabels,\n  paddingAfterLabels,\n  // <Bars />\n  data,\n  xVariable,\n  yVariable,\n  colorScale,\n  colorVariable,\n  // base\n  ...props\n}) => {\n  const { height, padding, updatePadding } = useContext(PlotContext);\n  // Construct scales *without* specifying ranges. Components that receive scales as props will specify their own ranges based on the width/height props they receive (directly or via <ChartFrame />)\n  const xScale = scaleLinear({\n    domain: [0, max(data, d => d[xVariable])],\n  });\n  const yScale = scaleBand({\n    domain: data.map(d => d[yVariable]),\n    padding: 0.4,\n    range: [height, 0],\n  });\n\n  const maxYVariableTextSize = Math.max(\n    ...data\n      .map(d => d[yVariable].toUpperCase())\n      .map(\n        d =>\n          approximateTextSize(d, {\n            fontFamily: 'MetricWeb-Regular',\n            fontSize: 14,\n          }).width\n      )\n  );\n\n  const maxXVariableTextSize = Math.max(\n    ...data\n      .map(d => `${d[xVariable]}%`.toUpperCase())\n      .map(\n        d =>\n          approximateTextSize(d, {\n            fontFamily: 'MetricWeb',\n            fontWeight: 600,\n            fontSize: 16,\n          }).width\n      )\n  );\n\n  const totalLabelSize =\n    maxYVariableTextSize + maxXVariableTextSize + paddingBetweenLabels + paddingAfterLabels;\n\n  if (padding.right === 50) updatePadding({ left: totalLabelSize, right: 0 });\n\n  return (\n    <Group>\n      <Bars\n        {...props}\n        data={data}\n        colorScale={colorScale}\n        colorVariable={colorVariable}\n        xScale={xScale}\n        xVariable={xVariable}\n        yScale={yScale}\n        yVariable={yVariable}\n      />\n      <Group>\n        {data.map(d => (\n          <Group\n            key={`label__${d[yVariable]}`}\n            left={-totalLabelSize}\n            top={yScale(d[yVariable]) + yScale.bandwidth() - (18 - yScale.bandwidth())}\n          >\n            <text fontSize={14}>{d[yVariable].toUpperCase()}</text>\n            <text\n              textAnchor=\"end\"\n              x={totalLabelSize - paddingAfterLabels}\n              fontWeight={600}\n            >{`${d[xVariable]}%`}</text>\n          </Group>\n        ))}\n      </Group>\n    </Group>\n  );\n};\n\nconst SmallBarChart = props => {\n  return (\n    <ChartFrame type=\"web\" {...props} {...chartTopperConfig} {...chartFooterConfig}>\n      <SmallBars {...props} />\n    </ChartFrame>\n  );\n};\n\nSmallBars.propTypes = smallBarChartPropTypes;\nSmallBars.defaultProps = smallBarChartDefaultProps;\n\nexport default SmallBarChart;\n","/**\n * @file\n * Slope chart template\n */\n\nimport React, { useContext } from 'react';\nimport PropTypes from 'prop-types';\nimport { scalePoint, scaleLinear } from '@visx/scale';\nimport { css } from '@emotion/core';\nimport { Group } from '@visx/group';\nimport { uk } from '@financial-times/politics';\nimport { Line } from '../../components/lines';\nimport ChartFrame from '../../components/chart-frame';\nimport { PlotContext } from '../../components/chart-frame/plot-context';\n\nconst sortTwoDateStringsAsc = (a, b) => new Date(a).valueOf() - new Date(b).valueOf();\nconst getLastValue = (arr) =>\n  [...arr].sort(({ date: a }, { date: b }) => new Date(a).valueOf() - new Date(b).valueOf()).pop()\n    .value;\n\nexport const Slopes = ({\n  data,\n  electionDates,\n  circRadius,\n  maxLabelLength,\n  independentOverrides,\n}) => {\n  const { width, height } = useContext(PlotContext);\n  const byelectionDates = Object.entries(data)\n    .filter(\n      ([date, parties]) => !electionDates.includes(date) && Object.values(parties).some((i) => i)\n    )\n    .map(([date]) => date);\n\n  // Find the date of the last complete election\n  const [lastElection] = Object.keys(data).sort(\n    (a, b) => new Date(b).valueOf() - new Date(a).valueOf()\n  );\n  const [winnerVotePctLastElection] = Object.values(data[lastElection]).sort((a, b) => b - a);\n  const hadByElection = byelectionDates.length > 0;\n\n  const groups = Object.entries(data).reduce((acc, [date, parties]) => {\n    Object.entries(parties).forEach(([p, value]) => {\n      try {\n        const { shortName } = uk.getPartyInfo(p); // Will throw if unknown party\n        // Use full independent name if in parantheses\n        const identifier = shortName === 'Ind' && /Independent\\s?\\(.+?\\)/.test(p) ? p : shortName;\n        const dates = acc.get(identifier) || [];\n        acc.set(identifier, [...dates, { date, value }]);\n      } catch (e) {\n        // Show other other parties if within 25% of leader\n        if (winnerVotePctLastElection - value <= 25 || independentOverrides.includes(p)) {\n          const dates = acc.get(p) || [];\n          acc.set(p, [...dates, { date, value }]);\n        }\n      }\n    });\n\n    return acc;\n  }, new Map());\n\n  const xScale = scalePoint({\n    domain: [...byelectionDates, ...electionDates].sort(sortTwoDateStringsAsc),\n    range: [0, width],\n    round: true,\n  });\n\n  const maxValue = Math.max(...[...groups.values()].flat().map((d) => d.value));\n  const yScale = scaleLinear({\n    domain: [0, maxValue < 90 ? maxValue + 10 : maxValue],\n    range: [height, 0],\n    round: true,\n  });\n\n  const minLabelDist = 15;\n  const positionLabels = (labels, spacing, alpha) => {\n    labels.forEach((d1) => {\n      if (!d1.some((d) => d.date === lastElection)) return;\n      if (!d1.position) d1.position = yScale(getLastValue(d1)); // eslint-disable-line no-param-reassign\n      const y1 = d1.position;\n      const a1 = getLastValue(d1);\n      labels.forEach((d2) => {\n        if (!d2.some((d) => d.date === lastElection)) return;\n        if (!d2.position) d2.position = yScale(getLastValue(d2)); // eslint-disable-line no-param-reassign\n        const y2 = d2.position;\n        const a2 = getLastValue(d2);\n\n        /* Difference between current averages for each party\n          This ensures the parties are always in the correct order */\n        const deltaA = a1 - a2;\n\n        /* Difference between current positions\n          When this is below the required minimum spacing the positioning\n          algorithm should stop */\n        const deltaY = y1 - y2;\n\n        if (d1 !== d2 && Math.abs(deltaY) <= spacing) {\n          const sign = deltaA > 0 ? -1 : 1;\n          const adjust = sign * alpha;\n\n          d1.position = +y1 + adjust; // eslint-disable-line no-param-reassign\n          d2.position = +y2 - adjust; // eslint-disable-line no-param-reassign\n\n          positionLabels(labels, spacing, alpha);\n        }\n      });\n    });\n  };\n\n  positionLabels(groups, minLabelDist, 1);\n\n  return (\n    <Group top={20}>\n      <Group left={width + 20} className=\"slope-chart__legend legend\">\n        {[...groups.entries()].map(([groupName, group], idx, arr) => {\n          const lastValue = getLastValue(group);\n          // Make sure it's been in the last election\n          if (!group.some((d) => d.date === lastElection) || !lastValue) return null;\n          const isFrontrunner = arr.every(([, val]) => lastValue >= getLastValue(val));\n          // Check if it's a special independent (name is in parenthesis)\n          const specialInd = /Independent\\s?\\(/.test(groupName);\n          const [, nameInParenthOriginal] = groupName.match(/\\((.+?)\\)/) || [];\n          const nameInParenth = nameInParenthOriginal\n            ? nameInParenthOriginal.split(' ').reverse()[0]\n            : '';\n          const partyFill = (() => {\n            try {\n              return uk.getPartyInfo(groupName).color;\n            } catch (e) {\n              return uk.getPartyInfo('Others').color;\n            }\n          })();\n          const labelValue = (() => {\n            try {\n              return specialInd ? nameInParenth : uk.getPartyInfo(groupName).shortName;\n            } catch (e) {\n              return `${groupName.slice(0, maxLabelLength)}...`;\n            }\n          })();\n\n          return (\n            <Group key={groupName} top={group.position}>\n              <rect\n                width={5}\n                height={12}\n                fill={partyFill}\n                stroke={groupName === 'Speaker' ? '#B2AFAD' : 'none'}\n              />\n              <text fill=\"#33302e\" dx={12} dy={11}>\n                <tspan\n                  css={css`\n                    font-weight: ${isFrontrunner ? 600 : 400};\n                    font-size: 16px;\n                  `}\n                >\n                  {+lastValue.toFixed(1)}% {labelValue}\n                </tspan>\n              </text>\n            </Group>\n          );\n        })}\n      </Group>\n      <Group className=\"slope-chart__axes axis\">\n        {electionDates.map((d) => {\n          const [year] = d.split('-');\n          return (\n            <Group key={d} left={xScale(d)}>\n              <text\n                stroke=\"#33302e\"\n                style={{ fontFamily: 'MetricWeb', fontWeight: 100, fontSize: '14px' }}\n                textAnchor=\"middle\"\n              >\n                {year}\n              </text>\n              <line stroke=\"#b3a9a0\" x1=\"0\" x2=\"0\" y1=\"5\" y2={height} />\n            </Group>\n          );\n        })}\n        {hadByElection &&\n          byelectionDates.map((d) => {\n            const pad = 16;\n            // const [year] = d.split('-');\n            return (\n              <Group key={d} left={xScale(d)} top={Number(`-${pad}`)}>\n                <text\n                  stroke=\"#33302e\"\n                  style={{\n                    textTransform: 'uppercase',\n                    fontFamily: 'MetricWeb',\n                    fontWeight: 100,\n                    fontSize: '12px',\n                  }}\n                  textAnchor=\"middle\"\n                >\n                  {/* By-Election ({year}) */}\n                  By-Election\n                </text>\n                <line\n                  stroke=\"#b3a9a0\"\n                  strokeDasharray=\"5, 5\"\n                  x1=\"0\"\n                  x2=\"0\"\n                  y1=\"5\"\n                  y2={height + pad}\n                />\n              </Group>\n            );\n          })}\n      </Group>\n      <Group className=\"slope-chart__lines lines\" top={10}>\n        {[...groups.entries()]\n          .sort(([, a], [, b]) => {\n            const lastElectionA = a.find((d) => d.date === lastElection) || {};\n            const lastElectionB = b.find((d) => d.date === lastElection) || {};\n            return lastElectionA.value - lastElectionB.value;\n          })\n          .map(([groupName, group]) => {\n            const partyFill = (() => {\n              try {\n                return uk.getPartyInfo(groupName).color;\n              } catch (e) {\n                return uk.getPartyInfo('Others').color;\n              }\n            })();\n            return (\n              <Line\n                key={groupName}\n                color={partyFill}\n                xVariable=\"date\"\n                yVariable=\"value\"\n                defined={(d) => d.value !== null}\n                xScale={xScale}\n                yScale={yScale}\n                data={[...group].sort(\n                  ({ date: dateA }, { date: dateB }) =>\n                    new Date(dateB).valueOf() - new Date(dateA).valueOf()\n                )}\n                width={width}\n                height={height - 10}\n              />\n            );\n          })}\n      </Group>\n      <Group className=\"slope-chart__dots dots\" top={10}>\n        {[...groups.entries()]\n          .sort(([, a], [, b]) => {\n            const lastElectionA = a.find((d) => d.date === lastElection) || {};\n            const lastElectionB = b.find((d) => d.date === lastElection) || {};\n            return lastElectionA.value - lastElectionB.value;\n          })\n          .map(([groupName, group]) => {\n            const circX = xScale.copy().rangeRound([0, width]);\n            const circY = yScale.copy().rangeRound([height - 10, 0]);\n            const partyFill = (() => {\n              try {\n                return uk.getPartyInfo(groupName).color;\n              } catch (e) {\n                return uk.getPartyInfo('Others').color;\n              }\n            })();\n            const stroke = groupName === 'Speaker' ? '#B2AFAD' : 'none';\n\n            return [...group]\n              .sort((a, b) => b.value - a.value)\n              .map(\n                (g) =>\n                  g.value && (\n                    <circle\n                      r={circRadius}\n                      fill={partyFill}\n                      cx={circX(g.date)}\n                      cy={circY(g.value)}\n                      stroke={stroke}\n                    />\n                  )\n              );\n          })}\n      </Group>\n    </Group>\n  );\n};\n\nconst SlopeChart = ({ type, ...props }) => {\n  switch (type) {\n    case 'social':\n      return (\n        <ChartFrame\n          css={css`\n            .axis text,\n            .axis line {\n              stroke: white;\n            }\n          `}\n          padding={{ top: 0, right: 200, bottom: 0, left: 30 }}\n          subtitle=\"Total votes\"\n          {...props}\n        >\n          <Slopes {...props} />\n        </ChartFrame>\n      );\n    default:\n      break;\n  }\n  return (\n    <ChartFrame {...props} padding={{ top: 0, left: 30, bottom: 0, right: 200 }}>\n      <Slopes {...props} />\n    </ChartFrame>\n  );\n};\n\nSlopes.defaultProps = {\n  data: {},\n  electionDates: ['2015-05-07', '2017-06-08', '2019-12-12'],\n  circRadius: 5,\n  maxLabelLength: 15,\n  independentOverrides: [],\n};\n\nSlopes.propTypes = {\n  data: PropTypes.shape({\n    '2015-05-07': PropTypes.object.isRequired,\n    '2017-06-08': PropTypes.object.isRequired,\n  }),\n  electionDates: PropTypes.arrayOf(PropTypes.any),\n  circRadius: PropTypes.number,\n  maxLabelLength: PropTypes.number,\n  independentOverrides: PropTypes.arrayOf(PropTypes.string),\n};\n\nSlopeChart.propTypes = {\n  type: PropTypes.oneOf(['social']),\n  independentOverrides: PropTypes.arrayOf(PropTypes.string),\n};\n\nSlopeChart.defaultProps = {\n  type: undefined,\n  independentOverrides: [],\n};\n\nexport default SlopeChart;\n","/**\n * @file\n * Waffle chart template\n */\n\nimport React, { useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport { Group } from '@visx/group';\nimport { scaleLinear } from '@visx/scale';\nimport { uk } from '@financial-times/politics';\nimport ChartFrame from '../../components/chart-frame';\n\nconst { getPartyInfo } = uk;\n\nconst WaffleAxis = ({ width, ...props }) => {\n  const scale = scaleLinear({\n    range: [0, width],\n    domain: [0, 30],\n  });\n  return (\n    <Group className=\"waffle--axis\">\n      <Group className=\"waffle--axis__labels\">\n        <text x={0} textAnchor=\"beginning\" fontSize={13} fill=\"#33302E\" letterSpacing=\"0.3\">\n          MORE VULNERABLE SEATS\n        </text>\n        <text x={width} textAnchor=\"end\" fontSize={13} fill=\"#33302E\" letterSpacing=\"0.3\">\n          SAFER SEATS\n        </text>\n      </Group>\n      <path\n        className=\"waffle--axis__arrows\"\n        stroke=\"#66605C\"\n        fill=\"#66605C\"\n        transform=\"translate(0,8)\"\n        d={`M8,4 L8,0 L0,4 L8,8 L8,4 L${width - 8},4 L${width - 8},0 L${width},4 L${width -\n          8},8 L${width - 8},4`}\n      />\n      <Group top=\"12\" className=\"waffle--axis__ticks\">\n        {Array(6)\n          .fill(null)\n          .map((d, i) => {\n            return (\n              <>\n                {i && <line x1={scale(i * 5)} x2={scale(i * 5)} y1=\"0\" y2=\"8\" stroke=\"#66605C\" />}\n                <text\n                  x={scale(i * 5)}\n                  dx=\"0\"\n                  y=\"24\"\n                  fill=\"#66605C\"\n                  textAnchor={i === 0 ? 'start' : 'middle'}\n                >\n                  {i * 5}\n                  {i * 5 === 25 ? '%+' : '%'}\n                </text>\n              </>\n            );\n          })}\n      </Group>\n    </Group>\n  );\n};\n\nWaffleAxis.propTypes = {\n  width: PropTypes.number.isRequired,\n  margin: PropTypes.shape({\n    left: PropTypes.number,\n    top: PropTypes.number,\n    right: PropTypes.number,\n    bottom: PropTypes.number,\n  }),\n};\n\nWaffleAxis.defaultProps = {\n  margin: {\n    left: 0,\n    top: 0,\n    right: 0,\n    bottom: 0,\n  },\n};\n\nconst WafflePartyRow = ({\n  tileHeight,\n  tilePadding,\n  width,\n  columnsPerSegment,\n  data,\n  top,\n  diff,\n  onSelect,\n  onDeselect,\n  order,\n}) => {\n  const [partyName, results = []] = data;\n  return (\n    <Group className=\"waffle--row\" transform={`translate(0, ${top})`}>\n      {order && <line x1={0} x2={width} y1={-16} y2={-16} stroke=\"#CCC1B7\" />}\n      <text>\n        <tspan style={{ fontWeight: 500, fontSize: '14px', letterSpacing: '0.3', fill: '#66605C' }}>\n          {getPartyInfo(partyName).formattedName.toUpperCase()}\n        </tspan>{' '}\n        {/* eslint-disable-next-line no-nested-ternary */}\n        {diff ? `(${Math.abs(diff)} seats ${diff === 0 ? 'held' : diff > 0 ? 'won' : 'lost'})` : ''}\n      </text>\n      {results.map((segment = [], colIdx) => {\n        const colWidth = width / 6;\n        const leftOffset = colWidth * colIdx;\n        return (\n          <Group top=\"10\">\n            {[...segment]\n              .sort((a, b) => +a.margin2017 - +b.margin2017)\n              .map(({ constituencyPartyWinning, ...d }, idx) => {\n                const x = idx % columnsPerSegment;\n                const y = Math.floor(idx / columnsPerSegment);\n                return (\n                  <rect\n                    onMouseOver={({ clientX, clientY }) => onSelect([d, { clientX, clientY }])}\n                    onFocus={({ clientX, clientY }) => onSelect([d, { clientX, clientY }])}\n                    onTouchStart={({ clientX, clientY }) => onSelect([d, { clientX, clientY }])}\n                    onMouseOut={() => onDeselect([{}, null])}\n                    onBlur={() => onDeselect([{}, null])}\n                    width={tileHeight}\n                    height={tileHeight}\n                    strokeWidth={constituencyPartyWinning === 'The Speaker' ? '1px' : tilePadding}\n                    stroke={constituencyPartyWinning === 'The Speaker' ? '#B2AFAD' : 'transparent'}\n                    x={leftOffset + x * (tileHeight + tilePadding)}\n                    y={y * (tileHeight + tilePadding)}\n                    fill={\n                      constituencyPartyWinning\n                        ? getPartyInfo(constituencyPartyWinning).color\n                        : '#fcd0b1'\n                    }\n                  />\n                );\n              })}\n          </Group>\n        );\n      })}\n    </Group>\n  );\n};\n\nWafflePartyRow.propTypes = {\n  width: PropTypes.number.isRequired,\n  columnsPerSegment: PropTypes.number.isRequired,\n  data: PropTypes.arrayOf(PropTypes.any).isRequired,\n  top: PropTypes.number.isRequired,\n  diff: PropTypes.oneOfType([PropTypes.number, PropTypes.bool]).isRequired,\n  onSelect: PropTypes.func,\n  onDeselect: PropTypes.func,\n  tileHeight: PropTypes.number,\n  tilePadding: PropTypes.number,\n  order: PropTypes.number.isRequired,\n};\n\nWafflePartyRow.defaultProps = {\n  onSelect: () => {},\n  onDeselect: () => {},\n  tileHeight: 8,\n  tilePadding: 2,\n};\n\nexport const WaffleChart = ({\n  eventCallback,\n  data,\n  filterKeys,\n  columnsPerSegment,\n  tileHeight,\n  subtitle,\n  ...props\n}) => {\n  const parties = useMemo(\n    () =>\n      [\n        ...data\n          .reduce(\n            (a, d) =>\n              a.set(d.constituencyPartySittingLastElection, [\n                ...(a.get(d.constituencyPartySittingLastElection) || []),\n                d,\n              ]),\n            new Map()\n          )\n          .entries(),\n      ]\n        .filter(([key]) => filterKeys.includes(key))\n        .sort(([, valuesA], [, valuesB]) => valuesB.length - valuesA.length)\n        .map(([key, values]) => {\n          return [\n            key,\n            [\n              ...values\n                .reduce((a, c) => {\n                  if (c.constituencyMarginLastElection >= 25) {\n                    return a.set(25, [...(a.get(25) || []), c]);\n                  }\n                  if (c.constituencyMarginLastElection >= 20) {\n                    return a.set(20, [...(a.get(20) || []), c]);\n                  }\n                  if (c.constituencyMarginLastElection >= 15) {\n                    return a.set(15, [...(a.get(15) || []), c]);\n                  }\n                  if (c.constituencyMarginLastElection >= 10) {\n                    return a.set(10, [...(a.get(10) || []), c]);\n                  }\n                  if (c.constituencyMarginLastElection >= 5) {\n                    return a.set(5, [...(a.get(5) || []), c]);\n                  }\n                  return a.set(0, [...(a.get(0) || []), c]);\n                }, new Map([[0], [5], [10], [15], [20], [25]]))\n                .values(),\n            ],\n          ];\n        }),\n    [data, filterKeys]\n  );\n\n  const offsetHeights = useMemo(\n    () =>\n      parties.map((d, i, arr) =>\n        arr\n          .slice(0, i)\n          .map(\n            ([, segments]) =>\n              ([...segments].sort((a, b) => b.length - a.length)[0].length / columnsPerSegment) *\n              tileHeight\n          )\n          .reduce((a, b) => a + b, 0)\n      ),\n    [columnsPerSegment, parties, tileHeight]\n  );\n\n  const titleHeightPlusBottomPadding = 72;\n  const axisHeight = 72;\n\n  // Calculation used for determining margin top\n  // if subtitle is explicitly empty, then assume 0 line subhead\n  // if subtitle is not filled in, then assume 1 line subhead (default value from chart frame)\n  // if subtitle has content, count number of pipes to get number of lines\n  let subtitleLines = 1;\n  if (subtitle === '') {\n    subtitleLines = 0;\n  } else if (subtitle) {\n    subtitleLines = subtitle.split('').filter(a => a === '|').length + 1;\n  }\n\n  return (\n    <ChartFrame\n      {...props}\n      subtitle={subtitle}\n      margin={{ top: 80 + subtitleLines * 20, right: 0, left: 0, bottom: 105 }}\n      padding={{ top: 0, right: 2, bottom: 0, left: 2 }}\n    >\n      <WaffleAxis />\n      {parties.map((party, i) => (\n        <WafflePartyRow\n          onSelect={eventCallback}\n          onDeselect={eventCallback}\n          columnsPerSegment={columnsPerSegment}\n          top={i * titleHeightPlusBottomPadding + offsetHeights[i] + axisHeight}\n          data={party}\n          order={i}\n        />\n      ))}\n    </ChartFrame>\n  );\n};\n\nWaffleChart.propTypes = {\n  data: PropTypes.arrayOf(\n    PropTypes.shape({\n      type: PropTypes.string.isRequired,\n      constituencyName: PropTypes.string.isRequired,\n      constituencyCode: PropTypes.string.isRequired,\n      constituencyPartySitting: PropTypes.string.isRequired,\n      constituencyPartySittingLastElection: PropTypes.string.isRequired,\n      constituencyMarginLastElection: PropTypes.number.isRequired,\n      constituencyPartyWinning: PropTypes.string,\n      constituencyTimeChangedFirst: PropTypes.string,\n      constituencyTimeChangedLast: PropTypes.string,\n      constituencyTimeDeclared: PropTypes.string,\n    })\n  ).isRequired,\n  filterKeys: PropTypes.arrayOf(PropTypes.string),\n  columnsPerSegment: PropTypes.number,\n  tileHeight: PropTypes.number,\n  eventCallback: PropTypes.func,\n};\nWaffleChart.defaultProps = {\n  filterKeys: [],\n  columnsPerSegment: 10,\n  tileHeight: 8,\n  eventCallback: console.log, // eslint-disable-line\n};\n\nexport default WaffleChart;\n","/**\n * @file\n * Thermometer template\n */\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { scaleLinear } from '@visx/scale';\nimport { Group } from '@visx/group';\nimport { Bar } from '@visx/shape';\nimport ChartFrame from '../../components/chart-frame';\n\nconst Thermometer = ({ total, left, right, isCondensed, width }) => {\n  const midpoint = Math.min(total / 2 + 1);\n  // Set valueTossup to 0 if left and right data comes in as 0 so it doesn't render\n  const valueTossup = left.valueSolid\n    ? total - (left.valueSolid + left.valueLeaning + right.valueSolid + right.valueLeaning)\n    : 0;\n  const xScale = scaleLinear({ domain: [0, total] }).rangeRound([0, width]);\n  return (\n    <>\n      <defs>\n        <pattern\n          id=\"stripe\"\n          width={8}\n          height={8}\n          patternUnits=\"userSpaceOnUse\"\n          patternTransform=\"rotate(-45)\"\n        >\n          <line y2={8} stroke=\"#cccccc\" strokeWidth={16} />\n          <line y2={8} stroke=\"#9c9c9c\" strokeWidth={2.5} />\n        </pattern>\n        <filter id=\"shadow\">\n          <feDropShadow dy={2} stdDeviation={0.8} floodColor=\"#000000\" floodOpacity={0.4} />\n        </filter>\n      </defs>\n      <Group>\n        <text\n          x={1}\n          y={isCondensed ? 39 : -4}\n          dominantBaseline=\"hanging\"\n          fill={left.colorSolid}\n          fontFamily=\"MetricWeb\"\n          fontWeight={600}\n          fontSize={isCondensed ? 34 : 50}\n        >\n          {left.valueSolid + left.valueLeaning}\n        </text>\n        <text\n          x={isCondensed ? 0 : 86}\n          y={1}\n          dominantBaseline=\"hanging\"\n          fill=\"#33302e\"\n          fontFamily=\"MetricWeb\"\n          fontWeight={600}\n          fontSize={20}\n        >\n          {left.name}\n        </text>\n        <text\n          x={isCondensed ? 0 : 86}\n          y={23}\n          dominantBaseline=\"hanging\"\n          fill=\"#33302e\"\n          fontSize={14}\n          letterSpacing={0.4}\n        >\n          {left.party.toUpperCase()}\n        </text>\n      </Group>\n      <Group left={width}>\n        <text\n          x={1}\n          y={isCondensed ? 39 : -4}\n          dominantBaseline=\"hanging\"\n          textAnchor=\"end\"\n          fill={right.colorSolid}\n          fontFamily=\"MetricWeb\"\n          fontWeight={600}\n          fontSize={isCondensed ? 34 : 50}\n        >\n          {right.valueSolid + right.valueLeaning}\n        </text>\n        <text\n          x={isCondensed ? 0 : -86}\n          y={1}\n          dominantBaseline=\"hanging\"\n          textAnchor=\"end\"\n          fill=\"#33302e\"\n          fontFamily=\"MetricWeb\"\n          fontWeight={600}\n          fontSize={20}\n        >\n          {right.name}\n        </text>\n        <text\n          x={isCondensed ? 0 : -86}\n          y={23}\n          dominantBaseline=\"hanging\"\n          textAnchor=\"end\"\n          fill=\"#33302e\"\n          fontSize={14}\n          letterSpacing={0.4}\n        >\n          {right.party.toUpperCase()}\n        </text>\n      </Group>\n      <text\n        x={width / 2}\n        y={isCondensed ? 64 : 33}\n        fill=\"#434343\"\n        textAnchor=\"middle\"\n        fontSize={15}\n      >\n        {`${midpoint} to win`}\n      </text>\n      <Group top={isCondensed ? 76 : 46}>\n        <Bar width={xScale(left.valueSolid)} height={41} fill={left.colorSolid} />\n        <Bar\n          x={xScale(left.valueSolid)}\n          width={xScale(left.valueLeaning)}\n          height={41}\n          fill={left.colorLeaning}\n        />\n        <Bar\n          x={xScale(left.valueSolid) + xScale(left.valueLeaning)}\n          width={xScale(valueTossup)}\n          height={41}\n          fill=\"url(#stripe)\"\n        />\n        <Bar\n          x={xScale(left.valueSolid) + xScale(left.valueLeaning) + xScale(valueTossup)}\n          width={xScale(right.valueLeaning)}\n          height={41}\n          fill={right.colorLeaning}\n        />\n        <Bar\n          x={\n            xScale(left.valueSolid) +\n            xScale(left.valueLeaning) +\n            xScale(valueTossup) +\n            xScale(right.valueLeaning)\n          }\n          width={xScale(right.valueSolid)}\n          height={41}\n          fill={right.colorSolid}\n        />\n        {(left.valueSolid >= midpoint || right.valueSolid >= midpoint) && (\n          <line\n            x1={width / 2}\n            y1={0}\n            x2={width / 2}\n            y2={41}\n            stroke=\"#ffffff\"\n            strokeWidth={2.5}\n            strokeDasharray=\"0 1.25 6.5 0.25\"\n          />\n        )}\n        <line\n          x1={width / 2}\n          y1={0}\n          x2={width / 2}\n          y2={41}\n          stroke=\"#333333\"\n          strokeDasharray=\"0 2 5 1\"\n        />\n        <polygon transform={`translate(${width / 2}, 45)`} points=\"-5,7 0,0 5,7\" fill=\"#333333\" />\n        {left.valueSolid && (\n          <text\n            x={isCondensed ? 8 : 15}\n            y={26}\n            fill=\"white\"\n            textAnchor=\"start\"\n            fontSize={isCondensed ? 20 : 18}\n            fontWeight={500}\n            filter=\"url(#shadow)\"\n          >\n            {left.valueSolid}\n          </text>\n        )}\n        {left.valueLeaning && (\n          <text\n            x={xScale(left.valueSolid) + xScale(left.valueLeaning) / 2}\n            y={26}\n            fill=\"white\"\n            textAnchor=\"middle\"\n            fontSize={isCondensed ? 20 : 18}\n            fontWeight={500}\n            filter=\"url(#shadow)\"\n          >\n            {left.valueLeaning}\n          </text>\n        )}\n        {valueTossup && (\n          <text\n            x={xScale(left.valueSolid) + xScale(left.valueLeaning) + xScale(valueTossup) / 2}\n            y={26}\n            fill=\"white\"\n            textAnchor=\"middle\"\n            fontSize={isCondensed ? 20 : 18}\n            fontWeight={500}\n            filter=\"url(#shadow)\"\n          >\n            {valueTossup}\n          </text>\n        )}\n        {right.valueLeaning && (\n          <text\n            x={\n              xScale(left.valueSolid) +\n              xScale(left.valueLeaning) +\n              xScale(valueTossup) +\n              xScale(right.valueLeaning) / 2\n            }\n            y={26}\n            fill=\"white\"\n            textAnchor=\"middle\"\n            fontSize={isCondensed ? 20 : 18}\n            fontWeight={500}\n            filter=\"url(#shadow)\"\n          >\n            {right.valueLeaning}\n          </text>\n        )}\n        {right.valueSolid && (\n          <text\n            x={isCondensed ? width - 8 : width - 15}\n            y={26}\n            fill=\"white\"\n            textAnchor=\"end\"\n            fontSize={isCondensed ? 20 : 18}\n            fontWeight={500}\n            filter=\"url(#shadow)\"\n          >\n            {right.valueSolid}\n          </text>\n        )}\n      </Group>\n    </>\n  );\n};\n\nThermometer.propTypes = {\n  breakpoint: PropTypes.string.isRequired,\n  total: PropTypes.number.isRequired,\n  left: PropTypes.exact({\n    name: PropTypes.string.isRequired,\n    party: PropTypes.string.isRequired,\n    valueSolid: PropTypes.number.isRequired,\n    valueLeaning: PropTypes.number.isRequired,\n    colorSolid: PropTypes.string.isRequired,\n    colorLeaning: PropTypes.string.isRequired,\n  }),\n  right: PropTypes.exact({\n    name: PropTypes.string.isRequired,\n    party: PropTypes.string.isRequired,\n    valueSolid: PropTypes.number.isRequired,\n    valueLeaning: PropTypes.number.isRequired,\n    colorSolid: PropTypes.string.isRequired,\n    colorLeaning: PropTypes.string.isRequired,\n  }),\n};\n\nconst ThermometerWrapper = (props) => {\n  const isCondensed = ['S', 'default'].includes(props.breakpoint);\n  const plotHeight = isCondensed ? 128 : 98;\n  const height = props.hideTopper && props.hideFooter ? plotHeight : plotHeight + 180;\n  return (\n    <ChartFrame {...props} height={height}>\n      <Thermometer {...props} isCondensed={isCondensed} />\n    </ChartFrame>\n  );\n};\n\nexport default ThermometerWrapper;\n","/**\n * @file\n * Marimekko chart template\n */\n\nimport React from 'react';\nimport { scaleLinear } from '@visx/scale';\nimport { sum, extent } from 'd3-array';\nimport MarimekkoKey from './marimekko-key';\nimport ChartFrame from '../../components/chart-frame';\nimport Bars from '../../components/bars';\nimport Axis from '../../components/axis';\nimport { marimekkoChartPropTypes } from '../../components/prop-types';\nimport { marimekkoChartDefaultProps } from '../../components/default-props';\n\nconst MarimekkoChart = ({\n  marimekkoKey,\n  xAxisArrows,\n  xAxisOrientation,\n  yAxisOrientation,\n  xAxisTickLabelProps,\n  xTickFormat,\n  xHideAxisLine,\n  xFullLengthTicks,\n  xMax,\n  xMin,\n  xTicks,\n  yHideAxisLine,\n  yHideTicks,\n  yAutomaticallyAddPaddingForTicks,\n  yTickLength,\n  // Base\n  height,\n  margin,\n  padding,\n  width,\n  hideTopper,\n  hideFooter,\n  background,\n  stabRule,\n  title,\n  titleMarkupCustom,\n  subtitle,\n  subtitleMarkupCustom,\n  description,\n  source,\n  copyright,\n  // <ChartFrame />\n  type,\n  // <Bars />\n  barPaddingOuter,\n  barPaddingInner,\n  data,\n  fill,\n  colorScale,\n  colorVariable,\n  xVariable,\n  yVariable,\n  yLabelVariable,\n  // <MarimekkoKey />\n  barHeightAnnotation,\n  barHeightAnnotationLineHeight,\n  barHeightAnnotationWidth,\n  keyBarsWidth,\n  keyData,\n  keyHeight,\n  keyMarginBottom,\n  keyTitle,\n  keyTitleWidth,\n}) => {\n  const dataXExtent = extent(data, (d) => d[xVariable]);\n  const parsedData = data.reduce((a, c, i) => {\n    // Add yOffset which details cumulative height based on the size variable\n    return [\n      ...a,\n      {\n        ...c,\n        yOffset:\n          i === 0\n            ? barPaddingOuter\n            : Math.abs(a[a.length - 1][yVariable]) + a[a.length - 1].yOffset + barPaddingInner,\n      },\n    ];\n  }, []);\n  const yTicks = parsedData.map((d) => ({\n    label: d[yLabelVariable],\n    yPosition: d.yOffset + d[yVariable] * 0.5,\n  }));\n  // calculate totalSize for the yScale\n  const totalSize =\n    sum(parsedData, (d) => Math.abs(d[yVariable])) +\n    2 * barPaddingOuter +\n    barPaddingInner * parsedData.length;\n\n  // Construct scales *without* specifying ranges. Components that receive scales as props will specify their own ranges based on the width/height props they receive (directly or via <ChartFrame />)\n  const xScale = scaleLinear({\n    domain: [Math.min(0, dataXExtent[0], xMin), Math.max(dataXExtent[1], 0, xMax)],\n  });\n  const yScale = scaleLinear({ domain: [0, totalSize] });\n\n  const marginTop = marimekkoKey ? margin.top + keyHeight + keyMarginBottom : margin.top;\n\n  return (\n    <ChartFrame\n      height={height}\n      margin={{ ...margin, top: marginTop }}\n      padding={padding}\n      type={type}\n      width={width}\n      hideTopper={hideTopper}\n      hideFooter={hideFooter}\n      background={background}\n      stabRule={stabRule}\n      title={title}\n      titleMarkupCustom={titleMarkupCustom}\n      subtitle={subtitle}\n      subtitleMarkupCustom={subtitleMarkupCustom}\n      description={description}\n      source={source}\n      copyright={copyright}\n    >\n      {/* x-axis */}\n      <Axis\n        orientation={xAxisOrientation}\n        scale={xScale}\n        tickValues={xTicks}\n        axisArrows={xAxisArrows}\n        tickFormat={xTickFormat}\n        fullLengthTicks={xFullLengthTicks}\n        hideAxisLine={xHideAxisLine}\n        tickLabelProps={xAxisTickLabelProps}\n      />\n\n      <Bars\n        data={parsedData}\n        fill={fill}\n        colorScale={colorScale}\n        colorVariable={colorVariable}\n        xScale={xScale}\n        xVariable={xVariable}\n        yScale={yScale}\n        yVariable=\"yOffset\"\n        barHeightVariable={yVariable}\n      />\n\n      {/* y-axis */}\n      <Axis\n        orientation={yAxisOrientation}\n        scale={yScale}\n        tickValues={yTicks}\n        tickPositionVariable=\"yPosition\"\n        hideAxisLine={yHideAxisLine}\n        hideTicks={yHideTicks}\n        automaticallyAddPaddingForTicks={yAutomaticallyAddPaddingForTicks}\n        tickLengthOverride={yTickLength}\n      />\n\n      {/* Key (temporary implementation for 2020 US polltracker Marimekko). The position is described relative to the upper left corner of the graphing area (not including the axes) */}\n      {marimekkoKey && (\n        <MarimekkoKey\n          barHeightAnnotation={barHeightAnnotation}\n          barHeightAnnotationWidth={barHeightAnnotationWidth}\n          keyHeight={keyHeight}\n          keyY={-(keyHeight + keyMarginBottom)}\n        />\n      )}\n    </ChartFrame>\n  );\n};\n\nMarimekkoChart.propTypes = marimekkoChartPropTypes;\nMarimekkoChart.defaultProps = marimekkoChartDefaultProps;\n\nexport default MarimekkoChart;\n","//! moment.js locale configuration\n//! locale : Afrikaans [af]\n//! author : Werner Mollentze : https://github.com/wernerm\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 af = moment.defineLocale('af', {\n        months: 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'),\n        weekdays: 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split(\n            '_'\n        ),\n        weekdaysShort: 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'),\n        weekdaysMin: 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'),\n        meridiemParse: /vm|nm/i,\n        isPM: function (input) {\n            return /^nm$/i.test(input);\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 12) {\n                return isLower ? 'vm' : 'VM';\n            } else {\n                return isLower ? 'nm' : 'NM';\n            }\n        },\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Vandag om] LT',\n            nextDay: '[Môre om] LT',\n            nextWeek: 'dddd [om] LT',\n            lastDay: '[Gister om] LT',\n            lastWeek: '[Laas] dddd [om] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'oor %s',\n            past: '%s gelede',\n            s: \"'n paar sekondes\",\n            ss: '%d sekondes',\n            m: \"'n minuut\",\n            mm: '%d minute',\n            h: \"'n uur\",\n            hh: '%d ure',\n            d: \"'n dag\",\n            dd: '%d dae',\n            M: \"'n maand\",\n            MM: '%d maande',\n            y: \"'n jaar\",\n            yy: '%d jaar',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal: function (number) {\n            return (\n                number +\n                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')\n            ); // Thanks to Joris Röling : https://github.com/jjupiter\n        },\n        week: {\n            dow: 1, // Maandag is die eerste dag van die week.\n            doy: 4, // Die week wat die 4de Januarie bevat is die eerste week van die jaar.\n        },\n    });\n\n    return af;\n\n})));\n","//! moment.js locale configuration\n//! locale : Arabic [ar]\n//! author : Abdel Said: https://github.com/abdelsaid\n//! author : Ahmed Elkhatib\n//! author : forabi https://github.com/forabi\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 symbolMap = {\n            1: '١',\n            2: '٢',\n            3: '٣',\n            4: '٤',\n            5: '٥',\n            6: '٦',\n            7: '٧',\n            8: '٨',\n            9: '٩',\n            0: '٠',\n        },\n        numberMap = {\n            '١': '1',\n            '٢': '2',\n            '٣': '3',\n            '٤': '4',\n            '٥': '5',\n            '٦': '6',\n            '٧': '7',\n            '٨': '8',\n            '٩': '9',\n            '٠': '0',\n        },\n        pluralForm = function (n) {\n            return n === 0\n                ? 0\n                : n === 1\n                ? 1\n                : n === 2\n                ? 2\n                : n % 100 >= 3 && n % 100 <= 10\n                ? 3\n                : n % 100 >= 11\n                ? 4\n                : 5;\n        },\n        plurals = {\n            s: [\n                'أقل من ثانية',\n                'ثانية واحدة',\n                ['ثانيتان', 'ثانيتين'],\n                '%d ثوان',\n                '%d ثانية',\n                '%d ثانية',\n            ],\n            m: [\n                'أقل من دقيقة',\n                'دقيقة واحدة',\n                ['دقيقتان', 'دقيقتين'],\n                '%d دقائق',\n                '%d دقيقة',\n                '%d دقيقة',\n            ],\n            h: [\n                'أقل من ساعة',\n                'ساعة واحدة',\n                ['ساعتان', 'ساعتين'],\n                '%d ساعات',\n                '%d ساعة',\n                '%d ساعة',\n            ],\n            d: [\n                'أقل من يوم',\n                'يوم واحد',\n                ['يومان', 'يومين'],\n                '%d أيام',\n                '%d يومًا',\n                '%d يوم',\n            ],\n            M: [\n                'أقل من شهر',\n                'شهر واحد',\n                ['شهران', 'شهرين'],\n                '%d أشهر',\n                '%d شهرا',\n                '%d شهر',\n            ],\n            y: [\n                'أقل من عام',\n                'عام واحد',\n                ['عامان', 'عامين'],\n                '%d أعوام',\n                '%d عامًا',\n                '%d عام',\n            ],\n        },\n        pluralize = function (u) {\n            return function (number, withoutSuffix, string, isFuture) {\n                var f = pluralForm(number),\n                    str = plurals[u][pluralForm(number)];\n                if (f === 2) {\n                    str = str[withoutSuffix ? 0 : 1];\n                }\n                return str.replace(/%d/i, number);\n            };\n        },\n        months = [\n            'يناير',\n            'فبراير',\n            'مارس',\n            'أبريل',\n            'مايو',\n            'يونيو',\n            'يوليو',\n            'أغسطس',\n            'سبتمبر',\n            'أكتوبر',\n            'نوفمبر',\n            'ديسمبر',\n        ];\n\n    var ar = moment.defineLocale('ar', {\n        months: months,\n        monthsShort: months,\n        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'D/\\u200FM/\\u200FYYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /ص|م/,\n        isPM: function (input) {\n            return 'م' === input;\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ص';\n            } else {\n                return 'م';\n            }\n        },\n        calendar: {\n            sameDay: '[اليوم عند الساعة] LT',\n            nextDay: '[غدًا عند الساعة] LT',\n            nextWeek: 'dddd [عند الساعة] LT',\n            lastDay: '[أمس عند الساعة] LT',\n            lastWeek: 'dddd [عند الساعة] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'بعد %s',\n            past: 'منذ %s',\n            s: pluralize('s'),\n            ss: pluralize('s'),\n            m: pluralize('m'),\n            mm: pluralize('m'),\n            h: pluralize('h'),\n            hh: pluralize('h'),\n            d: pluralize('d'),\n            dd: pluralize('d'),\n            M: pluralize('M'),\n            MM: pluralize('M'),\n            y: pluralize('y'),\n            yy: pluralize('y'),\n        },\n        preparse: function (string) {\n            return string\n                .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n                    return numberMap[match];\n                })\n                .replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string\n                .replace(/\\d/g, function (match) {\n                    return symbolMap[match];\n                })\n                .replace(/,/g, '،');\n        },\n        week: {\n            dow: 6, // Saturday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    return ar;\n\n})));\n","//! moment.js locale configuration\n//! locale : Arabic (Algeria) [ar-dz]\n//! author : Amine Roukh: https://github.com/Amine27\n//! author : Abdel Said: https://github.com/abdelsaid\n//! author : Ahmed Elkhatib\n//! author : forabi https://github.com/forabi\n//! author : Noureddine LOUAHEDJ : https://github.com/noureddinem\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 pluralForm = function (n) {\n            return n === 0\n                ? 0\n                : n === 1\n                ? 1\n                : n === 2\n                ? 2\n                : n % 100 >= 3 && n % 100 <= 10\n                ? 3\n                : n % 100 >= 11\n                ? 4\n                : 5;\n        },\n        plurals = {\n            s: [\n                'أقل من ثانية',\n                'ثانية واحدة',\n                ['ثانيتان', 'ثانيتين'],\n                '%d ثوان',\n                '%d ثانية',\n                '%d ثانية',\n            ],\n            m: [\n                'أقل من دقيقة',\n                'دقيقة واحدة',\n                ['دقيقتان', 'دقيقتين'],\n                '%d دقائق',\n                '%d دقيقة',\n                '%d دقيقة',\n            ],\n            h: [\n                'أقل من ساعة',\n                'ساعة واحدة',\n                ['ساعتان', 'ساعتين'],\n                '%d ساعات',\n                '%d ساعة',\n                '%d ساعة',\n            ],\n            d: [\n                'أقل من يوم',\n                'يوم واحد',\n                ['يومان', 'يومين'],\n                '%d أيام',\n                '%d يومًا',\n                '%d يوم',\n            ],\n            M: [\n                'أقل من شهر',\n                'شهر واحد',\n                ['شهران', 'شهرين'],\n                '%d أشهر',\n                '%d شهرا',\n                '%d شهر',\n            ],\n            y: [\n                'أقل من عام',\n                'عام واحد',\n                ['عامان', 'عامين'],\n                '%d أعوام',\n                '%d عامًا',\n                '%d عام',\n            ],\n        },\n        pluralize = function (u) {\n            return function (number, withoutSuffix, string, isFuture) {\n                var f = pluralForm(number),\n                    str = plurals[u][pluralForm(number)];\n                if (f === 2) {\n                    str = str[withoutSuffix ? 0 : 1];\n                }\n                return str.replace(/%d/i, number);\n            };\n        },\n        months = [\n            'جانفي',\n            'فيفري',\n            'مارس',\n            'أفريل',\n            'ماي',\n            'جوان',\n            'جويلية',\n            'أوت',\n            'سبتمبر',\n            'أكتوبر',\n            'نوفمبر',\n            'ديسمبر',\n        ];\n\n    var arDz = moment.defineLocale('ar-dz', {\n        months: months,\n        monthsShort: months,\n        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'D/\\u200FM/\\u200FYYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /ص|م/,\n        isPM: function (input) {\n            return 'م' === input;\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ص';\n            } else {\n                return 'م';\n            }\n        },\n        calendar: {\n            sameDay: '[اليوم عند الساعة] LT',\n            nextDay: '[غدًا عند الساعة] LT',\n            nextWeek: 'dddd [عند الساعة] LT',\n            lastDay: '[أمس عند الساعة] LT',\n            lastWeek: 'dddd [عند الساعة] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'بعد %s',\n            past: 'منذ %s',\n            s: pluralize('s'),\n            ss: pluralize('s'),\n            m: pluralize('m'),\n            mm: pluralize('m'),\n            h: pluralize('h'),\n            hh: pluralize('h'),\n            d: pluralize('d'),\n            dd: pluralize('d'),\n            M: pluralize('M'),\n            MM: pluralize('M'),\n            y: pluralize('y'),\n            yy: pluralize('y'),\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week: {\n            dow: 0, // Sunday 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 arDz;\n\n})));\n","//! moment.js locale configuration\n//! locale : Arabic (Kuwait) [ar-kw]\n//! author : Nusret Parlak: https://github.com/nusretparlak\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 arKw = moment.defineLocale('ar-kw', {\n        months: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(\n            '_'\n        ),\n        monthsShort: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(\n            '_'\n        ),\n        weekdays: 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'في %s',\n            past: 'منذ %s',\n            s: 'ثوان',\n            ss: '%d ثانية',\n            m: 'دقيقة',\n            mm: '%d دقائق',\n            h: 'ساعة',\n            hh: '%d ساعات',\n            d: 'يوم',\n            dd: '%d أيام',\n            M: 'شهر',\n            MM: '%d أشهر',\n            y: 'سنة',\n            yy: '%d سنوات',\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    return arKw;\n\n})));\n","//! moment.js locale configuration\n//! locale : Arabic (Lybia) [ar-ly]\n//! author : Ali Hmer: https://github.com/kikoanis\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 symbolMap = {\n            1: '1',\n            2: '2',\n            3: '3',\n            4: '4',\n            5: '5',\n            6: '6',\n            7: '7',\n            8: '8',\n            9: '9',\n            0: '0',\n        },\n        pluralForm = function (n) {\n            return n === 0\n                ? 0\n                : n === 1\n                ? 1\n                : n === 2\n                ? 2\n                : n % 100 >= 3 && n % 100 <= 10\n                ? 3\n                : n % 100 >= 11\n                ? 4\n                : 5;\n        },\n        plurals = {\n            s: [\n                'أقل من ثانية',\n                'ثانية واحدة',\n                ['ثانيتان', 'ثانيتين'],\n                '%d ثوان',\n                '%d ثانية',\n                '%d ثانية',\n            ],\n            m: [\n                'أقل من دقيقة',\n                'دقيقة واحدة',\n                ['دقيقتان', 'دقيقتين'],\n                '%d دقائق',\n                '%d دقيقة',\n                '%d دقيقة',\n            ],\n            h: [\n                'أقل من ساعة',\n                'ساعة واحدة',\n                ['ساعتان', 'ساعتين'],\n                '%d ساعات',\n                '%d ساعة',\n                '%d ساعة',\n            ],\n            d: [\n                'أقل من يوم',\n                'يوم واحد',\n                ['يومان', 'يومين'],\n                '%d أيام',\n                '%d يومًا',\n                '%d يوم',\n            ],\n            M: [\n                'أقل من شهر',\n                'شهر واحد',\n                ['شهران', 'شهرين'],\n                '%d أشهر',\n                '%d شهرا',\n                '%d شهر',\n            ],\n            y: [\n                'أقل من عام',\n                'عام واحد',\n                ['عامان', 'عامين'],\n                '%d أعوام',\n                '%d عامًا',\n                '%d عام',\n            ],\n        },\n        pluralize = function (u) {\n            return function (number, withoutSuffix, string, isFuture) {\n                var f = pluralForm(number),\n                    str = plurals[u][pluralForm(number)];\n                if (f === 2) {\n                    str = str[withoutSuffix ? 0 : 1];\n                }\n                return str.replace(/%d/i, number);\n            };\n        },\n        months = [\n            'يناير',\n            'فبراير',\n            'مارس',\n            'أبريل',\n            'مايو',\n            'يونيو',\n            'يوليو',\n            'أغسطس',\n            'سبتمبر',\n            'أكتوبر',\n            'نوفمبر',\n            'ديسمبر',\n        ];\n\n    var arLy = moment.defineLocale('ar-ly', {\n        months: months,\n        monthsShort: months,\n        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'D/\\u200FM/\\u200FYYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /ص|م/,\n        isPM: function (input) {\n            return 'م' === input;\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ص';\n            } else {\n                return 'م';\n            }\n        },\n        calendar: {\n            sameDay: '[اليوم عند الساعة] LT',\n            nextDay: '[غدًا عند الساعة] LT',\n            nextWeek: 'dddd [عند الساعة] LT',\n            lastDay: '[أمس عند الساعة] LT',\n            lastWeek: 'dddd [عند الساعة] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'بعد %s',\n            past: 'منذ %s',\n            s: pluralize('s'),\n            ss: pluralize('s'),\n            m: pluralize('m'),\n            mm: pluralize('m'),\n            h: pluralize('h'),\n            hh: pluralize('h'),\n            d: pluralize('d'),\n            dd: pluralize('d'),\n            M: pluralize('M'),\n            MM: pluralize('M'),\n            y: pluralize('y'),\n            yy: pluralize('y'),\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string\n                .replace(/\\d/g, function (match) {\n                    return symbolMap[match];\n                })\n                .replace(/,/g, '،');\n        },\n        week: {\n            dow: 6, // Saturday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    return arLy;\n\n})));\n","//! moment.js locale configuration\n//! locale : Arabic (Morocco) [ar-ma]\n//! author : ElFadili Yassine : https://github.com/ElFadiliY\n//! author : Abdel Said : https://github.com/abdelsaid\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 arMa = moment.defineLocale('ar-ma', {\n        months: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(\n            '_'\n        ),\n        monthsShort: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(\n            '_'\n        ),\n        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'في %s',\n            past: 'منذ %s',\n            s: 'ثوان',\n            ss: '%d ثانية',\n            m: 'دقيقة',\n            mm: '%d دقائق',\n            h: 'ساعة',\n            hh: '%d ساعات',\n            d: 'يوم',\n            dd: '%d أيام',\n            M: 'شهر',\n            MM: '%d أشهر',\n            y: 'سنة',\n            yy: '%d سنوات',\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 arMa;\n\n})));\n","//! moment.js locale configuration\n//! locale : Arabic (Saudi Arabia) [ar-sa]\n//! author : Suhail Alkowaileet : https://github.com/xsoh\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 symbolMap = {\n            1: '١',\n            2: '٢',\n            3: '٣',\n            4: '٤',\n            5: '٥',\n            6: '٦',\n            7: '٧',\n            8: '٨',\n            9: '٩',\n            0: '٠',\n        },\n        numberMap = {\n            '١': '1',\n            '٢': '2',\n            '٣': '3',\n            '٤': '4',\n            '٥': '5',\n            '٦': '6',\n            '٧': '7',\n            '٨': '8',\n            '٩': '9',\n            '٠': '0',\n        };\n\n    var arSa = moment.defineLocale('ar-sa', {\n        months: 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(\n            '_'\n        ),\n        monthsShort: 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(\n            '_'\n        ),\n        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /ص|م/,\n        isPM: function (input) {\n            return 'م' === input;\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ص';\n            } else {\n                return 'م';\n            }\n        },\n        calendar: {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'في %s',\n            past: 'منذ %s',\n            s: 'ثوان',\n            ss: '%d ثانية',\n            m: 'دقيقة',\n            mm: '%d دقائق',\n            h: 'ساعة',\n            hh: '%d ساعات',\n            d: 'يوم',\n            dd: '%d أيام',\n            M: 'شهر',\n            MM: '%d أشهر',\n            y: 'سنة',\n            yy: '%d سنوات',\n        },\n        preparse: function (string) {\n            return string\n                .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n                    return numberMap[match];\n                })\n                .replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string\n                .replace(/\\d/g, function (match) {\n                    return symbolMap[match];\n                })\n                .replace(/,/g, '،');\n        },\n        week: {\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\n    return arSa;\n\n})));\n","//! moment.js locale configuration\n//! locale  :  Arabic (Tunisia) [ar-tn]\n//! author : Nader Toukabri : https://github.com/naderio\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 arTn = moment.defineLocale('ar-tn', {\n        months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(\n            '_'\n        ),\n        monthsShort: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(\n            '_'\n        ),\n        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'في %s',\n            past: 'منذ %s',\n            s: 'ثوان',\n            ss: '%d ثانية',\n            m: 'دقيقة',\n            mm: '%d دقائق',\n            h: 'ساعة',\n            hh: '%d ساعات',\n            d: 'يوم',\n            dd: '%d أيام',\n            M: 'شهر',\n            MM: '%d أشهر',\n            y: 'سنة',\n            yy: '%d سنوات',\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 arTn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Azerbaijani [az]\n//! author : topchiyev : https://github.com/topchiyev\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 suffixes = {\n        1: '-inci',\n        5: '-inci',\n        8: '-inci',\n        70: '-inci',\n        80: '-inci',\n        2: '-nci',\n        7: '-nci',\n        20: '-nci',\n        50: '-nci',\n        3: '-üncü',\n        4: '-üncü',\n        100: '-üncü',\n        6: '-ncı',\n        9: '-uncu',\n        10: '-uncu',\n        30: '-uncu',\n        60: '-ıncı',\n        90: '-ıncı',\n    };\n\n    var az = moment.defineLocale('az', {\n        months: 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split(\n            '_'\n        ),\n        monthsShort: 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'),\n        weekdays: 'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split(\n            '_'\n        ),\n        weekdaysShort: 'Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən'.split('_'),\n        weekdaysMin: 'Bz_BE_ÇA_Çə_CA_Cü_Şə'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[bugün saat] LT',\n            nextDay: '[sabah saat] LT',\n            nextWeek: '[gələn həftə] dddd [saat] LT',\n            lastDay: '[dünən] LT',\n            lastWeek: '[keçən həftə] dddd [saat] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s sonra',\n            past: '%s əvvəl',\n            s: 'bir neçə saniyə',\n            ss: '%d saniyə',\n            m: 'bir dəqiqə',\n            mm: '%d dəqiqə',\n            h: 'bir saat',\n            hh: '%d saat',\n            d: 'bir gün',\n            dd: '%d gün',\n            M: 'bir ay',\n            MM: '%d ay',\n            y: 'bir il',\n            yy: '%d il',\n        },\n        meridiemParse: /gecə|səhər|gündüz|axşam/,\n        isPM: function (input) {\n            return /^(gündüz|axşam)$/.test(input);\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'gecə';\n            } else if (hour < 12) {\n                return 'səhər';\n            } else if (hour < 17) {\n                return 'gündüz';\n            } else {\n                return 'axşam';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,\n        ordinal: function (number) {\n            if (number === 0) {\n                // special case for zero\n                return number + '-ıncı';\n            }\n            var a = number % 10,\n                b = (number % 100) - a,\n                c = number >= 100 ? 100 : null;\n            return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return az;\n\n})));\n","//! moment.js locale configuration\n//! locale : Belarusian [be]\n//! author : Dmitry Demidov : https://github.com/demidov91\n//! author: Praleska: http://praleska.pro/\n//! Author : Menelion Elensúle : https://github.com/Oire\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    function plural(word, num) {\n        var forms = word.split('_');\n        return num % 10 === 1 && num % 100 !== 11\n            ? forms[0]\n            : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)\n            ? forms[1]\n            : forms[2];\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n            ss: withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',\n            mm: withoutSuffix ? 'хвіліна_хвіліны_хвілін' : 'хвіліну_хвіліны_хвілін',\n            hh: withoutSuffix ? 'гадзіна_гадзіны_гадзін' : 'гадзіну_гадзіны_гадзін',\n            dd: 'дзень_дні_дзён',\n            MM: 'месяц_месяцы_месяцаў',\n            yy: 'год_гады_гадоў',\n        };\n        if (key === 'm') {\n            return withoutSuffix ? 'хвіліна' : 'хвіліну';\n        } else if (key === 'h') {\n            return withoutSuffix ? 'гадзіна' : 'гадзіну';\n        } else {\n            return number + ' ' + plural(format[key], +number);\n        }\n    }\n\n    var be = moment.defineLocale('be', {\n        months: {\n            format: 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split(\n                '_'\n            ),\n            standalone: 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split(\n                '_'\n            ),\n        },\n        monthsShort: 'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split(\n            '_'\n        ),\n        weekdays: {\n            format: 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split(\n                '_'\n            ),\n            standalone: 'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split(\n                '_'\n            ),\n            isFormat: /\\[ ?[Ууў] ?(?:мінулую|наступную)? ?\\] ?dddd/,\n        },\n        weekdaysShort: 'нд_пн_ат_ср_чц_пт_сб'.split('_'),\n        weekdaysMin: 'нд_пн_ат_ср_чц_пт_сб'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY г.',\n            LLL: 'D MMMM YYYY г., HH:mm',\n            LLLL: 'dddd, D MMMM YYYY г., HH:mm',\n        },\n        calendar: {\n            sameDay: '[Сёння ў] LT',\n            nextDay: '[Заўтра ў] LT',\n            lastDay: '[Учора ў] LT',\n            nextWeek: function () {\n                return '[У] dddd [ў] LT';\n            },\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 5:\n                    case 6:\n                        return '[У мінулую] dddd [ў] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                        return '[У мінулы] dddd [ў] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'праз %s',\n            past: '%s таму',\n            s: 'некалькі секунд',\n            m: relativeTimeWithPlural,\n            mm: relativeTimeWithPlural,\n            h: relativeTimeWithPlural,\n            hh: relativeTimeWithPlural,\n            d: 'дзень',\n            dd: relativeTimeWithPlural,\n            M: 'месяц',\n            MM: relativeTimeWithPlural,\n            y: 'год',\n            yy: relativeTimeWithPlural,\n        },\n        meridiemParse: /ночы|раніцы|дня|вечара/,\n        isPM: function (input) {\n            return /^(дня|вечара)$/.test(input);\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ночы';\n            } else if (hour < 12) {\n                return 'раніцы';\n            } else if (hour < 17) {\n                return 'дня';\n            } else {\n                return 'вечара';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(і|ы|га)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'M':\n                case 'd':\n                case 'DDD':\n                case 'w':\n                case 'W':\n                    return (number % 10 === 2 || number % 10 === 3) &&\n                        number % 100 !== 12 &&\n                        number % 100 !== 13\n                        ? number + '-і'\n                        : number + '-ы';\n                case 'D':\n                    return number + '-га';\n                default:\n                    return number;\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return be;\n\n})));\n","//! moment.js locale configuration\n//! locale : Bulgarian [bg]\n//! author : Krasen Borisov : https://github.com/kraz\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 bg = moment.defineLocale('bg', {\n        months: 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split(\n            '_'\n        ),\n        monthsShort: 'яну_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек'.split('_'),\n        weekdays: 'неделя_понеделник_вторник_сряда_четвъртък_петък_събота'.split(\n            '_'\n        ),\n        weekdaysShort: 'нед_пон_вто_сря_чет_пет_съб'.split('_'),\n        weekdaysMin: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'D.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY H:mm',\n            LLLL: 'dddd, D MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[Днес в] LT',\n            nextDay: '[Утре в] LT',\n            nextWeek: 'dddd [в] LT',\n            lastDay: '[Вчера в] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 6:\n                        return '[Миналата] dddd [в] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[Миналия] dddd [в] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'след %s',\n            past: 'преди %s',\n            s: 'няколко секунди',\n            ss: '%d секунди',\n            m: 'минута',\n            mm: '%d минути',\n            h: 'час',\n            hh: '%d часа',\n            d: 'ден',\n            dd: '%d дена',\n            w: 'седмица',\n            ww: '%d седмици',\n            M: 'месец',\n            MM: '%d месеца',\n            y: 'година',\n            yy: '%d години',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,\n        ordinal: function (number) {\n            var lastDigit = number % 10,\n                last2Digits = number % 100;\n            if (number === 0) {\n                return number + '-ев';\n            } else if (last2Digits === 0) {\n                return number + '-ен';\n            } else if (last2Digits > 10 && last2Digits < 20) {\n                return number + '-ти';\n            } else if (lastDigit === 1) {\n                return number + '-ви';\n            } else if (lastDigit === 2) {\n                return number + '-ри';\n            } else if (lastDigit === 7 || lastDigit === 8) {\n                return number + '-ми';\n            } else {\n                return number + '-ти';\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return bg;\n\n})));\n","//! moment.js locale configuration\n//! locale : Bambara [bm]\n//! author : Estelle Comment : https://github.com/estellecomment\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 bm = moment.defineLocale('bm', {\n        months: 'Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_Mɛkalo_Zuwɛnkalo_Zuluyekalo_Utikalo_Sɛtanburukalo_ɔkutɔburukalo_Nowanburukalo_Desanburukalo'.split(\n            '_'\n        ),\n        monthsShort: 'Zan_Few_Mar_Awi_Mɛ_Zuw_Zul_Uti_Sɛt_ɔku_Now_Des'.split('_'),\n        weekdays: 'Kari_Ntɛnɛn_Tarata_Araba_Alamisa_Juma_Sibiri'.split('_'),\n        weekdaysShort: 'Kar_Ntɛ_Tar_Ara_Ala_Jum_Sib'.split('_'),\n        weekdaysMin: 'Ka_Nt_Ta_Ar_Al_Ju_Si'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'MMMM [tile] D [san] YYYY',\n            LLL: 'MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm',\n            LLLL: 'dddd MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm',\n        },\n        calendar: {\n            sameDay: '[Bi lɛrɛ] LT',\n            nextDay: '[Sini lɛrɛ] LT',\n            nextWeek: 'dddd [don lɛrɛ] LT',\n            lastDay: '[Kunu lɛrɛ] LT',\n            lastWeek: 'dddd [tɛmɛnen lɛrɛ] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s kɔnɔ',\n            past: 'a bɛ %s bɔ',\n            s: 'sanga dama dama',\n            ss: 'sekondi %d',\n            m: 'miniti kelen',\n            mm: 'miniti %d',\n            h: 'lɛrɛ kelen',\n            hh: 'lɛrɛ %d',\n            d: 'tile kelen',\n            dd: 'tile %d',\n            M: 'kalo kelen',\n            MM: 'kalo %d',\n            y: 'san kelen',\n            yy: 'san %d',\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 bm;\n\n})));\n","//! moment.js locale configuration\n//! locale : Bengali [bn]\n//! author : Kaushik Gandhi : https://github.com/kaushikgandhi\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 symbolMap = {\n            1: '১',\n            2: '২',\n            3: '৩',\n            4: '৪',\n            5: '৫',\n            6: '৬',\n            7: '৭',\n            8: '৮',\n            9: '৯',\n            0: '০',\n        },\n        numberMap = {\n            '১': '1',\n            '২': '2',\n            '৩': '3',\n            '৪': '4',\n            '৫': '5',\n            '৬': '6',\n            '৭': '7',\n            '৮': '8',\n            '৯': '9',\n            '০': '0',\n        };\n\n    var bn = moment.defineLocale('bn', {\n        months: 'জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split(\n            '_'\n        ),\n        monthsShort: 'জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে'.split(\n            '_'\n        ),\n        weekdays: 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split(\n            '_'\n        ),\n        weekdaysShort: 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),\n        weekdaysMin: 'রবি_সোম_মঙ্গল_বুধ_বৃহ_শুক্র_শনি'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm সময়',\n            LTS: 'A h:mm:ss সময়',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm সময়',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm সময়',\n        },\n        calendar: {\n            sameDay: '[আজ] LT',\n            nextDay: '[আগামীকাল] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[গতকাল] LT',\n            lastWeek: '[গত] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s পরে',\n            past: '%s আগে',\n            s: 'কয়েক সেকেন্ড',\n            ss: '%d সেকেন্ড',\n            m: 'এক মিনিট',\n            mm: '%d মিনিট',\n            h: 'এক ঘন্টা',\n            hh: '%d ঘন্টা',\n            d: 'এক দিন',\n            dd: '%d দিন',\n            M: 'এক মাস',\n            MM: '%d মাস',\n            y: 'এক বছর',\n            yy: '%d বছর',\n        },\n        preparse: function (string) {\n            return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /রাত|সকাল|দুপুর|বিকাল|রাত/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (\n                (meridiem === 'রাত' && hour >= 4) ||\n                (meridiem === 'দুপুর' && hour < 5) ||\n                meridiem === 'বিকাল'\n            ) {\n                return hour + 12;\n            } else {\n                return hour;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'রাত';\n            } else if (hour < 10) {\n                return 'সকাল';\n            } else if (hour < 17) {\n                return 'দুপুর';\n            } else if (hour < 20) {\n                return 'বিকাল';\n            } else {\n                return 'রাত';\n            }\n        },\n        week: {\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\n    return bn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Bengali (Bangladesh) [bn-bd]\n//! author : Asraf Hossain Patoary : https://github.com/ashwoolford\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 symbolMap = {\n            1: '১',\n            2: '২',\n            3: '৩',\n            4: '৪',\n            5: '৫',\n            6: '৬',\n            7: '৭',\n            8: '৮',\n            9: '৯',\n            0: '০',\n        },\n        numberMap = {\n            '১': '1',\n            '২': '2',\n            '৩': '3',\n            '৪': '4',\n            '৫': '5',\n            '৬': '6',\n            '৭': '7',\n            '৮': '8',\n            '৯': '9',\n            '০': '0',\n        };\n\n    var bnBd = moment.defineLocale('bn-bd', {\n        months: 'জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split(\n            '_'\n        ),\n        monthsShort: 'জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে'.split(\n            '_'\n        ),\n        weekdays: 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split(\n            '_'\n        ),\n        weekdaysShort: 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),\n        weekdaysMin: 'রবি_সোম_মঙ্গল_বুধ_বৃহ_শুক্র_শনি'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm সময়',\n            LTS: 'A h:mm:ss সময়',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm সময়',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm সময়',\n        },\n        calendar: {\n            sameDay: '[আজ] LT',\n            nextDay: '[আগামীকাল] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[গতকাল] LT',\n            lastWeek: '[গত] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s পরে',\n            past: '%s আগে',\n            s: 'কয়েক সেকেন্ড',\n            ss: '%d সেকেন্ড',\n            m: 'এক মিনিট',\n            mm: '%d মিনিট',\n            h: 'এক ঘন্টা',\n            hh: '%d ঘন্টা',\n            d: 'এক দিন',\n            dd: '%d দিন',\n            M: 'এক মাস',\n            MM: '%d মাস',\n            y: 'এক বছর',\n            yy: '%d বছর',\n        },\n        preparse: function (string) {\n            return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n\n        meridiemParse: /রাত|ভোর|সকাল|দুপুর|বিকাল|সন্ধ্যা|রাত/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'রাত') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'ভোর') {\n                return hour;\n            } else if (meridiem === 'সকাল') {\n                return hour;\n            } else if (meridiem === 'দুপুর') {\n                return hour >= 3 ? hour : hour + 12;\n            } else if (meridiem === 'বিকাল') {\n                return hour + 12;\n            } else if (meridiem === 'সন্ধ্যা') {\n                return hour + 12;\n            }\n        },\n\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'রাত';\n            } else if (hour < 6) {\n                return 'ভোর';\n            } else if (hour < 12) {\n                return 'সকাল';\n            } else if (hour < 15) {\n                return 'দুপুর';\n            } else if (hour < 18) {\n                return 'বিকাল';\n            } else if (hour < 20) {\n                return 'সন্ধ্যা';\n            } else {\n                return 'রাত';\n            }\n        },\n        week: {\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\n    return bnBd;\n\n})));\n","//! moment.js locale configuration\n//! locale : Tibetan [bo]\n//! author : Thupten N. Chakrishar : https://github.com/vajradog\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 symbolMap = {\n            1: '༡',\n            2: '༢',\n            3: '༣',\n            4: '༤',\n            5: '༥',\n            6: '༦',\n            7: '༧',\n            8: '༨',\n            9: '༩',\n            0: '༠',\n        },\n        numberMap = {\n            '༡': '1',\n            '༢': '2',\n            '༣': '3',\n            '༤': '4',\n            '༥': '5',\n            '༦': '6',\n            '༧': '7',\n            '༨': '8',\n            '༩': '9',\n            '༠': '0',\n        };\n\n    var bo = moment.defineLocale('bo', {\n        months: 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split(\n            '_'\n        ),\n        monthsShort: 'ཟླ་1_ཟླ་2_ཟླ་3_ཟླ་4_ཟླ་5_ཟླ་6_ཟླ་7_ཟླ་8_ཟླ་9_ཟླ་10_ཟླ་11_ཟླ་12'.split(\n            '_'\n        ),\n        monthsShortRegex: /^(ཟླ་\\d{1,2})/,\n        monthsParseExact: true,\n        weekdays: 'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split(\n            '_'\n        ),\n        weekdaysShort: 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split(\n            '_'\n        ),\n        weekdaysMin: 'ཉི_ཟླ_མིག_ལྷག_ཕུར_སངས_སྤེན'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm',\n            LTS: 'A h:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm',\n        },\n        calendar: {\n            sameDay: '[དི་རིང] LT',\n            nextDay: '[སང་ཉིན] LT',\n            nextWeek: '[བདུན་ཕྲག་རྗེས་མ], LT',\n            lastDay: '[ཁ་སང] LT',\n            lastWeek: '[བདུན་ཕྲག་མཐའ་མ] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s ལ་',\n            past: '%s སྔན་ལ',\n            s: 'ལམ་སང',\n            ss: '%d སྐར་ཆ།',\n            m: 'སྐར་མ་གཅིག',\n            mm: '%d སྐར་མ',\n            h: 'ཆུ་ཚོད་གཅིག',\n            hh: '%d ཆུ་ཚོད',\n            d: 'ཉིན་གཅིག',\n            dd: '%d ཉིན་',\n            M: 'ཟླ་བ་གཅིག',\n            MM: '%d ཟླ་བ',\n            y: 'ལོ་གཅིག',\n            yy: '%d ལོ',\n        },\n        preparse: function (string) {\n            return string.replace(/[༡༢༣༤༥༦༧༨༩༠]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (\n                (meridiem === 'མཚན་མོ' && hour >= 4) ||\n                (meridiem === 'ཉིན་གུང' && hour < 5) ||\n                meridiem === 'དགོང་དག'\n            ) {\n                return hour + 12;\n            } else {\n                return hour;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'མཚན་མོ';\n            } else if (hour < 10) {\n                return 'ཞོགས་ཀས';\n            } else if (hour < 17) {\n                return 'ཉིན་གུང';\n            } else if (hour < 20) {\n                return 'དགོང་དག';\n            } else {\n                return 'མཚན་མོ';\n            }\n        },\n        week: {\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\n    return bo;\n\n})));\n","//! moment.js locale configuration\n//! locale : Breton [br]\n//! author : Jean-Baptiste Le Duigou : https://github.com/jbleduigou\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    function relativeTimeWithMutation(number, withoutSuffix, key) {\n        var format = {\n            mm: 'munutenn',\n            MM: 'miz',\n            dd: 'devezh',\n        };\n        return number + ' ' + mutation(format[key], number);\n    }\n    function specialMutationForYears(number) {\n        switch (lastNumber(number)) {\n            case 1:\n            case 3:\n            case 4:\n            case 5:\n            case 9:\n                return number + ' bloaz';\n            default:\n                return number + ' vloaz';\n        }\n    }\n    function lastNumber(number) {\n        if (number > 9) {\n            return lastNumber(number % 10);\n        }\n        return number;\n    }\n    function mutation(text, number) {\n        if (number === 2) {\n            return softMutation(text);\n        }\n        return text;\n    }\n    function softMutation(text) {\n        var mutationTable = {\n            m: 'v',\n            b: 'v',\n            d: 'z',\n        };\n        if (mutationTable[text.charAt(0)] === undefined) {\n            return text;\n        }\n        return mutationTable[text.charAt(0)] + text.substring(1);\n    }\n\n    var monthsParse = [\n            /^gen/i,\n            /^c[ʼ\\']hwe/i,\n            /^meu/i,\n            /^ebr/i,\n            /^mae/i,\n            /^(mez|eve)/i,\n            /^gou/i,\n            /^eos/i,\n            /^gwe/i,\n            /^her/i,\n            /^du/i,\n            /^ker/i,\n        ],\n        monthsRegex = /^(genver|c[ʼ\\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu|gen|c[ʼ\\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,\n        monthsStrictRegex = /^(genver|c[ʼ\\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu)/i,\n        monthsShortStrictRegex = /^(gen|c[ʼ\\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,\n        fullWeekdaysParse = [\n            /^sul/i,\n            /^lun/i,\n            /^meurzh/i,\n            /^merc[ʼ\\']her/i,\n            /^yaou/i,\n            /^gwener/i,\n            /^sadorn/i,\n        ],\n        shortWeekdaysParse = [\n            /^Sul/i,\n            /^Lun/i,\n            /^Meu/i,\n            /^Mer/i,\n            /^Yao/i,\n            /^Gwe/i,\n            /^Sad/i,\n        ],\n        minWeekdaysParse = [\n            /^Su/i,\n            /^Lu/i,\n            /^Me([^r]|$)/i,\n            /^Mer/i,\n            /^Ya/i,\n            /^Gw/i,\n            /^Sa/i,\n        ];\n\n    var br = moment.defineLocale('br', {\n        months: 'Genver_Cʼhwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split(\n            '_'\n        ),\n        monthsShort: 'Gen_Cʼhwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'),\n        weekdays: 'Sul_Lun_Meurzh_Mercʼher_Yaou_Gwener_Sadorn'.split('_'),\n        weekdaysShort: 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'),\n        weekdaysMin: 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'),\n        weekdaysParse: minWeekdaysParse,\n        fullWeekdaysParse: fullWeekdaysParse,\n        shortWeekdaysParse: shortWeekdaysParse,\n        minWeekdaysParse: minWeekdaysParse,\n\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex: monthsStrictRegex,\n        monthsShortStrictRegex: monthsShortStrictRegex,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D [a viz] MMMM YYYY',\n            LLL: 'D [a viz] MMMM YYYY HH:mm',\n            LLLL: 'dddd, D [a viz] MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Hiziv da] LT',\n            nextDay: '[Warcʼhoazh da] LT',\n            nextWeek: 'dddd [da] LT',\n            lastDay: '[Decʼh da] LT',\n            lastWeek: 'dddd [paset da] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'a-benn %s',\n            past: '%s ʼzo',\n            s: 'un nebeud segondennoù',\n            ss: '%d eilenn',\n            m: 'ur vunutenn',\n            mm: relativeTimeWithMutation,\n            h: 'un eur',\n            hh: '%d eur',\n            d: 'un devezh',\n            dd: relativeTimeWithMutation,\n            M: 'ur miz',\n            MM: relativeTimeWithMutation,\n            y: 'ur bloaz',\n            yy: specialMutationForYears,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(añ|vet)/,\n        ordinal: function (number) {\n            var output = number === 1 ? 'añ' : 'vet';\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        meridiemParse: /a.m.|g.m./, // goude merenn | a-raok merenn\n        isPM: function (token) {\n            return token === 'g.m.';\n        },\n        meridiem: function (hour, minute, isLower) {\n            return hour < 12 ? 'a.m.' : 'g.m.';\n        },\n    });\n\n    return br;\n\n})));\n","//! moment.js locale configuration\n//! locale : Bosnian [bs]\n//! author : Nedim Cholich : https://github.com/frontyard\n//! based on (hr) translation by Bojan Marković\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    function translate(number, withoutSuffix, key) {\n        var result = number + ' ';\n        switch (key) {\n            case 'ss':\n                if (number === 1) {\n                    result += 'sekunda';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'sekunde';\n                } else {\n                    result += 'sekundi';\n                }\n                return result;\n            case 'm':\n                return withoutSuffix ? 'jedna minuta' : 'jedne minute';\n            case 'mm':\n                if (number === 1) {\n                    result += 'minuta';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'minute';\n                } else {\n                    result += 'minuta';\n                }\n                return result;\n            case 'h':\n                return withoutSuffix ? 'jedan sat' : 'jednog sata';\n            case 'hh':\n                if (number === 1) {\n                    result += 'sat';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'sata';\n                } else {\n                    result += 'sati';\n                }\n                return result;\n            case 'dd':\n                if (number === 1) {\n                    result += 'dan';\n                } else {\n                    result += 'dana';\n                }\n                return result;\n            case 'MM':\n                if (number === 1) {\n                    result += 'mjesec';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'mjeseca';\n                } else {\n                    result += 'mjeseci';\n                }\n                return result;\n            case 'yy':\n                if (number === 1) {\n                    result += 'godina';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'godine';\n                } else {\n                    result += 'godina';\n                }\n                return result;\n        }\n    }\n\n    var bs = moment.defineLocale('bs', {\n        months: 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split(\n            '_'\n        ),\n        monthsShort: 'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split(\n            '_'\n        ),\n        monthsParseExact: true,\n        weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split(\n            '_'\n        ),\n        weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd, D. MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[danas u] LT',\n            nextDay: '[sutra u] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[u] [nedjelju] [u] LT';\n                    case 3:\n                        return '[u] [srijedu] [u] LT';\n                    case 6:\n                        return '[u] [subotu] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[u] dddd [u] LT';\n                }\n            },\n            lastDay: '[jučer u] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                        return '[prošlu] dddd [u] LT';\n                    case 6:\n                        return '[prošle] [subote] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[prošli] dddd [u] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'za %s',\n            past: 'prije %s',\n            s: 'par sekundi',\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: translate,\n            hh: translate,\n            d: 'dan',\n            dd: translate,\n            M: 'mjesec',\n            MM: translate,\n            y: 'godinu',\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return bs;\n\n})));\n","//! moment.js locale configuration\n//! locale : Catalan [ca]\n//! author : Juan G. Hurtado : https://github.com/juanghurtado\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 ca = moment.defineLocale('ca', {\n        months: {\n            standalone: 'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split(\n                '_'\n            ),\n            format: \"de gener_de febrer_de març_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre\".split(\n                '_'\n            ),\n            isFormat: /D[oD]?(\\s)+MMMM/,\n        },\n        monthsShort: 'gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.'.split(\n            '_'\n        ),\n        monthsParseExact: true,\n        weekdays: 'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split(\n            '_'\n        ),\n        weekdaysShort: 'dg._dl._dt._dc._dj._dv._ds.'.split('_'),\n        weekdaysMin: 'dg_dl_dt_dc_dj_dv_ds'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM [de] YYYY',\n            ll: 'D MMM YYYY',\n            LLL: 'D MMMM [de] YYYY [a les] H:mm',\n            lll: 'D MMM YYYY, H:mm',\n            LLLL: 'dddd D MMMM [de] YYYY [a les] H:mm',\n            llll: 'ddd D MMM YYYY, H:mm',\n        },\n        calendar: {\n            sameDay: function () {\n                return '[avui a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';\n            },\n            nextDay: function () {\n                return '[demà a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';\n            },\n            nextWeek: function () {\n                return 'dddd [a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';\n            },\n            lastDay: function () {\n                return '[ahir a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';\n            },\n            lastWeek: function () {\n                return (\n                    '[el] dddd [passat a ' +\n                    (this.hours() !== 1 ? 'les' : 'la') +\n                    '] LT'\n                );\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: \"d'aquí %s\",\n            past: 'fa %s',\n            s: 'uns segons',\n            ss: '%d segons',\n            m: 'un minut',\n            mm: '%d minuts',\n            h: 'una hora',\n            hh: '%d hores',\n            d: 'un dia',\n            dd: '%d dies',\n            M: 'un mes',\n            MM: '%d mesos',\n            y: 'un any',\n            yy: '%d anys',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(r|n|t|è|a)/,\n        ordinal: function (number, period) {\n            var output =\n                number === 1\n                    ? 'r'\n                    : number === 2\n                    ? 'n'\n                    : number === 3\n                    ? 'r'\n                    : number === 4\n                    ? 't'\n                    : 'è';\n            if (period === 'w' || period === 'W') {\n                output = 'a';\n            }\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 ca;\n\n})));\n","//! moment.js locale configuration\n//! locale : Czech [cs]\n//! author : petrbela : https://github.com/petrbela\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 months = 'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split(\n            '_'\n        ),\n        monthsShort = 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_'),\n        monthsParse = [\n            /^led/i,\n            /^úno/i,\n            /^bře/i,\n            /^dub/i,\n            /^kvě/i,\n            /^(čvn|červen$|června)/i,\n            /^(čvc|červenec|července)/i,\n            /^srp/i,\n            /^zář/i,\n            /^říj/i,\n            /^lis/i,\n            /^pro/i,\n        ],\n        // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched.\n        // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'.\n        monthsRegex = /^(leden|únor|březen|duben|květen|červenec|července|červen|června|srpen|září|říjen|listopad|prosinec|led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i;\n\n    function plural(n) {\n        return n > 1 && n < 5 && ~~(n / 10) !== 1;\n    }\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        switch (key) {\n            case 's': // a few seconds / in a few seconds / a few seconds ago\n                return withoutSuffix || isFuture ? 'pár sekund' : 'pár sekundami';\n            case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'sekundy' : 'sekund');\n                } else {\n                    return result + 'sekundami';\n                }\n            case 'm': // a minute / in a minute / a minute ago\n                return withoutSuffix ? 'minuta' : isFuture ? 'minutu' : 'minutou';\n            case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'minuty' : 'minut');\n                } else {\n                    return result + 'minutami';\n                }\n            case 'h': // an hour / in an hour / an hour ago\n                return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou';\n            case 'hh': // 9 hours / in 9 hours / 9 hours ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'hodiny' : 'hodin');\n                } else {\n                    return result + 'hodinami';\n                }\n            case 'd': // a day / in a day / a day ago\n                return withoutSuffix || isFuture ? 'den' : 'dnem';\n            case 'dd': // 9 days / in 9 days / 9 days ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'dny' : 'dní');\n                } else {\n                    return result + 'dny';\n                }\n            case 'M': // a month / in a month / a month ago\n                return withoutSuffix || isFuture ? 'měsíc' : 'měsícem';\n            case 'MM': // 9 months / in 9 months / 9 months ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'měsíce' : 'měsíců');\n                } else {\n                    return result + 'měsíci';\n                }\n            case 'y': // a year / in a year / a year ago\n                return withoutSuffix || isFuture ? 'rok' : 'rokem';\n            case 'yy': // 9 years / in 9 years / 9 years ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'roky' : 'let');\n                } else {\n                    return result + 'lety';\n                }\n        }\n    }\n\n    var cs = moment.defineLocale('cs', {\n        months: months,\n        monthsShort: monthsShort,\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched.\n        // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'.\n        monthsStrictRegex: /^(leden|ledna|února|únor|březen|března|duben|dubna|květen|května|červenec|července|červen|června|srpen|srpna|září|říjen|října|listopadu|listopad|prosinec|prosince)/i,\n        monthsShortStrictRegex: /^(led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays: 'neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota'.split('_'),\n        weekdaysShort: 'ne_po_út_st_čt_pá_so'.split('_'),\n        weekdaysMin: 'ne_po_út_st_čt_pá_so'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd D. MMMM YYYY H:mm',\n            l: 'D. M. YYYY',\n        },\n        calendar: {\n            sameDay: '[dnes v] LT',\n            nextDay: '[zítra v] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[v neděli v] LT';\n                    case 1:\n                    case 2:\n                        return '[v] dddd [v] LT';\n                    case 3:\n                        return '[ve středu v] LT';\n                    case 4:\n                        return '[ve čtvrtek v] LT';\n                    case 5:\n                        return '[v pátek v] LT';\n                    case 6:\n                        return '[v sobotu v] LT';\n                }\n            },\n            lastDay: '[včera v] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[minulou neděli v] LT';\n                    case 1:\n                    case 2:\n                        return '[minulé] dddd [v] LT';\n                    case 3:\n                        return '[minulou středu v] LT';\n                    case 4:\n                    case 5:\n                        return '[minulý] dddd [v] LT';\n                    case 6:\n                        return '[minulou sobotu v] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'za %s',\n            past: 'před %s',\n            s: translate,\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: translate,\n            hh: translate,\n            d: translate,\n            dd: translate,\n            M: translate,\n            MM: translate,\n            y: translate,\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\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 cs;\n\n})));\n","//! moment.js locale configuration\n//! locale : Chuvash [cv]\n//! author : Anatoly Mironov : https://github.com/mirontoli\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 cv = moment.defineLocale('cv', {\n        months: 'кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав'.split(\n            '_'\n        ),\n        monthsShort: 'кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш'.split('_'),\n        weekdays: 'вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун'.split(\n            '_'\n        ),\n        weekdaysShort: 'выр_тун_ытл_юн_кӗҫ_эрн_шӑм'.split('_'),\n        weekdaysMin: 'вр_тн_ыт_юн_кҫ_эр_шм'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD-MM-YYYY',\n            LL: 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]',\n            LLL: 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',\n            LLLL: 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',\n        },\n        calendar: {\n            sameDay: '[Паян] LT [сехетре]',\n            nextDay: '[Ыран] LT [сехетре]',\n            lastDay: '[Ӗнер] LT [сехетре]',\n            nextWeek: '[Ҫитес] dddd LT [сехетре]',\n            lastWeek: '[Иртнӗ] dddd LT [сехетре]',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: function (output) {\n                var affix = /сехет$/i.exec(output)\n                    ? 'рен'\n                    : /ҫул$/i.exec(output)\n                    ? 'тан'\n                    : 'ран';\n                return output + affix;\n            },\n            past: '%s каялла',\n            s: 'пӗр-ик ҫеккунт',\n            ss: '%d ҫеккунт',\n            m: 'пӗр минут',\n            mm: '%d минут',\n            h: 'пӗр сехет',\n            hh: '%d сехет',\n            d: 'пӗр кун',\n            dd: '%d кун',\n            M: 'пӗр уйӑх',\n            MM: '%d уйӑх',\n            y: 'пӗр ҫул',\n            yy: '%d ҫул',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-мӗш/,\n        ordinal: '%d-мӗш',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return cv;\n\n})));\n","//! moment.js locale configuration\n//! locale : Welsh [cy]\n//! author : Robert Allen : https://github.com/robgallen\n//! author : https://github.com/ryangreaves\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 cy = moment.defineLocale('cy', {\n        months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split(\n            '_'\n        ),\n        monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split(\n            '_'\n        ),\n        weekdays: 'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'),\n        weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'),\n        weekdaysParseExact: true,\n        // time formats are the same as en-gb\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Heddiw am] LT',\n            nextDay: '[Yfory am] LT',\n            nextWeek: 'dddd [am] LT',\n            lastDay: '[Ddoe am] LT',\n            lastWeek: 'dddd [diwethaf am] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'mewn %s',\n            past: '%s yn ôl',\n            s: 'ychydig eiliadau',\n            ss: '%d eiliad',\n            m: 'munud',\n            mm: '%d munud',\n            h: 'awr',\n            hh: '%d awr',\n            d: 'diwrnod',\n            dd: '%d diwrnod',\n            M: 'mis',\n            MM: '%d mis',\n            y: 'blwyddyn',\n            yy: '%d flynedd',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,\n        // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh\n        ordinal: function (number) {\n            var b = number,\n                output = '',\n                lookup = [\n                    '',\n                    'af',\n                    'il',\n                    'ydd',\n                    'ydd',\n                    'ed',\n                    'ed',\n                    'ed',\n                    'fed',\n                    'fed',\n                    'fed', // 1af to 10fed\n                    'eg',\n                    'fed',\n                    'eg',\n                    'eg',\n                    'fed',\n                    'eg',\n                    'eg',\n                    'fed',\n                    'eg',\n                    'fed', // 11eg to 20fed\n                ];\n            if (b > 20) {\n                if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) {\n                    output = 'fed'; // not 30ain, 70ain or 90ain\n                } else {\n                    output = 'ain';\n                }\n            } else if (b > 0) {\n                output = lookup[b];\n            }\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 cy;\n\n})));\n","//! moment.js locale configuration\n//! locale : Danish [da]\n//! author : Ulrik Nielsen : https://github.com/mrbase\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 da = moment.defineLocale('da', {\n        months: 'januar_februar_marts_april_maj_juni_juli_august_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_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),\n        weekdaysShort: 'søn_man_tir_ons_tor_fre_lør'.split('_'),\n        weekdaysMin: 'sø_ma_ti_on_to_fr_lø'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY HH:mm',\n            LLLL: 'dddd [d.] D. MMMM YYYY [kl.] HH:mm',\n        },\n        calendar: {\n            sameDay: '[i dag kl.] LT',\n            nextDay: '[i morgen kl.] LT',\n            nextWeek: 'på dddd [kl.] LT',\n            lastDay: '[i går kl.] LT',\n            lastWeek: '[i] dddd[s kl.] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'om %s',\n            past: '%s siden',\n            s: 'få sekunder',\n            ss: '%d sekunder',\n            m: 'et minut',\n            mm: '%d minutter',\n            h: 'en time',\n            hh: '%d timer',\n            d: 'en dag',\n            dd: '%d dage',\n            M: 'en måned',\n            MM: '%d måneder',\n            y: 'et år',\n            yy: '%d år',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\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 da;\n\n})));\n","//! moment.js locale configuration\n//! locale : German [de]\n//! author : lluchs : https://github.com/lluchs\n//! author: Menelion Elensúle: https://github.com/Oire\n//! author : Mikolaj Dadela : https://github.com/mik01aj\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    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            m: ['eine Minute', 'einer Minute'],\n            h: ['eine Stunde', 'einer Stunde'],\n            d: ['ein Tag', 'einem Tag'],\n            dd: [number + ' Tage', number + ' Tagen'],\n            w: ['eine Woche', 'einer Woche'],\n            M: ['ein Monat', 'einem Monat'],\n            MM: [number + ' Monate', number + ' Monaten'],\n            y: ['ein Jahr', 'einem Jahr'],\n            yy: [number + ' Jahre', number + ' Jahren'],\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n\n    var de = moment.defineLocale('de', {\n        months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(\n            '_'\n        ),\n        monthsShort: 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split(\n            '_'\n        ),\n        monthsParseExact: true,\n        weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(\n            '_'\n        ),\n        weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),\n        weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY HH:mm',\n            LLLL: 'dddd, D. MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[heute um] LT [Uhr]',\n            sameElse: 'L',\n            nextDay: '[morgen um] LT [Uhr]',\n            nextWeek: 'dddd [um] LT [Uhr]',\n            lastDay: '[gestern um] LT [Uhr]',\n            lastWeek: '[letzten] dddd [um] LT [Uhr]',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: 'vor %s',\n            s: 'ein paar Sekunden',\n            ss: '%d Sekunden',\n            m: processRelativeTime,\n            mm: '%d Minuten',\n            h: processRelativeTime,\n            hh: '%d Stunden',\n            d: processRelativeTime,\n            dd: processRelativeTime,\n            w: processRelativeTime,\n            ww: '%d Wochen',\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\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 de;\n\n})));\n","//! moment.js locale configuration\n//! locale : German (Austria) [de-at]\n//! author : lluchs : https://github.com/lluchs\n//! author: Menelion Elensúle: https://github.com/Oire\n//! author : Martin Groller : https://github.com/MadMG\n//! author : Mikolaj Dadela : https://github.com/mik01aj\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    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            m: ['eine Minute', 'einer Minute'],\n            h: ['eine Stunde', 'einer Stunde'],\n            d: ['ein Tag', 'einem Tag'],\n            dd: [number + ' Tage', number + ' Tagen'],\n            w: ['eine Woche', 'einer Woche'],\n            M: ['ein Monat', 'einem Monat'],\n            MM: [number + ' Monate', number + ' Monaten'],\n            y: ['ein Jahr', 'einem Jahr'],\n            yy: [number + ' Jahre', number + ' Jahren'],\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n\n    var deAt = moment.defineLocale('de-at', {\n        months: 'Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(\n            '_'\n        ),\n        monthsShort: 'Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split(\n            '_'\n        ),\n        monthsParseExact: true,\n        weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(\n            '_'\n        ),\n        weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),\n        weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY HH:mm',\n            LLLL: 'dddd, D. MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[heute um] LT [Uhr]',\n            sameElse: 'L',\n            nextDay: '[morgen um] LT [Uhr]',\n            nextWeek: 'dddd [um] LT [Uhr]',\n            lastDay: '[gestern um] LT [Uhr]',\n            lastWeek: '[letzten] dddd [um] LT [Uhr]',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: 'vor %s',\n            s: 'ein paar Sekunden',\n            ss: '%d Sekunden',\n            m: processRelativeTime,\n            mm: '%d Minuten',\n            h: processRelativeTime,\n            hh: '%d Stunden',\n            d: processRelativeTime,\n            dd: processRelativeTime,\n            w: processRelativeTime,\n            ww: '%d Wochen',\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\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 deAt;\n\n})));\n","//! moment.js locale configuration\n//! locale : German (Switzerland) [de-ch]\n//! author : sschueller : https://github.com/sschueller\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    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            m: ['eine Minute', 'einer Minute'],\n            h: ['eine Stunde', 'einer Stunde'],\n            d: ['ein Tag', 'einem Tag'],\n            dd: [number + ' Tage', number + ' Tagen'],\n            w: ['eine Woche', 'einer Woche'],\n            M: ['ein Monat', 'einem Monat'],\n            MM: [number + ' Monate', number + ' Monaten'],\n            y: ['ein Jahr', 'einem Jahr'],\n            yy: [number + ' Jahre', number + ' Jahren'],\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n\n    var deCh = moment.defineLocale('de-ch', {\n        months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(\n            '_'\n        ),\n        monthsShort: 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split(\n            '_'\n        ),\n        monthsParseExact: true,\n        weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(\n            '_'\n        ),\n        weekdaysShort: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY HH:mm',\n            LLLL: 'dddd, D. MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[heute um] LT [Uhr]',\n            sameElse: 'L',\n            nextDay: '[morgen um] LT [Uhr]',\n            nextWeek: 'dddd [um] LT [Uhr]',\n            lastDay: '[gestern um] LT [Uhr]',\n            lastWeek: '[letzten] dddd [um] LT [Uhr]',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: 'vor %s',\n            s: 'ein paar Sekunden',\n            ss: '%d Sekunden',\n            m: processRelativeTime,\n            mm: '%d Minuten',\n            h: processRelativeTime,\n            hh: '%d Stunden',\n            d: processRelativeTime,\n            dd: processRelativeTime,\n            w: processRelativeTime,\n            ww: '%d Wochen',\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\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 deCh;\n\n})));\n","//! moment.js locale configuration\n//! locale : Maldivian [dv]\n//! author : Jawish Hameed : https://github.com/jawish\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 months = [\n            'ޖެނުއަރީ',\n            'ފެބްރުއަރީ',\n            'މާރިޗު',\n            'އޭޕްރީލު',\n            'މޭ',\n            'ޖޫން',\n            'ޖުލައި',\n            'އޯގަސްޓު',\n            'ސެޕްޓެމްބަރު',\n            'އޮކްޓޯބަރު',\n            'ނޮވެމްބަރު',\n            'ޑިސެމްބަރު',\n        ],\n        weekdays = [\n            'އާދިއްތަ',\n            'ހޯމަ',\n            'އަންގާރަ',\n            'ބުދަ',\n            'ބުރާސްފަތި',\n            'ހުކުރު',\n            'ހޮނިހިރު',\n        ];\n\n    var dv = moment.defineLocale('dv', {\n        months: months,\n        monthsShort: months,\n        weekdays: weekdays,\n        weekdaysShort: weekdays,\n        weekdaysMin: 'އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'D/M/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /މކ|މފ/,\n        isPM: function (input) {\n            return 'މފ' === input;\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'މކ';\n            } else {\n                return 'މފ';\n            }\n        },\n        calendar: {\n            sameDay: '[މިއަދު] LT',\n            nextDay: '[މާދަމާ] LT',\n            nextWeek: 'dddd LT',\n            lastDay: '[އިއްޔެ] LT',\n            lastWeek: '[ފާއިތުވި] dddd LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'ތެރޭގައި %s',\n            past: 'ކުރިން %s',\n            s: 'ސިކުންތުކޮޅެއް',\n            ss: 'd% ސިކުންތު',\n            m: 'މިނިޓެއް',\n            mm: 'މިނިޓު %d',\n            h: 'ގަޑިއިރެއް',\n            hh: 'ގަޑިއިރު %d',\n            d: 'ދުވަހެއް',\n            dd: 'ދުވަސް %d',\n            M: 'މަހެއް',\n            MM: 'މަސް %d',\n            y: 'އަހަރެއް',\n            yy: 'އަހަރު %d',\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week: {\n            dow: 7, // Sunday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    return dv;\n\n})));\n","//! moment.js locale configuration\n//! locale : Greek [el]\n//! author : Aggelos Karalias : https://github.com/mehiel\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    function isFunction(input) {\n        return (\n            (typeof Function !== 'undefined' && input instanceof Function) ||\n            Object.prototype.toString.call(input) === '[object Function]'\n        );\n    }\n\n    var el = moment.defineLocale('el', {\n        monthsNominativeEl: 'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split(\n            '_'\n        ),\n        monthsGenitiveEl: 'Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου'.split(\n            '_'\n        ),\n        months: function (momentToFormat, format) {\n            if (!momentToFormat) {\n                return this._monthsNominativeEl;\n            } else if (\n                typeof format === 'string' &&\n                /D/.test(format.substring(0, format.indexOf('MMMM')))\n            ) {\n                // if there is a day number before 'MMMM'\n                return this._monthsGenitiveEl[momentToFormat.month()];\n            } else {\n                return this._monthsNominativeEl[momentToFormat.month()];\n            }\n        },\n        monthsShort: 'Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ'.split('_'),\n        weekdays: 'Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο'.split(\n            '_'\n        ),\n        weekdaysShort: 'Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ'.split('_'),\n        weekdaysMin: 'Κυ_Δε_Τρ_Τε_Πε_Πα_Σα'.split('_'),\n        meridiem: function (hours, minutes, isLower) {\n            if (hours > 11) {\n                return isLower ? 'μμ' : 'ΜΜ';\n            } else {\n                return isLower ? 'πμ' : 'ΠΜ';\n            }\n        },\n        isPM: function (input) {\n            return (input + '').toLowerCase()[0] === 'μ';\n        },\n        meridiemParse: /[ΠΜ]\\.?Μ?\\.?/i,\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY h:mm A',\n            LLLL: 'dddd, D MMMM YYYY h:mm A',\n        },\n        calendarEl: {\n            sameDay: '[Σήμερα {}] LT',\n            nextDay: '[Αύριο {}] LT',\n            nextWeek: 'dddd [{}] LT',\n            lastDay: '[Χθες {}] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 6:\n                        return '[το προηγούμενο] dddd [{}] LT';\n                    default:\n                        return '[την προηγούμενη] dddd [{}] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        calendar: function (key, mom) {\n            var output = this._calendarEl[key],\n                hours = mom && mom.hours();\n            if (isFunction(output)) {\n                output = output.apply(mom);\n            }\n            return output.replace('{}', hours % 12 === 1 ? 'στη' : 'στις');\n        },\n        relativeTime: {\n            future: 'σε %s',\n            past: '%s πριν',\n            s: 'λίγα δευτερόλεπτα',\n            ss: '%d δευτερόλεπτα',\n            m: 'ένα λεπτό',\n            mm: '%d λεπτά',\n            h: 'μία ώρα',\n            hh: '%d ώρες',\n            d: 'μία μέρα',\n            dd: '%d μέρες',\n            M: 'ένας μήνας',\n            MM: '%d μήνες',\n            y: 'ένας χρόνος',\n            yy: '%d χρόνια',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}η/,\n        ordinal: '%dη',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4st is the first week of the year.\n        },\n    });\n\n    return el;\n\n})));\n","//! moment.js locale configuration\n//! locale : English (Australia) [en-au]\n//! author : Jared Morse : https://github.com/jarcoal\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 enAu = moment.defineLocale('en-au', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY h:mm A',\n            LLLL: 'dddd, D MMMM YYYY h:mm A',\n        },\n        calendar: {\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        relativeTime: {\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            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((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        week: {\n            dow: 0, // Sunday 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 enAu;\n\n})));\n","//! moment.js locale configuration\n//! locale : English (Canada) [en-ca]\n//! author : Jonathan Abourbih : https://github.com/jonbca\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 enCa = moment.defineLocale('en-ca', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'YYYY-MM-DD',\n            LL: 'MMMM D, YYYY',\n            LLL: 'MMMM D, YYYY h:mm A',\n            LLLL: 'dddd, MMMM D, YYYY h:mm A',\n        },\n        calendar: {\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        relativeTime: {\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            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((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    return enCa;\n\n})));\n","//! moment.js locale configuration\n//! locale : English (United Kingdom) [en-gb]\n//! author : Chris Gedrim : https://github.com/chrisgedrim\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 enGb = moment.defineLocale('en-gb', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\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        relativeTime: {\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            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((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        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 enGb;\n\n})));\n","//! moment.js locale configuration\n//! locale : English (Ireland) [en-ie]\n//! author : Chris Cartlidge : https://github.com/chriscartlidge\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 enIe = moment.defineLocale('en-ie', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\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        relativeTime: {\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            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((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        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 enIe;\n\n})));\n","//! moment.js locale configuration\n//! locale : English (Israel) [en-il]\n//! author : Chris Gedrim : https://github.com/chrisgedrim\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 enIl = moment.defineLocale('en-il', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\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        relativeTime: {\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            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((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    return enIl;\n\n})));\n","//! moment.js locale configuration\n//! locale : English (India) [en-in]\n//! author : Jatin Agrawal : https://github.com/jatinag22\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 enIn = moment.defineLocale('en-in', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY h:mm A',\n            LLLL: 'dddd, D MMMM YYYY h:mm A',\n        },\n        calendar: {\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        relativeTime: {\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            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((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        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 1st is the first week of the year.\n        },\n    });\n\n    return enIn;\n\n})));\n","//! moment.js locale configuration\n//! locale : English (New Zealand) [en-nz]\n//! author : Luke McGregor : https://github.com/lukemcgregor\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 enNz = moment.defineLocale('en-nz', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY h:mm A',\n            LLLL: 'dddd, D MMMM YYYY h:mm A',\n        },\n        calendar: {\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        relativeTime: {\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            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((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        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 enNz;\n\n})));\n","//! moment.js locale configuration\n//! locale : English (Singapore) [en-sg]\n//! author : Matthew Castrillon-Madrigal : https://github.com/techdimension\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 enSg = moment.defineLocale('en-sg', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\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        relativeTime: {\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            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((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        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 enSg;\n\n})));\n","//! moment.js locale configuration\n//! locale : Esperanto [eo]\n//! author : Colin Dean : https://github.com/colindean\n//! author : Mia Nordentoft Imperatori : https://github.com/miestasmia\n//! comment : miestasmia corrected the translation by colindean\n//! comment : Vivakvo corrected the translation by colindean and miestasmia\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 eo = moment.defineLocale('eo', {\n        months: 'januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro'.split(\n            '_'\n        ),\n        monthsShort: 'jan_feb_mart_apr_maj_jun_jul_aŭg_sept_okt_nov_dec'.split('_'),\n        weekdays: 'dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato'.split('_'),\n        weekdaysShort: 'dim_lun_mard_merk_ĵaŭ_ven_sab'.split('_'),\n        weekdaysMin: 'di_lu_ma_me_ĵa_ve_sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: '[la] D[-an de] MMMM, YYYY',\n            LLL: '[la] D[-an de] MMMM, YYYY HH:mm',\n            LLLL: 'dddd[n], [la] D[-an de] MMMM, YYYY HH:mm',\n            llll: 'ddd, [la] D[-an de] MMM, YYYY HH:mm',\n        },\n        meridiemParse: /[ap]\\.t\\.m/i,\n        isPM: function (input) {\n            return input.charAt(0).toLowerCase() === 'p';\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours > 11) {\n                return isLower ? 'p.t.m.' : 'P.T.M.';\n            } else {\n                return isLower ? 'a.t.m.' : 'A.T.M.';\n            }\n        },\n        calendar: {\n            sameDay: '[Hodiaŭ je] LT',\n            nextDay: '[Morgaŭ je] LT',\n            nextWeek: 'dddd[n je] LT',\n            lastDay: '[Hieraŭ je] LT',\n            lastWeek: '[pasintan] dddd[n je] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'post %s',\n            past: 'antaŭ %s',\n            s: 'kelkaj sekundoj',\n            ss: '%d sekundoj',\n            m: 'unu minuto',\n            mm: '%d minutoj',\n            h: 'unu horo',\n            hh: '%d horoj',\n            d: 'unu tago', //ne 'diurno', ĉar estas uzita por proksimumo\n            dd: '%d tagoj',\n            M: 'unu monato',\n            MM: '%d monatoj',\n            y: 'unu jaro',\n            yy: '%d jaroj',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}a/,\n        ordinal: '%da',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return eo;\n\n})));\n","//! moment.js locale configuration\n//! locale : Spanish [es]\n//! author : Julio Napurí : https://github.com/julionc\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 monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(\n            '_'\n        ),\n        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),\n        monthsParse = [\n            /^ene/i,\n            /^feb/i,\n            /^mar/i,\n            /^abr/i,\n            /^may/i,\n            /^jun/i,\n            /^jul/i,\n            /^ago/i,\n            /^sep/i,\n            /^oct/i,\n            /^nov/i,\n            /^dic/i,\n        ],\n        monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n    var es = moment.defineLocale('es', {\n        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(\n            '_'\n        ),\n        monthsShort: function (m, format) {\n            if (!m) {\n                return monthsShortDot;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShort[m.month()];\n            } else {\n                return monthsShortDot[m.month()];\n            }\n        },\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n        monthsShortStrictRegex: /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n        weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n        weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D [de] MMMM [de] YYYY',\n            LLL: 'D [de] MMMM [de] YYYY H:mm',\n            LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm',\n        },\n        calendar: {\n            sameDay: function () {\n                return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextDay: function () {\n                return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextWeek: function () {\n                return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastDay: function () {\n                return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastWeek: function () {\n                return (\n                    '[el] dddd [pasado a la' +\n                    (this.hours() !== 1 ? 's' : '') +\n                    '] LT'\n                );\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'en %s',\n            past: 'hace %s',\n            s: 'unos segundos',\n            ss: '%d segundos',\n            m: 'un minuto',\n            mm: '%d minutos',\n            h: 'una hora',\n            hh: '%d horas',\n            d: 'un día',\n            dd: '%d días',\n            w: 'una semana',\n            ww: '%d semanas',\n            M: 'un mes',\n            MM: '%d meses',\n            y: 'un año',\n            yy: '%d años',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\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        invalidDate: 'Fecha inválida',\n    });\n\n    return es;\n\n})));\n","//! moment.js locale configuration\n//! locale : Spanish (Dominican Republic) [es-do]\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 monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(\n            '_'\n        ),\n        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),\n        monthsParse = [\n            /^ene/i,\n            /^feb/i,\n            /^mar/i,\n            /^abr/i,\n            /^may/i,\n            /^jun/i,\n            /^jul/i,\n            /^ago/i,\n            /^sep/i,\n            /^oct/i,\n            /^nov/i,\n            /^dic/i,\n        ],\n        monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n    var esDo = moment.defineLocale('es-do', {\n        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(\n            '_'\n        ),\n        monthsShort: function (m, format) {\n            if (!m) {\n                return monthsShortDot;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShort[m.month()];\n            } else {\n                return monthsShortDot[m.month()];\n            }\n        },\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n        monthsShortStrictRegex: /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n        weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n        weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'DD/MM/YYYY',\n            LL: 'D [de] MMMM [de] YYYY',\n            LLL: 'D [de] MMMM [de] YYYY h:mm A',\n            LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A',\n        },\n        calendar: {\n            sameDay: function () {\n                return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextDay: function () {\n                return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextWeek: function () {\n                return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastDay: function () {\n                return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastWeek: function () {\n                return (\n                    '[el] dddd [pasado a la' +\n                    (this.hours() !== 1 ? 's' : '') +\n                    '] LT'\n                );\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'en %s',\n            past: 'hace %s',\n            s: 'unos segundos',\n            ss: '%d segundos',\n            m: 'un minuto',\n            mm: '%d minutos',\n            h: 'una hora',\n            hh: '%d horas',\n            d: 'un día',\n            dd: '%d días',\n            w: 'una semana',\n            ww: '%d semanas',\n            M: 'un mes',\n            MM: '%d meses',\n            y: 'un año',\n            yy: '%d años',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\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 esDo;\n\n})));\n","//! moment.js locale configuration\n//! locale : Spanish (Mexico) [es-mx]\n//! author : JC Franco : https://github.com/jcfranco\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 monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(\n            '_'\n        ),\n        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),\n        monthsParse = [\n            /^ene/i,\n            /^feb/i,\n            /^mar/i,\n            /^abr/i,\n            /^may/i,\n            /^jun/i,\n            /^jul/i,\n            /^ago/i,\n            /^sep/i,\n            /^oct/i,\n            /^nov/i,\n            /^dic/i,\n        ],\n        monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n    var esMx = moment.defineLocale('es-mx', {\n        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(\n            '_'\n        ),\n        monthsShort: function (m, format) {\n            if (!m) {\n                return monthsShortDot;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShort[m.month()];\n            } else {\n                return monthsShortDot[m.month()];\n            }\n        },\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n        monthsShortStrictRegex: /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n        weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n        weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D [de] MMMM [de] YYYY',\n            LLL: 'D [de] MMMM [de] YYYY H:mm',\n            LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm',\n        },\n        calendar: {\n            sameDay: function () {\n                return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextDay: function () {\n                return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextWeek: function () {\n                return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastDay: function () {\n                return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastWeek: function () {\n                return (\n                    '[el] dddd [pasado a la' +\n                    (this.hours() !== 1 ? 's' : '') +\n                    '] LT'\n                );\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'en %s',\n            past: 'hace %s',\n            s: 'unos segundos',\n            ss: '%d segundos',\n            m: 'un minuto',\n            mm: '%d minutos',\n            h: 'una hora',\n            hh: '%d horas',\n            d: 'un día',\n            dd: '%d días',\n            w: 'una semana',\n            ww: '%d semanas',\n            M: 'un mes',\n            MM: '%d meses',\n            y: 'un año',\n            yy: '%d años',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 0, // Sunday 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        invalidDate: 'Fecha inválida',\n    });\n\n    return esMx;\n\n})));\n","//! moment.js locale configuration\n//! locale : Spanish (United States) [es-us]\n//! author : bustta : https://github.com/bustta\n//! author : chrisrodz : https://github.com/chrisrodz\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 monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(\n            '_'\n        ),\n        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),\n        monthsParse = [\n            /^ene/i,\n            /^feb/i,\n            /^mar/i,\n            /^abr/i,\n            /^may/i,\n            /^jun/i,\n            /^jul/i,\n            /^ago/i,\n            /^sep/i,\n            /^oct/i,\n            /^nov/i,\n            /^dic/i,\n        ],\n        monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n    var esUs = moment.defineLocale('es-us', {\n        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(\n            '_'\n        ),\n        monthsShort: function (m, format) {\n            if (!m) {\n                return monthsShortDot;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShort[m.month()];\n            } else {\n                return monthsShortDot[m.month()];\n            }\n        },\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n        monthsShortStrictRegex: /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n        weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n        weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'MM/DD/YYYY',\n            LL: 'D [de] MMMM [de] YYYY',\n            LLL: 'D [de] MMMM [de] YYYY h:mm A',\n            LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A',\n        },\n        calendar: {\n            sameDay: function () {\n                return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextDay: function () {\n                return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextWeek: function () {\n                return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastDay: function () {\n                return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastWeek: function () {\n                return (\n                    '[el] dddd [pasado a la' +\n                    (this.hours() !== 1 ? 's' : '') +\n                    '] LT'\n                );\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'en %s',\n            past: 'hace %s',\n            s: 'unos segundos',\n            ss: '%d segundos',\n            m: 'un minuto',\n            mm: '%d minutos',\n            h: 'una hora',\n            hh: '%d horas',\n            d: 'un día',\n            dd: '%d días',\n            w: 'una semana',\n            ww: '%d semanas',\n            M: 'un mes',\n            MM: '%d meses',\n            y: 'un año',\n            yy: '%d años',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\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\n    return esUs;\n\n})));\n","//! moment.js locale configuration\n//! locale : Estonian [et]\n//! author : Henry Kehlmann : https://github.com/madhenry\n//! improvements : Illimar Tambek : https://github.com/ragulka\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    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            s: ['mõne sekundi', 'mõni sekund', 'paar sekundit'],\n            ss: [number + 'sekundi', number + 'sekundit'],\n            m: ['ühe minuti', 'üks minut'],\n            mm: [number + ' minuti', number + ' minutit'],\n            h: ['ühe tunni', 'tund aega', 'üks tund'],\n            hh: [number + ' tunni', number + ' tundi'],\n            d: ['ühe päeva', 'üks päev'],\n            M: ['kuu aja', 'kuu aega', 'üks kuu'],\n            MM: [number + ' kuu', number + ' kuud'],\n            y: ['ühe aasta', 'aasta', 'üks aasta'],\n            yy: [number + ' aasta', number + ' aastat'],\n        };\n        if (withoutSuffix) {\n            return format[key][2] ? format[key][2] : format[key][1];\n        }\n        return isFuture ? format[key][0] : format[key][1];\n    }\n\n    var et = moment.defineLocale('et', {\n        months: 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split(\n            '_'\n        ),\n        monthsShort: 'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split(\n            '_'\n        ),\n        weekdays: 'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split(\n            '_'\n        ),\n        weekdaysShort: 'P_E_T_K_N_R_L'.split('_'),\n        weekdaysMin: 'P_E_T_K_N_R_L'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd, D. MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[Täna,] LT',\n            nextDay: '[Homme,] LT',\n            nextWeek: '[Järgmine] dddd LT',\n            lastDay: '[Eile,] LT',\n            lastWeek: '[Eelmine] dddd LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s pärast',\n            past: '%s tagasi',\n            s: processRelativeTime,\n            ss: processRelativeTime,\n            m: processRelativeTime,\n            mm: processRelativeTime,\n            h: processRelativeTime,\n            hh: processRelativeTime,\n            d: processRelativeTime,\n            dd: '%d päeva',\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\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 et;\n\n})));\n","//! moment.js locale configuration\n//! locale : Basque [eu]\n//! author : Eneko Illarramendi : https://github.com/eillarra\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 eu = moment.defineLocale('eu', {\n        months: 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split(\n            '_'\n        ),\n        monthsShort: 'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split(\n            '_'\n        ),\n        monthsParseExact: true,\n        weekdays: 'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split(\n            '_'\n        ),\n        weekdaysShort: 'ig._al._ar._az._og._ol._lr.'.split('_'),\n        weekdaysMin: 'ig_al_ar_az_og_ol_lr'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: 'YYYY[ko] MMMM[ren] D[a]',\n            LLL: 'YYYY[ko] MMMM[ren] D[a] HH:mm',\n            LLLL: 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm',\n            l: 'YYYY-M-D',\n            ll: 'YYYY[ko] MMM D[a]',\n            lll: 'YYYY[ko] MMM D[a] HH:mm',\n            llll: 'ddd, YYYY[ko] MMM D[a] HH:mm',\n        },\n        calendar: {\n            sameDay: '[gaur] LT[etan]',\n            nextDay: '[bihar] LT[etan]',\n            nextWeek: 'dddd LT[etan]',\n            lastDay: '[atzo] LT[etan]',\n            lastWeek: '[aurreko] dddd LT[etan]',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s barru',\n            past: 'duela %s',\n            s: 'segundo batzuk',\n            ss: '%d segundo',\n            m: 'minutu bat',\n            mm: '%d minutu',\n            h: 'ordu bat',\n            hh: '%d ordu',\n            d: 'egun bat',\n            dd: '%d egun',\n            M: 'hilabete bat',\n            MM: '%d hilabete',\n            y: 'urte bat',\n            yy: '%d urte',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return eu;\n\n})));\n","//! moment.js locale configuration\n//! locale : Persian [fa]\n//! author : Ebrahim Byagowi : https://github.com/ebraminio\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 symbolMap = {\n            1: '۱',\n            2: '۲',\n            3: '۳',\n            4: '۴',\n            5: '۵',\n            6: '۶',\n            7: '۷',\n            8: '۸',\n            9: '۹',\n            0: '۰',\n        },\n        numberMap = {\n            '۱': '1',\n            '۲': '2',\n            '۳': '3',\n            '۴': '4',\n            '۵': '5',\n            '۶': '6',\n            '۷': '7',\n            '۸': '8',\n            '۹': '9',\n            '۰': '0',\n        };\n\n    var fa = moment.defineLocale('fa', {\n        months: 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split(\n            '_'\n        ),\n        monthsShort: 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split(\n            '_'\n        ),\n        weekdays: 'یک\\u200cشنبه_دوشنبه_سه\\u200cشنبه_چهارشنبه_پنج\\u200cشنبه_جمعه_شنبه'.split(\n            '_'\n        ),\n        weekdaysShort: 'یک\\u200cشنبه_دوشنبه_سه\\u200cشنبه_چهارشنبه_پنج\\u200cشنبه_جمعه_شنبه'.split(\n            '_'\n        ),\n        weekdaysMin: 'ی_د_س_چ_پ_ج_ش'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /قبل از ظهر|بعد از ظهر/,\n        isPM: function (input) {\n            return /بعد از ظهر/.test(input);\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'قبل از ظهر';\n            } else {\n                return 'بعد از ظهر';\n            }\n        },\n        calendar: {\n            sameDay: '[امروز ساعت] LT',\n            nextDay: '[فردا ساعت] LT',\n            nextWeek: 'dddd [ساعت] LT',\n            lastDay: '[دیروز ساعت] LT',\n            lastWeek: 'dddd [پیش] [ساعت] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'در %s',\n            past: '%s پیش',\n            s: 'چند ثانیه',\n            ss: '%d ثانیه',\n            m: 'یک دقیقه',\n            mm: '%d دقیقه',\n            h: 'یک ساعت',\n            hh: '%d ساعت',\n            d: 'یک روز',\n            dd: '%d روز',\n            M: 'یک ماه',\n            MM: '%d ماه',\n            y: 'یک سال',\n            yy: '%d سال',\n        },\n        preparse: function (string) {\n            return string\n                .replace(/[۰-۹]/g, function (match) {\n                    return numberMap[match];\n                })\n                .replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string\n                .replace(/\\d/g, function (match) {\n                    return symbolMap[match];\n                })\n                .replace(/,/g, '،');\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}م/,\n        ordinal: '%dم',\n        week: {\n            dow: 6, // Saturday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    return fa;\n\n})));\n","//! moment.js locale configuration\n//! locale : Finnish [fi]\n//! author : Tarmo Aidantausta : https://github.com/bleadof\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 numbersPast = 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(\n            ' '\n        ),\n        numbersFuture = [\n            'nolla',\n            'yhden',\n            'kahden',\n            'kolmen',\n            'neljän',\n            'viiden',\n            'kuuden',\n            numbersPast[7],\n            numbersPast[8],\n            numbersPast[9],\n        ];\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = '';\n        switch (key) {\n            case 's':\n                return isFuture ? 'muutaman sekunnin' : 'muutama sekunti';\n            case 'ss':\n                result = isFuture ? 'sekunnin' : 'sekuntia';\n                break;\n            case 'm':\n                return isFuture ? 'minuutin' : 'minuutti';\n            case 'mm':\n                result = isFuture ? 'minuutin' : 'minuuttia';\n                break;\n            case 'h':\n                return isFuture ? 'tunnin' : 'tunti';\n            case 'hh':\n                result = isFuture ? 'tunnin' : 'tuntia';\n                break;\n            case 'd':\n                return isFuture ? 'päivän' : 'päivä';\n            case 'dd':\n                result = isFuture ? 'päivän' : 'päivää';\n                break;\n            case 'M':\n                return isFuture ? 'kuukauden' : 'kuukausi';\n            case 'MM':\n                result = isFuture ? 'kuukauden' : 'kuukautta';\n                break;\n            case 'y':\n                return isFuture ? 'vuoden' : 'vuosi';\n            case 'yy':\n                result = isFuture ? 'vuoden' : 'vuotta';\n                break;\n        }\n        result = verbalNumber(number, isFuture) + ' ' + result;\n        return result;\n    }\n    function verbalNumber(number, isFuture) {\n        return number < 10\n            ? isFuture\n                ? numbersFuture[number]\n                : numbersPast[number]\n            : number;\n    }\n\n    var fi = moment.defineLocale('fi', {\n        months: 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split(\n            '_'\n        ),\n        monthsShort: 'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split(\n            '_'\n        ),\n        weekdays: 'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split(\n            '_'\n        ),\n        weekdaysShort: 'su_ma_ti_ke_to_pe_la'.split('_'),\n        weekdaysMin: 'su_ma_ti_ke_to_pe_la'.split('_'),\n        longDateFormat: {\n            LT: 'HH.mm',\n            LTS: 'HH.mm.ss',\n            L: 'DD.MM.YYYY',\n            LL: 'Do MMMM[ta] YYYY',\n            LLL: 'Do MMMM[ta] YYYY, [klo] HH.mm',\n            LLLL: 'dddd, Do MMMM[ta] YYYY, [klo] HH.mm',\n            l: 'D.M.YYYY',\n            ll: 'Do MMM YYYY',\n            lll: 'Do MMM YYYY, [klo] HH.mm',\n            llll: 'ddd, Do MMM YYYY, [klo] HH.mm',\n        },\n        calendar: {\n            sameDay: '[tänään] [klo] LT',\n            nextDay: '[huomenna] [klo] LT',\n            nextWeek: 'dddd [klo] LT',\n            lastDay: '[eilen] [klo] LT',\n            lastWeek: '[viime] dddd[na] [klo] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s päästä',\n            past: '%s sitten',\n            s: translate,\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: translate,\n            hh: translate,\n            d: translate,\n            dd: translate,\n            M: translate,\n            MM: translate,\n            y: translate,\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\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 fi;\n\n})));\n","//! moment.js locale configuration\n//! locale : Filipino [fil]\n//! author : Dan Hagman : https://github.com/hagmandan\n//! author : Matthew Co : https://github.com/matthewdeeco\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 fil = moment.defineLocale('fil', {\n        months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split(\n            '_'\n        ),\n        monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),\n        weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split(\n            '_'\n        ),\n        weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),\n        weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'MM/D/YYYY',\n            LL: 'MMMM D, YYYY',\n            LLL: 'MMMM D, YYYY HH:mm',\n            LLLL: 'dddd, MMMM DD, YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: 'LT [ngayong araw]',\n            nextDay: '[Bukas ng] LT',\n            nextWeek: 'LT [sa susunod na] dddd',\n            lastDay: 'LT [kahapon]',\n            lastWeek: 'LT [noong nakaraang] dddd',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'sa loob ng %s',\n            past: '%s ang nakalipas',\n            s: 'ilang segundo',\n            ss: '%d segundo',\n            m: 'isang minuto',\n            mm: '%d minuto',\n            h: 'isang oras',\n            hh: '%d oras',\n            d: 'isang araw',\n            dd: '%d araw',\n            M: 'isang buwan',\n            MM: '%d buwan',\n            y: 'isang taon',\n            yy: '%d taon',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}/,\n        ordinal: function (number) {\n            return number;\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 fil;\n\n})));\n","//! moment.js locale configuration\n//! locale : Faroese [fo]\n//! author : Ragnar Johannesen : https://github.com/ragnar123\n//! author : Kristian Sakarisson : https://github.com/sakarisson\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 fo = moment.defineLocale('fo', {\n        months: 'januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember'.split(\n            '_'\n        ),\n        monthsShort: 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),\n        weekdays: 'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur'.split(\n            '_'\n        ),\n        weekdaysShort: 'sun_mán_týs_mik_hós_frí_ley'.split('_'),\n        weekdaysMin: 'su_má_tý_mi_hó_fr_le'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D. MMMM, YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Í dag kl.] LT',\n            nextDay: '[Í morgin kl.] LT',\n            nextWeek: 'dddd [kl.] LT',\n            lastDay: '[Í gjár kl.] LT',\n            lastWeek: '[síðstu] dddd [kl] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'um %s',\n            past: '%s síðani',\n            s: 'fá sekund',\n            ss: '%d sekundir',\n            m: 'ein minuttur',\n            mm: '%d minuttir',\n            h: 'ein tími',\n            hh: '%d tímar',\n            d: 'ein dagur',\n            dd: '%d dagar',\n            M: 'ein mánaður',\n            MM: '%d mánaðir',\n            y: 'eitt ár',\n            yy: '%d ár',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\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 fo;\n\n})));\n","//! moment.js locale configuration\n//! locale : French [fr]\n//! author : John Fischer : https://github.com/jfroffice\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 monthsStrictRegex = /^(janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i,\n        monthsShortStrictRegex = /(janv\\.?|févr\\.?|mars|avr\\.?|mai|juin|juil\\.?|août|sept\\.?|oct\\.?|nov\\.?|déc\\.?)/i,\n        monthsRegex = /(janv\\.?|févr\\.?|mars|avr\\.?|mai|juin|juil\\.?|août|sept\\.?|oct\\.?|nov\\.?|déc\\.?|janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i,\n        monthsParse = [\n            /^janv/i,\n            /^févr/i,\n            /^mars/i,\n            /^avr/i,\n            /^mai/i,\n            /^juin/i,\n            /^juil/i,\n            /^août/i,\n            /^sept/i,\n            /^oct/i,\n            /^nov/i,\n            /^déc/i,\n        ];\n\n    var fr = moment.defineLocale('fr', {\n        months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split(\n            '_'\n        ),\n        monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split(\n            '_'\n        ),\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex: monthsStrictRegex,\n        monthsShortStrictRegex: monthsShortStrictRegex,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n        weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n        weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Aujourd’hui à] LT',\n            nextDay: '[Demain à] LT',\n            nextWeek: 'dddd [à] LT',\n            lastDay: '[Hier à] LT',\n            lastWeek: 'dddd [dernier à] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'dans %s',\n            past: 'il y a %s',\n            s: 'quelques secondes',\n            ss: '%d secondes',\n            m: 'une minute',\n            mm: '%d minutes',\n            h: 'une heure',\n            hh: '%d heures',\n            d: 'un jour',\n            dd: '%d jours',\n            w: 'une semaine',\n            ww: '%d semaines',\n            M: 'un mois',\n            MM: '%d mois',\n            y: 'un an',\n            yy: '%d ans',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(er|)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                // TODO: Return 'e' when day of month > 1. Move this case inside\n                // block for masculine words below.\n                // See https://github.com/moment/moment/issues/3375\n                case 'D':\n                    return number + (number === 1 ? 'er' : '');\n\n                // Words with masculine grammatical gender: mois, trimestre, jour\n                default:\n                case 'M':\n                case 'Q':\n                case 'DDD':\n                case 'd':\n                    return number + (number === 1 ? 'er' : 'e');\n\n                // Words with feminine grammatical gender: semaine\n                case 'w':\n                case 'W':\n                    return number + (number === 1 ? 're' : 'e');\n            }\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 fr;\n\n})));\n","//! moment.js locale configuration\n//! locale : French (Canada) [fr-ca]\n//! author : Jonathan Abourbih : https://github.com/jonbca\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 frCa = moment.defineLocale('fr-ca', {\n        months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split(\n            '_'\n        ),\n        monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split(\n            '_'\n        ),\n        monthsParseExact: true,\n        weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n        weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n        weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),\n        weekdaysParseExact: true,\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 HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Aujourd’hui à] LT',\n            nextDay: '[Demain à] LT',\n            nextWeek: 'dddd [à] LT',\n            lastDay: '[Hier à] LT',\n            lastWeek: 'dddd [dernier à] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'dans %s',\n            past: 'il y a %s',\n            s: 'quelques secondes',\n            ss: '%d secondes',\n            m: 'une minute',\n            mm: '%d minutes',\n            h: 'une heure',\n            hh: '%d heures',\n            d: 'un jour',\n            dd: '%d jours',\n            M: 'un mois',\n            MM: '%d mois',\n            y: 'un an',\n            yy: '%d ans',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(er|e)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                // Words with masculine grammatical gender: mois, trimestre, jour\n                default:\n                case 'M':\n                case 'Q':\n                case 'D':\n                case 'DDD':\n                case 'd':\n                    return number + (number === 1 ? 'er' : 'e');\n\n                // Words with feminine grammatical gender: semaine\n                case 'w':\n                case 'W':\n                    return number + (number === 1 ? 're' : 'e');\n            }\n        },\n    });\n\n    return frCa;\n\n})));\n","//! moment.js locale configuration\n//! locale : French (Switzerland) [fr-ch]\n//! author : Gaspard Bucher : https://github.com/gaspard\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 frCh = moment.defineLocale('fr-ch', {\n        months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split(\n            '_'\n        ),\n        monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split(\n            '_'\n        ),\n        monthsParseExact: true,\n        weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n        weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n        weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Aujourd’hui à] LT',\n            nextDay: '[Demain à] LT',\n            nextWeek: 'dddd [à] LT',\n            lastDay: '[Hier à] LT',\n            lastWeek: 'dddd [dernier à] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'dans %s',\n            past: 'il y a %s',\n            s: 'quelques secondes',\n            ss: '%d secondes',\n            m: 'une minute',\n            mm: '%d minutes',\n            h: 'une heure',\n            hh: '%d heures',\n            d: 'un jour',\n            dd: '%d jours',\n            M: 'un mois',\n            MM: '%d mois',\n            y: 'un an',\n            yy: '%d ans',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(er|e)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                // Words with masculine grammatical gender: mois, trimestre, jour\n                default:\n                case 'M':\n                case 'Q':\n                case 'D':\n                case 'DDD':\n                case 'd':\n                    return number + (number === 1 ? 'er' : 'e');\n\n                // Words with feminine grammatical gender: semaine\n                case 'w':\n                case 'W':\n                    return number + (number === 1 ? 're' : 'e');\n            }\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 frCh;\n\n})));\n","//! moment.js locale configuration\n//! locale : Frisian [fy]\n//! author : Robin van der Vliet : https://github.com/robin0van0der0v\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 monthsShortWithDots = 'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split(\n            '_'\n        ),\n        monthsShortWithoutDots = 'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split(\n            '_'\n        );\n\n    var fy = moment.defineLocale('fy', {\n        months: 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split(\n            '_'\n        ),\n        monthsShort: function (m, format) {\n            if (!m) {\n                return monthsShortWithDots;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShortWithoutDots[m.month()];\n            } else {\n                return monthsShortWithDots[m.month()];\n            }\n        },\n        monthsParseExact: true,\n        weekdays: 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split(\n            '_'\n        ),\n        weekdaysShort: 'si._mo._ti._wo._to._fr._so.'.split('_'),\n        weekdaysMin: 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD-MM-YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[hjoed om] LT',\n            nextDay: '[moarn om] LT',\n            nextWeek: 'dddd [om] LT',\n            lastDay: '[juster om] LT',\n            lastWeek: '[ôfrûne] dddd [om] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'oer %s',\n            past: '%s lyn',\n            s: 'in pear sekonden',\n            ss: '%d sekonden',\n            m: 'ien minút',\n            mm: '%d minuten',\n            h: 'ien oere',\n            hh: '%d oeren',\n            d: 'ien dei',\n            dd: '%d dagen',\n            M: 'ien moanne',\n            MM: '%d moannen',\n            y: 'ien jier',\n            yy: '%d jierren',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal: function (number) {\n            return (\n                number +\n                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')\n            );\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 fy;\n\n})));\n","//! moment.js locale configuration\n//! locale : Irish or Irish Gaelic [ga]\n//! author : André Silva : https://github.com/askpt\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 months = [\n            'Eanáir',\n            'Feabhra',\n            'Márta',\n            'Aibreán',\n            'Bealtaine',\n            'Meitheamh',\n            'Iúil',\n            'Lúnasa',\n            'Meán Fómhair',\n            'Deireadh Fómhair',\n            'Samhain',\n            'Nollaig',\n        ],\n        monthsShort = [\n            'Ean',\n            'Feabh',\n            'Márt',\n            'Aib',\n            'Beal',\n            'Meith',\n            'Iúil',\n            'Lún',\n            'M.F.',\n            'D.F.',\n            'Samh',\n            'Noll',\n        ],\n        weekdays = [\n            'Dé Domhnaigh',\n            'Dé Luain',\n            'Dé Máirt',\n            'Dé Céadaoin',\n            'Déardaoin',\n            'Dé hAoine',\n            'Dé Sathairn',\n        ],\n        weekdaysShort = ['Domh', 'Luan', 'Máirt', 'Céad', 'Déar', 'Aoine', 'Sath'],\n        weekdaysMin = ['Do', 'Lu', 'Má', 'Cé', 'Dé', 'A', 'Sa'];\n\n    var ga = moment.defineLocale('ga', {\n        months: months,\n        monthsShort: monthsShort,\n        monthsParseExact: true,\n        weekdays: weekdays,\n        weekdaysShort: weekdaysShort,\n        weekdaysMin: weekdaysMin,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Inniu ag] LT',\n            nextDay: '[Amárach ag] LT',\n            nextWeek: 'dddd [ag] LT',\n            lastDay: '[Inné ag] LT',\n            lastWeek: 'dddd [seo caite] [ag] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'i %s',\n            past: '%s ó shin',\n            s: 'cúpla soicind',\n            ss: '%d soicind',\n            m: 'nóiméad',\n            mm: '%d nóiméad',\n            h: 'uair an chloig',\n            hh: '%d uair an chloig',\n            d: 'lá',\n            dd: '%d lá',\n            M: 'mí',\n            MM: '%d míonna',\n            y: 'bliain',\n            yy: '%d bliain',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(d|na|mh)/,\n        ordinal: function (number) {\n            var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';\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 ga;\n\n})));\n","//! moment.js locale configuration\n//! locale : Scottish Gaelic [gd]\n//! author : Jon Ashdown : https://github.com/jonashdown\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 months = [\n            'Am Faoilleach',\n            'An Gearran',\n            'Am Màrt',\n            'An Giblean',\n            'An Cèitean',\n            'An t-Ògmhios',\n            'An t-Iuchar',\n            'An Lùnastal',\n            'An t-Sultain',\n            'An Dàmhair',\n            'An t-Samhain',\n            'An Dùbhlachd',\n        ],\n        monthsShort = [\n            'Faoi',\n            'Gear',\n            'Màrt',\n            'Gibl',\n            'Cèit',\n            'Ògmh',\n            'Iuch',\n            'Lùn',\n            'Sult',\n            'Dàmh',\n            'Samh',\n            'Dùbh',\n        ],\n        weekdays = [\n            'Didòmhnaich',\n            'Diluain',\n            'Dimàirt',\n            'Diciadain',\n            'Diardaoin',\n            'Dihaoine',\n            'Disathairne',\n        ],\n        weekdaysShort = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis'],\n        weekdaysMin = ['Dò', 'Lu', 'Mà', 'Ci', 'Ar', 'Ha', 'Sa'];\n\n    var gd = moment.defineLocale('gd', {\n        months: months,\n        monthsShort: monthsShort,\n        monthsParseExact: true,\n        weekdays: weekdays,\n        weekdaysShort: weekdaysShort,\n        weekdaysMin: weekdaysMin,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[An-diugh aig] LT',\n            nextDay: '[A-màireach aig] LT',\n            nextWeek: 'dddd [aig] LT',\n            lastDay: '[An-dè aig] LT',\n            lastWeek: 'dddd [seo chaidh] [aig] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'ann an %s',\n            past: 'bho chionn %s',\n            s: 'beagan diogan',\n            ss: '%d diogan',\n            m: 'mionaid',\n            mm: '%d mionaidean',\n            h: 'uair',\n            hh: '%d uairean',\n            d: 'latha',\n            dd: '%d latha',\n            M: 'mìos',\n            MM: '%d mìosan',\n            y: 'bliadhna',\n            yy: '%d bliadhna',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(d|na|mh)/,\n        ordinal: function (number) {\n            var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';\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 gd;\n\n})));\n","//! moment.js locale configuration\n//! locale : Galician [gl]\n//! author : Juan G. Hurtado : https://github.com/juanghurtado\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 gl = moment.defineLocale('gl', {\n        months: 'xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro'.split(\n            '_'\n        ),\n        monthsShort: 'xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.'.split(\n            '_'\n        ),\n        monthsParseExact: true,\n        weekdays: 'domingo_luns_martes_mércores_xoves_venres_sábado'.split('_'),\n        weekdaysShort: 'dom._lun._mar._mér._xov._ven._sáb.'.split('_'),\n        weekdaysMin: 'do_lu_ma_mé_xo_ve_sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D [de] MMMM [de] YYYY',\n            LLL: 'D [de] MMMM [de] YYYY H:mm',\n            LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm',\n        },\n        calendar: {\n            sameDay: function () {\n                return '[hoxe ' + (this.hours() !== 1 ? 'ás' : 'á') + '] LT';\n            },\n            nextDay: function () {\n                return '[mañá ' + (this.hours() !== 1 ? 'ás' : 'á') + '] LT';\n            },\n            nextWeek: function () {\n                return 'dddd [' + (this.hours() !== 1 ? 'ás' : 'a') + '] LT';\n            },\n            lastDay: function () {\n                return '[onte ' + (this.hours() !== 1 ? 'á' : 'a') + '] LT';\n            },\n            lastWeek: function () {\n                return (\n                    '[o] dddd [pasado ' + (this.hours() !== 1 ? 'ás' : 'a') + '] LT'\n                );\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: function (str) {\n                if (str.indexOf('un') === 0) {\n                    return 'n' + str;\n                }\n                return 'en ' + str;\n            },\n            past: 'hai %s',\n            s: 'uns segundos',\n            ss: '%d segundos',\n            m: 'un minuto',\n            mm: '%d minutos',\n            h: 'unha hora',\n            hh: '%d horas',\n            d: 'un día',\n            dd: '%d días',\n            M: 'un mes',\n            MM: '%d meses',\n            y: 'un ano',\n            yy: '%d anos',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\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 gl;\n\n})));\n","//! moment.js locale configuration\n//! locale : Konkani Devanagari script [gom-deva]\n//! author : The Discoverer : https://github.com/WikiDiscoverer\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    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            s: ['थोडया सॅकंडांनी', 'थोडे सॅकंड'],\n            ss: [number + ' सॅकंडांनी', number + ' सॅकंड'],\n            m: ['एका मिणटान', 'एक मिनूट'],\n            mm: [number + ' मिणटांनी', number + ' मिणटां'],\n            h: ['एका वरान', 'एक वर'],\n            hh: [number + ' वरांनी', number + ' वरां'],\n            d: ['एका दिसान', 'एक दीस'],\n            dd: [number + ' दिसांनी', number + ' दीस'],\n            M: ['एका म्हयन्यान', 'एक म्हयनो'],\n            MM: [number + ' म्हयन्यानी', number + ' म्हयने'],\n            y: ['एका वर्सान', 'एक वर्स'],\n            yy: [number + ' वर्सांनी', number + ' वर्सां'],\n        };\n        return isFuture ? format[key][0] : format[key][1];\n    }\n\n    var gomDeva = moment.defineLocale('gom-deva', {\n        months: {\n            standalone: 'जानेवारी_फेब्रुवारी_मार्च_एप्रील_मे_जून_जुलय_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split(\n                '_'\n            ),\n            format: 'जानेवारीच्या_फेब्रुवारीच्या_मार्चाच्या_एप्रीलाच्या_मेयाच्या_जूनाच्या_जुलयाच्या_ऑगस्टाच्या_सप्टेंबराच्या_ऑक्टोबराच्या_नोव्हेंबराच्या_डिसेंबराच्या'.split(\n                '_'\n            ),\n            isFormat: /MMMM(\\s)+D[oD]?/,\n        },\n        monthsShort: 'जाने._फेब्रु._मार्च_एप्री._मे_जून_जुल._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split(\n            '_'\n        ),\n        monthsParseExact: true,\n        weekdays: 'आयतार_सोमार_मंगळार_बुधवार_बिरेस्तार_सुक्रार_शेनवार'.split('_'),\n        weekdaysShort: 'आयत._सोम._मंगळ._बुध._ब्रेस्त._सुक्र._शेन.'.split('_'),\n        weekdaysMin: 'आ_सो_मं_बु_ब्रे_सु_शे'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'A h:mm [वाजतां]',\n            LTS: 'A h:mm:ss [वाजतां]',\n            L: 'DD-MM-YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY A h:mm [वाजतां]',\n            LLLL: 'dddd, MMMM Do, YYYY, A h:mm [वाजतां]',\n            llll: 'ddd, D MMM YYYY, A h:mm [वाजतां]',\n        },\n        calendar: {\n            sameDay: '[आयज] LT',\n            nextDay: '[फाल्यां] LT',\n            nextWeek: '[फुडलो] dddd[,] LT',\n            lastDay: '[काल] LT',\n            lastWeek: '[फाटलो] dddd[,] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s',\n            past: '%s आदीं',\n            s: processRelativeTime,\n            ss: processRelativeTime,\n            m: processRelativeTime,\n            mm: processRelativeTime,\n            h: processRelativeTime,\n            hh: processRelativeTime,\n            d: processRelativeTime,\n            dd: processRelativeTime,\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(वेर)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                // the ordinal 'वेर' only applies to day of the month\n                case 'D':\n                    return number + 'वेर';\n                default:\n                case 'M':\n                case 'Q':\n                case 'DDD':\n                case 'd':\n                case 'w':\n                case 'W':\n                    return number;\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week\n            doy: 3, // The week that contains Jan 4th is the first week of the year (7 + 0 - 4)\n        },\n        meridiemParse: /राती|सकाळीं|दनपारां|सांजे/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'राती') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'सकाळीं') {\n                return hour;\n            } else if (meridiem === 'दनपारां') {\n                return hour > 12 ? hour : hour + 12;\n            } else if (meridiem === 'सांजे') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'राती';\n            } else if (hour < 12) {\n                return 'सकाळीं';\n            } else if (hour < 16) {\n                return 'दनपारां';\n            } else if (hour < 20) {\n                return 'सांजे';\n            } else {\n                return 'राती';\n            }\n        },\n    });\n\n    return gomDeva;\n\n})));\n","//! moment.js locale configuration\n//! locale : Konkani Latin script [gom-latn]\n//! author : The Discoverer : https://github.com/WikiDiscoverer\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    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            s: ['thoddea sekondamni', 'thodde sekond'],\n            ss: [number + ' sekondamni', number + ' sekond'],\n            m: ['eka mintan', 'ek minut'],\n            mm: [number + ' mintamni', number + ' mintam'],\n            h: ['eka voran', 'ek vor'],\n            hh: [number + ' voramni', number + ' voram'],\n            d: ['eka disan', 'ek dis'],\n            dd: [number + ' disamni', number + ' dis'],\n            M: ['eka mhoinean', 'ek mhoino'],\n            MM: [number + ' mhoineamni', number + ' mhoine'],\n            y: ['eka vorsan', 'ek voros'],\n            yy: [number + ' vorsamni', number + ' vorsam'],\n        };\n        return isFuture ? format[key][0] : format[key][1];\n    }\n\n    var gomLatn = moment.defineLocale('gom-latn', {\n        months: {\n            standalone: 'Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr'.split(\n                '_'\n            ),\n            format: 'Janerachea_Febrerachea_Marsachea_Abrilachea_Maiachea_Junachea_Julaiachea_Agostachea_Setembrachea_Otubrachea_Novembrachea_Dezembrachea'.split(\n                '_'\n            ),\n            isFormat: /MMMM(\\s)+D[oD]?/,\n        },\n        monthsShort: 'Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.'.split(\n            '_'\n        ),\n        monthsParseExact: true,\n        weekdays: \"Aitar_Somar_Mongllar_Budhvar_Birestar_Sukrar_Son'var\".split('_'),\n        weekdaysShort: 'Ait._Som._Mon._Bud._Bre._Suk._Son.'.split('_'),\n        weekdaysMin: 'Ai_Sm_Mo_Bu_Br_Su_Sn'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'A h:mm [vazta]',\n            LTS: 'A h:mm:ss [vazta]',\n            L: 'DD-MM-YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY A h:mm [vazta]',\n            LLLL: 'dddd, MMMM Do, YYYY, A h:mm [vazta]',\n            llll: 'ddd, D MMM YYYY, A h:mm [vazta]',\n        },\n        calendar: {\n            sameDay: '[Aiz] LT',\n            nextDay: '[Faleam] LT',\n            nextWeek: '[Fuddlo] dddd[,] LT',\n            lastDay: '[Kal] LT',\n            lastWeek: '[Fattlo] dddd[,] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s',\n            past: '%s adim',\n            s: processRelativeTime,\n            ss: processRelativeTime,\n            m: processRelativeTime,\n            mm: processRelativeTime,\n            h: processRelativeTime,\n            hh: processRelativeTime,\n            d: processRelativeTime,\n            dd: processRelativeTime,\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(er)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                // the ordinal 'er' only applies to day of the month\n                case 'D':\n                    return number + 'er';\n                default:\n                case 'M':\n                case 'Q':\n                case 'DDD':\n                case 'd':\n                case 'w':\n                case 'W':\n                    return number;\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week\n            doy: 3, // The week that contains Jan 4th is the first week of the year (7 + 0 - 4)\n        },\n        meridiemParse: /rati|sokallim|donparam|sanje/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'rati') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'sokallim') {\n                return hour;\n            } else if (meridiem === 'donparam') {\n                return hour > 12 ? hour : hour + 12;\n            } else if (meridiem === 'sanje') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'rati';\n            } else if (hour < 12) {\n                return 'sokallim';\n            } else if (hour < 16) {\n                return 'donparam';\n            } else if (hour < 20) {\n                return 'sanje';\n            } else {\n                return 'rati';\n            }\n        },\n    });\n\n    return gomLatn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Gujarati [gu]\n//! author : Kaushik Thanki : https://github.com/Kaushik1987\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 symbolMap = {\n            1: '૧',\n            2: '૨',\n            3: '૩',\n            4: '૪',\n            5: '૫',\n            6: '૬',\n            7: '૭',\n            8: '૮',\n            9: '૯',\n            0: '૦',\n        },\n        numberMap = {\n            '૧': '1',\n            '૨': '2',\n            '૩': '3',\n            '૪': '4',\n            '૫': '5',\n            '૬': '6',\n            '૭': '7',\n            '૮': '8',\n            '૯': '9',\n            '૦': '0',\n        };\n\n    var gu = moment.defineLocale('gu', {\n        months: 'જાન્યુઆરી_ફેબ્રુઆરી_માર્ચ_એપ્રિલ_મે_જૂન_જુલાઈ_ઑગસ્ટ_સપ્ટેમ્બર_ઑક્ટ્બર_નવેમ્બર_ડિસેમ્બર'.split(\n            '_'\n        ),\n        monthsShort: 'જાન્યુ._ફેબ્રુ._માર્ચ_એપ્રિ._મે_જૂન_જુલા._ઑગ._સપ્ટે._ઑક્ટ્._નવે._ડિસે.'.split(\n            '_'\n        ),\n        monthsParseExact: true,\n        weekdays: 'રવિવાર_સોમવાર_મંગળવાર_બુધ્વાર_ગુરુવાર_શુક્રવાર_શનિવાર'.split(\n            '_'\n        ),\n        weekdaysShort: 'રવિ_સોમ_મંગળ_બુધ્_ગુરુ_શુક્ર_શનિ'.split('_'),\n        weekdaysMin: 'ર_સો_મં_બુ_ગુ_શુ_શ'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm વાગ્યે',\n            LTS: 'A h:mm:ss વાગ્યે',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm વાગ્યે',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm વાગ્યે',\n        },\n        calendar: {\n            sameDay: '[આજ] LT',\n            nextDay: '[કાલે] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[ગઇકાલે] LT',\n            lastWeek: '[પાછલા] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s મા',\n            past: '%s પહેલા',\n            s: 'અમુક પળો',\n            ss: '%d સેકંડ',\n            m: 'એક મિનિટ',\n            mm: '%d મિનિટ',\n            h: 'એક કલાક',\n            hh: '%d કલાક',\n            d: 'એક દિવસ',\n            dd: '%d દિવસ',\n            M: 'એક મહિનો',\n            MM: '%d મહિનો',\n            y: 'એક વર્ષ',\n            yy: '%d વર્ષ',\n        },\n        preparse: function (string) {\n            return string.replace(/[૧૨૩૪૫૬૭૮૯૦]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        // Gujarati notation for meridiems are quite fuzzy in practice. While there exists\n        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Gujarati.\n        meridiemParse: /રાત|બપોર|સવાર|સાંજ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'રાત') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'સવાર') {\n                return hour;\n            } else if (meridiem === 'બપોર') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'સાંજ') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'રાત';\n            } else if (hour < 10) {\n                return 'સવાર';\n            } else if (hour < 17) {\n                return 'બપોર';\n            } else if (hour < 20) {\n                return 'સાંજ';\n            } else {\n                return 'રાત';\n            }\n        },\n        week: {\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\n    return gu;\n\n})));\n","//! moment.js locale configuration\n//! locale : Hebrew [he]\n//! author : Tomer Cohen : https://github.com/tomer\n//! author : Moshe Simantov : https://github.com/DevelopmentIL\n//! author : Tal Ater : https://github.com/TalAter\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 he = moment.defineLocale('he', {\n        months: 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split(\n            '_'\n        ),\n        monthsShort: 'ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳'.split(\n            '_'\n        ),\n        weekdays: 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'),\n        weekdaysShort: 'א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳'.split('_'),\n        weekdaysMin: 'א_ב_ג_ד_ה_ו_ש'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D [ב]MMMM YYYY',\n            LLL: 'D [ב]MMMM YYYY HH:mm',\n            LLLL: 'dddd, D [ב]MMMM YYYY HH:mm',\n            l: 'D/M/YYYY',\n            ll: 'D MMM YYYY',\n            lll: 'D MMM YYYY HH:mm',\n            llll: 'ddd, D MMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[היום ב־]LT',\n            nextDay: '[מחר ב־]LT',\n            nextWeek: 'dddd [בשעה] LT',\n            lastDay: '[אתמול ב־]LT',\n            lastWeek: '[ביום] dddd [האחרון בשעה] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'בעוד %s',\n            past: 'לפני %s',\n            s: 'מספר שניות',\n            ss: '%d שניות',\n            m: 'דקה',\n            mm: '%d דקות',\n            h: 'שעה',\n            hh: function (number) {\n                if (number === 2) {\n                    return 'שעתיים';\n                }\n                return number + ' שעות';\n            },\n            d: 'יום',\n            dd: function (number) {\n                if (number === 2) {\n                    return 'יומיים';\n                }\n                return number + ' ימים';\n            },\n            M: 'חודש',\n            MM: function (number) {\n                if (number === 2) {\n                    return 'חודשיים';\n                }\n                return number + ' חודשים';\n            },\n            y: 'שנה',\n            yy: function (number) {\n                if (number === 2) {\n                    return 'שנתיים';\n                } else if (number % 10 === 0 && number !== 10) {\n                    return number + ' שנה';\n                }\n                return number + ' שנים';\n            },\n        },\n        meridiemParse: /אחה\"צ|לפנה\"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,\n        isPM: function (input) {\n            return /^(אחה\"צ|אחרי הצהריים|בערב)$/.test(input);\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 5) {\n                return 'לפנות בוקר';\n            } else if (hour < 10) {\n                return 'בבוקר';\n            } else if (hour < 12) {\n                return isLower ? 'לפנה\"צ' : 'לפני הצהריים';\n            } else if (hour < 18) {\n                return isLower ? 'אחה\"צ' : 'אחרי הצהריים';\n            } else {\n                return 'בערב';\n            }\n        },\n    });\n\n    return he;\n\n})));\n","//! moment.js locale configuration\n//! locale : Hindi [hi]\n//! author : Mayank Singhal : https://github.com/mayanksinghal\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 symbolMap = {\n            1: '१',\n            2: '२',\n            3: '३',\n            4: '४',\n            5: '५',\n            6: '६',\n            7: '७',\n            8: '८',\n            9: '९',\n            0: '०',\n        },\n        numberMap = {\n            '१': '1',\n            '२': '2',\n            '३': '3',\n            '४': '4',\n            '५': '5',\n            '६': '6',\n            '७': '7',\n            '८': '8',\n            '९': '9',\n            '०': '0',\n        },\n        monthsParse = [\n            /^जन/i,\n            /^फ़र|फर/i,\n            /^मार्च/i,\n            /^अप्रै/i,\n            /^मई/i,\n            /^जून/i,\n            /^जुल/i,\n            /^अग/i,\n            /^सितं|सित/i,\n            /^अक्टू/i,\n            /^नव|नवं/i,\n            /^दिसं|दिस/i,\n        ],\n        shortMonthsParse = [\n            /^जन/i,\n            /^फ़र/i,\n            /^मार्च/i,\n            /^अप्रै/i,\n            /^मई/i,\n            /^जून/i,\n            /^जुल/i,\n            /^अग/i,\n            /^सित/i,\n            /^अक्टू/i,\n            /^नव/i,\n            /^दिस/i,\n        ];\n\n    var hi = moment.defineLocale('hi', {\n        months: {\n            format: 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split(\n                '_'\n            ),\n            standalone: 'जनवरी_फरवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितंबर_अक्टूबर_नवंबर_दिसंबर'.split(\n                '_'\n            ),\n        },\n        monthsShort: 'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split(\n            '_'\n        ),\n        weekdays: 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),\n        weekdaysShort: 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split('_'),\n        weekdaysMin: 'र_सो_मं_बु_गु_शु_श'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm बजे',\n            LTS: 'A h:mm:ss बजे',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm बजे',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm बजे',\n        },\n\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: shortMonthsParse,\n\n        monthsRegex: /^(जनवरी|जन\\.?|फ़रवरी|फरवरी|फ़र\\.?|मार्च?|अप्रैल|अप्रै\\.?|मई?|जून?|जुलाई|जुल\\.?|अगस्त|अग\\.?|सितम्बर|सितंबर|सित\\.?|अक्टूबर|अक्टू\\.?|नवम्बर|नवंबर|नव\\.?|दिसम्बर|दिसंबर|दिस\\.?)/i,\n\n        monthsShortRegex: /^(जनवरी|जन\\.?|फ़रवरी|फरवरी|फ़र\\.?|मार्च?|अप्रैल|अप्रै\\.?|मई?|जून?|जुलाई|जुल\\.?|अगस्त|अग\\.?|सितम्बर|सितंबर|सित\\.?|अक्टूबर|अक्टू\\.?|नवम्बर|नवंबर|नव\\.?|दिसम्बर|दिसंबर|दिस\\.?)/i,\n\n        monthsStrictRegex: /^(जनवरी?|फ़रवरी|फरवरी?|मार्च?|अप्रैल?|मई?|जून?|जुलाई?|अगस्त?|सितम्बर|सितंबर|सित?\\.?|अक्टूबर|अक्टू\\.?|नवम्बर|नवंबर?|दिसम्बर|दिसंबर?)/i,\n\n        monthsShortStrictRegex: /^(जन\\.?|फ़र\\.?|मार्च?|अप्रै\\.?|मई?|जून?|जुल\\.?|अग\\.?|सित\\.?|अक्टू\\.?|नव\\.?|दिस\\.?)/i,\n\n        calendar: {\n            sameDay: '[आज] LT',\n            nextDay: '[कल] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[कल] LT',\n            lastWeek: '[पिछले] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s में',\n            past: '%s पहले',\n            s: 'कुछ ही क्षण',\n            ss: '%d सेकंड',\n            m: 'एक मिनट',\n            mm: '%d मिनट',\n            h: 'एक घंटा',\n            hh: '%d घंटे',\n            d: 'एक दिन',\n            dd: '%d दिन',\n            M: 'एक महीने',\n            MM: '%d महीने',\n            y: 'एक वर्ष',\n            yy: '%d वर्ष',\n        },\n        preparse: function (string) {\n            return string.replace(/[१२३४५६७८९०]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        // Hindi notation for meridiems are quite fuzzy in practice. While there exists\n        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi.\n        meridiemParse: /रात|सुबह|दोपहर|शाम/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'रात') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'सुबह') {\n                return hour;\n            } else if (meridiem === 'दोपहर') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'शाम') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'रात';\n            } else if (hour < 10) {\n                return 'सुबह';\n            } else if (hour < 17) {\n                return 'दोपहर';\n            } else if (hour < 20) {\n                return 'शाम';\n            } else {\n                return 'रात';\n            }\n        },\n        week: {\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\n    return hi;\n\n})));\n","//! moment.js locale configuration\n//! locale : Croatian [hr]\n//! author : Bojan Marković : https://github.com/bmarkovic\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    function translate(number, withoutSuffix, key) {\n        var result = number + ' ';\n        switch (key) {\n            case 'ss':\n                if (number === 1) {\n                    result += 'sekunda';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'sekunde';\n                } else {\n                    result += 'sekundi';\n                }\n                return result;\n            case 'm':\n                return withoutSuffix ? 'jedna minuta' : 'jedne minute';\n            case 'mm':\n                if (number === 1) {\n                    result += 'minuta';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'minute';\n                } else {\n                    result += 'minuta';\n                }\n                return result;\n            case 'h':\n                return withoutSuffix ? 'jedan sat' : 'jednog sata';\n            case 'hh':\n                if (number === 1) {\n                    result += 'sat';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'sata';\n                } else {\n                    result += 'sati';\n                }\n                return result;\n            case 'dd':\n                if (number === 1) {\n                    result += 'dan';\n                } else {\n                    result += 'dana';\n                }\n                return result;\n            case 'MM':\n                if (number === 1) {\n                    result += 'mjesec';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'mjeseca';\n                } else {\n                    result += 'mjeseci';\n                }\n                return result;\n            case 'yy':\n                if (number === 1) {\n                    result += 'godina';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'godine';\n                } else {\n                    result += 'godina';\n                }\n                return result;\n        }\n    }\n\n    var hr = moment.defineLocale('hr', {\n        months: {\n            format: 'siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split(\n                '_'\n            ),\n            standalone: 'siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split(\n                '_'\n            ),\n        },\n        monthsShort: 'sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split(\n            '_'\n        ),\n        monthsParseExact: true,\n        weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split(\n            '_'\n        ),\n        weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'Do MMMM YYYY',\n            LLL: 'Do MMMM YYYY H:mm',\n            LLLL: 'dddd, Do MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[danas u] LT',\n            nextDay: '[sutra u] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[u] [nedjelju] [u] LT';\n                    case 3:\n                        return '[u] [srijedu] [u] LT';\n                    case 6:\n                        return '[u] [subotu] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[u] dddd [u] LT';\n                }\n            },\n            lastDay: '[jučer u] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[prošlu] [nedjelju] [u] LT';\n                    case 3:\n                        return '[prošlu] [srijedu] [u] LT';\n                    case 6:\n                        return '[prošle] [subote] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[prošli] dddd [u] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'za %s',\n            past: 'prije %s',\n            s: 'par sekundi',\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: translate,\n            hh: translate,\n            d: 'dan',\n            dd: translate,\n            M: 'mjesec',\n            MM: translate,\n            y: 'godinu',\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return hr;\n\n})));\n","//! moment.js locale configuration\n//! locale : Hungarian [hu]\n//! author : Adam Brunner : https://github.com/adambrunner\n//! author : Peter Viszt  : https://github.com/passatgt\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 weekEndings = 'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(\n        ' '\n    );\n    function translate(number, withoutSuffix, key, isFuture) {\n        var num = number;\n        switch (key) {\n            case 's':\n                return isFuture || withoutSuffix\n                    ? 'néhány másodperc'\n                    : 'néhány másodperce';\n            case 'ss':\n                return num + (isFuture || withoutSuffix)\n                    ? ' másodperc'\n                    : ' másodperce';\n            case 'm':\n                return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce');\n            case 'mm':\n                return num + (isFuture || withoutSuffix ? ' perc' : ' perce');\n            case 'h':\n                return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája');\n            case 'hh':\n                return num + (isFuture || withoutSuffix ? ' óra' : ' órája');\n            case 'd':\n                return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja');\n            case 'dd':\n                return num + (isFuture || withoutSuffix ? ' nap' : ' napja');\n            case 'M':\n                return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');\n            case 'MM':\n                return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');\n            case 'y':\n                return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve');\n            case 'yy':\n                return num + (isFuture || withoutSuffix ? ' év' : ' éve');\n        }\n        return '';\n    }\n    function week(isFuture) {\n        return (\n            (isFuture ? '' : '[múlt] ') +\n            '[' +\n            weekEndings[this.day()] +\n            '] LT[-kor]'\n        );\n    }\n\n    var hu = moment.defineLocale('hu', {\n        months: 'január_február_március_április_május_június_július_augusztus_szeptember_október_november_december'.split(\n            '_'\n        ),\n        monthsShort: 'jan._feb._márc._ápr._máj._jún._júl._aug._szept._okt._nov._dec.'.split(\n            '_'\n        ),\n        monthsParseExact: true,\n        weekdays: 'vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat'.split('_'),\n        weekdaysShort: 'vas_hét_kedd_sze_csüt_pén_szo'.split('_'),\n        weekdaysMin: 'v_h_k_sze_cs_p_szo'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'YYYY.MM.DD.',\n            LL: 'YYYY. MMMM D.',\n            LLL: 'YYYY. MMMM D. H:mm',\n            LLLL: 'YYYY. MMMM D., dddd H:mm',\n        },\n        meridiemParse: /de|du/i,\n        isPM: function (input) {\n            return input.charAt(1).toLowerCase() === 'u';\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 12) {\n                return isLower === true ? 'de' : 'DE';\n            } else {\n                return isLower === true ? 'du' : 'DU';\n            }\n        },\n        calendar: {\n            sameDay: '[ma] LT[-kor]',\n            nextDay: '[holnap] LT[-kor]',\n            nextWeek: function () {\n                return week.call(this, true);\n            },\n            lastDay: '[tegnap] LT[-kor]',\n            lastWeek: function () {\n                return week.call(this, false);\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s múlva',\n            past: '%s',\n            s: translate,\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: translate,\n            hh: translate,\n            d: translate,\n            dd: translate,\n            M: translate,\n            MM: translate,\n            y: translate,\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\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 hu;\n\n})));\n","//! moment.js locale configuration\n//! locale : Armenian [hy-am]\n//! author : Armendarabyan : https://github.com/armendarabyan\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 hyAm = moment.defineLocale('hy-am', {\n        months: {\n            format: 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split(\n                '_'\n            ),\n            standalone: 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split(\n                '_'\n            ),\n        },\n        monthsShort: 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'),\n        weekdays: 'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split(\n            '_'\n        ),\n        weekdaysShort: 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),\n        weekdaysMin: 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY թ.',\n            LLL: 'D MMMM YYYY թ., HH:mm',\n            LLLL: 'dddd, D MMMM YYYY թ., HH:mm',\n        },\n        calendar: {\n            sameDay: '[այսօր] LT',\n            nextDay: '[վաղը] LT',\n            lastDay: '[երեկ] LT',\n            nextWeek: function () {\n                return 'dddd [օրը ժամը] LT';\n            },\n            lastWeek: function () {\n                return '[անցած] dddd [օրը ժամը] LT';\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s հետո',\n            past: '%s առաջ',\n            s: 'մի քանի վայրկյան',\n            ss: '%d վայրկյան',\n            m: 'րոպե',\n            mm: '%d րոպե',\n            h: 'ժամ',\n            hh: '%d ժամ',\n            d: 'օր',\n            dd: '%d օր',\n            M: 'ամիս',\n            MM: '%d ամիս',\n            y: 'տարի',\n            yy: '%d տարի',\n        },\n        meridiemParse: /գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,\n        isPM: function (input) {\n            return /^(ցերեկվա|երեկոյան)$/.test(input);\n        },\n        meridiem: function (hour) {\n            if (hour < 4) {\n                return 'գիշերվա';\n            } else if (hour < 12) {\n                return 'առավոտվա';\n            } else if (hour < 17) {\n                return 'ցերեկվա';\n            } else {\n                return 'երեկոյան';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}|\\d{1,2}-(ին|րդ)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'DDD':\n                case 'w':\n                case 'W':\n                case 'DDDo':\n                    if (number === 1) {\n                        return number + '-ին';\n                    }\n                    return number + '-րդ';\n                default:\n                    return number;\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return hyAm;\n\n})));\n","//! moment.js locale configuration\n//! locale : Indonesian [id]\n//! author : Mohammad Satrio Utomo : https://github.com/tyok\n//! reference: http://id.wikisource.org/wiki/Pedoman_Umum_Ejaan_Bahasa_Indonesia_yang_Disempurnakan\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 id = moment.defineLocale('id', {\n        months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des'.split('_'),\n        weekdays: 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'),\n        weekdaysShort: 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'),\n        weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'),\n        longDateFormat: {\n            LT: 'HH.mm',\n            LTS: 'HH.mm.ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY [pukul] HH.mm',\n            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',\n        },\n        meridiemParse: /pagi|siang|sore|malam/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'pagi') {\n                return hour;\n            } else if (meridiem === 'siang') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'sore' || meridiem === 'malam') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'pagi';\n            } else if (hours < 15) {\n                return 'siang';\n            } else if (hours < 19) {\n                return 'sore';\n            } else {\n                return 'malam';\n            }\n        },\n        calendar: {\n            sameDay: '[Hari ini pukul] LT',\n            nextDay: '[Besok pukul] LT',\n            nextWeek: 'dddd [pukul] LT',\n            lastDay: '[Kemarin pukul] LT',\n            lastWeek: 'dddd [lalu pukul] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'dalam %s',\n            past: '%s yang lalu',\n            s: 'beberapa detik',\n            ss: '%d detik',\n            m: 'semenit',\n            mm: '%d menit',\n            h: 'sejam',\n            hh: '%d jam',\n            d: 'sehari',\n            dd: '%d hari',\n            M: 'sebulan',\n            MM: '%d bulan',\n            y: 'setahun',\n            yy: '%d tahun',\n        },\n        week: {\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\n    return id;\n\n})));\n","//! moment.js locale configuration\n//! locale : Icelandic [is]\n//! author : Hinrik Örn Sigurðsson : https://github.com/hinrik\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    function plural(n) {\n        if (n % 100 === 11) {\n            return true;\n        } else if (n % 10 === 1) {\n            return false;\n        }\n        return true;\n    }\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        switch (key) {\n            case 's':\n                return withoutSuffix || isFuture\n                    ? 'nokkrar sekúndur'\n                    : 'nokkrum sekúndum';\n            case 'ss':\n                if (plural(number)) {\n                    return (\n                        result +\n                        (withoutSuffix || isFuture ? 'sekúndur' : 'sekúndum')\n                    );\n                }\n                return result + 'sekúnda';\n            case 'm':\n                return withoutSuffix ? 'mínúta' : 'mínútu';\n            case 'mm':\n                if (plural(number)) {\n                    return (\n                        result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum')\n                    );\n                } else if (withoutSuffix) {\n                    return result + 'mínúta';\n                }\n                return result + 'mínútu';\n            case 'hh':\n                if (plural(number)) {\n                    return (\n                        result +\n                        (withoutSuffix || isFuture\n                            ? 'klukkustundir'\n                            : 'klukkustundum')\n                    );\n                }\n                return result + 'klukkustund';\n            case 'd':\n                if (withoutSuffix) {\n                    return 'dagur';\n                }\n                return isFuture ? 'dag' : 'degi';\n            case 'dd':\n                if (plural(number)) {\n                    if (withoutSuffix) {\n                        return result + 'dagar';\n                    }\n                    return result + (isFuture ? 'daga' : 'dögum');\n                } else if (withoutSuffix) {\n                    return result + 'dagur';\n                }\n                return result + (isFuture ? 'dag' : 'degi');\n            case 'M':\n                if (withoutSuffix) {\n                    return 'mánuður';\n                }\n                return isFuture ? 'mánuð' : 'mánuði';\n            case 'MM':\n                if (plural(number)) {\n                    if (withoutSuffix) {\n                        return result + 'mánuðir';\n                    }\n                    return result + (isFuture ? 'mánuði' : 'mánuðum');\n                } else if (withoutSuffix) {\n                    return result + 'mánuður';\n                }\n                return result + (isFuture ? 'mánuð' : 'mánuði');\n            case 'y':\n                return withoutSuffix || isFuture ? 'ár' : 'ári';\n            case 'yy':\n                if (plural(number)) {\n                    return result + (withoutSuffix || isFuture ? 'ár' : 'árum');\n                }\n                return result + (withoutSuffix || isFuture ? 'ár' : 'ári');\n        }\n    }\n\n    var is = moment.defineLocale('is', {\n        months: 'janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember'.split(\n            '_'\n        ),\n        monthsShort: 'jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des'.split('_'),\n        weekdays: 'sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur'.split(\n            '_'\n        ),\n        weekdaysShort: 'sun_mán_þri_mið_fim_fös_lau'.split('_'),\n        weekdaysMin: 'Su_Má_Þr_Mi_Fi_Fö_La'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY [kl.] H:mm',\n            LLLL: 'dddd, D. MMMM YYYY [kl.] H:mm',\n        },\n        calendar: {\n            sameDay: '[í dag kl.] LT',\n            nextDay: '[á morgun kl.] LT',\n            nextWeek: 'dddd [kl.] LT',\n            lastDay: '[í gær kl.] LT',\n            lastWeek: '[síðasta] dddd [kl.] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'eftir %s',\n            past: 'fyrir %s síðan',\n            s: translate,\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: 'klukkustund',\n            hh: translate,\n            d: translate,\n            dd: translate,\n            M: translate,\n            MM: translate,\n            y: translate,\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\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 is;\n\n})));\n","//! moment.js locale configuration\n//! locale : Italian [it]\n//! author : Lorenzo : https://github.com/aliem\n//! author: Mattia Larentis: https://github.com/nostalgiaz\n//! author: Marco : https://github.com/Manfre98\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 it = moment.defineLocale('it', {\n        months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split(\n            '_'\n        ),\n        monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),\n        weekdays: 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split(\n            '_'\n        ),\n        weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'),\n        weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: function () {\n                return (\n                    '[Oggi a' +\n                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : \"ll'\") +\n                    ']LT'\n                );\n            },\n            nextDay: function () {\n                return (\n                    '[Domani a' +\n                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : \"ll'\") +\n                    ']LT'\n                );\n            },\n            nextWeek: function () {\n                return (\n                    'dddd [a' +\n                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : \"ll'\") +\n                    ']LT'\n                );\n            },\n            lastDay: function () {\n                return (\n                    '[Ieri a' +\n                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : \"ll'\") +\n                    ']LT'\n                );\n            },\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return (\n                            '[La scorsa] dddd [a' +\n                            (this.hours() > 1\n                                ? 'lle '\n                                : this.hours() === 0\n                                ? ' '\n                                : \"ll'\") +\n                            ']LT'\n                        );\n                    default:\n                        return (\n                            '[Lo scorso] dddd [a' +\n                            (this.hours() > 1\n                                ? 'lle '\n                                : this.hours() === 0\n                                ? ' '\n                                : \"ll'\") +\n                            ']LT'\n                        );\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'tra %s',\n            past: '%s fa',\n            s: 'alcuni secondi',\n            ss: '%d secondi',\n            m: 'un minuto',\n            mm: '%d minuti',\n            h: \"un'ora\",\n            hh: '%d ore',\n            d: 'un giorno',\n            dd: '%d giorni',\n            w: 'una settimana',\n            ww: '%d settimane',\n            M: 'un mese',\n            MM: '%d mesi',\n            y: 'un anno',\n            yy: '%d anni',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\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 it;\n\n})));\n","//! moment.js locale configuration\n//! locale : Italian (Switzerland) [it-ch]\n//! author : xfh : https://github.com/xfh\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 itCh = moment.defineLocale('it-ch', {\n        months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split(\n            '_'\n        ),\n        monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),\n        weekdays: 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split(\n            '_'\n        ),\n        weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'),\n        weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Oggi alle] LT',\n            nextDay: '[Domani alle] LT',\n            nextWeek: 'dddd [alle] LT',\n            lastDay: '[Ieri alle] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[la scorsa] dddd [alle] LT';\n                    default:\n                        return '[lo scorso] dddd [alle] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: function (s) {\n                return (/^[0-9].+$/.test(s) ? 'tra' : 'in') + ' ' + s;\n            },\n            past: '%s fa',\n            s: 'alcuni secondi',\n            ss: '%d secondi',\n            m: 'un minuto',\n            mm: '%d minuti',\n            h: \"un'ora\",\n            hh: '%d ore',\n            d: 'un giorno',\n            dd: '%d giorni',\n            M: 'un mese',\n            MM: '%d mesi',\n            y: 'un anno',\n            yy: '%d anni',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\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 itCh;\n\n})));\n","//! moment.js locale configuration\n//! locale : Japanese [ja]\n//! author : LI Long : https://github.com/baryon\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 ja = moment.defineLocale('ja', {\n        eras: [\n            {\n                since: '2019-05-01',\n                offset: 1,\n                name: '令和',\n                narrow: '㋿',\n                abbr: 'R',\n            },\n            {\n                since: '1989-01-08',\n                until: '2019-04-30',\n                offset: 1,\n                name: '平成',\n                narrow: '㍻',\n                abbr: 'H',\n            },\n            {\n                since: '1926-12-25',\n                until: '1989-01-07',\n                offset: 1,\n                name: '昭和',\n                narrow: '㍼',\n                abbr: 'S',\n            },\n            {\n                since: '1912-07-30',\n                until: '1926-12-24',\n                offset: 1,\n                name: '大正',\n                narrow: '㍽',\n                abbr: 'T',\n            },\n            {\n                since: '1873-01-01',\n                until: '1912-07-29',\n                offset: 6,\n                name: '明治',\n                narrow: '㍾',\n                abbr: 'M',\n            },\n            {\n                since: '0001-01-01',\n                until: '1873-12-31',\n                offset: 1,\n                name: '西暦',\n                narrow: 'AD',\n                abbr: 'AD',\n            },\n            {\n                since: '0000-12-31',\n                until: -Infinity,\n                offset: 1,\n                name: '紀元前',\n                narrow: 'BC',\n                abbr: 'BC',\n            },\n        ],\n        eraYearOrdinalRegex: /(元|\\d+)年/,\n        eraYearOrdinalParse: function (input, match) {\n            return match[1] === '元' ? 1 : parseInt(match[1] || input, 10);\n        },\n        months: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n            '_'\n        ),\n        weekdays: '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'),\n        weekdaysShort: '日_月_火_水_木_金_土'.split('_'),\n        weekdaysMin: '日_月_火_水_木_金_土'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY/MM/DD',\n            LL: 'YYYY年M月D日',\n            LLL: 'YYYY年M月D日 HH:mm',\n            LLLL: 'YYYY年M月D日 dddd HH:mm',\n            l: 'YYYY/MM/DD',\n            ll: 'YYYY年M月D日',\n            lll: 'YYYY年M月D日 HH:mm',\n            llll: 'YYYY年M月D日(ddd) HH:mm',\n        },\n        meridiemParse: /午前|午後/i,\n        isPM: function (input) {\n            return input === '午後';\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return '午前';\n            } else {\n                return '午後';\n            }\n        },\n        calendar: {\n            sameDay: '[今日] LT',\n            nextDay: '[明日] LT',\n            nextWeek: function (now) {\n                if (now.week() !== this.week()) {\n                    return '[来週]dddd LT';\n                } else {\n                    return 'dddd LT';\n                }\n            },\n            lastDay: '[昨日] LT',\n            lastWeek: function (now) {\n                if (this.week() !== now.week()) {\n                    return '[先週]dddd LT';\n                } else {\n                    return 'dddd LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}日/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'y':\n                    return number === 1 ? '元年' : number + '年';\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '日';\n                default:\n                    return number;\n            }\n        },\n        relativeTime: {\n            future: '%s後',\n            past: '%s前',\n            s: '数秒',\n            ss: '%d秒',\n            m: '1分',\n            mm: '%d分',\n            h: '1時間',\n            hh: '%d時間',\n            d: '1日',\n            dd: '%d日',\n            M: '1ヶ月',\n            MM: '%dヶ月',\n            y: '1年',\n            yy: '%d年',\n        },\n    });\n\n    return ja;\n\n})));\n","//! moment.js locale configuration\n//! locale : Javanese [jv]\n//! author : Rony Lantip : https://github.com/lantip\n//! reference: http://jv.wikipedia.org/wiki/Basa_Jawa\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 jv = moment.defineLocale('jv', {\n        months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des'.split('_'),\n        weekdays: 'Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu'.split('_'),\n        weekdaysShort: 'Min_Sen_Sel_Reb_Kem_Jem_Sep'.split('_'),\n        weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sp'.split('_'),\n        longDateFormat: {\n            LT: 'HH.mm',\n            LTS: 'HH.mm.ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY [pukul] HH.mm',\n            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',\n        },\n        meridiemParse: /enjing|siyang|sonten|ndalu/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'enjing') {\n                return hour;\n            } else if (meridiem === 'siyang') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'sonten' || meridiem === 'ndalu') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'enjing';\n            } else if (hours < 15) {\n                return 'siyang';\n            } else if (hours < 19) {\n                return 'sonten';\n            } else {\n                return 'ndalu';\n            }\n        },\n        calendar: {\n            sameDay: '[Dinten puniko pukul] LT',\n            nextDay: '[Mbenjang pukul] LT',\n            nextWeek: 'dddd [pukul] LT',\n            lastDay: '[Kala wingi pukul] LT',\n            lastWeek: 'dddd [kepengker pukul] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'wonten ing %s',\n            past: '%s ingkang kepengker',\n            s: 'sawetawis detik',\n            ss: '%d detik',\n            m: 'setunggal menit',\n            mm: '%d menit',\n            h: 'setunggal jam',\n            hh: '%d jam',\n            d: 'sedinten',\n            dd: '%d dinten',\n            M: 'sewulan',\n            MM: '%d wulan',\n            y: 'setaun',\n            yy: '%d taun',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return jv;\n\n})));\n","//! moment.js locale configuration\n//! locale : Georgian [ka]\n//! author : Irakli Janiashvili : https://github.com/IrakliJani\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 ka = moment.defineLocale('ka', {\n        months: 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split(\n            '_'\n        ),\n        monthsShort: 'იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ'.split('_'),\n        weekdays: {\n            standalone: 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split(\n                '_'\n            ),\n            format: 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split(\n                '_'\n            ),\n            isFormat: /(წინა|შემდეგ)/,\n        },\n        weekdaysShort: 'კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ'.split('_'),\n        weekdaysMin: 'კვ_ორ_სა_ოთ_ხუ_პა_შა'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[დღეს] LT[-ზე]',\n            nextDay: '[ხვალ] LT[-ზე]',\n            lastDay: '[გუშინ] LT[-ზე]',\n            nextWeek: '[შემდეგ] dddd LT[-ზე]',\n            lastWeek: '[წინა] dddd LT-ზე',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: function (s) {\n                return s.replace(/(წამ|წუთ|საათ|წელ|დღ|თვ)(ი|ე)/, function (\n                    $0,\n                    $1,\n                    $2\n                ) {\n                    return $2 === 'ი' ? $1 + 'ში' : $1 + $2 + 'ში';\n                });\n            },\n            past: function (s) {\n                if (/(წამი|წუთი|საათი|დღე|თვე)/.test(s)) {\n                    return s.replace(/(ი|ე)$/, 'ის წინ');\n                }\n                if (/წელი/.test(s)) {\n                    return s.replace(/წელი$/, 'წლის წინ');\n                }\n                return s;\n            },\n            s: 'რამდენიმე წამი',\n            ss: '%d წამი',\n            m: 'წუთი',\n            mm: '%d წუთი',\n            h: 'საათი',\n            hh: '%d საათი',\n            d: 'დღე',\n            dd: '%d დღე',\n            M: 'თვე',\n            MM: '%d თვე',\n            y: 'წელი',\n            yy: '%d წელი',\n        },\n        dayOfMonthOrdinalParse: /0|1-ლი|მე-\\d{1,2}|\\d{1,2}-ე/,\n        ordinal: function (number) {\n            if (number === 0) {\n                return number;\n            }\n            if (number === 1) {\n                return number + '-ლი';\n            }\n            if (\n                number < 20 ||\n                (number <= 100 && number % 20 === 0) ||\n                number % 100 === 0\n            ) {\n                return 'მე-' + number;\n            }\n            return number + '-ე';\n        },\n        week: {\n            dow: 1,\n            doy: 7,\n        },\n    });\n\n    return ka;\n\n})));\n","//! moment.js locale configuration\n//! locale : Kazakh [kk]\n//! authors : Nurlan Rakhimzhanov : https://github.com/nurlan\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 suffixes = {\n        0: '-ші',\n        1: '-ші',\n        2: '-ші',\n        3: '-ші',\n        4: '-ші',\n        5: '-ші',\n        6: '-шы',\n        7: '-ші',\n        8: '-ші',\n        9: '-шы',\n        10: '-шы',\n        20: '-шы',\n        30: '-шы',\n        40: '-шы',\n        50: '-ші',\n        60: '-шы',\n        70: '-ші',\n        80: '-ші',\n        90: '-шы',\n        100: '-ші',\n    };\n\n    var kk = moment.defineLocale('kk', {\n        months: 'қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан'.split(\n            '_'\n        ),\n        monthsShort: 'қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел'.split('_'),\n        weekdays: 'жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі'.split(\n            '_'\n        ),\n        weekdaysShort: 'жек_дүй_сей_сәр_бей_жұм_сен'.split('_'),\n        weekdaysMin: 'жк_дй_сй_ср_бй_жм_сн'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Бүгін сағат] LT',\n            nextDay: '[Ертең сағат] LT',\n            nextWeek: 'dddd [сағат] LT',\n            lastDay: '[Кеше сағат] LT',\n            lastWeek: '[Өткен аптаның] dddd [сағат] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s ішінде',\n            past: '%s бұрын',\n            s: 'бірнеше секунд',\n            ss: '%d секунд',\n            m: 'бір минут',\n            mm: '%d минут',\n            h: 'бір сағат',\n            hh: '%d сағат',\n            d: 'бір күн',\n            dd: '%d күн',\n            M: 'бір ай',\n            MM: '%d ай',\n            y: 'бір жыл',\n            yy: '%d жыл',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ші|шы)/,\n        ordinal: function (number) {\n            var a = number % 10,\n                b = number >= 100 ? 100 : null;\n            return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return kk;\n\n})));\n","//! moment.js locale configuration\n//! locale : Cambodian [km]\n//! author : Kruy Vanna : https://github.com/kruyvanna\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 symbolMap = {\n            1: '១',\n            2: '២',\n            3: '៣',\n            4: '៤',\n            5: '៥',\n            6: '៦',\n            7: '៧',\n            8: '៨',\n            9: '៩',\n            0: '០',\n        },\n        numberMap = {\n            '១': '1',\n            '២': '2',\n            '៣': '3',\n            '៤': '4',\n            '៥': '5',\n            '៦': '6',\n            '៧': '7',\n            '៨': '8',\n            '៩': '9',\n            '០': '0',\n        };\n\n    var km = moment.defineLocale('km', {\n        months: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split(\n            '_'\n        ),\n        monthsShort: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split(\n            '_'\n        ),\n        weekdays: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),\n        weekdaysShort: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),\n        weekdaysMin: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /ព្រឹក|ល្ងាច/,\n        isPM: function (input) {\n            return input === 'ល្ងាច';\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ព្រឹក';\n            } else {\n                return 'ល្ងាច';\n            }\n        },\n        calendar: {\n            sameDay: '[ថ្ងៃនេះ ម៉ោង] LT',\n            nextDay: '[ស្អែក ម៉ោង] LT',\n            nextWeek: 'dddd [ម៉ោង] LT',\n            lastDay: '[ម្សិលមិញ ម៉ោង] LT',\n            lastWeek: 'dddd [សប្តាហ៍មុន] [ម៉ោង] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%sទៀត',\n            past: '%sមុន',\n            s: 'ប៉ុន្មានវិនាទី',\n            ss: '%d វិនាទី',\n            m: 'មួយនាទី',\n            mm: '%d នាទី',\n            h: 'មួយម៉ោង',\n            hh: '%d ម៉ោង',\n            d: 'មួយថ្ងៃ',\n            dd: '%d ថ្ងៃ',\n            M: 'មួយខែ',\n            MM: '%d ខែ',\n            y: 'មួយឆ្នាំ',\n            yy: '%d ឆ្នាំ',\n        },\n        dayOfMonthOrdinalParse: /ទី\\d{1,2}/,\n        ordinal: 'ទី%d',\n        preparse: function (string) {\n            return string.replace(/[១២៣៤៥៦៧៨៩០]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\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 km;\n\n})));\n","//! moment.js locale configuration\n//! locale : Kannada [kn]\n//! author : Rajeev Naik : https://github.com/rajeevnaikte\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 symbolMap = {\n            1: '೧',\n            2: '೨',\n            3: '೩',\n            4: '೪',\n            5: '೫',\n            6: '೬',\n            7: '೭',\n            8: '೮',\n            9: '೯',\n            0: '೦',\n        },\n        numberMap = {\n            '೧': '1',\n            '೨': '2',\n            '೩': '3',\n            '೪': '4',\n            '೫': '5',\n            '೬': '6',\n            '೭': '7',\n            '೮': '8',\n            '೯': '9',\n            '೦': '0',\n        };\n\n    var kn = moment.defineLocale('kn', {\n        months: 'ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್'.split(\n            '_'\n        ),\n        monthsShort: 'ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂ_ಅಕ್ಟೋ_ನವೆಂ_ಡಿಸೆಂ'.split(\n            '_'\n        ),\n        monthsParseExact: true,\n        weekdays: 'ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ'.split(\n            '_'\n        ),\n        weekdaysShort: 'ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ'.split('_'),\n        weekdaysMin: 'ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm',\n            LTS: 'A h:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm',\n        },\n        calendar: {\n            sameDay: '[ಇಂದು] LT',\n            nextDay: '[ನಾಳೆ] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[ನಿನ್ನೆ] LT',\n            lastWeek: '[ಕೊನೆಯ] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s ನಂತರ',\n            past: '%s ಹಿಂದೆ',\n            s: 'ಕೆಲವು ಕ್ಷಣಗಳು',\n            ss: '%d ಸೆಕೆಂಡುಗಳು',\n            m: 'ಒಂದು ನಿಮಿಷ',\n            mm: '%d ನಿಮಿಷ',\n            h: 'ಒಂದು ಗಂಟೆ',\n            hh: '%d ಗಂಟೆ',\n            d: 'ಒಂದು ದಿನ',\n            dd: '%d ದಿನ',\n            M: 'ಒಂದು ತಿಂಗಳು',\n            MM: '%d ತಿಂಗಳು',\n            y: 'ಒಂದು ವರ್ಷ',\n            yy: '%d ವರ್ಷ',\n        },\n        preparse: function (string) {\n            return string.replace(/[೧೨೩೪೫೬೭೮೯೦]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'ರಾತ್ರಿ') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'ಬೆಳಿಗ್ಗೆ') {\n                return hour;\n            } else if (meridiem === 'ಮಧ್ಯಾಹ್ನ') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'ಸಂಜೆ') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ರಾತ್ರಿ';\n            } else if (hour < 10) {\n                return 'ಬೆಳಿಗ್ಗೆ';\n            } else if (hour < 17) {\n                return 'ಮಧ್ಯಾಹ್ನ';\n            } else if (hour < 20) {\n                return 'ಸಂಜೆ';\n            } else {\n                return 'ರಾತ್ರಿ';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ನೇ)/,\n        ordinal: function (number) {\n            return number + 'ನೇ';\n        },\n        week: {\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\n    return kn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Korean [ko]\n//! author : Kyungwook, Park : https://github.com/kyungw00k\n//! author : Jeeeyul Lee <jeeeyul@gmail.com>\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 ko = moment.defineLocale('ko', {\n        months: '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),\n        monthsShort: '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split(\n            '_'\n        ),\n        weekdays: '일요일_월요일_화요일_수요일_목요일_금요일_토요일'.split('_'),\n        weekdaysShort: '일_월_화_수_목_금_토'.split('_'),\n        weekdaysMin: '일_월_화_수_목_금_토'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm',\n            LTS: 'A h:mm:ss',\n            L: 'YYYY.MM.DD.',\n            LL: 'YYYY년 MMMM D일',\n            LLL: 'YYYY년 MMMM D일 A h:mm',\n            LLLL: 'YYYY년 MMMM D일 dddd A h:mm',\n            l: 'YYYY.MM.DD.',\n            ll: 'YYYY년 MMMM D일',\n            lll: 'YYYY년 MMMM D일 A h:mm',\n            llll: 'YYYY년 MMMM D일 dddd A h:mm',\n        },\n        calendar: {\n            sameDay: '오늘 LT',\n            nextDay: '내일 LT',\n            nextWeek: 'dddd LT',\n            lastDay: '어제 LT',\n            lastWeek: '지난주 dddd LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s 후',\n            past: '%s 전',\n            s: '몇 초',\n            ss: '%d초',\n            m: '1분',\n            mm: '%d분',\n            h: '한 시간',\n            hh: '%d시간',\n            d: '하루',\n            dd: '%d일',\n            M: '한 달',\n            MM: '%d달',\n            y: '일 년',\n            yy: '%d년',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(일|월|주)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '일';\n                case 'M':\n                    return number + '월';\n                case 'w':\n                case 'W':\n                    return number + '주';\n                default:\n                    return number;\n            }\n        },\n        meridiemParse: /오전|오후/,\n        isPM: function (token) {\n            return token === '오후';\n        },\n        meridiem: function (hour, minute, isUpper) {\n            return hour < 12 ? '오전' : '오후';\n        },\n    });\n\n    return ko;\n\n})));\n","//! moment.js locale configuration\n//! locale : Kurdish [ku]\n//! author : Shahram Mebashar : https://github.com/ShahramMebashar\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 symbolMap = {\n            1: '١',\n            2: '٢',\n            3: '٣',\n            4: '٤',\n            5: '٥',\n            6: '٦',\n            7: '٧',\n            8: '٨',\n            9: '٩',\n            0: '٠',\n        },\n        numberMap = {\n            '١': '1',\n            '٢': '2',\n            '٣': '3',\n            '٤': '4',\n            '٥': '5',\n            '٦': '6',\n            '٧': '7',\n            '٨': '8',\n            '٩': '9',\n            '٠': '0',\n        },\n        months = [\n            'کانونی دووەم',\n            'شوبات',\n            'ئازار',\n            'نیسان',\n            'ئایار',\n            'حوزەیران',\n            'تەمموز',\n            'ئاب',\n            'ئەیلوول',\n            'تشرینی یەكەم',\n            'تشرینی دووەم',\n            'كانونی یەکەم',\n        ];\n\n    var ku = moment.defineLocale('ku', {\n        months: months,\n        monthsShort: months,\n        weekdays: 'یه‌كشه‌ممه‌_دووشه‌ممه‌_سێشه‌ممه‌_چوارشه‌ممه‌_پێنجشه‌ممه‌_هه‌ینی_شه‌ممه‌'.split(\n            '_'\n        ),\n        weekdaysShort: 'یه‌كشه‌م_دووشه‌م_سێشه‌م_چوارشه‌م_پێنجشه‌م_هه‌ینی_شه‌ممه‌'.split(\n            '_'\n        ),\n        weekdaysMin: 'ی_د_س_چ_پ_ه_ش'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /ئێواره‌|به‌یانی/,\n        isPM: function (input) {\n            return /ئێواره‌/.test(input);\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'به‌یانی';\n            } else {\n                return 'ئێواره‌';\n            }\n        },\n        calendar: {\n            sameDay: '[ئه‌مرۆ كاتژمێر] LT',\n            nextDay: '[به‌یانی كاتژمێر] LT',\n            nextWeek: 'dddd [كاتژمێر] LT',\n            lastDay: '[دوێنێ كاتژمێر] LT',\n            lastWeek: 'dddd [كاتژمێر] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'له‌ %s',\n            past: '%s',\n            s: 'چه‌ند چركه‌یه‌ك',\n            ss: 'چركه‌ %d',\n            m: 'یه‌ك خوله‌ك',\n            mm: '%d خوله‌ك',\n            h: 'یه‌ك كاتژمێر',\n            hh: '%d كاتژمێر',\n            d: 'یه‌ك ڕۆژ',\n            dd: '%d ڕۆژ',\n            M: 'یه‌ك مانگ',\n            MM: '%d مانگ',\n            y: 'یه‌ك ساڵ',\n            yy: '%d ساڵ',\n        },\n        preparse: function (string) {\n            return string\n                .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n                    return numberMap[match];\n                })\n                .replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string\n                .replace(/\\d/g, function (match) {\n                    return symbolMap[match];\n                })\n                .replace(/,/g, '،');\n        },\n        week: {\n            dow: 6, // Saturday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    return ku;\n\n})));\n","//! moment.js locale configuration\n//! locale : Kyrgyz [ky]\n//! author : Chyngyz Arystan uulu : https://github.com/chyngyz\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 suffixes = {\n        0: '-чү',\n        1: '-чи',\n        2: '-чи',\n        3: '-чү',\n        4: '-чү',\n        5: '-чи',\n        6: '-чы',\n        7: '-чи',\n        8: '-чи',\n        9: '-чу',\n        10: '-чу',\n        20: '-чы',\n        30: '-чу',\n        40: '-чы',\n        50: '-чү',\n        60: '-чы',\n        70: '-чи',\n        80: '-чи',\n        90: '-чу',\n        100: '-чү',\n    };\n\n    var ky = moment.defineLocale('ky', {\n        months: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split(\n            '_'\n        ),\n        monthsShort: 'янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split(\n            '_'\n        ),\n        weekdays: 'Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби'.split(\n            '_'\n        ),\n        weekdaysShort: 'Жек_Дүй_Шей_Шар_Бей_Жум_Ише'.split('_'),\n        weekdaysMin: 'Жк_Дй_Шй_Шр_Бй_Жм_Иш'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Бүгүн саат] LT',\n            nextDay: '[Эртең саат] LT',\n            nextWeek: 'dddd [саат] LT',\n            lastDay: '[Кечээ саат] LT',\n            lastWeek: '[Өткөн аптанын] dddd [күнү] [саат] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s ичинде',\n            past: '%s мурун',\n            s: 'бирнече секунд',\n            ss: '%d секунд',\n            m: 'бир мүнөт',\n            mm: '%d мүнөт',\n            h: 'бир саат',\n            hh: '%d саат',\n            d: 'бир күн',\n            dd: '%d күн',\n            M: 'бир ай',\n            MM: '%d ай',\n            y: 'бир жыл',\n            yy: '%d жыл',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(чи|чы|чү|чу)/,\n        ordinal: function (number) {\n            var a = number % 10,\n                b = number >= 100 ? 100 : null;\n            return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return ky;\n\n})));\n","//! moment.js locale configuration\n//! locale : Luxembourgish [lb]\n//! author : mweimerskirch : https://github.com/mweimerskirch\n//! author : David Raison : https://github.com/kwisatz\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    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            m: ['eng Minutt', 'enger Minutt'],\n            h: ['eng Stonn', 'enger Stonn'],\n            d: ['een Dag', 'engem Dag'],\n            M: ['ee Mount', 'engem Mount'],\n            y: ['ee Joer', 'engem Joer'],\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n    function processFutureTime(string) {\n        var number = string.substr(0, string.indexOf(' '));\n        if (eifelerRegelAppliesToNumber(number)) {\n            return 'a ' + string;\n        }\n        return 'an ' + string;\n    }\n    function processPastTime(string) {\n        var number = string.substr(0, string.indexOf(' '));\n        if (eifelerRegelAppliesToNumber(number)) {\n            return 'viru ' + string;\n        }\n        return 'virun ' + string;\n    }\n    /**\n     * Returns true if the word before the given number loses the '-n' ending.\n     * e.g. 'an 10 Deeg' but 'a 5 Deeg'\n     *\n     * @param number {integer}\n     * @returns {boolean}\n     */\n    function eifelerRegelAppliesToNumber(number) {\n        number = parseInt(number, 10);\n        if (isNaN(number)) {\n            return false;\n        }\n        if (number < 0) {\n            // Negative Number --> always true\n            return true;\n        } else if (number < 10) {\n            // Only 1 digit\n            if (4 <= number && number <= 7) {\n                return true;\n            }\n            return false;\n        } else if (number < 100) {\n            // 2 digits\n            var lastDigit = number % 10,\n                firstDigit = number / 10;\n            if (lastDigit === 0) {\n                return eifelerRegelAppliesToNumber(firstDigit);\n            }\n            return eifelerRegelAppliesToNumber(lastDigit);\n        } else if (number < 10000) {\n            // 3 or 4 digits --> recursively check first digit\n            while (number >= 10) {\n                number = number / 10;\n            }\n            return eifelerRegelAppliesToNumber(number);\n        } else {\n            // Anything larger than 4 digits: recursively check first n-3 digits\n            number = number / 1000;\n            return eifelerRegelAppliesToNumber(number);\n        }\n    }\n\n    var lb = moment.defineLocale('lb', {\n        months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split(\n            '_'\n        ),\n        monthsShort: 'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split(\n            '_'\n        ),\n        monthsParseExact: true,\n        weekdays: 'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split(\n            '_'\n        ),\n        weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'),\n        weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm [Auer]',\n            LTS: 'H:mm:ss [Auer]',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm [Auer]',\n            LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]',\n        },\n        calendar: {\n            sameDay: '[Haut um] LT',\n            sameElse: 'L',\n            nextDay: '[Muer um] LT',\n            nextWeek: 'dddd [um] LT',\n            lastDay: '[Gëschter um] LT',\n            lastWeek: function () {\n                // Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule\n                switch (this.day()) {\n                    case 2:\n                    case 4:\n                        return '[Leschten] dddd [um] LT';\n                    default:\n                        return '[Leschte] dddd [um] LT';\n                }\n            },\n        },\n        relativeTime: {\n            future: processFutureTime,\n            past: processPastTime,\n            s: 'e puer Sekonnen',\n            ss: '%d Sekonnen',\n            m: processRelativeTime,\n            mm: '%d Minutten',\n            h: processRelativeTime,\n            hh: '%d Stonnen',\n            d: processRelativeTime,\n            dd: '%d Deeg',\n            M: processRelativeTime,\n            MM: '%d Méint',\n            y: processRelativeTime,\n            yy: '%d Joer',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\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 lb;\n\n})));\n","//! moment.js locale configuration\n//! locale : Lao [lo]\n//! author : Ryan Hart : https://github.com/ryanhart2\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 lo = moment.defineLocale('lo', {\n        months: 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split(\n            '_'\n        ),\n        monthsShort: 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split(\n            '_'\n        ),\n        weekdays: 'ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),\n        weekdaysShort: 'ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),\n        weekdaysMin: 'ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'ວັນdddd D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /ຕອນເຊົ້າ|ຕອນແລງ/,\n        isPM: function (input) {\n            return input === 'ຕອນແລງ';\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ຕອນເຊົ້າ';\n            } else {\n                return 'ຕອນແລງ';\n            }\n        },\n        calendar: {\n            sameDay: '[ມື້ນີ້ເວລາ] LT',\n            nextDay: '[ມື້ອື່ນເວລາ] LT',\n            nextWeek: '[ວັນ]dddd[ໜ້າເວລາ] LT',\n            lastDay: '[ມື້ວານນີ້ເວລາ] LT',\n            lastWeek: '[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'ອີກ %s',\n            past: '%sຜ່ານມາ',\n            s: 'ບໍ່ເທົ່າໃດວິນາທີ',\n            ss: '%d ວິນາທີ',\n            m: '1 ນາທີ',\n            mm: '%d ນາທີ',\n            h: '1 ຊົ່ວໂມງ',\n            hh: '%d ຊົ່ວໂມງ',\n            d: '1 ມື້',\n            dd: '%d ມື້',\n            M: '1 ເດືອນ',\n            MM: '%d ເດືອນ',\n            y: '1 ປີ',\n            yy: '%d ປີ',\n        },\n        dayOfMonthOrdinalParse: /(ທີ່)\\d{1,2}/,\n        ordinal: function (number) {\n            return 'ທີ່' + number;\n        },\n    });\n\n    return lo;\n\n})));\n","//! moment.js locale configuration\n//! locale : Lithuanian [lt]\n//! author : Mindaugas Mozūras : https://github.com/mmozuras\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 units = {\n        ss: 'sekundė_sekundžių_sekundes',\n        m: 'minutė_minutės_minutę',\n        mm: 'minutės_minučių_minutes',\n        h: 'valanda_valandos_valandą',\n        hh: 'valandos_valandų_valandas',\n        d: 'diena_dienos_dieną',\n        dd: 'dienos_dienų_dienas',\n        M: 'mėnuo_mėnesio_mėnesį',\n        MM: 'mėnesiai_mėnesių_mėnesius',\n        y: 'metai_metų_metus',\n        yy: 'metai_metų_metus',\n    };\n    function translateSeconds(number, withoutSuffix, key, isFuture) {\n        if (withoutSuffix) {\n            return 'kelios sekundės';\n        } else {\n            return isFuture ? 'kelių sekundžių' : 'kelias sekundes';\n        }\n    }\n    function translateSingular(number, withoutSuffix, key, isFuture) {\n        return withoutSuffix\n            ? forms(key)[0]\n            : isFuture\n            ? forms(key)[1]\n            : forms(key)[2];\n    }\n    function special(number) {\n        return number % 10 === 0 || (number > 10 && number < 20);\n    }\n    function forms(key) {\n        return units[key].split('_');\n    }\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        if (number === 1) {\n            return (\n                result + translateSingular(number, withoutSuffix, key[0], isFuture)\n            );\n        } else if (withoutSuffix) {\n            return result + (special(number) ? forms(key)[1] : forms(key)[0]);\n        } else {\n            if (isFuture) {\n                return result + forms(key)[1];\n            } else {\n                return result + (special(number) ? forms(key)[1] : forms(key)[2]);\n            }\n        }\n    }\n    var lt = moment.defineLocale('lt', {\n        months: {\n            format: 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split(\n                '_'\n            ),\n            standalone: 'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split(\n                '_'\n            ),\n            isFormat: /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?|MMMM?(\\[[^\\[\\]]*\\]|\\s)+D[oD]?/,\n        },\n        monthsShort: 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'),\n        weekdays: {\n            format: 'sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį'.split(\n                '_'\n            ),\n            standalone: 'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split(\n                '_'\n            ),\n            isFormat: /dddd HH:mm/,\n        },\n        weekdaysShort: 'Sek_Pir_Ant_Tre_Ket_Pen_Šeš'.split('_'),\n        weekdaysMin: 'S_P_A_T_K_Pn_Š'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: 'YYYY [m.] MMMM D [d.]',\n            LLL: 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n            LLLL: 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]',\n            l: 'YYYY-MM-DD',\n            ll: 'YYYY [m.] MMMM D [d.]',\n            lll: 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n            llll: 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]',\n        },\n        calendar: {\n            sameDay: '[Šiandien] LT',\n            nextDay: '[Rytoj] LT',\n            nextWeek: 'dddd LT',\n            lastDay: '[Vakar] LT',\n            lastWeek: '[Praėjusį] dddd LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'po %s',\n            past: 'prieš %s',\n            s: translateSeconds,\n            ss: translate,\n            m: translateSingular,\n            mm: translate,\n            h: translateSingular,\n            hh: translate,\n            d: translateSingular,\n            dd: translate,\n            M: translateSingular,\n            MM: translate,\n            y: translateSingular,\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-oji/,\n        ordinal: function (number) {\n            return number + '-oji';\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 lt;\n\n})));\n","//! moment.js locale configuration\n//! locale : Latvian [lv]\n//! author : Kristaps Karlsons : https://github.com/skakri\n//! author : Jānis Elmeris : https://github.com/JanisE\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 units = {\n        ss: 'sekundes_sekundēm_sekunde_sekundes'.split('_'),\n        m: 'minūtes_minūtēm_minūte_minūtes'.split('_'),\n        mm: 'minūtes_minūtēm_minūte_minūtes'.split('_'),\n        h: 'stundas_stundām_stunda_stundas'.split('_'),\n        hh: 'stundas_stundām_stunda_stundas'.split('_'),\n        d: 'dienas_dienām_diena_dienas'.split('_'),\n        dd: 'dienas_dienām_diena_dienas'.split('_'),\n        M: 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),\n        MM: 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),\n        y: 'gada_gadiem_gads_gadi'.split('_'),\n        yy: 'gada_gadiem_gads_gadi'.split('_'),\n    };\n    /**\n     * @param withoutSuffix boolean true = a length of time; false = before/after a period of time.\n     */\n    function format(forms, number, withoutSuffix) {\n        if (withoutSuffix) {\n            // E.g. \"21 minūte\", \"3 minūtes\".\n            return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3];\n        } else {\n            // E.g. \"21 minūtes\" as in \"pēc 21 minūtes\".\n            // E.g. \"3 minūtēm\" as in \"pēc 3 minūtēm\".\n            return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1];\n        }\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        return number + ' ' + format(units[key], number, withoutSuffix);\n    }\n    function relativeTimeWithSingular(number, withoutSuffix, key) {\n        return format(units[key], number, withoutSuffix);\n    }\n    function relativeSeconds(number, withoutSuffix) {\n        return withoutSuffix ? 'dažas sekundes' : 'dažām sekundēm';\n    }\n\n    var lv = moment.defineLocale('lv', {\n        months: 'janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris'.split(\n            '_'\n        ),\n        monthsShort: 'jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec'.split('_'),\n        weekdays: 'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sv_P_O_T_C_Pk_S'.split('_'),\n        weekdaysMin: 'Sv_P_O_T_C_Pk_S'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY.',\n            LL: 'YYYY. [gada] D. MMMM',\n            LLL: 'YYYY. [gada] D. MMMM, HH:mm',\n            LLLL: 'YYYY. [gada] D. MMMM, dddd, HH:mm',\n        },\n        calendar: {\n            sameDay: '[Šodien pulksten] LT',\n            nextDay: '[Rīt pulksten] LT',\n            nextWeek: 'dddd [pulksten] LT',\n            lastDay: '[Vakar pulksten] LT',\n            lastWeek: '[Pagājušā] dddd [pulksten] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'pēc %s',\n            past: 'pirms %s',\n            s: relativeSeconds,\n            ss: relativeTimeWithPlural,\n            m: relativeTimeWithSingular,\n            mm: relativeTimeWithPlural,\n            h: relativeTimeWithSingular,\n            hh: relativeTimeWithPlural,\n            d: relativeTimeWithSingular,\n            dd: relativeTimeWithPlural,\n            M: relativeTimeWithSingular,\n            MM: relativeTimeWithPlural,\n            y: relativeTimeWithSingular,\n            yy: relativeTimeWithPlural,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\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 lv;\n\n})));\n","//! moment.js locale configuration\n//! locale : Montenegrin [me]\n//! author : Miodrag Nikač <miodrag@restartit.me> : https://github.com/miodragnikac\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 translator = {\n        words: {\n            //Different grammatical cases\n            ss: ['sekund', 'sekunda', 'sekundi'],\n            m: ['jedan minut', 'jednog minuta'],\n            mm: ['minut', 'minuta', 'minuta'],\n            h: ['jedan sat', 'jednog sata'],\n            hh: ['sat', 'sata', 'sati'],\n            dd: ['dan', 'dana', 'dana'],\n            MM: ['mjesec', 'mjeseca', 'mjeseci'],\n            yy: ['godina', 'godine', 'godina'],\n        },\n        correctGrammaticalCase: function (number, wordKey) {\n            return number === 1\n                ? wordKey[0]\n                : number >= 2 && number <= 4\n                ? wordKey[1]\n                : wordKey[2];\n        },\n        translate: function (number, withoutSuffix, key) {\n            var wordKey = translator.words[key];\n            if (key.length === 1) {\n                return withoutSuffix ? wordKey[0] : wordKey[1];\n            } else {\n                return (\n                    number +\n                    ' ' +\n                    translator.correctGrammaticalCase(number, wordKey)\n                );\n            }\n        },\n    };\n\n    var me = moment.defineLocale('me', {\n        months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split(\n            '_'\n        ),\n        monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split(\n            '_'\n        ),\n        monthsParseExact: true,\n        weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split(\n            '_'\n        ),\n        weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd, D. MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[danas u] LT',\n            nextDay: '[sjutra u] LT',\n\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[u] [nedjelju] [u] LT';\n                    case 3:\n                        return '[u] [srijedu] [u] LT';\n                    case 6:\n                        return '[u] [subotu] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[u] dddd [u] LT';\n                }\n            },\n            lastDay: '[juče u] LT',\n            lastWeek: function () {\n                var lastWeekDays = [\n                    '[prošle] [nedjelje] [u] LT',\n                    '[prošlog] [ponedjeljka] [u] LT',\n                    '[prošlog] [utorka] [u] LT',\n                    '[prošle] [srijede] [u] LT',\n                    '[prošlog] [četvrtka] [u] LT',\n                    '[prošlog] [petka] [u] LT',\n                    '[prošle] [subote] [u] LT',\n                ];\n                return lastWeekDays[this.day()];\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'za %s',\n            past: 'prije %s',\n            s: 'nekoliko sekundi',\n            ss: translator.translate,\n            m: translator.translate,\n            mm: translator.translate,\n            h: translator.translate,\n            hh: translator.translate,\n            d: 'dan',\n            dd: translator.translate,\n            M: 'mjesec',\n            MM: translator.translate,\n            y: 'godinu',\n            yy: translator.translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return me;\n\n})));\n","//! moment.js locale configuration\n//! locale : Maori [mi]\n//! author : John Corrigan <robbiecloset@gmail.com> : https://github.com/johnideal\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 mi = moment.defineLocale('mi', {\n        months: 'Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea'.split(\n            '_'\n        ),\n        monthsShort: 'Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split(\n            '_'\n        ),\n        monthsRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n        monthsStrictRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n        monthsShortRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n        monthsShortStrictRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,2}/i,\n        weekdays: 'Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei'.split('_'),\n        weekdaysShort: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),\n        weekdaysMin: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY [i] HH:mm',\n            LLLL: 'dddd, D MMMM YYYY [i] HH:mm',\n        },\n        calendar: {\n            sameDay: '[i teie mahana, i] LT',\n            nextDay: '[apopo i] LT',\n            nextWeek: 'dddd [i] LT',\n            lastDay: '[inanahi i] LT',\n            lastWeek: 'dddd [whakamutunga i] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'i roto i %s',\n            past: '%s i mua',\n            s: 'te hēkona ruarua',\n            ss: '%d hēkona',\n            m: 'he meneti',\n            mm: '%d meneti',\n            h: 'te haora',\n            hh: '%d haora',\n            d: 'he ra',\n            dd: '%d ra',\n            M: 'he marama',\n            MM: '%d marama',\n            y: 'he tau',\n            yy: '%d tau',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\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 mi;\n\n})));\n","//! moment.js locale configuration\n//! locale : Macedonian [mk]\n//! author : Borislav Mickov : https://github.com/B0k0\n//! author : Sashko Todorov : https://github.com/bkyceh\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 mk = moment.defineLocale('mk', {\n        months: 'јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември'.split(\n            '_'\n        ),\n        monthsShort: 'јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек'.split('_'),\n        weekdays: 'недела_понеделник_вторник_среда_четврток_петок_сабота'.split(\n            '_'\n        ),\n        weekdaysShort: 'нед_пон_вто_сре_чет_пет_саб'.split('_'),\n        weekdaysMin: 'нe_пo_вт_ср_че_пе_сa'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'D.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY H:mm',\n            LLLL: 'dddd, D MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[Денес во] LT',\n            nextDay: '[Утре во] LT',\n            nextWeek: '[Во] dddd [во] LT',\n            lastDay: '[Вчера во] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 6:\n                        return '[Изминатата] dddd [во] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[Изминатиот] dddd [во] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'за %s',\n            past: 'пред %s',\n            s: 'неколку секунди',\n            ss: '%d секунди',\n            m: 'една минута',\n            mm: '%d минути',\n            h: 'еден час',\n            hh: '%d часа',\n            d: 'еден ден',\n            dd: '%d дена',\n            M: 'еден месец',\n            MM: '%d месеци',\n            y: 'една година',\n            yy: '%d години',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,\n        ordinal: function (number) {\n            var lastDigit = number % 10,\n                last2Digits = number % 100;\n            if (number === 0) {\n                return number + '-ев';\n            } else if (last2Digits === 0) {\n                return number + '-ен';\n            } else if (last2Digits > 10 && last2Digits < 20) {\n                return number + '-ти';\n            } else if (lastDigit === 1) {\n                return number + '-ви';\n            } else if (lastDigit === 2) {\n                return number + '-ри';\n            } else if (lastDigit === 7 || lastDigit === 8) {\n                return number + '-ми';\n            } else {\n                return number + '-ти';\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return mk;\n\n})));\n","//! moment.js locale configuration\n//! locale : Malayalam [ml]\n//! author : Floyd Pink : https://github.com/floydpink\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 ml = moment.defineLocale('ml', {\n        months: 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split(\n            '_'\n        ),\n        monthsShort: 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split(\n            '_'\n        ),\n        monthsParseExact: true,\n        weekdays: 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split(\n            '_'\n        ),\n        weekdaysShort: 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'),\n        weekdaysMin: 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm -നു',\n            LTS: 'A h:mm:ss -നു',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm -നു',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm -നു',\n        },\n        calendar: {\n            sameDay: '[ഇന്ന്] LT',\n            nextDay: '[നാളെ] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[ഇന്നലെ] LT',\n            lastWeek: '[കഴിഞ്ഞ] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s കഴിഞ്ഞ്',\n            past: '%s മുൻപ്',\n            s: 'അൽപ നിമിഷങ്ങൾ',\n            ss: '%d സെക്കൻഡ്',\n            m: 'ഒരു മിനിറ്റ്',\n            mm: '%d മിനിറ്റ്',\n            h: 'ഒരു മണിക്കൂർ',\n            hh: '%d മണിക്കൂർ',\n            d: 'ഒരു ദിവസം',\n            dd: '%d ദിവസം',\n            M: 'ഒരു മാസം',\n            MM: '%d മാസം',\n            y: 'ഒരു വർഷം',\n            yy: '%d വർഷം',\n        },\n        meridiemParse: /രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (\n                (meridiem === 'രാത്രി' && hour >= 4) ||\n                meridiem === 'ഉച്ച കഴിഞ്ഞ്' ||\n                meridiem === 'വൈകുന്നേരം'\n            ) {\n                return hour + 12;\n            } else {\n                return hour;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'രാത്രി';\n            } else if (hour < 12) {\n                return 'രാവിലെ';\n            } else if (hour < 17) {\n                return 'ഉച്ച കഴിഞ്ഞ്';\n            } else if (hour < 20) {\n                return 'വൈകുന്നേരം';\n            } else {\n                return 'രാത്രി';\n            }\n        },\n    });\n\n    return ml;\n\n})));\n","//! moment.js locale configuration\n//! locale : Mongolian [mn]\n//! author : Javkhlantugs Nyamdorj : https://github.com/javkhaanj7\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    function translate(number, withoutSuffix, key, isFuture) {\n        switch (key) {\n            case 's':\n                return withoutSuffix ? 'хэдхэн секунд' : 'хэдхэн секундын';\n            case 'ss':\n                return number + (withoutSuffix ? ' секунд' : ' секундын');\n            case 'm':\n            case 'mm':\n                return number + (withoutSuffix ? ' минут' : ' минутын');\n            case 'h':\n            case 'hh':\n                return number + (withoutSuffix ? ' цаг' : ' цагийн');\n            case 'd':\n            case 'dd':\n                return number + (withoutSuffix ? ' өдөр' : ' өдрийн');\n            case 'M':\n            case 'MM':\n                return number + (withoutSuffix ? ' сар' : ' сарын');\n            case 'y':\n            case 'yy':\n                return number + (withoutSuffix ? ' жил' : ' жилийн');\n            default:\n                return number;\n        }\n    }\n\n    var mn = moment.defineLocale('mn', {\n        months: 'Нэгдүгээр сар_Хоёрдугаар сар_Гуравдугаар сар_Дөрөвдүгээр сар_Тавдугаар сар_Зургадугаар сар_Долдугаар сар_Наймдугаар сар_Есдүгээр сар_Аравдугаар сар_Арван нэгдүгээр сар_Арван хоёрдугаар сар'.split(\n            '_'\n        ),\n        monthsShort: '1 сар_2 сар_3 сар_4 сар_5 сар_6 сар_7 сар_8 сар_9 сар_10 сар_11 сар_12 сар'.split(\n            '_'\n        ),\n        monthsParseExact: true,\n        weekdays: 'Ням_Даваа_Мягмар_Лхагва_Пүрэв_Баасан_Бямба'.split('_'),\n        weekdaysShort: 'Ням_Дав_Мяг_Лха_Пүр_Баа_Бям'.split('_'),\n        weekdaysMin: 'Ня_Да_Мя_Лх_Пү_Ба_Бя'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: 'YYYY оны MMMMын D',\n            LLL: 'YYYY оны MMMMын D HH:mm',\n            LLLL: 'dddd, YYYY оны MMMMын D HH:mm',\n        },\n        meridiemParse: /ҮӨ|ҮХ/i,\n        isPM: function (input) {\n            return input === 'ҮХ';\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ҮӨ';\n            } else {\n                return 'ҮХ';\n            }\n        },\n        calendar: {\n            sameDay: '[Өнөөдөр] LT',\n            nextDay: '[Маргааш] LT',\n            nextWeek: '[Ирэх] dddd LT',\n            lastDay: '[Өчигдөр] LT',\n            lastWeek: '[Өнгөрсөн] dddd LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s дараа',\n            past: '%s өмнө',\n            s: translate,\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: translate,\n            hh: translate,\n            d: translate,\n            dd: translate,\n            M: translate,\n            MM: translate,\n            y: translate,\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2} өдөр/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + ' өдөр';\n                default:\n                    return number;\n            }\n        },\n    });\n\n    return mn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Marathi [mr]\n//! author : Harshad Kale : https://github.com/kalehv\n//! author : Vivek Athalye : https://github.com/vnathalye\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 symbolMap = {\n            1: '१',\n            2: '२',\n            3: '३',\n            4: '४',\n            5: '५',\n            6: '६',\n            7: '७',\n            8: '८',\n            9: '९',\n            0: '०',\n        },\n        numberMap = {\n            '१': '1',\n            '२': '2',\n            '३': '3',\n            '४': '4',\n            '५': '5',\n            '६': '6',\n            '७': '7',\n            '८': '8',\n            '९': '9',\n            '०': '0',\n        };\n\n    function relativeTimeMr(number, withoutSuffix, string, isFuture) {\n        var output = '';\n        if (withoutSuffix) {\n            switch (string) {\n                case 's':\n                    output = 'काही सेकंद';\n                    break;\n                case 'ss':\n                    output = '%d सेकंद';\n                    break;\n                case 'm':\n                    output = 'एक मिनिट';\n                    break;\n                case 'mm':\n                    output = '%d मिनिटे';\n                    break;\n                case 'h':\n                    output = 'एक तास';\n                    break;\n                case 'hh':\n                    output = '%d तास';\n                    break;\n                case 'd':\n                    output = 'एक दिवस';\n                    break;\n                case 'dd':\n                    output = '%d दिवस';\n                    break;\n                case 'M':\n                    output = 'एक महिना';\n                    break;\n                case 'MM':\n                    output = '%d महिने';\n                    break;\n                case 'y':\n                    output = 'एक वर्ष';\n                    break;\n                case 'yy':\n                    output = '%d वर्षे';\n                    break;\n            }\n        } else {\n            switch (string) {\n                case 's':\n                    output = 'काही सेकंदां';\n                    break;\n                case 'ss':\n                    output = '%d सेकंदां';\n                    break;\n                case 'm':\n                    output = 'एका मिनिटा';\n                    break;\n                case 'mm':\n                    output = '%d मिनिटां';\n                    break;\n                case 'h':\n                    output = 'एका तासा';\n                    break;\n                case 'hh':\n                    output = '%d तासां';\n                    break;\n                case 'd':\n                    output = 'एका दिवसा';\n                    break;\n                case 'dd':\n                    output = '%d दिवसां';\n                    break;\n                case 'M':\n                    output = 'एका महिन्या';\n                    break;\n                case 'MM':\n                    output = '%d महिन्यां';\n                    break;\n                case 'y':\n                    output = 'एका वर्षा';\n                    break;\n                case 'yy':\n                    output = '%d वर्षां';\n                    break;\n            }\n        }\n        return output.replace(/%d/i, number);\n    }\n\n    var mr = moment.defineLocale('mr', {\n        months: 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split(\n            '_'\n        ),\n        monthsShort: 'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split(\n            '_'\n        ),\n        monthsParseExact: true,\n        weekdays: 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),\n        weekdaysShort: 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split('_'),\n        weekdaysMin: 'र_सो_मं_बु_गु_शु_श'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm वाजता',\n            LTS: 'A h:mm:ss वाजता',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm वाजता',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm वाजता',\n        },\n        calendar: {\n            sameDay: '[आज] LT',\n            nextDay: '[उद्या] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[काल] LT',\n            lastWeek: '[मागील] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%sमध्ये',\n            past: '%sपूर्वी',\n            s: relativeTimeMr,\n            ss: relativeTimeMr,\n            m: relativeTimeMr,\n            mm: relativeTimeMr,\n            h: relativeTimeMr,\n            hh: relativeTimeMr,\n            d: relativeTimeMr,\n            dd: relativeTimeMr,\n            M: relativeTimeMr,\n            MM: relativeTimeMr,\n            y: relativeTimeMr,\n            yy: relativeTimeMr,\n        },\n        preparse: function (string) {\n            return string.replace(/[१२३४५६७८९०]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /पहाटे|सकाळी|दुपारी|सायंकाळी|रात्री/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'पहाटे' || meridiem === 'सकाळी') {\n                return hour;\n            } else if (\n                meridiem === 'दुपारी' ||\n                meridiem === 'सायंकाळी' ||\n                meridiem === 'रात्री'\n            ) {\n                return hour >= 12 ? hour : hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour >= 0 && hour < 6) {\n                return 'पहाटे';\n            } else if (hour < 12) {\n                return 'सकाळी';\n            } else if (hour < 17) {\n                return 'दुपारी';\n            } else if (hour < 20) {\n                return 'सायंकाळी';\n            } else {\n                return 'रात्री';\n            }\n        },\n        week: {\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\n    return mr;\n\n})));\n","//! moment.js locale configuration\n//! locale : Malay [ms]\n//! author : Weldan Jamili : https://github.com/weldan\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 ms = moment.defineLocale('ms', {\n        months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),\n        weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),\n        weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),\n        weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),\n        longDateFormat: {\n            LT: 'HH.mm',\n            LTS: 'HH.mm.ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY [pukul] HH.mm',\n            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',\n        },\n        meridiemParse: /pagi|tengahari|petang|malam/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'pagi') {\n                return hour;\n            } else if (meridiem === 'tengahari') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'petang' || meridiem === 'malam') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'pagi';\n            } else if (hours < 15) {\n                return 'tengahari';\n            } else if (hours < 19) {\n                return 'petang';\n            } else {\n                return 'malam';\n            }\n        },\n        calendar: {\n            sameDay: '[Hari ini pukul] LT',\n            nextDay: '[Esok pukul] LT',\n            nextWeek: 'dddd [pukul] LT',\n            lastDay: '[Kelmarin pukul] LT',\n            lastWeek: 'dddd [lepas pukul] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'dalam %s',\n            past: '%s yang lepas',\n            s: 'beberapa saat',\n            ss: '%d saat',\n            m: 'seminit',\n            mm: '%d minit',\n            h: 'sejam',\n            hh: '%d jam',\n            d: 'sehari',\n            dd: '%d hari',\n            M: 'sebulan',\n            MM: '%d bulan',\n            y: 'setahun',\n            yy: '%d tahun',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return ms;\n\n})));\n","//! moment.js locale configuration\n//! locale : Malay [ms-my]\n//! note : DEPRECATED, the correct one is [ms]\n//! author : Weldan Jamili : https://github.com/weldan\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 msMy = moment.defineLocale('ms-my', {\n        months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),\n        weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),\n        weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),\n        weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),\n        longDateFormat: {\n            LT: 'HH.mm',\n            LTS: 'HH.mm.ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY [pukul] HH.mm',\n            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',\n        },\n        meridiemParse: /pagi|tengahari|petang|malam/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'pagi') {\n                return hour;\n            } else if (meridiem === 'tengahari') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'petang' || meridiem === 'malam') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'pagi';\n            } else if (hours < 15) {\n                return 'tengahari';\n            } else if (hours < 19) {\n                return 'petang';\n            } else {\n                return 'malam';\n            }\n        },\n        calendar: {\n            sameDay: '[Hari ini pukul] LT',\n            nextDay: '[Esok pukul] LT',\n            nextWeek: 'dddd [pukul] LT',\n            lastDay: '[Kelmarin pukul] LT',\n            lastWeek: 'dddd [lepas pukul] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'dalam %s',\n            past: '%s yang lepas',\n            s: 'beberapa saat',\n            ss: '%d saat',\n            m: 'seminit',\n            mm: '%d minit',\n            h: 'sejam',\n            hh: '%d jam',\n            d: 'sehari',\n            dd: '%d hari',\n            M: 'sebulan',\n            MM: '%d bulan',\n            y: 'setahun',\n            yy: '%d tahun',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return msMy;\n\n})));\n","//! moment.js locale configuration\n//! locale : Maltese (Malta) [mt]\n//! author : Alessandro Maruccia : https://github.com/alesma\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 mt = moment.defineLocale('mt', {\n        months: 'Jannar_Frar_Marzu_April_Mejju_Ġunju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Diċembru'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Fra_Mar_Apr_Mej_Ġun_Lul_Aww_Set_Ott_Nov_Diċ'.split('_'),\n        weekdays: 'Il-Ħadd_It-Tnejn_It-Tlieta_L-Erbgħa_Il-Ħamis_Il-Ġimgħa_Is-Sibt'.split(\n            '_'\n        ),\n        weekdaysShort: 'Ħad_Tne_Tli_Erb_Ħam_Ġim_Sib'.split('_'),\n        weekdaysMin: 'Ħa_Tn_Tl_Er_Ħa_Ġi_Si'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Illum fil-]LT',\n            nextDay: '[Għada fil-]LT',\n            nextWeek: 'dddd [fil-]LT',\n            lastDay: '[Il-bieraħ fil-]LT',\n            lastWeek: 'dddd [li għadda] [fil-]LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'f’ %s',\n            past: '%s ilu',\n            s: 'ftit sekondi',\n            ss: '%d sekondi',\n            m: 'minuta',\n            mm: '%d minuti',\n            h: 'siegħa',\n            hh: '%d siegħat',\n            d: 'ġurnata',\n            dd: '%d ġranet',\n            M: 'xahar',\n            MM: '%d xhur',\n            y: 'sena',\n            yy: '%d sni',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\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 mt;\n\n})));\n","//! moment.js locale configuration\n//! locale : Burmese [my]\n//! author : Squar team, mysquar.com\n//! author : David Rossellat : https://github.com/gholadr\n//! author : Tin Aung Lin : https://github.com/thanyawzinmin\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 symbolMap = {\n            1: '၁',\n            2: '၂',\n            3: '၃',\n            4: '၄',\n            5: '၅',\n            6: '၆',\n            7: '၇',\n            8: '၈',\n            9: '၉',\n            0: '၀',\n        },\n        numberMap = {\n            '၁': '1',\n            '၂': '2',\n            '၃': '3',\n            '၄': '4',\n            '၅': '5',\n            '၆': '6',\n            '၇': '7',\n            '၈': '8',\n            '၉': '9',\n            '၀': '0',\n        };\n\n    var my = moment.defineLocale('my', {\n        months: 'ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ'.split(\n            '_'\n        ),\n        monthsShort: 'ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ'.split('_'),\n        weekdays: 'တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ'.split(\n            '_'\n        ),\n        weekdaysShort: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),\n        weekdaysMin: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),\n\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[ယနေ.] LT [မှာ]',\n            nextDay: '[မနက်ဖြန်] LT [မှာ]',\n            nextWeek: 'dddd LT [မှာ]',\n            lastDay: '[မနေ.က] LT [မှာ]',\n            lastWeek: '[ပြီးခဲ့သော] dddd LT [မှာ]',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'လာမည့် %s မှာ',\n            past: 'လွန်ခဲ့သော %s က',\n            s: 'စက္ကန်.အနည်းငယ်',\n            ss: '%d စက္ကန့်',\n            m: 'တစ်မိနစ်',\n            mm: '%d မိနစ်',\n            h: 'တစ်နာရီ',\n            hh: '%d နာရီ',\n            d: 'တစ်ရက်',\n            dd: '%d ရက်',\n            M: 'တစ်လ',\n            MM: '%d လ',\n            y: 'တစ်နှစ်',\n            yy: '%d နှစ်',\n        },\n        preparse: function (string) {\n            return string.replace(/[၁၂၃၄၅၆၇၈၉၀]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\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 my;\n\n})));\n","//! moment.js locale configuration\n//! locale : Norwegian Bokmål [nb]\n//! authors : Espen Hovlandsdal : https://github.com/rexxars\n//!           Sigurd Gartmann : https://github.com/sigurdga\n//!           Stephen Ramthun : https://github.com/stephenramthun\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 nb = moment.defineLocale('nb', {\n        months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split(\n            '_'\n        ),\n        monthsShort: 'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split(\n            '_'\n        ),\n        monthsParseExact: true,\n        weekdays: 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),\n        weekdaysShort: 'sø._ma._ti._on._to._fr._lø.'.split('_'),\n        weekdaysMin: 'sø_ma_ti_on_to_fr_lø'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY [kl.] HH:mm',\n            LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm',\n        },\n        calendar: {\n            sameDay: '[i dag kl.] LT',\n            nextDay: '[i morgen kl.] LT',\n            nextWeek: 'dddd [kl.] LT',\n            lastDay: '[i går kl.] LT',\n            lastWeek: '[forrige] dddd [kl.] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'om %s',\n            past: '%s siden',\n            s: 'noen sekunder',\n            ss: '%d sekunder',\n            m: 'ett minutt',\n            mm: '%d minutter',\n            h: 'en time',\n            hh: '%d timer',\n            d: 'en dag',\n            dd: '%d dager',\n            w: 'en uke',\n            ww: '%d uker',\n            M: 'en måned',\n            MM: '%d måneder',\n            y: 'ett år',\n            yy: '%d år',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\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 nb;\n\n})));\n","//! moment.js locale configuration\n//! locale : Nepalese [ne]\n//! author : suvash : https://github.com/suvash\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 symbolMap = {\n            1: '१',\n            2: '२',\n            3: '३',\n            4: '४',\n            5: '५',\n            6: '६',\n            7: '७',\n            8: '८',\n            9: '९',\n            0: '०',\n        },\n        numberMap = {\n            '१': '1',\n            '२': '2',\n            '३': '3',\n            '४': '4',\n            '५': '5',\n            '६': '6',\n            '७': '7',\n            '८': '8',\n            '९': '9',\n            '०': '0',\n        };\n\n    var ne = moment.defineLocale('ne', {\n        months: 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split(\n            '_'\n        ),\n        monthsShort: 'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split(\n            '_'\n        ),\n        monthsParseExact: true,\n        weekdays: 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split(\n            '_'\n        ),\n        weekdaysShort: 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split('_'),\n        weekdaysMin: 'आ._सो._मं._बु._बि._शु._श.'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'Aको h:mm बजे',\n            LTS: 'Aको h:mm:ss बजे',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, Aको h:mm बजे',\n            LLLL: 'dddd, D MMMM YYYY, Aको h:mm बजे',\n        },\n        preparse: function (string) {\n            return string.replace(/[१२३४५६७८९०]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /राति|बिहान|दिउँसो|साँझ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'राति') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'बिहान') {\n                return hour;\n            } else if (meridiem === 'दिउँसो') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'साँझ') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 3) {\n                return 'राति';\n            } else if (hour < 12) {\n                return 'बिहान';\n            } else if (hour < 16) {\n                return 'दिउँसो';\n            } else if (hour < 20) {\n                return 'साँझ';\n            } else {\n                return 'राति';\n            }\n        },\n        calendar: {\n            sameDay: '[आज] LT',\n            nextDay: '[भोलि] LT',\n            nextWeek: '[आउँदो] dddd[,] LT',\n            lastDay: '[हिजो] LT',\n            lastWeek: '[गएको] dddd[,] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%sमा',\n            past: '%s अगाडि',\n            s: 'केही क्षण',\n            ss: '%d सेकेण्ड',\n            m: 'एक मिनेट',\n            mm: '%d मिनेट',\n            h: 'एक घण्टा',\n            hh: '%d घण्टा',\n            d: 'एक दिन',\n            dd: '%d दिन',\n            M: 'एक महिना',\n            MM: '%d महिना',\n            y: 'एक बर्ष',\n            yy: '%d बर्ष',\n        },\n        week: {\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\n    return ne;\n\n})));\n","//! moment.js locale configuration\n//! locale : Dutch [nl]\n//! author : Joris Röling : https://github.com/jorisroling\n//! author : Jacob Middag : https://github.com/middagj\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 monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split(\n            '_'\n        ),\n        monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split(\n            '_'\n        ),\n        monthsParse = [\n            /^jan/i,\n            /^feb/i,\n            /^maart|mrt.?$/i,\n            /^apr/i,\n            /^mei$/i,\n            /^jun[i.]?$/i,\n            /^jul[i.]?$/i,\n            /^aug/i,\n            /^sep/i,\n            /^okt/i,\n            /^nov/i,\n            /^dec/i,\n        ],\n        monthsRegex = /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;\n\n    var nl = moment.defineLocale('nl', {\n        months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split(\n            '_'\n        ),\n        monthsShort: function (m, format) {\n            if (!m) {\n                return monthsShortWithDots;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShortWithoutDots[m.month()];\n            } else {\n                return monthsShortWithDots[m.month()];\n            }\n        },\n\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,\n        monthsShortStrictRegex: /^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,\n\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n\n        weekdays: 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split(\n            '_'\n        ),\n        weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'),\n        weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD-MM-YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[vandaag om] LT',\n            nextDay: '[morgen om] LT',\n            nextWeek: 'dddd [om] LT',\n            lastDay: '[gisteren om] LT',\n            lastWeek: '[afgelopen] dddd [om] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'over %s',\n            past: '%s geleden',\n            s: 'een paar seconden',\n            ss: '%d seconden',\n            m: 'één minuut',\n            mm: '%d minuten',\n            h: 'één uur',\n            hh: '%d uur',\n            d: 'één dag',\n            dd: '%d dagen',\n            w: 'één week',\n            ww: '%d weken',\n            M: 'één maand',\n            MM: '%d maanden',\n            y: 'één jaar',\n            yy: '%d jaar',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal: function (number) {\n            return (\n                number +\n                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')\n            );\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 nl;\n\n})));\n","//! moment.js locale configuration\n//! locale : Dutch (Belgium) [nl-be]\n//! author : Joris Röling : https://github.com/jorisroling\n//! author : Jacob Middag : https://github.com/middagj\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 monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split(\n            '_'\n        ),\n        monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split(\n            '_'\n        ),\n        monthsParse = [\n            /^jan/i,\n            /^feb/i,\n            /^maart|mrt.?$/i,\n            /^apr/i,\n            /^mei$/i,\n            /^jun[i.]?$/i,\n            /^jul[i.]?$/i,\n            /^aug/i,\n            /^sep/i,\n            /^okt/i,\n            /^nov/i,\n            /^dec/i,\n        ],\n        monthsRegex = /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;\n\n    var nlBe = moment.defineLocale('nl-be', {\n        months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split(\n            '_'\n        ),\n        monthsShort: function (m, format) {\n            if (!m) {\n                return monthsShortWithDots;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShortWithoutDots[m.month()];\n            } else {\n                return monthsShortWithDots[m.month()];\n            }\n        },\n\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,\n        monthsShortStrictRegex: /^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,\n\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n\n        weekdays: 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split(\n            '_'\n        ),\n        weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'),\n        weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[vandaag om] LT',\n            nextDay: '[morgen om] LT',\n            nextWeek: 'dddd [om] LT',\n            lastDay: '[gisteren om] LT',\n            lastWeek: '[afgelopen] dddd [om] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'over %s',\n            past: '%s geleden',\n            s: 'een paar seconden',\n            ss: '%d seconden',\n            m: 'één minuut',\n            mm: '%d minuten',\n            h: 'één uur',\n            hh: '%d uur',\n            d: 'één dag',\n            dd: '%d dagen',\n            M: 'één maand',\n            MM: '%d maanden',\n            y: 'één jaar',\n            yy: '%d jaar',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal: function (number) {\n            return (\n                number +\n                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')\n            );\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 nlBe;\n\n})));\n","//! moment.js locale configuration\n//! locale : Nynorsk [nn]\n//! authors : https://github.com/mechuwind\n//!           Stephen Ramthun : https://github.com/stephenramthun\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 nn = moment.defineLocale('nn', {\n        months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split(\n            '_'\n        ),\n        monthsShort: 'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split(\n            '_'\n        ),\n        monthsParseExact: true,\n        weekdays: 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'),\n        weekdaysShort: 'su._må._ty._on._to._fr._lau.'.split('_'),\n        weekdaysMin: 'su_må_ty_on_to_fr_la'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY [kl.] H:mm',\n            LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm',\n        },\n        calendar: {\n            sameDay: '[I dag klokka] LT',\n            nextDay: '[I morgon klokka] LT',\n            nextWeek: 'dddd [klokka] LT',\n            lastDay: '[I går klokka] LT',\n            lastWeek: '[Føregåande] dddd [klokka] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'om %s',\n            past: '%s sidan',\n            s: 'nokre sekund',\n            ss: '%d sekund',\n            m: 'eit minutt',\n            mm: '%d minutt',\n            h: 'ein time',\n            hh: '%d timar',\n            d: 'ein dag',\n            dd: '%d dagar',\n            w: 'ei veke',\n            ww: '%d veker',\n            M: 'ein månad',\n            MM: '%d månader',\n            y: 'eit år',\n            yy: '%d år',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\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 nn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Occitan, lengadocian dialecte [oc-lnc]\n//! author : Quentin PAGÈS : https://github.com/Quenty31\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 ocLnc = moment.defineLocale('oc-lnc', {\n        months: {\n            standalone: 'genièr_febrièr_març_abril_mai_junh_julhet_agost_setembre_octòbre_novembre_decembre'.split(\n                '_'\n            ),\n            format: \"de genièr_de febrièr_de març_d'abril_de mai_de junh_de julhet_d'agost_de setembre_d'octòbre_de novembre_de decembre\".split(\n                '_'\n            ),\n            isFormat: /D[oD]?(\\s)+MMMM/,\n        },\n        monthsShort: 'gen._febr._març_abr._mai_junh_julh._ago._set._oct._nov._dec.'.split(\n            '_'\n        ),\n        monthsParseExact: true,\n        weekdays: 'dimenge_diluns_dimars_dimècres_dijòus_divendres_dissabte'.split(\n            '_'\n        ),\n        weekdaysShort: 'dg._dl._dm._dc._dj._dv._ds.'.split('_'),\n        weekdaysMin: 'dg_dl_dm_dc_dj_dv_ds'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM [de] YYYY',\n            ll: 'D MMM YYYY',\n            LLL: 'D MMMM [de] YYYY [a] H:mm',\n            lll: 'D MMM YYYY, H:mm',\n            LLLL: 'dddd D MMMM [de] YYYY [a] H:mm',\n            llll: 'ddd D MMM YYYY, H:mm',\n        },\n        calendar: {\n            sameDay: '[uèi a] LT',\n            nextDay: '[deman a] LT',\n            nextWeek: 'dddd [a] LT',\n            lastDay: '[ièr a] LT',\n            lastWeek: 'dddd [passat a] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: \"d'aquí %s\",\n            past: 'fa %s',\n            s: 'unas segondas',\n            ss: '%d segondas',\n            m: 'una minuta',\n            mm: '%d minutas',\n            h: 'una ora',\n            hh: '%d oras',\n            d: 'un jorn',\n            dd: '%d jorns',\n            M: 'un mes',\n            MM: '%d meses',\n            y: 'un an',\n            yy: '%d ans',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(r|n|t|è|a)/,\n        ordinal: function (number, period) {\n            var output =\n                number === 1\n                    ? 'r'\n                    : number === 2\n                    ? 'n'\n                    : number === 3\n                    ? 'r'\n                    : number === 4\n                    ? 't'\n                    : 'è';\n            if (period === 'w' || period === 'W') {\n                output = 'a';\n            }\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4,\n        },\n    });\n\n    return ocLnc;\n\n})));\n","//! moment.js locale configuration\n//! locale : Punjabi (India) [pa-in]\n//! author : Harpreet Singh : https://github.com/harpreetkhalsagtbit\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 symbolMap = {\n            1: '੧',\n            2: '੨',\n            3: '੩',\n            4: '੪',\n            5: '੫',\n            6: '੬',\n            7: '੭',\n            8: '੮',\n            9: '੯',\n            0: '੦',\n        },\n        numberMap = {\n            '੧': '1',\n            '੨': '2',\n            '੩': '3',\n            '੪': '4',\n            '੫': '5',\n            '੬': '6',\n            '੭': '7',\n            '੮': '8',\n            '੯': '9',\n            '੦': '0',\n        };\n\n    var paIn = moment.defineLocale('pa-in', {\n        // There are months name as per Nanakshahi Calendar but they are not used as rigidly in modern Punjabi.\n        months: 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split(\n            '_'\n        ),\n        monthsShort: 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split(\n            '_'\n        ),\n        weekdays: 'ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ'.split(\n            '_'\n        ),\n        weekdaysShort: 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),\n        weekdaysMin: 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm ਵਜੇ',\n            LTS: 'A h:mm:ss ਵਜੇ',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm ਵਜੇ',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm ਵਜੇ',\n        },\n        calendar: {\n            sameDay: '[ਅਜ] LT',\n            nextDay: '[ਕਲ] LT',\n            nextWeek: '[ਅਗਲਾ] dddd, LT',\n            lastDay: '[ਕਲ] LT',\n            lastWeek: '[ਪਿਛਲੇ] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s ਵਿੱਚ',\n            past: '%s ਪਿਛਲੇ',\n            s: 'ਕੁਝ ਸਕਿੰਟ',\n            ss: '%d ਸਕਿੰਟ',\n            m: 'ਇਕ ਮਿੰਟ',\n            mm: '%d ਮਿੰਟ',\n            h: 'ਇੱਕ ਘੰਟਾ',\n            hh: '%d ਘੰਟੇ',\n            d: 'ਇੱਕ ਦਿਨ',\n            dd: '%d ਦਿਨ',\n            M: 'ਇੱਕ ਮਹੀਨਾ',\n            MM: '%d ਮਹੀਨੇ',\n            y: 'ਇੱਕ ਸਾਲ',\n            yy: '%d ਸਾਲ',\n        },\n        preparse: function (string) {\n            return string.replace(/[੧੨੩੪੫੬੭੮੯੦]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        // Punjabi notation for meridiems are quite fuzzy in practice. While there exists\n        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi.\n        meridiemParse: /ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'ਰਾਤ') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'ਸਵੇਰ') {\n                return hour;\n            } else if (meridiem === 'ਦੁਪਹਿਰ') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'ਸ਼ਾਮ') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ਰਾਤ';\n            } else if (hour < 10) {\n                return 'ਸਵੇਰ';\n            } else if (hour < 17) {\n                return 'ਦੁਪਹਿਰ';\n            } else if (hour < 20) {\n                return 'ਸ਼ਾਮ';\n            } else {\n                return 'ਰਾਤ';\n            }\n        },\n        week: {\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\n    return paIn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Polish [pl]\n//! author : Rafal Hirsz : https://github.com/evoL\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 monthsNominative = 'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split(\n            '_'\n        ),\n        monthsSubjective = 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split(\n            '_'\n        ),\n        monthsParse = [\n            /^sty/i,\n            /^lut/i,\n            /^mar/i,\n            /^kwi/i,\n            /^maj/i,\n            /^cze/i,\n            /^lip/i,\n            /^sie/i,\n            /^wrz/i,\n            /^paź/i,\n            /^lis/i,\n            /^gru/i,\n        ];\n    function plural(n) {\n        return n % 10 < 5 && n % 10 > 1 && ~~(n / 10) % 10 !== 1;\n    }\n    function translate(number, withoutSuffix, key) {\n        var result = number + ' ';\n        switch (key) {\n            case 'ss':\n                return result + (plural(number) ? 'sekundy' : 'sekund');\n            case 'm':\n                return withoutSuffix ? 'minuta' : 'minutę';\n            case 'mm':\n                return result + (plural(number) ? 'minuty' : 'minut');\n            case 'h':\n                return withoutSuffix ? 'godzina' : 'godzinę';\n            case 'hh':\n                return result + (plural(number) ? 'godziny' : 'godzin');\n            case 'ww':\n                return result + (plural(number) ? 'tygodnie' : 'tygodni');\n            case 'MM':\n                return result + (plural(number) ? 'miesiące' : 'miesięcy');\n            case 'yy':\n                return result + (plural(number) ? 'lata' : 'lat');\n        }\n    }\n\n    var pl = moment.defineLocale('pl', {\n        months: function (momentToFormat, format) {\n            if (!momentToFormat) {\n                return monthsNominative;\n            } else if (/D MMMM/.test(format)) {\n                return monthsSubjective[momentToFormat.month()];\n            } else {\n                return monthsNominative[momentToFormat.month()];\n            }\n        },\n        monthsShort: 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'),\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays: 'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split(\n            '_'\n        ),\n        weekdaysShort: 'ndz_pon_wt_śr_czw_pt_sob'.split('_'),\n        weekdaysMin: 'Nd_Pn_Wt_Śr_Cz_Pt_So'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Dziś o] LT',\n            nextDay: '[Jutro o] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[W niedzielę o] LT';\n\n                    case 2:\n                        return '[We wtorek o] LT';\n\n                    case 3:\n                        return '[W środę o] LT';\n\n                    case 6:\n                        return '[W sobotę o] LT';\n\n                    default:\n                        return '[W] dddd [o] LT';\n                }\n            },\n            lastDay: '[Wczoraj o] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[W zeszłą niedzielę o] LT';\n                    case 3:\n                        return '[W zeszłą środę o] LT';\n                    case 6:\n                        return '[W zeszłą sobotę o] LT';\n                    default:\n                        return '[W zeszły] dddd [o] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'za %s',\n            past: '%s temu',\n            s: 'kilka sekund',\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: translate,\n            hh: translate,\n            d: '1 dzień',\n            dd: '%d dni',\n            w: 'tydzień',\n            ww: translate,\n            M: 'miesiąc',\n            MM: translate,\n            y: 'rok',\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\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 pl;\n\n})));\n","//! moment.js locale configuration\n//! locale : Portuguese [pt]\n//! author : Jefferson : https://github.com/jalex79\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 pt = moment.defineLocale('pt', {\n        months: 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split(\n            '_'\n        ),\n        monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),\n        weekdays: 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split(\n            '_'\n        ),\n        weekdaysShort: 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),\n        weekdaysMin: 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D [de] MMMM [de] YYYY',\n            LLL: 'D [de] MMMM [de] YYYY HH:mm',\n            LLLL: 'dddd, D [de] MMMM [de] YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Hoje às] LT',\n            nextDay: '[Amanhã às] LT',\n            nextWeek: 'dddd [às] LT',\n            lastDay: '[Ontem às] LT',\n            lastWeek: function () {\n                return this.day() === 0 || this.day() === 6\n                    ? '[Último] dddd [às] LT' // Saturday + Sunday\n                    : '[Última] dddd [às] LT'; // Monday - Friday\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'em %s',\n            past: 'há %s',\n            s: 'segundos',\n            ss: '%d segundos',\n            m: 'um minuto',\n            mm: '%d minutos',\n            h: 'uma hora',\n            hh: '%d horas',\n            d: 'um dia',\n            dd: '%d dias',\n            w: 'uma semana',\n            ww: '%d semanas',\n            M: 'um mês',\n            MM: '%d meses',\n            y: 'um ano',\n            yy: '%d anos',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\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 pt;\n\n})));\n","//! moment.js locale configuration\n//! locale : Portuguese (Brazil) [pt-br]\n//! author : Caio Ribeiro Pereira : https://github.com/caio-ribeiro-pereira\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 ptBr = moment.defineLocale('pt-br', {\n        months: 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split(\n            '_'\n        ),\n        monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),\n        weekdays: 'domingo_segunda-feira_terça-feira_quarta-feira_quinta-feira_sexta-feira_sábado'.split(\n            '_'\n        ),\n        weekdaysShort: 'dom_seg_ter_qua_qui_sex_sáb'.split('_'),\n        weekdaysMin: 'do_2ª_3ª_4ª_5ª_6ª_sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D [de] MMMM [de] YYYY',\n            LLL: 'D [de] MMMM [de] YYYY [às] HH:mm',\n            LLLL: 'dddd, D [de] MMMM [de] YYYY [às] HH:mm',\n        },\n        calendar: {\n            sameDay: '[Hoje às] LT',\n            nextDay: '[Amanhã às] LT',\n            nextWeek: 'dddd [às] LT',\n            lastDay: '[Ontem às] LT',\n            lastWeek: function () {\n                return this.day() === 0 || this.day() === 6\n                    ? '[Último] dddd [às] LT' // Saturday + Sunday\n                    : '[Última] dddd [às] LT'; // Monday - Friday\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'em %s',\n            past: 'há %s',\n            s: 'poucos segundos',\n            ss: '%d segundos',\n            m: 'um minuto',\n            mm: '%d minutos',\n            h: 'uma hora',\n            hh: '%d horas',\n            d: 'um dia',\n            dd: '%d dias',\n            M: 'um mês',\n            MM: '%d meses',\n            y: 'um ano',\n            yy: '%d anos',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        invalidDate: 'Data inválida',\n    });\n\n    return ptBr;\n\n})));\n","//! moment.js locale configuration\n//! locale : Romanian [ro]\n//! author : Vlad Gurdiga : https://github.com/gurdiga\n//! author : Valentin Agachi : https://github.com/avaly\n//! author : Emanuel Cepoi : https://github.com/cepem\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    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n                ss: 'secunde',\n                mm: 'minute',\n                hh: 'ore',\n                dd: 'zile',\n                ww: 'săptămâni',\n                MM: 'luni',\n                yy: 'ani',\n            },\n            separator = ' ';\n        if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) {\n            separator = ' de ';\n        }\n        return number + separator + format[key];\n    }\n\n    var ro = moment.defineLocale('ro', {\n        months: 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split(\n            '_'\n        ),\n        monthsShort: 'ian._feb._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split(\n            '_'\n        ),\n        monthsParseExact: true,\n        weekdays: 'duminică_luni_marți_miercuri_joi_vineri_sâmbătă'.split('_'),\n        weekdaysShort: 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'),\n        weekdaysMin: 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY H:mm',\n            LLLL: 'dddd, D MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[azi la] LT',\n            nextDay: '[mâine la] LT',\n            nextWeek: 'dddd [la] LT',\n            lastDay: '[ieri la] LT',\n            lastWeek: '[fosta] dddd [la] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'peste %s',\n            past: '%s în urmă',\n            s: 'câteva secunde',\n            ss: relativeTimeWithPlural,\n            m: 'un minut',\n            mm: relativeTimeWithPlural,\n            h: 'o oră',\n            hh: relativeTimeWithPlural,\n            d: 'o zi',\n            dd: relativeTimeWithPlural,\n            w: 'o săptămână',\n            ww: relativeTimeWithPlural,\n            M: 'o lună',\n            MM: relativeTimeWithPlural,\n            y: 'un an',\n            yy: relativeTimeWithPlural,\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return ro;\n\n})));\n","//! moment.js locale configuration\n//! locale : Russian [ru]\n//! author : Viktorminator : https://github.com/Viktorminator\n//! author : Menelion Elensúle : https://github.com/Oire\n//! author : Коренберг Марк : https://github.com/socketpair\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    function plural(word, num) {\n        var forms = word.split('_');\n        return num % 10 === 1 && num % 100 !== 11\n            ? forms[0]\n            : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)\n            ? forms[1]\n            : forms[2];\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n            ss: withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',\n            mm: withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут',\n            hh: 'час_часа_часов',\n            dd: 'день_дня_дней',\n            ww: 'неделя_недели_недель',\n            MM: 'месяц_месяца_месяцев',\n            yy: 'год_года_лет',\n        };\n        if (key === 'm') {\n            return withoutSuffix ? 'минута' : 'минуту';\n        } else {\n            return number + ' ' + plural(format[key], +number);\n        }\n    }\n    var monthsParse = [\n        /^янв/i,\n        /^фев/i,\n        /^мар/i,\n        /^апр/i,\n        /^ма[йя]/i,\n        /^июн/i,\n        /^июл/i,\n        /^авг/i,\n        /^сен/i,\n        /^окт/i,\n        /^ноя/i,\n        /^дек/i,\n    ];\n\n    // http://new.gramota.ru/spravka/rules/139-prop : § 103\n    // Сокращения месяцев: http://new.gramota.ru/spravka/buro/search-answer?s=242637\n    // CLDR data:          http://www.unicode.org/cldr/charts/28/summary/ru.html#1753\n    var ru = moment.defineLocale('ru', {\n        months: {\n            format: 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split(\n                '_'\n            ),\n            standalone: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split(\n                '_'\n            ),\n        },\n        monthsShort: {\n            // по CLDR именно \"июл.\" и \"июн.\", но какой смысл менять букву на точку?\n            format: 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split(\n                '_'\n            ),\n            standalone: 'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split(\n                '_'\n            ),\n        },\n        weekdays: {\n            standalone: 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split(\n                '_'\n            ),\n            format: 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split(\n                '_'\n            ),\n            isFormat: /\\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?] ?dddd/,\n        },\n        weekdaysShort: 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n        weekdaysMin: 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n\n        // полные названия с падежами, по три буквы, для некоторых, по 4 буквы, сокращения с точкой и без точки\n        monthsRegex: /^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,\n\n        // копия предыдущего\n        monthsShortRegex: /^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,\n\n        // полные названия с падежами\n        monthsStrictRegex: /^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,\n\n        // Выражение, которое соответствует только сокращённым формам\n        monthsShortStrictRegex: /^(янв\\.|февр?\\.|мар[т.]|апр\\.|ма[яй]|июн[ья.]|июл[ья.]|авг\\.|сент?\\.|окт\\.|нояб?\\.|дек\\.)/i,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY г.',\n            LLL: 'D MMMM YYYY г., H:mm',\n            LLLL: 'dddd, D MMMM YYYY г., H:mm',\n        },\n        calendar: {\n            sameDay: '[Сегодня, в] LT',\n            nextDay: '[Завтра, в] LT',\n            lastDay: '[Вчера, в] LT',\n            nextWeek: function (now) {\n                if (now.week() !== this.week()) {\n                    switch (this.day()) {\n                        case 0:\n                            return '[В следующее] dddd, [в] LT';\n                        case 1:\n                        case 2:\n                        case 4:\n                            return '[В следующий] dddd, [в] LT';\n                        case 3:\n                        case 5:\n                        case 6:\n                            return '[В следующую] dddd, [в] LT';\n                    }\n                } else {\n                    if (this.day() === 2) {\n                        return '[Во] dddd, [в] LT';\n                    } else {\n                        return '[В] dddd, [в] LT';\n                    }\n                }\n            },\n            lastWeek: function (now) {\n                if (now.week() !== this.week()) {\n                    switch (this.day()) {\n                        case 0:\n                            return '[В прошлое] dddd, [в] LT';\n                        case 1:\n                        case 2:\n                        case 4:\n                            return '[В прошлый] dddd, [в] LT';\n                        case 3:\n                        case 5:\n                        case 6:\n                            return '[В прошлую] dddd, [в] LT';\n                    }\n                } else {\n                    if (this.day() === 2) {\n                        return '[Во] dddd, [в] LT';\n                    } else {\n                        return '[В] dddd, [в] LT';\n                    }\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'через %s',\n            past: '%s назад',\n            s: 'несколько секунд',\n            ss: relativeTimeWithPlural,\n            m: relativeTimeWithPlural,\n            mm: relativeTimeWithPlural,\n            h: 'час',\n            hh: relativeTimeWithPlural,\n            d: 'день',\n            dd: relativeTimeWithPlural,\n            w: 'неделя',\n            ww: relativeTimeWithPlural,\n            M: 'месяц',\n            MM: relativeTimeWithPlural,\n            y: 'год',\n            yy: relativeTimeWithPlural,\n        },\n        meridiemParse: /ночи|утра|дня|вечера/i,\n        isPM: function (input) {\n            return /^(дня|вечера)$/.test(input);\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ночи';\n            } else if (hour < 12) {\n                return 'утра';\n            } else if (hour < 17) {\n                return 'дня';\n            } else {\n                return 'вечера';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(й|го|я)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'M':\n                case 'd':\n                case 'DDD':\n                    return number + '-й';\n                case 'D':\n                    return number + '-го';\n                case 'w':\n                case 'W':\n                    return number + '-я';\n                default:\n                    return number;\n            }\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 ru;\n\n})));\n","//! moment.js locale configuration\n//! locale : Sindhi [sd]\n//! author : Narain Sagar : https://github.com/narainsagar\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 months = [\n            'جنوري',\n            'فيبروري',\n            'مارچ',\n            'اپريل',\n            'مئي',\n            'جون',\n            'جولاءِ',\n            'آگسٽ',\n            'سيپٽمبر',\n            'آڪٽوبر',\n            'نومبر',\n            'ڊسمبر',\n        ],\n        days = ['آچر', 'سومر', 'اڱارو', 'اربع', 'خميس', 'جمع', 'ڇنڇر'];\n\n    var sd = moment.defineLocale('sd', {\n        months: months,\n        monthsShort: months,\n        weekdays: days,\n        weekdaysShort: days,\n        weekdaysMin: days,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd، D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /صبح|شام/,\n        isPM: function (input) {\n            return 'شام' === input;\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'صبح';\n            }\n            return 'شام';\n        },\n        calendar: {\n            sameDay: '[اڄ] LT',\n            nextDay: '[سڀاڻي] LT',\n            nextWeek: 'dddd [اڳين هفتي تي] LT',\n            lastDay: '[ڪالهه] LT',\n            lastWeek: '[گزريل هفتي] dddd [تي] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s پوء',\n            past: '%s اڳ',\n            s: 'چند سيڪنڊ',\n            ss: '%d سيڪنڊ',\n            m: 'هڪ منٽ',\n            mm: '%d منٽ',\n            h: 'هڪ ڪلاڪ',\n            hh: '%d ڪلاڪ',\n            d: 'هڪ ڏينهن',\n            dd: '%d ڏينهن',\n            M: 'هڪ مهينو',\n            MM: '%d مهينا',\n            y: 'هڪ سال',\n            yy: '%d سال',\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\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 sd;\n\n})));\n","//! moment.js locale configuration\n//! locale : Northern Sami [se]\n//! authors : Bård Rolstad Henriksen : https://github.com/karamell\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 se = moment.defineLocale('se', {\n        months: 'ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu'.split(\n            '_'\n        ),\n        monthsShort: 'ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov'.split(\n            '_'\n        ),\n        weekdays: 'sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split(\n            '_'\n        ),\n        weekdaysShort: 'sotn_vuos_maŋ_gask_duor_bear_láv'.split('_'),\n        weekdaysMin: 's_v_m_g_d_b_L'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'MMMM D. [b.] YYYY',\n            LLL: 'MMMM D. [b.] YYYY [ti.] HH:mm',\n            LLLL: 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm',\n        },\n        calendar: {\n            sameDay: '[otne ti] LT',\n            nextDay: '[ihttin ti] LT',\n            nextWeek: 'dddd [ti] LT',\n            lastDay: '[ikte ti] LT',\n            lastWeek: '[ovddit] dddd [ti] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s geažes',\n            past: 'maŋit %s',\n            s: 'moadde sekunddat',\n            ss: '%d sekunddat',\n            m: 'okta minuhta',\n            mm: '%d minuhtat',\n            h: 'okta diimmu',\n            hh: '%d diimmut',\n            d: 'okta beaivi',\n            dd: '%d beaivvit',\n            M: 'okta mánnu',\n            MM: '%d mánut',\n            y: 'okta jahki',\n            yy: '%d jagit',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\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 se;\n\n})));\n","//! moment.js locale configuration\n//! locale : Sinhalese [si]\n//! author : Sampath Sitinamaluwa : https://github.com/sampathsris\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    /*jshint -W100*/\n    var si = moment.defineLocale('si', {\n        months: 'ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්'.split(\n            '_'\n        ),\n        monthsShort: 'ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ'.split(\n            '_'\n        ),\n        weekdays: 'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split(\n            '_'\n        ),\n        weekdaysShort: 'ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන'.split('_'),\n        weekdaysMin: 'ඉ_ස_අ_බ_බ්‍ර_සි_සෙ'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'a h:mm',\n            LTS: 'a h:mm:ss',\n            L: 'YYYY/MM/DD',\n            LL: 'YYYY MMMM D',\n            LLL: 'YYYY MMMM D, a h:mm',\n            LLLL: 'YYYY MMMM D [වැනි] dddd, a h:mm:ss',\n        },\n        calendar: {\n            sameDay: '[අද] LT[ට]',\n            nextDay: '[හෙට] LT[ට]',\n            nextWeek: 'dddd LT[ට]',\n            lastDay: '[ඊයේ] LT[ට]',\n            lastWeek: '[පසුගිය] dddd LT[ට]',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%sකින්',\n            past: '%sකට පෙර',\n            s: 'තත්පර කිහිපය',\n            ss: 'තත්පර %d',\n            m: 'මිනිත්තුව',\n            mm: 'මිනිත්තු %d',\n            h: 'පැය',\n            hh: 'පැය %d',\n            d: 'දිනය',\n            dd: 'දින %d',\n            M: 'මාසය',\n            MM: 'මාස %d',\n            y: 'වසර',\n            yy: 'වසර %d',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2} වැනි/,\n        ordinal: function (number) {\n            return number + ' වැනි';\n        },\n        meridiemParse: /පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,\n        isPM: function (input) {\n            return input === 'ප.ව.' || input === 'පස් වරු';\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours > 11) {\n                return isLower ? 'ප.ව.' : 'පස් වරු';\n            } else {\n                return isLower ? 'පෙ.ව.' : 'පෙර වරු';\n            }\n        },\n    });\n\n    return si;\n\n})));\n","//! moment.js locale configuration\n//! locale : Slovak [sk]\n//! author : Martin Minka : https://github.com/k2s\n//! based on work of petrbela : https://github.com/petrbela\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 months = 'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split(\n            '_'\n        ),\n        monthsShort = 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_');\n    function plural(n) {\n        return n > 1 && n < 5;\n    }\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        switch (key) {\n            case 's': // a few seconds / in a few seconds / a few seconds ago\n                return withoutSuffix || isFuture ? 'pár sekúnd' : 'pár sekundami';\n            case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'sekundy' : 'sekúnd');\n                } else {\n                    return result + 'sekundami';\n                }\n            case 'm': // a minute / in a minute / a minute ago\n                return withoutSuffix ? 'minúta' : isFuture ? 'minútu' : 'minútou';\n            case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'minúty' : 'minút');\n                } else {\n                    return result + 'minútami';\n                }\n            case 'h': // an hour / in an hour / an hour ago\n                return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou';\n            case 'hh': // 9 hours / in 9 hours / 9 hours ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'hodiny' : 'hodín');\n                } else {\n                    return result + 'hodinami';\n                }\n            case 'd': // a day / in a day / a day ago\n                return withoutSuffix || isFuture ? 'deň' : 'dňom';\n            case 'dd': // 9 days / in 9 days / 9 days ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'dni' : 'dní');\n                } else {\n                    return result + 'dňami';\n                }\n            case 'M': // a month / in a month / a month ago\n                return withoutSuffix || isFuture ? 'mesiac' : 'mesiacom';\n            case 'MM': // 9 months / in 9 months / 9 months ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'mesiace' : 'mesiacov');\n                } else {\n                    return result + 'mesiacmi';\n                }\n            case 'y': // a year / in a year / a year ago\n                return withoutSuffix || isFuture ? 'rok' : 'rokom';\n            case 'yy': // 9 years / in 9 years / 9 years ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'roky' : 'rokov');\n                } else {\n                    return result + 'rokmi';\n                }\n        }\n    }\n\n    var sk = moment.defineLocale('sk', {\n        months: months,\n        monthsShort: monthsShort,\n        weekdays: 'nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota'.split('_'),\n        weekdaysShort: 'ne_po_ut_st_št_pi_so'.split('_'),\n        weekdaysMin: 'ne_po_ut_st_št_pi_so'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd D. MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[dnes o] LT',\n            nextDay: '[zajtra o] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[v nedeľu o] LT';\n                    case 1:\n                    case 2:\n                        return '[v] dddd [o] LT';\n                    case 3:\n                        return '[v stredu o] LT';\n                    case 4:\n                        return '[vo štvrtok o] LT';\n                    case 5:\n                        return '[v piatok o] LT';\n                    case 6:\n                        return '[v sobotu o] LT';\n                }\n            },\n            lastDay: '[včera o] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[minulú nedeľu o] LT';\n                    case 1:\n                    case 2:\n                        return '[minulý] dddd [o] LT';\n                    case 3:\n                        return '[minulú stredu o] LT';\n                    case 4:\n                    case 5:\n                        return '[minulý] dddd [o] LT';\n                    case 6:\n                        return '[minulú sobotu o] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'za %s',\n            past: 'pred %s',\n            s: translate,\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: translate,\n            hh: translate,\n            d: translate,\n            dd: translate,\n            M: translate,\n            MM: translate,\n            y: translate,\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\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 sk;\n\n})));\n","//! moment.js locale configuration\n//! locale : Slovenian [sl]\n//! author : Robert Sedovšek : https://github.com/sedovsek\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    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        switch (key) {\n            case 's':\n                return withoutSuffix || isFuture\n                    ? 'nekaj sekund'\n                    : 'nekaj sekundami';\n            case 'ss':\n                if (number === 1) {\n                    result += withoutSuffix ? 'sekundo' : 'sekundi';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'sekundi' : 'sekundah';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'sekunde' : 'sekundah';\n                } else {\n                    result += 'sekund';\n                }\n                return result;\n            case 'm':\n                return withoutSuffix ? 'ena minuta' : 'eno minuto';\n            case 'mm':\n                if (number === 1) {\n                    result += withoutSuffix ? 'minuta' : 'minuto';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'minuti' : 'minutama';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'minute' : 'minutami';\n                } else {\n                    result += withoutSuffix || isFuture ? 'minut' : 'minutami';\n                }\n                return result;\n            case 'h':\n                return withoutSuffix ? 'ena ura' : 'eno uro';\n            case 'hh':\n                if (number === 1) {\n                    result += withoutSuffix ? 'ura' : 'uro';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'uri' : 'urama';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'ure' : 'urami';\n                } else {\n                    result += withoutSuffix || isFuture ? 'ur' : 'urami';\n                }\n                return result;\n            case 'd':\n                return withoutSuffix || isFuture ? 'en dan' : 'enim dnem';\n            case 'dd':\n                if (number === 1) {\n                    result += withoutSuffix || isFuture ? 'dan' : 'dnem';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'dni' : 'dnevoma';\n                } else {\n                    result += withoutSuffix || isFuture ? 'dni' : 'dnevi';\n                }\n                return result;\n            case 'M':\n                return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem';\n            case 'MM':\n                if (number === 1) {\n                    result += withoutSuffix || isFuture ? 'mesec' : 'mesecem';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'meseca' : 'mesecema';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'mesece' : 'meseci';\n                } else {\n                    result += withoutSuffix || isFuture ? 'mesecev' : 'meseci';\n                }\n                return result;\n            case 'y':\n                return withoutSuffix || isFuture ? 'eno leto' : 'enim letom';\n            case 'yy':\n                if (number === 1) {\n                    result += withoutSuffix || isFuture ? 'leto' : 'letom';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'leti' : 'letoma';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'leta' : 'leti';\n                } else {\n                    result += withoutSuffix || isFuture ? 'let' : 'leti';\n                }\n                return result;\n        }\n    }\n\n    var sl = moment.defineLocale('sl', {\n        months: 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split(\n            '_'\n        ),\n        monthsShort: 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split(\n            '_'\n        ),\n        monthsParseExact: true,\n        weekdays: 'nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota'.split('_'),\n        weekdaysShort: 'ned._pon._tor._sre._čet._pet._sob.'.split('_'),\n        weekdaysMin: 'ne_po_to_sr_če_pe_so'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD. MM. YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd, D. MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[danes ob] LT',\n            nextDay: '[jutri ob] LT',\n\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[v] [nedeljo] [ob] LT';\n                    case 3:\n                        return '[v] [sredo] [ob] LT';\n                    case 6:\n                        return '[v] [soboto] [ob] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[v] dddd [ob] LT';\n                }\n            },\n            lastDay: '[včeraj ob] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[prejšnjo] [nedeljo] [ob] LT';\n                    case 3:\n                        return '[prejšnjo] [sredo] [ob] LT';\n                    case 6:\n                        return '[prejšnjo] [soboto] [ob] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[prejšnji] dddd [ob] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'čez %s',\n            past: 'pred %s',\n            s: processRelativeTime,\n            ss: processRelativeTime,\n            m: processRelativeTime,\n            mm: processRelativeTime,\n            h: processRelativeTime,\n            hh: processRelativeTime,\n            d: processRelativeTime,\n            dd: processRelativeTime,\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return sl;\n\n})));\n","//! moment.js locale configuration\n//! locale : Albanian [sq]\n//! author : Flakërim Ismani : https://github.com/flakerimi\n//! author : Menelion Elensúle : https://github.com/Oire\n//! author : Oerd Cukalla : https://github.com/oerd\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 sq = moment.defineLocale('sq', {\n        months: 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj'.split('_'),\n        weekdays: 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split(\n            '_'\n        ),\n        weekdaysShort: 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'),\n        weekdaysMin: 'D_H_Ma_Më_E_P_Sh'.split('_'),\n        weekdaysParseExact: true,\n        meridiemParse: /PD|MD/,\n        isPM: function (input) {\n            return input.charAt(0) === 'M';\n        },\n        meridiem: function (hours, minutes, isLower) {\n            return hours < 12 ? 'PD' : 'MD';\n        },\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Sot në] LT',\n            nextDay: '[Nesër në] LT',\n            nextWeek: 'dddd [në] LT',\n            lastDay: '[Dje në] LT',\n            lastWeek: 'dddd [e kaluar në] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'në %s',\n            past: '%s më parë',\n            s: 'disa sekonda',\n            ss: '%d sekonda',\n            m: 'një minutë',\n            mm: '%d minuta',\n            h: 'një orë',\n            hh: '%d orë',\n            d: 'një ditë',\n            dd: '%d ditë',\n            M: 'një muaj',\n            MM: '%d muaj',\n            y: 'një vit',\n            yy: '%d vite',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\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 sq;\n\n})));\n","//! moment.js locale configuration\n//! locale : Serbian [sr]\n//! author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j\n//! author : Stefan Crnjaković <stefan@hotmail.rs> : https://github.com/crnjakovic\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 translator = {\n        words: {\n            //Different grammatical cases\n            ss: ['sekunda', 'sekunde', 'sekundi'],\n            m: ['jedan minut', 'jedne minute'],\n            mm: ['minut', 'minute', 'minuta'],\n            h: ['jedan sat', 'jednog sata'],\n            hh: ['sat', 'sata', 'sati'],\n            dd: ['dan', 'dana', 'dana'],\n            MM: ['mesec', 'meseca', 'meseci'],\n            yy: ['godina', 'godine', 'godina'],\n        },\n        correctGrammaticalCase: function (number, wordKey) {\n            return number === 1\n                ? wordKey[0]\n                : number >= 2 && number <= 4\n                ? wordKey[1]\n                : wordKey[2];\n        },\n        translate: function (number, withoutSuffix, key) {\n            var wordKey = translator.words[key];\n            if (key.length === 1) {\n                return withoutSuffix ? wordKey[0] : wordKey[1];\n            } else {\n                return (\n                    number +\n                    ' ' +\n                    translator.correctGrammaticalCase(number, wordKey)\n                );\n            }\n        },\n    };\n\n    var sr = moment.defineLocale('sr', {\n        months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split(\n            '_'\n        ),\n        monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split(\n            '_'\n        ),\n        monthsParseExact: true,\n        weekdays: 'nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota'.split(\n            '_'\n        ),\n        weekdaysShort: 'ned._pon._uto._sre._čet._pet._sub.'.split('_'),\n        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'D. M. YYYY.',\n            LL: 'D. MMMM YYYY.',\n            LLL: 'D. MMMM YYYY. H:mm',\n            LLLL: 'dddd, D. MMMM YYYY. H:mm',\n        },\n        calendar: {\n            sameDay: '[danas u] LT',\n            nextDay: '[sutra u] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[u] [nedelju] [u] LT';\n                    case 3:\n                        return '[u] [sredu] [u] LT';\n                    case 6:\n                        return '[u] [subotu] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[u] dddd [u] LT';\n                }\n            },\n            lastDay: '[juče u] LT',\n            lastWeek: function () {\n                var lastWeekDays = [\n                    '[prošle] [nedelje] [u] LT',\n                    '[prošlog] [ponedeljka] [u] LT',\n                    '[prošlog] [utorka] [u] LT',\n                    '[prošle] [srede] [u] LT',\n                    '[prošlog] [četvrtka] [u] LT',\n                    '[prošlog] [petka] [u] LT',\n                    '[prošle] [subote] [u] LT',\n                ];\n                return lastWeekDays[this.day()];\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'za %s',\n            past: 'pre %s',\n            s: 'nekoliko sekundi',\n            ss: translator.translate,\n            m: translator.translate,\n            mm: translator.translate,\n            h: translator.translate,\n            hh: translator.translate,\n            d: 'dan',\n            dd: translator.translate,\n            M: 'mesec',\n            MM: translator.translate,\n            y: 'godinu',\n            yy: translator.translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return sr;\n\n})));\n","//! moment.js locale configuration\n//! locale : Serbian Cyrillic [sr-cyrl]\n//! author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j\n//! author : Stefan Crnjaković <stefan@hotmail.rs> : https://github.com/crnjakovic\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 translator = {\n        words: {\n            //Different grammatical cases\n            ss: ['секунда', 'секунде', 'секунди'],\n            m: ['један минут', 'једне минуте'],\n            mm: ['минут', 'минуте', 'минута'],\n            h: ['један сат', 'једног сата'],\n            hh: ['сат', 'сата', 'сати'],\n            dd: ['дан', 'дана', 'дана'],\n            MM: ['месец', 'месеца', 'месеци'],\n            yy: ['година', 'године', 'година'],\n        },\n        correctGrammaticalCase: function (number, wordKey) {\n            return number === 1\n                ? wordKey[0]\n                : number >= 2 && number <= 4\n                ? wordKey[1]\n                : wordKey[2];\n        },\n        translate: function (number, withoutSuffix, key) {\n            var wordKey = translator.words[key];\n            if (key.length === 1) {\n                return withoutSuffix ? wordKey[0] : wordKey[1];\n            } else {\n                return (\n                    number +\n                    ' ' +\n                    translator.correctGrammaticalCase(number, wordKey)\n                );\n            }\n        },\n    };\n\n    var srCyrl = moment.defineLocale('sr-cyrl', {\n        months: 'јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар'.split(\n            '_'\n        ),\n        monthsShort: 'јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.'.split(\n            '_'\n        ),\n        monthsParseExact: true,\n        weekdays: 'недеља_понедељак_уторак_среда_четвртак_петак_субота'.split('_'),\n        weekdaysShort: 'нед._пон._уто._сре._чет._пет._суб.'.split('_'),\n        weekdaysMin: 'не_по_ут_ср_че_пе_су'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'D. M. YYYY.',\n            LL: 'D. MMMM YYYY.',\n            LLL: 'D. MMMM YYYY. H:mm',\n            LLLL: 'dddd, D. MMMM YYYY. H:mm',\n        },\n        calendar: {\n            sameDay: '[данас у] LT',\n            nextDay: '[сутра у] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[у] [недељу] [у] LT';\n                    case 3:\n                        return '[у] [среду] [у] LT';\n                    case 6:\n                        return '[у] [суботу] [у] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[у] dddd [у] LT';\n                }\n            },\n            lastDay: '[јуче у] LT',\n            lastWeek: function () {\n                var lastWeekDays = [\n                    '[прошле] [недеље] [у] LT',\n                    '[прошлог] [понедељка] [у] LT',\n                    '[прошлог] [уторка] [у] LT',\n                    '[прошле] [среде] [у] LT',\n                    '[прошлог] [четвртка] [у] LT',\n                    '[прошлог] [петка] [у] LT',\n                    '[прошле] [суботе] [у] LT',\n                ];\n                return lastWeekDays[this.day()];\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'за %s',\n            past: 'пре %s',\n            s: 'неколико секунди',\n            ss: translator.translate,\n            m: translator.translate,\n            mm: translator.translate,\n            h: translator.translate,\n            hh: translator.translate,\n            d: 'дан',\n            dd: translator.translate,\n            M: 'месец',\n            MM: translator.translate,\n            y: 'годину',\n            yy: translator.translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 1st is the first week of the year.\n        },\n    });\n\n    return srCyrl;\n\n})));\n","//! moment.js locale configuration\n//! locale : siSwati [ss]\n//! author : Nicolai Davies<mail@nicolai.io> : https://github.com/nicolaidavies\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 ss = moment.defineLocale('ss', {\n        months: \"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni\".split(\n            '_'\n        ),\n        monthsShort: 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'),\n        weekdays: 'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split(\n            '_'\n        ),\n        weekdaysShort: 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'),\n        weekdaysMin: 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY h:mm A',\n            LLLL: 'dddd, D MMMM YYYY h:mm A',\n        },\n        calendar: {\n            sameDay: '[Namuhla nga] LT',\n            nextDay: '[Kusasa nga] LT',\n            nextWeek: 'dddd [nga] LT',\n            lastDay: '[Itolo nga] LT',\n            lastWeek: 'dddd [leliphelile] [nga] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'nga %s',\n            past: 'wenteka nga %s',\n            s: 'emizuzwana lomcane',\n            ss: '%d mzuzwana',\n            m: 'umzuzu',\n            mm: '%d emizuzu',\n            h: 'lihora',\n            hh: '%d emahora',\n            d: 'lilanga',\n            dd: '%d emalanga',\n            M: 'inyanga',\n            MM: '%d tinyanga',\n            y: 'umnyaka',\n            yy: '%d iminyaka',\n        },\n        meridiemParse: /ekuseni|emini|entsambama|ebusuku/,\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'ekuseni';\n            } else if (hours < 15) {\n                return 'emini';\n            } else if (hours < 19) {\n                return 'entsambama';\n            } else {\n                return 'ebusuku';\n            }\n        },\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'ekuseni') {\n                return hour;\n            } else if (meridiem === 'emini') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'entsambama' || meridiem === 'ebusuku') {\n                if (hour === 0) {\n                    return 0;\n                }\n                return hour + 12;\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}/,\n        ordinal: '%d',\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 ss;\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 locale configuration\n//! locale : Swahili [sw]\n//! author : Fahad Kassim : https://github.com/fadsel\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 sw = moment.defineLocale('sw', {\n        months: 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'),\n        weekdays: 'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split(\n            '_'\n        ),\n        weekdaysShort: 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'),\n        weekdaysMin: 'J2_J3_J4_J5_Al_Ij_J1'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'hh:mm A',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[leo saa] LT',\n            nextDay: '[kesho saa] LT',\n            nextWeek: '[wiki ijayo] dddd [saat] LT',\n            lastDay: '[jana] LT',\n            lastWeek: '[wiki iliyopita] dddd [saat] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s baadaye',\n            past: 'tokea %s',\n            s: 'hivi punde',\n            ss: 'sekunde %d',\n            m: 'dakika moja',\n            mm: 'dakika %d',\n            h: 'saa limoja',\n            hh: 'masaa %d',\n            d: 'siku moja',\n            dd: 'siku %d',\n            M: 'mwezi mmoja',\n            MM: 'miezi %d',\n            y: 'mwaka mmoja',\n            yy: 'miaka %d',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return sw;\n\n})));\n","//! moment.js locale configuration\n//! locale : Tamil [ta]\n//! author : Arjunkumar Krishnamoorthy : https://github.com/tk120404\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 symbolMap = {\n            1: '௧',\n            2: '௨',\n            3: '௩',\n            4: '௪',\n            5: '௫',\n            6: '௬',\n            7: '௭',\n            8: '௮',\n            9: '௯',\n            0: '௦',\n        },\n        numberMap = {\n            '௧': '1',\n            '௨': '2',\n            '௩': '3',\n            '௪': '4',\n            '௫': '5',\n            '௬': '6',\n            '௭': '7',\n            '௮': '8',\n            '௯': '9',\n            '௦': '0',\n        };\n\n    var ta = moment.defineLocale('ta', {\n        months: 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split(\n            '_'\n        ),\n        monthsShort: 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split(\n            '_'\n        ),\n        weekdays: 'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split(\n            '_'\n        ),\n        weekdaysShort: 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split(\n            '_'\n        ),\n        weekdaysMin: 'ஞா_தி_செ_பு_வி_வெ_ச'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, HH:mm',\n            LLLL: 'dddd, D MMMM YYYY, HH:mm',\n        },\n        calendar: {\n            sameDay: '[இன்று] LT',\n            nextDay: '[நாளை] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[நேற்று] LT',\n            lastWeek: '[கடந்த வாரம்] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s இல்',\n            past: '%s முன்',\n            s: 'ஒரு சில விநாடிகள்',\n            ss: '%d விநாடிகள்',\n            m: 'ஒரு நிமிடம்',\n            mm: '%d நிமிடங்கள்',\n            h: 'ஒரு மணி நேரம்',\n            hh: '%d மணி நேரம்',\n            d: 'ஒரு நாள்',\n            dd: '%d நாட்கள்',\n            M: 'ஒரு மாதம்',\n            MM: '%d மாதங்கள்',\n            y: 'ஒரு வருடம்',\n            yy: '%d ஆண்டுகள்',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}வது/,\n        ordinal: function (number) {\n            return number + 'வது';\n        },\n        preparse: function (string) {\n            return string.replace(/[௧௨௩௪௫௬௭௮௯௦]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        // refer http://ta.wikipedia.org/s/1er1\n        meridiemParse: /யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 2) {\n                return ' யாமம்';\n            } else if (hour < 6) {\n                return ' வைகறை'; // வைகறை\n            } else if (hour < 10) {\n                return ' காலை'; // காலை\n            } else if (hour < 14) {\n                return ' நண்பகல்'; // நண்பகல்\n            } else if (hour < 18) {\n                return ' எற்பாடு'; // எற்பாடு\n            } else if (hour < 22) {\n                return ' மாலை'; // மாலை\n            } else {\n                return ' யாமம்';\n            }\n        },\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'யாமம்') {\n                return hour < 2 ? hour : hour + 12;\n            } else if (meridiem === 'வைகறை' || meridiem === 'காலை') {\n                return hour;\n            } else if (meridiem === 'நண்பகல்') {\n                return hour >= 10 ? hour : hour + 12;\n            } else {\n                return hour + 12;\n            }\n        },\n        week: {\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\n    return ta;\n\n})));\n","//! moment.js locale configuration\n//! locale : Telugu [te]\n//! author : Krishna Chaitanya Thota : https://github.com/kcthota\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 te = moment.defineLocale('te', {\n        months: 'జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జులై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్'.split(\n            '_'\n        ),\n        monthsShort: 'జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జులై_ఆగ._సెప్._అక్టో._నవ._డిసె.'.split(\n            '_'\n        ),\n        monthsParseExact: true,\n        weekdays: 'ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం'.split(\n            '_'\n        ),\n        weekdaysShort: 'ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని'.split('_'),\n        weekdaysMin: 'ఆ_సో_మం_బు_గు_శు_శ'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm',\n            LTS: 'A h:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm',\n        },\n        calendar: {\n            sameDay: '[నేడు] LT',\n            nextDay: '[రేపు] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[నిన్న] LT',\n            lastWeek: '[గత] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s లో',\n            past: '%s క్రితం',\n            s: 'కొన్ని క్షణాలు',\n            ss: '%d సెకన్లు',\n            m: 'ఒక నిమిషం',\n            mm: '%d నిమిషాలు',\n            h: 'ఒక గంట',\n            hh: '%d గంటలు',\n            d: 'ఒక రోజు',\n            dd: '%d రోజులు',\n            M: 'ఒక నెల',\n            MM: '%d నెలలు',\n            y: 'ఒక సంవత్సరం',\n            yy: '%d సంవత్సరాలు',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}వ/,\n        ordinal: '%dవ',\n        meridiemParse: /రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'రాత్రి') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'ఉదయం') {\n                return hour;\n            } else if (meridiem === 'మధ్యాహ్నం') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'సాయంత్రం') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'రాత్రి';\n            } else if (hour < 10) {\n                return 'ఉదయం';\n            } else if (hour < 17) {\n                return 'మధ్యాహ్నం';\n            } else if (hour < 20) {\n                return 'సాయంత్రం';\n            } else {\n                return 'రాత్రి';\n            }\n        },\n        week: {\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\n    return te;\n\n})));\n","//! moment.js locale configuration\n//! locale : Tetun Dili (East Timor) [tet]\n//! author : Joshua Brooks : https://github.com/joshbrooks\n//! author : Onorio De J. Afonso : https://github.com/marobo\n//! author : Sonia Simoes : https://github.com/soniasimoes\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 tet = moment.defineLocale('tet', {\n        months: 'Janeiru_Fevereiru_Marsu_Abril_Maiu_Juñu_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),\n        weekdays: 'Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu'.split('_'),\n        weekdaysShort: 'Dom_Seg_Ters_Kua_Kint_Sest_Sab'.split('_'),\n        weekdaysMin: 'Do_Seg_Te_Ku_Ki_Ses_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Ohin iha] LT',\n            nextDay: '[Aban iha] LT',\n            nextWeek: 'dddd [iha] LT',\n            lastDay: '[Horiseik iha] LT',\n            lastWeek: 'dddd [semana kotuk] [iha] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'iha %s',\n            past: '%s liuba',\n            s: 'segundu balun',\n            ss: 'segundu %d',\n            m: 'minutu ida',\n            mm: 'minutu %d',\n            h: 'oras ida',\n            hh: 'oras %d',\n            d: 'loron ida',\n            dd: 'loron %d',\n            M: 'fulan ida',\n            MM: 'fulan %d',\n            y: 'tinan ida',\n            yy: 'tinan %d',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((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        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 tet;\n\n})));\n","//! moment.js locale configuration\n//! locale : Tajik [tg]\n//! author : Orif N. Jr. : https://github.com/orif-jr\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 suffixes = {\n        0: '-ум',\n        1: '-ум',\n        2: '-юм',\n        3: '-юм',\n        4: '-ум',\n        5: '-ум',\n        6: '-ум',\n        7: '-ум',\n        8: '-ум',\n        9: '-ум',\n        10: '-ум',\n        12: '-ум',\n        13: '-ум',\n        20: '-ум',\n        30: '-юм',\n        40: '-ум',\n        50: '-ум',\n        60: '-ум',\n        70: '-ум',\n        80: '-ум',\n        90: '-ум',\n        100: '-ум',\n    };\n\n    var tg = moment.defineLocale('tg', {\n        months: {\n            format: 'январи_феврали_марти_апрели_майи_июни_июли_августи_сентябри_октябри_ноябри_декабри'.split(\n                '_'\n            ),\n            standalone: 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split(\n                '_'\n            ),\n        },\n        monthsShort: 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),\n        weekdays: 'якшанбе_душанбе_сешанбе_чоршанбе_панҷшанбе_ҷумъа_шанбе'.split(\n            '_'\n        ),\n        weekdaysShort: 'яшб_дшб_сшб_чшб_пшб_ҷум_шнб'.split('_'),\n        weekdaysMin: 'яш_дш_сш_чш_пш_ҷм_шб'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Имрӯз соати] LT',\n            nextDay: '[Фардо соати] LT',\n            lastDay: '[Дирӯз соати] LT',\n            nextWeek: 'dddd[и] [ҳафтаи оянда соати] LT',\n            lastWeek: 'dddd[и] [ҳафтаи гузашта соати] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'баъди %s',\n            past: '%s пеш',\n            s: 'якчанд сония',\n            m: 'як дақиқа',\n            mm: '%d дақиқа',\n            h: 'як соат',\n            hh: '%d соат',\n            d: 'як рӯз',\n            dd: '%d рӯз',\n            M: 'як моҳ',\n            MM: '%d моҳ',\n            y: 'як сол',\n            yy: '%d сол',\n        },\n        meridiemParse: /шаб|субҳ|рӯз|бегоҳ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'шаб') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'субҳ') {\n                return hour;\n            } else if (meridiem === 'рӯз') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'бегоҳ') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'шаб';\n            } else if (hour < 11) {\n                return 'субҳ';\n            } else if (hour < 16) {\n                return 'рӯз';\n            } else if (hour < 19) {\n                return 'бегоҳ';\n            } else {\n                return 'шаб';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ум|юм)/,\n        ordinal: function (number) {\n            var a = number % 10,\n                b = number >= 100 ? 100 : null;\n            return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 1th is the first week of the year.\n        },\n    });\n\n    return tg;\n\n})));\n","//! moment.js locale configuration\n//! locale : Thai [th]\n//! author : Kridsada Thanabulpong : https://github.com/sirn\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 th = moment.defineLocale('th', {\n        months: 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split(\n            '_'\n        ),\n        monthsShort: 'ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.'.split(\n            '_'\n        ),\n        monthsParseExact: true,\n        weekdays: 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'),\n        weekdaysShort: 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'), // yes, three characters difference\n        weekdaysMin: 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY เวลา H:mm',\n            LLLL: 'วันddddที่ D MMMM YYYY เวลา H:mm',\n        },\n        meridiemParse: /ก่อนเที่ยง|หลังเที่ยง/,\n        isPM: function (input) {\n            return input === 'หลังเที่ยง';\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ก่อนเที่ยง';\n            } else {\n                return 'หลังเที่ยง';\n            }\n        },\n        calendar: {\n            sameDay: '[วันนี้ เวลา] LT',\n            nextDay: '[พรุ่งนี้ เวลา] LT',\n            nextWeek: 'dddd[หน้า เวลา] LT',\n            lastDay: '[เมื่อวานนี้ เวลา] LT',\n            lastWeek: '[วัน]dddd[ที่แล้ว เวลา] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'อีก %s',\n            past: '%sที่แล้ว',\n            s: 'ไม่กี่วินาที',\n            ss: '%d วินาที',\n            m: '1 นาที',\n            mm: '%d นาที',\n            h: '1 ชั่วโมง',\n            hh: '%d ชั่วโมง',\n            d: '1 วัน',\n            dd: '%d วัน',\n            w: '1 สัปดาห์',\n            ww: '%d สัปดาห์',\n            M: '1 เดือน',\n            MM: '%d เดือน',\n            y: '1 ปี',\n            yy: '%d ปี',\n        },\n    });\n\n    return th;\n\n})));\n","//! moment.js locale configuration\n//! locale : Turkmen [tk]\n//! author : Atamyrat Abdyrahmanov : https://github.com/atamyratabdy\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 suffixes = {\n        1: \"'inji\",\n        5: \"'inji\",\n        8: \"'inji\",\n        70: \"'inji\",\n        80: \"'inji\",\n        2: \"'nji\",\n        7: \"'nji\",\n        20: \"'nji\",\n        50: \"'nji\",\n        3: \"'ünji\",\n        4: \"'ünji\",\n        100: \"'ünji\",\n        6: \"'njy\",\n        9: \"'unjy\",\n        10: \"'unjy\",\n        30: \"'unjy\",\n        60: \"'ynjy\",\n        90: \"'ynjy\",\n    };\n\n    var tk = moment.defineLocale('tk', {\n        months: 'Ýanwar_Fewral_Mart_Aprel_Maý_Iýun_Iýul_Awgust_Sentýabr_Oktýabr_Noýabr_Dekabr'.split(\n            '_'\n        ),\n        monthsShort: 'Ýan_Few_Mar_Apr_Maý_Iýn_Iýl_Awg_Sen_Okt_Noý_Dek'.split('_'),\n        weekdays: 'Ýekşenbe_Duşenbe_Sişenbe_Çarşenbe_Penşenbe_Anna_Şenbe'.split(\n            '_'\n        ),\n        weekdaysShort: 'Ýek_Duş_Siş_Çar_Pen_Ann_Şen'.split('_'),\n        weekdaysMin: 'Ýk_Dş_Sş_Çr_Pn_An_Şn'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[bugün sagat] LT',\n            nextDay: '[ertir sagat] LT',\n            nextWeek: '[indiki] dddd [sagat] LT',\n            lastDay: '[düýn] LT',\n            lastWeek: '[geçen] dddd [sagat] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s soň',\n            past: '%s öň',\n            s: 'birnäçe sekunt',\n            m: 'bir minut',\n            mm: '%d minut',\n            h: 'bir sagat',\n            hh: '%d sagat',\n            d: 'bir gün',\n            dd: '%d gün',\n            M: 'bir aý',\n            MM: '%d aý',\n            y: 'bir ýyl',\n            yy: '%d ýyl',\n        },\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'Do':\n                case 'DD':\n                    return number;\n                default:\n                    if (number === 0) {\n                        // special case for zero\n                        return number + \"'unjy\";\n                    }\n                    var a = number % 10,\n                        b = (number % 100) - a,\n                        c = number >= 100 ? 100 : null;\n                    return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return tk;\n\n})));\n","//! moment.js locale configuration\n//! locale : Tagalog (Philippines) [tl-ph]\n//! author : Dan Hagman : https://github.com/hagmandan\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 tlPh = moment.defineLocale('tl-ph', {\n        months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split(\n            '_'\n        ),\n        monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),\n        weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split(\n            '_'\n        ),\n        weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),\n        weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'MM/D/YYYY',\n            LL: 'MMMM D, YYYY',\n            LLL: 'MMMM D, YYYY HH:mm',\n            LLLL: 'dddd, MMMM DD, YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: 'LT [ngayong araw]',\n            nextDay: '[Bukas ng] LT',\n            nextWeek: 'LT [sa susunod na] dddd',\n            lastDay: 'LT [kahapon]',\n            lastWeek: 'LT [noong nakaraang] dddd',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'sa loob ng %s',\n            past: '%s ang nakalipas',\n            s: 'ilang segundo',\n            ss: '%d segundo',\n            m: 'isang minuto',\n            mm: '%d minuto',\n            h: 'isang oras',\n            hh: '%d oras',\n            d: 'isang araw',\n            dd: '%d araw',\n            M: 'isang buwan',\n            MM: '%d buwan',\n            y: 'isang taon',\n            yy: '%d taon',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}/,\n        ordinal: function (number) {\n            return number;\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 tlPh;\n\n})));\n","//! moment.js locale configuration\n//! locale : Klingon [tlh]\n//! author : Dominika Kruk : https://github.com/amaranthrose\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 numbersNouns = 'pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_');\n\n    function translateFuture(output) {\n        var time = output;\n        time =\n            output.indexOf('jaj') !== -1\n                ? time.slice(0, -3) + 'leS'\n                : output.indexOf('jar') !== -1\n                ? time.slice(0, -3) + 'waQ'\n                : output.indexOf('DIS') !== -1\n                ? time.slice(0, -3) + 'nem'\n                : time + ' pIq';\n        return time;\n    }\n\n    function translatePast(output) {\n        var time = output;\n        time =\n            output.indexOf('jaj') !== -1\n                ? time.slice(0, -3) + 'Hu’'\n                : output.indexOf('jar') !== -1\n                ? time.slice(0, -3) + 'wen'\n                : output.indexOf('DIS') !== -1\n                ? time.slice(0, -3) + 'ben'\n                : time + ' ret';\n        return time;\n    }\n\n    function translate(number, withoutSuffix, string, isFuture) {\n        var numberNoun = numberAsNoun(number);\n        switch (string) {\n            case 'ss':\n                return numberNoun + ' lup';\n            case 'mm':\n                return numberNoun + ' tup';\n            case 'hh':\n                return numberNoun + ' rep';\n            case 'dd':\n                return numberNoun + ' jaj';\n            case 'MM':\n                return numberNoun + ' jar';\n            case 'yy':\n                return numberNoun + ' DIS';\n        }\n    }\n\n    function numberAsNoun(number) {\n        var hundred = Math.floor((number % 1000) / 100),\n            ten = Math.floor((number % 100) / 10),\n            one = number % 10,\n            word = '';\n        if (hundred > 0) {\n            word += numbersNouns[hundred] + 'vatlh';\n        }\n        if (ten > 0) {\n            word += (word !== '' ? ' ' : '') + numbersNouns[ten] + 'maH';\n        }\n        if (one > 0) {\n            word += (word !== '' ? ' ' : '') + numbersNouns[one];\n        }\n        return word === '' ? 'pagh' : word;\n    }\n\n    var tlh = moment.defineLocale('tlh', {\n        months: 'tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’'.split(\n            '_'\n        ),\n        monthsShort: 'jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’'.split(\n            '_'\n        ),\n        monthsParseExact: true,\n        weekdays: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split(\n            '_'\n        ),\n        weekdaysShort: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split(\n            '_'\n        ),\n        weekdaysMin: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split(\n            '_'\n        ),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[DaHjaj] LT',\n            nextDay: '[wa’leS] LT',\n            nextWeek: 'LLL',\n            lastDay: '[wa’Hu’] LT',\n            lastWeek: 'LLL',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: translateFuture,\n            past: translatePast,\n            s: 'puS lup',\n            ss: translate,\n            m: 'wa’ tup',\n            mm: translate,\n            h: 'wa’ rep',\n            hh: translate,\n            d: 'wa’ jaj',\n            dd: translate,\n            M: 'wa’ jar',\n            MM: translate,\n            y: 'wa’ DIS',\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\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 tlh;\n\n})));\n","//! moment.js locale configuration\n//! locale : Turkish [tr]\n//! authors : Erhan Gundogan : https://github.com/erhangundogan,\n//!           Burak Yiğit Kaya: https://github.com/BYK\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 suffixes = {\n        1: \"'inci\",\n        5: \"'inci\",\n        8: \"'inci\",\n        70: \"'inci\",\n        80: \"'inci\",\n        2: \"'nci\",\n        7: \"'nci\",\n        20: \"'nci\",\n        50: \"'nci\",\n        3: \"'üncü\",\n        4: \"'üncü\",\n        100: \"'üncü\",\n        6: \"'ncı\",\n        9: \"'uncu\",\n        10: \"'uncu\",\n        30: \"'uncu\",\n        60: \"'ıncı\",\n        90: \"'ıncı\",\n    };\n\n    var tr = moment.defineLocale('tr', {\n        months: 'Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık'.split(\n            '_'\n        ),\n        monthsShort: 'Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara'.split('_'),\n        weekdays: 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split(\n            '_'\n        ),\n        weekdaysShort: 'Paz_Pts_Sal_Çar_Per_Cum_Cts'.split('_'),\n        weekdaysMin: 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'),\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 12) {\n                return isLower ? 'öö' : 'ÖÖ';\n            } else {\n                return isLower ? 'ös' : 'ÖS';\n            }\n        },\n        meridiemParse: /öö|ÖÖ|ös|ÖS/,\n        isPM: function (input) {\n            return input === 'ös' || input === 'ÖS';\n        },\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[bugün saat] LT',\n            nextDay: '[yarın saat] LT',\n            nextWeek: '[gelecek] dddd [saat] LT',\n            lastDay: '[dün] LT',\n            lastWeek: '[geçen] dddd [saat] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s sonra',\n            past: '%s önce',\n            s: 'birkaç saniye',\n            ss: '%d saniye',\n            m: 'bir dakika',\n            mm: '%d dakika',\n            h: 'bir saat',\n            hh: '%d saat',\n            d: 'bir gün',\n            dd: '%d gün',\n            w: 'bir hafta',\n            ww: '%d hafta',\n            M: 'bir ay',\n            MM: '%d ay',\n            y: 'bir yıl',\n            yy: '%d yıl',\n        },\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'Do':\n                case 'DD':\n                    return number;\n                default:\n                    if (number === 0) {\n                        // special case for zero\n                        return number + \"'ıncı\";\n                    }\n                    var a = number % 10,\n                        b = (number % 100) - a,\n                        c = number >= 100 ? 100 : null;\n                    return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return tr;\n\n})));\n","//! moment.js locale configuration\n//! locale : Talossan [tzl]\n//! author : Robin van der Vliet : https://github.com/robin0van0der0v\n//! author : Iustì Canun\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    // After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals.\n    // This is currently too difficult (maybe even impossible) to add.\n    var tzl = moment.defineLocale('tzl', {\n        months: 'Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec'.split('_'),\n        weekdays: 'Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi'.split('_'),\n        weekdaysShort: 'Súl_Lún_Mai_Már_Xhú_Vié_Sát'.split('_'),\n        weekdaysMin: 'Sú_Lú_Ma_Má_Xh_Vi_Sá'.split('_'),\n        longDateFormat: {\n            LT: 'HH.mm',\n            LTS: 'HH.mm.ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM [dallas] YYYY',\n            LLL: 'D. MMMM [dallas] YYYY HH.mm',\n            LLLL: 'dddd, [li] D. MMMM [dallas] YYYY HH.mm',\n        },\n        meridiemParse: /d\\'o|d\\'a/i,\n        isPM: function (input) {\n            return \"d'o\" === input.toLowerCase();\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours > 11) {\n                return isLower ? \"d'o\" : \"D'O\";\n            } else {\n                return isLower ? \"d'a\" : \"D'A\";\n            }\n        },\n        calendar: {\n            sameDay: '[oxhi à] LT',\n            nextDay: '[demà à] LT',\n            nextWeek: 'dddd [à] LT',\n            lastDay: '[ieiri à] LT',\n            lastWeek: '[sür el] dddd [lasteu à] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'osprei %s',\n            past: 'ja%s',\n            s: processRelativeTime,\n            ss: processRelativeTime,\n            m: processRelativeTime,\n            mm: processRelativeTime,\n            h: processRelativeTime,\n            hh: processRelativeTime,\n            d: processRelativeTime,\n            dd: processRelativeTime,\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\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    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            s: ['viensas secunds', \"'iensas secunds\"],\n            ss: [number + ' secunds', '' + number + ' secunds'],\n            m: [\"'n míut\", \"'iens míut\"],\n            mm: [number + ' míuts', '' + number + ' míuts'],\n            h: [\"'n þora\", \"'iensa þora\"],\n            hh: [number + ' þoras', '' + number + ' þoras'],\n            d: [\"'n ziua\", \"'iensa ziua\"],\n            dd: [number + ' ziuas', '' + number + ' ziuas'],\n            M: [\"'n mes\", \"'iens mes\"],\n            MM: [number + ' mesen', '' + number + ' mesen'],\n            y: [\"'n ar\", \"'iens ar\"],\n            yy: [number + ' ars', '' + number + ' ars'],\n        };\n        return isFuture\n            ? format[key][0]\n            : withoutSuffix\n            ? format[key][0]\n            : format[key][1];\n    }\n\n    return tzl;\n\n})));\n","//! moment.js locale configuration\n//! locale : Central Atlas Tamazight [tzm]\n//! author : Abdel Said : https://github.com/abdelsaid\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 tzm = moment.defineLocale('tzm', {\n        months: 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split(\n            '_'\n        ),\n        monthsShort: 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split(\n            '_'\n        ),\n        weekdays: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n        weekdaysShort: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n        weekdaysMin: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[ⴰⵙⴷⵅ ⴴ] LT',\n            nextDay: '[ⴰⵙⴽⴰ ⴴ] LT',\n            nextWeek: 'dddd [ⴴ] LT',\n            lastDay: '[ⴰⵚⴰⵏⵜ ⴴ] LT',\n            lastWeek: 'dddd [ⴴ] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s',\n            past: 'ⵢⴰⵏ %s',\n            s: 'ⵉⵎⵉⴽ',\n            ss: '%d ⵉⵎⵉⴽ',\n            m: 'ⵎⵉⵏⵓⴺ',\n            mm: '%d ⵎⵉⵏⵓⴺ',\n            h: 'ⵙⴰⵄⴰ',\n            hh: '%d ⵜⴰⵙⵙⴰⵄⵉⵏ',\n            d: 'ⴰⵙⵙ',\n            dd: '%d oⵙⵙⴰⵏ',\n            M: 'ⴰⵢoⵓⵔ',\n            MM: '%d ⵉⵢⵢⵉⵔⵏ',\n            y: 'ⴰⵙⴳⴰⵙ',\n            yy: '%d ⵉⵙⴳⴰⵙⵏ',\n        },\n        week: {\n            dow: 6, // Saturday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    return tzm;\n\n})));\n","//! moment.js locale configuration\n//! locale : Central Atlas Tamazight Latin [tzm-latn]\n//! author : Abdel Said : https://github.com/abdelsaid\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 tzmLatn = moment.defineLocale('tzm-latn', {\n        months: 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split(\n            '_'\n        ),\n        monthsShort: 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split(\n            '_'\n        ),\n        weekdays: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n        weekdaysShort: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n        weekdaysMin: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[asdkh g] LT',\n            nextDay: '[aska g] LT',\n            nextWeek: 'dddd [g] LT',\n            lastDay: '[assant g] LT',\n            lastWeek: 'dddd [g] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'dadkh s yan %s',\n            past: 'yan %s',\n            s: 'imik',\n            ss: '%d imik',\n            m: 'minuḍ',\n            mm: '%d minuḍ',\n            h: 'saɛa',\n            hh: '%d tassaɛin',\n            d: 'ass',\n            dd: '%d ossan',\n            M: 'ayowr',\n            MM: '%d iyyirn',\n            y: 'asgas',\n            yy: '%d isgasn',\n        },\n        week: {\n            dow: 6, // Saturday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    return tzmLatn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Uyghur (China) [ug-cn]\n//! author: boyaq : https://github.com/boyaq\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 ugCn = moment.defineLocale('ug-cn', {\n        months: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split(\n            '_'\n        ),\n        monthsShort: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split(\n            '_'\n        ),\n        weekdays: 'يەكشەنبە_دۈشەنبە_سەيشەنبە_چارشەنبە_پەيشەنبە_جۈمە_شەنبە'.split(\n            '_'\n        ),\n        weekdaysShort: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),\n        weekdaysMin: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: 'YYYY-يىلىM-ئاينىڭD-كۈنى',\n            LLL: 'YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm',\n            LLLL: 'dddd، YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm',\n        },\n        meridiemParse: /يېرىم كېچە|سەھەر|چۈشتىن بۇرۇن|چۈش|چۈشتىن كېيىن|كەچ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (\n                meridiem === 'يېرىم كېچە' ||\n                meridiem === 'سەھەر' ||\n                meridiem === 'چۈشتىن بۇرۇن'\n            ) {\n                return hour;\n            } else if (meridiem === 'چۈشتىن كېيىن' || meridiem === 'كەچ') {\n                return hour + 12;\n            } else {\n                return hour >= 11 ? hour : hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return 'يېرىم كېچە';\n            } else if (hm < 900) {\n                return 'سەھەر';\n            } else if (hm < 1130) {\n                return 'چۈشتىن بۇرۇن';\n            } else if (hm < 1230) {\n                return 'چۈش';\n            } else if (hm < 1800) {\n                return 'چۈشتىن كېيىن';\n            } else {\n                return 'كەچ';\n            }\n        },\n        calendar: {\n            sameDay: '[بۈگۈن سائەت] LT',\n            nextDay: '[ئەتە سائەت] LT',\n            nextWeek: '[كېلەركى] dddd [سائەت] LT',\n            lastDay: '[تۆنۈگۈن] LT',\n            lastWeek: '[ئالدىنقى] dddd [سائەت] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s كېيىن',\n            past: '%s بۇرۇن',\n            s: 'نەچچە سېكونت',\n            ss: '%d سېكونت',\n            m: 'بىر مىنۇت',\n            mm: '%d مىنۇت',\n            h: 'بىر سائەت',\n            hh: '%d سائەت',\n            d: 'بىر كۈن',\n            dd: '%d كۈن',\n            M: 'بىر ئاي',\n            MM: '%d ئاي',\n            y: 'بىر يىل',\n            yy: '%d يىل',\n        },\n\n        dayOfMonthOrdinalParse: /\\d{1,2}(-كۈنى|-ئاي|-ھەپتە)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '-كۈنى';\n                case 'w':\n                case 'W':\n                    return number + '-ھەپتە';\n                default:\n                    return number;\n            }\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week: {\n            // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 1st is the first week of the year.\n        },\n    });\n\n    return ugCn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Ukrainian [uk]\n//! author : zemlanin : https://github.com/zemlanin\n//! Author : Menelion Elensúle : https://github.com/Oire\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    function plural(word, num) {\n        var forms = word.split('_');\n        return num % 10 === 1 && num % 100 !== 11\n            ? forms[0]\n            : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)\n            ? forms[1]\n            : forms[2];\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n            ss: withoutSuffix ? 'секунда_секунди_секунд' : 'секунду_секунди_секунд',\n            mm: withoutSuffix ? 'хвилина_хвилини_хвилин' : 'хвилину_хвилини_хвилин',\n            hh: withoutSuffix ? 'година_години_годин' : 'годину_години_годин',\n            dd: 'день_дні_днів',\n            MM: 'місяць_місяці_місяців',\n            yy: 'рік_роки_років',\n        };\n        if (key === 'm') {\n            return withoutSuffix ? 'хвилина' : 'хвилину';\n        } else if (key === 'h') {\n            return withoutSuffix ? 'година' : 'годину';\n        } else {\n            return number + ' ' + plural(format[key], +number);\n        }\n    }\n    function weekdaysCaseReplace(m, format) {\n        var weekdays = {\n                nominative: 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split(\n                    '_'\n                ),\n                accusative: 'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split(\n                    '_'\n                ),\n                genitive: 'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split(\n                    '_'\n                ),\n            },\n            nounCase;\n\n        if (m === true) {\n            return weekdays['nominative']\n                .slice(1, 7)\n                .concat(weekdays['nominative'].slice(0, 1));\n        }\n        if (!m) {\n            return weekdays['nominative'];\n        }\n\n        nounCase = /(\\[[ВвУу]\\]) ?dddd/.test(format)\n            ? 'accusative'\n            : /\\[?(?:минулої|наступної)? ?\\] ?dddd/.test(format)\n            ? 'genitive'\n            : 'nominative';\n        return weekdays[nounCase][m.day()];\n    }\n    function processHoursFunction(str) {\n        return function () {\n            return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT';\n        };\n    }\n\n    var uk = moment.defineLocale('uk', {\n        months: {\n            format: 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split(\n                '_'\n            ),\n            standalone: 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split(\n                '_'\n            ),\n        },\n        monthsShort: 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split(\n            '_'\n        ),\n        weekdays: weekdaysCaseReplace,\n        weekdaysShort: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n        weekdaysMin: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY р.',\n            LLL: 'D MMMM YYYY р., HH:mm',\n            LLLL: 'dddd, D MMMM YYYY р., HH:mm',\n        },\n        calendar: {\n            sameDay: processHoursFunction('[Сьогодні '),\n            nextDay: processHoursFunction('[Завтра '),\n            lastDay: processHoursFunction('[Вчора '),\n            nextWeek: processHoursFunction('[У] dddd ['),\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 5:\n                    case 6:\n                        return processHoursFunction('[Минулої] dddd [').call(this);\n                    case 1:\n                    case 2:\n                    case 4:\n                        return processHoursFunction('[Минулого] dddd [').call(this);\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'за %s',\n            past: '%s тому',\n            s: 'декілька секунд',\n            ss: relativeTimeWithPlural,\n            m: relativeTimeWithPlural,\n            mm: relativeTimeWithPlural,\n            h: 'годину',\n            hh: relativeTimeWithPlural,\n            d: 'день',\n            dd: relativeTimeWithPlural,\n            M: 'місяць',\n            MM: relativeTimeWithPlural,\n            y: 'рік',\n            yy: relativeTimeWithPlural,\n        },\n        // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason\n        meridiemParse: /ночі|ранку|дня|вечора/,\n        isPM: function (input) {\n            return /^(дня|вечора)$/.test(input);\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ночі';\n            } else if (hour < 12) {\n                return 'ранку';\n            } else if (hour < 17) {\n                return 'дня';\n            } else {\n                return 'вечора';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(й|го)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'M':\n                case 'd':\n                case 'DDD':\n                case 'w':\n                case 'W':\n                    return number + '-й';\n                case 'D':\n                    return number + '-го';\n                default:\n                    return number;\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return uk;\n\n})));\n","//! moment.js locale configuration\n//! locale : Urdu [ur]\n//! author : Sawood Alam : https://github.com/ibnesayeed\n//! author : Zack : https://github.com/ZackVision\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 months = [\n            'جنوری',\n            'فروری',\n            'مارچ',\n            'اپریل',\n            'مئی',\n            'جون',\n            'جولائی',\n            'اگست',\n            'ستمبر',\n            'اکتوبر',\n            'نومبر',\n            'دسمبر',\n        ],\n        days = ['اتوار', 'پیر', 'منگل', 'بدھ', 'جمعرات', 'جمعہ', 'ہفتہ'];\n\n    var ur = moment.defineLocale('ur', {\n        months: months,\n        monthsShort: months,\n        weekdays: days,\n        weekdaysShort: days,\n        weekdaysMin: days,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd، D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /صبح|شام/,\n        isPM: function (input) {\n            return 'شام' === input;\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'صبح';\n            }\n            return 'شام';\n        },\n        calendar: {\n            sameDay: '[آج بوقت] LT',\n            nextDay: '[کل بوقت] LT',\n            nextWeek: 'dddd [بوقت] LT',\n            lastDay: '[گذشتہ روز بوقت] LT',\n            lastWeek: '[گذشتہ] dddd [بوقت] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s بعد',\n            past: '%s قبل',\n            s: 'چند سیکنڈ',\n            ss: '%d سیکنڈ',\n            m: 'ایک منٹ',\n            mm: '%d منٹ',\n            h: 'ایک گھنٹہ',\n            hh: '%d گھنٹے',\n            d: 'ایک دن',\n            dd: '%d دن',\n            M: 'ایک ماہ',\n            MM: '%d ماہ',\n            y: 'ایک سال',\n            yy: '%d سال',\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\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 ur;\n\n})));\n","//! moment.js locale configuration\n//! locale : Uzbek [uz]\n//! author : Sardor Muminov : https://github.com/muminoff\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 uz = moment.defineLocale('uz', {\n        months: 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split(\n            '_'\n        ),\n        monthsShort: 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),\n        weekdays: 'Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба'.split('_'),\n        weekdaysShort: 'Якш_Душ_Сеш_Чор_Пай_Жум_Шан'.split('_'),\n        weekdaysMin: 'Як_Ду_Се_Чо_Па_Жу_Ша'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'D MMMM YYYY, dddd HH:mm',\n        },\n        calendar: {\n            sameDay: '[Бугун соат] LT [да]',\n            nextDay: '[Эртага] LT [да]',\n            nextWeek: 'dddd [куни соат] LT [да]',\n            lastDay: '[Кеча соат] LT [да]',\n            lastWeek: '[Утган] dddd [куни соат] LT [да]',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'Якин %s ичида',\n            past: 'Бир неча %s олдин',\n            s: 'фурсат',\n            ss: '%d фурсат',\n            m: 'бир дакика',\n            mm: '%d дакика',\n            h: 'бир соат',\n            hh: '%d соат',\n            d: 'бир кун',\n            dd: '%d кун',\n            M: 'бир ой',\n            MM: '%d ой',\n            y: 'бир йил',\n            yy: '%d йил',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return uz;\n\n})));\n","//! moment.js locale configuration\n//! locale : Uzbek Latin [uz-latn]\n//! author : Rasulbek Mirzayev : github.com/Rasulbeeek\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 uzLatn = moment.defineLocale('uz-latn', {\n        months: 'Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr'.split(\n            '_'\n        ),\n        monthsShort: 'Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek'.split('_'),\n        weekdays: 'Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba'.split(\n            '_'\n        ),\n        weekdaysShort: 'Yak_Dush_Sesh_Chor_Pay_Jum_Shan'.split('_'),\n        weekdaysMin: 'Ya_Du_Se_Cho_Pa_Ju_Sha'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'D MMMM YYYY, dddd HH:mm',\n        },\n        calendar: {\n            sameDay: '[Bugun soat] LT [da]',\n            nextDay: '[Ertaga] LT [da]',\n            nextWeek: 'dddd [kuni soat] LT [da]',\n            lastDay: '[Kecha soat] LT [da]',\n            lastWeek: \"[O'tgan] dddd [kuni soat] LT [da]\",\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'Yaqin %s ichida',\n            past: 'Bir necha %s oldin',\n            s: 'soniya',\n            ss: '%d soniya',\n            m: 'bir daqiqa',\n            mm: '%d daqiqa',\n            h: 'bir soat',\n            hh: '%d soat',\n            d: 'bir kun',\n            dd: '%d kun',\n            M: 'bir oy',\n            MM: '%d oy',\n            y: 'bir yil',\n            yy: '%d yil',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return uzLatn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Vietnamese [vi]\n//! author : Bang Nguyen : https://github.com/bangnk\n//! author : Chien Kira : https://github.com/chienkira\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 vi = moment.defineLocale('vi', {\n        months: 'tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12'.split(\n            '_'\n        ),\n        monthsShort: 'Thg 01_Thg 02_Thg 03_Thg 04_Thg 05_Thg 06_Thg 07_Thg 08_Thg 09_Thg 10_Thg 11_Thg 12'.split(\n            '_'\n        ),\n        monthsParseExact: true,\n        weekdays: 'chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy'.split(\n            '_'\n        ),\n        weekdaysShort: 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n        weekdaysMin: 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n        weekdaysParseExact: true,\n        meridiemParse: /sa|ch/i,\n        isPM: function (input) {\n            return /^ch$/i.test(input);\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 12) {\n                return isLower ? 'sa' : 'SA';\n            } else {\n                return isLower ? 'ch' : 'CH';\n            }\n        },\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM [năm] YYYY',\n            LLL: 'D MMMM [năm] YYYY HH:mm',\n            LLLL: 'dddd, D MMMM [năm] YYYY HH:mm',\n            l: 'DD/M/YYYY',\n            ll: 'D MMM YYYY',\n            lll: 'D MMM YYYY HH:mm',\n            llll: 'ddd, D MMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Hôm nay lúc] LT',\n            nextDay: '[Ngày mai lúc] LT',\n            nextWeek: 'dddd [tuần tới lúc] LT',\n            lastDay: '[Hôm qua lúc] LT',\n            lastWeek: 'dddd [tuần trước lúc] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s tới',\n            past: '%s trước',\n            s: 'vài giây',\n            ss: '%d giây',\n            m: 'một phút',\n            mm: '%d phút',\n            h: 'một giờ',\n            hh: '%d giờ',\n            d: 'một ngày',\n            dd: '%d ngày',\n            w: 'một tuần',\n            ww: '%d tuần',\n            M: 'một tháng',\n            MM: '%d tháng',\n            y: 'một năm',\n            yy: '%d năm',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}/,\n        ordinal: function (number) {\n            return number;\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 vi;\n\n})));\n","//! moment.js locale configuration\n//! locale : Pseudo [x-pseudo]\n//! author : Andrew Hood : https://github.com/andrewhood125\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 xPseudo = moment.defineLocale('x-pseudo', {\n        months: 'J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér'.split(\n            '_'\n        ),\n        monthsShort: 'J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc'.split(\n            '_'\n        ),\n        monthsParseExact: true,\n        weekdays: 'S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý'.split(\n            '_'\n        ),\n        weekdaysShort: 'S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát'.split('_'),\n        weekdaysMin: 'S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[T~ódá~ý át] LT',\n            nextDay: '[T~ómó~rró~w át] LT',\n            nextWeek: 'dddd [át] LT',\n            lastDay: '[Ý~ést~érdá~ý át] LT',\n            lastWeek: '[L~ást] dddd [át] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'í~ñ %s',\n            past: '%s á~gó',\n            s: 'á ~féw ~sécó~ñds',\n            ss: '%d s~écóñ~ds',\n            m: 'á ~míñ~úté',\n            mm: '%d m~íñú~tés',\n            h: 'á~ñ hó~úr',\n            hh: '%d h~óúrs',\n            d: 'á ~dáý',\n            dd: '%d d~áýs',\n            M: 'á ~móñ~th',\n            MM: '%d m~óñt~hs',\n            y: 'á ~ýéár',\n            yy: '%d ý~éárs',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((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        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 xPseudo;\n\n})));\n","//! moment.js locale configuration\n//! locale : Yoruba Nigeria [yo]\n//! author : Atolagbe Abisoye : https://github.com/andela-batolagbe\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 yo = moment.defineLocale('yo', {\n        months: 'Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀'.split(\n            '_'\n        ),\n        monthsShort: 'Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀'.split('_'),\n        weekdays: 'Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta'.split('_'),\n        weekdaysShort: 'Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá'.split('_'),\n        weekdaysMin: 'Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb'.split('_'),\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY h:mm A',\n            LLLL: 'dddd, D MMMM YYYY h:mm A',\n        },\n        calendar: {\n            sameDay: '[Ònì ni] LT',\n            nextDay: '[Ọ̀la ni] LT',\n            nextWeek: \"dddd [Ọsẹ̀ tón'bọ] [ni] LT\",\n            lastDay: '[Àna ni] LT',\n            lastWeek: 'dddd [Ọsẹ̀ tólọ́] [ni] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'ní %s',\n            past: '%s kọjá',\n            s: 'ìsẹjú aayá die',\n            ss: 'aayá %d',\n            m: 'ìsẹjú kan',\n            mm: 'ìsẹjú %d',\n            h: 'wákati kan',\n            hh: 'wákati %d',\n            d: 'ọjọ́ kan',\n            dd: 'ọjọ́ %d',\n            M: 'osù kan',\n            MM: 'osù %d',\n            y: 'ọdún kan',\n            yy: 'ọdún %d',\n        },\n        dayOfMonthOrdinalParse: /ọjọ́\\s\\d{1,2}/,\n        ordinal: 'ọjọ́ %d',\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 yo;\n\n})));\n","//! moment.js locale configuration\n//! locale : Chinese (China) [zh-cn]\n//! author : suupic : https://github.com/suupic\n//! author : Zeno Zeng : https://github.com/zenozeng\n//! author : uu109 : https://github.com/uu109\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 zhCn = moment.defineLocale('zh-cn', {\n        months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(\n            '_'\n        ),\n        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n            '_'\n        ),\n        weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n        weekdaysShort: '周日_周一_周二_周三_周四_周五_周六'.split('_'),\n        weekdaysMin: '日_一_二_三_四_五_六'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY/MM/DD',\n            LL: 'YYYY年M月D日',\n            LLL: 'YYYY年M月D日Ah点mm分',\n            LLLL: 'YYYY年M月D日ddddAh点mm分',\n            l: 'YYYY/M/D',\n            ll: 'YYYY年M月D日',\n            lll: 'YYYY年M月D日 HH:mm',\n            llll: 'YYYY年M月D日dddd HH:mm',\n        },\n        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n                return hour;\n            } else if (meridiem === '下午' || meridiem === '晚上') {\n                return hour + 12;\n            } else {\n                // '中午'\n                return hour >= 11 ? hour : hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return '凌晨';\n            } else if (hm < 900) {\n                return '早上';\n            } else if (hm < 1130) {\n                return '上午';\n            } else if (hm < 1230) {\n                return '中午';\n            } else if (hm < 1800) {\n                return '下午';\n            } else {\n                return '晚上';\n            }\n        },\n        calendar: {\n            sameDay: '[今天]LT',\n            nextDay: '[明天]LT',\n            nextWeek: function (now) {\n                if (now.week() !== this.week()) {\n                    return '[下]dddLT';\n                } else {\n                    return '[本]dddLT';\n                }\n            },\n            lastDay: '[昨天]LT',\n            lastWeek: function (now) {\n                if (this.week() !== now.week()) {\n                    return '[上]dddLT';\n                } else {\n                    return '[本]dddLT';\n                }\n            },\n            sameElse: 'L',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(日|月|周)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '日';\n                case 'M':\n                    return number + '月';\n                case 'w':\n                case 'W':\n                    return number + '周';\n                default:\n                    return number;\n            }\n        },\n        relativeTime: {\n            future: '%s后',\n            past: '%s前',\n            s: '几秒',\n            ss: '%d 秒',\n            m: '1 分钟',\n            mm: '%d 分钟',\n            h: '1 小时',\n            hh: '%d 小时',\n            d: '1 天',\n            dd: '%d 天',\n            w: '1 周',\n            ww: '%d 周',\n            M: '1 个月',\n            MM: '%d 个月',\n            y: '1 年',\n            yy: '%d 年',\n        },\n        week: {\n            // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效\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 zhCn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Chinese (Hong Kong) [zh-hk]\n//! author : Ben : https://github.com/ben-lin\n//! author : Chris Lam : https://github.com/hehachris\n//! author : Konstantin : https://github.com/skfd\n//! author : Anthony : https://github.com/anthonylau\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 zhHk = moment.defineLocale('zh-hk', {\n        months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(\n            '_'\n        ),\n        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n            '_'\n        ),\n        weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n        weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n        weekdaysMin: '日_一_二_三_四_五_六'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY/MM/DD',\n            LL: 'YYYY年M月D日',\n            LLL: 'YYYY年M月D日 HH:mm',\n            LLLL: 'YYYY年M月D日dddd HH:mm',\n            l: 'YYYY/M/D',\n            ll: 'YYYY年M月D日',\n            lll: 'YYYY年M月D日 HH:mm',\n            llll: 'YYYY年M月D日dddd HH:mm',\n        },\n        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n                return hour;\n            } else if (meridiem === '中午') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === '下午' || meridiem === '晚上') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return '凌晨';\n            } else if (hm < 900) {\n                return '早上';\n            } else if (hm < 1200) {\n                return '上午';\n            } else if (hm === 1200) {\n                return '中午';\n            } else if (hm < 1800) {\n                return '下午';\n            } else {\n                return '晚上';\n            }\n        },\n        calendar: {\n            sameDay: '[今天]LT',\n            nextDay: '[明天]LT',\n            nextWeek: '[下]ddddLT',\n            lastDay: '[昨天]LT',\n            lastWeek: '[上]ddddLT',\n            sameElse: 'L',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '日';\n                case 'M':\n                    return number + '月';\n                case 'w':\n                case 'W':\n                    return number + '週';\n                default:\n                    return number;\n            }\n        },\n        relativeTime: {\n            future: '%s後',\n            past: '%s前',\n            s: '幾秒',\n            ss: '%d 秒',\n            m: '1 分鐘',\n            mm: '%d 分鐘',\n            h: '1 小時',\n            hh: '%d 小時',\n            d: '1 天',\n            dd: '%d 天',\n            M: '1 個月',\n            MM: '%d 個月',\n            y: '1 年',\n            yy: '%d 年',\n        },\n    });\n\n    return zhHk;\n\n})));\n","//! moment.js locale configuration\n//! locale : Chinese (Macau) [zh-mo]\n//! author : Ben : https://github.com/ben-lin\n//! author : Chris Lam : https://github.com/hehachris\n//! author : Tan Yuanhong : https://github.com/le0tan\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 zhMo = moment.defineLocale('zh-mo', {\n        months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(\n            '_'\n        ),\n        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n            '_'\n        ),\n        weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n        weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n        weekdaysMin: '日_一_二_三_四_五_六'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'YYYY年M月D日',\n            LLL: 'YYYY年M月D日 HH:mm',\n            LLLL: 'YYYY年M月D日dddd HH:mm',\n            l: 'D/M/YYYY',\n            ll: 'YYYY年M月D日',\n            lll: 'YYYY年M月D日 HH:mm',\n            llll: 'YYYY年M月D日dddd HH:mm',\n        },\n        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n                return hour;\n            } else if (meridiem === '中午') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === '下午' || meridiem === '晚上') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return '凌晨';\n            } else if (hm < 900) {\n                return '早上';\n            } else if (hm < 1130) {\n                return '上午';\n            } else if (hm < 1230) {\n                return '中午';\n            } else if (hm < 1800) {\n                return '下午';\n            } else {\n                return '晚上';\n            }\n        },\n        calendar: {\n            sameDay: '[今天] LT',\n            nextDay: '[明天] LT',\n            nextWeek: '[下]dddd LT',\n            lastDay: '[昨天] LT',\n            lastWeek: '[上]dddd LT',\n            sameElse: 'L',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '日';\n                case 'M':\n                    return number + '月';\n                case 'w':\n                case 'W':\n                    return number + '週';\n                default:\n                    return number;\n            }\n        },\n        relativeTime: {\n            future: '%s內',\n            past: '%s前',\n            s: '幾秒',\n            ss: '%d 秒',\n            m: '1 分鐘',\n            mm: '%d 分鐘',\n            h: '1 小時',\n            hh: '%d 小時',\n            d: '1 天',\n            dd: '%d 天',\n            M: '1 個月',\n            MM: '%d 個月',\n            y: '1 年',\n            yy: '%d 年',\n        },\n    });\n\n    return zhMo;\n\n})));\n","//! moment.js locale configuration\n//! locale : Chinese (Taiwan) [zh-tw]\n//! author : Ben : https://github.com/ben-lin\n//! author : Chris Lam : https://github.com/hehachris\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 zhTw = moment.defineLocale('zh-tw', {\n        months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(\n            '_'\n        ),\n        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n            '_'\n        ),\n        weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n        weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n        weekdaysMin: '日_一_二_三_四_五_六'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY/MM/DD',\n            LL: 'YYYY年M月D日',\n            LLL: 'YYYY年M月D日 HH:mm',\n            LLLL: 'YYYY年M月D日dddd HH:mm',\n            l: 'YYYY/M/D',\n            ll: 'YYYY年M月D日',\n            lll: 'YYYY年M月D日 HH:mm',\n            llll: 'YYYY年M月D日dddd HH:mm',\n        },\n        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n                return hour;\n            } else if (meridiem === '中午') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === '下午' || meridiem === '晚上') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return '凌晨';\n            } else if (hm < 900) {\n                return '早上';\n            } else if (hm < 1130) {\n                return '上午';\n            } else if (hm < 1230) {\n                return '中午';\n            } else if (hm < 1800) {\n                return '下午';\n            } else {\n                return '晚上';\n            }\n        },\n        calendar: {\n            sameDay: '[今天] LT',\n            nextDay: '[明天] LT',\n            nextWeek: '[下]dddd LT',\n            lastDay: '[昨天] LT',\n            lastWeek: '[上]dddd LT',\n            sameElse: 'L',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '日';\n                case 'M':\n                    return number + '月';\n                case 'w':\n                case 'W':\n                    return number + '週';\n                default:\n                    return number;\n            }\n        },\n        relativeTime: {\n            future: '%s後',\n            past: '%s前',\n            s: '幾秒',\n            ss: '%d 秒',\n            m: '1 分鐘',\n            mm: '%d 分鐘',\n            h: '1 小時',\n            hh: '%d 小時',\n            d: '1 天',\n            dd: '%d 天',\n            M: '1 個月',\n            MM: '%d 個月',\n            y: '1 年',\n            yy: '%d 年',\n        },\n    });\n\n    return zhTw;\n\n})));\n","import Toggle from '@financial-times/o-toggle';\n\nfunction init (headerEl) {\n\tconst target = headerEl.querySelector('[data-o-header-search]');\n\tconst controls = target && headerEl.querySelectorAll(`[aria-controls=\"${target.id}\"]`);\n\n\tif (controls === null || controls.length === 0) {\n\t\treturn;\n\t}\n\n\tconst opening = [];\n\n\tconst callback = function (state, e) {\n\t\tif (state === 'open') {\n\t\t\t// record the opening control\n\t\t\topening.push(e.currentTarget);\n\t\t\ttarget.querySelector('[name=\"q\"]').focus();\n\t\t} else {\n\t\t\t// re-focus opening control\n\t\t\tif (opening.length) {\n\t\t\t\topening.pop().focus();\n\t\t\t}\n\t\t}\n\t};\n\n\tfor (let i = 0, len = controls.length; i < len; i++) {\n\t\tnew Toggle(controls[i], { target, callback });\n\t}\n}\n\nexport { init };\nexport default { init };\n","class Target {\n\n\tconstructor(toggle){\n\t\tthis.targetEl = toggle.targetEl;\n\t\tthis.toggles = [];\n\t}\n\n\taddToggle(toggle) {\n\t\tthis.toggles.push(toggle);\n\t}\n\n\tremoveToggle(toggle) {\n\t\tconst togglePosition = this.toggles.indexOf(toggle);\n\t\tthis.toggles = this.toggles.slice(0, togglePosition).concat(this.toggles.slice(togglePosition +1));\n\t\tif (this.toggles.length === 0) {\n\t\t\t// If that was the last/only toggle that controlled this target then ensure\n\t\t\t// this target is open so it doesn't get stuck in the closed position\n\t\t\tthis.open();\n\t\t}\n\t}\n\n\topen() {\n\t\tthis.targetEl.setAttribute('aria-hidden', 'false');\n\t\tthis.targetEl.classList.add('o-toggle--active');\n\t\t// Set every toggle that controls this target to be open\n\t\tthis.toggles.forEach((toggle) => {\n\t\t\ttoggle.open();\n\t\t});\n\t}\n\n\tclose() {\n\t\tthis.targetEl.setAttribute('aria-hidden', 'true');\n\t\tthis.targetEl.classList.remove('o-toggle--active');\n\n\t\t// Set every toggle that controls this target to be closed\n\t\tthis.toggles.forEach((toggle) => {\n\t\t\ttoggle.close();\n\t\t});\n\t}\n\n\ttoggle(){\n\t\tif (this.isOpen()){\n\t\t\tthis.close();\n\t\t} else {\n\t\t\tthis.open();\n\t\t}\n\t}\n\n\tisOpen() {\n\t\treturn this.targetEl.classList.contains('o-toggle--active');\n\t}\n}\n\nexport default Target;\n","const INTENT_ENTER = 300;\nconst INTENT_LEAVE = 400;\n\nconst expanded = [];\n\nfunction addEvents (parent, menu) {\n\tlet timeout;\n\n\tparent.addEventListener('mouseenter', () => {\n\t\tclearTimeout(timeout);\n\n\t\tif (isOpen(menu)) {\n\t\t\treturn;\n\t\t}\n\n\t\ttimeout = setTimeout(() => {\n\t\t\tif (expanded.length) {\n\t\t\t\thide(expanded[0]);\n\t\t\t\tshow(menu, false);\n\t\t\t} else {\n\t\t\t\tshow(menu, true);\n\t\t\t}\n\t\t}, INTENT_ENTER);\n\t});\n\n\n\tconst handleKeydown = (event) => {\n\t\tconst key = event.key || event.keyCode;\n\n\t\t// Internet Explorer 11 incorrectly maps the escape key to `Esc` instead of `Escape`\n\t\tif (key === 'Escape' || key === 'Esc' || key === 27) {\n\t\t\tif (isOpen(menu)) {\n\t\t\t\thide(menu);\n\t\t\t}\n\t\t}\n\t};\n\n\tdocument.addEventListener('keydown', handleKeydown);\n\n\tparent.addEventListener('mouseleave', () => {\n\t\tclearTimeout(timeout);\n\t\ttimeout = setTimeout(() => isOpen(menu) && hide(menu), INTENT_LEAVE);\n\t});\n}\n\nfunction isOpen (menu) {\n\treturn expanded.indexOf(menu) !== -1;\n}\n\nfunction show (menu, animate) {\n\tif (animate) {\n\t\tmenu.classList.add('o-header__mega--animation');\n\t}\n\n\tmenu.setAttribute('aria-hidden', 'false');\n\tmenu.setAttribute('aria-expanded', 'true');\n\n\tmenu.dispatchEvent(new CustomEvent('oHeader.MegaMenuShow', { bubbles: true }));\n\n\texpanded.push(menu);\n}\n\nfunction hide (menu) {\n\tmenu.classList.remove('o-header__mega--animation');\n\tmenu.setAttribute('aria-hidden', 'true');\n\tmenu.setAttribute('aria-expanded', 'false');\n\n\tmenu.dispatchEvent(new CustomEvent('oHeader.MegaMenuHide', { bubbles: true }));\n\n\texpanded.splice(expanded.indexOf(menu), 1);\n}\n\nfunction init (headerEl) {\n\tconst menus = Array.from(headerEl.querySelectorAll('[data-o-header-mega]'));\n\tconst parents = menus.map(menu => menu.parentNode);\n\n\tmenus.forEach(menu => {\n\t\tmenu.setAttribute('aria-hidden', 'true');\n\t\tmenu.setAttribute('aria-expanded', 'false');\n\t});\n\n\tparents.forEach((parent, i) => addEvents(parent, menus[i]));\n}\n\nexport { init, show, hide };\nexport default { init, show, hide };\n","import Toggle from '@financial-times/o-toggle';\n\nconst LISTEN_DELAY = 300;\nconst INTENT_DELAY = 1000;\n\nfunction handleCloseEvents (scope, callback, allFocusable) {\n\tlet timeout;\n\n\tconst handleKeydown = (e) => {\n\t\tif (e.keyCode === 27) {\n\t\t\tcallback();\n\t\t}\n\t};\n\n\tconst handleClick = (e) => {\n\t\tif (!scope.contains(e.target)) {\n\t\t\tcallback();\n\t\t}\n\t};\n\n\tconst handleMouseenter = () => {\n\t\tclearTimeout(timeout);\n\t};\n\n\tconst handleMouseleave = () => {\n\t\t// IE 11 mobile fires a mouseleave event when the search box gets focus. This means when the user tries\n\t\t// to use the search box, it disappears because the drawer closes.\n\t\t// Mouseout events should only occur when the drawer takes up less than 100% of the window, so we can ignore\n\t\t// any events triggered if the width of the drawer is equal to or bigger than the window.innerwidth\n\t\tif (window.innerWidth >= scope.offsetWidth) {\n\t\t\ttimeout = setTimeout(callback, INTENT_DELAY);\n\t\t}\n\t};\n\n\tconst handleFocus = (e) => {\n\t\tconst target = e.relatedTarget || e.target;\n\n\t\tif (!scope.contains(target)) {\n\t\t\tscope.focus();\n\t\t}\n\t};\n\n\tconst handleTab = (e) => {\n\t\tif (e.keyCode === 9) {\n\t\t\tconst firstEl = allFocusable[0];\n\t\t\tconst lastEl = allFocusable[allFocusable.length - 1];\n\n\t\t\t// Keep focus within the drawer when tabbing for a11y reasons.\n\t\t\tif (!e.shiftKey && e.target === lastEl) {\n\t\t\t\tfirstEl.focus();\n\t\t\t\te.preventDefault();\n\t\t\t} else if (e.shiftKey && e.target === firstEl) { // loop to the bottom when shift+tabbing.\n\t\t\t\tlastEl.focus();\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t}\n\t};\n\n\tconst removeEvents = () => {\n\t\tclearTimeout(timeout);\n\n\t\tscope.removeEventListener('mouseenter', handleMouseenter);\n\t\tscope.removeEventListener('mouseleave', handleMouseleave);\n\t\tdocument.removeEventListener('click', handleClick);\n\t\tdocument.removeEventListener('touchstart', handleClick);\n\t\tdocument.removeEventListener('keydown', handleKeydown);\n\t\tdocument.removeEventListener('focusin', handleFocus);\n\t\tdocument.removeEventListener('focusout', handleFocus);\n\t\tscope.removeEventListener('keydown', handleTab);\n\t};\n\n\tconst addEvents = () => {\n\t\tscope.addEventListener('mouseenter', handleMouseenter);\n\t\tscope.addEventListener('mouseleave', handleMouseleave);\n\t\tdocument.addEventListener('click', handleClick);\n\t\tdocument.addEventListener('touchstart', handleClick);\n\t\tdocument.addEventListener('keydown', handleKeydown);\n\n\t\t// Firefox doesn't support focusin or focusout\n\t\t// https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n\t\tdocument.addEventListener('focusin', handleFocus);\n\t\tdocument.addEventListener('focusout', handleFocus);\n\n\t\tscope.addEventListener('keydown', handleTab);\n\t};\n\n\treturn { addEvents, removeEvents, handleMouseleave };\n}\n\nfunction addDrawerToggles (drawerEl, allFocusable) {\n\tconst controls = Array.from(document.body.querySelectorAll(`[aria-controls=\"${drawerEl.id}\"]`));\n\n\tlet handleClose;\n\tlet openingControl;\n\n\tfunction toggleCallback (state, e) {\n\t\tif (state === 'close') {\n\t\t\ttoggleTabbing(drawerEl, false, allFocusable);\n\n\t\t\thandleClose.removeEvents();\n\n\t\t\topeningControl.focus();\n\t\t} else {\n\t\t\ttoggleTabbing(drawerEl, true, allFocusable);\n\n\t\t\t// don't capture the initial click or accidental double taps etc.\n\t\t\t// we could use transitionend but scoping is tricky and it needs prefixing and...\n\t\t\tsetTimeout(handleClose.addEvents, LISTEN_DELAY);\n\n\t\t\t// record the opening control so we can send focus back to it when closing the drawer\n\t\t\topeningControl = e.currentTarget;\n\n\t\t\t// aria-controls is only supported by JAWS.\n\t\t\t// In a setTimeout callback to avoid flickering transitions in Chrome (v54)\n\t\t\tsetTimeout(() => {\n\t\t\t\t// Don't focus on the drawer itself or iOS VoiceOver will miss it\n\t\t\t\t// Focus on the first focusable element\n\t\t\t\tconst firstFocusable = drawerEl.querySelector('a, button, input, select');\n\n\t\t\t\tif (firstFocusable) {\n\t\t\t\t\tfirstFocusable.focus();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tdrawerEl.focus();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tdrawerEl.classList.toggle('o-header__drawer--closing', state === 'close');\n\t\tdrawerEl.classList.toggle('o-header__drawer--opening', state === 'open');\n\t}\n\n\tcontrols.forEach((control) => {\n\t\tconst drawerToggle = new Toggle(control, {\n\t\t\ttarget: drawerEl,\n\t\t\tcallback: toggleCallback\n\t\t});\n\n\t\t// Both toggles have the same target, so the toggle function will be the same\n\t\t// If there's a separate handleClose instance for each toggle, removeEvents doesn't work\n\t\t// when the close toggle is clicked\n\t\tif (!handleClose) {\n\t\t\thandleClose = handleCloseEvents(drawerEl, drawerToggle.toggle, allFocusable);\n\t\t}\n\t});\n\n\t// make the drawer programmatically focusable\n\tdrawerEl.tabIndex = -1;\n}\n\nfunction addSubmenuToggles (drawerEl) {\n\tconst submenus = drawerEl.querySelectorAll('[id^=\"o-header-drawer-child-\"]');\n\n\tArray.from(submenus).forEach(submenu => {\n\t\tconst button = drawerEl.querySelector(`[aria-controls=\"${submenu.id}\"]`);\n\n\t\tsubmenu.setAttribute('aria-hidden', 'true');\n\n\t\tnew Toggle(button, {\n\t\t\ttarget: submenu,\n\t\t\tcallback: (state) => {\n\t\t\t\tbutton.textContent = button.textContent.replace(/fewer|more/, state === 'open' ? 'fewer' : 'more');\n\t\t\t}\n\t\t});\n\t});\n}\n\n// This function is to solve accessibility issue\n// when o-header-drawer is closed => tabbing is disabled.\n// when o-header-drawer is open => tabbing is enabled.\nfunction toggleTabbing (drawerEl, isEnabled, allFocusable) {\n\tif (isEnabled) {\n\t\tallFocusable.forEach(el => {\n\t\t\tel.removeAttribute('tabindex');\n\t\t});\n\t} else {\n\t\tallFocusable.forEach(el => {\n\t\t\tel.setAttribute('tabindex', '-1');\n\t\t});\n\t}\n}\n\nfunction init () {\n\tconst drawerEl = document.body.querySelector('[data-o-header-drawer]');\n\tif (!drawerEl) {\n\t\treturn;\n\t}\n\tconst allFocusable = Array.from(drawerEl.querySelectorAll('a, button, input, select'));\n\ttoggleTabbing(drawerEl, false, allFocusable);\n\taddSubmenuToggles(drawerEl);\n\taddDrawerToggles(drawerEl, allFocusable);\n\n\t// Wrap in a timeout to stop page load stall in Chrome v73 on Android\n\t// toggleTabbing and the removal of the no-js attribute spikes the CPU\n\t// and causes the main process to block for around 10 seconds.\n\tsetTimeout(() => {\n\t\tdrawerEl.removeAttribute('data-o-header-drawer--no-js');\n\t\tdrawerEl.setAttribute('data-o-header-drawer--js', 'true');\n\t});\n}\n\nexport default { init, handleCloseEvents };\nexport { init, handleCloseEvents };\n","import * as oUtils from '@financial-times/o-utils';\n\nfunction init(headerEl) {\n\tconst subnav = headerEl.querySelector('[data-o-header-subnav]');\n\n\tif (subnav === null) {\n\t\treturn;\n\t}\n\n\tconst buttons = Array.from(subnav.getElementsByTagName('button'));\n\tconst wrapper = subnav.querySelector('[data-o-header-subnav-wrapper]');\n\n\tlet scrollWidth;\n\tconst wrapperWidth = wrapper.clientWidth;\n\n\tfunction checkCurrentPosition() {\n\t\tconst currentSelection = wrapper.querySelector('[aria-current]');\n\t\tif (currentSelection) {\n\t\t\tconst currentSelectionEnd = currentSelection.getBoundingClientRect().right;\n\n\t\t\t//if the current selection is wider than the end of the wrapper\n\t\t\tif (currentSelectionEnd > wrapperWidth) {\n\t\t\t\t// check by how much\n\t\t\t\tlet diff = currentSelectionEnd - wrapperWidth;\n\t\t\t\t// if the difference is greater than half of the wrapper, scroll to the end of the current selection.\n\t\t\t\tdiff = diff > wrapperWidth / 2 ? currentSelectionEnd : wrapperWidth / 2;\n\n\t\t\t\twrapper.scrollTo(diff, 0);\n\t\t\t}\n\t\t}\n\t\tscrollable();\n\t}\n\n\tfunction direction(button) {\n\t\treturn button.className.match(/left|right/).pop();\n\t}\n\n\tfunction scrollable() {\n\t\tscrollWidth = wrapper.scrollWidth;\n\n\t\tbuttons.forEach(button => {\n\t\t\tif (direction(button) === 'left') {\n\t\t\t\tbutton.disabled = wrapper.scrollLeft === 0;\n\t\t\t} else {\n\t\t\t\tconst remaining = scrollWidth - wrapperWidth - wrapper.scrollLeft;\n\t\t\t\t// Allow a little difference as scrollWidth is fast, not accurate.\n\t\t\t\tbutton.disabled = remaining <= 1;\n\t\t\t}\n\t\t});\n\t}\n\n\tfunction scroll(e) {\n\t\tlet distance = 100;\n\n\t\tif (direction(e.currentTarget) === 'left') {\n\t\t\tdistance = (wrapper.scrollLeft > distance ? distance : wrapper.scrollLeft) * -1;\n\t\t} else {\n\t\t\tconst remaining = scrollWidth - wrapperWidth - wrapper.scrollLeft;\n\t\t\tdistance = remaining > distance ? distance : remaining;\n\t\t}\n\n\t\twrapper.scrollLeft = wrapper.scrollLeft + distance;\n\n\t\tscrollable();\n\t}\n\n\twrapper.addEventListener('scroll', oUtils.throttle(scrollable, 100));\n\twindow.addEventListener('oViewport.resize', scrollable);\n\n\tbuttons.forEach(button => {\n\t\tbutton.onclick = scroll;\n\t});\n\n\tcheckCurrentPosition();\n}\n\nexport { init };\nexport default { init };\n","import { debounce } from '@financial-times/o-utils';\n\nfunction init (headerEl) {\n\tif (!headerEl.hasAttribute('data-o-header--sticky')) {\n\t\treturn;\n\t}\n\n\tlet viewportOffset;\n\tlet lastScrollDepth;\n\tlet lastAnimationFrame;\n\tlet lastStickyState;\n\n\tfunction handleFrame () {\n\t\t// sticky el will appear when scrolled down from page top to\n\t\t// (arbitrarily) > half the viewport height\n\t\tconst scrollDepth = window.pageYOffset || window.scrollY;\n\t\tconst isActive = scrollDepth > viewportOffset;\n\n\t\theaderEl.classList.toggle('o-header--sticky-active', isActive);\n\n\t\tif (isActive !== lastStickyState) {\n\t\t\tlastStickyState = isActive;\n\t\t\theaderEl.dispatchEvent(new CustomEvent('oHeader.Sticky', { bubbles: true, detail: { isActive }}));\n\t\t}\n\n\t\t// allow a little wiggling room so we don't get too hasty toggling up/down state\n\t\tif (Math.abs(scrollDepth - lastScrollDepth) > 20) {\n\t\t\tconst isScrollingDown = lastScrollDepth < scrollDepth;\n\t\t\theaderEl.classList.toggle('o-header--sticky-scroll-down', isActive && isScrollingDown);\n\t\t\theaderEl.classList.toggle('o-header--sticky-scroll-up', isActive && !isScrollingDown);\n\t\t}\n\n\t\tlastScrollDepth = scrollDepth;\n\t}\n\n\tfunction startLoop () {\n\t\tviewportOffset = window.innerHeight / 2;\n\n\t\tlastAnimationFrame = window.requestAnimationFrame(() => {\n\t\t\thandleFrame();\n\t\t\tstartLoop();\n\t\t});\n\t}\n\n\tfunction stopLoop () {\n\t\tif (lastAnimationFrame) {\n\t\t\twindow.cancelAnimationFrame(lastAnimationFrame);\n\t\t}\n\t}\n\n\tfunction scrollStart () {\n\t\twindow.removeEventListener('scroll', scrollStart);\n\t\twindow.addEventListener('scroll', debouncedScrollEnd);\n\t\tstartLoop();\n\t}\n\n\tfunction scrollEnd () {\n\t\tstopLoop();\n\t\twindow.removeEventListener('scroll', debouncedScrollEnd);\n\t\twindow.addEventListener('scroll', scrollStart);\n\t}\n\n\tconst debouncedScrollEnd = debounce(scrollEnd, 300);\n\n\twindow.addEventListener('scroll', scrollStart);\n\n\thandleFrame();\n}\n\nexport { init };\nexport default { init };\n","import events from './utils/events.js';\nimport displayName from './utils/display-name.js';\nimport auth from './utils/auth.js';\nimport purgeJwtCache from './utils/purge-jwt-cache.js';\n\nclass Stream {\n\t/**\n\t * Class constructor.\n\t *\n\t * @param {HTMLElement} [streamEl] - The component element in the DOM\n\t * @param {object} [opts={}] - An options object for configuring the component\n\t */\n\tconstructor (streamEl, opts = {}) {\n\t\tthis.streamEl = streamEl || document;\n\t\tthis.options = opts;\n\t\tthis.eventSeenTimes = {};\n\t\tthis.useStagingEnvironment = Boolean(opts.useStagingEnvironment);\n\t}\n\n\tinit () {\n\t\tconst renderAndAuthenticate = (displayName) => {\n\t\t\treturn Promise.all([this.renderComments(), this.authenticateUser(displayName)])\n\t\t\t\t.then(() => {\n\t\t\t\t\tthis.login();\n\t\t\t\t});\n\t\t};\n\n\t\treturn displayName.validation(this.options.displayName)\n\t\t\t.then(displayName => renderAndAuthenticate(displayName))\n\t\t\t.catch(() => renderAndAuthenticate());\n\t}\n\n\tlogin () {\n\t\tif (this.authenticationToken) {\n\t\t\tthis.embed.login(this.authenticationToken);\n\n\t\t\tif (this.displayName) {\n\t\t\t\tthis.renderSignedInMessage();\n\t\t\t}\n\t\t}\n\t}\n\n\tauthenticateUser (displayName) {\n\t\tconst fetchOptions = {\n\t\t\tuseStagingEnvironment: this.useStagingEnvironment\n\t\t};\n\n\t\tif (displayName) {\n\t\t\tfetchOptions.displayName = displayName;\n\t\t}\n\n\t\treturn auth.fetchJsonWebToken(fetchOptions)\n\t\t\t.then(response => {\n\t\t\t\tthis.displayName = response.displayName;\n\n\t\t\t\tif (response.token) {\n\t\t\t\t\tthis.authenticationToken = response.token;\n\t\t\t\t} else {\n\t\t\t\t\tthis.userHasValidSession = response.userHasValidSession;\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch(() => {\n\t\t\t\treturn false;\n\t\t\t});\n\t}\n\n\trenderComments () {\n\t\treturn new Promise((resolve) => {\n\t\t\ttry {\n\t\t\t\t/*global Coral*/\n\t\t\t\tconst cacheBuster = 'cachebust=20210806';\n\t\t\t\tconst rootUrl = this.useStagingEnvironment\n\t\t\t\t\t? 'https://ft.staging.coral.coralproject.net'\n\t\t\t\t\t: 'https://ft.coral.coralproject.net';\n\n\t\t\t\tconst scriptElement = document.createElement('script');\n\t\t\t\tscriptElement.src = `${rootUrl}/assets/js/embed.js?${cacheBuster}`;\n\n\t\t\t\tscriptElement.onload = () => {\n\t\t\t\t\tthis.embed = Coral.createStreamEmbed(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: this.streamEl.id,\n\t\t\t\t\t\t\tstoryURL: this.options.articleUrl,\n\t\t\t\t\t\t\tstoryID: this.options.articleId,\n\t\t\t\t\t\t\trootURL: rootUrl,\n\t\t\t\t\t\t\tautoRender: true,\n\t\t\t\t\t\t\tbodyClassName: 'o-comments-coral-talk-container',\n\t\t\t\t\t\t\tevents: (events) => {\n\t\t\t\t\t\t\t\tevents.onAny((name, data) => {\n\t\t\t\t\t\t\t\t\tthis.publishEvent({name, data});\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t\tresolve();\n\t\t\t\t};\n\t\t\t\tthis.streamEl.parentNode.appendChild(scriptElement);\n\n\t\t\t\tif (this.useStagingEnvironment) {\n\t\t\t\t\tconst stagingWarning = document.createElement('div');\n\t\t\t\t\tstagingWarning.innerHTML = `\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"o-comments__staging-message-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"o-comments__staging-message-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<p class=\"o-comments__staging-message\">You are on the staging environment for Comments</p>\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t</div>`;\n\t\t\t\t\tthis.streamEl.parentNode.insertBefore(stagingWarning, this.streamEl);\n\t\t\t\t}\n\n\t\t\t\tdocument.dispatchEvent(new Event('oCommentsReady'));\n\t\t\t} catch (error) {\n\t\t\t\tresolve();\n\t\t\t}\n\t\t});\n\t}\n\n\tdisplayNamePrompt ({purgeCacheAfterCompletion = false} = {}) {\n\t\tconst overlay = displayName.prompt();\n\n\t\tconst onOverlayReady = (event) => {\n\t\t\tconst sourceOverlay = event.srcElement;\n\t\t\tconst displayNameForm = sourceOverlay.querySelector('#o-comments-displayname-form');\n\n\t\t\tif (displayNameForm) {\n\t\t\t\tdisplayNameForm.addEventListener('submit', (event) => {\n\t\t\t\t\tdisplayName.promptValidation(event)\n\t\t\t\t\t\t.then(displayName => {\n\t\t\t\t\t\t\toverlay.close();\n\t\t\t\t\t\t\tthis.authenticateUser(displayName)\n\t\t\t\t\t\t\t\t.then(() => {\n\t\t\t\t\t\t\t\t\tthis.login();\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tif (purgeCacheAfterCompletion) {\n\t\t\t\t\t\t\t\tpurgeJwtCache();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t\tdocument.addEventListener('oOverlay.ready', onOverlayReady);\n\n\t\tconst onOverlayClosed = () => {\n\t\t\toverlay.context.removeEventListener('oLayers.close', onOverlayClosed);\n\t\t\tdocument.removeEventListener('oOverlay.ready', onOverlayReady);\n\t\t\toverlay.destroy();\n\t\t};\n\t\toverlay.context.addEventListener('oLayers.close', onOverlayClosed);\n\t}\n\n\t/**\n\t * Emits events that have a valid o-comment event name.\n\t *\n\t * @param {object} args - The args object\n\t * @param {string} args.name - The event name\n\t * @param {object} args.data - The event payload\n\t * @returns {void}\n\t */\n\tpublishEvent ({name, data = {}}) {\n\t\tconst {\n\t\t\tsuccess: {\n\t\t\t\tstatus\n\t\t\t} = {},\n\t\t\terror\n\t\t} = data;\n\n\t\tif (name === 'loginPrompt' && this.userHasValidSession) {\n\t\t\treturn this.displayNamePrompt();\n\t\t}\n\n\t\tconst mappedEvent = events.coralEventMap.get(name);\n\n\t\tif (mappedEvent) {\n\t\t\tconst now = Number(new Date);\n\t\t\tconst delayInMilliseconds = 100;\n\t\t\tconst eventHasntBeenSeenRecently = !this.eventSeenTimes[mappedEvent.oComments] ||\n\t\t\t\tnow > this.eventSeenTimes[mappedEvent.oComments] + delayInMilliseconds;\n\n\t\t\tif (eventHasntBeenSeenRecently) {\n\t\t\t\tthis.eventSeenTimes[mappedEvent.oComments] = now;\n\n\t\t\t\tconst oCommentsEventOptions = { bubbles: true };\n\t\t\t\tif (error) {\n\t\t\t\t\toCommentsEventOptions.detail = { error };\n\t\t\t\t}\n\n\t\t\t\tconst oCommentsEvent = new CustomEvent(mappedEvent.oComments, oCommentsEventOptions);\n\t\t\t\tthis.streamEl.dispatchEvent(oCommentsEvent);\n\n\t\t\t\tif (mappedEvent.oTracking && !this.options.disableOTracking) {\n\t\t\t\t\tconst oTrackingEventOptions = {\n\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\tdetail: {\n\t\t\t\t\t\t\tcategory: 'comment',\n\t\t\t\t\t\t\taction: mappedEvent.oTracking,\n\t\t\t\t\t\t\tcoral: true,\n\t\t\t\t\t\t\tisWithheld: status === 'SYSTEM_WITHHELD'\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\t\t\t\t\tif (error) {\n\t\t\t\t\t\toTrackingEventOptions.detail.error = error;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst oTrackingEvent = new CustomEvent('oTracking.event', oTrackingEventOptions);\n\t\t\t\t\tdocument.body.dispatchEvent(oTrackingEvent);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\trenderSignedInMessage () {\n\t\tconst editButtonId = `o-comments-edit-button--${this.streamEl.id}`;\n\t\tconst signedInMessage = document.createElement('div');\n\t\tsignedInMessage.classList.add('o-comments__signed-in-container');\n\t\tsignedInMessage.innerHTML = `\n\t\t\t\t\t\t\t\t\t<p class=\"o-comments__signed-in-text\">Signed in as\n\t\t\t\t\t\t\t\t\t\t<span class=\"o-comments__signed-in-inner-text\"></span>\n\t\t\t\t\t\t\t\t\t\t<button id=\"${editButtonId}\" class=\"o-comments__edit-display-name\">\n\t\t\t\t\t\t\t\t\t\t\tEdit <span class=\"o-comments__edit-display-name-descriptive\">commenting display name</span>\n\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t</p>`;\n\t\tsignedInMessage.querySelector('.o-comments__signed-in-inner-text').innerText = this.displayName;\n\n\t\tconst oldSignedInMessage = this.streamEl.parentNode.querySelector('.o-comments__signed-in-container');\n\t\tif (oldSignedInMessage) {\n\t\t\toldSignedInMessage.remove();\n\t\t}\n\n\t\tthis.streamEl.parentNode.insertBefore(signedInMessage, this.streamEl);\n\n\t\tdocument.getElementById(editButtonId).onclick = () => {\n\t\t\tthis.displayNamePrompt({purgeCacheAfterCompletion: true});\n\t\t};\n\t}\n}\n\nexport default Stream;\n","const coralEventMap = new Map([\n\t['ready',\n\t\t{\n\t\t\toComments: 'oComments.ready',\n\t\t\toTracking: 'ready'\n\t\t}\n\t],\n\t['loginPrompt',\n\t\t{\n\t\t\toComments: 'oComments.loginPrompt'\n\t\t}\n\t],\n\t['createComment.success',\n\t\t{\n\t\t\toComments: 'oComments.postComment',\n\t\t\toTracking: 'post'\n\t\t}\n\t],\n\t['createComment.error',\n\t\t{\n\t\t\toComments: 'oComments.errorComment',\n\t\t\toTracking: 'post-error'\n\t\t}\n\t],\n\t['createCommentReply.success',\n\t\t{\n\t\t\toComments: 'oComments.replyComment',\n\t\t\toTracking: 'reply'\n\t\t}\n\t],\n\t['editComment.success',\n\t\t{\n\t\t\toComments: 'oComments.editComment',\n\t\t\toTracking: 'edit'\n\t\t}\n\t],\n\t['createCommentReaction.success',\n\t\t{\n\t\t\toComments: 'oComments.likeComment',\n\t\t\toTracking: 'like'\n\t\t}\n\t],\n\t['reportComment.success',\n\t\t{\n\t\t\toComments: 'oComments.reportComment',\n\t\t\toTracking: 'report'\n\t\t}\n\t],\n\t['ignoreUser.success',\n\t\t{\n\t\t\toComments: 'oComments.ignoreUser',\n\t\t\toTracking: 'ignore-user'\n\t\t}\n\t]\n]);\n\nexport default {\n\tcoralEventMap\n};\n","module.exports = 'a[href], area[href], input:not([disabled]):not([type=\"hidden\"]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, [tabindex=\"0\"], [contenteditable], audio[controls], video[controls], summary, [tabindex^=\"0\"], [tabindex^=\"1\"], [tabindex^=\"2\"], [tabindex^=\"3\"], [tabindex^=\"4\"], [tabindex^=\"5\"], [tabindex^=\"6\"], [tabindex^=\"7\"], [tabindex^=\"8\"], [tabindex^=\"9\"]'\n","export default {\n\tfetchJsonWebToken: function fetchJsonWebToken (options = {}) {\n\t\tconst url = new URL('https://comments-api.ft.com/user/auth/');\n\n\t\tif (options.displayName) {\n\t\t\turl.searchParams.append('displayName', options.displayName);\n\t\t}\n\n\t\tif (options.useStagingEnvironment) {\n\t\t\turl.searchParams.append('staging', '1');\n\t\t}\n\n\t\treturn fetch(url, { credentials: 'include' }).then(response => {\n\t\t// user is signed in and has a pseudonym\n\t\t\tif (response.ok) {\n\t\t\t\treturn response.json();\n\t\t\t} else {\n\t\t\t// user is signed in but has no display name\n\t\t\t\tif (response.status === 409) {\n\t\t\t\t\treturn { userHasValidSession: true };\n\t\t\t\t}\n\n\t\t\t\t// user is not signed in or session token is invalid\n\t\t\t\t// or error in comments api\n\t\t\t\treturn { userHasValidSession: false };\n\t\t\t}\n\t\t});\n\t}\n};\n","export default function purgeJwtCache() {\n\tconst url = `https://comments-api.ft.com/user/auth`;\n\treturn fetch(url, {\n\t\tmethod: 'PURGE',\n\t\tcredentials: 'include'\n\t});\n}\n","import oGrid from '@financial-times/o-grid';\nimport oViewport from '@financial-times/o-viewport';\n\nexport default function init (callback) {\n\toViewport.listenTo('resize');\n\n\tlet lastBreakpoint = oGrid.getCurrentLayout();\n\n\tdocument.body.addEventListener('oViewport.resize', () => {\n\t\tconst breakpoint = oGrid.getCurrentLayout();\n\n\t\tif (breakpoint !== lastBreakpoint) {\n\t\t\tcallback(breakpoint);\n\t\t\tlastBreakpoint = breakpoint;\n\t\t}\n\t});\n\n\tcallback(lastBreakpoint);\n}\n","/**\n * @file\n * Top of something important\n */\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport Share from '../share';\nimport Bylines from '../bylines';\nimport { getMainImage } from '../shared/helpers';\nimport {\n  mainImagePropType,\n  topicPropType,\n  bylinesPropType,\n  flagsPropType,\n} from '../shared/proptypes';\nimport './styles.scss';\n\nconst BigTopper = ({\n  url,\n  topic,\n  headline,\n  summary,\n  relatedArticle,\n  mainImage,\n  bylines,\n  socialHeadline,\n  twitterHeadline,\n  facebookHeadline,\n  tweetText,\n  flags,\n  byline,\n  share,\n  ...props\n}) => {\n  // These really mess with Storyshots' snapshot testing\n  const buildTime = props.buildTime || new Date().toISOString(); // eslint-disable-line\n  const publishedDate = props.publishedDate || new Date().toISOString(); // eslint-disable-line\n\n  return (\n    <div className=\"big-topper\">\n      {flags.mainImage && (mainImage.url || mainImage.uuid) && (\n        <figure className=\"graphic graphic-b-1 graphic-pad-1\">\n          <img alt={mainImage.description} src={getMainImage(mainImage)} />\n          <figcaption className=\"o-typography-caption\">\n            {mainImage.description}\n            {mainImage.description && mainImage.credit && ' '}\n            {mainImage.credit}\n          </figcaption>\n        </figure>\n      )}\n\n      {topic && (\n        <div className=\"topic\">\n          <a href={topic.url} className=\"o-editorial-typography-topic\">\n            {topic.name}\n          </a>\n        </div>\n      )}\n\n      <h1 className=\"o-editorial-layout-heading-1\" itemProp=\"headline\">\n        {headline}\n      </h1>\n\n      {flags.bylines && bylines && (\n        <Bylines prefix=\"By\" names={bylines} date={publishedDate} {...(byline || {})} />\n      )}\n\n      {flags.shareButtons && (\n        <Share\n          url={url}\n          text={socialHeadline || headline}\n          textTwitter={tweetText || twitterHeadline}\n          textFacebook={facebookHeadline}\n          dark={flags.dark}\n          {...(share || {})}\n        />\n      )}\n\n      {flags.summary && summary && (\n        <p className=\"o-editorial-typography-standfirst\">\n          {summary}{' '}\n          {relatedArticle && (\n            <a href={relatedArticle.url} className=\"o-typography-link\">\n              {relatedArticle.text}\n            </a>\n          )}\n        </p>\n      )}\n\n      <meta itemProp=\"dateModified\" content={buildTime} suppressHydrationWarning />\n    </div>\n  );\n};\n\nBigTopper.propTypes = {\n  url: PropTypes.string.isRequired,\n  topic: topicPropType,\n  headline: PropTypes.string.isRequired,\n  summary: PropTypes.string,\n  relatedArticle: PropTypes.exact({\n    url: PropTypes.string.isRequired,\n    text: PropTypes.string.isRequired,\n  }),\n  mainImage: mainImagePropType,\n  bylines: bylinesPropType,\n  socialHeadline: PropTypes.string,\n  twitterHeadline: PropTypes.string,\n  facebookHeadline: PropTypes.string,\n  tweetText: PropTypes.string,\n  flags: flagsPropType.isRequired,\n  publishedDate: PropTypes.string.isRequired,\n  buildTime: PropTypes.string.isRequired,\n  byline: PropTypes.object,\n  share: PropTypes.object,\n};\n\nBigTopper.displayName = 'GBigTopper';\n\nexport default BigTopper;\n","/**\n * @file\n * Sharing buttons\n */\n\nimport React, { useEffect, useRef } from 'react';\nimport OShare from '@financial-times/o-share/main';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport './styles.scss';\n\nconst Share = ({\n  url,\n  text,\n  textTwitter,\n  textFacebook,\n  textLinkedIn,\n  textWhatsApp,\n  separated,\n  dark,\n  size,\n}) => {\n  const ref = useRef();\n\n  useEffect(() => {\n    (async () => {\n      new OShare(ref.current); // eslint-disable-line no-new\n    })();\n  }, []);\n\n  const services = [\n    {\n      name: 'Twitter',\n      link:\n        'https://twitter.com/intent/tweet' +\n        `?url=${url}` +\n        `&text=${textTwitter || text}` +\n        '&via=FinancialTimes',\n    },\n    {\n      name: 'Facebook',\n      link: 'https://www.facebook.com/sharer.php' + `?u=${url}` + `&t=${textFacebook || text}`,\n    },\n    {\n      name: 'LinkedIn',\n      link:\n        'https://www.linkedin.com/shareArticle' +\n        '?mini=true' +\n        `&url=${url}` +\n        `&title=${textLinkedIn || text}` +\n        `&source=Financial+Times`,\n    },\n    {\n      name: 'WhatsApp',\n      link: `whatsapp://send?text=${textWhatsApp || text} - ${url}`,\n    },\n  ];\n\n  return (\n    <div className={classnames('g-share', separated && 'g-share--separated', `g-share--${size}`)}>\n      <div className={classnames('o-share', dark && 'o-share--inverse')} data-o-component=\"o-share\">\n        <ul>\n          {services.map(({ name, link }) => (\n            <li key={name} className=\"o-share__action\">\n              <a\n                className={`o-share__icon o-share__icon--${name.toLowerCase()}`}\n                href={link}\n                rel=\"noopener\"\n              >\n                <span className=\"o-share__text\">Share on {name}. Opens in a new window.</span>\n              </a>\n            </li>\n          ))}\n        </ul>\n      </div>\n    </div>\n  );\n};\n\nShare.propTypes = {\n  url: PropTypes.string.isRequired,\n  text: PropTypes.string.isRequired,\n  textTwitter: PropTypes.string,\n  textFacebook: PropTypes.string,\n  textLinkedIn: PropTypes.string,\n  textWhatsApp: PropTypes.string,\n  separated: PropTypes.bool,\n  dark: PropTypes.bool,\n  size: PropTypes.oneOf(['default', 'small']),\n};\n\nShare.displayName = 'GShare';\n\nexport default Share;\n","/**\n * @file\n * Bylines component\n */\n\nimport React, { Fragment, useRef, useEffect, forwardRef } from 'react';\nimport PropTypes from 'prop-types';\nimport ODate from '@financial-times/o-date/main';\nimport { bylinesPropType } from '../shared/proptypes';\nimport './styles.scss';\n\nconst NamesElement = ({ namesList }) => {\n  return namesList.reduce((a, name, i) => {\n    /* eslint-disable no-nested-ternary */\n    const separator = i === 0 ? '' : i === namesList.length - 1 ? ' and ' : ', ';\n    const author = name.url ? (\n      <Fragment key={`author-${name.name}`}>\n        <a href={name.url} className=\"o-editorial-typography-author\">\n          {name.name}\n        </a>\n        {name.location && ` in ${name.location}`}\n      </Fragment>\n    ) : (\n      <Fragment key={`author-${name.name}`}>\n        <span>{name.name}</span>\n        {name.location && ` in ${name.location}`}\n      </Fragment>\n    );\n    return a.concat(separator, author);\n  }, []);\n};\n\nconst DateElement = forwardRef(({ date }, ref) => {\n  const format = new Intl.DateTimeFormat('en', {\n    month: 'long',\n    day: 'numeric',\n    year: 'numeric',\n  });\n  const [month, , day, , year] = format.formatToParts(new Date(date));\n  const dateFormatted = `${month.value} ${day.value} ${year.value}`;\n  return (\n    <Fragment>\n      {' '}\n      <time\n        ref={ref}\n        data-o-component=\"o-date\"\n        className=\"o-date o-editorial-typography-byline-timestamp\"\n        dateTime={date}\n        suppressHydrationWarning\n      >\n        {dateFormatted}\n      </time>\n    </Fragment>\n  );\n});\n\nconst Bylines = ({ prefix, names, date, dateFirst }) => {\n  const dateElRef = useRef();\n  const oDateRef = useRef();\n\n  useEffect(() => {\n    if (oDateRef.current || !dateElRef.current) return;\n\n    (async () => {\n      try {\n        oDateRef.current = new ODate(dateElRef.current);\n      } catch (e) {\n        console.error(e); // eslint disable-line no-console\n      }\n    })();\n  });\n\n  if (!names && !date) return null;\n\n  const namesList = Array.isArray(names) ? names : [{ name: names }];\n\n  return (\n    <div className=\"bylines\">\n      {prefix && `${prefix} `}\n      {dateFirst && date && <DateElement ref={dateElRef} date={date} />}\n      {dateFirst && ' by '}\n      {names && <NamesElement namesList={namesList} />}\n      {!dateFirst && date && <DateElement ref={dateElRef} date={date} />}\n    </div>\n  );\n};\n\nBylines.propTypes = {\n  prefix: PropTypes.string,\n  names: bylinesPropType,\n  date: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\n  dateFirst: PropTypes.bool,\n};\n\nBylines.defaultProps = {\n  names: 'FT Staff',\n  prefix: '',\n  date: false,\n  dateFirst: false,\n};\n\nBylines.displayName = 'GBylines';\n\nexport default Bylines;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\n/**\n * DOM event delegator\n *\n * The delegator will listen\n * for events that bubble up\n * to the root node.\n *\n * @constructor\n * @param {Node|string} [root] The root node or a selector string matching the root node\n */\nfunction Delegate(root) {\n  /**\n   * Maintain a map of listener\n   * lists, keyed by event name.\n   *\n   * @type Object\n   */\n  this.listenerMap = [{}, {}];\n\n  if (root) {\n    this.root(root);\n  }\n  /** @type function() */\n\n\n  this.handle = Delegate.prototype.handle.bind(this); // Cache of event listeners removed during an event cycle\n\n  this._removedListeners = [];\n}\n/**\n * Start listening for events\n * on the provided DOM element\n *\n * @param  {Node|string} [root] The root node or a selector string matching the root node\n * @returns {Delegate} This method is chainable\n */\n\n\nDelegate.prototype.root = function (root) {\n  var listenerMap = this.listenerMap;\n  var eventType; // Remove master event listeners\n\n  if (this.rootElement) {\n    for (eventType in listenerMap[1]) {\n      if (listenerMap[1].hasOwnProperty(eventType)) {\n        this.rootElement.removeEventListener(eventType, this.handle, true);\n      }\n    }\n\n    for (eventType in listenerMap[0]) {\n      if (listenerMap[0].hasOwnProperty(eventType)) {\n        this.rootElement.removeEventListener(eventType, this.handle, false);\n      }\n    }\n  } // If no root or root is not\n  // a dom node, then remove internal\n  // root reference and exit here\n\n\n  if (!root || !root.addEventListener) {\n    if (this.rootElement) {\n      delete this.rootElement;\n    }\n\n    return this;\n  }\n  /**\n   * The root node at which\n   * listeners are attached.\n   *\n   * @type Node\n   */\n\n\n  this.rootElement = root; // Set up master event listeners\n\n  for (eventType in listenerMap[1]) {\n    if (listenerMap[1].hasOwnProperty(eventType)) {\n      this.rootElement.addEventListener(eventType, this.handle, true);\n    }\n  }\n\n  for (eventType in listenerMap[0]) {\n    if (listenerMap[0].hasOwnProperty(eventType)) {\n      this.rootElement.addEventListener(eventType, this.handle, false);\n    }\n  }\n\n  return this;\n};\n/**\n * @param {string} eventType\n * @returns boolean\n */\n\n\nDelegate.prototype.captureForType = function (eventType) {\n  return ['blur', 'error', 'focus', 'load', 'resize', 'scroll'].indexOf(eventType) !== -1;\n};\n/**\n * Attach a handler to one\n * event for all elements\n * that match the selector,\n * now or in the future\n *\n * The handler function receives\n * three arguments: the DOM event\n * object, the node that matched\n * the selector while the event\n * was bubbling and a reference\n * to itself. Within the handler,\n * 'this' is equal to the second\n * argument.\n *\n * The node that actually received\n * the event can be accessed via\n * 'event.target'.\n *\n * @param {string} eventType Listen for these events\n * @param {string|undefined} selector Only handle events on elements matching this selector, if undefined match root element\n * @param {function()} handler Handler function - event data passed here will be in event.data\n * @param {boolean} [useCapture] see 'useCapture' in <https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener>\n * @returns {Delegate} This method is chainable\n */\n\n\nDelegate.prototype.on = function (eventType, selector, handler, useCapture) {\n  var root;\n  var listenerMap;\n  var matcher;\n  var matcherParam;\n\n  if (!eventType) {\n    throw new TypeError('Invalid event type: ' + eventType);\n  } // handler can be passed as\n  // the second or third argument\n\n\n  if (typeof selector === 'function') {\n    useCapture = handler;\n    handler = selector;\n    selector = null;\n  } // Fallback to sensible defaults\n  // if useCapture not set\n\n\n  if (useCapture === undefined) {\n    useCapture = this.captureForType(eventType);\n  }\n\n  if (typeof handler !== 'function') {\n    throw new TypeError('Handler must be a type of Function');\n  }\n\n  root = this.rootElement;\n  listenerMap = this.listenerMap[useCapture ? 1 : 0]; // Add master handler for type if not created yet\n\n  if (!listenerMap[eventType]) {\n    if (root) {\n      root.addEventListener(eventType, this.handle, useCapture);\n    }\n\n    listenerMap[eventType] = [];\n  }\n\n  if (!selector) {\n    matcherParam = null; // COMPLEX - matchesRoot needs to have access to\n    // this.rootElement, so bind the function to this.\n\n    matcher = matchesRoot.bind(this); // Compile a matcher for the given selector\n  } else if (/^[a-z]+$/i.test(selector)) {\n    matcherParam = selector;\n    matcher = matchesTag;\n  } else if (/^#[a-z0-9\\-_]+$/i.test(selector)) {\n    matcherParam = selector.slice(1);\n    matcher = matchesId;\n  } else {\n    matcherParam = selector;\n    matcher = Element.prototype.matches;\n  } // Add to the list of listeners\n\n\n  listenerMap[eventType].push({\n    selector: selector,\n    handler: handler,\n    matcher: matcher,\n    matcherParam: matcherParam\n  });\n  return this;\n};\n/**\n * Remove an event handler\n * for elements that match\n * the selector, forever\n *\n * @param {string} [eventType] Remove handlers for events matching this type, considering the other parameters\n * @param {string} [selector] If this parameter is omitted, only handlers which match the other two will be removed\n * @param {function()} [handler] If this parameter is omitted, only handlers which match the previous two will be removed\n * @returns {Delegate} This method is chainable\n */\n\n\nDelegate.prototype.off = function (eventType, selector, handler, useCapture) {\n  var i;\n  var listener;\n  var listenerMap;\n  var listenerList;\n  var singleEventType; // Handler can be passed as\n  // the second or third argument\n\n  if (typeof selector === 'function') {\n    useCapture = handler;\n    handler = selector;\n    selector = null;\n  } // If useCapture not set, remove\n  // all event listeners\n\n\n  if (useCapture === undefined) {\n    this.off(eventType, selector, handler, true);\n    this.off(eventType, selector, handler, false);\n    return this;\n  }\n\n  listenerMap = this.listenerMap[useCapture ? 1 : 0];\n\n  if (!eventType) {\n    for (singleEventType in listenerMap) {\n      if (listenerMap.hasOwnProperty(singleEventType)) {\n        this.off(singleEventType, selector, handler);\n      }\n    }\n\n    return this;\n  }\n\n  listenerList = listenerMap[eventType];\n\n  if (!listenerList || !listenerList.length) {\n    return this;\n  } // Remove only parameter matches\n  // if specified\n\n\n  for (i = listenerList.length - 1; i >= 0; i--) {\n    listener = listenerList[i];\n\n    if ((!selector || selector === listener.selector) && (!handler || handler === listener.handler)) {\n      this._removedListeners.push(listener);\n\n      listenerList.splice(i, 1);\n    }\n  } // All listeners removed\n\n\n  if (!listenerList.length) {\n    delete listenerMap[eventType]; // Remove the main handler\n\n    if (this.rootElement) {\n      this.rootElement.removeEventListener(eventType, this.handle, useCapture);\n    }\n  }\n\n  return this;\n};\n/**\n * Handle an arbitrary event.\n *\n * @param {Event} event\n */\n\n\nDelegate.prototype.handle = function (event) {\n  var i;\n  var l;\n  var type = event.type;\n  var root;\n  var phase;\n  var listener;\n  var returned;\n  var listenerList = [];\n  var target;\n  var eventIgnore = 'ftLabsDelegateIgnore';\n\n  if (event[eventIgnore] === true) {\n    return;\n  }\n\n  target = event.target; // Hardcode value of Node.TEXT_NODE\n  // as not defined in IE8\n\n  if (target.nodeType === 3) {\n    target = target.parentNode;\n  } // Handle SVG <use> elements in IE\n\n\n  if (target.correspondingUseElement) {\n    target = target.correspondingUseElement;\n  }\n\n  root = this.rootElement;\n  phase = event.eventPhase || (event.target !== event.currentTarget ? 3 : 2); // eslint-disable-next-line default-case\n\n  switch (phase) {\n    case 1:\n      //Event.CAPTURING_PHASE:\n      listenerList = this.listenerMap[1][type];\n      break;\n\n    case 2:\n      //Event.AT_TARGET:\n      if (this.listenerMap[0] && this.listenerMap[0][type]) {\n        listenerList = listenerList.concat(this.listenerMap[0][type]);\n      }\n\n      if (this.listenerMap[1] && this.listenerMap[1][type]) {\n        listenerList = listenerList.concat(this.listenerMap[1][type]);\n      }\n\n      break;\n\n    case 3:\n      //Event.BUBBLING_PHASE:\n      listenerList = this.listenerMap[0][type];\n      break;\n  }\n\n  var toFire = []; // Need to continuously check\n  // that the specific list is\n  // still populated in case one\n  // of the callbacks actually\n  // causes the list to be destroyed.\n\n  l = listenerList.length;\n\n  while (target && l) {\n    for (i = 0; i < l; i++) {\n      listener = listenerList[i]; // Bail from this loop if\n      // the length changed and\n      // no more listeners are\n      // defined between i and l.\n\n      if (!listener) {\n        break;\n      }\n\n      if (target.tagName && [\"button\", \"input\", \"select\", \"textarea\"].indexOf(target.tagName.toLowerCase()) > -1 && target.hasAttribute(\"disabled\")) {\n        // Remove things that have previously fired\n        toFire = [];\n      } // Check for match and fire\n      // the event if there's one\n      //\n      // TODO:MCG:20120117: Need a way\n      // to check if event#stopImmediatePropagation\n      // was called. If so, break both loops.\n      else if (listener.matcher.call(target, listener.matcherParam, target)) {\n          toFire.push([event, target, listener]);\n        }\n    } // TODO:MCG:20120117: Need a way to\n    // check if event#stopPropagation\n    // was called. If so, break looping\n    // through the DOM. Stop if the\n    // delegation root has been reached\n\n\n    if (target === root) {\n      break;\n    }\n\n    l = listenerList.length; // Fall back to parentNode since SVG children have no parentElement in IE\n\n    target = target.parentElement || target.parentNode; // Do not traverse up to document root when using parentNode, though\n\n    if (target instanceof HTMLDocument) {\n      break;\n    }\n  }\n\n  var ret;\n\n  for (i = 0; i < toFire.length; i++) {\n    // Has it been removed during while the event function was fired\n    if (this._removedListeners.indexOf(toFire[i][2]) > -1) {\n      continue;\n    }\n\n    returned = this.fire.apply(this, toFire[i]); // Stop propagation to subsequent\n    // callbacks if the callback returned\n    // false\n\n    if (returned === false) {\n      toFire[i][0][eventIgnore] = true;\n      toFire[i][0].preventDefault();\n      ret = false;\n      break;\n    }\n  }\n\n  return ret;\n};\n/**\n * Fire a listener on a target.\n *\n * @param {Event} event\n * @param {Node} target\n * @param {Object} listener\n * @returns {boolean}\n */\n\n\nDelegate.prototype.fire = function (event, target, listener) {\n  return listener.handler.call(target, event, target);\n};\n/**\n * Check whether an element\n * matches a tag selector.\n *\n * Tags are NOT case-sensitive,\n * except in XML (and XML-based\n * languages such as XHTML).\n *\n * @param {string} tagName The tag name to test against\n * @param {Element} element The element to test with\n * @returns boolean\n */\n\n\nfunction matchesTag(tagName, element) {\n  return tagName.toLowerCase() === element.tagName.toLowerCase();\n}\n/**\n * Check whether an element\n * matches the root.\n *\n * @param {?String} selector In this case this is always passed through as null and not used\n * @param {Element} element The element to test with\n * @returns boolean\n */\n\n\nfunction matchesRoot(selector, element) {\n  if (this.rootElement === window) {\n    return (// Match the outer document (dispatched from document)\n      element === document || // The <html> element (dispatched from document.body or document.documentElement)\n      element === document.documentElement || // Or the window itself (dispatched from window)\n      element === window\n    );\n  }\n\n  return this.rootElement === element;\n}\n/**\n * Check whether the ID of\n * the element in 'this'\n * matches the given ID.\n *\n * IDs are case-sensitive.\n *\n * @param {string} id The ID to test against\n * @param {Element} element The element to test with\n * @returns boolean\n */\n\n\nfunction matchesId(id, element) {\n  return id === element.id;\n}\n/**\n * Short hand for off()\n * and root(), ie both\n * with no parameters\n *\n * @return void\n */\n\n\nDelegate.prototype.destroy = function () {\n  this.off();\n  this.root();\n};\n\nvar _default = Delegate;\nexports.default = _default;\nmodule.exports = exports.default;","/**\n * @file\n * Epilogue component\n */\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { GridContainer, GridRow, GridChild } from '../grid';\nimport './styles.scss';\n\nconst CopyRight = () => {\n  const year = new Date().getFullYear();\n  return (\n    <footer className=\"g-epilogue-copyright\">\n      <a\n        href=\"https://help.ft.com/help/legal-privacy/copyright/copyright-policy/\"\n        data-trackable=\"link-copyright\"\n      >\n        Copyright\n      </a>{' '}\n      The Financial Times Limited {year}. All rights reserved.\n    </footer>\n  );\n};\n\nconst Epilogue = ({ includeGrid }) => {\n  return includeGrid ? (\n    <GridContainer>\n      <GridRow>\n        <GridChild colspan=\"12 S11 Scenter M10 L9 XL8\">\n          <CopyRight />\n        </GridChild>\n      </GridRow>\n    </GridContainer>\n  ) : (\n    <CopyRight />\n  );\n};\n\nEpilogue.displayName = 'GEpilogue';\n\nEpilogue.propTypes = {\n  includeGrid: PropTypes.bool,\n};\n\nEpilogue.defaultProps = {\n  includeGrid: true,\n};\n\nexport default Epilogue;\n","/**\n * @file\n * Basic card component\n */\n\nimport React from 'react';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport './styles.scss';\n\nconst Card = ({ children, className, ...props }) =>\n  children && <div className={classNames(className, 'g-card')}>{children}</div>;\n\nCard.propTypes = {\n  children: PropTypes.node.isRequired,\n  className: PropTypes.string,\n};\n\nCard.defaultProps = {\n  className: null,\n};\n\nexport default Card;\n","import React, { useEffect, useState, useCallback, useMemo } from 'react';\nimport ScatterChart from './chart';\nimport ScatterChartPanel from './panel';\nimport './styles.scss';\n\nconst AnimatedScatterChart = ({ data: inputData, areasToLabel, maxTotalDosesPer100 }) => {\n  const data = inputData\n    // filter out certain territories\n    .filter(a => !['ASM', 'FSM', 'GUM', 'MHL', 'MNP', 'PRI', 'PLW', 'VIR'].includes(a.code))\n    .filter(d => d.area !== 'World')\n    .filter(d => d.vaxdosespercapita > 0)\n    .filter(d => d.gdppercapita > 0)\n    .map(d => ({\n      ...d,\n      total_doses_per_100: d.vaxdosespercapita * 100,\n    }))\n    .sort((a, b) => b.population - a.population);\n\n  const dateRanges = [...new Set(data.map(d => d.date))].sort();\n\n  const [playing, setPlaying] = useState(false);\n  const [dateIndex, setDateIndex] = useState(dateRanges.length - 1);\n\n  const handleSliderChange = useCallback(value => {\n    setPlaying(false);\n    setDateIndex(value);\n  }, []);\n\n  const handlePlayClick = useCallback(\n    e => {\n      e.preventDefault();\n      setPlaying(!playing);\n    },\n    [playing]\n  );\n\n  useEffect(() => {\n    const playForward =\n      playing &&\n      setInterval(() => setDateIndex(dateIndex < dateRanges.length - 1 ? dateIndex + 1 : 0), 200);\n\n    return () => clearInterval(playForward);\n  }, [dateRanges.length, dateIndex, playing]);\n\n  // add labels to specific countries and attach tooltip data\n  // also filter data to only data from chosen date (and most recent date if chosen date data isn't available)\n  const dataWithLabels = data\n    .filter(d => d.date <= dateRanges[dateIndex]) // get all data that day and before\n    // then choose the most recent data from each country\n    .reduce(\n      (acc, curr) => {\n        if (!acc[1].includes(curr.code)) {\n          acc[0].push({\n            ...curr,\n            // choose which countries to label\n            label: areasToLabel.includes(curr.code.toLowerCase()) ? 'yes' : '',\n            seriesName: curr.area,\n            isHighlighted: true,\n            labelData: curr,\n          });\n          acc[1].push(curr.code);\n        }\n        return acc;\n      },\n      [[], []]\n    )[0];\n\n  return (\n    <div className=\"chart-holder\">\n      <ScatterChart\n        data={dataWithLabels}\n        description={`Scatter chart showing progress on vaccination vs GDP per capita on ${dateRanges[dateIndex]}`}\n        yDomain={[0, maxTotalDosesPer100]}\n        xDomain={[261.25, 185829.0]}\n      />\n      <ScatterChartPanel\n        date={dateRanges[dateIndex]}\n        max={dateRanges.length - 1}\n        onChange={handleSliderChange}\n        onClick={handlePlayClick}\n        playing={playing}\n        value={dateIndex}\n      />\n    </div>\n  );\n};\n\nexport default AnimatedScatterChart;\n","import React from 'react';\nimport { Scatter } from '@financial-times/vvc/templates';\nimport * as d3 from 'd3-time-format';\nimport './styles.scss';\n\nconst formatDate = d3.timeFormat('%b %-d');\n\nconst ScatterChart = ({ data, description, xDomain, yDomain }) => {\n  return (\n    <div className=\"scatter-chart\">\n      <header className=\"chart-topper\">\n        <div className=\"chart-topper__header\">\n          High and upper-middle income countries are ahead on vaccinations\n        </div>\n        <div className=\"chart-topper__subhead\">\n          Progress on vaccinations by GDP per capita, circle size represents population\n        </div>\n      </header>\n      <div className=\"chart-container\">\n        <Scatter\n          data={data}\n          title=\"High and upper-middle income countries are ahead on vaccinations\"\n          description={description}\n          hideTitleTooltip\n          hideTopper\n          hideLegend\n          hideSizeLegend\n          height={400}\n          margin={{ bottom: 10, left: 0, right: 5, top: 10 }}\n          legendOrientation=\"vertical\"\n          yVariable=\"total_doses_per_100\"\n          xVariable=\"gdppercapita\"\n          yAxisLabel=\"Total doses administered per 100 residents\"\n          xAxisLabel=\"GDP per capita (current US $), log scale\"\n          sizeVariable=\"population\"\n          colorScale={() => '#EB5E8D'}\n          maxCircleSize={{ print: 9.6, social: 24, video: 48, web: 36 }}\n          labelColumn=\"area\"\n          xDomain={xDomain}\n          yDomain={yDomain}\n          logScaleX\n          xTickFormat={d => d.toLocaleString()}\n          xTickValues={[300, 1000, 10000, 100000]}\n          sizeDomain={[0, 1397715000]}\n          opacity={0.7}\n          dotsStrokeWidth={1}\n          showTooltips\n          tooltipComponent={data => {\n            return (\n              <div className=\"tooltip-content\">\n                <div>{data.area}</div>\n                <div>\n                  <span className=\"tooltip-content--value\">\n                    {data.total_doses_per_100.toFixed(1).toLocaleString()}\n                  </span>{' '}\n                  doses per 100 residents\n                </div>\n                <div>\n                  <span className=\"tooltip-content--value\">\n                    ${new Number(data.gdppercapita.toFixed(0)).toLocaleString()}\n                  </span>{' '}\n                  GDP per capita\n                </div>\n                <div>\n                  <span className=\"tooltip-content--date\">{formatDate(new Date(data.date))}</span>\n                </div>\n              </div>\n            );\n          }}\n          tooltipStyle={{\n            backgroundColor: '#ffffff',\n            padding: '0.3rem 0.5rem',\n            borderRadius: 0,\n            boxShadow: `0 1px 1px 0 rgba(0, 0, 0, 0.14)`,\n          }}\n          tooltipPositionOverride={({ data, xScale, yScale }) => ({\n            x: xScale(data.gdppercapita),\n            y: yScale(data.total_doses_per_100) - 60,\n          })}\n          tooltipHoverRadius={40}\n        />\n      </div>\n    </div>\n  );\n};\n\nexport default ScatterChart;\n","// Adapted from https://github.com/hshoff/vx/blob/master/packages/vx-tooltip/src/tooltips/TooltipWithBounds.tsx\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { withBoundingRects } from '@visx/bounds';\nimport { Tooltip } from '@visx/tooltip';\n\nconst TooltipWithBounds = ({\n  left: initialLeft = 0,\n  top: initialTop = 0,\n  offsetLeft = 10,\n  offsetTop = 10,\n  offsetX = 0,\n  offsetY = 0,\n  dataYPosition,\n  maxOffsetY,\n  rect,\n  parentRect,\n  getRects,\n  children,\n  style,\n  ...props\n}) => {\n  let left = initialLeft;\n  let top = initialTop;\n\n  /* If the bounding rect of the component and it's parent is available, adjust it's\n    position so it doesn't overflow */\n  if (rect && parentRect) {\n    left =\n      /* If the right side of the bounding rect is greater than the parent bottom or window width\n        subtract the width from the final left position */\n      offsetLeft + rect.right > parentRect.right ||\n      (window && offsetLeft + rect.right > window.innerWidth)\n        ? left - rect.width - offsetLeft\n        : left + offsetLeft;\n\n    top =\n      /* If the bottom side of the bounding rect is greater than the parent bottom or window height\n      subtract the height from the final top position */\n      offsetTop + rect.bottom > parentRect.bottom ||\n      (window && offsetTop + rect.bottom > window.innerHeight)\n        ? top - rect.height - offsetTop\n        : top + offsetTop;\n\n    const heightOfRect = rect.height;\n    // If the y positon of the line is less than bottom of the tooltip (which in this case is offset by -50%)\n    const rectOffset =\n      typeof offsetY === 'number'\n        ? offsetY\n        : // Convert % translation\n          (Number(offsetY.replace('%', '')) / 100) * heightOfRect;\n    if (dataYPosition <= top + heightOfRect + rectOffset) {\n      // @TODO alternatively this could be just below the current position on the line\n      top = maxOffsetY - heightOfRect;\n    }\n  }\n\n  left = Math.round(left);\n  top = Math.round(top);\n\n  return (\n    <Tooltip\n      style={{\n        position: 'absolute',\n        top: 0,\n        transform: `translate(${left}px, ${top}px) translateX(${offsetX}) translateY(${offsetY})`,\n        ...style,\n      }}\n      {...props}\n    >\n      {children}\n    </Tooltip>\n  );\n};\n\nconst rectShapePropTypes = PropTypes.shape({\n  top: PropTypes.number,\n  right: PropTypes.number,\n  bottom: PropTypes.number,\n  left: PropTypes.number,\n  width: PropTypes.number,\n  height: PropTypes.number,\n});\n\nconst withBoundingRectsPropTypes = {\n  getRects: PropTypes.func,\n  rect: rectShapePropTypes,\n  parentRect: rectShapePropTypes,\n};\n\nTooltipWithBounds.propTypes = {\n  ...Tooltip.propTypes,\n  ...withBoundingRectsPropTypes,\n  offsetLeft: PropTypes.number,\n  offsetTop: PropTypes.number,\n  offsetX: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  offsetY: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  maxOffsetY: PropTypes.number,\n  dataYPosition: PropTypes.number,\n};\n\nexport default withBoundingRects(TooltipWithBounds);\n","const categoricalUsSampleData = [\n  {\n    state: 'Iowa',\n    ecvotes: 6,\n    margin: 4.3,\n  },\n  {\n    state: 'Texas',\n    ecvotes: 38,\n    margin: 1.75,\n  },\n  {\n    state: 'North Carolina',\n    ecvotes: 15,\n    margin: 0.5,\n  },\n  {\n    state: 'Wisconsin',\n    ecvotes: 10,\n    margin: -2.3,\n  },\n  {\n    state: 'Florida',\n    ecvotes: 29,\n    margin: -3,\n  },\n  {\n    state: 'Nevada',\n    ecvotes: 6,\n    margin: -4,\n  },\n  {\n    state: 'Arizona',\n    ecvotes: 11,\n    margin: -4.3,\n  },\n  {\n    state: 'New Hampshire',\n    ecvotes: 4,\n    margin: -4.5,\n  },\n  {\n    state: 'Michigan',\n    ecvotes: 16,\n    margin: -5,\n  },\n];\n\nexport default categoricalUsSampleData;\n","/**\n * @file\n * Various FT watermark components\n */\n\nimport React from 'react';\n\nexport const Light = () => (\n  <path\n    fill=\"#8e9095\"\n    id=\"logo\"\n    d=\"M3,8.5c0,0.7,0.2,0.9,1.5,0.9v0.4H0V9.4c0.9,0,1.2-0.1,1.2-0.8V1.4c0-0.8-0.3-0.8-1.2-0.8V0.2h6.1c0.8,0,1.1,0,1.4-0.1l0,2.7H7.2c-0.2-2-0.7-2.2-2.6-2.2H3v4h1.3c1.3,0,1.3-0.2,1.4-1.2h0.4v2.9H5.7c-0.1-1-0.2-1.2-1.4-1.2H3V8.5zM8.4,9.8V9.4c0.9,0,1.2-0.1,1.2-0.8V1.4c0-0.8-0.3-0.8-1.2-0.8V0.2h4.2v0.4c-0.9,0-1.2,0.1-1.2,0.8v7.1c0,0.8,0.3,0.8,1.2,0.8v0.4H8.4z M22,10l-6.6-8.2v6.7c0,0.8,0.5,0.9,1.5,0.9v0.4h-3.5V9.4c0.9,0,1.4-0.1,1.4-0.9V1.1c-0.4-0.4-0.7-0.5-1.4-0.5V0.2h3.1l5.1,6.5V1.5c0-0.8-0.5-0.9-1.5-0.9V0.2h3.5v0.4c-0.9,0-1.4,0.1-1.4,0.9V10H22z M26.7,9.8h-3.5V9.4c0.9,0,1.3-0.1,1.6-0.9L28,0.1h0.9l3.4,8.5c0.3,0.8,0.4,0.8,1.1,0.8v0.4h-4.1V9.4c1.2,0,1.4-0.1,1.1-0.8l-1-2.6h-3l-0.9,2.5c-0.3,0.8,0.2,0.9,1.2,0.9V9.8z M26.6,5.5h2.6L27.9,2L26.6,5.5z M42.6,10l-6.6-8.2v6.7c0,0.8,0.5,0.9,1.5,0.9v0.4H34V9.4c0.8,0,1.3-0.1,1.3-0.9V1.1c-0.5-0.4-0.8-0.5-1.6-0.5V0.2H37l5.1,6.5V1.5c0-0.8-0.5-0.9-1.5-0.9V0.2h3.5v0.4c-0.9,0-1.4,0.1-1.4,0.9V10H42.6z M52.4,0.1h0.2L52.7,3l-0.4,0c-0.2-1.7-1.1-2.5-2.7-2.5c-1.8,0-3.2,1.5-3.2,3.9c0,3,1.9,4.7,3.9,4.7c0.9,0,1.6-0.2,2.4-1.1L53,8.4c-0.6,0.9-1.8,1.6-3.5,1.6c-2.4,0-4.9-1.8-4.9-4.9c0-3,2.3-5.1,5-5.1c1.3,0,2,0.6,2.3,0.6C52.2,0.6,52.3,0.4,52.4,0.1z M53.8,9.8V9.4c0.9,0,1.2-0.1,1.2-0.8V1.4c0-0.8-0.3-0.8-1.2-0.8V0.2H58v0.4c-0.9,0-1.2,0.1-1.2,0.8v7.1c0,0.8,0.3,0.8,1.2,0.8v0.4H53.8z M61.9,9.8h-3.3V9.4c0.7,0,1.1-0.1,1.4-0.9l3.2-8.4h0.9l3.4,8.5c0.3,0.8,0.4,0.8,1.1,0.8v0.4h-4.1V9.4c1.2,0,1.4-0.1,1.1-0.8l-1-2.6h-3l-0.9,2.5c-0.3,0.8,0.2,0.9,1.2,0.9V9.8z M61.8,5.5h2.6L63,2L61.8,5.5z M69.3,9.8V9.4c0.9,0,1.2-0.1,1.2-0.8V1.4c0-0.8-0.3-0.8-1.2-0.8V0.2h4.1v0.4c-0.9,0-1.2,0.1-1.2,0.8v7.2c0,0.6,0.3,0.7,0.8,0.7h0.5c1.9,0,2.5-0.3,3-2.4L77,7l-0.3,2.9H69.3z M89.4,0.1l0,2.9h-0.4c-0.2-2.1-0.7-2.3-2.6-2.3H86v7.9c0,0.8,0.3,0.9,1.5,0.9v0.4h-4.8V9.4c1.2,0,1.5-0.1,1.5-0.9V0.6h-0.6c-1.9,0-2.3,0.3-2.6,2.3h-0.4l0-2.9c0.3,0,0.5,0.1,1.4,0.1h6C88.9,0.2,89.2,0.1,89.4,0.1z M90.4,9.8V9.4c0.9,0,1.2-0.1,1.2-0.8V1.4c0-0.8-0.3-0.8-1.2-0.8V0.2h4.2v0.4c-0.9,0-1.2,0.1-1.2,0.8v7.1c0,0.8,0.3,0.8,1.2,0.8v0.4H90.4z M107,0.2v0.4c-0.9,0-1.3,0-1.2,0.8l0.8,7.2c0.1,0.7,0.4,0.8,1.2,0.8v0.4h-4.1V9.4c0.9,0,1.2-0.1,1.1-0.8L104,1l-3.1,9h-0.1l-3-9l-0.7,7.5c-0.1,0.8,0.4,0.8,1.3,0.8v0.4h-3.2V9.4c0.9,0,1.2-0.1,1.2-0.8l0.7-7.2c0.1-0.8-0.3-0.8-1.2-0.8V0.2h3.4l2,6.6l2.2-6.6H107z M114.8,6.3h-0.4c-0.1-1-0.2-1.2-1.4-1.2h-1.5v3.5c0,0.6,0.3,0.7,0.8,0.7h0.8c1.9,0,2.5-0.3,3-2.4l0.4,0l-0.3,2.9h-7.6V9.4c0.9,0,1.2-0.1,1.2-0.8V1.4c0-0.8-0.3-0.8-1.2-0.8V0.2h7.3l0,2.4h-0.4c-0.2-1.7-0.7-1.9-2.6-1.9h-1.4v3.9h1.5c1.3,0,1.3-0.2,1.4-1.2h0.4V6.3z M122.5,7.8c0-0.9-0.6-1.3-1.5-1.9l-1.5-0.8c-1.2-0.6-1.8-1.3-1.8-2.5c0-1.5,1.3-2.7,3-2.7c1.2,0,1.8,0.6,2.1,0.6c0.2,0,0.3-0.1,0.4-0.4h0.3l0.1,2.7l-0.4,0c-0.2-1.3-1.1-2.3-2.5-2.3c-1,0-1.7,0.6-1.7,1.4c0,0.9,0.7,1.3,1.5,1.7l1.3,0.7c1.2,0.7,2.1,1.4,2.1,2.7c0,1.7-1.5,2.9-3.3,2.9c-1.3,0-1.9-0.6-2.3-0.6c-0.2,0-0.3,0.2-0.4,0.5h-0.3L117.4,7l0.4,0c0.3,1.8,1.5,2.5,2.8,2.5C121.6,9.5,122.5,9,122.5,7.8z\"\n  />\n);\n\nLight.width = 124;\nLight.height = 10;\n\nexport default {\n  Light,\n};\n","import React from 'react';\nimport { css } from '@emotion/core';\nimport {\n  copyrightStylesBase,\n  sourceStylesBase,\n  sourceStylesPrint,\n  sourceStylesSocial,\n  sourceStylesVideo,\n} from './styles.js';\nimport { chartFooterPropTypes } from '../prop-types';\nimport { chartFooterDefaultProps } from '../default-props';\n\nconst sourceStylesMap = {\n  print: sourceStylesPrint,\n  social: sourceStylesSocial,\n  video: sourceStylesVideo,\n  web: null,\n};\n\nconst ChartFooter = ({\n  copyright,\n  height,\n  margin,\n  source,\n  sourceFontSize,\n  sourceLineHeight,\n  sourcePosition,\n  type,\n}) => {\n  const { x: sourcePositionX = 0, y: sourcePositionY = 0 } = sourcePosition;\n\n  // Calculate number of source lines\n  const noOfSourceLines = (source && source.split('|').length) || 0;\n  // Calculate the height of the chart source lines (excluding the copyright)\n  const sourceHeight = sourceLineHeight * noOfSourceLines;\n\n  // Calculate the position of the FT copyright line (the bottom left corner)\n  const sourceCopyrightPositionY = height - sourcePositionY;\n  // Calculate the height of the chart copyright line\n  const sourceCopyrightHeight = copyright ? sourceLineHeight : 0;\n\n  // Calculate the position the chart footer should start at\n  // (the bottom left corner of the first line)\n  const sourceTopPositionY =\n    sourceCopyrightPositionY - sourceCopyrightHeight - sourceHeight + sourceLineHeight;\n\n  return (\n    <>\n      {/* Source */}\n      <text\n        css={css`\n          font-size: ${sourceFontSize}px;\n          line-height: ${sourceLineHeight}px;\n          ${sourceStylesBase};\n          ${sourceStylesMap[type]};\n        `}\n        data-id={`ft-webgraphic-${type}source`}\n      >\n        {source\n          ? source.split('|').map((line, i) => (\n              <tspan\n                data-id={`ft-webgraphic-${type}__source-line-${i}`}\n                key={`ft-webgraphic-${type}__source-line-${i}`} // eslint-disable-line react/no-array-index-key\n                x={sourcePositionX}\n                y={sourceTopPositionY + i * sourceLineHeight}\n              >\n                {line}\n              </tspan>\n            ))\n          : null}\n      </text>\n\n      {/* Copyright */}\n      {copyright && (\n        <text\n          css={css`\n            font-size: ${sourceFontSize}px;\n            line-height: ${sourceLineHeight}px;\n            ${copyrightStylesBase};\n          `}\n          data-id=\"chart-copyright\"\n        >\n          <tspan x={sourcePositionX} y={sourceCopyrightPositionY}>\n            {copyright}\n          </tspan>\n        </text>\n      )}\n    </>\n  );\n};\n\nChartFooter.propTypes = chartFooterPropTypes;\nChartFooter.defaultProps = chartFooterDefaultProps;\n\nexport default ChartFooter;\n","var isObject = require('./isObject'),\n    now = require('./now'),\n    toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n    nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n *  Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n *  The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n *  Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n *   'leading': true,\n *   'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n  var lastArgs,\n      lastThis,\n      maxWait,\n      result,\n      timerId,\n      lastCallTime,\n      lastInvokeTime = 0,\n      leading = false,\n      maxing = false,\n      trailing = true;\n\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  wait = toNumber(wait) || 0;\n  if (isObject(options)) {\n    leading = !!options.leading;\n    maxing = 'maxWait' in options;\n    maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n    trailing = 'trailing' in options ? !!options.trailing : trailing;\n  }\n\n  function invokeFunc(time) {\n    var args = lastArgs,\n        thisArg = lastThis;\n\n    lastArgs = lastThis = undefined;\n    lastInvokeTime = time;\n    result = func.apply(thisArg, args);\n    return result;\n  }\n\n  function leadingEdge(time) {\n    // Reset any `maxWait` timer.\n    lastInvokeTime = time;\n    // Start the timer for the trailing edge.\n    timerId = setTimeout(timerExpired, wait);\n    // Invoke the leading edge.\n    return leading ? invokeFunc(time) : result;\n  }\n\n  function remainingWait(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime,\n        timeWaiting = wait - timeSinceLastCall;\n\n    return maxing\n      ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n      : timeWaiting;\n  }\n\n  function shouldInvoke(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime;\n\n    // Either this is the first call, activity has stopped and we're at the\n    // trailing edge, the system time has gone backwards and we're treating\n    // it as the trailing edge, or we've hit the `maxWait` limit.\n    return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n      (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n  }\n\n  function timerExpired() {\n    var time = now();\n    if (shouldInvoke(time)) {\n      return trailingEdge(time);\n    }\n    // Restart the timer.\n    timerId = setTimeout(timerExpired, remainingWait(time));\n  }\n\n  function trailingEdge(time) {\n    timerId = undefined;\n\n    // Only invoke if we have `lastArgs` which means `func` has been\n    // debounced at least once.\n    if (trailing && lastArgs) {\n      return invokeFunc(time);\n    }\n    lastArgs = lastThis = undefined;\n    return result;\n  }\n\n  function cancel() {\n    if (timerId !== undefined) {\n      clearTimeout(timerId);\n    }\n    lastInvokeTime = 0;\n    lastArgs = lastCallTime = lastThis = timerId = undefined;\n  }\n\n  function flush() {\n    return timerId === undefined ? result : trailingEdge(now());\n  }\n\n  function debounced() {\n    var time = now(),\n        isInvoking = shouldInvoke(time);\n\n    lastArgs = arguments;\n    lastThis = this;\n    lastCallTime = time;\n\n    if (isInvoking) {\n      if (timerId === undefined) {\n        return leadingEdge(lastCallTime);\n      }\n      if (maxing) {\n        // Handle invocations in a tight loop.\n        clearTimeout(timerId);\n        timerId = setTimeout(timerExpired, wait);\n        return invokeFunc(lastCallTime);\n      }\n    }\n    if (timerId === undefined) {\n      timerId = setTimeout(timerExpired, wait);\n    }\n    return result;\n  }\n  debounced.cancel = cancel;\n  debounced.flush = flush;\n  return debounced;\n}\n\nmodule.exports = debounce;\n","import React from 'react';\nimport Frame from './base';\nimport { convertMMtoPX } from '../../util';\nimport { printChartFrameStyles } from './styles';\nimport { framePrintPropTypes } from '../prop-types';\nimport { framePrintDefaultProps } from '../default-props';\n\nconst FramePrint = ({ type, ...props }) => {\n  // convert mm measures for width and height into pixels\n  const { width: mmWidth, height: mmHeight } = props;\n  const pxWidth = convertMMtoPX(mmWidth);\n  const pxHeight = convertMMtoPX(mmHeight);\n\n  return (\n    <Frame\n      css={printChartFrameStyles}\n      {...props} // eslint-disable-line react/jsx-props-no-spreading\n      type={type}\n      width={pxWidth}\n      height={pxHeight}\n    />\n  );\n};\n\nFramePrint.propTypes = framePrintPropTypes;\nFramePrint.defaultProps = framePrintDefaultProps;\n\nexport default FramePrint;\n","import React from 'react';\nimport Frame from './base';\nimport { socialChartFrameStyles } from './styles';\nimport { frameSocialPropTypes } from '../prop-types';\nimport { frameSocialDefaultProps } from '../default-props';\n\nconst FrameSocial = ({ type, ...props }) => (\n  <Frame\n    css={socialChartFrameStyles}\n    {...props} // eslint-disable-line react/jsx-props-no-spreading\n    type={type}\n  />\n);\n\nFrameSocial.propTypes = frameSocialPropTypes;\nFrameSocial.defaultProps = frameSocialDefaultProps;\n\nexport default FrameSocial;\n","import React from 'react';\nimport Frame from './base';\nimport { videoChartFrameStyles } from './styles';\nimport { frameVideoPropTypes } from '../prop-types';\nimport { frameVideoDefaultProps } from '../default-props';\n\nconst FrameVideo = ({ type, ...props }) => (\n  <Frame\n    css={videoChartFrameStyles}\n    {...props} // eslint-disable-line react/jsx-props-no-spreading\n    type={type}\n  />\n);\n\nFrameVideo.propTypes = frameVideoPropTypes;\nFrameVideo.defaultProps = frameVideoDefaultProps;\n\nexport default FrameVideo;\n","/**\n * @file\n * CSS styles for <AxisArrows />\n */\n\nimport { css } from '@emotion/core';\n\nexport const axisArrowsStyles = css`\n  line {\n    stroke: #66605c;\n  }\n\n  path {\n    fill: #66605c;\n  }\n`;\n\nexport default axisArrowsStyles;\n","import React from 'react';\nimport { Group } from '@visx/group';\nimport { inferScaleType } from '@visx/scale';\nimport { axisBandingComponentDefaultProps } from '../default-props';\n\nconst AxisBanding = ({\n  bandingScale,\n  width,\n  height,\n  orientation,\n  tickValues,\n  structure,\n  tickPositionVariable,\n}) => {\n  const scalePointOffset = inferScaleType(bandingScale) === 'point' ? bandingScale.step() / 2 : 0;\n\n  const [minScale, maxScale] = bandingScale.domain();\n  // Copy tickValues;\n  let tickValuesForBanding = [...tickValues];\n\n  // Maps custom tickValuesForBanding object to derive a simple array of tick values\n  if (tickPositionVariable) {\n    const newValues = tickValuesForBanding.map((d) => {\n      return d[tickPositionVariable];\n    });\n    tickValuesForBanding = newValues;\n  }\n\n  let bands;\n  // Builds bands structure if the scale passed down is ordinal\n  if (structure === 'fixed' && isNaN(tickValuesForBanding[0])) {\n    switch (orientation) {\n      case 'top':\n      case 'bottom':\n        bands = tickValuesForBanding\n          .map((d, i) => ({\n            x: bandingScale(d) - scalePointOffset,\n            y: 0,\n            width: bandingScale.bandwidth() || bandingScale.step(),\n            height,\n          }))\n          .filter((d, i) => i % 2 === 0);\n        break;\n      case 'left':\n      case 'right':\n        bands = tickValuesForBanding\n          .map((d, i) => ({\n            x: 0,\n            y: bandingScale(d) - scalePointOffset,\n            width,\n            height: bandingScale.bandwidth() || bandingScale.step(),\n          }))\n          .filter((d, i) => i % 2 === 0);\n        break;\n      default:\n        bands = [];\n    }\n  } else {\n    /* If not an ordinal scale or custom ticks checks to see if the extent of the domain\n      is greater than the extent of ticks allowing thin bands at the begining and end of the scale */\n    if (structure === 'fixed') {\n      // If first tick is less than the min value in the domain, add it to the front of the array\n      if (minScale < tickValuesForBanding[0]) {\n        tickValuesForBanding.unshift(minScale);\n      }\n      // If first tick is greater than the max value in the domain, add it to the end of the array\n      if (maxScale > tickValuesForBanding[tickValuesForBanding.length - 1]) {\n        tickValuesForBanding.push(maxScale);\n      }\n      // Removes last value if tickValuesForBanding array is uneven preventing NaN calculations\n      if (tickValuesForBanding.length % 2 != 0) {\n        tickValuesForBanding.pop();\n      }\n    }\n\n    // Build bands structure if a scaleBanding is Linear\n    switch (orientation) {\n      case 'top':\n      case 'bottom':\n        bands = tickValuesForBanding\n          .map((d, i) => ({\n            label: d,\n            x: bandingScale(d),\n            y: 0,\n            width: Math.abs(\n              bandingScale(\n                i < tickValuesForBanding.length - 1 ? tickValuesForBanding[i + 1] : maxScale\n              ) - bandingScale(d)\n            ),\n            height,\n          }))\n          .filter((d, i) => i % 2 === 0);\n        break;\n      case 'left':\n      case 'right':\n        bands = tickValuesForBanding\n          .map((d, i) => ({\n            label: d,\n            x: 0,\n            y: bandingScale(tickValuesForBanding[structure === 'fixed' ? i + 1 : i]),\n            width,\n            height: Math.abs(\n              bandingScale(\n                i < tickValuesForBanding.length - 1 ? tickValuesForBanding[i + 1] : maxScale\n              ) - bandingScale(d)\n            ),\n          }))\n          .filter((d, i) => i % 2 === 0);\n        break;\n      default:\n        bands = [];\n    }\n  }\n\n  const renderedBands = bands.map((d, i) => {\n    return <rect key={`band${i}`} x={d.x} y={d.y} width={d.width} height={d.height} />;\n  });\n\n  return (\n    <Group className=\"visx-axis-banding\" id=\"axisBanding\">\n      {renderedBands}\n    </Group>\n  );\n};\nAxisBanding.defaultProps = axisBandingComponentDefaultProps;\n\nexport default AxisBanding;\n","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]';\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n  switch (args.length) {\n    case 0: return func.call(thisArg);\n    case 1: return func.call(thisArg, args[0]);\n    case 2: return func.call(thisArg, args[0], args[1]);\n    case 3: return func.call(thisArg, args[0], args[1], args[2]);\n  }\n  return func.apply(thisArg, args);\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n  var index = -1,\n      result = Array(n);\n\n  while (++index < n) {\n    result[index] = iteratee(index);\n  }\n  return result;\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n  return function(arg) {\n    return func(transform(arg));\n  };\n}\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object),\n    nativeMax = Math.max;\n\n/** Detect if properties shadowing those on `Object.prototype` are non-enumerable. */\nvar nonEnumShadows = !propertyIsEnumerable.call({ 'valueOf': 1 }, 'valueOf');\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n  // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n  // Safari 9 makes `arguments.length` enumerable in strict mode.\n  var result = (isArray(value) || isArguments(value))\n    ? baseTimes(value.length, String)\n    : [];\n\n  var length = result.length,\n      skipIndexes = !!length;\n\n  for (var key in value) {\n    if ((inherited || hasOwnProperty.call(value, key)) &&\n        !(skipIndexes && (key == 'length' || isIndex(key, length)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n  var objValue = object[key];\n  if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n      (value === undefined && !(key in object))) {\n    object[key] = value;\n  }\n}\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n  if (!isPrototype(object)) {\n    return nativeKeys(object);\n  }\n  var result = [];\n  for (var key in Object(object)) {\n    if (hasOwnProperty.call(object, key) && key != 'constructor') {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n  start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n  return function() {\n    var args = arguments,\n        index = -1,\n        length = nativeMax(args.length - start, 0),\n        array = Array(length);\n\n    while (++index < length) {\n      array[index] = args[start + index];\n    }\n    index = -1;\n    var otherArgs = Array(start + 1);\n    while (++index < start) {\n      otherArgs[index] = args[index];\n    }\n    otherArgs[start] = array;\n    return apply(func, this, otherArgs);\n  };\n}\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n  object || (object = {});\n\n  var index = -1,\n      length = props.length;\n\n  while (++index < length) {\n    var key = props[index];\n\n    var newValue = customizer\n      ? customizer(object[key], source[key], key, object, source)\n      : undefined;\n\n    assignValue(object, key, newValue === undefined ? source[key] : newValue);\n  }\n  return object;\n}\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n  return baseRest(function(object, sources) {\n    var index = -1,\n        length = sources.length,\n        customizer = length > 1 ? sources[length - 1] : undefined,\n        guard = length > 2 ? sources[2] : undefined;\n\n    customizer = (assigner.length > 3 && typeof customizer == 'function')\n      ? (length--, customizer)\n      : undefined;\n\n    if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n      customizer = length < 3 ? undefined : customizer;\n      length = 1;\n    }\n    object = Object(object);\n    while (++index < length) {\n      var source = sources[index];\n      if (source) {\n        assigner(object, source, index, customizer);\n      }\n    }\n    return object;\n  });\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  length = length == null ? MAX_SAFE_INTEGER : length;\n  return !!length &&\n    (typeof value == 'number' || reIsUint.test(value)) &&\n    (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n *  else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n  if (!isObject(object)) {\n    return false;\n  }\n  var type = typeof index;\n  if (type == 'number'\n        ? (isArrayLike(object) && isIndex(index, object.length))\n        : (type == 'string' && index in object)\n      ) {\n    return eq(object[index], value);\n  }\n  return false;\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n  var Ctor = value && value.constructor,\n      proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n  return value === proto;\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n  return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n *  else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n  // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n  return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n    (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n *  else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n  return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in Safari 8-9 which returns 'object' for typed array and other constructors.\n  var tag = isObject(value) ? objectToString.call(value) : '';\n  return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n  return typeof value == 'number' &&\n    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/**\n * Assigns own enumerable string keyed properties of source objects to the\n * destination object. Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object` and is loosely based on\n * [`Object.assign`](https://mdn.io/Object/assign).\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assignIn\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n * }\n *\n * function Bar() {\n *   this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assign({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'c': 3 }\n */\nvar assign = createAssigner(function(object, source) {\n  if (nonEnumShadows || isPrototype(source) || isArrayLike(source)) {\n    copyObject(source, keys(source), object);\n    return;\n  }\n  for (var key in source) {\n    if (hasOwnProperty.call(source, key)) {\n      assignValue(object, key, source[key]);\n    }\n  }\n});\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = assign;\n","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]';\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n  switch (args.length) {\n    case 0: return func.call(thisArg);\n    case 1: return func.call(thisArg, args[0]);\n    case 2: return func.call(thisArg, args[0], args[1]);\n    case 3: return func.call(thisArg, args[0], args[1], args[2]);\n  }\n  return func.apply(thisArg, args);\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n  var index = -1,\n      result = Array(n);\n\n  while (++index < n) {\n    result[index] = iteratee(index);\n  }\n  return result;\n}\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n  // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n  // Safari 9 makes `arguments.length` enumerable in strict mode.\n  var result = (isArray(value) || isArguments(value))\n    ? baseTimes(value.length, String)\n    : [];\n\n  var length = result.length,\n      skipIndexes = !!length;\n\n  for (var key in value) {\n    if ((inherited || hasOwnProperty.call(value, key)) &&\n        !(skipIndexes && (key == 'length' || isIndex(key, length)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\n/**\n * Used by `_.defaults` to customize its `_.assignIn` use.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to assign.\n * @param {Object} object The parent object of `objValue`.\n * @returns {*} Returns the value to assign.\n */\nfunction assignInDefaults(objValue, srcValue, key, object) {\n  if (objValue === undefined ||\n      (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n    return srcValue;\n  }\n  return objValue;\n}\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n  var objValue = object[key];\n  if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n      (value === undefined && !(key in object))) {\n    object[key] = value;\n  }\n}\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n  if (!isObject(object)) {\n    return nativeKeysIn(object);\n  }\n  var isProto = isPrototype(object),\n      result = [];\n\n  for (var key in object) {\n    if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n  start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n  return function() {\n    var args = arguments,\n        index = -1,\n        length = nativeMax(args.length - start, 0),\n        array = Array(length);\n\n    while (++index < length) {\n      array[index] = args[start + index];\n    }\n    index = -1;\n    var otherArgs = Array(start + 1);\n    while (++index < start) {\n      otherArgs[index] = args[index];\n    }\n    otherArgs[start] = array;\n    return apply(func, this, otherArgs);\n  };\n}\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n  object || (object = {});\n\n  var index = -1,\n      length = props.length;\n\n  while (++index < length) {\n    var key = props[index];\n\n    var newValue = customizer\n      ? customizer(object[key], source[key], key, object, source)\n      : undefined;\n\n    assignValue(object, key, newValue === undefined ? source[key] : newValue);\n  }\n  return object;\n}\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n  return baseRest(function(object, sources) {\n    var index = -1,\n        length = sources.length,\n        customizer = length > 1 ? sources[length - 1] : undefined,\n        guard = length > 2 ? sources[2] : undefined;\n\n    customizer = (assigner.length > 3 && typeof customizer == 'function')\n      ? (length--, customizer)\n      : undefined;\n\n    if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n      customizer = length < 3 ? undefined : customizer;\n      length = 1;\n    }\n    object = Object(object);\n    while (++index < length) {\n      var source = sources[index];\n      if (source) {\n        assigner(object, source, index, customizer);\n      }\n    }\n    return object;\n  });\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  length = length == null ? MAX_SAFE_INTEGER : length;\n  return !!length &&\n    (typeof value == 'number' || reIsUint.test(value)) &&\n    (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n *  else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n  if (!isObject(object)) {\n    return false;\n  }\n  var type = typeof index;\n  if (type == 'number'\n        ? (isArrayLike(object) && isIndex(index, object.length))\n        : (type == 'string' && index in object)\n      ) {\n    return eq(object[index], value);\n  }\n  return false;\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n  var Ctor = value && value.constructor,\n      proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n  return value === proto;\n}\n\n/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n  var result = [];\n  if (object != null) {\n    for (var key in Object(object)) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n  return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n *  else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n  // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n  return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n    (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n *  else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n  return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in Safari 8-9 which returns 'object' for typed array and other constructors.\n  var tag = isObject(value) ? objectToString.call(value) : '';\n  return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n  return typeof value == 'number' &&\n    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/**\n * This method is like `_.assignIn` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extendWith\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n *   return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignInWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\nvar assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n  copyObject(source, keysIn(source), object, customizer);\n});\n\n/**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\nvar defaults = baseRest(function(args) {\n  args.push(undefined, assignInDefaults);\n  return apply(assignInWith, undefined, args);\n});\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nmodule.exports = defaults;\n","import interval from \"./interval.js\";\nimport {durationHour, durationMinute, durationSecond} from \"./duration.js\";\n\nvar hour = interval(function(date) {\n  date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n}, function(date, step) {\n  date.setTime(+date + step * durationHour);\n}, function(start, end) {\n  return (end - start) / durationHour;\n}, function(date) {\n  return date.getHours();\n});\n\nexport default hour;\nexport var hours = hour.range;\n","import interval from \"./interval.js\";\nimport {durationMinute, durationSecond} from \"./duration.js\";\n\nvar minute = interval(function(date) {\n  date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n}, function(date, step) {\n  date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n  return (end - start) / durationMinute;\n}, function(date) {\n  return date.getMinutes();\n});\n\nexport default minute;\nexport var minutes = minute.range;\n","import interval from \"./interval.js\";\nimport {durationDay} from \"./duration.js\";\n\nvar utcDay = interval(function(date) {\n  date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n  date.setUTCDate(date.getUTCDate() + step);\n}, function(start, end) {\n  return (end - start) / durationDay;\n}, function(date) {\n  return date.getUTCDate() - 1;\n});\n\nexport default utcDay;\nexport var utcDays = utcDay.range;\n","import interval from \"./interval.js\";\nimport {durationHour} from \"./duration.js\";\n\nvar utcHour = interval(function(date) {\n  date.setUTCMinutes(0, 0, 0);\n}, function(date, step) {\n  date.setTime(+date + step * durationHour);\n}, function(start, end) {\n  return (end - start) / durationHour;\n}, function(date) {\n  return date.getUTCHours();\n});\n\nexport default utcHour;\nexport var utcHours = utcHour.range;\n","import interval from \"./interval.js\";\nimport {durationMinute} from \"./duration.js\";\n\nvar utcMinute = interval(function(date) {\n  date.setUTCSeconds(0, 0);\n}, function(date, step) {\n  date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n  return (end - start) / durationMinute;\n}, function(date) {\n  return date.getUTCMinutes();\n});\n\nexport default utcMinute;\nexport var utcMinutes = utcMinute.range;\n","import interval from \"./interval.js\";\n\nvar utcMonth = interval(function(date) {\n  date.setUTCDate(1);\n  date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n  date.setUTCMonth(date.getUTCMonth() + step);\n}, function(start, end) {\n  return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, function(date) {\n  return date.getUTCMonth();\n});\n\nexport default utcMonth;\nexport var utcMonths = utcMonth.range;\n","import interval from \"./interval.js\";\nimport {durationWeek} from \"./duration.js\";\n\nfunction utcWeekday(i) {\n  return interval(function(date) {\n    date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n    date.setUTCHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setUTCDate(date.getUTCDate() + step * 7);\n  }, function(start, end) {\n    return (end - start) / durationWeek;\n  });\n}\n\nexport var utcSunday = utcWeekday(0);\nexport var utcMonday = utcWeekday(1);\nexport var utcTuesday = utcWeekday(2);\nexport var utcWednesday = utcWeekday(3);\nexport var utcThursday = utcWeekday(4);\nexport var utcFriday = utcWeekday(5);\nexport var utcSaturday = utcWeekday(6);\n\nexport var utcSundays = utcSunday.range;\nexport var utcMondays = utcMonday.range;\nexport var utcTuesdays = utcTuesday.range;\nexport var utcWednesdays = utcWednesday.range;\nexport var utcThursdays = utcThursday.range;\nexport var utcFridays = utcFriday.range;\nexport var utcSaturdays = utcSaturday.range;\n","import interval from \"./interval.js\";\n\nvar utcYear = interval(function(date) {\n  date.setUTCMonth(0, 1);\n  date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n  date.setUTCFullYear(date.getUTCFullYear() + step);\n}, function(start, end) {\n  return end.getUTCFullYear() - start.getUTCFullYear();\n}, function(date) {\n  return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = function(k) {\n  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n    date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n    date.setUTCMonth(0, 1);\n    date.setUTCHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setUTCFullYear(date.getUTCFullYear() + step * k);\n  });\n};\n\nexport default utcYear;\nexport var utcYears = utcYear.range;\n","var MapCache = require('./_MapCache');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n  if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  var memoized = function() {\n    var args = arguments,\n        key = resolver ? resolver.apply(this, args) : args[0],\n        cache = memoized.cache;\n\n    if (cache.has(key)) {\n      return cache.get(key);\n    }\n    var result = func.apply(this, args);\n    memoized.cache = cache.set(key, result) || cache;\n    return result;\n  };\n  memoized.cache = new (memoize.Cache || MapCache);\n  return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nmodule.exports = memoize;\n","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used to compose bitmasks for comparison styles. */\nvar UNORDERED_COMPARE_FLAG = 1,\n    PARTIAL_COMPARE_FLAG = 2;\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n    MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    promiseTag = '[object Promise]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n    reIsPlainProp = /^\\w*$/,\n    reLeadingDot = /^\\./,\n    rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n  try {\n    return freeProcess && freeProcess.binding('util');\n  } catch (e) {}\n}());\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * A specialized version of `baseAggregator` for arrays.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\nfunction arrayAggregator(array, setter, iteratee, accumulator) {\n  var index = -1,\n      length = array ? array.length : 0;\n\n  while (++index < length) {\n    var value = array[index];\n    setter(accumulator, value, iteratee(value), array);\n  }\n  return accumulator;\n}\n\n/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n *  else `false`.\n */\nfunction arraySome(array, predicate) {\n  var index = -1,\n      length = array ? array.length : 0;\n\n  while (++index < length) {\n    if (predicate(array[index], index, array)) {\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n  var index = -1,\n      result = Array(n);\n\n  while (++index < n) {\n    result[index] = iteratee(index);\n  }\n  return result;\n}\n\n/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n  return function(value) {\n    return func(value);\n  };\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n  return object == null ? undefined : object[key];\n}\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n  // Many host objects are `Object` objects that can coerce to strings\n  // despite having improperly defined `toString` methods.\n  var result = false;\n  if (value != null && typeof value.toString != 'function') {\n    try {\n      result = !!(value + '');\n    } catch (e) {}\n  }\n  return result;\n}\n\n/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n  var index = -1,\n      result = Array(map.size);\n\n  map.forEach(function(value, key) {\n    result[++index] = [key, value];\n  });\n  return result;\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n  return function(arg) {\n    return func(transform(arg));\n  };\n}\n\n/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n  var index = -1,\n      result = Array(set.size);\n\n  set.forEach(function(value) {\n    result[++index] = value;\n  });\n  return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n    funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n  var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n  return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Symbol = root.Symbol,\n    Uint8Array = root.Uint8Array,\n    propertyIsEnumerable = objectProto.propertyIsEnumerable,\n    splice = arrayProto.splice;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView'),\n    Map = getNative(root, 'Map'),\n    Promise = getNative(root, 'Promise'),\n    Set = getNative(root, 'Set'),\n    WeakMap = getNative(root, 'WeakMap'),\n    nativeCreate = getNative(Object, 'create');\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n    mapCtorString = toSource(Map),\n    promiseCtorString = toSource(Promise),\n    setCtorString = toSource(Set),\n    weakMapCtorString = toSource(WeakMap);\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n    symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n  var index = -1,\n      length = entries ? entries.length : 0;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n  this.__data__ = nativeCreate ? nativeCreate(null) : {};\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n  return this.has(key) && delete this.__data__[key];\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n  var data = this.__data__;\n  if (nativeCreate) {\n    var result = data[key];\n    return result === HASH_UNDEFINED ? undefined : result;\n  }\n  return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n  var data = this.__data__;\n  return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n  var data = this.__data__;\n  data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n  return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n  var index = -1,\n      length = entries ? entries.length : 0;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n  this.__data__ = [];\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    return false;\n  }\n  var lastIndex = data.length - 1;\n  if (index == lastIndex) {\n    data.pop();\n  } else {\n    splice.call(data, index, 1);\n  }\n  return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n  return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    data.push([key, value]);\n  } else {\n    data[index][1] = value;\n  }\n  return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n  var index = -1,\n      length = entries ? entries.length : 0;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n  this.__data__ = {\n    'hash': new Hash,\n    'map': new (Map || ListCache),\n    'string': new Hash\n  };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n  return getMapData(this, key)['delete'](key);\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n  return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n  return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n  getMapData(this, key).set(key, value);\n  return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n  var index = -1,\n      length = values ? values.length : 0;\n\n  this.__data__ = new MapCache;\n  while (++index < length) {\n    this.add(values[index]);\n  }\n}\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n  this.__data__.set(value, HASH_UNDEFINED);\n  return this;\n}\n\n/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n  return this.__data__.has(value);\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n  this.__data__ = new ListCache(entries);\n}\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n  this.__data__ = new ListCache;\n}\n\n/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n  return this.__data__['delete'](key);\n}\n\n/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n  return this.__data__.get(key);\n}\n\n/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n  return this.__data__.has(key);\n}\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n  var cache = this.__data__;\n  if (cache instanceof ListCache) {\n    var pairs = cache.__data__;\n    if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n      pairs.push([key, value]);\n      return this;\n    }\n    cache = this.__data__ = new MapCache(pairs);\n  }\n  cache.set(key, value);\n  return this;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n  // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n  // Safari 9 makes `arguments.length` enumerable in strict mode.\n  var result = (isArray(value) || isArguments(value))\n    ? baseTimes(value.length, String)\n    : [];\n\n  var length = result.length,\n      skipIndexes = !!length;\n\n  for (var key in value) {\n    if ((inherited || hasOwnProperty.call(value, key)) &&\n        !(skipIndexes && (key == 'length' || isIndex(key, length)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n  var length = array.length;\n  while (length--) {\n    if (eq(array[length][0], key)) {\n      return length;\n    }\n  }\n  return -1;\n}\n\n/**\n * Aggregates elements of `collection` on `accumulator` with keys transformed\n * by `iteratee` and values set by `setter`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\nfunction baseAggregator(collection, setter, iteratee, accumulator) {\n  baseEach(collection, function(value, key, collection) {\n    setter(accumulator, value, iteratee(value), collection);\n  });\n  return accumulator;\n}\n\n/**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n  return object && baseFor(object, iteratee, keys);\n}\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n  path = isKey(path, object) ? [path] : castPath(path);\n\n  var index = 0,\n      length = path.length;\n\n  while (object != null && index < length) {\n    object = object[toKey(path[index++])];\n  }\n  return (index && index == length) ? object : undefined;\n}\n\n/**\n * The base implementation of `getTag`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n  return objectToString.call(value);\n}\n\n/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n  return object != null && key in Object(object);\n}\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {boolean} [bitmask] The bitmask of comparison flags.\n *  The bitmask may be composed of the following flags:\n *     1 - Unordered comparison\n *     2 - Partial comparison\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, customizer, bitmask, stack) {\n  if (value === other) {\n    return true;\n  }\n  if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) {\n    return value !== value && other !== other;\n  }\n  return baseIsEqualDeep(value, other, baseIsEqual, customizer, bitmask, stack);\n}\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual`\n *  for more details.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, equalFunc, customizer, bitmask, stack) {\n  var objIsArr = isArray(object),\n      othIsArr = isArray(other),\n      objTag = arrayTag,\n      othTag = arrayTag;\n\n  if (!objIsArr) {\n    objTag = getTag(object);\n    objTag = objTag == argsTag ? objectTag : objTag;\n  }\n  if (!othIsArr) {\n    othTag = getTag(other);\n    othTag = othTag == argsTag ? objectTag : othTag;\n  }\n  var objIsObj = objTag == objectTag && !isHostObject(object),\n      othIsObj = othTag == objectTag && !isHostObject(other),\n      isSameTag = objTag == othTag;\n\n  if (isSameTag && !objIsObj) {\n    stack || (stack = new Stack);\n    return (objIsArr || isTypedArray(object))\n      ? equalArrays(object, other, equalFunc, customizer, bitmask, stack)\n      : equalByTag(object, other, objTag, equalFunc, customizer, bitmask, stack);\n  }\n  if (!(bitmask & PARTIAL_COMPARE_FLAG)) {\n    var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n        othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n    if (objIsWrapped || othIsWrapped) {\n      var objUnwrapped = objIsWrapped ? object.value() : object,\n          othUnwrapped = othIsWrapped ? other.value() : other;\n\n      stack || (stack = new Stack);\n      return equalFunc(objUnwrapped, othUnwrapped, customizer, bitmask, stack);\n    }\n  }\n  if (!isSameTag) {\n    return false;\n  }\n  stack || (stack = new Stack);\n  return equalObjects(object, other, equalFunc, customizer, bitmask, stack);\n}\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n  var index = matchData.length,\n      length = index,\n      noCustomizer = !customizer;\n\n  if (object == null) {\n    return !length;\n  }\n  object = Object(object);\n  while (index--) {\n    var data = matchData[index];\n    if ((noCustomizer && data[2])\n          ? data[1] !== object[data[0]]\n          : !(data[0] in object)\n        ) {\n      return false;\n    }\n  }\n  while (++index < length) {\n    data = matchData[index];\n    var key = data[0],\n        objValue = object[key],\n        srcValue = data[1];\n\n    if (noCustomizer && data[2]) {\n      if (objValue === undefined && !(key in object)) {\n        return false;\n      }\n    } else {\n      var stack = new Stack;\n      if (customizer) {\n        var result = customizer(objValue, srcValue, key, object, source, stack);\n      }\n      if (!(result === undefined\n            ? baseIsEqual(srcValue, objValue, customizer, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG, stack)\n            : result\n          )) {\n        return false;\n      }\n    }\n  }\n  return true;\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n *  else `false`.\n */\nfunction baseIsNative(value) {\n  if (!isObject(value) || isMasked(value)) {\n    return false;\n  }\n  var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n  return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n  return isObjectLike(value) &&\n    isLength(value.length) && !!typedArrayTags[objectToString.call(value)];\n}\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n  // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n  // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n  if (typeof value == 'function') {\n    return value;\n  }\n  if (value == null) {\n    return identity;\n  }\n  if (typeof value == 'object') {\n    return isArray(value)\n      ? baseMatchesProperty(value[0], value[1])\n      : baseMatches(value);\n  }\n  return property(value);\n}\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n  if (!isPrototype(object)) {\n    return nativeKeys(object);\n  }\n  var result = [];\n  for (var key in Object(object)) {\n    if (hasOwnProperty.call(object, key) && key != 'constructor') {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n  var matchData = getMatchData(source);\n  if (matchData.length == 1 && matchData[0][2]) {\n    return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n  }\n  return function(object) {\n    return object === source || baseIsMatch(object, source, matchData);\n  };\n}\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n  if (isKey(path) && isStrictComparable(srcValue)) {\n    return matchesStrictComparable(toKey(path), srcValue);\n  }\n  return function(object) {\n    var objValue = get(object, path);\n    return (objValue === undefined && objValue === srcValue)\n      ? hasIn(object, path)\n      : baseIsEqual(srcValue, objValue, undefined, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG);\n  };\n}\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n  return function(object) {\n    return baseGet(object, path);\n  };\n}\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n  // Exit early for strings to avoid a performance hit in some environments.\n  if (typeof value == 'string') {\n    return value;\n  }\n  if (isSymbol(value)) {\n    return symbolToString ? symbolToString.call(value) : '';\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value) {\n  return isArray(value) ? value : stringToPath(value);\n}\n\n/**\n * Creates a function like `_.groupBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} [initializer] The accumulator object initializer.\n * @returns {Function} Returns the new aggregator function.\n */\nfunction createAggregator(setter, initializer) {\n  return function(collection, iteratee) {\n    var func = isArray(collection) ? arrayAggregator : baseAggregator,\n        accumulator = initializer ? initializer() : {};\n\n    return func(collection, setter, baseIteratee(iteratee, 2), accumulator);\n  };\n}\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n  return function(collection, iteratee) {\n    if (collection == null) {\n      return collection;\n    }\n    if (!isArrayLike(collection)) {\n      return eachFunc(collection, iteratee);\n    }\n    var length = collection.length,\n        index = fromRight ? length : -1,\n        iterable = Object(collection);\n\n    while ((fromRight ? index-- : ++index < length)) {\n      if (iteratee(iterable[index], index, iterable) === false) {\n        break;\n      }\n    }\n    return collection;\n  };\n}\n\n/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n  return function(object, iteratee, keysFunc) {\n    var index = -1,\n        iterable = Object(object),\n        props = keysFunc(object),\n        length = props.length;\n\n    while (length--) {\n      var key = props[fromRight ? length : ++index];\n      if (iteratee(iterable[key], key, iterable) === false) {\n        break;\n      }\n    }\n    return object;\n  };\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} customizer The function to customize comparisons.\n * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`\n *  for more details.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, equalFunc, customizer, bitmask, stack) {\n  var isPartial = bitmask & PARTIAL_COMPARE_FLAG,\n      arrLength = array.length,\n      othLength = other.length;\n\n  if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n    return false;\n  }\n  // Assume cyclic values are equal.\n  var stacked = stack.get(array);\n  if (stacked && stack.get(other)) {\n    return stacked == other;\n  }\n  var index = -1,\n      result = true,\n      seen = (bitmask & UNORDERED_COMPARE_FLAG) ? new SetCache : undefined;\n\n  stack.set(array, other);\n  stack.set(other, array);\n\n  // Ignore non-index properties.\n  while (++index < arrLength) {\n    var arrValue = array[index],\n        othValue = other[index];\n\n    if (customizer) {\n      var compared = isPartial\n        ? customizer(othValue, arrValue, index, other, array, stack)\n        : customizer(arrValue, othValue, index, array, other, stack);\n    }\n    if (compared !== undefined) {\n      if (compared) {\n        continue;\n      }\n      result = false;\n      break;\n    }\n    // Recursively compare arrays (susceptible to call stack limits).\n    if (seen) {\n      if (!arraySome(other, function(othValue, othIndex) {\n            if (!seen.has(othIndex) &&\n                (arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack))) {\n              return seen.add(othIndex);\n            }\n          })) {\n        result = false;\n        break;\n      }\n    } else if (!(\n          arrValue === othValue ||\n            equalFunc(arrValue, othValue, customizer, bitmask, stack)\n        )) {\n      result = false;\n      break;\n    }\n  }\n  stack['delete'](array);\n  stack['delete'](other);\n  return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} customizer The function to customize comparisons.\n * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`\n *  for more details.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, equalFunc, customizer, bitmask, stack) {\n  switch (tag) {\n    case dataViewTag:\n      if ((object.byteLength != other.byteLength) ||\n          (object.byteOffset != other.byteOffset)) {\n        return false;\n      }\n      object = object.buffer;\n      other = other.buffer;\n\n    case arrayBufferTag:\n      if ((object.byteLength != other.byteLength) ||\n          !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n        return false;\n      }\n      return true;\n\n    case boolTag:\n    case dateTag:\n    case numberTag:\n      // Coerce booleans to `1` or `0` and dates to milliseconds.\n      // Invalid dates are coerced to `NaN`.\n      return eq(+object, +other);\n\n    case errorTag:\n      return object.name == other.name && object.message == other.message;\n\n    case regexpTag:\n    case stringTag:\n      // Coerce regexes to strings and treat strings, primitives and objects,\n      // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n      // for more details.\n      return object == (other + '');\n\n    case mapTag:\n      var convert = mapToArray;\n\n    case setTag:\n      var isPartial = bitmask & PARTIAL_COMPARE_FLAG;\n      convert || (convert = setToArray);\n\n      if (object.size != other.size && !isPartial) {\n        return false;\n      }\n      // Assume cyclic values are equal.\n      var stacked = stack.get(object);\n      if (stacked) {\n        return stacked == other;\n      }\n      bitmask |= UNORDERED_COMPARE_FLAG;\n\n      // Recursively compare objects (susceptible to call stack limits).\n      stack.set(object, other);\n      var result = equalArrays(convert(object), convert(other), equalFunc, customizer, bitmask, stack);\n      stack['delete'](object);\n      return result;\n\n    case symbolTag:\n      if (symbolValueOf) {\n        return symbolValueOf.call(object) == symbolValueOf.call(other);\n      }\n  }\n  return false;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} customizer The function to customize comparisons.\n * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`\n *  for more details.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, equalFunc, customizer, bitmask, stack) {\n  var isPartial = bitmask & PARTIAL_COMPARE_FLAG,\n      objProps = keys(object),\n      objLength = objProps.length,\n      othProps = keys(other),\n      othLength = othProps.length;\n\n  if (objLength != othLength && !isPartial) {\n    return false;\n  }\n  var index = objLength;\n  while (index--) {\n    var key = objProps[index];\n    if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n      return false;\n    }\n  }\n  // Assume cyclic values are equal.\n  var stacked = stack.get(object);\n  if (stacked && stack.get(other)) {\n    return stacked == other;\n  }\n  var result = true;\n  stack.set(object, other);\n  stack.set(other, object);\n\n  var skipCtor = isPartial;\n  while (++index < objLength) {\n    key = objProps[index];\n    var objValue = object[key],\n        othValue = other[key];\n\n    if (customizer) {\n      var compared = isPartial\n        ? customizer(othValue, objValue, key, other, object, stack)\n        : customizer(objValue, othValue, key, object, other, stack);\n    }\n    // Recursively compare objects (susceptible to call stack limits).\n    if (!(compared === undefined\n          ? (objValue === othValue || equalFunc(objValue, othValue, customizer, bitmask, stack))\n          : compared\n        )) {\n      result = false;\n      break;\n    }\n    skipCtor || (skipCtor = key == 'constructor');\n  }\n  if (result && !skipCtor) {\n    var objCtor = object.constructor,\n        othCtor = other.constructor;\n\n    // Non `Object` object instances with different constructors are not equal.\n    if (objCtor != othCtor &&\n        ('constructor' in object && 'constructor' in other) &&\n        !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n          typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n      result = false;\n    }\n  }\n  stack['delete'](object);\n  stack['delete'](other);\n  return result;\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n  var data = map.__data__;\n  return isKeyable(key)\n    ? data[typeof key == 'string' ? 'string' : 'hash']\n    : data.map;\n}\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n  var result = keys(object),\n      length = result.length;\n\n  while (length--) {\n    var key = result[length],\n        value = object[key];\n\n    result[length] = [key, value, isStrictComparable(value)];\n  }\n  return result;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = getValue(object, key);\n  return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11,\n// for data views in Edge < 14, and promises in Node.js.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n    (Map && getTag(new Map) != mapTag) ||\n    (Promise && getTag(Promise.resolve()) != promiseTag) ||\n    (Set && getTag(new Set) != setTag) ||\n    (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n  getTag = function(value) {\n    var result = objectToString.call(value),\n        Ctor = result == objectTag ? value.constructor : undefined,\n        ctorString = Ctor ? toSource(Ctor) : undefined;\n\n    if (ctorString) {\n      switch (ctorString) {\n        case dataViewCtorString: return dataViewTag;\n        case mapCtorString: return mapTag;\n        case promiseCtorString: return promiseTag;\n        case setCtorString: return setTag;\n        case weakMapCtorString: return weakMapTag;\n      }\n    }\n    return result;\n  };\n}\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n  path = isKey(path, object) ? [path] : castPath(path);\n\n  var result,\n      index = -1,\n      length = path.length;\n\n  while (++index < length) {\n    var key = toKey(path[index]);\n    if (!(result = object != null && hasFunc(object, key))) {\n      break;\n    }\n    object = object[key];\n  }\n  if (result) {\n    return result;\n  }\n  var length = object ? object.length : 0;\n  return !!length && isLength(length) && isIndex(key, length) &&\n    (isArray(object) || isArguments(object));\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  length = length == null ? MAX_SAFE_INTEGER : length;\n  return !!length &&\n    (typeof value == 'number' || reIsUint.test(value)) &&\n    (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n  if (isArray(value)) {\n    return false;\n  }\n  var type = typeof value;\n  if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n      value == null || isSymbol(value)) {\n    return true;\n  }\n  return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n    (object != null && value in Object(object));\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n  var type = typeof value;\n  return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n    ? (value !== '__proto__')\n    : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n  return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n  var Ctor = value && value.constructor,\n      proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n  return value === proto;\n}\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n *  equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n  return value === value && !isObject(value);\n}\n\n/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n  return function(object) {\n    if (object == null) {\n      return false;\n    }\n    return object[key] === srcValue &&\n      (srcValue !== undefined || (key in Object(object)));\n  };\n}\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoize(function(string) {\n  string = toString(string);\n\n  var result = [];\n  if (reLeadingDot.test(string)) {\n    result.push('');\n  }\n  string.replace(rePropName, function(match, number, quote, string) {\n    result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));\n  });\n  return result;\n});\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n  if (typeof value == 'string' || isSymbol(value)) {\n    return value;\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n  if (func != null) {\n    try {\n      return funcToString.call(func);\n    } catch (e) {}\n    try {\n      return (func + '');\n    } catch (e) {}\n  }\n  return '';\n}\n\n/**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The order of grouped values\n * is determined by the order they occur in `collection`. The corresponding\n * value of each key is an array of elements responsible for generating the\n * key. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity]\n *  The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': [4.2], '6': [6.1, 6.3] }\n *\n * // The `_.property` iteratee shorthand.\n * _.groupBy(['one', 'two', 'three'], 'length');\n * // => { '3': ['one', 'two'], '5': ['three'] }\n */\nvar groupBy = createAggregator(function(result, value, key) {\n  if (hasOwnProperty.call(result, key)) {\n    result[key].push(value);\n  } else {\n    result[key] = [value];\n  }\n});\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n  if (typeof func != 'function' || (resolver && typeof resolver != 'function')) {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  var memoized = function() {\n    var args = arguments,\n        key = resolver ? resolver.apply(this, args) : args[0],\n        cache = memoized.cache;\n\n    if (cache.has(key)) {\n      return cache.get(key);\n    }\n    var result = func.apply(this, args);\n    memoized.cache = cache.set(key, result);\n    return result;\n  };\n  memoized.cache = new (memoize.Cache || MapCache);\n  return memoized;\n}\n\n// Assign cache to `_.memoize`.\nmemoize.Cache = MapCache;\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n  return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n *  else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n  // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n  return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n    (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n *  else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n  return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in Safari 8-9 which returns 'object' for typed array and other constructors.\n  var tag = isObject(value) ? objectToString.call(value) : '';\n  return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n  return typeof value == 'number' &&\n    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n  return value == null ? '' : baseToString(value);\n}\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n  var result = object == null ? undefined : baseGet(object, path);\n  return result === undefined ? defaultValue : result;\n}\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n  return object != null && hasPath(object, path, baseHasIn);\n}\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\n/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n  return value;\n}\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n *   { 'a': { 'b': 2 } },\n *   { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n  return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nmodule.exports = groupBy;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Group } from '@visx/group';\nimport { Bar, Line, Circle } from '@visx/shape';\nimport { Label } from './label';\nimport { approximateTextSize } from '../../util/victory-textsize';\n\n\nexport const legendCategorical = ({ posX, posY, scale, seriesNames, orientation, geometry, fontSize }) => {\n  if (orientation === 'vertical') {\n    return seriesNames.map((d, i) => {\n      const textHeight = approximateTextSize(d, {\n        fontFamily: 'MetricWeb-Regular',\n        fontSize: fontSize,\n      }).height\n      const barWidth = textHeight * 0.9;\n      const barHeight = textHeight * 0.6\n      const diametre = textHeight * 0.6;\n      const radius = diametre* 0.5;\n\n      if (geometry === 'rect') {\n        const yOffset = (textHeight * 0.01)\n        const xOffset = (textHeight * 1.3)\n        return (\n          <Group key={d} className=\"legend\">\n            <Bar\n              fill={scale(d)}\n              x={0}\n              y={i * (textHeight + yOffset)}\n              width={barWidth}\n              height={barHeight}\n            />\n            <Label x={xOffset} y={(i * (textHeight + yOffset)) + (barHeight - yOffset)} category={d} />\n          </Group>\n        );\n      }\n      if (geometry === 'circle') {\n        const yOffset = (textHeight * 0.01)\n        const xOffset = (textHeight * 1)\n        return (\n          <Group key={d} className=\"legend\">\n            <Circle\n              fill={scale(d)}\n              cx={radius}\n              cy={i * (textHeight + yOffset) + radius}\n              r={radius}\n            />\n            <Label x={xOffset} y={(i * (textHeight + yOffset)) + (diametre - yOffset)} category={d} />\n          </Group>\n        );\n      }\n      if (geometry === 'line') {\n        const yOffset = (textHeight * 0.01)\n        const xOffset = (textHeight * 1.3)\n        return (\n          <Group key={d} className=\"legend\">\n            <Line\n              stroke={scale(d)}\n              x1={0}\n              y1={i * (textHeight + yOffset) + (barHeight * 0.5)}\n              x2={barWidth}\n              y2={i * (textHeight + yOffset) + (barHeight * 0.5)}\n            />\n            <Label x={xOffset} y={(i * (textHeight + yOffset)) + (barHeight - yOffset)} category={d} />\n          </Group>\n        );\n      }\n\n      return undefined;\n    });\n  }\n\n  if (orientation === 'horizontal') {\n    let cummulative = 0\n    let labelWidth;\n    return seriesNames.map((d, i) => {\n      const textHeight = approximateTextSize(d, {\n        fontFamily: 'MetricWeb-Regular',\n        fontSize: fontSize,\n      });\n      const barWidth = textHeight.height * 0.9;\n      const barHeight = textHeight.height * 0.6;\n      const diametre = textHeight.height * 0.6;\n      const radius = diametre * 0.5;\n\n      if (geometry === 'rect') {\n        const xOffset = (barWidth * 1.3)\n        const yOffset = (textHeight.height * 0.01)\n        const newX = cummulative;\n        labelWidth = textHeight.width;\n        cummulative = cummulative + xOffset + labelWidth +(xOffset * 0.7);\n        return (\n          <Group key={d} className=\"legend\">\n            <Bar\n              fill={scale(d)}\n              x={newX}\n              y={0}\n              width={barWidth}\n              height={barHeight}\n            />\n            <Label x={newX + xOffset} y={barHeight - yOffset} category={d} />\n          </Group>\n        );\n      }\n      if (geometry === 'circle') {\n        const xOffset = (diametre * 1.1)\n        const yOffset = (textHeight.height * 0.01)\n        const newX = cummulative;\n        labelWidth = textHeight.width;\n        cummulative = cummulative + xOffset + labelWidth +(xOffset *1.2);\n        return (\n          <Group key={d} className=\"legend\">\n            <Circle fill={scale(d)} cx={newX} cy={radius} r={radius} />\n            <Label x={newX + xOffset} y={barHeight - yOffset} category={d} />\n          </Group>\n        );\n      }\n      if (geometry === 'line') {\n        const xOffset = (barWidth * 1.3)\n        const yOffset = (textHeight.height * 0.01)\n        const newX = cummulative;\n        labelWidth = textHeight.width;\n        cummulative = cummulative + xOffset + labelWidth +(xOffset * 0.7);\n        return (\n          <Group key={d} className=\"legend\">\n            <Line\n              stroke={scale(d)}\n              x1={newX}\n              y1={ (barHeight * 0.55)}\n              x2={newX + barWidth}\n              y2={(barHeight * 0.55)}\n            />\n            <Label x={newX + xOffset} y={barHeight - yOffset} category={d} />\n          </Group>\n        );\n      }\n      return undefined;\n    });\n  }\n  return null;\n};\nlegendCategorical.propTypes = {\n  scale: PropTypes.func.isRequired,\n  seriesNames: PropTypes.array.isRequired,\n  orientation: PropTypes.string.isRequired,\n  geometry: PropTypes.string.isRequired,\n  fontSize: PropTypes.number.isRequired,\n  category: PropTypes.string,\n};\n\nexport default legendCategorical;\n\n// @TODO PropTypes\n","import React from 'react';\nimport PropTypes, { bool, number } from 'prop-types';\nimport { Group } from '@visx/group';\nimport { scaleLinear } from '@visx/scale';\nimport { Polygon, Bar, Line } from '@visx/shape';\nimport { Label } from './label';\n\nconst legendThreshold = ({ fontSize, width, orientation, height, scale, invert, median }) => {\n  const valueExtent = [scale.domain()[0], scale.domain()[scale.domain().length - 1]];\n  const yAxis = scaleLinear({\n    domain: [valueExtent[0], valueExtent[1]],\n  });\n  const seriesNames = scale.domain();\n\n  if (orientation === 'horizontal') {\n    if (invert) {\n      yAxis.range([width, 0]);\n      seriesNames.reverse();\n    } else {\n      yAxis.range([0, width]);\n    }\n    return seriesNames.map((d, i) => {\n      if (i < seriesNames.length - 1) {\n        const barWidth = yAxis(seriesNames[i + 1]) - yAxis(d);\n        return (\n          <g key={d} className=\"axis\">\n            <Bar x={yAxis(d)} y={0} width={barWidth} height={fontSize / 2} fill={scale(d)} />\n            <Line x1={yAxis(d)} y1={0} x2={yAxis(d)} y2={fontSize} />\n            <Label x={yAxis(d)} y={fontSize * 2} category={d} textAnchor=\"middle\" />\n          </g>\n        );\n      }\n      if (i + 1 === seriesNames.length) {\n        // const barWidth = yAxis(seriesNames[i + 1]) - yAxis(d);\n        if (typeof median === 'string') {\n          return (\n            <g key={d} className=\"axis\">\n              <Line x1={yAxis(d)} y1={0} x2={yAxis(d)} y2={fontSize} />\n              <Label x={yAxis(d)} y={fontSize * 2} category={d} textAnchor=\"middle\" />\n            </g>\n          );\n        }\n        if (typeof median === 'number') {\n          return (\n            <Group key={d} className=\"axis\">\n              <Line x1={yAxis(d)} y1={0} x2={yAxis(d)} y2={fontSize} />\n              <Label x={yAxis(d)} y={fontSize * 2} category={d} textAnchor=\"middle\" />\n              <Polygon\n                className=\"axis\"\n                sides={3}\n                rotate={30}\n                size={fontSize / 2.5}\n                center={{ x: yAxis(median), y: -fontSize / 2 }}\n              />\n              <Label\n                x={yAxis(median)}\n                y={-fontSize}\n                category={`Median ${median}`}\n                textAnchor=\"middle\"\n              />\n            </Group>\n          );\n        }\n      }\n\n      return undefined;\n    });\n  }\n  if (orientation === 'vertical') {\n    if (invert) {\n      yAxis.range([height, 0]);\n      seriesNames.reverse();\n    } else {\n      yAxis.range([0, height]);\n    }\n    return seriesNames.map((d, i) => {\n      if (i < seriesNames.length - 1) {\n        const barHeight = yAxis(seriesNames[i + 1]) - yAxis(d);\n        return (\n          <Group key={d} className=\"axis\">\n            <Bar\n              x={fontSize * 2}\n              y={yAxis(d)}\n              width={fontSize / 2}\n              height={barHeight}\n              fill={scale(d)}\n            />\n            <Label x={fontSize * 1.3} y={yAxis(d) + 6} category={d} textAnchor=\"end\" />\n            <Line x1={fontSize * 1.5} y1={yAxis(d)} x2={fontSize * 2.5} y2={yAxis(d)} />\n          </Group>\n        );\n      }\n      if (i + 1 === seriesNames.length) {\n        if (typeof median === 'string') {\n          return (\n            <Group key={d} className=\"axis\">\n              <Label x={fontSize * 1.3} y={yAxis(d) + 6} category={d} textAnchor=\"end\" />\n              <Line\n                x1={fontSize * 1.5}\n                y1={yAxis(d)}\n                x2={fontSize * 2.5}\n                y2={yAxis(d)}\n                stroke=\"#000000\"\n              />\n            </Group>\n          );\n        }\n        if (typeof median === 'number') {\n          return (\n            <Group key={d} className=\"axis\">\n              <Label x={fontSize * 1.3} y={yAxis(d) + 6} category={d} textAnchor=\"end\" />\n              <Line\n                x1={fontSize * 1.5}\n                y1={yAxis(d)}\n                x2={fontSize * 2.5}\n                y2={yAxis(d)}\n                stroke=\"#000000\"\n              />\n              <Polygon\n                className=\"axis\"\n                sides={3}\n                rotate={60}\n                size={fontSize / 2.5}\n                center={{ x: fontSize * 3, y: yAxis(median) }}\n              />\n              <Label\n                x={fontSize * 3.4}\n                y={yAxis(median) + fontSize * 0.35}\n                category={`Median ${median}`}\n                textAnchor=\"begin\"\n              />\n            </Group>\n          );\n        }\n      }\n\n      return undefined;\n    });\n  }\n\n  return null;\n};\n\nlegendThreshold.propTypes = {\n  invert: PropTypes.bool,\n  scale: PropTypes.func.isRequired,\n  seriesNames: PropTypes.array.isRequired,\n  orientation: PropTypes.string.isRequired,\n  geometry: PropTypes.string.isRequired,\n  fontSize: PropTypes.number.isRequired,\n  x: PropTypes.number,\n  y: PropTypes.number,\n  width: PropTypes.number,\n  height: PropTypes.number,\n  median: PropTypes.number,\n};\nexport default legendThreshold;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { scaleSqrt } from '@visx/scale';\nimport { extent } from 'd3-array';\nimport { Group } from '@visx/group';\nimport { Line, Circle } from '@visx/shape';\nimport { Label } from './label';\n\nconst legendMagnitude = ({ scale, seriesNames, fontSize, label }) => {\n  const valueExtent = extent(scale.domain());\n  const last = seriesNames.length - 1;\n  const circleScale = scaleSqrt({\n    domain: [0, valueExtent[1]],\n    range: [0, scale.range()[1]],\n  });\n\n  const offsetY = 35;\n  const offsetX = 0;\n\n  return seriesNames.map((d, i) => {\n    if (i === 0) {\n      return (\n        <Group key={d}>\n          <Circle\n            cx={offsetX + circleScale(valueExtent[1])}\n            cy={offsetY + circleScale(valueExtent[1]) * 2 - circleScale(seriesNames[i])}\n            r={circleScale(seriesNames[i])}\n            fill=\"none\"\n          />\n          <Line\n            x1={offsetX + circleScale(valueExtent[1])}\n            y1={offsetY + circleScale(valueExtent[1]) * 2 - circleScale(seriesNames[i]) * 2}\n            x2={offsetX + circleScale(valueExtent[1]) + circleScale(valueExtent[1]) + 15}\n            y2={offsetY + circleScale(valueExtent[1]) * 2 - circleScale(seriesNames[i]) * 2}\n          />\n          <Label\n            x={offsetX + circleScale(valueExtent[1]) + circleScale(valueExtent[1]) + 20}\n            y={offsetY + circleScale(valueExtent[1]) * 2 - circleScale(seriesNames[i]) * 2 + 5}\n            category={`Min ${d}`}\n          />\n          <Label x={0} y={fontSize * 0.2} category=\"Circle size shows\" />\n          <Label x={0} y={fontSize * 1.3} category={label} />\n        </Group>\n      );\n    }\n    if (i === last && seriesNames[i] === valueExtent[1]) {\n      return (\n        <Group key={d}>\n          <Circle\n            cx={offsetX + circleScale(valueExtent[1])}\n            cy={offsetY + circleScale(valueExtent[1]) * 2 - circleScale(seriesNames[i])}\n            r={circleScale(seriesNames[i])}\n          />\n          <Line\n            x1={offsetX + circleScale(valueExtent[1])}\n            y1={offsetY + circleScale(valueExtent[1]) * 2 - circleScale(seriesNames[i]) * 2}\n            x2={offsetX + circleScale(valueExtent[1]) + circleScale(valueExtent[1]) + 15}\n            y2={offsetY + circleScale(valueExtent[1]) * 2 - circleScale(seriesNames[i]) * 2}\n          />\n          <Label\n            x={offsetX + circleScale(valueExtent[1]) + circleScale(valueExtent[1]) + 20}\n            y={offsetY + circleScale(valueExtent[1]) * 2 - circleScale(seriesNames[i]) * 2 + 5}\n            category={`Max ${d}`}\n          />\n        </Group>\n      );\n    }\n    if (i > 0 && seriesNames[i] !== valueExtent[1]) {\n      return (\n        <Group key={d}>\n          <Circle\n            cx={offsetX + circleScale(valueExtent[1])}\n            cy={offsetY + circleScale(valueExtent[1]) * 2 - circleScale(seriesNames[i])}\n            r={circleScale(seriesNames[i])}\n          />\n          <Line\n            x1={offsetX + circleScale(valueExtent[1])}\n            y1={offsetY + circleScale(valueExtent[1]) * 2 - circleScale(seriesNames[i]) * 2}\n            x2={offsetX + circleScale(valueExtent[1]) + circleScale(valueExtent[1]) + 15}\n            y2={offsetY + circleScale(valueExtent[1]) * 2 - circleScale(seriesNames[i]) * 2}\n          />\n          <Label\n            x={offsetX + circleScale(valueExtent[1]) + circleScale(valueExtent[1]) + 20}\n            y={offsetY + circleScale(valueExtent[1]) * 2 - circleScale(seriesNames[i]) * 2 + 5}\n            category={d}\n          />\n        </Group>\n      );\n    }\n    return undefined;\n  });\n};\nlegendMagnitude.propTypes = {\n  scale: PropTypes.func.isRequired,\n  seriesNames: PropTypes.array.isRequired,\n  fontSize: PropTypes.number.isRequired,\n  x: PropTypes.number.isRequired,\n  y: PropTypes.number.isRequired,\n  label: PropTypes.string,\n};\n\nexport default legendMagnitude;\n\n// @TODO PropTypes\n","import React, { useContext } from 'react';\nimport { PlotContext } from '../../components/chart-frame/plot-context';\n\nconst AxisFade = ({ orientation, id }) => {\n  const { margin, padding, width, height } = useContext(PlotContext);\n  const left = margin.left + padding.left;\n  const right = margin.right + padding.right;\n  const top = margin.top + padding.top;\n  const bottom = margin.bottom + padding.bottom;\n  const fullWidth = width + left + right;\n  const fullHeight = height + top + bottom;\n\n  return (\n    <>\n      <defs>\n        <linearGradient\n          id=\"axisFadeGradient\"\n          x1=\"0%\"\n          y1=\"0%\"\n          x2={orientation === 'horizontal' ? '100%' : '0%'}\n          y2={orientation === 'vertical' ? '100%' : '0%'}\n        >\n          <stop offset=\"50%\" stopColor=\"black\" stopOpacity=\"1\" />\n          <stop offset=\"100%\" stopColor=\"black\" stopOpacity=\"0\" />\n        </linearGradient>\n\n        <mask id={id}>\n          <rect x={-left} y={-top} width={fullWidth} height={fullHeight} fill=\"white\" />\n          <rect x=\"0\" y={-top} width={width} height={top} fill=\"url(#axisFadeGradient)\" />\n        </mask>\n      </defs>\n    </>\n  );\n};\n\nexport default AxisFade;\n","var characterMap = {\r\n\t\"À\": \"A\",\r\n\t\"Á\": \"A\",\r\n\t\"Â\": \"A\",\r\n\t\"Ã\": \"A\",\r\n\t\"Ä\": \"A\",\r\n\t\"Å\": \"A\",\r\n\t\"Ấ\": \"A\",\r\n\t\"Ắ\": \"A\",\r\n\t\"Ẳ\": \"A\",\r\n\t\"Ẵ\": \"A\",\r\n\t\"Ặ\": \"A\",\r\n\t\"Æ\": \"AE\",\r\n\t\"Ầ\": \"A\",\r\n\t\"Ằ\": \"A\",\r\n\t\"Ȃ\": \"A\",\r\n\t\"Ç\": \"C\",\r\n\t\"Ḉ\": \"C\",\r\n\t\"È\": \"E\",\r\n\t\"É\": \"E\",\r\n\t\"Ê\": \"E\",\r\n\t\"Ë\": \"E\",\r\n\t\"Ế\": \"E\",\r\n\t\"Ḗ\": \"E\",\r\n\t\"Ề\": \"E\",\r\n\t\"Ḕ\": \"E\",\r\n\t\"Ḝ\": \"E\",\r\n\t\"Ȇ\": \"E\",\r\n\t\"Ì\": \"I\",\r\n\t\"Í\": \"I\",\r\n\t\"Î\": \"I\",\r\n\t\"Ï\": \"I\",\r\n\t\"Ḯ\": \"I\",\r\n\t\"Ȋ\": \"I\",\r\n\t\"Ð\": \"D\",\r\n\t\"Ñ\": \"N\",\r\n\t\"Ò\": \"O\",\r\n\t\"Ó\": \"O\",\r\n\t\"Ô\": \"O\",\r\n\t\"Õ\": \"O\",\r\n\t\"Ö\": \"O\",\r\n\t\"Ø\": \"O\",\r\n\t\"Ố\": \"O\",\r\n\t\"Ṍ\": \"O\",\r\n\t\"Ṓ\": \"O\",\r\n\t\"Ȏ\": \"O\",\r\n\t\"Ù\": \"U\",\r\n\t\"Ú\": \"U\",\r\n\t\"Û\": \"U\",\r\n\t\"Ü\": \"U\",\r\n\t\"Ý\": \"Y\",\r\n\t\"à\": \"a\",\r\n\t\"á\": \"a\",\r\n\t\"â\": \"a\",\r\n\t\"ã\": \"a\",\r\n\t\"ä\": \"a\",\r\n\t\"å\": \"a\",\r\n\t\"ấ\": \"a\",\r\n\t\"ắ\": \"a\",\r\n\t\"ẳ\": \"a\",\r\n\t\"ẵ\": \"a\",\r\n\t\"ặ\": \"a\",\r\n\t\"æ\": \"ae\",\r\n\t\"ầ\": \"a\",\r\n\t\"ằ\": \"a\",\r\n\t\"ȃ\": \"a\",\r\n\t\"ç\": \"c\",\r\n\t\"ḉ\": \"c\",\r\n\t\"è\": \"e\",\r\n\t\"é\": \"e\",\r\n\t\"ê\": \"e\",\r\n\t\"ë\": \"e\",\r\n\t\"ế\": \"e\",\r\n\t\"ḗ\": \"e\",\r\n\t\"ề\": \"e\",\r\n\t\"ḕ\": \"e\",\r\n\t\"ḝ\": \"e\",\r\n\t\"ȇ\": \"e\",\r\n\t\"ì\": \"i\",\r\n\t\"í\": \"i\",\r\n\t\"î\": \"i\",\r\n\t\"ï\": \"i\",\r\n\t\"ḯ\": \"i\",\r\n\t\"ȋ\": \"i\",\r\n\t\"ð\": \"d\",\r\n\t\"ñ\": \"n\",\r\n\t\"ò\": \"o\",\r\n\t\"ó\": \"o\",\r\n\t\"ô\": \"o\",\r\n\t\"õ\": \"o\",\r\n\t\"ö\": \"o\",\r\n\t\"ø\": \"o\",\r\n\t\"ố\": \"o\",\r\n\t\"ṍ\": \"o\",\r\n\t\"ṓ\": \"o\",\r\n\t\"ȏ\": \"o\",\r\n\t\"ù\": \"u\",\r\n\t\"ú\": \"u\",\r\n\t\"û\": \"u\",\r\n\t\"ü\": \"u\",\r\n\t\"ý\": \"y\",\r\n\t\"ÿ\": \"y\",\r\n\t\"Ā\": \"A\",\r\n\t\"ā\": \"a\",\r\n\t\"Ă\": \"A\",\r\n\t\"ă\": \"a\",\r\n\t\"Ą\": \"A\",\r\n\t\"ą\": \"a\",\r\n\t\"Ć\": \"C\",\r\n\t\"ć\": \"c\",\r\n\t\"Ĉ\": \"C\",\r\n\t\"ĉ\": \"c\",\r\n\t\"Ċ\": \"C\",\r\n\t\"ċ\": \"c\",\r\n\t\"Č\": \"C\",\r\n\t\"č\": \"c\",\r\n\t\"C̆\": \"C\",\r\n\t\"c̆\": \"c\",\r\n\t\"Ď\": \"D\",\r\n\t\"ď\": \"d\",\r\n\t\"Đ\": \"D\",\r\n\t\"đ\": \"d\",\r\n\t\"Ē\": \"E\",\r\n\t\"ē\": \"e\",\r\n\t\"Ĕ\": \"E\",\r\n\t\"ĕ\": \"e\",\r\n\t\"Ė\": \"E\",\r\n\t\"ė\": \"e\",\r\n\t\"Ę\": \"E\",\r\n\t\"ę\": \"e\",\r\n\t\"Ě\": \"E\",\r\n\t\"ě\": \"e\",\r\n\t\"Ĝ\": \"G\",\r\n\t\"Ǵ\": \"G\",\r\n\t\"ĝ\": \"g\",\r\n\t\"ǵ\": \"g\",\r\n\t\"Ğ\": \"G\",\r\n\t\"ğ\": \"g\",\r\n\t\"Ġ\": \"G\",\r\n\t\"ġ\": \"g\",\r\n\t\"Ģ\": \"G\",\r\n\t\"ģ\": \"g\",\r\n\t\"Ĥ\": \"H\",\r\n\t\"ĥ\": \"h\",\r\n\t\"Ħ\": \"H\",\r\n\t\"ħ\": \"h\",\r\n\t\"Ḫ\": \"H\",\r\n\t\"ḫ\": \"h\",\r\n\t\"Ĩ\": \"I\",\r\n\t\"ĩ\": \"i\",\r\n\t\"Ī\": \"I\",\r\n\t\"ī\": \"i\",\r\n\t\"Ĭ\": \"I\",\r\n\t\"ĭ\": \"i\",\r\n\t\"Į\": \"I\",\r\n\t\"į\": \"i\",\r\n\t\"İ\": \"I\",\r\n\t\"ı\": \"i\",\r\n\t\"Ĳ\": \"IJ\",\r\n\t\"ĳ\": \"ij\",\r\n\t\"Ĵ\": \"J\",\r\n\t\"ĵ\": \"j\",\r\n\t\"Ķ\": \"K\",\r\n\t\"ķ\": \"k\",\r\n\t\"Ḱ\": \"K\",\r\n\t\"ḱ\": \"k\",\r\n\t\"K̆\": \"K\",\r\n\t\"k̆\": \"k\",\r\n\t\"Ĺ\": \"L\",\r\n\t\"ĺ\": \"l\",\r\n\t\"Ļ\": \"L\",\r\n\t\"ļ\": \"l\",\r\n\t\"Ľ\": \"L\",\r\n\t\"ľ\": \"l\",\r\n\t\"Ŀ\": \"L\",\r\n\t\"ŀ\": \"l\",\r\n\t\"Ł\": \"l\",\r\n\t\"ł\": \"l\",\r\n\t\"Ḿ\": \"M\",\r\n\t\"ḿ\": \"m\",\r\n\t\"M̆\": \"M\",\r\n\t\"m̆\": \"m\",\r\n\t\"Ń\": \"N\",\r\n\t\"ń\": \"n\",\r\n\t\"Ņ\": \"N\",\r\n\t\"ņ\": \"n\",\r\n\t\"Ň\": \"N\",\r\n\t\"ň\": \"n\",\r\n\t\"ŉ\": \"n\",\r\n\t\"N̆\": \"N\",\r\n\t\"n̆\": \"n\",\r\n\t\"Ō\": \"O\",\r\n\t\"ō\": \"o\",\r\n\t\"Ŏ\": \"O\",\r\n\t\"ŏ\": \"o\",\r\n\t\"Ő\": \"O\",\r\n\t\"ő\": \"o\",\r\n\t\"Œ\": \"OE\",\r\n\t\"œ\": \"oe\",\r\n\t\"P̆\": \"P\",\r\n\t\"p̆\": \"p\",\r\n\t\"Ŕ\": \"R\",\r\n\t\"ŕ\": \"r\",\r\n\t\"Ŗ\": \"R\",\r\n\t\"ŗ\": \"r\",\r\n\t\"Ř\": \"R\",\r\n\t\"ř\": \"r\",\r\n\t\"R̆\": \"R\",\r\n\t\"r̆\": \"r\",\r\n\t\"Ȓ\": \"R\",\r\n\t\"ȓ\": \"r\",\r\n\t\"Ś\": \"S\",\r\n\t\"ś\": \"s\",\r\n\t\"Ŝ\": \"S\",\r\n\t\"ŝ\": \"s\",\r\n\t\"Ş\": \"S\",\r\n\t\"Ș\": \"S\",\r\n\t\"ș\": \"s\",\r\n\t\"ş\": \"s\",\r\n\t\"Š\": \"S\",\r\n\t\"š\": \"s\",\r\n\t\"Ţ\": \"T\",\r\n\t\"ţ\": \"t\",\r\n\t\"ț\": \"t\",\r\n\t\"Ț\": \"T\",\r\n\t\"Ť\": \"T\",\r\n\t\"ť\": \"t\",\r\n\t\"Ŧ\": \"T\",\r\n\t\"ŧ\": \"t\",\r\n\t\"T̆\": \"T\",\r\n\t\"t̆\": \"t\",\r\n\t\"Ũ\": \"U\",\r\n\t\"ũ\": \"u\",\r\n\t\"Ū\": \"U\",\r\n\t\"ū\": \"u\",\r\n\t\"Ŭ\": \"U\",\r\n\t\"ŭ\": \"u\",\r\n\t\"Ů\": \"U\",\r\n\t\"ů\": \"u\",\r\n\t\"Ű\": \"U\",\r\n\t\"ű\": \"u\",\r\n\t\"Ų\": \"U\",\r\n\t\"ų\": \"u\",\r\n\t\"Ȗ\": \"U\",\r\n\t\"ȗ\": \"u\",\r\n\t\"V̆\": \"V\",\r\n\t\"v̆\": \"v\",\r\n\t\"Ŵ\": \"W\",\r\n\t\"ŵ\": \"w\",\r\n\t\"Ẃ\": \"W\",\r\n\t\"ẃ\": \"w\",\r\n\t\"X̆\": \"X\",\r\n\t\"x̆\": \"x\",\r\n\t\"Ŷ\": \"Y\",\r\n\t\"ŷ\": \"y\",\r\n\t\"Ÿ\": \"Y\",\r\n\t\"Y̆\": \"Y\",\r\n\t\"y̆\": \"y\",\r\n\t\"Ź\": \"Z\",\r\n\t\"ź\": \"z\",\r\n\t\"Ż\": \"Z\",\r\n\t\"ż\": \"z\",\r\n\t\"Ž\": \"Z\",\r\n\t\"ž\": \"z\",\r\n\t\"ſ\": \"s\",\r\n\t\"ƒ\": \"f\",\r\n\t\"Ơ\": \"O\",\r\n\t\"ơ\": \"o\",\r\n\t\"Ư\": \"U\",\r\n\t\"ư\": \"u\",\r\n\t\"Ǎ\": \"A\",\r\n\t\"ǎ\": \"a\",\r\n\t\"Ǐ\": \"I\",\r\n\t\"ǐ\": \"i\",\r\n\t\"Ǒ\": \"O\",\r\n\t\"ǒ\": \"o\",\r\n\t\"Ǔ\": \"U\",\r\n\t\"ǔ\": \"u\",\r\n\t\"Ǖ\": \"U\",\r\n\t\"ǖ\": \"u\",\r\n\t\"Ǘ\": \"U\",\r\n\t\"ǘ\": \"u\",\r\n\t\"Ǚ\": \"U\",\r\n\t\"ǚ\": \"u\",\r\n\t\"Ǜ\": \"U\",\r\n\t\"ǜ\": \"u\",\r\n\t\"Ứ\": \"U\",\r\n\t\"ứ\": \"u\",\r\n\t\"Ṹ\": \"U\",\r\n\t\"ṹ\": \"u\",\r\n\t\"Ǻ\": \"A\",\r\n\t\"ǻ\": \"a\",\r\n\t\"Ǽ\": \"AE\",\r\n\t\"ǽ\": \"ae\",\r\n\t\"Ǿ\": \"O\",\r\n\t\"ǿ\": \"o\",\r\n\t\"Þ\": \"TH\",\r\n\t\"þ\": \"th\",\r\n\t\"Ṕ\": \"P\",\r\n\t\"ṕ\": \"p\",\r\n\t\"Ṥ\": \"S\",\r\n\t\"ṥ\": \"s\",\r\n\t\"X́\": \"X\",\r\n\t\"x́\": \"x\",\r\n\t\"Ѓ\": \"Г\",\r\n\t\"ѓ\": \"г\",\r\n\t\"Ќ\": \"К\",\r\n\t\"ќ\": \"к\",\r\n\t\"A̋\": \"A\",\r\n\t\"a̋\": \"a\",\r\n\t\"E̋\": \"E\",\r\n\t\"e̋\": \"e\",\r\n\t\"I̋\": \"I\",\r\n\t\"i̋\": \"i\",\r\n\t\"Ǹ\": \"N\",\r\n\t\"ǹ\": \"n\",\r\n\t\"Ồ\": \"O\",\r\n\t\"ồ\": \"o\",\r\n\t\"Ṑ\": \"O\",\r\n\t\"ṑ\": \"o\",\r\n\t\"Ừ\": \"U\",\r\n\t\"ừ\": \"u\",\r\n\t\"Ẁ\": \"W\",\r\n\t\"ẁ\": \"w\",\r\n\t\"Ỳ\": \"Y\",\r\n\t\"ỳ\": \"y\",\r\n\t\"Ȁ\": \"A\",\r\n\t\"ȁ\": \"a\",\r\n\t\"Ȅ\": \"E\",\r\n\t\"ȅ\": \"e\",\r\n\t\"Ȉ\": \"I\",\r\n\t\"ȉ\": \"i\",\r\n\t\"Ȍ\": \"O\",\r\n\t\"ȍ\": \"o\",\r\n\t\"Ȑ\": \"R\",\r\n\t\"ȑ\": \"r\",\r\n\t\"Ȕ\": \"U\",\r\n\t\"ȕ\": \"u\",\r\n\t\"B̌\": \"B\",\r\n\t\"b̌\": \"b\",\r\n\t\"Č̣\": \"C\",\r\n\t\"č̣\": \"c\",\r\n\t\"Ê̌\": \"E\",\r\n\t\"ê̌\": \"e\",\r\n\t\"F̌\": \"F\",\r\n\t\"f̌\": \"f\",\r\n\t\"Ǧ\": \"G\",\r\n\t\"ǧ\": \"g\",\r\n\t\"Ȟ\": \"H\",\r\n\t\"ȟ\": \"h\",\r\n\t\"J̌\": \"J\",\r\n\t\"ǰ\": \"j\",\r\n\t\"Ǩ\": \"K\",\r\n\t\"ǩ\": \"k\",\r\n\t\"M̌\": \"M\",\r\n\t\"m̌\": \"m\",\r\n\t\"P̌\": \"P\",\r\n\t\"p̌\": \"p\",\r\n\t\"Q̌\": \"Q\",\r\n\t\"q̌\": \"q\",\r\n\t\"Ř̩\": \"R\",\r\n\t\"ř̩\": \"r\",\r\n\t\"Ṧ\": \"S\",\r\n\t\"ṧ\": \"s\",\r\n\t\"V̌\": \"V\",\r\n\t\"v̌\": \"v\",\r\n\t\"W̌\": \"W\",\r\n\t\"w̌\": \"w\",\r\n\t\"X̌\": \"X\",\r\n\t\"x̌\": \"x\",\r\n\t\"Y̌\": \"Y\",\r\n\t\"y̌\": \"y\",\r\n\t\"A̧\": \"A\",\r\n\t\"a̧\": \"a\",\r\n\t\"B̧\": \"B\",\r\n\t\"b̧\": \"b\",\r\n\t\"Ḑ\": \"D\",\r\n\t\"ḑ\": \"d\",\r\n\t\"Ȩ\": \"E\",\r\n\t\"ȩ\": \"e\",\r\n\t\"Ɛ̧\": \"E\",\r\n\t\"ɛ̧\": \"e\",\r\n\t\"Ḩ\": \"H\",\r\n\t\"ḩ\": \"h\",\r\n\t\"I̧\": \"I\",\r\n\t\"i̧\": \"i\",\r\n\t\"Ɨ̧\": \"I\",\r\n\t\"ɨ̧\": \"i\",\r\n\t\"M̧\": \"M\",\r\n\t\"m̧\": \"m\",\r\n\t\"O̧\": \"O\",\r\n\t\"o̧\": \"o\",\r\n\t\"Q̧\": \"Q\",\r\n\t\"q̧\": \"q\",\r\n\t\"U̧\": \"U\",\r\n\t\"u̧\": \"u\",\r\n\t\"X̧\": \"X\",\r\n\t\"x̧\": \"x\",\r\n\t\"Z̧\": \"Z\",\r\n\t\"z̧\": \"z\",\r\n};\r\n\r\nvar chars = Object.keys(characterMap).join('|');\r\nvar allAccents = new RegExp(chars, 'g');\r\nvar firstAccent = new RegExp(chars, '');\r\n\r\nvar removeAccents = function(string) {\t\r\n\treturn string.replace(allAccents, function(match) {\r\n\t\treturn characterMap[match];\r\n\t});\r\n};\r\n\r\nvar hasAccents = function(string) {\r\n\treturn !!string.match(firstAccent);\r\n};\r\n\r\nmodule.exports = removeAccents;\r\nmodule.exports.has = hasAccents;\r\nmodule.exports.remove = removeAccents;\r\n","/**\n * @file\n * Marimekko key component. Temporary implementation for 2020 US polltracker, pending VVC legend component\n */\n\nimport React from 'react';\nimport { Group } from '@visx/group';\nimport { scaleLinear } from '@visx/scale';\nimport { Text } from '@visx/text';\nimport { extent, sum } from 'd3-array';\nimport { baseStyles, titleStyles, annotationStyles } from './styles-key';\nimport Bars from '../../components/bars';\nimport { marimekkoKeyPropTypes } from '../../components/prop-types';\nimport { marimekkoKeyDefaultProps } from '../../components/default-props';\n\nconst barPaddingInner = 1;\n\nconst MarimekkoKey = ({\n  barHeightAnnotation,\n  barHeightAnnotationLineHeight,\n  barHeightAnnotationWidth,\n  keyBarsWidth,\n  keyData: data,\n  keyHeight,\n  keyTitle,\n  keyTitleWidth,\n  keyX,\n  keyY,\n  margin,\n  padding,\n}) => {\n  const barHeightAnnotationLineY1 = (keyHeight - barHeightAnnotationLineHeight) / 2;\n  const barHeightAnnotationLineY2 = keyHeight - barHeightAnnotationLineHeight / 2;\n\n  // Modified Marimekko geometry\n  const dataXExtent = extent(data, d => d.width);\n  const parsedData = data.reduce((a, c, i) => {\n    // Add yOffset which details cumulative height based on the size variable\n    return [\n      ...a,\n      {\n        ...c,\n        yOffset: i === 0 ? 1 : Math.abs(a[a.length - 1].height) + a[a.length - 1].yOffset + 1,\n      },\n    ];\n  }, []);\n  const totalHeight = sum(data, d => Math.abs(d.height)) + barPaddingInner * data.length + 1; // Calculate totalHeight for the yScale, plus one for the offset at the top\n\n  const xScale = scaleLinear({\n    domain: [Math.min(0, dataXExtent[0]), Math.max(dataXExtent[1], 0)],\n  });\n  const yScale = scaleLinear({ domain: [0, totalHeight] });\n\n  return (\n    <Group\n      css={baseStyles}\n      transform={`translate(${keyX || -(margin.left + padding.left)}, ${keyY})`}\n    >\n      {/* Key title */}\n      <Text css={titleStyles} verticalAnchor=\"middle\" width={keyTitleWidth} y={keyHeight / 2}>\n        {keyTitle}\n      </Text>\n\n      {/* Bars and annotation line */}\n      <Group transform={`translate(${keyTitleWidth}, 0)`}>\n        <Bars\n          barHeightVariable=\"height\"\n          data={parsedData}\n          fill=\"#cccccc\"\n          height={keyHeight}\n          width={keyBarsWidth}\n          xScale={xScale}\n          xVariable=\"width\"\n          yScale={yScale}\n          yVariable=\"yOffset\"\n        />\n\n        <line x1=\"0\" x2=\"0\" y1=\"0\" y2={keyHeight} stroke=\"#666666\" strokeWidth=\"1\" />\n\n        {/* Annotation line vertical */}\n        <line\n          x1={keyBarsWidth + 5}\n          x2={keyBarsWidth + 5}\n          y1={barHeightAnnotationLineY1}\n          y2={barHeightAnnotationLineY2}\n          stroke=\"#33302e\"\n          strokeWidth=\"1\"\n        />\n\n        {/* Annotation line top bar */}\n        <line\n          x1={keyBarsWidth}\n          x2={keyBarsWidth + 10}\n          y1={barHeightAnnotationLineY1}\n          y2={barHeightAnnotationLineY1}\n          stroke=\"#33302e\"\n          strokeWidth=\"1\"\n        />\n\n        {/* Annotation line bottom bar */}\n        <line\n          x1={keyBarsWidth}\n          x2={keyBarsWidth + 10}\n          y1={barHeightAnnotationLineY2}\n          y2={barHeightAnnotationLineY2}\n          stroke=\"#33302e\"\n          strokeWidth=\"1\"\n        />\n      </Group>\n\n      {/* Bar height annotation */}\n      <Text\n        css={annotationStyles}\n        verticalAnchor=\"middle\"\n        width={barHeightAnnotationWidth}\n        x={keyTitleWidth + keyBarsWidth + 15}\n        y={keyHeight / 2}\n      >\n        {barHeightAnnotation}\n      </Text>\n    </Group>\n  );\n};\n\nMarimekkoKey.propTypes = marimekkoKeyPropTypes;\nMarimekkoKey.defaultProps = marimekkoKeyDefaultProps;\n\nexport default MarimekkoKey;\n","import React from 'react';\nimport Slider from '../react-range';\nimport { timeFormat, timeParse } from 'd3-time-format';\nimport './panel.scss';\n\nconst PlaybackControls = ({ date, max, onChange, onClick, playing, value }) => {\n  const icon = playing ? 'pause' : 'play';\n  const parseTime = timeParse('%Y-%m-%d');\n  const formatTime = timeFormat('%b %e %Y');\n  const dateFormatted = formatTime(parseTime(date));\n\n  const buttonClassname = [\n    'o-buttons',\n    'o-buttons--secondary',\n    'o-buttons--mono',\n    'o-buttons-icon',\n    `o-buttons-icon--${icon}`,\n    'o-buttons-icon--icon-only',\n  ]\n    .filter(Boolean)\n    .join(' ');\n\n  return (\n    <div className=\"playback-controls\">\n      <div className=\"playback-controls__play-button\">\n        <button\n          aria-label={`${icon.charAt(0).toUpperCase()}${icon.slice(1)}`}\n          className={buttonClassname}\n          onClick={onClick}\n          type=\"button\"\n        />\n      </div>\n\n      <div className=\"playback-controls__date\">Date: {dateFormatted}</div>\n\n      <div className=\"playback-controls__range-slider\">\n        <Slider min={0} max={max} onChange={onChange} tooltip={false} value={value} />\n      </div>\n    </div>\n  );\n};\n\nexport default PlaybackControls;\n","// Copied from https://github.com/whoisandy/react-rangeslider\nimport Rangeslider from './Rangeslider'\nexport default Rangeslider","/* eslint no-debugger: \"warn\" */\nimport cx from 'classnames'\nimport React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport ResizeObserver from 'resize-observer-polyfill'\nimport { capitalize, clamp } from './utils'\nimport './styles.scss';\n\n/**\n * Predefined constants\n * @type {Object}\n */\nconst constants = {\n  orientation: {\n    horizontal: {\n      dimension: 'width',\n      direction: 'left',\n      reverseDirection: 'right',\n      coordinate: 'x'\n    },\n    vertical: {\n      dimension: 'height',\n      direction: 'top',\n      reverseDirection: 'bottom',\n      coordinate: 'y'\n    }\n  }\n}\n\nclass Slider extends Component {\n  static propTypes = {\n    min: PropTypes.number,\n    max: PropTypes.number,\n    step: PropTypes.number,\n    value: PropTypes.number,\n    orientation: PropTypes.string,\n    tooltip: PropTypes.bool,\n    reverse: PropTypes.bool,\n    labels: PropTypes.object,\n    handleLabel: PropTypes.string,\n    format: PropTypes.func,\n    onChangeStart: PropTypes.func,\n    onChange: PropTypes.func,\n    onChangeComplete: PropTypes.func\n  };\n\n  static defaultProps = {\n    min: 0,\n    max: 100,\n    step: 1,\n    value: 0,\n    orientation: 'horizontal',\n    tooltip: true,\n    reverse: false,\n    labels: {},\n    handleLabel: ''\n  };\n\n  constructor (props, context) {\n    super(props, context)\n\n    this.state = {\n      active: false,\n      limit: 0,\n      grab: 0\n    }\n  }\n\n  componentDidMount () {\n    this.handleUpdate()\n    const resizeObserver = new ResizeObserver(this.handleUpdate)\n    resizeObserver.observe(this.slider)\n  }\n\n  /**\n   * Format label/tooltip value\n   * @param  {Number} - value\n   * @return {Formatted Number}\n   */\n  handleFormat = value => {\n    const { format } = this.props\n    return format ? format(value) : value\n  };\n\n  /**\n   * Update slider state on change\n   * @return {void}\n   */\n  handleUpdate = () => {\n    if (!this.slider) {\n      // for shallow rendering\n      return\n    }\n    const { orientation } = this.props\n    const dimension = capitalize(constants.orientation[orientation].dimension)\n    const sliderPos = this.slider[`offset${dimension}`]\n    const handlePos = this.handle[`offset${dimension}`]\n\n    this.setState({\n      limit: sliderPos - handlePos,\n      grab: handlePos / 2\n    })\n  };\n\n  /**\n   * Attach event listeners to mousemove/mouseup events\n   * @return {void}\n   */\n  handleStart = e => {\n    const { onChangeStart } = this.props\n    document.addEventListener('mousemove', this.handleDrag)\n    document.addEventListener('mouseup', this.handleEnd)\n    this.setState(\n      {\n        active: true\n      },\n      () => {\n        onChangeStart && onChangeStart(e)\n      }\n    )\n  };\n\n  /**\n   * Handle drag/mousemove event\n   * @param  {Object} e - Event object\n   * @return {void}\n   */\n  handleDrag = e => {\n    e.stopPropagation()\n    const { onChange } = this.props\n    const { target: { className, classList, dataset } } = e\n    if (!onChange || className === 'rangeslider__labels') return\n\n    let value = this.position(e)\n\n    if (\n      classList &&\n      classList.contains('rangeslider__label-item') &&\n      dataset.value\n    ) {\n      value = parseFloat(dataset.value)\n    }\n\n    onChange && onChange(value, e)\n  };\n\n  /**\n   * Detach event listeners to mousemove/mouseup events\n   * @return {void}\n   */\n  handleEnd = e => {\n    const { onChangeComplete } = this.props\n    this.setState(\n      {\n        active: false\n      },\n      () => {\n        onChangeComplete && onChangeComplete(e)\n      }\n    )\n    document.removeEventListener('mousemove', this.handleDrag)\n    document.removeEventListener('mouseup', this.handleEnd)\n  };\n\n  /**\n   * Support for key events on the slider handle\n   * @param  {Object} e - Event object\n   * @return {void}\n   */\n  handleKeyDown = e => {\n    e.preventDefault()\n    const { keyCode } = e\n    const { value, min, max, step, onChange } = this.props\n    let sliderValue\n\n    switch (keyCode) {\n      case 38:\n      case 39:\n        sliderValue = value + step > max ? max : value + step\n        onChange && onChange(sliderValue, e)\n        break\n      case 37:\n      case 40:\n        sliderValue = value - step < min ? min : value - step\n        onChange && onChange(sliderValue, e)\n        break\n    }\n  };\n\n  /**\n   * Calculate position of slider based on its value\n   * @param  {number} value - Current value of slider\n   * @return {position} pos - Calculated position of slider based on value\n   */\n  getPositionFromValue = value => {\n    const { limit } = this.state\n    const { min, max } = this.props\n    const diffMaxMin = max - min\n    const diffValMin = value - min\n    const percentage = diffValMin / diffMaxMin\n    const pos = Math.round(percentage * limit)\n\n    return pos\n  };\n\n  /**\n   * Translate position of slider to slider value\n   * @param  {number} pos - Current position/coordinates of slider\n   * @return {number} value - Slider value\n   */\n  getValueFromPosition = pos => {\n    const { limit } = this.state\n    const { orientation, min, max, step } = this.props\n    const percentage = clamp(pos, 0, limit) / (limit || 1)\n    const baseVal = step * Math.round(percentage * (max - min) / step)\n    const value = orientation === 'horizontal' ? baseVal + min : max - baseVal\n\n    return clamp(value, min, max)\n  };\n\n  /**\n   * Calculate position of slider based on value\n   * @param  {Object} e - Event object\n   * @return {number} value - Slider value\n   */\n  position = e => {\n    const { grab } = this.state\n    const { orientation, reverse } = this.props\n\n    const node = this.slider\n    const coordinateStyle = constants.orientation[orientation].coordinate\n    const directionStyle = reverse\n      ? constants.orientation[orientation].reverseDirection\n      : constants.orientation[orientation].direction\n    const clientCoordinateStyle = `client${capitalize(coordinateStyle)}`\n    const coordinate = !e.touches\n      ? e[clientCoordinateStyle]\n      : e.touches[0][clientCoordinateStyle]\n    const direction = node.getBoundingClientRect()[directionStyle]\n    const pos = reverse\n      ? direction - coordinate - grab\n      : coordinate - direction - grab\n    const value = this.getValueFromPosition(pos)\n\n    return value\n  };\n\n  /**\n   * Grab coordinates of slider\n   * @param  {Object} pos - Position object\n   * @return {Object} - Slider fill/handle coordinates\n   */\n  coordinates = pos => {\n    const { limit, grab } = this.state\n    const { orientation } = this.props\n    const value = this.getValueFromPosition(pos)\n    const position = this.getPositionFromValue(value)\n    const handlePos = orientation === 'horizontal' ? position + grab : position\n    const fillPos = orientation === 'horizontal'\n      ? handlePos\n      : limit - handlePos\n\n    return {\n      fill: fillPos,\n      handle: handlePos,\n      label: handlePos\n    }\n  };\n\n  renderLabels = labels => (\n    <ul\n      ref={sl => {\n        this.labels = sl\n      }}\n      className={cx('rangeslider__labels')}\n    >\n      {labels}\n    </ul>\n  );\n\n  render () {\n    const {\n      value,\n      orientation,\n      className,\n      tooltip,\n      reverse,\n      labels,\n      min,\n      max,\n      handleLabel\n    } = this.props\n    const { active } = this.state\n    const dimension = constants.orientation[orientation].dimension\n    const direction = reverse\n      ? constants.orientation[orientation].reverseDirection\n      : constants.orientation[orientation].direction\n    const position = this.getPositionFromValue(value)\n    const coords = this.coordinates(position)\n    const fillStyle = { [dimension]: `${coords.fill}px` }\n    const handleStyle = { [direction]: `${coords.handle}px` }\n    let showTooltip = tooltip && active\n\n    let labelItems = []\n    let labelKeys = Object.keys(labels)\n\n    if (labelKeys.length > 0) {\n      labelKeys = labelKeys.sort((a, b) => (reverse ? a - b : b - a))\n\n      for (let key of labelKeys) {\n        const labelPosition = this.getPositionFromValue(key)\n        const labelCoords = this.coordinates(labelPosition)\n        const labelStyle = { [direction]: `${labelCoords.label}px` }\n\n        labelItems.push(\n          <li\n            key={key}\n            className={cx('rangeslider__label-item')}\n            data-value={key}\n            onMouseDown={this.handleDrag}\n            onTouchStart={this.handleStart}\n            onTouchEnd={this.handleEnd}\n            style={labelStyle}\n          >\n            {this.props.labels[key]}\n          </li>\n        )\n      }\n    }\n\n    return (\n      <div\n        ref={s => {\n          this.slider = s\n        }}\n        className={cx(\n          'rangeslider',\n          `rangeslider-${orientation}`,\n          { 'rangeslider-reverse': reverse },\n          className\n        )}\n        onMouseDown={this.handleDrag}\n        onMouseUp={this.handleEnd}\n        onTouchStart={this.handleStart}\n        onTouchEnd={this.handleEnd}\n        aria-valuemin={min}\n        aria-valuemax={max}\n        aria-valuenow={value}\n        aria-orientation={orientation}\n      >\n        <div className='rangeslider__fill' style={fillStyle} />\n        <div\n          ref={sh => {\n            this.handle = sh\n          }}\n          className='rangeslider__handle'\n          onMouseDown={this.handleStart}\n          onTouchMove={this.handleDrag}\n          onTouchEnd={this.handleEnd}\n          onKeyDown={this.handleKeyDown}\n          style={handleStyle}\n          tabIndex={0}\n        >\n          {showTooltip\n            ? <div\n              ref={st => {\n                this.tooltip = st\n              }}\n              className='rangeslider__handle-tooltip'\n              >\n              <span>{this.handleFormat(value)}</span>\n            </div>\n            : null}\n          <div className='rangeslider__handle-label'>{handleLabel}</div>\n        </div>\n        {labels ? this.renderLabels(labelItems) : null}\n      </div>\n    )\n  }\n}\n\nexport default Slider","function _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}\n\nmodule.exports = _classCallCheck;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _defineProperties(target, props) {\n  for (var i = 0; i < props.length; i++) {\n    var descriptor = props[i];\n    descriptor.enumerable = descriptor.enumerable || false;\n    descriptor.configurable = true;\n    if (\"value\" in descriptor) descriptor.writable = true;\n    Object.defineProperty(target, descriptor.key, descriptor);\n  }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n  if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n  if (staticProps) _defineProperties(Constructor, staticProps);\n  return Constructor;\n}\n\nmodule.exports = _createClass;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","var setPrototypeOf = require(\"./setPrototypeOf.js\");\n\nfunction _inherits(subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function\");\n  }\n\n  subClass.prototype = Object.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) setPrototypeOf(subClass, superClass);\n}\n\nmodule.exports = _inherits;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","var _typeof = require(\"@babel/runtime/helpers/typeof\")[\"default\"];\n\nvar assertThisInitialized = require(\"./assertThisInitialized.js\");\n\nfunction _possibleConstructorReturn(self, call) {\n  if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n    return call;\n  } else if (call !== void 0) {\n    throw new TypeError(\"Derived constructors may only return object or undefined\");\n  }\n\n  return assertThisInitialized(self);\n}\n\nmodule.exports = _possibleConstructorReturn;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { formatNumber } from '../../utils';\nimport './style.scss';\n\nconst Total = ({ totalsData: data }) => (\n  <div className=\"total-wrapper\">\n    <div className=\"total-text\">Total vaccination doses given globally so far:</div>\n    <div className=\"total-number\">{formatNumber(data.vaccinations, 2)}</div>\n  </div>\n);\n\nTotal.propTypes = {\n  totalsData: PropTypes.shape({\n    vaccinations: PropTypes.number.isRequired,\n  }).isRequired,\n};\n\nexport default Total;\n","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"indefinite\"] = factory();\n\telse\n\t\troot[\"indefinite\"] = factory();\n})(window, 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/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\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.l = 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// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 2);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports) {\n\nvar STARTS_WITH_VOWEL = /^[aeiouAEIOU]/;\n/**\n * Array#indexOf is faster IF the word starts with \"a\" (for example),\n * but negligibly faster when you have to .toLowerCase() the word, and\n * slower if the word happens to start with (e.g.) \"u.\"\n */\n\nexports.startsWithVowel = function (word) {\n  return STARTS_WITH_VOWEL.test(word);\n};\n\nexports.capitalize = function (article, opts) {\n  if (opts.capitalize) {\n    article = \"\".concat(article.charAt(0).toUpperCase()).concat(article.slice(1));\n  }\n\n  return article;\n};\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports) {\n\nexports.check = function (word, ending) {\n  if (ending) {\n    // If the word ends in the ending, remove it.\n    var regex = new RegExp(\"\".concat(ending, \"$\"));\n    word = word.replace(regex, '');\n  }\n\n  return exports.list.indexOf(word) > -1;\n};\n/**\n * Here follows a List of words that take irregular articles because their\n * first letter is either a consonant pronounced like a vowel (hour) or a\n * vowel proncounced like a consonant (ukelele). Note that this is not only\n * nouns because adjectives and adverbs that start with these letters could\n * also follow an article when they identify a later noun, as in \"a useless\n * tool.\"\n *\n * This is not an attempt at a complete list, but rather a collection of\n * words used in at least moderate frequency. A list of ALL irregular words\n * would be too exhaustive to compile without some sort of tool.\n * http://www.thefreedictionary.com/words-that-start-with-eu says there are\n * over 1800 words starting with \"eu\" alone.\n *\n * At least for now, this list omits proper names, as they aren't USUALLY\n * used in such a way as to require an _indefinite_ article. I can't think,\n * for example, of a case where you'd want to say \"a Eustace.\"\n */\n\n\nexports.list = [// Nouns: eu like y\n'eunuch', 'eucalyptus', 'eugenics', 'eulogy', 'euphemism', 'euphony', 'euphoria', 'eureka', // Adjectives: eu like y\n'euro', 'european', 'euphemistic', 'euphonic', 'euphoric', // Adverbs: eu like y\n'euphemistically', 'euphonically', 'euphorically', // Nouns: silent h\n'heir', 'heiress', 'herb', 'homage', 'honesty', 'honor', 'honour', 'hour', // Adjectives: silent h\n'honest', 'honorous', // Adverbs: silent h\n'honestly', 'hourly', // Nouns: o like w\n'one', 'ouija', // Adjectives: o like w\n'once', // Adverbs: o like w\n// Nouns: u like y\n'ubiquity', 'udometer', 'ufo', 'uke', 'ukelele', 'ululate', 'unicorn', 'unicycle', 'uniform', 'unify', 'union', 'unison', 'unit', 'unity', 'universe', 'university', 'upas', 'ural', 'uranium', 'urea', 'ureter', 'urethra', 'urine', 'urologist', 'urology', 'urus', 'usage', 'use', 'user', 'usual', 'usurp', 'usury', 'utensil', 'uterus', 'utility', 'utopia', 'utricle', 'uvarovite', 'uvea', 'uvula', 'utah', 'utahn', // Adjectives: u like y\n'ubiquitous', 'ugandan', 'ukrainian', 'unanimous', 'unicameral', 'unified', 'unique', 'unisex', 'universal', 'urinal', 'urological', 'useful', 'useless', 'usurious', 'usurped', 'utilitarian', 'utopic', // Adverbs: u like y\n'ubiquitously', 'unanimously', 'unicamerally', 'uniquely', 'universally', 'urologically', 'usefully', 'uselessly', 'usuriously', // Nouns: y like i\n'yttria', 'yggdrasil', 'ylem', 'yperite', 'ytterbia', 'ytterbium', 'yttrium', // Adjectives: y like i\n'ytterbous', 'ytterbic', 'yttric', // Single letters\n'f', 'h', 'l', 'm', 'n', 'r', 's', 'u', 'x'];\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar _require = __webpack_require__(0),\n    capitalize = _require.capitalize;\n\nvar irregulars = __webpack_require__(1);\n\nvar rules = __webpack_require__(3);\n\nvar indefinite = function indefinite(word) {\n  var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  var article;\n  /**\n   * I'd really prefer to use for of here, but babel converts that\n   * to something using Symbol.iterator, which PhantomJS chokes on.\n   */\n\n  rules.some(function (rule) {\n    if (rule.check(word, opts)) {\n      article = rule.run(word, opts);\n      return true;\n    }\n  });\n  return handleOptions(article, opts, word);\n};\n\nvar handleOptions = function handleOptions(article, opts, word) {\n  article = capitalize(article, opts);\n\n  if (opts.articleOnly) {\n    return article;\n  }\n\n  return \"\".concat(article, \" \").concat(word);\n};\n\nindefinite.irregularWords = irregulars.list;\nmodule.exports = indefinite;\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = [__webpack_require__(4), __webpack_require__(5), __webpack_require__(6)];\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports) {\n\nvar NUMBERS = /^([0-9,]+)/;\nvar EIGHT_ELEVEN_EIGHTEEN = /^(11|8|18)/;\nvar ELEVEN_EIGHTEEN = /^(11|18)/;\n\nexports.check = function (word) {\n  return NUMBERS.test(word);\n};\n\nexports.run = function (word, opts) {\n  var number = word.toString().match(NUMBERS)[1].replace(/,/g, '');\n  var article = 'a';\n\n  if (EIGHT_ELEVEN_EIGHTEEN.test(number)) {\n    var startsWith11Or18 = ELEVEN_EIGHTEEN.test(number); // If the number starts with 11 or 18 and is of length 4,\n    // the pronunciation is ambiguous so check opts.numbers to see\n    // how to render it. Otherwise, if it starts with 11 or 18\n    // and has 2, 5, 8, 11, etc. digits, use 'an.' Finally, if it\n    // starts with an 8, use 'an.' For everything else, use 'a.'\n\n    if (startsWith11Or18 && number.length === 4) {\n      article = opts.numbers === 'colloquial' ? 'an' : 'a';\n    } else if (startsWith11Or18 && (number.length - 2) % 3 === 0) {\n      article = 'an';\n    } else {\n      article = number.startsWith('8') ? 'an' : 'a';\n    }\n  }\n\n  return article;\n};\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar _require = __webpack_require__(0),\n    startsWithVowel = _require.startsWithVowel;\n\nvar ACRONYM = /^[A-Z]+$/;\nvar IRREGULAR_ACRONYM = /^[UFHLMNRSX]/;\n\nvar isIrregularAcronym = function isIrregularAcronym(word) {\n  return IRREGULAR_ACRONYM.test(word.charAt(0));\n};\n/**\n * Both = a && b\n * Neither = !a && !b\n * In the case of Booleans, this means\n * either both true or both false, so\n * we can just compare the equality of\n * a and b.\n */\n\n\nvar bothOrNeither = function bothOrNeither(a, b) {\n  return a === b;\n};\n/**\n * If the entirety of the first word is capital letters\n * and case insensitivity is off, it's an acronym.\n */\n\n\nexports.check = function (word, _ref) {\n  var caseInsensitive = _ref.caseInsensitive;\n  return caseInsensitive ? false : ACRONYM.test(word.split(' ')[0]);\n};\n\nexports.run = function (word) {\n  var isIrregular = isIrregularAcronym(word);\n  var initialVowel = startsWithVowel(word);\n  /*\n   * If it starts with U: \"a\"\n   * If it starts with any other vowel: \"an\"\n   * If it starts with F, H, L, M, N, R, S, or X: \"an\"\n   * If it starts with any other consonant: \"a\"\n   */\n\n  var article = bothOrNeither(initialVowel, isIrregular) ? 'a' : 'an';\n  return article;\n};\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar _require = __webpack_require__(0),\n    startsWithVowel = _require.startsWithVowel;\n\nvar irregulars = __webpack_require__(1);\n\nvar EXTRAS = /[\\s'-]/;\n\nvar getFirst = function getFirst(word) {\n  return word.split(EXTRAS)[0].toLowerCase();\n};\n\nvar xor = function xor(a, b) {\n  return (a || b) && !(a && b);\n};\n/**\n * Try some variations on the word to determine whether it's irregular.\n * Specifically, try trimming s, then es, then ed because those are common\n * forms of plurals and past tense verbs (which can be used like adjectives).\n */\n\n\nvar checkForIrregulars = function checkForIrregulars(part) {\n  return [null, 's', 'es', 'ed'].reduce(function (memo, ending) {\n    return memo || irregulars.check(part, ending);\n  }, false);\n};\n\nexports.check = function () {\n  return true;\n};\n\nexports.run = function (word, opts) {\n  // Only check the first word. Also, if it's hyphenated, only\n  // check the first part. Finally, if it's possessive, ignore\n  // the possessive part.\n  var first = getFirst(word);\n  var isIrregular = checkForIrregulars(first);\n  /**\n  * If it starts with a vowel and isn't irregular: \"an\"\n  * If it starts with a vowel and IS irregular: \"a\"\n  * If it starts with a consonant and isn't irregular: \"a\"\n  * If it starts with a consonant and IS irregular: \"an\"\n  */\n\n  var article = xor(startsWithVowel(word), isIrregular) ? 'an' : 'a';\n  return article;\n};\n\n/***/ })\n/******/ ]);\n});","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { ParentSize } from '@visx/responsive';\nimport { scaleLinear } from '@visx/scale';\nimport DataTable from '@financial-times/g-components/data-table';\nimport * as Luxon from 'luxon';\nimport { getYearRange, formatNumber } from '../../utils';\nimport './style.scss';\n\nconst Table = ({ data }) => {\n  const headers = [\n    {\n      contents: 'Location',\n      columnType: 'string',\n      columnName: 'areaLink',\n      columnIsSortable: true,\n      columnSortField: 'area',\n    },\n    {\n      contents: 'Total doses per 100 residents',\n      columnType: 'number',\n      columnName: 'dosesPer100Formatted',\n      columnIsSortable: true,\n      columnSortField: 'total_doses_per_100',\n      defaultSortIcon: 'descending',\n    },\n    {\n      contents: 'Percent vaccinated (at least one dose)',\n      columnType: 'number',\n      columnName: 'percentVaccinatedFormatted',\n      columnIsSortable: true,\n      columnSortField: 'percent_dose1_vaccinated',\n    },\n    {\n      contents: 'Percent fully vaccinated',\n      columnType: 'number',\n      columnName: 'percentFullyVaccinatedFormatted',\n      columnIsSortable: true,\n      columnSortField: 'percent_fully_vaccinated',\n    },\n    {\n      contents: 'Booster doses per 100 residents',\n      columnType: 'number',\n      columnName: 'boosterDosesPer100',\n      columnIsSortable: true,\n      columnSortField: 'booster_doses_per_100',\n    },\n    {\n      contents: 'Latest update',\n      columnType: 'string',\n      columnName: 'dateFormatted',\n      columnIsSortable: true,\n      columnSortField: 'date',\n    },\n  ];\n  const topTotalDosesPer100 = data.reduce((a, row) => Math.max(a, row.total_doses_per_100 || 0), 0);\n  const topPercentVaccinated = data.reduce(\n    (a, row) => Math.max(a, row.percent_dose1_vaccinated || 0),\n    0\n  );\n  const topPercentFullyVaccinated = data.reduce(\n    (a, row) => Math.max(a, row.percent_fully_vaccinated || 0),\n    0\n  );\n  const topBoosterDosesPer100 = data.reduce(\n    (a, row) => Math.max(a, row.booster_doses_per_100 || 0),\n    0\n  );\n  const yearRange = getYearRange(data);\n  const dateFormat = yearRange.length > 1 ? 'LLL d yyyy' : 'LLL d';\n\n  const [populationToggle, setPopulationToggle] = useState(true);\n  const clickPopulationToggle = e => {\n    e.stopPropagation();\n    setPopulationToggle(!populationToggle);\n  };\n\n  const rows = data\n    .filter(row => {\n      if (populationToggle && row.population < 200000) {\n        return false;\n      }\n      return true;\n    })\n    .map(row => {\n      return {\n        ...row,\n        areaLink: row.source_link ? (\n          <a href={row.source_link} target=\"_blank\">\n            {row.area}\n          </a>\n        ) : (\n          row.area\n        ),\n        percentVaccinatedFormatted: (\n          <div className=\"bar-cell\">\n            <span className=\"number\">\n              {row.percent_dose1_vaccinated < 1\n                ? row.percent_dose1_vaccinated.toPrecision(1)\n                : row.percent_dose1_vaccinated?.toFixed(1)}\n            </span>\n            <ParentSize className=\"bar\">\n              {parent => {\n                const scale = scaleLinear({\n                  domain: [0, topPercentVaccinated],\n                  range: [0, parent.width],\n                });\n                return (\n                  row.percent_dose1_vaccinated && (\n                    <div\n                      style={{\n                        background: '#5aa8cf',\n                        width: scale(row.percent_dose1_vaccinated),\n                        height: 20,\n                      }}\n                    />\n                  )\n                );\n              }}\n            </ParentSize>\n          </div>\n        ),\n        percentFullyVaccinatedFormatted: (\n          <div className=\"bar-cell\">\n            <span className=\"number\">\n              {row.percent_fully_vaccinated < 1\n                ? row.percent_fully_vaccinated.toPrecision(1)\n                : row.percent_fully_vaccinated?.toFixed(1)}\n            </span>\n            <ParentSize className=\"bar\">\n              {parent => {\n                const scale = scaleLinear({\n                  domain: [0, topPercentFullyVaccinated],\n                  range: [0, parent.width],\n                });\n                return (\n                  row.percent_fully_vaccinated && (\n                    <div\n                      style={{\n                        background: '#2f85c3',\n                        width: scale(row.percent_fully_vaccinated),\n                        height: 20,\n                      }}\n                    />\n                  )\n                );\n              }}\n            </ParentSize>\n          </div>\n        ),\n        dosesPer100Formatted: (\n          <div className=\"bar-cell\">\n            <span className=\"number\">\n              {row.total_doses_per_100 < 1\n                ? row.total_doses_per_100.toPrecision(1)\n                : row.total_doses_per_100?.toFixed(1)}\n            </span>\n            <ParentSize className=\"bar\">\n              {parent => {\n                const scale = scaleLinear({\n                  domain: [0, topTotalDosesPer100 * 1.05],\n                  range: [0, parent.width],\n                });\n                return (\n                  row.total_doses_per_100 && (\n                    <div\n                      style={{\n                        background: '#EB5E8D',\n                        width: scale(row.total_doses_per_100),\n                        height: 20,\n                      }}\n                    />\n                  )\n                );\n              }}\n            </ParentSize>\n          </div>\n        ),\n        boosterDosesPer100: (\n          <div className=\"bar-cell\">\n            <span className=\"number\">\n              {row.booster_doses_per_100 < 1\n                ? row.booster_doses_per_100.toPrecision(1)\n                : row.booster_doses_per_100?.toFixed(1)}\n            </span>\n            <ParentSize className=\"bar\">\n              {parent => {\n                const scale = scaleLinear({\n                  domain: [0, topBoosterDosesPer100 * 1.05],\n                  range: [0, parent.width],\n                });\n                return (\n                  row.booster_doses_per_100 && (\n                    <div\n                      style={{\n                        background: '#1162b3',\n                        width: scale(row.booster_doses_per_100),\n                        height: 20,\n                      }}\n                    />\n                  )\n                );\n              }}\n            </ParentSize>\n          </div>\n        ),\n        dateFormatted: Luxon.DateTime.fromISO(row.date).toFormat(dateFormat),\n      };\n    })\n    .sort((a, b) => {\n      return (\n        b.total_doses_per_100 - a.total_doses_per_100 ||\n        (b.percent_dose1_vaccinated || null) - (a.percent_dose1_vaccinated || null) ||\n        (b.percent_fully_vaccinated || null) - (a.percent_fully_vaccinated || null) ||\n        (b.booster_doses_per_100 || null) - (a.booster_doses_per_100 || null)\n      );\n    });\n  return (\n    <div className=\"table-wrapper\">\n      <h2 className=\"table-header\">Vaccinations by location</h2>\n      <div className=\"table-filters\">\n        <span className=\"o-forms-input o-forms-input--checkbox\">\n          <label htmlFor=\"populationToggle\">\n            <input\n              type=\"checkbox\"\n              checked={populationToggle}\n              onClick={clickPopulationToggle}\n              onChange={clickPopulationToggle}\n              name=\"populationToggle\"\n              id=\"populationToggle\"\n            />\n            <span className=\"o-forms-input__label\">\n              Hide locations with fewer than 200,000 residents\n            </span>\n          </label>\n        </span>\n      </div>\n      <DataTable\n        headers={headers}\n        rows={rows}\n        responsive=\"overflow\"\n        truncation={5}\n        isLinedHorizontal\n      />\n    </div>\n  );\n};\n\nTable.propTypes = {\n  data: PropTypes.arrayOf(\n    PropTypes.shape({\n      area: PropTypes.string.isRequired,\n      population: PropTypes.number.isRequired,\n      date: PropTypes.string.isRequired,\n      vaccinations: PropTypes.number.isRequired,\n      total_doses_per_100: PropTypes.number.isRequired,\n      booster_doses_per_100: PropTypes.number.isRequired,\n      people_fully_vaccinated: PropTypes.number.isRequired,\n      source_link: PropTypes.string.isRequired,\n    })\n  ).isRequired,\n};\n\nexport default Table;\n","/**\n * @file\n * Data table component\n */\n\nimport React, { useRef, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport OTable from '@financial-times/o-table/main';\nimport classnames from 'classnames';\nimport './styles.scss';\n\nconst headerAttributes = (header, isSortable) => {\n  const classes = header.columnType === 'number' ? 'o-table__cell--numeric' : '';\n  const attributes = [\n    classes ? { className: classes } : {},\n    header.columnType === 'number' ? { 'data-o-table-data-type': 'numeric' } : {},\n    isSortable === false || header.columnIsSortable === false\n      ? { 'data-o-table-heading-disable-sort': '' }\n      : {},\n    { scope: 'col', role: 'columnheader' },\n    header.defaultSortIcon && isSortable ? { 'aria-sort': header.defaultSortIcon } : {},\n  ];\n  return Object.assign(...attributes);\n};\n\nconst cellAttributes = (header, row) => {\n  const className = classnames(\n    header.columnType === 'number' && 'o-table__cell--numeric',\n    header.columnIsVerticallyCentred && 'o-table__cell--vertically-center',\n  );\n  const attributes = [\n    className ? { className } : {},\n    header.columnType === 'number' ? { 'data-o-table-data-type': 'numeric' } : {},\n    header.columnSortField ? { 'data-o-table-sort-value': row[header.columnSortField] } : {},\n  ];\n  return Object.assign(...attributes);\n};\n\nconst footerAttributes = (header) => {\n  const classes = header.columnType === 'number' ? 'o-table__cell--numeric' : '';\n  const attributes = [\n    classes ? { className: classes } : {},\n    header.columnType === 'number' ? { 'data-o-table-data-type': 'numeric' } : {},\n  ];\n  return Object.assign(...attributes);\n};\n\nconst tableAttributes = (\n  responsive,\n  truncation,\n  isStriped,\n  isLinedHorizontal,\n  isCompact,\n  isSortable,\n) => {\n  const className = classnames(\n    'o-table',\n    responsive === 'scroll' && 'o-table--responsive-scroll',\n    responsive === 'flat' && 'o-table--responsive-flat',\n    responsive === 'overflow' && 'o-table--responsive-overflow',\n    isStriped && 'o-table--row-stripes',\n    isLinedHorizontal && 'o-table--horizontal-lines',\n    isCompact && 'o-table--compact',\n  );\n  const attributes = [\n    { className },\n    { 'data-o-component': 'o-table' },\n    !isSortable ? { 'data-o-table-sortable': false } : {},\n    responsive !== 'none' ? { 'data-o-table-responsive': responsive } : {},\n    truncation\n      ? { 'data-o-table-minimum-row-count': truncation, 'data-o-table-expanded': 'false' }\n      : {},\n  ];\n  return Object.assign(...attributes);\n};\n\nconst Head = ({ headers, isSortable }) => (\n  <thead>\n    <tr>\n      {headers.map((header, i) => {\n        const attributes = headerAttributes(header, isSortable);\n        if (header.secondary) {\n          const secondary = (\n            <span className=\"o-table__cell--content-secondary\">{header.secondary}</span>\n          );\n          return (\n            <th {...attributes}>\n              {header.contents} {secondary}\n            </th>\n          );\n        }\n        return (\n          <th key={i} {...attributes}>\n            {header.contents}\n          </th>\n        );\n      })}\n    </tr>\n  </thead>\n);\n\nconst Body = ({ rows, headers }) => (\n  <tbody>\n    {rows.map((row, i1) => (\n      <tr key={i1}>\n        {headers.map((header, i2) => {\n          const attributes = cellAttributes(header, row);\n          const valueFormat =\n            typeof row[header.columnName] === 'number'\n              ? (value) => value.toLocaleString()\n              : (value) => value;\n          const value = valueFormat(row[header.columnName] || '');\n          if (header.columnIsHeader) {\n            return (\n              <th key={`${i1}-${i2}`} {...attributes}>\n                {value}\n              </th>\n            );\n          }\n          return (\n            <td key={`${i1}-${i2}`} {...attributes}>\n              {value}\n            </td>\n          );\n        })}\n      </tr>\n    ))}\n  </tbody>\n);\n\nconst Foot = ({ footers, headers }) => (\n  <tfoot>\n    <tr>\n      {headers.map((header, i) => {\n        const attributes = footerAttributes(header);\n        const footer = footers[i];\n        if (!footer) return <th {...attributes} />;\n        if (footer.secondary) {\n          const secondary = (\n            <span className=\"o-table__cell--content-secondary\">{footer.secondary}</span>\n          );\n          return (\n            <th {...attributes}>\n              {footer.contents} {secondary}\n            </th>\n          );\n        }\n        return <th {...attributes}>{header.contents}</th>;\n      })}\n    </tr>\n  </tfoot>\n);\n\nconst Footnote = ({ footnote, headers }) => (\n  <tfoot>\n    <tr>\n      <td colSpan={headers.length} className=\"o-table-footnote\">\n        {footnote}\n      </td>\n    </tr>\n  </tfoot>\n);\n\nconst TableContainer = ({ responsive, className, children }) =>\n  responsive ? (\n    <div className=\"o-table-container\">\n      <div className=\"o-table-overlay-wrapper\">\n        <div className={className}>{children}</div>\n      </div>\n    </div>\n  ) : (\n    <div className={className}>{children}</div>\n  );\n\nconst DataTable = ({\n  className,\n  captionTop,\n  captionBottom,\n  headers,\n  rows,\n  footers,\n  responsive,\n  truncation,\n  isHeaderHidden,\n  isSortable,\n  isStriped,\n  isLinedHorizontal,\n  isCompact,\n}) => {\n  const tableRef = useRef();\n  const tableOrigami = useRef();\n\n  useEffect(() => {\n    tableOrigami.current = OTable.init(tableRef.current);\n  }, []);\n\n  useEffect(() => {\n    tableOrigami.current.updateRows();\n  }, [rows]);\n\n  // @TODO fix this; private method OTable.prototype._duplicateHeaders\n  // useEffect(() => {\n  //   if (tableOrigami.current) {\n  //     const tableRows = Array.from(tableRef.current.querySelectorAll('tr')).filter(\n  //       row => Array.from(row.querySelectorAll('th')).length === 0,\n  //     );\n  //     const tableHeaders = Array.from(tableRef.current.querySelectorAll('thead th'));\n\n  //     // if (responsive === 'flat') {\n  //     //   tableOrigami.current._duplicateHeaders(tableRows, tableHeaders); // so it deals with data changing\n  //     // }\n  //   }\n  // }, [rows, headers]);\n\n  const attributes = tableAttributes(\n    responsive,\n    truncation,\n    isStriped,\n    isLinedHorizontal,\n    isCompact,\n    isSortable,\n  );\n\n  const namedClass = classnames(className, 'g-data-table', 'o-table-scroll-wrapper');\n\n  return (\n    <TableContainer className={namedClass} responsive={responsive !== 'none'}>\n      <table {...attributes} ref={tableRef}>\n        {captionTop && (\n          <caption className=\"o-table__caption\">\n            <h2 className=\"o-typography-heading-level-2\">{captionTop}</h2>\n          </caption>\n        )}\n        {captionBottom && <Footnote footnote={captionBottom} headers={headers} />}\n        {!isHeaderHidden && <Head headers={headers} isSortable={isSortable} />}\n        <Body rows={rows} headers={headers} />\n        {footers.length !== 0 && <Foot footers={footers} headers={headers} />}\n      </table>\n    </TableContainer>\n  );\n};\n\nDataTable.displayName = 'GDataTable';\n\nDataTable.propTypes = {\n  className: PropTypes.string,\n  captionTop: PropTypes.string,\n  captionBottom: PropTypes.string,\n  headers: PropTypes.arrayOf(\n    PropTypes.exact({\n      contents: PropTypes.node.isRequired,\n      secondary: PropTypes.node,\n      columnName: PropTypes.string.isRequired,\n      columnType: PropTypes.oneOf(['string', 'number']),\n      columnSortField: PropTypes.string,\n      columnIsHeader: PropTypes.bool,\n      columnIsSortable: PropTypes.bool,\n      columnIsVerticallyCentred: PropTypes.bool,\n      defaultSortIcon: PropTypes.oneOf(['ascending', 'descending']),\n    }),\n  ).isRequired,\n  rows: PropTypes.arrayOf(PropTypes.object),\n  footers: PropTypes.arrayOf(\n    PropTypes.exact({\n      contents: PropTypes.node.isRequired,\n      secondary: PropTypes.node,\n    }),\n  ),\n  responsive: PropTypes.oneOf(['none', 'scroll', 'flat', 'overflow']),\n  truncation: PropTypes.number,\n  isHeaderHidden: PropTypes.bool,\n  isSortable: PropTypes.bool,\n  isStriped: PropTypes.bool,\n  isLinedHorizontal: PropTypes.bool,\n  isCompact: PropTypes.bool,\n};\n\nDataTable.defaultProps = {\n  className: null,\n  captionTop: null,\n  captionBottom: null,\n  rows: [],\n  footers: [],\n  responsive: 'none',\n  truncation: null,\n  isHeaderHidden: false,\n  isSortable: true,\n  isStriped: false,\n  isLinedHorizontal: false,\n  isCompact: false,\n};\n\nexport default DataTable;\n","import BaseTable from './BaseTable.js';\n\nclass FlatTable extends BaseTable {\n\n\t/**\n\t * Initialises an `o-table` component with \"flat\" responsive behaviour.\n\t *\n\t * @access public\n\t * @param {HTMLElement} rootEl - The `o-table` element.\n\t * @param {import(\"../Sort/TableSorter\")} sorter the TableSorter instance\n\t * @param {object} opts [{}]\n\t * @param {boolean} opts.sortable [true]\n\t * @returns {FlatTable} The new flat table\n\t */\n\tconstructor(rootEl, sorter, opts = {}) {\n\t\tsuper(rootEl, sorter, opts);\n\t\t// Duplicate row headings before adding sort buttons.\n\t\tthis._tableHeadersWithoutSort = this.tableHeaders.map(header => header.cloneNode(true));\n\t\t// Flat table can only work given headers.\n\t\tif (this.tableHeaders.length <= 0) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.warn('Could not create a \"flat\" table as no headers were found. Ensure table headers are placed within \"<thead>\". Removing class \"o-table--responsive-flat\".', rootEl);\n\t\t\trootEl.classList.remove('o-table--responsive-flat');\n\t\t} else {\n\t\t\tthis._createFlatTableStructure();\n\t\t}\n\t\t// Defer other tasks.\n\t\twindow.setTimeout(this.addSortButtons.bind(this), 0);\n\t\twindow.setTimeout(this._ready.bind(this), 0);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Update the o-table instance with rows added dynamically to the table.\n\t *\n\t * @returns {void}\n\t */\n\tupdateRows() {\n\t\t// Update new rows to support the flat structure.\n\t\tconst latestRows = this._getLatestRowNodes();\n\t\tthis._createFlatTableStructure(latestRows);\n\t\t// Update row visibility, sort, etc.\n\t\tsuper.updateRows();\n\t}\n\n\t/**\n\t * Get all the table body's current row nodes, without nodes duplicated for\n\t * the responsive \"flat\" style\n\t *\n\t * @returns {Array<Node>} all the trs\n\t * @access private\n\t */\n\t_getLatestRowNodes() {\n\t\treturn this.tbody ? Array.from(this.tbody.querySelectorAll('tr:not(.o-table__duplicate-row)')) : [];\n\t}\n\n\t/**\n\t * Duplicate table headers for each data item.\n\t * i.e. Each row is shown as a single item with its own headings.\n\t *\n\t * @param {Array<HTMLTableRowElement>} rows rows to duplicate\n\t * @access private\n\t */\n\t_createFlatTableStructure(rows = this.tableRows) {\n\t\trows\n\t\t\t.filter(row => !row.hasAttribute('data-o-table-flat-headings')) // only process rows once\n\t\t\t.forEach(row => {\n\t\t\t\tconst data = Array.from(row.getElementsByTagName('td'));\n\t\t\t\trow.setAttribute('data-o-table-flat-headings', true);\n\t\t\t\twindow.requestAnimationFrame(() => {\n\t\t\t\t\t// Create a new table body for every row.\n\t\t\t\t\tconst newGroupBody = document.createElement('tbody');\n\t\t\t\t\tnewGroupBody.classList.add('o-table__responsive-body');\n\t\t\t\t\t// Append all the other rows as heading / value pairs.\n\t\t\t\t\tthis._tableHeadersWithoutSort.forEach((header, index) => {\n\t\t\t\t\t\t// Create the row.\n\t\t\t\t\t\tconst newRow = document.createElement('tr');\n\t\t\t\t\t\tnewRow.classList.add('o-table__duplicate-row');\n\t\t\t\t\t\t// Duplicate the original heading cell.\n\t\t\t\t\t\tconst clonedHeader = header.cloneNode(true);\n\t\t\t\t\t\tclonedHeader.classList.add('o-table__duplicate-heading');\n\t\t\t\t\t\tclonedHeader.setAttribute('scope', 'row');\n\t\t\t\t\t\tclonedHeader.setAttribute('role', 'rowheader');\n\t\t\t\t\t\t// Duplicate the original data cell.\n\t\t\t\t\t\tconst clonedTd = data[index].cloneNode(true);\n\t\t\t\t\t\t// Append the header and data cell to the row.\n\t\t\t\t\t\tnewRow.appendChild(clonedHeader);\n\t\t\t\t\t\tnewRow.appendChild(clonedTd);\n\t\t\t\t\t\t// Append the row to the body.\n\t\t\t\t\t\tnewGroupBody.appendChild(newRow);\n\t\t\t\t\t});\n\n\t\t\t\t\t// Append the new bodies, which represent each row on\n\t\t\t\t\t// desktop, to the root element.\n\t\t\t\t\tthis.rootEl.appendChild(newGroupBody);\n\t\t\t\t});\n\t\t\t});\n\t}\n}\n\nexport default FlatTable;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\n/**\n * DOM event delegator\n *\n * The delegator will listen\n * for events that bubble up\n * to the root node.\n *\n * @constructor\n * @param {Node|string} [root] The root node or a selector string matching the root node\n */\nfunction Delegate(root) {\n  /**\n   * Maintain a map of listener\n   * lists, keyed by event name.\n   *\n   * @type Object\n   */\n  this.listenerMap = [{}, {}];\n\n  if (root) {\n    this.root(root);\n  }\n  /** @type function() */\n\n\n  this.handle = Delegate.prototype.handle.bind(this); // Cache of event listeners removed during an event cycle\n\n  this._removedListeners = [];\n}\n/**\n * Start listening for events\n * on the provided DOM element\n *\n * @param  {Node|string} [root] The root node or a selector string matching the root node\n * @returns {Delegate} This method is chainable\n */\n\n\nDelegate.prototype.root = function (root) {\n  var listenerMap = this.listenerMap;\n  var eventType; // Remove master event listeners\n\n  if (this.rootElement) {\n    for (eventType in listenerMap[1]) {\n      if (listenerMap[1].hasOwnProperty(eventType)) {\n        this.rootElement.removeEventListener(eventType, this.handle, true);\n      }\n    }\n\n    for (eventType in listenerMap[0]) {\n      if (listenerMap[0].hasOwnProperty(eventType)) {\n        this.rootElement.removeEventListener(eventType, this.handle, false);\n      }\n    }\n  } // If no root or root is not\n  // a dom node, then remove internal\n  // root reference and exit here\n\n\n  if (!root || !root.addEventListener) {\n    if (this.rootElement) {\n      delete this.rootElement;\n    }\n\n    return this;\n  }\n  /**\n   * The root node at which\n   * listeners are attached.\n   *\n   * @type Node\n   */\n\n\n  this.rootElement = root; // Set up master event listeners\n\n  for (eventType in listenerMap[1]) {\n    if (listenerMap[1].hasOwnProperty(eventType)) {\n      this.rootElement.addEventListener(eventType, this.handle, true);\n    }\n  }\n\n  for (eventType in listenerMap[0]) {\n    if (listenerMap[0].hasOwnProperty(eventType)) {\n      this.rootElement.addEventListener(eventType, this.handle, false);\n    }\n  }\n\n  return this;\n};\n/**\n * @param {string} eventType\n * @returns boolean\n */\n\n\nDelegate.prototype.captureForType = function (eventType) {\n  return ['blur', 'error', 'focus', 'load', 'resize', 'scroll'].indexOf(eventType) !== -1;\n};\n/**\n * Attach a handler to one\n * event for all elements\n * that match the selector,\n * now or in the future\n *\n * The handler function receives\n * three arguments: the DOM event\n * object, the node that matched\n * the selector while the event\n * was bubbling and a reference\n * to itself. Within the handler,\n * 'this' is equal to the second\n * argument.\n *\n * The node that actually received\n * the event can be accessed via\n * 'event.target'.\n *\n * @param {string} eventType Listen for these events\n * @param {string|undefined} selector Only handle events on elements matching this selector, if undefined match root element\n * @param {function()} handler Handler function - event data passed here will be in event.data\n * @param {boolean} [useCapture] see 'useCapture' in <https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener>\n * @returns {Delegate} This method is chainable\n */\n\n\nDelegate.prototype.on = function (eventType, selector, handler, useCapture) {\n  var root;\n  var listenerMap;\n  var matcher;\n  var matcherParam;\n\n  if (!eventType) {\n    throw new TypeError('Invalid event type: ' + eventType);\n  } // handler can be passed as\n  // the second or third argument\n\n\n  if (typeof selector === 'function') {\n    useCapture = handler;\n    handler = selector;\n    selector = null;\n  } // Fallback to sensible defaults\n  // if useCapture not set\n\n\n  if (useCapture === undefined) {\n    useCapture = this.captureForType(eventType);\n  }\n\n  if (typeof handler !== 'function') {\n    throw new TypeError('Handler must be a type of Function');\n  }\n\n  root = this.rootElement;\n  listenerMap = this.listenerMap[useCapture ? 1 : 0]; // Add master handler for type if not created yet\n\n  if (!listenerMap[eventType]) {\n    if (root) {\n      root.addEventListener(eventType, this.handle, useCapture);\n    }\n\n    listenerMap[eventType] = [];\n  }\n\n  if (!selector) {\n    matcherParam = null; // COMPLEX - matchesRoot needs to have access to\n    // this.rootElement, so bind the function to this.\n\n    matcher = matchesRoot.bind(this); // Compile a matcher for the given selector\n  } else if (/^[a-z]+$/i.test(selector)) {\n    matcherParam = selector;\n    matcher = matchesTag;\n  } else if (/^#[a-z0-9\\-_]+$/i.test(selector)) {\n    matcherParam = selector.slice(1);\n    matcher = matchesId;\n  } else {\n    matcherParam = selector;\n    matcher = Element.prototype.matches;\n  } // Add to the list of listeners\n\n\n  listenerMap[eventType].push({\n    selector: selector,\n    handler: handler,\n    matcher: matcher,\n    matcherParam: matcherParam\n  });\n  return this;\n};\n/**\n * Remove an event handler\n * for elements that match\n * the selector, forever\n *\n * @param {string} [eventType] Remove handlers for events matching this type, considering the other parameters\n * @param {string} [selector] If this parameter is omitted, only handlers which match the other two will be removed\n * @param {function()} [handler] If this parameter is omitted, only handlers which match the previous two will be removed\n * @returns {Delegate} This method is chainable\n */\n\n\nDelegate.prototype.off = function (eventType, selector, handler, useCapture) {\n  var i;\n  var listener;\n  var listenerMap;\n  var listenerList;\n  var singleEventType; // Handler can be passed as\n  // the second or third argument\n\n  if (typeof selector === 'function') {\n    useCapture = handler;\n    handler = selector;\n    selector = null;\n  } // If useCapture not set, remove\n  // all event listeners\n\n\n  if (useCapture === undefined) {\n    this.off(eventType, selector, handler, true);\n    this.off(eventType, selector, handler, false);\n    return this;\n  }\n\n  listenerMap = this.listenerMap[useCapture ? 1 : 0];\n\n  if (!eventType) {\n    for (singleEventType in listenerMap) {\n      if (listenerMap.hasOwnProperty(singleEventType)) {\n        this.off(singleEventType, selector, handler);\n      }\n    }\n\n    return this;\n  }\n\n  listenerList = listenerMap[eventType];\n\n  if (!listenerList || !listenerList.length) {\n    return this;\n  } // Remove only parameter matches\n  // if specified\n\n\n  for (i = listenerList.length - 1; i >= 0; i--) {\n    listener = listenerList[i];\n\n    if ((!selector || selector === listener.selector) && (!handler || handler === listener.handler)) {\n      this._removedListeners.push(listener);\n\n      listenerList.splice(i, 1);\n    }\n  } // All listeners removed\n\n\n  if (!listenerList.length) {\n    delete listenerMap[eventType]; // Remove the main handler\n\n    if (this.rootElement) {\n      this.rootElement.removeEventListener(eventType, this.handle, useCapture);\n    }\n  }\n\n  return this;\n};\n/**\n * Handle an arbitrary event.\n *\n * @param {Event} event\n */\n\n\nDelegate.prototype.handle = function (event) {\n  var i;\n  var l;\n  var type = event.type;\n  var root;\n  var phase;\n  var listener;\n  var returned;\n  var listenerList = [];\n  var target;\n  var eventIgnore = 'ftLabsDelegateIgnore';\n\n  if (event[eventIgnore] === true) {\n    return;\n  }\n\n  target = event.target; // Hardcode value of Node.TEXT_NODE\n  // as not defined in IE8\n\n  if (target.nodeType === 3) {\n    target = target.parentNode;\n  } // Handle SVG <use> elements in IE\n\n\n  if (target.correspondingUseElement) {\n    target = target.correspondingUseElement;\n  }\n\n  root = this.rootElement;\n  phase = event.eventPhase || (event.target !== event.currentTarget ? 3 : 2); // eslint-disable-next-line default-case\n\n  switch (phase) {\n    case 1:\n      //Event.CAPTURING_PHASE:\n      listenerList = this.listenerMap[1][type];\n      break;\n\n    case 2:\n      //Event.AT_TARGET:\n      if (this.listenerMap[0] && this.listenerMap[0][type]) {\n        listenerList = listenerList.concat(this.listenerMap[0][type]);\n      }\n\n      if (this.listenerMap[1] && this.listenerMap[1][type]) {\n        listenerList = listenerList.concat(this.listenerMap[1][type]);\n      }\n\n      break;\n\n    case 3:\n      //Event.BUBBLING_PHASE:\n      listenerList = this.listenerMap[0][type];\n      break;\n  }\n\n  var toFire = []; // Need to continuously check\n  // that the specific list is\n  // still populated in case one\n  // of the callbacks actually\n  // causes the list to be destroyed.\n\n  l = listenerList.length;\n\n  while (target && l) {\n    for (i = 0; i < l; i++) {\n      listener = listenerList[i]; // Bail from this loop if\n      // the length changed and\n      // no more listeners are\n      // defined between i and l.\n\n      if (!listener) {\n        break;\n      }\n\n      if (target.tagName && [\"button\", \"input\", \"select\", \"textarea\"].indexOf(target.tagName.toLowerCase()) > -1 && target.hasAttribute(\"disabled\")) {\n        // Remove things that have previously fired\n        toFire = [];\n      } // Check for match and fire\n      // the event if there's one\n      //\n      // TODO:MCG:20120117: Need a way\n      // to check if event#stopImmediatePropagation\n      // was called. If so, break both loops.\n      else if (listener.matcher.call(target, listener.matcherParam, target)) {\n          toFire.push([event, target, listener]);\n        }\n    } // TODO:MCG:20120117: Need a way to\n    // check if event#stopPropagation\n    // was called. If so, break looping\n    // through the DOM. Stop if the\n    // delegation root has been reached\n\n\n    if (target === root) {\n      break;\n    }\n\n    l = listenerList.length; // Fall back to parentNode since SVG children have no parentElement in IE\n\n    target = target.parentElement || target.parentNode; // Do not traverse up to document root when using parentNode, though\n\n    if (target instanceof HTMLDocument) {\n      break;\n    }\n  }\n\n  var ret;\n\n  for (i = 0; i < toFire.length; i++) {\n    // Has it been removed during while the event function was fired\n    if (this._removedListeners.indexOf(toFire[i][2]) > -1) {\n      continue;\n    }\n\n    returned = this.fire.apply(this, toFire[i]); // Stop propagation to subsequent\n    // callbacks if the callback returned\n    // false\n\n    if (returned === false) {\n      toFire[i][0][eventIgnore] = true;\n      toFire[i][0].preventDefault();\n      ret = false;\n      break;\n    }\n  }\n\n  return ret;\n};\n/**\n * Fire a listener on a target.\n *\n * @param {Event} event\n * @param {Node} target\n * @param {Object} listener\n * @returns {boolean}\n */\n\n\nDelegate.prototype.fire = function (event, target, listener) {\n  return listener.handler.call(target, event, target);\n};\n/**\n * Check whether an element\n * matches a tag selector.\n *\n * Tags are NOT case-sensitive,\n * except in XML (and XML-based\n * languages such as XHTML).\n *\n * @param {string} tagName The tag name to test against\n * @param {Element} element The element to test with\n * @returns boolean\n */\n\n\nfunction matchesTag(tagName, element) {\n  return tagName.toLowerCase() === element.tagName.toLowerCase();\n}\n/**\n * Check whether an element\n * matches the root.\n *\n * @param {?String} selector In this case this is always passed through as null and not used\n * @param {Element} element The element to test with\n * @returns boolean\n */\n\n\nfunction matchesRoot(selector, element) {\n  if (this.rootElement === window) {\n    return (// Match the outer document (dispatched from document)\n      element === document || // The <html> element (dispatched from document.body or document.documentElement)\n      element === document.documentElement || // Or the window itself (dispatched from window)\n      element === window\n    );\n  }\n\n  return this.rootElement === element;\n}\n/**\n * Check whether the ID of\n * the element in 'this'\n * matches the given ID.\n *\n * IDs are case-sensitive.\n *\n * @param {string} id The ID to test against\n * @param {Element} element The element to test with\n * @returns boolean\n */\n\n\nfunction matchesId(id, element) {\n  return id === element.id;\n}\n/**\n * Short hand for off()\n * and root(), ie both\n * with no parameters\n *\n * @return void\n */\n\n\nDelegate.prototype.destroy = function () {\n  this.off();\n  this.root();\n};\n\nvar _default = Delegate;\nexports.default = _default;\nmodule.exports = exports.default;","import BaseTable from './BaseTable.js';\n\nclass ScrollTable extends BaseTable {\n\t/**\n\t * Initialises an `o-table` component with \"scroll\" responsive behaviour.\n\t *\n\t * @access public\n\t * @param {HTMLElement} rootEl - The `o-table` element.\n\t * @param {import(\"../Sort/TableSorter\")} sorter the TableSorter instance\n\t * @param {object} opts [{}]\n\t * @param {boolean} opts.sortable [true]\n\t * @returns {ScrollTable} - the new ScrollTable instance\n\t */\n\tconstructor(rootEl, sorter, opts = {}) {\n\t\tsuper(rootEl, sorter, opts);\n\t\t// Duplicate row headings before adding sort buttons.\n\t\tthis._tableHeadersWithoutSort = this.tableHeaders.map(header => header.cloneNode(true));\n\t\t// Create scrollable layout for devices with small viewports.\n\t\tthis._createScrollTableStructure();\n\t\t// Defer other tasks.\n\t\twindow.setTimeout(this.addSortButtons.bind(this), 0);\n\t\twindow.setTimeout(this._ready.bind(this), 0);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Filter the table.\n\t *\n\t * @access public\n\t * @param {number} headerIndex - The index of the table column to filter.\n\t * @param {string | Function} filter - How to filter the column (either a string to match or a callback function).\n\t * @returns {undefined}\n\t */\n\tfilter(headerIndex, filter) {\n\t\t// Filter rows by columns (desktop view).\n\t\tthis._filterRowsByColumn(headerIndex, filter);\n\t\t// Render filtered table (desktop view).\n\t\tthis.renderRowUpdates();\n\t\t// Recreate scrollable table with filtered rows (mobile view).\n\t\tthis._createScrollTableStructure();\n\t}\n\n\t/**\n\t * Update the o-table instance with rows added dynamically to the table.\n\t *\n\t * @returns {undefined}\n\t */\n\tupdateRows() {\n\t\t// Update row visibility, sort, etc.\n\t\tsuper.updateRows();\n\t\t// Recreate scrollable table with updated rows.\n\t\tthis._createScrollTableStructure();\n\t}\n\n\t/**\n\t * Get all the table body's current row nodes, without nodes duplicated for\n\t * the responsive \"scroll\" style\n\t *\n\t * @returns {Array<Node>} an array of the table's rows\n\t * @access private\n\t */\n\t_getLatestRowNodes() {\n\t\treturn this.tbody ? Array.from(this.tbody.querySelectorAll('tr:not(.o-table__duplicate-row)')) : [];\n\t}\n\n\t/**\n\t * Duplicate table headers and rows to create a table which has row headings\n\t * rather than column headings. I.e. The table is consumed left to right,\n\t * rather than top to bottom.\n\t *\n\t * @access private\n\t * @returns {undefined}\n\t */\n\t_createScrollTableStructure() {\n\t\t// Clone headings and data into new rows.\n\t\tconst clonedRows = this._tableHeadersWithoutSort.map((header, index) => {\n\t\t\tconst headerRow = document.createElement('tr');\n\t\t\theaderRow.classList.add('o-table__duplicate-row');\n\t\t\t// Clone column heading and turn into a row heading.\n\t\t\tconst clonedHeader = header.cloneNode(true);\n\t\t\tclonedHeader.setAttribute('scope', 'row');\n\t\t\tclonedHeader.setAttribute('role', 'rowheader');\n\t\t\theaderRow.appendChild(clonedHeader);\n\t\t\t// Clone data for the column into the new row.\n\t\t\tthis.tableRows.forEach(row => {\n\t\t\t\tconst cell = row.querySelectorAll('td')[index];\n\t\t\t\tif (cell) {\n\t\t\t\t\tconst cellClone = cell.cloneNode(true);\n\t\t\t\t\tconst filteredData = this._filteredTableRows.indexOf(row) !== -1;\n\t\t\t\t\tcellClone.setAttribute('data-o-table-filtered', filteredData);\n\t\t\t\t\tcellClone.setAttribute('aria-hidden', filteredData);\n\t\t\t\t\theaderRow.appendChild(cellClone);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn headerRow;\n\t\t});\n\n\t\t// Add new rows to the table body.\n\t\twindow.requestAnimationFrame(function () {\n\t\t\tconst rowHeadingRows = Array.from(this.tbody.querySelectorAll('.o-table__duplicate-row'));\n\t\t\trowHeadingRows.forEach(row => this.tbody.removeChild(row));\n\t\t\tif (this.tbody.prepend) {\n\t\t\t\tthis.tbody.prepend(...clonedRows);\n\t\t\t} else {\n\t\t\t\tclonedRows.reverse().forEach(row => {\n\t\t\t\t\tthis.tbody.insertBefore(row, this.tbody.firstChild);\n\t\t\t\t});\n\t\t\t}\n\t\t\tthis._updateTableHeight();\n\t\t}.bind(this));\n\t}\n}\n\nexport default ScrollTable;\n","import BaseTable from './BaseTable.js';\n\nclass OverflowTable extends BaseTable {\n\n\t/**\n\t * Initialises an `o-table` component with \"overflow\" responsive behaviour.\n\t *\n\t * @param {HTMLElement} rootEl - The `o-table` element.\n\t * @param {import(\"../Sort/TableSorter\")} sorter a tablesorter instance\n\t * @param {object} opts [{}]\n\t * @param {boolean} opts.sortable [true] - is the table sortable\n\t * @param {undefined | boolean} opts.expanded - is the table expanded\n\t * @param {number} opts.minimumRowCount [20] - the fewest number of rows to show\n\t * @access public\n\t * @returns {OverflowTable} - Your new table\n\t */\n\tconstructor(rootEl, sorter, opts = {}) {\n\t\tsuper(rootEl, sorter, opts);\n\t\tthis._opts = Object.assign({\n\t\t\texpanded: this.rootEl.hasAttribute('data-o-table-expanded') ? this.rootEl.getAttribute('data-o-table-expanded') !== 'false' : null,\n\t\t\tminimumRowCount: this.rootEl.getAttribute('data-o-table-minimum-row-count')\n\t\t}, this._opts);\n\t\t// Add scroll and expander controls immediately.\n\t\tthis._addControlsToDom();\n\t\t// Defer other tasks.\n\t\twindow.setTimeout(this.addSortButtons.bind(this), 0);\n\t\twindow.setTimeout(this._setupScroll.bind(this), 0);\n\t\twindow.setTimeout(this._setupExpander.bind(this), 0);\n\t\tthis._ready();\n\t\treturn this;\n\t}\n\n\t/**\n\t * Filter the table.\n\t *\n\t * @access public\n\t * @param {number} headerIndex - The index of the table column to filter.\n\t * @param {string | Function} filter - How to filter the column (either a string to match or a callback function).\n\t * @returns {undefined}\n\t */\n\tfilter(headerIndex, filter) {\n\t\tthis._filterRowsByColumn(headerIndex, filter);\n\t\tthis.renderRowUpdates();\n\t}\n\n\t/**\n\t * Check if the table is expanded (true) or collapsed (false).\n\t *\n\t * @access public\n\t * @returns {boolean} is the table expanded?\n\t */\n\tisExpanded() {\n\t\tconst expand = this._expand === undefined ? Boolean(this._opts.expanded) : Boolean(this._expand);\n\t\treturn this.canExpand() && expand;\n\t}\n\n\t/**\n\t * Check if the table is collapsed (true) or expanded (false).\n\t *\n\t * @access public\n\t * @returns {boolean} is the table contracted?\n\t */\n\tisContracted() {\n\t\tconst expand = this._expand === undefined ? Boolean(this._opts.expanded) : Boolean(this._expand);\n\t\treturn this.canExpand() && !expand;\n\t}\n\n\t/**\n\t * Check if the table supports the expand/contract feature.\n\t *\n\t * @access public\n\t * @returns {boolean} can the table expand and contract?\n\t */\n\tcanExpand() {\n\t\treturn typeof this._opts.expanded === 'boolean' && this._minimumRowCount < this.tableRows.length - this._filteredTableRows.length;\n\t}\n\n\t/**\n\t * Updates the dom to account for row updates.\n\t *\n\t * @returns {undefined}\n\t */\n\trenderRowUpdates() {\n\t\tthis._updateExpander();\n\t\tthis._updateRowAriaHidden();\n\t\tthis._hideFilteredRows();\n\t\tthis._updateTableHeight();\n\t\tthis._updateRowOrder();\n\t}\n\n\t_updateExpander() {\n\t\tif (typeof this._opts.expanded !== 'boolean' || !this.controls) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._expanderUpdateScheduled) {\n\t\t\twindow.cancelAnimationFrame(this._expanderUpdateScheduled);\n\t\t}\n\n\t\tconst expand = this.isExpanded();\n\t\tconst contract = this.isContracted();\n\t\tconst canExpand = expand || contract;\n\t\tconst expanderButtonContainer = this.controls.expanderButton;\n\t\tconst expanderButton = expanderButtonContainer.querySelector('button');\n\n\t\tthis._updateTableHeight();\n\t\tthis._updateRowAriaHidden();\n\t\tthis._updateControls();\n\n\t\tthis._expanderUpdateScheduled = window.requestAnimationFrame(function () {\n\t\t\tthis.rootEl.setAttribute('data-o-table-expanded', Boolean(expand));\n\t\t\tthis.container.classList.toggle('o-table-container--expanded', expand);\n\t\t\tthis.container.classList.toggle('o-table-container--contracted', contract);\n\t\t\texpanderButton.style.display = canExpand ? '' : 'none';\n\n\t\t\tif (!canExpand) {\n\t\t\t\tthis.rootEl.removeAttribute('aria-expanded');\n\t\t\t}\n\n\t\t\tif (expand) {\n\t\t\t\texpanderButton.textContent = 'Show fewer';\n\t\t\t\tthis.rootEl.setAttribute('aria-expanded', true);\n\t\t\t}\n\n\t\t\tif (contract) {\n\t\t\t\texpanderButton.textContent = 'Show more';\n\t\t\t\tthis.rootEl.setAttribute('aria-expanded', false);\n\t\t\t}\n\t\t}.bind(this));\n\t}\n\n\t/**\n\t * Hides table rows if the table can be expanded.\n\t *\n\t * @access public\n\t * @returns {void}\n\t */\n\tcontractTable() {\n\t\tif (!this.canExpand()) {\n\t\t\treturn;\n\t\t}\n\t\tthis._expand = false;\n\t\tthis._updateExpander();\n\t}\n\n\t/**\n\t * Expands the table, revealing hidden table rows, if it can be expanded and has been contracted.\n\t *\n\t * @access public\n\t * @returns {void}\n\t */\n\texpandTable() {\n\t\tif (!this.canExpand()) {\n\t\t\treturn;\n\t\t}\n\t\tthis._expand = true;\n\t\tthis._updateExpander();\n\t}\n\n\t/**\n\t * Get the table height, accounting for \"hidden\" rows.\n\t *\n\t * @returns {number | null} the height\n\t */\n\t_getTableHeight() {\n\t\tif (this.isContracted()) {\n\t\t\tconst maxTableHeight = super._getTableHeight();\n\t\t\tif (!this._contractedWrapperHeight || this._contractedWrapperHeight > maxTableHeight) {\n\t\t\t\tconst rowsToHide = this._rowsToHide;\n\t\t\t\tconst buttonHeight = this.controls.expanderButton.getBoundingClientRect().height;\n\t\t\t\tconst extraHeight = rowsToHide ? rowsToHide[0].getBoundingClientRect().height / 2 : 0;\n\t\t\t\tthis._contractedWrapperHeight = maxTableHeight + buttonHeight + extraHeight;\n\t\t\t}\n\t\t\treturn this._contractedWrapperHeight;\n\t\t}\n\n\t\tif (this.isExpanded()) {\n\t\t\tconst buttonHeight = this.controls.expanderButton.getBoundingClientRect().height;\n\t\t\treturn super._getTableHeight() + buttonHeight;\n\t\t}\n\n\t\treturn super._getTableHeight();\n\t}\n\n\t/**\n\t * Add controls such as the back, forward, \"show more\" buttons to DOM,\n\t * plus wrappers needed for them to function.\n\t *\n\t * @returns {undefined}\n\t */\n\t_addControlsToDom() {\n\t\tif (this.overlayWrapper && !this.controls) {\n\t\t\tconst supportsArrows = OverflowTable._supportsArrows();\n\t\t\tconst overlayWrapperHtml = `\n\t\t\t\t${this.wrapper ? `\n\t\t\t\t\t<div class=\"o-table-overflow-fade-overlay\"></div>\n\t\t\t\t` : ''}\n\t\t\t\t<div class=\"o-table-overflow-control-overlay\">\n\t\t\t\t\t${this.wrapper && supportsArrows ? `\n\t\t\t\t\t\t<div class=\"o-table-control o-table-control--back o-table-control--hide\">\n\t\t\t\t\t\t\t<button aria-label=\"visually scroll table back\" disabled=\"true\" class=\"o-buttons o-buttons--primary o-buttons--big o-buttons-icon o-buttons-icon--icon-only o-buttons-icon--arrow-left\"></button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t` : ''}\n\n\t\t\t\t\t${this.wrapper && supportsArrows ? `\n\t\t\t\t\t\t<div class=\"o-table-control o-table-control--forward o-table-control--hide\">\n\t\t\t\t\t\t\t<button aria-label=\"visually scroll table forward\" disabled=\"true\" class=\"o-buttons o-buttons--primary o-buttons--big o-buttons-icon o-buttons-icon--icon-only o-buttons-icon--arrow-right\"></button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t` : ''}\n\n\t\t\t\t\t${typeof this._opts.expanded === 'boolean' ? `\n\t\t\t\t\t\t<div class=\"o-table-control o-table-control--expander\">\n\t\t\t\t\t\t\t<button class=\"o-buttons o-buttons--primary o-buttons--big\">Show fewer</button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t` : ''}\n\t\t\t\t</div>\n\t\t\t`;\n\n\t\t\tconst range = document.createRange();\n\t\t\trange.selectNode(this.overlayWrapper);\n\t\t\tconst overlayFragment = range.createContextualFragment(overlayWrapperHtml);\n\n\t\t\tthis.controls = {\n\t\t\t\tcontrolsOverlay: overlayFragment.querySelector('.o-table-overflow-control-overlay'),\n\t\t\t\tfadeOverlay: overlayFragment.querySelector('.o-table-overflow-fade-overlay'),\n\t\t\t\texpanderButton: overlayFragment.querySelector('.o-table-control--expander'),\n\t\t\t\tforwardButton: overlayFragment.querySelector('.o-table-control--forward'),\n\t\t\t\tbackButton: overlayFragment.querySelector('.o-table-control--back')\n\t\t\t};\n\n\t\t\t// Add controls to the dom.\n\t\t\tthis._updateControlOverlayPosition();\n\t\t\twindow.requestAnimationFrame(function() {\n\t\t\t\tthis.overlayWrapper.appendChild(overlayFragment);\n\t\t\t}.bind(this));\n\t\t}\n\t}\n\n\t_updateControlOverlayPosition() {\n\t\tconst theadHeight = this.thead ? this.thead.getBoundingClientRect().height : 0;\n\t\tconst captionHeight = this.tableCaption ? this.tableCaption.getBoundingClientRect().height : 0;\n\t\twindow.requestAnimationFrame(function () {\n\t\t\tthis.controls.controlsOverlay.style['top'] = `${theadHeight + captionHeight}px`;\n\t\t}.bind(this));\n\t}\n\n\t/**\n\t * Add functionality to improve the experience when scrolling a table,\n\t * such as showing forward/back buttons to indicate that scroll is possible.\n\t *\n\t * @returns {undefined}\n\t */\n\t_setupScroll() {\n\t\t// Does not warn of a missing wrapper: assumes no overflow is desired.\n\t\tif (this.container && this.overlayWrapper && !this.wrapper) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.warn(\n\t\t\t\t'Controls to scroll table left/right could not be added to \"o-table\" as it is missing markup. ' +\n\t\t\t\t'Please add the container and wrapper elements according to the documentation https://registry.origami.ft.com/components/o-table.',\n\t\t\t\t{ table: this.rootEl }\n\t\t\t);\n\t\t}\n\n\t\t// Can not add controls without a container or wrapper.\n\t\tif (!this.container || !this.overlayWrapper || !this.wrapper) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Add table controls (e.g. left/right button).\n\t\tif (!this.controls) {\n\t\t\tthis._addControlsToDom();\n\t\t}\n\n\t\t// Add forward button behaviour.\n\t\tif (this.controls.forwardButton) {\n\t\t\tconst scrollForward = function () {\n\t\t\t\tthis.wrapper.scrollBy({\n\t\t\t\t\tleft: document.body.clientWidth / 2,\n\t\t\t\t\tbehavior: 'smooth'\n\t\t\t\t});\n\t\t\t}.bind(this);\n\t\t\tthis.controls.forwardButton.addEventListener('click', scrollForward);\n\t\t\tthis._listeners.push({\n\t\t\t\telement: this.controls.forwardButton,\n\t\t\t\tscrollForward,\n\t\t\t\ttype: 'click'\n\t\t\t});\n\t\t}\n\n\t\t// Add back button behaviour.\n\t\tif (this.controls.backButton) {\n\t\t\tconst scrollBackward = function () {\n\t\t\t\tthis.wrapper.scrollBy({\n\t\t\t\t\tleft: -(document.body.clientWidth / 2),\n\t\t\t\t\tbehavior: 'smooth'\n\t\t\t\t});\n\t\t\t}.bind(this);\n\t\t\tthis.controls.backButton.addEventListener('click', scrollBackward);\n\t\t\tthis._listeners.push({\n\t\t\t\telement: this.controls.backButton,\n\t\t\t\tscrollBackward,\n\t\t\t\ttype: 'click'\n\t\t\t});\n\t\t}\n\n\t\t// Set scroll position and update controls.\n\t\tconst updateScroll = function () {\n\t\t\tif (!this._controlUpdateScheduled) {\n\t\t\t\tthis._controlUpdateScheduled = true;\n\t\t\t\twindow.setTimeout(function () {\n\t\t\t\t\tthis._controlUpdateScheduled = false;\n\t\t\t\t\tthis._fromEnd = this.wrapper.scrollWidth - this.wrapper.clientWidth - this.wrapper.scrollLeft;\n\t\t\t\t\tthis._fromStart = this.wrapper.scrollLeft;\n\t\t\t\t\tthis._updateControls();\n\t\t\t\t}.bind(this), 33);\n\t\t\t}\n\t\t}.bind(this);\n\n\t\tupdateScroll();\n\n\t\t// Observe controls scrolling beyond table and update.\n\t\tif (this.controls.controlsOverlay && window.IntersectionObserver) {\n\t\t\t// Fade forward/back buttons at start and end of table.\n\t\t\tconst arrowFadeObserverConfig = {\n\t\t\t\troot: this.controls.controlsOverlay,\n\t\t\t\tthreshold: 1.0,\n\t\t\t\trootMargin: `-20px 0px ${this.canExpand() ? '0px' : '-20px'} 0px`\n\t\t\t};\n\t\t\tconst arrowFadeObserver = new IntersectionObserver(function(entries) {\n\t\t\t\tentries.forEach(function(entry) {\n\t\t\t\t\tentry.target.setAttribute('data-o-table-intersection', entry.intersectionRatio !== 1);\n\t\t\t\t\tupdateScroll();\n\t\t\t\t});\n\t\t\t}, arrowFadeObserverConfig);\n\t\t\tif (this.controls.backButton) {\n\t\t\t\tarrowFadeObserver.observe(this.controls.backButton);\n\t\t\t}\n\t\t\tif (this.controls.forwardButton) {\n\t\t\t\tarrowFadeObserver.observe(this.controls.forwardButton);\n\t\t\t}\n\t\t}\n\n\t\t// Add other event listeners to update controls.\n\t\tthis.wrapper.addEventListener('scroll', updateScroll);\n\t\twindow.addEventListener('resize', updateScroll);\n\t\twindow.addEventListener('load', updateScroll);\n\t\tthis._listeners.push({ element: this.wrapper, updateScroll, type: 'scroll' });\n\t\tthis._listeners.push({element: window, updateScroll, type: 'resize'});\n\t\tthis._listeners.push({element: window, updateScroll, type: 'load'});\n\t}\n\n\t/**\n\t * Add hide/show functionality for long tables.\n\t *\n\t * @returns {undefined}\n\t */\n\t_setupExpander() {\n\t\tif (typeof this._opts.expanded !== 'boolean') {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this.container || !this.overlayWrapper || !this.wrapper) {\n\t\t\tthrow new Error(\n\t\t\t\t'Controls to expand/contract the table could not be added to \"o-table\" as it is missing markup.' +\n\t\t\t\t'Please add the container and wrapper element according to the documentation https://registry.origami.ft.com/components/o-table.'\n\t\t\t);\n\t\t}\n\n\t\t// Add table controls (e.g. \"more\" button).\n\t\tif (!this.controls) {\n\t\t\tthis._addControlsToDom();\n\t\t}\n\n\t\tif (this.controls.expanderButton) {\n\t\t\tconst toggleExpanded = function () {\n\t\t\t\tif (this.isExpanded()) {\n\t\t\t\t\tconst expanderButtonContainer = this.controls.expanderButton;\n\t\t\t\t\tconst buttonOffset = expanderButtonContainer.getBoundingClientRect().top;\n\t\t\t\t\tthis.contractTable();\n\t\t\t\t\twindow.requestAnimationFrame(() => {\n\t\t\t\t\t\tconst top = window.pageYOffset + expanderButtonContainer.getBoundingClientRect().top - buttonOffset;\n\t\t\t\t\t\twindow.scroll(null, top);\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tthis.expandTable();\n\t\t\t\t}\n\t\t\t}.bind(this);\n\t\t\tthis.controls.expanderButton.addEventListener('click', toggleExpanded);\n\t\t\tthis._listeners.push({element: this.controls.expanderButton, toggleExpanded, type: 'click'});\n\t\t}\n\n\t\tthis._updateExpander();\n\t}\n\n\t/**\n\t * Update all controls and their overlays,\n\t * e.g. forward/back arrow visibility, visibility of arrow dock, overlay fade.\n\t *\n\t * @returns {undefined}\n\t */\n\t_updateControls() {\n\t\tif (!this.controls) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Toggle fade.\n\t\tconst canScrollTable = this._canScrollTable;\n\t\twindow.requestAnimationFrame(function () {\n\t\t\tthis.controls.fadeOverlay.classList.toggle('o-table-overflow-fade-overlay--scroll', canScrollTable);\n\t\t\tthis.controls.fadeOverlay.style.setProperty('--o-table-fade-from-end', `${Math.min(this._fromEnd, 10)}px`);\n\t\t\tthis.controls.fadeOverlay.style.setProperty('--o-table-fade-from-start', `${Math.min(this._fromStart, 10)}px`);\n\t\t}.bind(this));\n\n\t\t// Toggle arrow dock.\n\t\tconst showArrowDock = this._showArrowDock;\n\t\twindow.requestAnimationFrame(function () {\n\t\t\tthis.controls.controlsOverlay.classList.toggle('o-table-overflow-control-overlay--arrow-dock', showArrowDock);\n\t\t}.bind(this));\n\n\n\t\t// Update forward/back scroll controls.\n\t\tif (OverflowTable._supportsArrows()) {\n\t\t\tthis._updateScrollControl(this.controls.forwardButton);\n\t\t\tthis._updateScrollControl(this.controls.backButton);\n\t\t}\n\n\t\t// Update controls overlay to cover the body.\n\t\tthis._updateControlOverlayPosition();\n\t}\n\n\t/**\n\t * Update the visibility of a scroll forward/back button.\n\t *\n\t * @param {HTMLElement} element - The button wrapper.\n\t * @returns {undefined}\n\t */\n\t_updateScrollControl(element) {\n\t\tconst showStickyArrows = this._stickyArrows;\n\t\tconst canScrollTable = this._canScrollTable;\n\t\tconst arrowsDocked = this._showArrowDock && !showStickyArrows;\n\t\tconst scrolledToBoundary = this._fromEnd <= 0 && element === this.controls.forwardButton || this._fromStart <= 0 && element === this.controls.backButton;\n\t\tconst hideAtBoundary = !arrowsDocked && (!this._stickyArrows || this._stickyArrows && !this._canScrollPastTable);\n\t\tconst outsideTable = element.getAttribute('data-o-table-intersection') === 'true';\n\t\tconst elementButton = element.querySelector('button');\n\t\twindow.requestAnimationFrame(() => {\n\t\t\t// Show scroll control if the table does not fit within the viewport.\n\t\t\telement.style.display = canScrollTable ? '': 'none';\n\t\t\t// Make arrows sticky if table is tall and can be scrolled past.\n\t\t\telement.classList.toggle('o-table-control--sticky', showStickyArrows);\n\t\t\t// Place the arrows in the dock if they are not sticky.\n\t\t\telement.classList.toggle('o-table-control--dock', arrowsDocked);\n\t\t\t// Hide scroll control if they are outside the table boundry.\n\t\t\t// E.g. the table has been scrolled past.\n\t\t\tif (outsideTable) {\n\t\t\t\telementButton.setAttribute('disabled', true);\n\t\t\t\telement.classList.add('o-table-control--hide');\n\t\t\t}\n\t\t\t// Show scroll control if they are inside the table and the table is scrollable.\n\t\t\tif (!scrolledToBoundary && !outsideTable) {\n\t\t\t\telementButton.removeAttribute('disabled');\n\t\t\t\telement.classList.remove('o-table-control--hide');\n\t\t\t}\n\t\t\t// Disable scroll control if it is inside the table but scrolled to the end horizontally.\n\t\t\tif (scrolledToBoundary && !outsideTable) {\n\t\t\t\telementButton.setAttribute('disabled', true);\n\t\t\t\telement.classList.toggle('o-table-control--hide', hideAtBoundary);\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * The number of rows to display if the table is collapsed.\n\t *\n\t * @returns {number} the number of rows, or 20\n\t */\n\tget _minimumRowCount() {\n\t\tconst minimumRowCount = this._opts.minimumRowCount;\n\t\treturn isNaN(parseInt(minimumRowCount, 10)) ? 20 : parseInt(minimumRowCount, 10);\n\t}\n\n\t/**\n\t * Which rows are hidden, either by a filter or by the expander.\n\t *\n\t * @returns {Node[]} the hidden trs\n\t */\n\tget _rowsToHide() {\n\t\treturn [...this._filteredTableRows, ...this._rowsHiddenByExpander];\n\t}\n\n\t/**\n\t * The rows which will be hidden if the table is collapsed.\n\t *\n\t * @returns {Node[]} the rows that will disappear when collapsing\n\t */\n\tget _rowsHiddenByExpander() {\n\t\tconst visibleRowCount = Math.min(this.tableRows.length, this._minimumRowCount);\n\t\tconst nonFilteredRows = this.tableRows.filter(row => this._filteredTableRows.indexOf(row) === -1);\n\t\treturn this.isContracted() ? nonFilteredRows.slice(visibleRowCount, nonFilteredRows.length) : [];\n\t}\n\n\t/**\n\t * Check if the table can be scrolled.\n\t *\n\t * @returns {boolean} can the table be scrolled?\n\t */\n\tget _canScrollTable() {\n\t\treturn this._fromEnd > 0 || this._fromStart > 0;\n\t}\n\n\t/**\n\t * Check if the table can fit within the viewport vertically.\n\t *\n\t * @returns {boolean} is the table too big for the viewport?\n\t */\n\tget _tableTallerThanViewport() {\n\t\treturn this.container.getBoundingClientRect().height > document.documentElement.clientHeight;\n\t}\n\n\t/**\n\t * Check if the document is long enough to scroll beyond the table enough for sticky arrows to dock at the bottom.\n\t * I.e. Scroll past the table by at least 50% of the viewport.\n\t *\n\t * @returns {boolean} is the table so big that the viewport can scroll past it by over 50%?\n\t */\n\tget _canScrollPastTable() {\n\t\treturn this.container.getBoundingClientRect().bottom + document.documentElement.clientHeight / 2 < document.documentElement.getBoundingClientRect().bottom;\n\t}\n\n\t/**\n\t * Check if the \"dock\" at the bottom of the table should be shown.\n\t * After scrolling past the table, sticky arrows sit within the dock at the bottom of the table.\n\t *\n\t * @returns {boolean} should the dock be shown?\n\t */\n\tget _showArrowDock() {\n\t\treturn OverflowTable._supportsArrows() && this._canScrollTable && this._canScrollPastTable && this.canExpand();\n\t}\n\n\t/**\n\t * Check if left/right controls should be sticky.\n\t *\n\t * @returns {boolean} does the browser support stickiness, and is the table big?\n\t */\n\tget _stickyArrows() {\n\t\treturn OverflowTable._supportsArrows() && this._tableTallerThanViewport;\n\t}\n\n\t/**\n\t * Check if sticky buttons are supported.\n\t *\n\t * @returns {boolean} is stickiness supported by the user's browser?\n\t */\n\tstatic _supportsArrows() {\n\t\treturn typeof CSS !== 'undefined' && (CSS.supports(\"position\", \"sticky\") || CSS.supports('position', '-webkit-sticky'));\n\t}\n}\n\nexport default OverflowTable;\n","import BaseTable from './BaseTable.js';\n\nclass BasicTable extends BaseTable {\n\n\t/**\n\t * Initialises an `o-table` component without responsive behaviour.\n\t *\n\t * @access public\n\t * @param {HTMLElement} rootEl - The `o-table` element.\n\t * @param {import(\"../Sort/TableSorter\")} sorter A TableSorter instance\n\t * @param {object} opts [{}]\n\t * @param {boolean} opts.sortable [true]\n\t * @returns {BasicTable} A new table\n\t */\n\tconstructor(rootEl, sorter, opts = {}) {\n\t\tsuper(rootEl, sorter, opts);\n\t\twindow.setTimeout(this.addSortButtons.bind(this), 0);\n\t\tthis._ready();\n\t\treturn this;\n\t}\n}\n\nexport default BasicTable;\n","import CellFormatter from \"./CellFormatter.js\";\n\n/**\n * Construct Intl.Collator if supported.\n *\n * @access private\n * @returns {Intl.Collator | undefined} The Intl.Collator object enables language-sensitive string comparison.\n */\nfunction getIntlCollator() {\n\tif (typeof Intl !== 'undefined' && {}.hasOwnProperty.call(Intl, 'Collator')) {\n\t\treturn new Intl.Collator();\n\t}\n}\n\n/**\n * An ascending [compare function]{@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#Parameters}.\n *\n * @access private\n * @param {string | number} a column a\n * @param {string | number} b column b\n * @param {Intl.Collator} intlCollator The Intl.Collator object enables language-sensitive string comparison.\n * @returns {number} comp\n */\nfunction ascendingSort(a, b, intlCollator) {\n\tif ((typeof a === 'string' || a instanceof String) && (typeof b === 'string' || b instanceof String)) {\n\t\treturn intlCollator ? intlCollator.compare(a, b) : a.localeCompare(b);\n\t} else if (!isNaN(b) && isNaN(a) || a < b) {\n\t\treturn -1;\n\t} else if (!isNaN(a) && isNaN(b) || b < a) {\n\t\treturn 1;\n\t} else {\n\t\treturn 0;\n\t}\n}\n\n/**\n * A descending [compare function]{@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#Parameters}.\n *\n * @access private\n * @param {string | number} a column a\n * @param {string | number} b column b\n * @param {Intl.Collator} intlCollator The Intl.Collator object enables language-sensitive string comparison.\n * @returns {number} comp\n */\nfunction descendingSort(a, b, intlCollator) {\n\treturn 0 - ascendingSort.apply(this, [a, b, intlCollator]);\n}\n\n/**\n * Provides methods to sort table instances.\n */\nclass TableSorter {\n\n\tconstructor() {\n\t\tthis._cellFormatter = new CellFormatter();\n\t}\n\n\t/**\n\t * Sort the given table.\n\t *\n\t * @access public\n\t * @param {import(\"../Tables/BaseTable\")} table - The table instance to sort.\n\t * @param {number} columnIndex - The index of the table column to sort.\n\t * @param {string} sortOrder - How to sort the column, \"ascending\" or \"descending\"\n\t * @param {number} batch [100] - Deprecated. No longer used. How many rows to render at once when sorting.\n\t * @returns {void}\n\t */\n\tsortRowsByColumn(table, columnIndex, sortOrder, batch) {\n\t\tconst tableHeaderElement = table.getTableHeader(columnIndex);\n\n\t\tif (batch) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.warn('o-table: The \"batch\" argument is deprecated and no longer used.');\n\t\t}\n\n\t\tif (['ascending', 'descending'].indexOf(sortOrder) === -1) {\n\t\t\tthrow new Error(`Sort order \"${sortOrder}\" is not supported. Must be \"ascending\" or \"descending\".`);\n\t\t}\n\n\t\tconst intlCollator = getIntlCollator();\n\t\tconst cellFormatter = this._cellFormatter;\n\t\tconst type = tableHeaderElement.getAttribute('data-o-table-data-type') || undefined;\n\t\ttable.tableRows.sort((a, b) => {\n\t\t\tlet aCol = a.querySelectorAll('td,th:not(.o-table__duplicate-heading)')[columnIndex];\n\t\t\tlet bCol = b.querySelectorAll('td,th:not(.o-table__duplicate-heading)')[columnIndex];\n\t\t\taCol = cellFormatter.formatCell({ cell: aCol, type });\n\t\t\tbCol = cellFormatter.formatCell({ cell: bCol, type });\n\t\t\tif (sortOrder === 'ascending') {\n\t\t\t\treturn ascendingSort(aCol, bCol, intlCollator);\n\t\t\t} else {\n\t\t\t\treturn descendingSort(aCol, bCol, intlCollator);\n\t\t\t}\n\t\t});\n\n\t\t// Table sorted.\n\t\ttable.sorted({\n\t\t\tcolumnIndex,\n\t\t\tsortOrder\n\t\t});\n\n\t\t// Render sorted table rows.\n\t\ttable.renderRowUpdates();\n\n\t\t// Update table headings.\n\t\twindow.requestAnimationFrame(() => {\n\t\t\ttable.tableHeaders.forEach((header) => {\n\t\t\t\tconst headerSort = header === tableHeaderElement ? sortOrder : 'none';\n\t\t\t\theader.setAttribute('aria-sort', headerSort);\n\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * Set a custom cell formatter for a given data type.\n\t *\n\t * @param {string} type - The data type to apply the filter function to.\n\t * @param {formatFunction} formatFunction - Callback to format a table cell to a sort value.\n\t * @see {@link CellFormatter~setFormatter} for `formatFunction` details.\n\t * @access public\n\t */\n\tsetCellFormatterForType(type, formatFunction) {\n\t\tthis._cellFormatter.setFormatter(type, formatFunction);\n\t}\n}\n\nexport default TableSorter;\n","/**\n * Extracts the contents of img alt text.\n *\n * @example String argument for example purposes only, to represent a HTMLElement.\n *\t\textractAltFromImages('<img alt=\"text\">'); // text\n * @param {HTMLElement} cell The DOM node to operate on, possibly a <td>\n * @access private\n * @returns {HTMLElement} the parameter\n */\nfunction extractAltFromImages(cell){\n\tconst images = Array.from(cell.getElementsByTagName('img'));\n\timages.forEach(image => {\n\t\tconst contents = image.getAttribute('alt');\n\t\timage.insertAdjacentHTML('beforebegin', contents);\n\t\timage.remove();\n\t});\n\n\treturn cell;\n}\n\n/**\n * Returns the text represantation of an HTML node.\n * If a node contains no `dateTime` attribute, content, `aria-label` or `title` attributes of <a>, <span>, or <i> child nodes are used.\n *\n * @example String argument for example purposes only, to represent a HTMLElement.\n *\t\textractText('<i class=\"o-icons-icon o-icons-icon--mail\"><a href=\"mailto:example@ft.com\" title=\"Email Example at example@ft.com\"></a>'); //Email Example at example@ft.com\n *\t\textractText('<span class=\"o-icons-icon o-icons-icon--tick\">Correct</span>'); //Correct\n *\t\textractText('<span class=\"o-icons-icon o-icons-icon--tick\" title=\"Correct\"></span>'); //Correct\n *\t\textractText('<span class=\"o-icons-icon o-icons-icon--tick\" aria-label=\"Correct\"></span>'); //Correct\n *\t\textractText('<time class=\"o-date\" data-o-component=\"o-date\" datetime=\"2020-06-19T07:56:18Z\">2 hours ago</time>'); //Correct\n * @param {HTMLElement} cell The DOM node to operate on, possibly a <td>\n * @access private\n * @returns {HTMLElement} text representation of the HTML node\n */\nfunction extractText(cell){\n\tconst time = cell.querySelector('time');\n\tif (time && time.dateTime) {\n\t\tconst date = new Date(time.dateTime);\n\t\tif (!isNaN(date.getTime())){\n\t\t\treturn String(date.getTime());\n\t\t}\n\t}\n\tlet text = cell.textContent.trim();\n\t// No text found, check aria labels and titles.\n\t// Useful for icon-only cells.\n\tif (text === '') {\n\t\tconst nodes = cell.querySelectorAll('a, span, i');\n\t\ttext = Array.from(nodes).reduce((accumulator, node) => {\n\t\t\tconst nodeText = node.getAttribute('aria-label') || node.getAttribute('title');\n\t\t\treturn nodeText ? `${accumulator} ${nodeText}` : accumulator;\n\t\t}, '');\n\t}\n\treturn text.trim();\n}\n\n/**\n * Returns the text with abbreviations expanded.\n * Supports million 'm', billion 'bn' (1,000 million), and trillion 'tn' (1,000 billion).\n *\n * @example\n *  expandAbbreviations('1m') //1000000\n *  expandAbbreviations('1.2bn') //2200000000\n *  expandAbbreviations('1tn') //1000000000000\n *  expandAbbreviations('5m-10m') //5000000-10000000\n * @param {string} text The string to operate on\n * @access private\n * @returns {string} Text with any supported abbreviations expanded\n */\nfunction expandAbbreviations(text) {\n\ttext = text.replace(/([\\d,.]+)([a-zA-Z]+)/g, (match, digit, abbreviation) => {\n\t\tconst zeros = {\n\t\t\t'm': 6,\n\t\t\t'bn': 9,\n\t\t\t'tn': 12\n\t\t};\n\t\treturn `${digit * Math.pow(10, zeros[abbreviation] || 0)}`;\n\t});\n\treturn text;\n}\n\n/**\n * Returns the text with digit group separators removed.\n *\n * @example\n *  removeDigitGroupSeparator('1,000') //1000\n *  removeDigitGroupSeparator('40') //40\n *  removeDigitGroupSeparator('4,000,000') //4000000\n * @param {string} text The string to operate on\n * @access private\n * @returns {string} Text with digit group separators (commas) removed.\n */\nfunction removeDigitGroupSeparators(text) {\n\treturn text.replace(/,/g, '');\n}\n\n/**\n * Returns the text with non-number characters removed (e.g. currency symbols).\n * Does not effect range characters e.g. \"–\" will be maintained.\n * If no digits were found to remove, returns the text unchanged.\n *\n * @example\n *  extractDigitsIfFound('Rmb100') //100\n *  extractDigitsIfFound('CFA Fr830') //830\n *  extractDigitsIfFound('HK$12') //12\n *  extractDigitsIfFound('HK$12-HK$20') //12–20\n *  extractDigitsIfFound('1534956593-1534956620') //1534956593–1534956620\n *  extractDigitsIfFound('Some text') //Some text\n *  extractDigitsIfFound('Some text 123') //123\n * @param {string} text The string to operate on\n * @access private\n * @returns {string} Text with digits characters only.\n */\nfunction extractDigitsIfFound(text) {\n\tconst digitsAndRange = text.replace(/([^\\d.,\\-\\–]+)/g, '');\n\tif (digitsAndRange === '') {\n\t\treturn text;\n\t}\n\treturn digitsAndRange;\n}\n\n/**\n * Returns a number from a range\n *\n * @example\n *  removeRange('1534956593–1534956620') //1534956593\n *  removeRange('123–345') //123\n *  removeRange('123') //123\n *  removeRange('No numbers') //No numbers\n * @param {string} text The string to operate on\n * @access private\n * @returns {number|string} the extracted number, or the original string\n */\nfunction extractNumberFromRange(text) {\n\tconst number = parseFloat(text);\n\treturn isNaN(number) ? text : number;\n}\n\n/**\n * Parses FT style date and time and formats as a number for sorting.\n * FT date or date and time returns a UNIX epoch (UTC).\n * FT time returns a positive float for pm, negative for am.\n *\n * @example\n *  ftDateTimeToNumber('August 17') //UNIX epoch, assumes current year\n *  ftDateTimeToNumber('September 12 2012') //UNIX epoch\n *  ftDateTimeToNumber('January 2012') //UNIX epoch, first of month\n *  ftDateTimeToNumber('March 12 2015 1am') //UNIX epoch including time\n *  ftDateTimeToNumber('April 20 2014 1.30pm') //UNIX epoch including time\n *  ftDateTimeToNumber('1am') //1\n *  ftDateTimeToNumber('1.30am') //1.3\n *  ftDateTimeToNumber('1.40pm') //13.4\n *  ftDateTimeToNumber('3pm') //15\n *  ftDateTimeToNumber('Not a known date') //Note a known date\n * @param {string} text The string to operate on\n * @access private\n * @returns {number} Number representation of date and/or time for sorting.\n */\nfunction ftDateTimeToNumber(text) {\n\tconst monthNames = ['January','February','March','April','May','June','July','August','September','October','November','December'];\n\t// FT style for writing dates: is June 23 2016 (no commas, month date year)\n\tconst date = text.match(/^([A-Za-z]{3,})(?:[\\s])(?=[\\d])((?:\\d{1,2})?(?![\\d]))?(?:\\s)?(\\d{4})?/);\n\t// FT style for writing time:\n\t// The 12 hour clock should be used: 1am, 9.30pm\n\tconst time = text.match(/(?:\\s|^)(\\d{1,2}(?:[.](\\d{2}))?)(pm|am)$/);\n\t// Get date.\n\tconst month = date && date[1] ? date[1] : null;\n\t// Get index of the month name from a given month e.g. 'January' for 'Jan'.\n\tlet monthIndex = null;\n\tif (month) {\n\t\tfor (let index = 0; index < monthNames.length; index++) {\n\t\t\tconst name = monthNames[index];\n\t\t\tif (name.startsWith(month)) {\n\t\t\t\tmonthIndex = index;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tconst day = date && date[2] ? parseInt(date[2], 10) : null;\n\tlet year = date && date[3] ? parseInt(date[3], 10) : null;\n\tif (month && !year) {\n\t\t// For sorting purposes, assume a month is for this year if not otherwise specified.\n\t\tyear = new Date().getFullYear();\n\t}\n\t// Get time.\n\tconst hour = time && time[1] ? parseInt(time[1], 10) : null;\n\tconst minute = time && time[2] ? parseInt(time[2], 10) : null;\n\tconst period = time ? time[3] : null;\n\tconst twentyFourHour = hour && period === 'pm' ? hour + 12 : hour;\n\t// Sort number for FT formated time.\n\tif (hour && !(year && monthIndex)) {\n\t\treturn parseFloat(`${twentyFourHour}.${minute}`);\n\t}\n\n\tif (year !== null || monthIndex !== null || day !== null || twentyFourHour !== null || minute !== null) {\n\t\t// Unix epoch to sort FT formated date.\n\t\tconst dateObj = new Date(Date.UTC(year, monthIndex, day, twentyFourHour, minute));\n\t\treturn isNaN(dateObj.getTime()) ? text : dateObj.getTime();\n\t} else {\n\t\treturn text;\n\t}\n}\n\n/**\n * Removes and number of asterisk's which are at the end of the line.\n *\n * @example\n *  removeRefereneAsterisk('Durian*') //Durian\n *  removeRefereneAsterisk('1,439,165.43**') //1,439,165.43\n * @param {string} text The string to operate on\n * @access private\n * @returns {string} Text without source/reference asterisk.\n */\nfunction removeRefereneAsterisk(text) {\n\treturn text.replace(/\\*+$/, '');\n}\n\n/**\n * Removes indicators of an empty cell.\n *\n * @example\n *  removeEmptyCellIndicators('n/a'); //\n *  removeEmptyCellIndicators('-'); //\n *  removeEmptyCellIndicators('Cell-content'); //Cell-content\n * @param {string} text The string to operate on\n * @access private\n * @returns {string} An empty string or the original text.\n */\nfunction removeEmptyCellIndicators(text) {\n\t// Remove n/a\n\ttext = text.replace(/^n[./]a[.]?$/i, '');\n\t// Remove -\n\treturn text === '-' ? '' : text;\n}\n\n/**\n * Group of filters to extract text from a cell.\n *\n * @param {HTMLElement} cell The node to extract sortable text from.\n * @access private\n * @returns {string} The node content to sort on.\n */\nfunction extractNodeContent(cell) {\n\tconst steps = [extractAltFromImages, extractText, removeRefereneAsterisk, removeEmptyCellIndicators];\n\tlet text = cell;\n\tsteps.forEach(step => { text = step(text); });\n\treturn typeof text === 'string' ? text : '';\n}\n\n/**\n * Group of filters to extract a number for sorting.\n *\n * @param {string} text The string to operate on\n * @access private\n * @returns {number | string} A number if one could a extracted, string otherwise.\n */\nfunction extractNumber(text) {\n\tconst steps = [removeDigitGroupSeparators, expandAbbreviations, extractDigitsIfFound, extractNumberFromRange];\n\tsteps.forEach(step => { text = step(text); });\n\treturn text;\n}\n\n/**\n * Methods to format table cells for sorting.\n *\n * @access public\n */\nclass CellFormatter {\n\n\tconstructor () {\n\t\t// This object is used to keep the running order of filter methods\n\t\tthis.filters = {\n\t\t\ttext: [extractNodeContent],\n\t\t\tnumber: [extractNodeContent, extractNumber],\n\t\t\tpercent: [extractNodeContent, extractNumber],\n\t\t\tcurrency: [extractNodeContent, extractNumber],\n\t\t\tnumeric: [extractNodeContent, extractNumber],\n\t\t\tdate: [extractNodeContent, ftDateTimeToNumber]\n\t\t};\n\t}\n\n\t/**\n\t * The `formatFunction` take the table cell HTMLElement,\n\t * and converts it to a String or Number of sorting.\n\t *\n\t * @callback formatFunction\n\t * @param {HTMLElement} cell\n\t * @returns {string | object}\n\t */\n\n\t/**\n\t * @param {string} type The data type of the cell to apply the filter function to.\n\t * @param {formatFunction} formatFunction The function to take the cell and return a sortable value (string/number).\n\t * @example\n\t *  mySortFormatter.setFormatter('emoji-time', (cell) => {\n\t *\t\tconst text = cell.textContent.trim();\n\t *\t\tif (text === '🌑') {\n\t *\t\t\treturn 1;\n\t *\t\t}\n\t *\t\tif (text === '🌤️️') {\n\t *\t\t\treturn 2;\n\t *\t\t}\n\t *\t\treturn 0;\n\t *  });\n\t * @access public\n\t */\n\tsetFormatter(type, formatFunction) {\n\t\tthis.filters[type] = [formatFunction];\n\t}\n\n\t/**\n\t * @param {object} args the argument object\n\t * @param {HTMLElement} args.cell the td to format\n\t * @param {string} args.type The data type of the cell, e.g. date, number, currency. Custom types are supported.\n\t * @see {@link setFormatter} to support add support for a custom type.\n\t * @access public\n\t * @returns {string | number} A representation of cell which can be used for sorting.\n\t */\n\tformatCell({ cell, type = 'text' }) {\n\t\ttype = type || 'text';\n\t\tlet sortValue = cell.getAttribute('data-o-table-sort-value');\n\t\tif (sortValue === null) {\n\t\t\tif (this.filters[type]) {\n\t\t\t\tconst cellClone = cell.cloneNode({ deep: true });\n\t\t\t\tsortValue = cellClone;\n\t\t\t\tthis.filters[type].forEach(fn => { sortValue = fn(sortValue); });\n\t\t\t}\n\t\t\tcell.setAttribute('data-o-table-sort-value', sortValue);\n\t\t}\n\t\tconst sortValueIsNumber = sortValue !== '' && !isNaN(sortValue);\n\t\treturn sortValueIsNumber ? parseFloat(sortValue) : sortValue;\n\t}\n}\n\nexport default CellFormatter;\n","import React, { useState, useMemo, useEffect, useContext } from 'react';\nimport { Context } from '@financial-times/g-components/article-layout';\nimport PropTypes from 'prop-types';\nimport { GridChild } from '@financial-times/g-components/grid';\nimport AreaLookup from '../area-lookup';\nimport { getAreaList, areaCodeToDisplay, getAttributeFromOptions, getAreasInData } from './helpers';\nimport OptionsPanel from '../options-panel';\nimport ButtonSelectionGroup from '../button-selection-group';\nimport DatePicker from '../date-picker';\nimport { queryParamDateFormat, datePickerDateFormat } from '../date-picker-input/helpers';\nimport TrajectoryChart from '../trajectory-chart';\nimport Toggle from '../toggle';\nimport './styles.scss';\n\nconst TrajectoryChartPanel = ({ id, data, areas, lastUpdated, updateState, options }) => {\n  const idString = `trajectory-chart-${id}`;\n\n  const { breakpoint: b } = useContext(Context);\n  const breakpoint = ((b && b.breakpoint) || 'default').toLowerCase();\n  const isSmall = ['default', 's'].includes(breakpoint);\n\n  // Manage date picker error state\n  const [datePickerError, setDatePickerError] = useState({\n    state: 'default',\n    message: 'Date must be 7 days before latest date',\n  });\n  const [hideUnselected, setHideUnselected] = useState(true);\n\n  const { populationAdjusted, cumulative, rollingAverage, startDate, doses } = options;\n  const attributeToVisualise = getAttributeFromOptions(options);\n  const areasInData = useMemo(() => getAreasInData(data, attributeToVisualise), [\n    data,\n    attributeToVisualise,\n  ]);\n\n  // Get list of areas to populate area lookup\n  const areaList = useMemo(() => getAreaList(data), [data]);\n\n  // Get display names of selected areas\n  const selectedAreaDisplayNames = areas\n    .map(areaCode => ({\n      value: areaCode,\n      display: areaCodeToDisplay(areaCode, areaList),\n    }))\n    .filter(({ display }) => display);\n\n  // Check which selected areas are in data\n  const areasToHighlightInChart = selectedAreaDisplayNames.filter(({ display }) =>\n    areasInData.includes(display)\n  );\n  const emptyAreasToHighlightInChart = areasToHighlightInChart.length === 0;\n\n  // Reset toggle if none of the selected areas are in the data\n  useEffect(() => {\n    if (emptyAreasToHighlightInChart) setHideUnselected(false);\n  }, [emptyAreasToHighlightInChart]);\n\n  const toggleElement = onClick => (\n    <Toggle\n      id=\"unselected-countries-toggle\"\n      text={`${hideUnselected ? 'Show' : 'Hide'} unselected locations`}\n      checked={hideUnselected}\n      onClick={onClick}\n      disabled={emptyAreasToHighlightInChart}\n    />\n  );\n\n  return (\n    <React.Fragment>\n      <GridChild colspan=\"12 S11 Scenter\">\n        <div className=\"options-panel-container fixed-grid-child\">\n          <div className=\"options-panel__item options-panel__item--full\">\n            <AreaLookup\n              title={\n                <React.Fragment>\n                  Choose location or select <span style={{ fontWeight: 600 }}>up to seven</span> to\n                  compare\n                </React.Fragment>\n              }\n              areaList={areaList}\n              selectedAreas={selectedAreaDisplayNames}\n              areasInData={areasInData}\n              updateState={newAreas => updateState({ areas: newAreas })}\n              options={options}\n              maxSelectedAreas={7}\n              emptyInputErrorMessage=\"Please enter location name\"\n              maxSelectedErrorMessage=\"Maximum number of location selected\"\n            />\n            <OptionsPanel\n              id={idString}\n              mainOptions={({ breakpoint }) => (\n                <React.Fragment>\n                  <div className=\"options-panel__item\">\n                    <ButtonSelectionGroup\n                      items={[\n                        { value: 'pop-adj', display: 'Per 100' },\n                        { value: 'raw', display: 'Raw numbers' },\n                      ]}\n                      selected={populationAdjusted ? 'pop-adj' : 'raw'}\n                      updateSelection={populationAdjusted =>\n                        updateState({ populationAdjusted: populationAdjusted === 'pop-adj' })\n                      }\n                      equalButtons={false}\n                    />\n                  </div>\n                  {['m', 'l', 'xl'].includes(breakpoint) && (\n                    <React.Fragment>\n                      <div className=\"options-panel__item\">\n                        <ButtonSelectionGroup\n                          items={[\n                            { value: 'cumulative', display: 'Cumulative' },\n                            { value: 'daily', display: 'Daily' },\n                          ]}\n                          selected={cumulative ? 'cumulative' : 'daily'}\n                          updateSelection={cumulative =>\n                            updateState({ cumulative: cumulative === 'cumulative' })\n                          }\n                          equalButtons={breakpoint !== 'm'}\n                        />\n                      </div>\n                      <div className=\"options-panel__item\">\n                        <ButtonSelectionGroup\n                          items={[\n                            { value: 'total', display: 'Total doses' },\n                            { value: 'first', display: 'First dose' },\n                            { value: 'full', display: 'Fully vaccinated' },\n                            { value: 'booster', display: 'Boosters' },\n                          ]}\n                          selected={doses || 'total'}\n                          equalButtons={false}\n                          updateSelection={doses => updateState({ doses })}\n                        />\n                      </div>\n                    </React.Fragment>\n                  )}\n                </React.Fragment>\n              )}\n              additionalOptions={({ breakpoint, closeOptionsOverlay }) => (\n                <React.Fragment>\n                  <div className=\"options-panel__row\">\n                    <div className=\"options-panel__row-group\">\n                      <div className=\"options-panel__row-item\">\n                        <ButtonSelectionGroup\n                          items={[\n                            { value: 'cumulative', display: 'Cumulative' },\n                            { value: 'daily', display: 'Daily' },\n                          ]}\n                          selected={cumulative ? 'cumulative' : 'daily'}\n                          updateSelection={cumulative => {\n                            updateState({ cumulative: cumulative === 'cumulative' });\n                            closeOptionsOverlay();\n                          }}\n                          equalButtons={breakpoint !== 'm'}\n                          width={breakpoint === 'm' ? '190px' : '210px'}\n                        />\n                      </div>\n                      <div className=\"options-panel__row-item\">\n                        <ButtonSelectionGroup\n                          items={[\n                            { value: 'total', display: 'Total doses' },\n                            { value: 'first', display: 'First dose' },\n                            { value: 'full', display: 'Fully vaccinated' },\n                            { value: 'booster', display: 'Boosters' },\n                          ]}\n                          selected={doses || 'total'}\n                          equalButtons\n                          updateSelection={doses => {\n                            updateState({ doses });\n                            closeOptionsOverlay();\n                          }}\n                        />\n                      </div>\n\n                      {['default', 's'].includes(breakpoint) && (\n                        <div className=\"options-panel__row-item\">\n                          {toggleElement(() => {\n                            setHideUnselected(!hideUnselected);\n                            closeOptionsOverlay();\n                          })}\n                        </div>\n                      )}\n                    </div>\n                  </div>\n                </React.Fragment>\n              )}\n              hideOptionsToggle={!isSmall}\n            />\n          </div>\n        </div>\n      </GridChild>\n      <GridChild colspan=\"12\">\n        <TrajectoryChart\n          id={idString}\n          data={data}\n          lastUpdated={lastUpdated}\n          options={options}\n          attributeToVisualise={attributeToVisualise}\n          areaList={areaList}\n          areasToHighlightInChart={areasToHighlightInChart}\n          hideUnselectedAreas={hideUnselected}\n          overlay={\n            <div className=\"toggle-positioning-container\">\n              {toggleElement(() => {\n                setHideUnselected(!hideUnselected);\n              })}\n            </div>\n          }\n        />\n      </GridChild>\n    </React.Fragment>\n  );\n};\n\nTrajectoryChartPanel.propTypes = {\n  id: PropTypes.string.isRequired,\n  data: PropTypes.array.isRequired,\n  areas: PropTypes.array,\n  lastUpdated: PropTypes.string.isRequired,\n  updateState: PropTypes.func.isRequired,\n  options: PropTypes.shape({\n    populationAdjusted: PropTypes.bool,\n    cumulative: PropTypes.bool,\n    rollingAverage: PropTypes.bool,\n    startDate: PropTypes.instanceOf(Date),\n    doses: PropTypes.string,\n  }).isRequired,\n};\n\nTrajectoryChartPanel.defaultProps = {\n  areas: [],\n};\n\nexport default TrajectoryChartPanel;\n","import React, { useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport AutosuggestSearch from '@financial-times/g-components/autosuggest-search';\nimport Icon from '@financial-times/g-components/icon';\nimport './styles.scss';\nimport {\n  findMatch,\n  cleanSearchValue,\n  getSuggestions,\n  formatAreaList,\n  generateErrorMessage,\n} from './helpers';\n\n// Function to render suggestion\nconst RenderSuggestion = ({ display, disabled, selected }) => {\n  return (\n    <div className={`suggestion-entry ${disabled ? 'suggestion-entry--disabled' : ''}`}>\n      {selected && (\n        <Icon\n          className=\"suggestion-entry__tick\"\n          iconName=\"tick\"\n          iconColor=\"#0d7680\"\n          height={40}\n          width={32}\n        />\n      )}\n      <div className=\"suggestion-entry__text\">\n        <span className=\"suggestion-entry__area-name\">{display}</span>\n        {disabled && (\n          <span className=\"suggestion-entry__error\">\n            {' '}\n            (does not appear on this view of the chart)\n          </span>\n        )}\n      </div>\n    </div>\n  );\n};\n\nconst AreaLookup = ({\n  title,\n  areaList,\n  selectedAreas,\n  exclusionList,\n  updateState,\n  maxSelectedAreas,\n  options,\n  areasInData,\n  placeholder,\n  emptyInputErrorMessage,\n  maxSelectedErrorMessage,\n}) => {\n  const selectionErrorMessage = generateErrorMessage(selectedAreas, areasInData, options);\n\n  const selectedAreasValues = selectedAreas.map(({ value }) => value);\n\n  const formattedAreaList = useMemo(\n    () => formatAreaList(areaList, areasInData, selectedAreasValues),\n    [areaList, areasInData, selectedAreasValues]\n  );\n\n  const addAreaToSelection = newArea => {\n    if (selectedAreas.length !== maxSelectedAreas) {\n      const newSelectedAreas = [...new Set([...selectedAreasValues, newArea])];\n      updateState(newSelectedAreas);\n    }\n  };\n\n  const removeAreaFromSelection = areaToRemove => {\n    const newSelectedAreas = selectedAreasValues.filter(v => v !== areaToRemove);\n    updateState(newSelectedAreas);\n    // Clear error\n    return { isError: false, errorMessage: '' };\n  };\n\n  const removeLastAreaFromSelection = () => {\n    if (selectedAreasValues.length > 0) {\n      const newSelectedAreas = selectedAreasValues.slice(0, -1);\n      updateState(newSelectedAreas);\n    }\n  };\n\n  // Function to run on dropdown select\n  const onSelectCallback = ({ value, selected, errorMessage }) => {\n    // If already selected, remove\n    if (selected) {\n      removeAreaFromSelection(value);\n    } else {\n      addAreaToSelection(value);\n    }\n    if (errorMessage) {\n      return { isError: true, errorMessage };\n    }\n  };\n\n  // Function to run on submit\n  const onSubmitCallback = value => {\n    const match = findMatch(formattedAreaList, value);\n\n    if (match) {\n      const { value } = match;\n      addAreaToSelection(value);\n    } else {\n      const exclusionMatch = findMatch(exclusionList, value);\n      if (exclusionMatch) {\n        const { errorMessage } = exclusionMatch;\n        return { isError: true, errorMessage };\n      }\n      return { isError: true, errorMessage: 'No match found' };\n    }\n  };\n\n  const maxSelectedAreasReached = selectedAreas.length === maxSelectedAreas;\n\n  return (\n    <div className=\"area-lookup\">\n      {title && <div className=\"area-lookup__title\">{title}</div>}\n      <AutosuggestSearch\n        placeholder={!maxSelectedAreasReached ? placeholder : ''}\n        width=\"100%\"\n        showClearButton={false}\n        showSearchIcon\n        searchIconPosition=\"right\"\n        searchList={formattedAreaList}\n        selectedValues={selectedAreas}\n        validateInput={input =>\n          input === ''\n            ? { isError: true, errorMessage: emptyInputErrorMessage }\n            : { isError: false, errorMessage: '' }\n        }\n        renderSuggestion={RenderSuggestion}\n        getSuggestions={getSuggestions}\n        onSelectCallback={onSelectCallback}\n        onSubmitCallback={onSubmitCallback}\n        onSelectedValueRemove={removeAreaFromSelection}\n        onEmptyInputBackspace={removeLastAreaFromSelection}\n        onClickCallback={() =>\n          maxSelectedAreasReached\n            ? {\n                isError: true,\n                errorMessage: maxSelectedErrorMessage,\n              }\n            : null\n        }\n        errorMessageOverride={selectionErrorMessage}\n        disabled={maxSelectedAreasReached}\n        blurInputOnSuggestionSubmit={false}\n        usingSelectedValues\n      />\n    </div>\n  );\n};\n\nAreaLookup.propTypes = {\n  title: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\n  areaList: PropTypes.array,\n  addAreaToSelection: PropTypes.func,\n  removeAreaFromSelection: PropTypes.func,\n  exclusionList: PropTypes.array,\n  errorMessage: PropTypes.string,\n  updateState: PropTypes.func,\n  maxSelectedAreas: PropTypes.number,\n  areasInData: PropTypes.array.isRequired,\n  options: PropTypes.object,\n  placeholder: PropTypes.string,\n  emptyInputErrorMessage: PropTypes.string.isRequired,\n  maxSelectedErrorMessage: PropTypes.string.isRequired,\n};\n\nAreaLookup.defaultProps = {\n  areaList: [],\n  exclusionList: [],\n  updateState: () => {},\n  maxSelectedAreas: 6,\n  placeholder: 'Search...',\n  emptyInputErrorMessage: 'Please enter an area name',\n};\n\nexport default AreaLookup;\n","/**\n * @file\n * Autosuggest search component\n */\n\nimport React, { useRef, useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport Autosuggest from 'react-autosuggest';\nimport classNames from 'classnames';\nimport './styles.scss';\nimport Icon from '../icon';\n\n// Default get suggestions method\nconst defaultGetSuggestions = (value, searchList) => {\n  const inputValue = value.trim().toLowerCase();\n  const inputLength = inputValue.length;\n\n  // Match from the beginning of the string\n  return inputLength === 0\n    ? []\n    : searchList.filter(({ display }) => {\n        const words = display.toLowerCase().split(' ');\n        return words.some(word => word.toLowerCase().slice(0, inputLength) === inputValue);\n      });\n};\n\n// Default component/function to render suggestion\nconst RenderSuggestion = ({ display, disabled }) => (\n  <div className={classNames('suggestion', disabled && 'suggestion--disabled')}>{display}</div>\n);\n\n// Default mapping from suggestion to value\nconst defaultGetSuggestionValue = ({ display }) => display;\n\nconst SelectedValue = ({ className, display, value, onSelectedValueRemove }) => (\n  <div className={`${className}__selected-value`} key={`selected-value__${value}`}>\n    <span id={`selected-value__${value}`}>{display}</span>\n    <button\n      className={`${className}__selected-value-close-button`}\n      aria-labelledby={`selected-value__${value}`}\n      type=\"button\"\n      onClick={() => onSelectedValueRemove(value)}\n    >\n      <Icon\n        className=\"remove-from-selection\"\n        iconName=\"cross\"\n        iconColor=\"ffffff\"\n        width={20}\n        height={20}\n      />\n    </button>\n  </div>\n);\n\nconst AutosuggestSearch = ({\n  className,\n  width,\n  placeholder,\n  defaultValue,\n  disabled,\n  showSearchIcon,\n  searchIconPosition,\n  showClearButton,\n  blurInputOnSuggestionSubmit,\n  // Data to generate suggestions from\n  searchList,\n  // Selected values\n  selectedValues,\n  usingSelectedValues,\n  selectedValueComponent: customSelectedValueComponent,\n  // Suggestions\n  getSuggestions,\n  getSuggestionValue,\n  renderSuggestion,\n  // Callbacks and event handlers\n  onSelectCallback,\n  onSubmitCallback,\n  onClickCallback,\n  onClearFunction,\n  onSelectedValueRemove,\n  onEmptyInputBackspace,\n  // Validation and errors\n  validateInput,\n  errorMessageOverride,\n}) => {\n  const inputRef = useRef();\n  /* This is the last suggestion the user hovered or highlighted using keys\n    - this is reset when the user presses any key other than enter\n    in the input of if they click on the input  */\n  const [activeSuggestion, setActiveSuggestion] = useState(null);\n  const [searchValue, setSearchValue] = useState(defaultValue || '');\n  const [suggestions, setSuggestions] = useState([]);\n  const [errorState, setErrorState] = useState({ isError: false, errorMessage: '' });\n\n  // Function to focus on input wherever you click\n  const focusOnInput = () => inputRef.current.input.focus();\n  // ...and the function that does the opposite\n  const unfocusOnInput = () => inputRef.current.input.blur();\n\n  const selectedValueComponent = customSelectedValueComponent || SelectedValue;\n\n  // Update suggestions based on search value\n  const onSuggestionsFetchRequested = ({ value }) => {\n    setSuggestions(getSuggestions(value, searchList));\n  };\n\n  // Clear suggestions\n  const onSuggestionsClearRequested = () => {\n    setSuggestions([]);\n  };\n\n  // Run callback when suggestion selected from dropdown\n  const onSuggestionSelected = (event, { suggestionValue, suggestion }) => {\n    if (onSelectCallback) {\n      const callbackReturn = onSelectCallback(suggestion);\n      if (callbackReturn) setErrorState(callbackReturn);\n    }\n    // If using selected values tokens, reset the search value each time\n    setSearchValue(usingSelectedValues ? '' : suggestionValue);\n  };\n\n  // Run callback on submit (ENTER)\n  const onSubmit = event => {\n    event.preventDefault();\n    // Don't run this if the submit event is triggered from the dropdown\n    if (!activeSuggestion) {\n      const validateInputResult = validateInput(searchValue);\n      if (validateInput && validateInputResult.isError) setErrorState(validateInputResult);\n      if (onSubmitCallback && !validateInputResult.isError) {\n        const callbackReturn = onSubmitCallback(searchValue);\n        if (callbackReturn) setErrorState(callbackReturn);\n        // If using selected values tokens, reset the search value\n        if (usingSelectedValues) setSearchValue('');\n      }\n      if (blurInputOnSuggestionSubmit) unfocusOnInput();\n    }\n  };\n\n  // Update search value state on input change\n  const onChange = event => {\n    const {\n      target: { value },\n    } = event;\n    setSearchValue(value);\n    setErrorState({ isError: false, errorMessage: '' });\n  };\n\n  // Handle key down event on input\n  const onKeyDownHandler = event => {\n    const { key } = event;\n    if (searchValue === '' && key === 'Backspace') {\n      onEmptyInputBackspace();\n    }\n    // If the user presses any key other than enter, reset the active suggestion\n    if (key !== 'Enter') {\n      setActiveSuggestion(null);\n    }\n  };\n\n  const onClickHandler = e => {\n    // Don't run the callback if the user has clicked on the selected token remove/cross button\n    if (e.target.className !== 'remove-from-selection g-icon') {\n      focusOnInput();\n      const callbackReturn = onClickCallback();\n      if (callbackReturn) setErrorState(callbackReturn);\n    }\n    // Reset the active suggestion\n    setActiveSuggestion(null);\n  };\n\n  // Clear search value on button click\n  const clearSearch = () => {\n    setSearchValue('');\n    setErrorState({ isError: false, errorMessage: '' });\n    focusOnInput();\n    onClearFunction();\n  };\n\n  // Wraps function so that error can be set\n  const onSelectedValueRemoveWrapper = value => {\n    const error = onSelectedValueRemove(value);\n    if (error) setErrorState(error);\n  };\n\n  const { isError: isErrorState, errorMessage: errorMessageState } = errorState;\n  const isError = errorMessageOverride || isErrorState;\n  const errorMessage = errorMessageOverride || errorMessageState;\n\n  // Generate form classes\n  const classes = classNames(\n    className,\n    isError && `${className}--error`,\n    showSearchIcon && searchIconPosition === 'right' && `${className}--with-search-icon-right`,\n  );\n\n  return (\n    <form onSubmit={onSubmit} style={{ width }} onClick={onClickHandler}>\n      <div className={classes}>\n        {showSearchIcon && searchIconPosition === 'left' && (\n          <div className={`${className}__search-icon`}>\n            <Icon iconName=\"search\" iconColor=\"#66605C\" width={30} height={30} />\n          </div>\n        )}\n        <div className={`${className}__selected-values`}>\n          {selectedValues.length > 0 &&\n            selectedValues.map(({ display, value }) =>\n              selectedValueComponent({\n                className,\n                display,\n                value,\n                onSelectedValueRemove: onSelectedValueRemoveWrapper,\n              }),\n            )}\n        </div>\n        <Autosuggest\n          ref={inputRef}\n          suggestions={suggestions}\n          onSuggestionsFetchRequested={onSuggestionsFetchRequested}\n          onSuggestionsClearRequested={onSuggestionsClearRequested}\n          getSuggestionValue={getSuggestionValue}\n          renderSuggestion={renderSuggestion}\n          onSuggestionSelected={onSuggestionSelected}\n          onSuggestionHighlighted={({ suggestion }) => {\n            /* When the dropdown is open, update the active suggestion to the suggestion\n              the user is currently hovering over or has highlighted with arrow keys */\n            if (suggestion && suggestion.display) {\n              setActiveSuggestion(suggestion.display);\n            }\n          }}\n          focusInputOnSuggestionClick={usingSelectedValues}\n          inputProps={{\n            'aria-label': placeholder,\n            placeholder,\n            value: searchValue,\n            onChange,\n            onKeyDown: onKeyDownHandler,\n            disabled,\n          }}\n        />\n        {showClearButton && searchValue !== '' && (\n          <button className={`${className}__clear-button`} type=\"button\" onClick={clearSearch}>\n            <Icon iconName=\"cross\" iconColor=\"#33302e\" width={20} height={20} />\n          </button>\n        )}\n        {showSearchIcon &&\n          searchIconPosition === 'right' &&\n          !(showClearButton && searchValue !== '') && (\n            <div className={`${className}__search-icon-right`}>\n              <Icon iconName=\"search\" iconColor=\"#66605C\" width={30} height={30} />\n            </div>\n          )}\n      </div>\n      {isError && <div className={`${className}__error-message`}>{errorMessage}</div>}\n    </form>\n  );\n};\n\nAutosuggestSearch.displayName = 'GAutosuggestSearch';\n\nAutosuggestSearch.propTypes = {\n  className: PropTypes.string,\n  width: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n  placeholder: PropTypes.string,\n  defaultValue: PropTypes.string,\n  disabled: PropTypes.bool,\n  showSearchIcon: PropTypes.bool,\n  searchIconPosition: PropTypes.oneOf(['left', 'right']),\n  showClearButton: PropTypes.bool,\n  blurInputOnSuggestionSubmit: PropTypes.bool,\n  searchList: PropTypes.arrayOf(PropTypes.object).isRequired,\n  selectedValues: PropTypes.array,\n  usingSelectedValues: PropTypes.bool,\n  selectedValueComponent: PropTypes.func,\n  getSuggestions: PropTypes.func,\n  getSuggestionValue: PropTypes.func,\n  renderSuggestion: PropTypes.func,\n  onSelectCallback: PropTypes.func,\n  onSubmitCallback: PropTypes.func,\n  onClickCallback: PropTypes.func,\n  onClearFunction: PropTypes.func,\n  onSelectedValueRemove: PropTypes.func,\n  onEmptyInputBackspace: PropTypes.func,\n  validateInput: PropTypes.func,\n  errorMessageOverride: PropTypes.string,\n};\n\nAutosuggestSearch.defaultProps = {\n  className: 'g-autosuggest-search',\n  width: '100%',\n  placeholder: '',\n  disabled: false,\n  showSearchIcon: true,\n  searchIconPosition: 'left',\n  showClearButton: true,\n  blurInputOnSuggestionSubmit: true,\n  selectedValues: [],\n  usingSelectedValues: false,\n  getSuggestions: defaultGetSuggestions,\n  getSuggestionValue: defaultGetSuggestionValue,\n  renderSuggestion: RenderSuggestion,\n  onSelectCallback: () => {},\n  onSubmitCallback: () => {},\n  onClickCallback: () => {},\n  onClearCallback: () => {},\n  onSelectedValueRemove: () => {},\n  onEmptyInputBackspace: () => {},\n  validateInput: () => {},\n};\n\nexport default AutosuggestSearch;\n","const getAlternativeAreaNames = area => {\n  switch (area) {\n    case 'UK':\n      return ['United Kingdom'];\n    case 'US':\n      return ['United States'];\n    case 'UAE':\n      return ['United Arab Emirates'];\n    default:\n      return [];\n  }\n};\n\nexport default getAlternativeAreaNames;\n","import React, { useState } from 'react';\nimport Button from '@financial-times/g-components/button';\nimport { Context } from '@financial-times/g-components/article-layout';\nimport PropTypes from 'prop-types';\nimport OptionsOverlay from '../options-overlay';\nimport './styles.scss';\n\nconst OptionsPanel = ({\n  id,\n  mainOptions: MainOptions,\n  additionalOptions: AdditionalOptions,\n  showAdditionalOptionsByDefault,\n  hideOptionsToggle,\n}) => {\n  const [showAdditionalOptions, setShowAdditionalOptions] = useState(\n    showAdditionalOptionsByDefault\n  );\n  const toggleAdditionalOptions = () => setShowAdditionalOptions(!showAdditionalOptions);\n\n  return (\n    <Context.Consumer>\n      {({ breakpoint: b }) => {\n        const breakpoint = ((b && b.breakpoint) || 'default').toLowerCase();\n        // Check breakpoint has initialised (after it's initialised the type changes to an object)\n        const breakpointInitialised = b !== 'default';\n        const isSmall = ['default', 's'].includes(breakpoint);\n        const buttonIcon = isSmall ? '' : `arrow-${showAdditionalOptions ? 'up' : 'down'}`;\n        const optionsButtonText = isSmall\n          ? 'Options'\n          : showAdditionalOptions\n          ? 'Close options'\n          : 'More options';\n\n        // If function, then pass breakpoint, otherwise render normally\n        const mainOptions =\n          typeof MainOptions === 'function' ? (\n            <MainOptions breakpoint={breakpoint} breakpointInitialised={breakpointInitialised} />\n          ) : (\n            MainOptions\n          );\n\n        const additionalOptions =\n          typeof AdditionalOptions === 'function' ? (\n            <AdditionalOptions\n              breakpoint={breakpoint}\n              breakpointInitialised={breakpointInitialised}\n              closeOptionsOverlay={isSmall ? () => setShowAdditionalOptions(false) : () => {}}\n            />\n          ) : (\n            AdditionalOptions\n          );\n\n        return (\n          <div className=\"options-panel\">\n            <div className=\"options-panel__main-options\">\n              {mainOptions}\n\n              {(!hideOptionsToggle || isSmall) && (\n                <Button\n                  id={`more-options-${showAdditionalOptions ? 'up' : 'down'}`}\n                  className=\"options-panel__more-button\"\n                  big\n                  icon={buttonIcon}\n                  onClick={() => toggleAdditionalOptions()}\n                >\n                  {optionsButtonText}\n                </Button>\n              )}\n            </div>\n\n            {/* If screen is not small, open the additional options below the main options */}\n            {showAdditionalOptions && !isSmall && (\n              <div className=\"options-panel__additional-options\">{additionalOptions}</div>\n            )}\n\n            {/* If screen is small, open the additional options in an overlay */}\n            <OptionsOverlay\n              id={`options__${id}`}\n              headerText=\"Chart options\"\n              isShowing={showAdditionalOptions && isSmall}\n              closeOptionsOverlay={() => setShowAdditionalOptions(false)}\n            >\n              {additionalOptions}\n            </OptionsOverlay>\n          </div>\n        );\n      }}\n    </Context.Consumer>\n  );\n};\n\nOptionsPanel.propTypes = {\n  mainOptions: PropTypes.oneOfType([PropTypes.node, PropTypes.func]).isRequired,\n  additionalOptions: PropTypes.oneOfType([PropTypes.node, PropTypes.func]).isRequired,\n  showAdditionalOptionsByDefault: PropTypes.bool,\n  hideDesktopOptionsToggle: PropTypes.bool,\n};\n\nOptionsPanel.defaultProps = {\n  showAdditionalOptionsByDefault: false,\n  hideDesktopOptionsToggle: false,\n};\n\nexport default OptionsPanel;\n","import React from 'react';\nimport Button from '@financial-times/g-components/button';\nimport Overlay from '@financial-times/g-components/overlay';\nimport PropTypes from 'prop-types';\nimport './styles.scss';\n\nconst OptionsOverlay = ({ id, children, closeOptionsOverlay, isShowing, headerText }) => (\n  <Overlay id={id} className=\"options-overlay\" isShowing={isShowing}>\n    <div className=\"options-overlay__header\">\n      <div className=\"options-overlay__header-row\">\n        <div className=\"options-overlay__header-text\">{headerText}</div>\n        <Button\n          id=\"mobile-cross\"\n          icon=\"cross\"\n          inverse\n          big\n          type=\"primary\"\n          label=\"Close\"\n          onClick={closeOptionsOverlay}\n        />\n      </div>\n    </div>\n    <div className=\"options-overlay__body\">{children}</div>\n  </Overlay>\n);\n\nOptionsOverlay.propTypes = {\n  id: PropTypes.string.isRequired,\n  headerText: PropTypes.string,\n  closeOptionsOverlay: PropTypes.func.isRequired,\n  isShowing: PropTypes.bool,\n};\n\nOptionsOverlay.defaultProps = {\n  headerText: 'Options',\n  isShowing: false,\n};\n\nexport default OptionsOverlay;\n","// Ported from https://github.com/Financial-Times/spark-lists/tree/master/src/client/components/Origami\n\nimport React, { useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport Button from '../button';\nimport OverlayContents from './overlayContents';\nimport { useOverlay } from './useOverlay';\nimport './styles.scss';\n\nconst Overlay = ({ children, isShowing, id, className }) => {\n  // Initialise overlay\n  const overlayState = useOverlay({\n    id,\n    visuallyHideTitle: true,\n    oOverlayOptions: {\n      modal: true,\n      customclose: true,\n      preventclosing: true,\n      class: className,\n    },\n  });\n\n  const { showOverlay, hideOverlay } = overlayState;\n\n  useEffect(() => {\n    if (isShowing) {\n      showOverlay();\n    } else if (isShowing === false) {\n      hideOverlay();\n    }\n    // WARNING: Do *not* add showOverlay, hideOverlay to dependencies as this will cause multiple overlays to be mounted\n  }, [isShowing]); // eslint-disable-line react-hooks/exhaustive-deps\n\n  return <OverlayContents overlayState={overlayState}>{children}</OverlayContents>;\n};\n\nOverlay.propTypes = {\n  isShowing: PropTypes.bool,\n  id: PropTypes.string,\n  className: PropTypes.string,\n};\n\nOverlay.defaultProps = {\n  isShowing: false,\n  id: 'overlay',\n  className: 'overlay',\n};\n\nexport default Overlay;\n","import ReactDOM from 'react-dom';\nimport PropTypes from 'prop-types';\n\n/**\n * A wrapper for oOverlay contents\n *\n * Based on whether the overlay is shown or not (from `useOverlay`\n * state), create a [React portal](https://reactjs.org/docs/portals.html)\n * to insert the children of this component into oOverlay contents DOM\n * element.\n *\n * @param {Object} props\n * @param {*} props.children - The contents of the overlay\n * @param {Object} props.overlayState - The overlay state (result of `useOverlay`)\n * @param {Object} props.overlayState.isShowing - Whether to create the content or not\n * @param {Object} props.overlayState.oOverlayContentsSelector - A selector to get the DOM element to insert overlay contents into\n */\nconst OverlayContents = ({ children, overlayState }) => {\n  const { isShowing, oOverlayContentsSelector } = overlayState;\n\n  // Find where the overlay contents is, to create the portal\n  const portalContainer = document.querySelector(oOverlayContentsSelector);\n\n  // Only create a portal if the overlay is showing\n  return isShowing ? ReactDOM.createPortal(children, portalContainer) : null;\n};\n\nOverlayContents.propTypes = {\n  overlayState: PropTypes.shape({\n    isShowing: PropTypes.bool,\n    oOverlayContentsSelector: PropTypes.string,\n  }).isRequired,\n};\n\nexport default OverlayContents;\n","import { useState, useEffect } from 'react';\nimport Overlay from '@financial-times/o-overlay/main';\n\n/**\n * Overlay hook to wrap oOverlay methods and state\n *\n * Wraps oOverlay functionality and exposes its API and internal state\n * eg, open/close methods and whether the overlay is shown or not.\n *\n * Use in conjunction with `<OverlayContents>` to specify the contents of\n * the overlay.\n *\n * See https://registry.origami.ft.com/components/o-overlay/readme\n *\n * @param {OverlayOptions} options\n * @param {string} options.id - The id for the overlay\n * @param {string} options.title - The title of the overlay\n * @param {boolean} [options.headingShaded=false] - Whether the heading is shaded or not\n * @param {boolean} [options.oLayerContext=document.body] - Where overlay event listeners are added\n * @param {Object} [options.oOverlayOptions] - Extra oOverlay options. See https://registry.origami.ft.com/components/o-overlay/readme#option-reference\n */\nexport const useOverlay = ({\n  id,\n  title,\n  headingShaded = false,\n  visuallyHideTitle = false,\n  oLayerContext = document.body,\n  oOverlayOptions,\n} = {}) => {\n  const [isShowing, setIsShowing] = useState(false);\n  const [overlay, setOverlay] = useState(null);\n\n  useEffect(() => {\n    // Only create the overlay once, otherwise oOverlay errors\n    if (!overlay) {\n      const oOverlay = new Overlay(id, {\n        // Nothing in html, but will be replaced by a React portal to\n        // replace the contents\n        html: ' ', // Requires a non-empty value\n        heading: {\n          title: (visuallyHideTitle && !title && 'Overlay') || title,\n          visuallyhidetitle: visuallyHideTitle,\n          shaded: headingShaded,\n        },\n        ...oOverlayOptions,\n      });\n\n      // NOTE: In conjunction with setting `isShowing` in the hide\n      // overlay method below, this event listener catches any race\n      // conditions where React does not set `isShowing` in time when\n      // oOverlay is closed\n      oLayerContext.addEventListener('oOverlay.layerClose', () => {\n        setIsShowing(false);\n      });\n\n      setOverlay(oOverlay);\n    }\n  }, [headingShaded, id, oLayerContext, oOverlayOptions, overlay, title, visuallyHideTitle]);\n\n  const showOverlay = () => {\n    if (!overlay) {\n      return;\n    }\n    overlay.open();\n    setIsShowing(true);\n  };\n\n  const hideOverlay = () => {\n    // NOTE: `isShowing` needs to be set here in case oOverlay events\n    // don't trigger the React lifecycle in time\n    setIsShowing(false);\n\n    if (!overlay) {\n      return;\n    }\n    if (overlay.visible) overlay.close();\n  };\n\n  const oOverlayContentsSelector = `.o-overlay--${id} .o-overlay__content`;\n\n  return {\n    isShowing,\n    showOverlay,\n    hideOverlay,\n    overlay,\n    oOverlayContentsSelector,\n  };\n};\n","import React, { useMemo, useContext } from 'react';\nimport PropTypes from 'prop-types';\nimport { Context } from '@financial-times/g-components/article-layout';\nimport moment from 'moment-timezone';\nimport LineChart from '../line-chart-template';\nimport { formatDataForChart } from './helpers/formatDataForChart';\nimport {\n  generateHeaderText,\n  generateSubheadText,\n  generateSourceText,\n} from './helpers/generateChartText';\nimport {\n  generateXTickDateValues,\n  filterXTickDateValues,\n  generateXTickFormatFunction,\n} from './helpers/generateXTickValues';\nimport getNumberOfDecimalPlacesForTicks from './helpers/getNumberOfDecimalPlacesForTicks';\nimport generateTooltip from './tooltip';\nimport './styles.scss';\n\nconst splitTextIntoLines = text => text.split('|').map(line => <div key={line}>{line}</div>);\n\nconst TrajectoryChart = ({\n  id,\n  data: rawData,\n  lastUpdated,\n  options,\n  attributeToVisualise,\n  areaList,\n  areasToHighlightInChart,\n  hideUnselectedAreas,\n  overlay,\n}) => {\n  const { breakpoint: b } = useContext(Context);\n  const breakpoint = ((b && b.breakpoint) || 'default').toLowerCase();\n  const isSmall = ['default', 's'].includes(breakpoint);\n\n  const { populationAdjusted, cumulative, rollingAverage, startDate, doses } = options;\n\n  const divisor = populationAdjusted && !cumulative ? 10000 : 1;\n\n  const displayNamesOfAreasToHighlightInChart = areasToHighlightInChart.map(\n    ({ display }) => display\n  );\n\n  const { data, minDate, maxDate, maxValue } = useMemo(\n    () =>\n      formatDataForChart(rawData, {\n        areasToHighlightInChart: areasToHighlightInChart.map(({ value }) => value),\n        dateFormat: '%Y-%m-%d',\n        hideUnselectedAreas: hideUnselectedAreas && areasToHighlightInChart.length > 0,\n        attributeToVisualise,\n        startDate,\n        divisor,\n      }),\n    [rawData, areasToHighlightInChart, attributeToVisualise, startDate, hideUnselectedAreas]\n  );\n\n  const { uniqueTicks: xTickValues, tickIncrement: xTickIncrement } = generateXTickDateValues(\n    startDate, // xMin\n    maxDate // xMax\n  );\n  const xTickLabelsToHide = filterXTickDateValues(\n    xTickValues,\n    startDate, // xMin\n    maxDate, // xMax\n    // Minimum spacing between ticks (%)\n    { default: 0.2, s: 0.1, m: 0.07, l: 0.05, xl: 0.05 }[breakpoint],\n    // Max number of ticks before Nth tick is filtered out\n    { default: 3, s: 9, m: 12, l: 12, xl: 12 }[breakpoint]\n  );\n  // Generate tick format function\n  const xTickFormat = generateXTickFormatFunction(\n    xTickValues,\n    breakpoint,\n    xTickIncrement,\n    xTickLabelsToHide\n  );\n\n  // Below this value, vx/d3 generated ticks are not integers\n  const integerTickCutoffPoint = 7;\n  const decimalPlaces = getNumberOfDecimalPlacesForTicks(maxValue, integerTickCutoffPoint);\n  /* The number of decimal places in the tooltip should always be more than the ticks\n   unless all numbers are integers */\n  const tooltipDecimalPlaces = populationAdjusted ? Math.max(0, decimalPlaces) + 1 : 0;\n  // Generate tooltip component\n  const Tooltip = generateTooltip(tooltipDecimalPlaces, {\n    populationAdjusted,\n    cumulative,\n    rollingAverage,\n  });\n\n  const yTickFormat =\n    populationAdjusted && maxValue < integerTickCutoffPoint\n      ? /* If the the max value is below the value at which all ticks are integers,\n         set a fixed number of decimal places */\n        tickValue => (tickValue === 0 ? 0 : tickValue.toFixed(decimalPlaces))\n      : null;\n\n  const yVariable =\n    areasToHighlightInChart.length === 0\n      ? /* If areas to display (highlight) is empty, show all lines for all areas in\n        the data on the chart */\n        areaList.map(({ display }) => display)\n      : /* If not empty, show only highlighted areas if\n        hideUnselected option is set to true */\n      hideUnselectedAreas\n      ? areasToHighlightInChart.map(({ display }) => display)\n      : [];\n\n  const timestamp = moment(lastUpdated)\n    .tz('Europe/London')\n    .format('MMMM D Y h.mma z');\n\n  const headerText = generateHeaderText({\n    areasToHighlightInChart: displayNamesOfAreasToHighlightInChart,\n  });\n  const subheadText = generateSubheadText(options);\n  const sourceText = generateSourceText({\n    source:\n      'Some daily figures are estimates based on incomplete cumulative data. | Source: Our World in Data, World Health Organization, national sources, FT research',\n    timestamp,\n  });\n\n  return (\n    <section className=\"chart-holder\" id={id}>\n      <header className=\"chart-topper\">\n        <div className=\"chart-topper__header\">{splitTextIntoLines(headerText)}</div>\n        <div className=\"chart-topper__subhead\">{splitTextIntoLines(subheadText)}</div>\n      </header>\n      <div className=\"chart-container\">\n        <LineChart\n          margin={{\n            top: 10,\n            left: 0,\n            right: isSmall ? 40 : 60,\n            bottom: 30,\n          }}\n          height={['m', 'l', 'xl'].includes(breakpoint) ? 600 : 300}\n          description={`Line chart showing ${headerText}`}\n          id={id}\n          data={data}\n          seriesToHighlight={displayNamesOfAreasToHighlightInChart}\n          xVariable=\"date\"\n          yVariable={yVariable}\n          xMin={startDate}\n          xMax={maxDate}\n          yMin={0}\n          yMax={maxValue}\n          xTickFormat={xTickFormat}\n          xTickValues={xTickValues}\n          yTickFormat={yTickFormat}\n          xFullLengthTicks\n          yFullLengthTicks\n          hideEndTicks\n          lineColorPalette={[\n            '#0F5499',\n            '#EB5E8D',\n            '#9DBF57',\n            '#208FCE',\n            '#7f062E',\n            '#CE3140',\n            '#009AA8',\n          ]}\n          tooltipStyle={{\n            backgroundColor: '#ffffff',\n            padding: '0.3rem 0.5rem',\n            borderRadius: 0,\n            boxShadow: `0 1px 1px 0 rgba(0, 0, 0, 0.14)`,\n          }}\n          tooltipComponent={Tooltip}\n          allLinesHoverable={!hideUnselectedAreas || areasToHighlightInChart.length === 0}\n          labelFontSize={isSmall ? 16 : 18}\n        />\n        {!isSmall ? overlay : null}\n      </div>\n      <footer className=\"chart-footer\">\n        <div className=\"chart-footer__source\">{splitTextIntoLines(sourceText)}</div>\n      </footer>\n    </section>\n  );\n};\n\nTrajectoryChart.propTypes = {\n  id: PropTypes.string.isRequired,\n  data: PropTypes.array.isRequired,\n  lastUpdated: PropTypes.string.isRequired,\n  options: PropTypes.shape({\n    populationAdjusted: PropTypes.bool,\n    cumulative: PropTypes.bool,\n    rollingAverage: PropTypes.bool,\n    startDate: PropTypes.instanceOf(Date),\n    doses: PropTypes.string,\n  }).isRequired,\n  attributeToVisualise: PropTypes.string,\n  areaList: PropTypes.arrayOf(\n    PropTypes.shape({\n      display: PropTypes.string.isRequired,\n      value: PropTypes.string.isRequired,\n      alternatives: PropTypes.arrayOf(PropTypes.string),\n    })\n  ).isRequired,\n  areasToHighlightInChart: PropTypes.arrayOf(\n    PropTypes.shape({\n      display: PropTypes.string.isRequired,\n      value: PropTypes.string.isRequired,\n    })\n  ),\n  hideUnselectedAreas: PropTypes.bool,\n  overlay: PropTypes.node,\n  divisor: PropTypes.number,\n};\n\nTrajectoryChart.defaultProps = {\n  areas: [],\n  areasToHighlightInChart: [],\n};\n\nexport default TrajectoryChart;\n","var moment = module.exports = require(\"./moment-timezone\");\nmoment.tz.load(require('./data/packed/latest.json'));\n","import React from 'react';\nimport { scaleLinear, scaleTime, scaleOrdinal } from '@visx/scale';\nimport { extent } from 'd3-array';\nimport { Chartframe as ChartFrame, Axis, Delaunay } from '@financial-times/vvc/components';\nimport { Lines } from '@financial-times/vvc/components/lines';\nimport { getSeriesNames, extentMulti } from '@financial-times/vvc/util/parseData';\nimport { isZeroOrDefined } from '@financial-times/vvc/util';\nimport { Group } from '@visx/group';\nimport { getLineEndPositions } from './helpers';\nimport { lineChartPropTypes, lineChartDefaultProps } from './props';\nimport Labels from './labels';\nimport Dots from './dots';\nimport MultipleLineTickLabel from './multiple-line-tick-label';\nimport AxisFade from './axis-fade';\n\nconst LineChart = props => {\n  const {\n    id,\n    // Chart frame\n    margin,\n    height,\n    description,\n    // Data\n    data,\n    // Variables and series\n    yVariable,\n    xVariable,\n    seriesToHighlight,\n    // Scales\n    xMin: xMinOverride,\n    xMax: xMaxOverride,\n    yMin: yMinOverride,\n    yMax: yMaxOverride,\n    xScaleType,\n    // Axes\n    xTickFormat,\n    xTickValues,\n    xAxisOrientation,\n    xFullLengthTicks,\n    yTickFormat,\n    yAxisOrientation,\n    yFullLengthTicks,\n    hideEndTicks,\n    // Line end dots and labels\n    showLineEndDots,\n    labelStrokeColor,\n    labelStrokeWidth,\n    dotStrokeColor,\n    dotStrokeWidth,\n    labelFontSize,\n    // Colors\n    lineColorPalette,\n    tooltipLineColor,\n    ghostLineColor,\n    ghostLineHoverColorScale,\n    ghostLineHoverLabelColorScale,\n    // Lines\n    highlightedLineOutlineWidth,\n    // Tooltips and hover lines\n    showTooltips,\n    allLinesHoverable,\n    showTooltipLine,\n    tooltipStyle,\n    tooltipComponent,\n    // Y axis fade\n    showYAxisFade,\n  } = props;\n\n  const seriesNames = Array.isArray(data) && data.length ? getSeriesNames(data) : [];\n  const nonEmptyYVariable = Array.isArray(yVariable) && yVariable.length;\n  const seriesToShow = nonEmptyYVariable ? yVariable : seriesNames;\n  // Filter out highlights from main array so we don't draw them twice\n  const nonEmptySeriesToHighlight = Array.isArray(seriesToHighlight) && seriesToHighlight.length;\n  const seriesToShowFiltered = nonEmptySeriesToHighlight\n    ? seriesToShow.filter(s => !seriesToHighlight.includes(s))\n    : seriesToShow;\n  const showAllSeriesAsGhostLines = nonEmptyYVariable && nonEmptySeriesToHighlight === 0;\n\n  const colorScaleDomain = nonEmptyYVariable\n    ? yVariable\n    : nonEmptySeriesToHighlight\n    ? seriesToHighlight\n    : seriesNames;\n\n  const yValueExtent = extentMulti(data, seriesNames);\n  const yMin = isZeroOrDefined(yMinOverride) ? yMinOverride : yValueExtent[0];\n  const yMax = isZeroOrDefined(yMaxOverride) ? yMaxOverride : yValueExtent[1];\n  const yScale = scaleLinear({\n    domain: [yMin, yMax],\n  });\n\n  const xValueExtent = extent(data, d => d[xVariable]);\n  const xMin = xMinOverride || xValueExtent[0];\n  const xMax = xMaxOverride || xValueExtent[1];\n  const xScale =\n    xScaleType === 'time'\n      ? scaleTime({\n          domain: [xMin, xMax],\n        })\n      : scaleLinear({ domain: [xMin, xMax] });\n\n  if (hideEndTicks) {\n    // Before we hide the last tick, make sure the scale is rounded out\n    xScale.nice();\n  }\n\n  // Get line end position for each series\n  const lineEndPositions = getLineEndPositions(data, seriesNames, xVariable, yVariable, yMax);\n\n  const lineColorScale = scaleOrdinal({\n    domain: colorScaleDomain,\n    range: lineColorPalette,\n  });\n\n  // Radius of line end dot\n  const dotSizeScale = () => 5;\n\n  // Format data for delaunay\n  // @TODO move to helper\n  const delaunayData = allLinesHoverable\n    ? data.flatMap(d =>\n        seriesNames.map(e => ({\n          [xVariable]: d[xVariable],\n          y: d[e],\n          seriesName: e,\n          labelData: { seriesName: e, yValue: d[e], xValue: d[xVariable] },\n          isHighlighted: seriesToHighlight.includes(e),\n        }))\n      )\n    : nonEmptySeriesToHighlight\n    ? data\n        .filter(d => seriesToHighlight.some(seriesName => isZeroOrDefined(d[seriesName]))) // Or empty string\n        .flatMap(d =>\n          seriesToHighlight.map(e => ({\n            [xVariable]: d[xVariable],\n            y: d[e],\n            seriesName: e,\n            labelData: { seriesName: e, yValue: d[e], xValue: d[xVariable] },\n            isHighlighted: seriesToHighlight.includes(e),\n          }))\n        )\n    : [];\n\n  return (\n    <ChartFrame\n      stabRule={false}\n      hideTopper\n      hideFooter\n      hideTitleTooltip\n      tooltipStyle={tooltipStyle}\n      tooltipComponent={tooltipComponent}\n      margin={margin}\n      height={height}\n      description={description}\n    >\n      {/* X-axis */}\n      <Axis\n        orientation={xAxisOrientation}\n        scale={xScale}\n        fullLengthTicks={xFullLengthTicks}\n        hideEndTicks={hideEndTicks}\n        tickValues={xTickValues}\n        tickFormat={xTickFormat}\n        tickLabelProps={() => ({\n          dy: '0.75em',\n        })}\n        tickComponent={MultipleLineTickLabel}\n      />\n\n      {/* Y-axis */}\n      <Axis\n        orientation={yAxisOrientation}\n        scale={yScale}\n        fullLengthTicks={yFullLengthTicks}\n        tickFormat={yTickFormat}\n      />\n\n      {showYAxisFade && (\n        <AxisFade\n          orientations={['top', 'left', 'right']}\n          id={`gradientMask_${id}`}\n          offsetStartingPercentage={{ top: 50, left: 100 }}\n          offsetType={{ left: 'solid', right: 'solid' }}\n        />\n      )}\n\n      <Group id=\"lines\">\n        <Group id=\"background-lines\" mask={showYAxisFade && `url(#gradientMask_${id})`}>\n          <Lines\n            seriesNames={seriesToShowFiltered}\n            data={data}\n            xScale={xScale}\n            xVariable={xVariable}\n            yScale={yScale}\n            colorScale={\n              nonEmptySeriesToHighlight || showAllSeriesAsGhostLines\n                ? () => ghostLineColor\n                : lineColorScale\n            }\n            strokeWidth={nonEmptySeriesToHighlight || showAllSeriesAsGhostLines ? 1 : 3}\n            highlightLinesOnHover={allLinesHoverable}\n            hoveredLinesColorScale={ghostLineHoverColorScale}\n            highlightedLineOutlineWidth={highlightedLineOutlineWidth}\n          />\n        </Group>\n        <Group id=\"highlighted-lines\">\n          {nonEmptySeriesToHighlight && (\n            <Lines\n              seriesNames={seriesToHighlight}\n              data={data}\n              xScale={xScale}\n              xVariable={xVariable}\n              yScale={yScale}\n              colorScale={lineColorScale}\n              highlightedLineOutlineWidth={highlightedLineOutlineWidth}\n            />\n          )}\n        </Group>\n      </Group>\n\n      {showLineEndDots && (\n        <Dots\n          seriesNames={seriesToHighlight}\n          data={lineEndPositions}\n          xScale={xScale}\n          xVariable=\"x\"\n          yScale={yScale}\n          yVariable=\"y\"\n          colorScale={lineColorScale}\n          sizeScale={dotSizeScale}\n          strokeColor={dotStrokeColor}\n          strokeWidth={dotStrokeWidth}\n          hoveredDotsColorScale={ghostLineHoverColorScale}\n        />\n      )}\n\n      {showLineEndDots && (\n        <Labels\n          seriesNames={seriesToHighlight}\n          data={lineEndPositions}\n          xScale={xScale}\n          xVariable=\"x\"\n          yScale={yScale}\n          yVariable=\"y\"\n          colorScale={lineColorScale}\n          hoveredLabelsColorScale={ghostLineHoverLabelColorScale}\n          additionalProps={{\n            dx: 10,\n            dy: 5,\n            fontSize: labelFontSize,\n          }}\n          automaticallyRepositionLabels\n        />\n      )}\n\n      {showTooltips &&\n        ((showAllSeriesAsGhostLines && allLinesHoverable) || nonEmptySeriesToHighlight) && (\n          <Delaunay\n            xScale={xScale}\n            yScale={yScale}\n            colorScale={lineColorScale}\n            xVariable={xVariable}\n            yVariable=\"y\"\n            data={delaunayData}\n            tooltipPositionOverride={({ data, xScale, yScale }) => ({\n              x: xScale(data.date),\n              y: yScale(yMax),\n            })}\n            showLine={showTooltipLine}\n            showCircle={showTooltipLine}\n            lineConfig={{\n              stroke: tooltipLineColor,\n              strokeDasharray: '3, 1',\n            }}\n            circleConfig={{\n              r: dotSizeScale(),\n              stroke: dotStrokeColor,\n              strokeWidth: dotStrokeWidth,\n            }}\n            // debug\n          />\n        )}\n    </ChartFrame>\n  );\n};\n\nLineChart.propTypes = lineChartPropTypes;\nLineChart.defaultProps = lineChartDefaultProps;\n\nexport default LineChart;\n","import React, { useContext } from 'react';\nimport { Group } from '@visx/group';\nimport { LinePathAnnotation } from '@visx/annotation';\nimport { inferScaleType } from '@visx/scale';\nimport { PlotContext } from '@financial-times/vvc/components';\nimport { repositionLabels } from '../helpers';\nimport { labelComponentDefaultProps } from '../props';\n\nconst LabelArrow = ({ x, y, width, fill, stroke, strokeWidth }) => {\n  const halfWidth = (width + strokeWidth) / 2;\n  return (\n    <path\n      d={`M${x - halfWidth},${y + halfWidth} L${x + halfWidth},${y + halfWidth} L${x},${y -\n        halfWidth} Z`}\n      fill={fill}\n      stroke={stroke}\n      strokeWidth={strokeWidth / 2}\n      strokeLinecap=\"round\"\n    />\n  );\n};\n\nconst Label = ({\n  label, // Label text\n  fill,\n  anchor,\n  fontSize,\n  strokeColor,\n  strokeWidth,\n  x,\n  y,\n  dx,\n  dy,\n  lineStroke,\n  lineStrokeWidth,\n  showArrow,\n  arrowWidth,\n  ...props\n}) => {\n  return (\n    <Group>\n      {strokeColor && (\n        <LinePathAnnotation\n          label={label}\n          labelAnchor={anchor}\n          labelFontSize={fontSize}\n          labelFill={strokeColor}\n          labelStroke={strokeColor}\n          labelStrokeWidth={strokeWidth}\n          points={[{ x, y }]}\n          labelDx={dx}\n          labelDy={dy}\n          stroke=\"transparent\"\n          {...props}\n        />\n      )}\n      <LinePathAnnotation\n        label={label}\n        labelAnchor={anchor}\n        labelFontSize={fontSize}\n        labelFill={fill}\n        labelStroke=\"none\"\n        points={[{ x, y }]}\n        labelDx={dx}\n        labelDy={dy}\n        stroke={lineStroke}\n        strokeWidth={lineStrokeWidth}\n        {...props}\n      />\n      {showArrow && (\n        <LabelArrow\n          x={x}\n          y={y}\n          width={arrowWidth}\n          fill={fill}\n          stroke={strokeColor}\n          strokeWidth={strokeWidth}\n        />\n      )}\n    </Group>\n  );\n};\n\nLabel.defaultProps = labelComponentDefaultProps;\n\nconst Labels = ({\n  width,\n  height,\n  margin,\n  padding,\n  data,\n  seriesNames,\n  automaticallyRepositionLabels,\n  // Scales\n  xVariable,\n  yVariable,\n  colorVariable,\n  xScale,\n  yScale,\n  yTransformFunction,\n  colorScale,\n  strokeColor,\n  additionalProps,\n}) => {\n  xScale.range([0, width]);\n  yScale.range([height, 0]);\n\n  const transformedYScale = value => yScale(yTransformFunction ? yTransformFunction(value) : value);\n\n  const flatData = seriesNames\n    .reduce((acc, seriesName) => [...acc, ...data[seriesName]], [])\n    .map(({ y, ...rest }) => ({ y, yPosition: transformedYScale(y), ...rest }));\n  const positionedLabels = automaticallyRepositionLabels ? repositionLabels(flatData) : flatData;\n\n  return (\n    <Group>\n      {positionedLabels.map(({ x, y, yPosition, color, label, yAxisIntersectionX }) => {\n        const showArrow = transformedYScale(y) < 0;\n        const labelX = showArrow ? xScale(yAxisIntersectionX) : xScale(x);\n        const labelY = showArrow ? 0 : yPosition;\n\n        return (\n          <Label\n            key={label}\n            x={labelX}\n            y={labelY}\n            fill={colorScale(color)}\n            label={label}\n            showArrow={showArrow}\n            {...additionalProps}\n          />\n        );\n      })}\n    </Group>\n  );\n};\n\nconst MemoisedLabels = React.memo(\n  Labels,\n  (prevProps, nextProps) => JSON.stringify(prevProps) === JSON.stringify(nextProps)\n);\n\nconst LabelsWithHighlights = ({ seriesNames, hoveredLabelsColorScale, ...props }) => {\n  const { width, height, margin, padding, hoveredSeries } = useContext(PlotContext);\n\n  const scaleProperties = {\n    yScaleType: inferScaleType(props.yScale),\n    yScaleDomain: props.yScale.domain(),\n    yScaleRange: props.yScale.range(),\n    xScaleType: inferScaleType(props.xScale),\n    xScaleDomain: props.xScale.domain(),\n    xScaleRange: props.xScale.range(),\n  };\n\n  return (\n    <React.Fragment>\n      <MemoisedLabels\n        {...props}\n        width={width}\n        height={height}\n        margin={margin}\n        padding={padding}\n        seriesNames={seriesNames}\n        // This should force the lines to rerender when the scale properties change\n        {...scaleProperties}\n      />\n      {hoveredSeries && (\n        <MemoisedLabels\n          {...props}\n          width={width}\n          height={height}\n          margin={margin}\n          padding={padding}\n          seriesNames={[hoveredSeries]}\n          colorScale={hoveredLabelsColorScale}\n          // This should force the lines to rerender when the scale properties change\n          {...scaleProperties}\n          automaticallyRepositionLabels={false}\n        />\n      )}\n    </React.Fragment>\n  );\n};\n\nexport default LabelsWithHighlights;\n","import React, { useContext } from 'react';\nimport { Group } from '@visx/group';\nimport { Circle } from '@visx/shape';\nimport { inferScaleType } from '@visx/scale';\nimport { PlotContext } from '@financial-times/vvc/components';\n\nconst Dots = ({\n  width,\n  height,\n  margin,\n  padding,\n  data,\n  seriesNames,\n  // Scales\n  xVariable,\n  yVariable,\n  sizeVariable,\n  colorVariable,\n  xScale,\n  yScale,\n  yTransformFunction,\n  sizeScale,\n  colorScale,\n  labelColorScale,\n  // Dot config\n  hollowDots,\n  opacity,\n  strokeWidth,\n  strokeColor,\n}) => {\n  xScale.range([0, width]);\n  yScale.range([height, 0]);\n\n  const transformedYScale = value => yScale(yTransformFunction ? yTransformFunction(value) : value);\n\n  return (\n    <Group>\n      {seriesNames.map(seriesName => (\n        <Group key={`dot-group__${seriesName}`}>\n          {(data[seriesName] || []).map(({ label, x, y, r, color }, i) =>\n            transformedYScale(y) >= 0 ? (\n              <Circle\n                key={`series_${seriesName}_${x}_${y}_${i}`}\n                className=\"dot\"\n                cx={xScale(x)}\n                cy={transformedYScale(y)}\n                r={sizeScale(r)}\n                fill={hollowDots ? 'none' : colorScale(color)}\n                stroke={strokeColor || (hollowDots ? colorScale(color) : 'none')}\n                strokeWidth={strokeWidth || 3}\n                fillOpacity={opacity}\n              />\n            ) : null\n          )}\n        </Group>\n      ))}\n    </Group>\n  );\n};\n\nconst MemoisedDots = React.memo(\n  Dots,\n  (prevProps, nextProps) => JSON.stringify(prevProps) === JSON.stringify(nextProps)\n);\n\nconst DotsWithHighlights = ({ seriesNames, hoveredDotsColorScale, ...props }) => {\n  const { width, height, margin, padding, hoveredSeries } = useContext(PlotContext);\n\n  const scaleProperties = {\n    yScaleType: inferScaleType(props.yScale),\n    yScaleDomain: props.yScale.domain(),\n    yScaleRange: props.yScale.range(),\n    xScaleType: inferScaleType(props.xScale),\n    xScaleDomain: props.xScale.domain(),\n    xScaleRange: props.xScale.range(),\n  };\n\n  return (\n    <React.Fragment>\n      <MemoisedDots\n        {...props}\n        width={width}\n        height={height}\n        margin={margin}\n        padding={padding}\n        seriesNames={seriesNames}\n        // This should force the lines to rerender when the scale properties change\n        {...scaleProperties}\n      />\n      {hoveredSeries && (\n        <MemoisedDots\n          {...props}\n          width={width}\n          height={height}\n          margin={margin}\n          padding={padding}\n          seriesNames={[hoveredSeries]}\n          colorScale={hoveredDotsColorScale}\n          // This should force the lines to rerender when the scale properties change\n          {...scaleProperties}\n        />\n      )}\n    </React.Fragment>\n  );\n};\n\nexport default DotsWithHighlights;\n","import React from 'react';\n\nconst MultipleLineTickLabel = ({ formattedValue, ...tickProps }) => {\n  const labelLines = formattedValue.split('|').map(str => str.trim());\n  const { fontSize } = tickProps.style;\n  const { x, dy } = tickProps;\n\n  return (\n    <text {...tickProps}>\n      {labelLines.map((labelLine, index) => (\n        <tspan x={x} dy={index === 0 ? dy : fontSize}>\n          {labelLine}\n        </tspan>\n      ))}\n    </text>\n  );\n};\n\nexport default MultipleLineTickLabel;\n","import React, { useContext } from 'react';\nimport PropTypes from 'prop-types';\nimport { isZeroOrDefined } from '@financial-times/vvc/util';\nimport { PlotContext } from '@financial-times/vvc/components';\n\nconst AxisFade = ({ orientations, id, offsetStartingPercentage, offsetType }) => {\n  const { margin, padding, width, height } = useContext(PlotContext);\n  const left = margin.left + padding.left;\n  const right = margin.right + padding.right;\n  const top = margin.top + padding.top;\n  const bottom = margin.bottom + padding.bottom;\n  const fullWidth = width + left + right;\n  const fullHeight = height + top + bottom;\n\n  const offsetTypesForOrientations = {\n    top: 'gradient',\n    right: 'gradient',\n    bottom: 'gradient',\n    left: 'gradient',\n    ...offsetType,\n  };\n\n  return (\n    <React.Fragment>\n      <defs>\n        {orientations.includes('top') && offsetTypesForOrientations.top === 'gradient' && (\n          <linearGradient\n            id={`${id}_axisFadeTopGradient`}\n            x1=\"0%\"\n            y1=\"0%\"\n            x2=\"0%\"\n            y2={`${\n              isZeroOrDefined(offsetStartingPercentage.top)\n                ? offsetStartingPercentage.top\n                : offsetStartingPercentage\n            }%`}\n          >\n            <stop offset=\"0%\" stopColor=\"black\" stopOpacity=\"1\" />\n            <stop offset=\"100%\" stopColor=\"black\" stopOpacity=\"0\" />\n          </linearGradient>\n        )}\n\n        {orientations.includes('right') && offsetTypesForOrientations.right === 'gradient' && (\n          <linearGradient\n            id={`${id}_axisFadeRightGradient`}\n            x1=\"0%\"\n            y1=\"0%\"\n            x2={`${\n              isZeroOrDefined(offsetStartingPercentage.right)\n                ? offsetStartingPercentage.right\n                : offsetStartingPercentage\n            }%`}\n            y2=\"0%\"\n          >\n            <stop offset=\"0%\" stopColor=\"black\" stopOpacity=\"0\" />\n            <stop offset=\"100%\" stopColor=\"black\" stopOpacity=\"1\" />\n          </linearGradient>\n        )}\n\n        {orientations.includes('bottom') && offsetTypesForOrientations.bottom === 'gradient' && (\n          <linearGradient\n            id={`${id}_axisFadeBottomGradient`}\n            x1=\"0%\"\n            y1=\"0%\"\n            x2=\"0%\"\n            y2={`${\n              isZeroOrDefined(offsetStartingPercentage.bottom)\n                ? offsetStartingPercentage.bottom\n                : offsetStartingPercentage\n            }%`}\n          >\n            <stop offset=\"0%\" stopColor=\"black\" stopOpacity=\"0\" />\n            <stop offset=\"100%\" stopColor=\"black\" stopOpacity=\"1\" />\n          </linearGradient>\n        )}\n\n        {orientations.includes('left') && offsetTypesForOrientations.left === 'gradient' && (\n          <linearGradient\n            id={`${id}_axisFadeLeftGradient`}\n            x1=\"0%\"\n            y1=\"0%\"\n            x2={`${\n              isZeroOrDefined(offsetStartingPercentage.left)\n                ? offsetStartingPercentage.left\n                : offsetStartingPercentage\n            }%`}\n            y2=\"0%\"\n          >\n            <stop offset=\"0%\" stopColor=\"black\" stopOpacity=\"1\" />\n            <stop offset=\"100%\" stopColor=\"black\" stopOpacity=\"0\" />\n          </linearGradient>\n        )}\n\n        <mask id={id}>\n          <rect x={-left} y={-top} width={fullWidth} height={fullHeight} fill=\"white\" />\n          {orientations.includes('top') && (\n            <rect\n              x={-left}\n              y={-top}\n              width={fullWidth}\n              height={top}\n              fill={\n                offsetTypesForOrientations.top === 'gradient'\n                  ? `url(#${id}_axisFadeTopGradient)`\n                  : 'black'\n              }\n            />\n          )}\n          {orientations.includes('right') && (\n            <rect\n              x={width}\n              y={-top}\n              width={right}\n              height={fullHeight}\n              fill={\n                offsetTypesForOrientations.right === 'gradient'\n                  ? `url(#${id}_axisFadeRightGradient)`\n                  : 'black'\n              }\n            />\n          )}\n          {orientations.includes('bottom') && (\n            <rect\n              x={-left}\n              y={height}\n              width={fullWidth}\n              height={bottom}\n              fill={\n                offsetTypesForOrientations.bottom === 'gradient'\n                  ? `url(#${id}_axisFadeBottomGradient)`\n                  : 'black'\n              }\n            />\n          )}\n          {orientations.includes('left') && (\n            <rect\n              x={-left}\n              y={-top}\n              width={left}\n              height={fullHeight}\n              fill={\n                offsetTypesForOrientations.left === 'gradient'\n                  ? `url(#${id}_axisFadeLeftGradient)`\n                  : 'black'\n              }\n            />\n          )}\n        </mask>\n      </defs>\n    </React.Fragment>\n  );\n};\n\nAxisFade.propTypes = {\n  id: PropTypes.string.isRequired,\n  orientations: PropTypes.arrayOf(PropTypes.string).isRequired,\n  offsetStartingPercentage: PropTypes.oneOfType([PropTypes.number, PropTypes.object]),\n  offsetType: PropTypes.object,\n};\n\nAxisFade.defaultProps = {\n  offsetStartingPercentage: { top: 50, right: 50, bottom: 50, left: 50 },\n};\n\nexport default AxisFade;\n","import * as d3 from 'd3-time-format';\n\nexport const formatDataForChart = (\n  data,\n  {\n    areasToHighlightInChart = [],\n    dateFormat,\n    hideUnselectedAreas,\n    attributeToVisualise,\n    startDate,\n    divisor,\n  }\n) => {\n  const dateParse = d3.timeParse(dateFormat);\n\n  const formattedData = data.map(({ area, code, date, ...rest }) => ({\n    area,\n    code: code.toLowerCase(),\n    date,\n    value:\n      rest[attributeToVisualise] !== undefined ? rest[attributeToVisualise] / divisor : undefined,\n  }));\n\n  const filteredData = (hideUnselectedAreas\n    ? formattedData.filter(({ code }) => areasToHighlightInChart.includes(code))\n    : formattedData\n  ).filter(({ value }) => value !== undefined);\n\n  const dataForMaxValueCalculation =\n    areasToHighlightInChart.length === 0 || hideUnselectedAreas\n      ? filteredData\n      : filteredData.filter(({ code }) => areasToHighlightInChart.includes(code));\n  const maxValue = Math.max(...dataForMaxValueCalculation.map(({ value }) => value));\n\n  const dataGroupedByDate = [\n    ...filteredData.reduce(\n      (dates, { date, area, value }) =>\n        dates.set(date, { ...(dates.get(date) || {}), [area]: value }),\n      new Map()\n    ),\n  ]\n    // Convert to date so it can be sorted\n    .map(([date, areas]) => ({ date: dateParse(date), ...areas }))\n    .sort((a, b) => a.date - b.date)\n    // Filter data out if before start date\n    .filter(({ date }) => date >= startDate);\n\n  const { date: minDate } = dataGroupedByDate[0];\n  const { date: maxDate } = dataGroupedByDate[dataGroupedByDate.length - 1];\n\n  return {\n    data: dataGroupedByDate,\n    minDate,\n    maxDate,\n    maxValue,\n  };\n};\n\nexport default null;\n","const getNumberOfDecimalPlacesForTicks = (maxYValue, integerTickCutoffPoint) => {\n  // Find closest value in 0.1, 0.01, 0.001, etc. sequence below max y value\n  const floorOfLog10 = Math.floor(Math.log10(maxYValue));\n  const closestValueInSequence = Math.pow(10, floorOfLog10);\n\n  let multiplier = closestValueInSequence;\n  while (maxYValue > multiplier * integerTickCutoffPoint) {\n    multiplier *= 10;\n  }\n\n  return Math.floor(Math.log10(1 / multiplier)) + 1;\n};\n\nexport default getNumberOfDecimalPlacesForTicks;\n","import React from 'react';\nimport * as d3 from 'd3-time-format';\n\nconst formatDate = d3.timeFormat('%b %-d');\n\nconst formatValueForTooltip = (value, decimalPlaces) => {\n  if (value === 0) {\n    return 0;\n  }\n  if (decimalPlaces >= 1) {\n    return value.toFixed(decimalPlaces);\n  }\n  return Math.round(value).toLocaleString();\n};\n\nconst getUnitsFromOptions = ({ populationAdjusted, cumulative, rollingAverage }) => {\n  const avgText = rollingAverage && !cumulative ? 'avg ' : '';\n  const populationAdjustedText = populationAdjusted ? ' per 100' : '';\n  return `${avgText}doses${populationAdjustedText}`;\n};\n\nconst generateTooltip = (decimalPlaces, options) => ({ seriesName, xValue, yValue }) => {\n  const formattedDate = formatDate(xValue);\n  const formattedValue = formatValueForTooltip(yValue, decimalPlaces);\n  const units = getUnitsFromOptions(options);\n\n  return (\n    <div className=\"tooltip-content\">\n      {seriesName}\n      <br />\n      <span className=\"tooltip-content--value\">{formattedValue}</span> {units}\n      <br />\n      <span className=\"tooltip-content--date\">{formattedDate}</span>\n    </div>\n  );\n};\n\nexport default generateTooltip;\n","import React, { useState, useEffect } from 'react';\nimport Loading from '@financial-times/g-components/loading';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport './styles.scss';\n\nconst Toggle = ({ checked, text, loadingTime, onClick, disabled }) => {\n  const [loading, setLoading] = useState(false);\n\n  useEffect(() => {\n    let timer;\n    if (loading) {\n      timer = setTimeout(() => {\n        setLoading(false);\n        onClick();\n      }, loadingTime); // Defaults to 250ms\n    }\n    return () => clearTimeout(timer);\n  }, [loading]);\n\n  return (\n    <div\n      className={classnames('toggle-panel', disabled && 'toggle-panel--disabled')}\n      onClick={() => {\n        setLoading(true);\n      }}\n    >\n      <div className=\"toggle-label\">{text}</div>\n      {loading ? (\n        <div className=\"toggle-loading\">\n          <Loading size=\"small\" />\n        </div>\n      ) : (\n        <label className=\"o-forms-field\">\n          <span className=\"o-forms-input o-forms-input--toggle o-forms-input--inline\">\n            <label>\n              <input\n                type=\"checkbox\"\n                checked={checked}\n                onClick={e => e.stopPropagation()}\n                onChange={e => e.stopPropagation()}\n                disabled={disabled}\n              />\n              <span className=\"o-forms-input__label\" />\n            </label>\n          </span>\n        </label>\n      )}\n    </div>\n  );\n};\n\nToggle.propTypes = {\n  text: PropTypes.string,\n  checked: PropTypes.bool.isRequired,\n  onClick: PropTypes.func.isRequired,\n  loadingTime: PropTypes.number,\n  disabled: PropTypes.bool,\n};\n\nToggle.defaultProps = {\n  loadingTime: 250,\n  disabled: false,\n};\n\nexport default Toggle;\n","import React, { useContext, useState, useRef, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { Context } from '@financial-times/g-components/article-layout';\nimport './styles.scss';\n\nconst NavigationHeaderMobileDropdownButton = ({\n  links,\n  currentPage,\n  onClick,\n  isOpen,\n  buttonRef,\n}) => {\n  const { text: currentText } = links.find(({ url }) => url === currentPage);\n  return (\n    <div className=\"navigation-header__mobile-select\">\n      <button\n        ref={buttonRef}\n        className=\"navigation-header__current\"\n        className={`navigation-header__current navigation-header__current--${\n          isOpen ? 'open' : 'closed'\n        }`}\n        value={currentPage}\n        onClick={onClick}\n      >\n        {currentText}\n      </button>\n    </div>\n  );\n};\n\nconst NavigationHeaderMobileDropdown = ({\n  links,\n  currentPage,\n  openLinksInNewWindow,\n  closeDropdown,\n  buttonRef,\n}) => {\n  const dropdownRef = useRef();\n\n  const handleClick = event => {\n    if (dropdownRef.current.contains(event.target) || buttonRef.current.contains(event.target)) {\n      return;\n    }\n    closeDropdown();\n  };\n\n  useEffect(() => {\n    document.addEventListener('mousedown', handleClick);\n    return () => {\n      document.removeEventListener('mousedown', handleClick);\n    };\n  }, []);\n\n  return (\n    <div className=\"navigation-header__dropdown\" ref={dropdownRef}>\n      {links.map(({ text, url }) => (\n        <a\n          key={url}\n          className=\"navigation-header__dropdown-link\"\n          href={currentPage !== url ? url : '#'}\n          target={openLinksInNewWindow ? '_blank' : null}\n          aria-current={currentPage === url ? 'page' : null}\n          role={currentPage === url ? 'button' : null}\n          onClick={closeDropdown}\n        >\n          {text}\n        </a>\n      ))}\n    </div>\n  );\n};\n\nconst NavigationHeader = ({ title, links, currentPage, openLinksInNewWindow }) => {\n  const buttonRef = useRef();\n  const [isOpen, setIsOpen] = useState(false);\n\n  const { breakpoint: b } = useContext(Context);\n  const breakpoint = ((b && b.breakpoint) || 'default').toLowerCase();\n\n  return (\n    <nav className=\"navigation-header\">\n      {title && <div className=\"navigation-header__title\">{title}</div>}\n      {breakpoint === 'default' ? (\n        <NavigationHeaderMobileDropdownButton\n          links={links}\n          currentPage={currentPage}\n          onClick={() => setIsOpen(!isOpen)}\n          isOpen={isOpen}\n          buttonRef={buttonRef}\n        />\n      ) : (\n        <ul className=\"navigation-header__list\">\n          {links.map(({ text, url }) => (\n            <li key={url} className=\"navigation-header__item\">\n              <a\n                className=\"navigation-header__link\"\n                href={currentPage !== url ? url : '#'}\n                target={openLinksInNewWindow ? '_blank' : null}\n                aria-current={currentPage === url ? 'page' : null}\n              >\n                {text}\n              </a>\n            </li>\n          ))}\n        </ul>\n      )}\n      {isOpen && (\n        <NavigationHeaderMobileDropdown\n          links={links}\n          currentPage={currentPage}\n          openLinksInNewWindow={openLinksInNewWindow}\n          closeDropdown={() => setIsOpen(false)}\n          buttonRef={buttonRef}\n        />\n      )}\n    </nav>\n  );\n};\n\nNavigationHeader.propTypes = {\n  title: PropTypes.string,\n  links: PropTypes.arrayOf(\n    PropTypes.shape({\n      text: PropTypes.string,\n      url: PropTypes.string,\n    })\n  ).isRequired,\n  openLinksInNewWindow: PropTypes.bool,\n  currentPage: PropTypes.string,\n};\n\nNavigationHeader.defaultProps = {\n  openLinksInNewWindow: false,\n};\n\nexport default NavigationHeader;\n","import React, { useState, useRef, useEffect } from 'react';\nimport { Context } from '@financial-times/g-components/article-layout';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport useScrollPosition from './hooks';\nimport './styles.scss';\n\nconst StickyHeader = ({ children, containerRef, height }) => {\n  const [isSticky, setSticky] = useState(false);\n  const [stickyShadow, setStickyShadow] = useState(false);\n  const [headerHeight, setHeaderHeight] = useState(0);\n  const ref = useRef(null);\n\n  useScrollPosition(({ prevPos, currPos }) => {\n    if (ref.current && containerRef.current) {\n      const { top: stickyTop, height: stickyHeight } = ref.current.getBoundingClientRect();\n      const { bottom: containerBottom } = containerRef.current.getBoundingClientRect();\n      const isSticky = stickyTop <= 0 && containerBottom - stickyHeight >= 0;\n      setSticky(isSticky);\n\n      // Only show shadow when scrolling up\n      if (isSticky) setStickyShadow(currPos.y > prevPos.y);\n    }\n  }, []);\n\n  return (\n    <Context.Consumer>\n      {({ breakpoint: b }) => {\n        const breakpoint = (b && b.breakpoint) || 'default';\n        const breakpointHeight = height[breakpoint];\n\n        const wrapperClasses = classNames(\n          'sticky-header-wrapper',\n          isSticky && 'sticky-header-wrapper--fixed',\n          // Always show shadow on mobile\n          ((stickyShadow && isSticky) || breakpoint === 'default') &&\n            'sticky-header-wrapper--shadow'\n        );\n\n        return (\n          <div\n            className={wrapperClasses}\n            ref={ref}\n            style={{ minHeight: isSticky && breakpointHeight ? breakpointHeight : 'auto' }}\n          >\n            {children}\n          </div>\n        );\n      }}\n    </Context.Consumer>\n  );\n};\n\nStickyHeader.propTypes = {\n  height: PropTypes.object.isRequired,\n};\n\nexport default StickyHeader;\n","import React from 'react';\nimport './styles.scss';\n\nconst YoutubeEmbed = ({ videoId }) => {\n  return (\n    <div className=\"g-youtube-embed\">\n      <div className=\"g-youtube-embed__wrapper\">\n        <iframe\n          className=\"g-youtube-embed__iframe\"\n          frameBorder=\"0\"\n          allowFullScreen\n          allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\"\n          src={`https://www.youtube.com/embed/${videoId}?rel=0`}\n          title=\"embedded video\"\n        />\n      </div>\n    </div>\n  );\n};\n\nexport default YoutubeEmbed;\n","module.exports = \"At least TOTAL_FIGURE doses of coronavirus vaccines have been administered around the world, data from TOTAL_COUNTRIES locations show.\\n\\nThe numbers shown here are updated frequently, using data compiled by the [Our World in Data](https://ourworldindata.org/covid-vaccinations) project at the University of Oxford, the [World Health Organization](https://covid19.who.int/) and national data sources from some countries.\\n\"","module.exports = \"Vaccine rollouts started fastest in high-income countries. Along with many middle-income economies that rapidly caught up later in 2021, they continue to outpace those in low-income countries.\\n\\nAs the vaccine rollout began in January 2021, WHO officials warned of a [“catastrophic moral failure”](https://www.ft.com/content/ca57c76c-f86a-4f2d-81ab-7f5970ad2dbd) as poor countries struggle to gain access to vaccines, creating the risk that [new strains of coronavirus](https://www.ft.com/content/5691b1bb-0f9f-4410-9ade-84f4d55ea778) impervious to the existing vaccines would emerge in their unprotected populations.\\n\\nBut the [inequity in vaccine distribution](https://www.ft.com/content/5144cd19-2c67-46d0-a37d-a869006bfbdb) has continued throughout 2021, with more Covid [boosters](https://www.ft.com/content/54bec909-1f06-43ff-9bc0-391202eabf9d) having been administered in high-income countries than [all vaccine doses combined](https://www.ft.com/content/974b71d1-d196-46a5-85d5-d32d3aa7f106) in the world’s lowest-income countries.\\n\"","module.exports = \"Unless specified below, the vaccination data shown here is compiled by [Our World in Data](https://ourworldindata.org/covid-vaccinations) from a variety of official and other sources such as local media. Each location’s listing in the main table above links to the ultimate source of its data; a [complete list of these sources](https://ourworldindata.org/covid-vaccinations#source-information-country-by-country) is also available.\\n\\nWhere the latest available data are those reported to or compiled from local official sources by the [World Health Organization](https://covid19.who.int/info/), the link leads to the relevant WHO coronavirus dashboard.\\n\\nThe following locations’ data is sourced separately:\\n\\n- Data for [**Austria**](https://info.gesundheitsministerium.gv.at/opendata.html?lang=en), [**France**](https://www.data.gouv.fr/fr/datasets/donnees-relatives-aux-personnes-vaccinees-contre-la-covid-19-1/), [**Germany**](https://impfdashboard.de/daten), [**Jersey**](https://www.gov.je/Health/Coronavirus/Pages/CoronavirusCases.aspx#tab_vaccinationReporting), [**Malaysia**](https://github.com/CITF-Malaysia/citf-public), [**Malta**](https://github.com/COVID19-Malta/COVID19-Cases), [**Spain**](https://www.mscbs.gob.es/profesionales/saludPublica/ccayes/alertasActual/nCov/vacunaCovid19.htm) and the [**UK**](https://coronavirus.data.gov.uk/details/vaccinations) comes from their respective national health ministries, national health services or public health agencies.\\n- Data for the **US** as well as its territories or associated states — **American Samoa**, **Guam**, the **Marshall Islands**, **Micronesia**, the **Northern Mariana Islands**, **Palau**, **Puerto Rico**, and the **US Virgin Islands** — comes from the [US Centers for Disease Control and Prevention](https://covid.cdc.gov/covid-data-tracker/#vaccinations).\\n- Data for **Canada** comes from [public data sources](https://covid19tracker.ca/sources.html) compiled by [COVID-19 Tracker Canada](https://covid19tracker.ca/vaccinationtracker.html).\\n- Data for [**Ascension**](https://www.ascension.gov.ac/covid-19-vaccination-campaign-continues), [**Saba**](https://www.sabagov.nl/post/successful-second-vaccination-round), and [**Sint Eustatius**](https://www.statiagovernment.com/key-topics/covid-19/vaccination-covid-19) comes from local official statements.\\n\\nData for the **US** before January 27 2022 has been adjusted to redistribute revised vaccination figures for California, as published by the US Centers for Disease Control and Prevention on January 28 2022. This resulted in [a decrease of 805,710 vaccination doses](https://covid.cdc.gov/covid-data-tracker/#vaccinations_vacc-total-admin-count-total) for the US (excluding its territories and associated states).\\n\\nThe data is adjusted to the total population of each location, including children who are not yet being vaccinated. Some locations may show cumulative figures greater than 100 per cent (or 200 total doses per 100 residents) due to under-estimated populations or policies allowing non-residents to receive vaccinations.\\n\\nUnless otherwise stated, population figures used to adjust data come from the 2020 estimates by the [World Bank](https://data.worldbank.org/indicator/SP.POP.TOTL). Population data for **Anguilla** and **Western Sahara** come from the [United Nations Population Division](https://population.un.org/wpp/Download/Standard/Population/). Data for **Eritrea** comes from the [WHO](https://www.who.int/countries/eri/en/). Local population sources are used for: [**Ascension**](https://www.sainthelena.gov.sh/ascension-3/), [**Bonaire**, **Sint Eustatius** and **Saba**](https://opendata.cbs.nl/statline/#/CBS/nl/dataset/83698NED/table?ts=1578654405815), [**Cyprus**](https://www.mof.gov.cy/mof/cystat/statistics.nsf/All/6C25304C1E70C304C2257833003432B3/$file/Demographic_Statistics_Results-2018-EN-291119.pdf?OpenElement) (and [**northern Cyprus**](https://www.devplan.org/seg-tr.html)), the [**Falkland Islands**](https://www.fig.gov.fk/policy/statistics/census), [**Guernsey**](https://www.gov.gg/population), [**Jersey**](https://www.gov.je/News/2019/Pages/Population-estimate-for-2018-released.aspx), [**Malta**](https://nso.gov.mt/en/News_Releases/Documents/2021/07/News2021_122.pdf), [**Moldova**](https://statistica.gov.md/newsview.php?l=ro&idc=168&id=6416), [**St Helena**](https://www.sainthelena.gov.sh/population-150321/), [**Taiwan**](https://eng.stat.gov.tw/point.asp?index=9), [**Tristan da Cunha**](https://www.tristandc.com/population.php) the [**UK**](https://www.ons.gov.uk/peoplepopulationandcommunity/populationandmigration/populationestimates/datasets/populationestimatesforukenglandandwalesscotlandandnorthernireland), the [**US**](https://data.census.gov/cedsci/table?q=population&t=Populations%20and%20People&g=0100000US,%240400000&y=2020&tid=DECENNIALPL2020.P1&hidePreview=true&tp=true) and the [**Vatican City**](https://www.vaticanstate.va/it/stato-governo/note-generali/popolazione.html).\\n\\nUnless otherwise stated, GDP per capita is 2019 data from the [World Bank](https://data.worldbank.org/indicator/NY.GDP.PCAP.CD). Data from 2018 is used for **American Samoa**, the **Cayman Islands**, **Cuba**, the **Faroe Islands**, **Greenland**, **Guam**, the **Isle of Man**, **Liechtenstein**, **Monaco**, the **Northern Mariana Islands**, **Sint Maarten**. Older data is used for the **US Virgin Islands** (2017), **French Polynesia** and **New Caledonia** (2000). Data from the [IMF World Economic Outlook](https://www.imf.org/en/Publications/SPROLLs/world-economic-outlook-databases) 2019 is used for **Iran**, the **Palestinian territories**, **San Marino**, **Somalia** and **Taiwan**. The latest available data for **Syria** is from 2010. IMF estimates from 2019 are used for **Aruba**, **Eritrea**, the **Marshall Islands**, **Micronesia**, **South Sudan**, **Turkmenistan** and **Venezuela**.\\n\\nIncome classifications are the  [World Bank country classifications by income level: 2021-2022](https://blogs.worldbank.org/opendata/new-world-bank-country-classifications-income-level-2021-2022), with the following additions: **Anguilla**, **Bonaire**, the **Cook Islands**, **Jersey**, **Guernsey**, the **Falkland Islands**, **northern Cyprus**, **Saba**, **Sint Eustatius**, **Taiwan** and **Wallis and Futuna** as \\\"high income\\\"; **Ascension**, **Montserrat**, **Niue**, **St Helena**,  **Tokelau**, and **Tristan da Cunha** as \\\"upper middle income\\\" and **Pitcairn** as \\\"lower middle income\\\".\\n\\nLocations listed here include territories of other states and some entities whose sovereignty is disputed or not universally recognised. Such locations are listed separately if they are conducting their own vaccination programmes or if their populations are not included in the total populations of another state.\\n\\n**Help us improve these charts:** We are always looking for any further sources of national, regional or municipal vaccination data that are not already shown in the table above. If you know of an official source of this data for your area, please email [coronavirus-data@ft.com](mailto:coronavirus-data@ft.com).\\n\"","module.exports = \"_Development, design and graphics by [Cale Tilford](https://www.ft.com/cale-tilford), [Caroline Nevitt](https://www.ft.com/caroline-nevitt), [Joanna S Kao](https://www.ft.com/joanna-s-kao), [Max Harlow](https://www.ft.com/max-harlow) and [Emma Lewis](https://www.ft.com/emma-lewis)._\\n\\n_Data and analysis by [Martin Stabe](https://www.ft.com/martin-stabe), [Oliver Elliott](https://www.ft.com/oliver-elliott), [Ella Hollowood](https://www.ft.com/ella-hollowood) and [Aleksandra Wisniewska](https://www.ft.com/aleksandra-wisniewska)._\\n\\n_Corrections: Due to a technical error, this page briefly displayed incorrect values for the total vaccine doses administered in Portugal on January 25 2021. At that time Portugal had distributed 255,699 doses. Due to a technical error, this page calculated and displayed incorrect values for the number of people vaccinated with at least one dose in Canada between December 2 2021 and December 24 2021. The affected data has been amended._ \\n\"","if (process.env.NODE_ENV !== 'production') {\n  var hot = require('./index').hot;\n  if (module.hot) {\n    var cache = require.cache;\n\n    if (!module.parents || module.parents.length === 0) {\n      throw new Error(\n        'React-Hot-Loader: `react-hot-loader/root` is not supported on your system. ' +\n        'Please use `import {hot} from \"react-hot-loader\"` instead'\n      );\n    }\n    // access parent\n    var parent = cache[module.parents[0]];\n    if (!parent) {\n      throw new Error(\n        'React-Hot-Loader: `react-hot-loader/root` is not supported on your system. ' +\n        'Please use `import {hot} from \"react-hot-loader\"` instead'\n      );\n    }\n\n    // remove self from a cache\n    delete cache[module.id];\n\n    // setup hot for caller\n    exports.hot = hot(parent);\n  } else {\n    fallbackHot();\n  }\n} else {\n  // prod mode\n  fallbackHot();\n}\n\nfunction fallbackHot() {\n  exports.hot = function (a) {\n    return a;\n  };\n}\n","import _pt from \"prop-types\";\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from 'react';\nimport cx from 'classnames';\nexport var defaultStyles = {\n  position: 'absolute',\n  backgroundColor: 'white',\n  color: '#666666',\n  padding: '.3rem .5rem',\n  borderRadius: '3px',\n  fontSize: '14px',\n  boxShadow: '0 1px 2px rgba(33,33,33,0.2)',\n  lineHeight: '1em',\n  pointerEvents: 'none'\n};\nexport default function Tooltip(_ref) {\n  var className = _ref.className,\n      top = _ref.top,\n      left = _ref.left,\n      _ref$offsetLeft = _ref.offsetLeft,\n      offsetLeft = _ref$offsetLeft === void 0 ? 10 : _ref$offsetLeft,\n      _ref$offsetTop = _ref.offsetTop,\n      offsetTop = _ref$offsetTop === void 0 ? 10 : _ref$offsetTop,\n      _ref$style = _ref.style,\n      style = _ref$style === void 0 ? defaultStyles : _ref$style,\n      children = _ref.children,\n      _ref$unstyled = _ref.unstyled,\n      unstyled = _ref$unstyled === void 0 ? false : _ref$unstyled,\n      _ref$applyPositionSty = _ref.applyPositionStyle,\n      applyPositionStyle = _ref$applyPositionSty === void 0 ? false : _ref$applyPositionSty,\n      restProps = _objectWithoutPropertiesLoose(_ref, [\"className\", \"top\", \"left\", \"offsetLeft\", \"offsetTop\", \"style\", \"children\", \"unstyled\", \"applyPositionStyle\"]);\n\n  return /*#__PURE__*/React.createElement(\"div\", _extends({\n    className: cx('visx-tooltip', className),\n    style: _extends({\n      top: top == null || offsetTop == null ? top : top + offsetTop,\n      left: left == null || offsetLeft == null ? left : left + offsetLeft\n    }, applyPositionStyle && {\n      position: 'absolute'\n    }, !unstyled && style)\n  }, restProps), children);\n}\nTooltip.propTypes = {\n  children: _pt.node,\n  className: _pt.string,\n  left: _pt.number,\n  offsetLeft: _pt.number,\n  offsetTop: _pt.number,\n  top: _pt.number,\n  applyPositionStyle: _pt.bool,\n  unstyled: _pt.bool\n};","var letterFrequency = [{\n  letter: 'A',\n  frequency: 0.08167\n}, {\n  letter: 'B',\n  frequency: 0.01492\n}, {\n  letter: 'C',\n  frequency: 0.02782\n}, {\n  letter: 'D',\n  frequency: 0.04253\n}, {\n  letter: 'E',\n  frequency: 0.12702\n}, {\n  letter: 'F',\n  frequency: 0.02288\n}, {\n  letter: 'G',\n  frequency: 0.02015\n}, {\n  letter: 'H',\n  frequency: 0.06094\n}, {\n  letter: 'I',\n  frequency: 0.06966\n}, {\n  letter: 'J',\n  frequency: 0.00153\n}, {\n  letter: 'K',\n  frequency: 0.00772\n}, {\n  letter: 'L',\n  frequency: 0.04025\n}, {\n  letter: 'M',\n  frequency: 0.02406\n}, {\n  letter: 'N',\n  frequency: 0.06749\n}, {\n  letter: 'O',\n  frequency: 0.07507\n}, {\n  letter: 'P',\n  frequency: 0.01929\n}, {\n  letter: 'Q',\n  frequency: 0.00095\n}, {\n  letter: 'R',\n  frequency: 0.05987\n}, {\n  letter: 'S',\n  frequency: 0.06327\n}, {\n  letter: 'T',\n  frequency: 0.09056\n}, {\n  letter: 'U',\n  frequency: 0.02758\n}, {\n  letter: 'V',\n  frequency: 0.00978\n}, {\n  letter: 'W',\n  frequency: 0.0236\n}, {\n  letter: 'X',\n  frequency: 0.0015\n}, {\n  letter: 'Y',\n  frequency: 0.01974\n}, {\n  letter: 'Z',\n  frequency: 0.00074\n}];\nexport default letterFrequency;","function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React, { useState, useCallback } from 'react';\nexport default function useTooltip(\n/** Optional initial TooltipState. */\ninitialTooltipState) {\n  var _useState = useState(_extends({\n    tooltipOpen: false\n  }, initialTooltipState)),\n      tooltipState = _useState[0],\n      setTooltipState = _useState[1];\n\n  var showTooltip = useCallback(function (showArgs) {\n    return setTooltipState(typeof showArgs === 'function' ? function (_ref) {\n      var tooltipOpen = _ref.tooltipOpen,\n          show = _objectWithoutPropertiesLoose(_ref, [\"tooltipOpen\"]);\n\n      return _extends({}, showArgs(show), {\n        tooltipOpen: true\n      });\n    } : {\n      tooltipOpen: true,\n      tooltipLeft: showArgs.tooltipLeft,\n      tooltipTop: showArgs.tooltipTop,\n      tooltipData: showArgs.tooltipData\n    });\n  }, [setTooltipState]);\n  var hideTooltip = useCallback(function () {\n    return setTooltipState({\n      tooltipOpen: false,\n      tooltipLeft: undefined,\n      tooltipTop: undefined,\n      tooltipData: undefined\n    });\n  }, [setTooltipState]);\n  return {\n    tooltipOpen: tooltipState.tooltipOpen,\n    tooltipLeft: tooltipState.tooltipLeft,\n    tooltipTop: tooltipState.tooltipTop,\n    tooltipData: tooltipState.tooltipData,\n    updateTooltip: setTooltipState,\n    showTooltip: showTooltip,\n    hideTooltip: hideTooltip\n  };\n}","export default function sum(values, valueof) {\n  let sum = 0;\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value = +value) {\n        sum += value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if (value = +valueof(value, ++index, values)) {\n        sum += value;\n      }\n    }\n  }\n  return sum;\n}\n","import interval from \"./interval.js\";\n\nvar millisecond = interval(function() {\n  // noop\n}, function(date, step) {\n  date.setTime(+date + step);\n}, function(start, end) {\n  return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = function(k) {\n  k = Math.floor(k);\n  if (!isFinite(k) || !(k > 0)) return null;\n  if (!(k > 1)) return millisecond;\n  return interval(function(date) {\n    date.setTime(Math.floor(date / k) * k);\n  }, function(date, step) {\n    date.setTime(+date + step * k);\n  }, function(start, end) {\n    return (end - start) / k;\n  });\n};\n\nexport default millisecond;\nexport var milliseconds = millisecond.range;\n","import {bisector, tickStep} from \"d3-array\";\nimport {durationDay, durationHour, durationMinute, durationMonth, durationSecond, durationWeek, durationYear} from \"./duration.js\";\nimport millisecond from \"./millisecond.js\";\nimport second from \"./second.js\";\nimport minute from \"./minute.js\";\nimport hour from \"./hour.js\";\nimport day from \"./day.js\";\nimport {sunday as week} from \"./week.js\";\nimport month from \"./month.js\";\nimport year from \"./year.js\";\nimport utcMinute from \"./utcMinute.js\";\nimport utcHour from \"./utcHour.js\";\nimport utcDay from \"./utcDay.js\";\nimport {utcSunday as utcWeek} from \"./utcWeek.js\";\nimport utcMonth from \"./utcMonth.js\";\nimport utcYear from \"./utcYear.js\";\n\nfunction ticker(year, month, week, day, hour, minute) {\n\n  const tickIntervals = [\n    [second,  1,      durationSecond],\n    [second,  5,  5 * durationSecond],\n    [second, 15, 15 * durationSecond],\n    [second, 30, 30 * durationSecond],\n    [minute,  1,      durationMinute],\n    [minute,  5,  5 * durationMinute],\n    [minute, 15, 15 * durationMinute],\n    [minute, 30, 30 * durationMinute],\n    [  hour,  1,      durationHour  ],\n    [  hour,  3,  3 * durationHour  ],\n    [  hour,  6,  6 * durationHour  ],\n    [  hour, 12, 12 * durationHour  ],\n    [   day,  1,      durationDay   ],\n    [   day,  2,  2 * durationDay   ],\n    [  week,  1,      durationWeek  ],\n    [ month,  1,      durationMonth ],\n    [ month,  3,  3 * durationMonth ],\n    [  year,  1,      durationYear  ]\n  ];\n\n  function ticks(start, stop, count) {\n    const reverse = stop < start;\n    if (reverse) [start, stop] = [stop, start];\n    const interval = count && typeof count.range === \"function\" ? count : tickInterval(start, stop, count);\n    const ticks = interval ? interval.range(start, +stop + 1) : []; // inclusive stop\n    return reverse ? ticks.reverse() : ticks;\n  }\n\n  function tickInterval(start, stop, count) {\n    const target = Math.abs(stop - start) / count;\n    const i = bisector(([,, step]) => step).right(tickIntervals, target);\n    if (i === tickIntervals.length) return year.every(tickStep(start / durationYear, stop / durationYear, count));\n    if (i === 0) return millisecond.every(Math.max(tickStep(start, stop, count), 1));\n    const [t, step] = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n    return t.every(step);\n  }\n\n  return [ticks, tickInterval];\n}\n\nconst [utcTicks, utcTickInterval] = ticker(utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute);\nconst [timeTicks, timeTickInterval] = ticker(year, month, week, day, hour, minute);\n\nexport {utcTicks, utcTickInterval, timeTicks, timeTickInterval};\n","import {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeTicks, timeTickInterval} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport nice from \"./nice.js\";\n\nfunction date(t) {\n  return new Date(t);\n}\n\nfunction number(t) {\n  return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format) {\n  var scale = continuous(),\n      invert = scale.invert,\n      domain = scale.domain;\n\n  var formatMillisecond = format(\".%L\"),\n      formatSecond = format(\":%S\"),\n      formatMinute = format(\"%I:%M\"),\n      formatHour = format(\"%I %p\"),\n      formatDay = format(\"%a %d\"),\n      formatWeek = format(\"%b %d\"),\n      formatMonth = format(\"%B\"),\n      formatYear = format(\"%Y\");\n\n  function tickFormat(date) {\n    return (second(date) < date ? formatMillisecond\n        : minute(date) < date ? formatSecond\n        : hour(date) < date ? formatMinute\n        : day(date) < date ? formatHour\n        : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n        : year(date) < date ? formatMonth\n        : formatYear)(date);\n  }\n\n  scale.invert = function(y) {\n    return new Date(invert(y));\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? domain(Array.from(_, number)) : domain().map(date);\n  };\n\n  scale.ticks = function(interval) {\n    var d = domain();\n    return ticks(d[0], d[d.length - 1], interval == null ? 10 : interval);\n  };\n\n  scale.tickFormat = function(count, specifier) {\n    return specifier == null ? tickFormat : format(specifier);\n  };\n\n  scale.nice = function(interval) {\n    var d = domain();\n    if (!interval || typeof interval.range !== \"function\") interval = tickInterval(d[0], d[d.length - 1], interval == null ? 10 : interval);\n    return interval ? domain(nice(d, interval)) : scale;\n  };\n\n  scale.copy = function() {\n    return copy(scale, calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format));\n  };\n\n  return scale;\n}\n\nexport default function time() {\n  return initRange.apply(calendar(timeTicks, timeTickInterval, timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments);\n}\n","import { scaleTime } from 'd3-scale';\nimport scaleOperator from '../operators/scaleOperator';\nexport var updateTimeScale = scaleOperator('domain', 'range', 'reverse', 'clamp', 'interpolate', 'nice', 'round');\nexport default function createTimeScale(config) {\n  return updateTimeScale(scaleTime(), config);\n}","import memoize from 'lodash/memoize';\nvar MEASUREMENT_ELEMENT_ID = '__react_svg_text_measurement_id';\n\nfunction getStringWidth(str, style) {\n  try {\n    // Calculate length of each word to be used to determine number of words per line\n    var textEl = document.getElementById(MEASUREMENT_ELEMENT_ID);\n\n    if (!textEl) {\n      var svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n      svg.style.width = '0';\n      svg.style.height = '0';\n      svg.style.position = 'absolute';\n      svg.style.top = '-100%';\n      svg.style.left = '-100%';\n      textEl = document.createElementNS('http://www.w3.org/2000/svg', 'text');\n      textEl.setAttribute('id', MEASUREMENT_ELEMENT_ID);\n      svg.appendChild(textEl);\n      document.body.appendChild(svg);\n    }\n\n    Object.assign(textEl.style, style);\n    textEl.textContent = str;\n    return textEl.getComputedTextLength();\n  } catch (e) {\n    return null;\n  }\n}\n\nexport default memoize(getStringWidth, function (str, style) {\n  return str + \"_\" + JSON.stringify(style);\n});","function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React, { useMemo } from 'react';\nimport reduceCSSCalc from 'reduce-css-calc';\nimport getStringWidth from '../util/getStringWidth';\n\nfunction isNumber(val) {\n  return typeof val === 'number';\n}\n\nfunction isXOrYInValid(xOrY) {\n  return (// number that is not NaN or Infinity\n    typeof xOrY === 'number' && Number.isFinite(xOrY) || // for percentage\n    typeof xOrY === 'string'\n  );\n}\n\nexport default function useText(props) {\n  var _props$verticalAnchor = props.verticalAnchor,\n      verticalAnchor = _props$verticalAnchor === void 0 ? 'end' : _props$verticalAnchor,\n      _props$scaleToFit = props.scaleToFit,\n      scaleToFit = _props$scaleToFit === void 0 ? false : _props$scaleToFit,\n      angle = props.angle,\n      width = props.width,\n      _props$lineHeight = props.lineHeight,\n      lineHeight = _props$lineHeight === void 0 ? '1em' : _props$lineHeight,\n      _props$capHeight = props.capHeight,\n      capHeight = _props$capHeight === void 0 ? '0.71em' : _props$capHeight,\n      children = props.children,\n      style = props.style,\n      textProps = _objectWithoutPropertiesLoose(props, [\"verticalAnchor\", \"scaleToFit\", \"angle\", \"width\", \"lineHeight\", \"capHeight\", \"children\", \"style\"]);\n\n  var _textProps$x = textProps.x,\n      x = _textProps$x === void 0 ? 0 : _textProps$x,\n      _textProps$y = textProps.y,\n      y = _textProps$y === void 0 ? 0 : _textProps$y;\n  var isXOrYNotValid = !isXOrYInValid(x) || !isXOrYInValid(y);\n\n  var _useMemo = useMemo(function () {\n    var words = children == null ? [] : children.toString().split(/(?:(?!\\u00A0+)\\s+)/);\n    return {\n      wordsWithWidth: words.map(function (word) {\n        return {\n          word: word,\n          wordWidth: getStringWidth(word, style) || 0\n        };\n      }),\n      spaceWidth: getStringWidth(\"\\xA0\", style) || 0\n    };\n  }, [children, style]),\n      wordsWithWidth = _useMemo.wordsWithWidth,\n      spaceWidth = _useMemo.spaceWidth;\n\n  var wordsByLines = useMemo(function () {\n    if (isXOrYNotValid) {\n      return [];\n    } // Only perform calculations if using features that require them (multiline, scaleToFit)\n\n\n    if (width || scaleToFit) {\n      return wordsWithWidth.reduce(function (result, _ref) {\n        var word = _ref.word,\n            wordWidth = _ref.wordWidth;\n        var currentLine = result[result.length - 1];\n\n        if (currentLine && (width == null || scaleToFit || (currentLine.width || 0) + wordWidth + spaceWidth < width)) {\n          // Word can be added to an existing line\n          currentLine.words.push(word);\n          currentLine.width = currentLine.width || 0;\n          currentLine.width += wordWidth + spaceWidth;\n        } else {\n          // Add first word to line or word is too long to scaleToFit on existing line\n          var newLine = {\n            words: [word],\n            width: wordWidth\n          };\n          result.push(newLine);\n        }\n\n        return result;\n      }, []);\n    }\n\n    return [{\n      words: children == null ? [] : children.toString().split(/(?:(?!\\u00A0+)\\s+)/)\n    }];\n  }, [isXOrYNotValid, width, scaleToFit, children, wordsWithWidth, spaceWidth]);\n  var startDy = useMemo(function () {\n    var startDyStr = isXOrYNotValid ? '' : verticalAnchor === 'start' ? reduceCSSCalc(\"calc(\" + capHeight + \")\") : verticalAnchor === 'middle' ? reduceCSSCalc(\"calc(\" + (wordsByLines.length - 1) / 2 + \" * -\" + lineHeight + \" + (\" + capHeight + \" / 2))\") : reduceCSSCalc(\"calc(\" + (wordsByLines.length - 1) + \" * -\" + lineHeight + \")\");\n    return startDyStr;\n  }, [isXOrYNotValid, verticalAnchor, capHeight, wordsByLines.length, lineHeight]);\n  var transform = useMemo(function () {\n    var transforms = [];\n\n    if (isXOrYNotValid) {\n      return '';\n    }\n\n    if (isNumber(x) && isNumber(y) && isNumber(width) && scaleToFit && wordsByLines.length > 0) {\n      var lineWidth = wordsByLines[0].width || 1;\n      var sx = width / lineWidth;\n      var sy = sx;\n      var originX = x - sx * x;\n      var originY = y - sy * y;\n      transforms.push(\"matrix(\" + sx + \", 0, 0, \" + sy + \", \" + originX + \", \" + originY + \")\");\n    }\n\n    if (angle) {\n      transforms.push(\"rotate(\" + angle + \", \" + x + \", \" + y + \")\");\n    }\n\n    return transforms.length > 0 ? transforms.join(' ') : '';\n  }, [isXOrYNotValid, x, y, width, scaleToFit, wordsByLines, angle]);\n  return {\n    wordsByLines: wordsByLines,\n    startDy: startDy,\n    transform: transform\n  };\n}","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from 'react';\nimport useText from './hooks/useText';\nimport { TextProps } from './types';\nexport { TextProps } from './types';\nvar SVG_STYLE = {\n  overflow: 'visible'\n};\nexport default function Text(props) {\n  var _props$dx = props.dx,\n      dx = _props$dx === void 0 ? 0 : _props$dx,\n      _props$dy = props.dy,\n      dy = _props$dy === void 0 ? 0 : _props$dy,\n      _props$textAnchor = props.textAnchor,\n      textAnchor = _props$textAnchor === void 0 ? 'start' : _props$textAnchor,\n      innerRef = props.innerRef,\n      innerTextRef = props.innerTextRef,\n      verticalAnchor = props.verticalAnchor,\n      angle = props.angle,\n      _props$lineHeight = props.lineHeight,\n      lineHeight = _props$lineHeight === void 0 ? '1em' : _props$lineHeight,\n      _props$scaleToFit = props.scaleToFit,\n      scaleToFit = _props$scaleToFit === void 0 ? false : _props$scaleToFit,\n      capHeight = props.capHeight,\n      width = props.width,\n      textProps = _objectWithoutPropertiesLoose(props, [\"dx\", \"dy\", \"textAnchor\", \"innerRef\", \"innerTextRef\", \"verticalAnchor\", \"angle\", \"lineHeight\", \"scaleToFit\", \"capHeight\", \"width\"]);\n\n  var _textProps$x = textProps.x,\n      x = _textProps$x === void 0 ? 0 : _textProps$x,\n      fontSize = textProps.fontSize;\n\n  var _useText = useText(props),\n      wordsByLines = _useText.wordsByLines,\n      startDy = _useText.startDy,\n      transform = _useText.transform;\n\n  return /*#__PURE__*/React.createElement(\"svg\", {\n    ref: innerRef,\n    x: dx,\n    y: dy,\n    fontSize: fontSize,\n    style: SVG_STYLE\n  }, wordsByLines.length > 0 ? /*#__PURE__*/React.createElement(\"text\", _extends({\n    ref: innerTextRef,\n    transform: transform\n  }, textProps, {\n    textAnchor: textAnchor\n  }), wordsByLines.map(function (line, index) {\n    return /*#__PURE__*/React.createElement(\"tspan\", {\n      key: index,\n      x: x,\n      dy: index === 0 ? startDy : lineHeight\n    }, line.words.join(' '));\n  })) : null);\n}","export default function(start, stop, step) {\n  start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n  var i = -1,\n      n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n      range = new Array(n);\n\n  while (++i < n) {\n    range[i] = start + i * step;\n  }\n\n  return range;\n}\n","import {range as sequence} from \"d3-array\";\nimport {initRange} from \"./init.js\";\nimport ordinal from \"./ordinal.js\";\n\nexport default function band() {\n  var scale = ordinal().unknown(undefined),\n      domain = scale.domain,\n      ordinalRange = scale.range,\n      r0 = 0,\n      r1 = 1,\n      step,\n      bandwidth,\n      round = false,\n      paddingInner = 0,\n      paddingOuter = 0,\n      align = 0.5;\n\n  delete scale.unknown;\n\n  function rescale() {\n    var n = domain().length,\n        reverse = r1 < r0,\n        start = reverse ? r1 : r0,\n        stop = reverse ? r0 : r1;\n    step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n    if (round) step = Math.floor(step);\n    start += (stop - start - step * (n - paddingInner)) * align;\n    bandwidth = step * (1 - paddingInner);\n    if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n    var values = sequence(n).map(function(i) { return start + step * i; });\n    return ordinalRange(reverse ? values.reverse() : values);\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain(_), rescale()) : domain();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? ([r0, r1] = _, r0 = +r0, r1 = +r1, rescale()) : [r0, r1];\n  };\n\n  scale.rangeRound = function(_) {\n    return [r0, r1] = _, r0 = +r0, r1 = +r1, round = true, rescale();\n  };\n\n  scale.bandwidth = function() {\n    return bandwidth;\n  };\n\n  scale.step = function() {\n    return step;\n  };\n\n  scale.round = function(_) {\n    return arguments.length ? (round = !!_, rescale()) : round;\n  };\n\n  scale.padding = function(_) {\n    return arguments.length ? (paddingInner = Math.min(1, paddingOuter = +_), rescale()) : paddingInner;\n  };\n\n  scale.paddingInner = function(_) {\n    return arguments.length ? (paddingInner = Math.min(1, _), rescale()) : paddingInner;\n  };\n\n  scale.paddingOuter = function(_) {\n    return arguments.length ? (paddingOuter = +_, rescale()) : paddingOuter;\n  };\n\n  scale.align = function(_) {\n    return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n  };\n\n  scale.copy = function() {\n    return band(domain(), [r0, r1])\n        .round(round)\n        .paddingInner(paddingInner)\n        .paddingOuter(paddingOuter)\n        .align(align);\n  };\n\n  return initRange.apply(rescale(), arguments);\n}\n\nfunction pointish(scale) {\n  var copy = scale.copy;\n\n  scale.padding = scale.paddingOuter;\n  delete scale.paddingInner;\n  delete scale.paddingOuter;\n\n  scale.copy = function() {\n    return pointish(copy());\n  };\n\n  return scale;\n}\n\nexport function point() {\n  return pointish(band.apply(null, arguments).paddingInner(1));\n}\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from 'react';\nimport cx from 'classnames';\nimport { degreesToRadians } from '../util/trigonometry';\nvar DEFAULT_CENTER = {\n  x: 0,\n  y: 0\n};\nexport var getPoint = function getPoint(_ref) {\n  var _ref$sides = _ref.sides,\n      sides = _ref$sides === void 0 ? 4 : _ref$sides,\n      _ref$size = _ref.size,\n      size = _ref$size === void 0 ? 25 : _ref$size,\n      _ref$center = _ref.center,\n      center = _ref$center === void 0 ? DEFAULT_CENTER : _ref$center,\n      _ref$rotate = _ref.rotate,\n      rotate = _ref$rotate === void 0 ? 0 : _ref$rotate,\n      side = _ref.side;\n  var degrees = 360 / sides * side - rotate;\n  var radians = degreesToRadians(degrees);\n  return {\n    x: center.x + size * Math.cos(radians),\n    y: center.y + size * Math.sin(radians)\n  };\n};\nexport var getPoints = function getPoints(_ref2) {\n  var sides = _ref2.sides,\n      size = _ref2.size,\n      center = _ref2.center,\n      rotate = _ref2.rotate;\n  return new Array(sides).fill(0).map(function (_, side) {\n    return getPoint({\n      sides: sides,\n      size: size,\n      center: center,\n      rotate: rotate,\n      side: side\n    });\n  });\n};\nexport default function Polygon(_ref3) {\n  var _ref3$sides = _ref3.sides,\n      sides = _ref3$sides === void 0 ? 4 : _ref3$sides,\n      _ref3$size = _ref3.size,\n      size = _ref3$size === void 0 ? 25 : _ref3$size,\n      _ref3$center = _ref3.center,\n      center = _ref3$center === void 0 ? DEFAULT_CENTER : _ref3$center,\n      _ref3$rotate = _ref3.rotate,\n      rotate = _ref3$rotate === void 0 ? 0 : _ref3$rotate,\n      className = _ref3.className,\n      children = _ref3.children,\n      innerRef = _ref3.innerRef,\n      points = _ref3.points,\n      restProps = _objectWithoutPropertiesLoose(_ref3, [\"sides\", \"size\", \"center\", \"rotate\", \"className\", \"children\", \"innerRef\", \"points\"]);\n\n  var pointsToRender = points || getPoints({\n    sides: sides,\n    size: size,\n    center: center,\n    rotate: rotate\n  }).map(function (_ref4) {\n    var x = _ref4.x,\n        y = _ref4.y;\n    return [x, y];\n  }); // eslint-disable-next-line react/jsx-no-useless-fragment\n\n  if (children) return /*#__PURE__*/React.createElement(React.Fragment, null, children({\n    points: pointsToRender\n  }));\n  return /*#__PURE__*/React.createElement(\"polygon\", _extends({\n    ref: innerRef,\n    className: cx('visx-polygon', className),\n    points: pointsToRender.join(' ')\n  }, restProps));\n}","export var degreesToRadians = function degreesToRadians(degrees) {\n  return Math.PI / 180 * degrees;\n};","import {addAndRun} from './core/send.js';\nimport { userID } from './core/user.js';\nimport { session } from './core/session.js';\nimport { get } from './core/settings.js';\nimport { guid, getValueFromCookie, merge, log } from './utils.js';\n\nlet rootID;\n\n/**\n * Generate and store a new rootID, used to mark a new root event that\n * subsequent events will be linked to.\n *\n * @returns {string|*} The rootID.\n */\nfunction setRootID() {\n\trootID = guid();\n\treturn rootID;\n}\n\n/**\n * Get the current rootID.\n *\n * @returns {string|*} The rootID.\n */\nfunction getRootID() {\n\tif (!rootID) {\n\t\tsetRootID();\n\t}\n\n\treturn rootID;\n}\n\n/**\n * Make a tracking request.\n *\n * @param {object} config - Should be passed an object containing a format and the values for that format\n * @param {Function} [callback] - Fired when the request has been made.\n *\n * @returns {object} request\n */\nfunction track(config, callback = function(){ /* empty */}) {\n\tconst currentSession = session();\n\n\t// Set up the base request object with some values which should always be sent.\n\tconst request = {\n\t\tcallback,\n\t\tcontext: {\n\t\t\tid: config.id || guid(), // Use a supplied id or generate one for this request\n\t\t\troot_id: getRootID(),\n\t\t},\n\t\tuser: {\n\t\t\tft_session: getValueFromCookie(/FTSession=([^;]+)/),\n\t\t\tft_session_s: getValueFromCookie(/FTSession_s=([^;]+)/)\n\t\t},\n\t\tdevice: {\n\t\t\tspoor_session: currentSession.id,\n\t\t\tspoor_session_is_new: currentSession.isNew,\n\t\t\tspoor_id: userID(),\n\t\t},\n\t};\n\n\t// Override any context, user, and device values with object-wide settings\n\tconst settingsConfig = get('config') || {};\n\tif (settingsConfig.context) {\n\t\tmerge(request.context, settingsConfig.context);\n\t}\n\tif (settingsConfig.user) {\n\t\tmerge(request.user, settingsConfig.user);\n\t}\n\tif (settingsConfig.device) {\n\t\tmerge(request.device, settingsConfig.device);\n\t}\n\n\t// Update the base config with the parameter-supplied config\n\tmerge(request, config);\n\n\tlog('Core.Track', request);\n\n\t// Send it.\n\taddAndRun(request);\n\n\treturn request;\n}\n\nexport default {\n\tsetRootID,\n\tgetRootID,\n\ttrack\n};\n","'use strict';\n\nif (!module.hot || process.env.NODE_ENV === 'production') {\n  module.exports = require('./dist/react-hot-loader.production.min.js');\n} else {\n  module.exports = require('./dist/react-hot-loader.development.js');\n}\n","\"use strict\";function _interopDefault(e){return e&&\"object\"==typeof e&&\"default\"in e?e.default:e}Object.defineProperty(exports,\"__esModule\",{value:!0});var React=_interopDefault(require(\"react\"));function AppContainer(e){return AppContainer.warnAboutHMRDisabled&&(AppContainer.warnAboutHMRDisabled=!0,console.error(\"React-Hot-Loader: misconfiguration detected, using production version in non-production environment.\"),console.error(\"React-Hot-Loader: Hot Module Replacement is not enabled.\")),React.Children.only(e.children)}AppContainer.warnAboutHMRDisabled=!1;var hot=function e(){return e.shouldWrapWithAppContainer?function(e){return function(n){return React.createElement(AppContainer,null,React.createElement(e,n))}}:function(e){return e}};hot.shouldWrapWithAppContainer=!1;var areComponentsEqual=function(e,n){return e===n},setConfig=function(){},cold=function(e){return e},configureComponent=function(){};exports.AppContainer=AppContainer,exports.hot=hot,exports.areComponentsEqual=areComponentsEqual,exports.setConfig=setConfig,exports.cold=cold,exports.configureComponent=configureComponent;\n","/** @license React v16.14.0\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var l=require(\"object-assign\"),n=\"function\"===typeof Symbol&&Symbol.for,p=n?Symbol.for(\"react.element\"):60103,q=n?Symbol.for(\"react.portal\"):60106,r=n?Symbol.for(\"react.fragment\"):60107,t=n?Symbol.for(\"react.strict_mode\"):60108,u=n?Symbol.for(\"react.profiler\"):60114,v=n?Symbol.for(\"react.provider\"):60109,w=n?Symbol.for(\"react.context\"):60110,x=n?Symbol.for(\"react.forward_ref\"):60112,y=n?Symbol.for(\"react.suspense\"):60113,z=n?Symbol.for(\"react.memo\"):60115,A=n?Symbol.for(\"react.lazy\"):\n60116,B=\"function\"===typeof Symbol&&Symbol.iterator;function C(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;c<arguments.length;c++)b+=\"&args[]=\"+encodeURIComponent(arguments[c]);return\"Minified React error #\"+a+\"; visit \"+b+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"}\nvar D={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},E={};function F(a,b,c){this.props=a;this.context=b;this.refs=E;this.updater=c||D}F.prototype.isReactComponent={};F.prototype.setState=function(a,b){if(\"object\"!==typeof a&&\"function\"!==typeof a&&null!=a)throw Error(C(85));this.updater.enqueueSetState(this,a,b,\"setState\")};F.prototype.forceUpdate=function(a){this.updater.enqueueForceUpdate(this,a,\"forceUpdate\")};\nfunction G(){}G.prototype=F.prototype;function H(a,b,c){this.props=a;this.context=b;this.refs=E;this.updater=c||D}var I=H.prototype=new G;I.constructor=H;l(I,F.prototype);I.isPureReactComponent=!0;var J={current:null},K=Object.prototype.hasOwnProperty,L={key:!0,ref:!0,__self:!0,__source:!0};\nfunction M(a,b,c){var e,d={},g=null,k=null;if(null!=b)for(e in void 0!==b.ref&&(k=b.ref),void 0!==b.key&&(g=\"\"+b.key),b)K.call(b,e)&&!L.hasOwnProperty(e)&&(d[e]=b[e]);var f=arguments.length-2;if(1===f)d.children=c;else if(1<f){for(var h=Array(f),m=0;m<f;m++)h[m]=arguments[m+2];d.children=h}if(a&&a.defaultProps)for(e in f=a.defaultProps,f)void 0===d[e]&&(d[e]=f[e]);return{$$typeof:p,type:a,key:g,ref:k,props:d,_owner:J.current}}\nfunction N(a,b){return{$$typeof:p,type:a.type,key:b,ref:a.ref,props:a.props,_owner:a._owner}}function O(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===p}function escape(a){var b={\"=\":\"=0\",\":\":\"=2\"};return\"$\"+(\"\"+a).replace(/[=:]/g,function(a){return b[a]})}var P=/\\/+/g,Q=[];function R(a,b,c,e){if(Q.length){var d=Q.pop();d.result=a;d.keyPrefix=b;d.func=c;d.context=e;d.count=0;return d}return{result:a,keyPrefix:b,func:c,context:e,count:0}}\nfunction S(a){a.result=null;a.keyPrefix=null;a.func=null;a.context=null;a.count=0;10>Q.length&&Q.push(a)}\nfunction T(a,b,c,e){var d=typeof a;if(\"undefined\"===d||\"boolean\"===d)a=null;var g=!1;if(null===a)g=!0;else switch(d){case \"string\":case \"number\":g=!0;break;case \"object\":switch(a.$$typeof){case p:case q:g=!0}}if(g)return c(e,a,\"\"===b?\".\"+U(a,0):b),1;g=0;b=\"\"===b?\".\":b+\":\";if(Array.isArray(a))for(var k=0;k<a.length;k++){d=a[k];var f=b+U(d,k);g+=T(d,f,c,e)}else if(null===a||\"object\"!==typeof a?f=null:(f=B&&a[B]||a[\"@@iterator\"],f=\"function\"===typeof f?f:null),\"function\"===typeof f)for(a=f.call(a),k=\n0;!(d=a.next()).done;)d=d.value,f=b+U(d,k++),g+=T(d,f,c,e);else if(\"object\"===d)throw c=\"\"+a,Error(C(31,\"[object Object]\"===c?\"object with keys {\"+Object.keys(a).join(\", \")+\"}\":c,\"\"));return g}function V(a,b,c){return null==a?0:T(a,\"\",b,c)}function U(a,b){return\"object\"===typeof a&&null!==a&&null!=a.key?escape(a.key):b.toString(36)}function W(a,b){a.func.call(a.context,b,a.count++)}\nfunction aa(a,b,c){var e=a.result,d=a.keyPrefix;a=a.func.call(a.context,b,a.count++);Array.isArray(a)?X(a,e,c,function(a){return a}):null!=a&&(O(a)&&(a=N(a,d+(!a.key||b&&b.key===a.key?\"\":(\"\"+a.key).replace(P,\"$&/\")+\"/\")+c)),e.push(a))}function X(a,b,c,e,d){var g=\"\";null!=c&&(g=(\"\"+c).replace(P,\"$&/\")+\"/\");b=R(b,g,e,d);V(a,aa,b);S(b)}var Y={current:null};function Z(){var a=Y.current;if(null===a)throw Error(C(321));return a}\nvar ba={ReactCurrentDispatcher:Y,ReactCurrentBatchConfig:{suspense:null},ReactCurrentOwner:J,IsSomeRendererActing:{current:!1},assign:l};exports.Children={map:function(a,b,c){if(null==a)return a;var e=[];X(a,e,null,b,c);return e},forEach:function(a,b,c){if(null==a)return a;b=R(null,null,b,c);V(a,W,b);S(b)},count:function(a){return V(a,function(){return null},null)},toArray:function(a){var b=[];X(a,b,null,function(a){return a});return b},only:function(a){if(!O(a))throw Error(C(143));return a}};\nexports.Component=F;exports.Fragment=r;exports.Profiler=u;exports.PureComponent=H;exports.StrictMode=t;exports.Suspense=y;exports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=ba;\nexports.cloneElement=function(a,b,c){if(null===a||void 0===a)throw Error(C(267,a));var e=l({},a.props),d=a.key,g=a.ref,k=a._owner;if(null!=b){void 0!==b.ref&&(g=b.ref,k=J.current);void 0!==b.key&&(d=\"\"+b.key);if(a.type&&a.type.defaultProps)var f=a.type.defaultProps;for(h in b)K.call(b,h)&&!L.hasOwnProperty(h)&&(e[h]=void 0===b[h]&&void 0!==f?f[h]:b[h])}var h=arguments.length-2;if(1===h)e.children=c;else if(1<h){f=Array(h);for(var m=0;m<h;m++)f[m]=arguments[m+2];e.children=f}return{$$typeof:p,type:a.type,\nkey:d,ref:g,props:e,_owner:k}};exports.createContext=function(a,b){void 0===b&&(b=null);a={$$typeof:w,_calculateChangedBits:b,_currentValue:a,_currentValue2:a,_threadCount:0,Provider:null,Consumer:null};a.Provider={$$typeof:v,_context:a};return a.Consumer=a};exports.createElement=M;exports.createFactory=function(a){var b=M.bind(null,a);b.type=a;return b};exports.createRef=function(){return{current:null}};exports.forwardRef=function(a){return{$$typeof:x,render:a}};exports.isValidElement=O;\nexports.lazy=function(a){return{$$typeof:A,_ctor:a,_status:-1,_result:null}};exports.memo=function(a,b){return{$$typeof:z,type:a,compare:void 0===b?null:b}};exports.useCallback=function(a,b){return Z().useCallback(a,b)};exports.useContext=function(a,b){return Z().useContext(a,b)};exports.useDebugValue=function(){};exports.useEffect=function(a,b){return Z().useEffect(a,b)};exports.useImperativeHandle=function(a,b,c){return Z().useImperativeHandle(a,b,c)};\nexports.useLayoutEffect=function(a,b){return Z().useLayoutEffect(a,b)};exports.useMemo=function(a,b){return Z().useMemo(a,b)};exports.useReducer=function(a,b,c){return Z().useReducer(a,b,c)};exports.useRef=function(a){return Z().useRef(a)};exports.useState=function(a){return Z().useState(a)};exports.version=\"16.14.0\";\n","/**\n * @file\n * Main client/SSR entry point.\n *\n * You probably don't want to touch anything in here unless you know what\n * you're doing. #justsayin\n */\n\nimport React from 'react';\nimport { hydrate, render } from 'react-dom';\nimport '@financial-times/g-components/g-components.css';\nimport App from './app';\nimport './styles.scss';\n\nconst rootElement = document.getElementById('root');\n\nif (rootElement.hasChildNodes()) {\n  hydrate(<App />, rootElement);\n} else {\n  render(<App />, rootElement);\n}\n","/** @license React v16.14.0\n * react-dom.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n'use strict';var aa=require(\"react\"),n=require(\"object-assign\"),r=require(\"scheduler\");function u(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;c<arguments.length;c++)b+=\"&args[]=\"+encodeURIComponent(arguments[c]);return\"Minified React error #\"+a+\"; visit \"+b+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"}if(!aa)throw Error(u(227));\nfunction ba(a,b,c,d,e,f,g,h,k){var l=Array.prototype.slice.call(arguments,3);try{b.apply(c,l)}catch(m){this.onError(m)}}var da=!1,ea=null,fa=!1,ha=null,ia={onError:function(a){da=!0;ea=a}};function ja(a,b,c,d,e,f,g,h,k){da=!1;ea=null;ba.apply(ia,arguments)}function ka(a,b,c,d,e,f,g,h,k){ja.apply(this,arguments);if(da){if(da){var l=ea;da=!1;ea=null}else throw Error(u(198));fa||(fa=!0,ha=l)}}var la=null,ma=null,na=null;\nfunction oa(a,b,c){var d=a.type||\"unknown-event\";a.currentTarget=na(c);ka(d,b,void 0,a);a.currentTarget=null}var pa=null,qa={};\nfunction ra(){if(pa)for(var a in qa){var b=qa[a],c=pa.indexOf(a);if(!(-1<c))throw Error(u(96,a));if(!sa[c]){if(!b.extractEvents)throw Error(u(97,a));sa[c]=b;c=b.eventTypes;for(var d in c){var e=void 0;var f=c[d],g=b,h=d;if(ta.hasOwnProperty(h))throw Error(u(99,h));ta[h]=f;var k=f.phasedRegistrationNames;if(k){for(e in k)k.hasOwnProperty(e)&&ua(k[e],g,h);e=!0}else f.registrationName?(ua(f.registrationName,g,h),e=!0):e=!1;if(!e)throw Error(u(98,d,a));}}}}\nfunction ua(a,b,c){if(va[a])throw Error(u(100,a));va[a]=b;wa[a]=b.eventTypes[c].dependencies}var sa=[],ta={},va={},wa={};function xa(a){var b=!1,c;for(c in a)if(a.hasOwnProperty(c)){var d=a[c];if(!qa.hasOwnProperty(c)||qa[c]!==d){if(qa[c])throw Error(u(102,c));qa[c]=d;b=!0}}b&&ra()}var ya=!(\"undefined\"===typeof window||\"undefined\"===typeof window.document||\"undefined\"===typeof window.document.createElement),za=null,Aa=null,Ba=null;\nfunction Ca(a){if(a=ma(a)){if(\"function\"!==typeof za)throw Error(u(280));var b=a.stateNode;b&&(b=la(b),za(a.stateNode,a.type,b))}}function Da(a){Aa?Ba?Ba.push(a):Ba=[a]:Aa=a}function Ea(){if(Aa){var a=Aa,b=Ba;Ba=Aa=null;Ca(a);if(b)for(a=0;a<b.length;a++)Ca(b[a])}}function Fa(a,b){return a(b)}function Ga(a,b,c,d,e){return a(b,c,d,e)}function Ha(){}var Ia=Fa,Ja=!1,Ka=!1;function La(){if(null!==Aa||null!==Ba)Ha(),Ea()}\nfunction Ma(a,b,c){if(Ka)return a(b,c);Ka=!0;try{return Ia(a,b,c)}finally{Ka=!1,La()}}var Na=/^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$/,Oa=Object.prototype.hasOwnProperty,Pa={},Qa={};\nfunction Ra(a){if(Oa.call(Qa,a))return!0;if(Oa.call(Pa,a))return!1;if(Na.test(a))return Qa[a]=!0;Pa[a]=!0;return!1}function Sa(a,b,c,d){if(null!==c&&0===c.type)return!1;switch(typeof b){case \"function\":case \"symbol\":return!0;case \"boolean\":if(d)return!1;if(null!==c)return!c.acceptsBooleans;a=a.toLowerCase().slice(0,5);return\"data-\"!==a&&\"aria-\"!==a;default:return!1}}\nfunction Ta(a,b,c,d){if(null===b||\"undefined\"===typeof b||Sa(a,b,c,d))return!0;if(d)return!1;if(null!==c)switch(c.type){case 3:return!b;case 4:return!1===b;case 5:return isNaN(b);case 6:return isNaN(b)||1>b}return!1}function v(a,b,c,d,e,f){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=f}var C={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){C[a]=new v(a,0,!1,a,null,!1)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];C[b]=new v(b,1,!1,a[1],null,!1)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){C[a]=new v(a,2,!1,a.toLowerCase(),null,!1)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){C[a]=new v(a,2,!1,a,null,!1)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(a){C[a]=new v(a,3,!1,a.toLowerCase(),null,!1)});\n[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){C[a]=new v(a,3,!0,a,null,!1)});[\"capture\",\"download\"].forEach(function(a){C[a]=new v(a,4,!1,a,null,!1)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){C[a]=new v(a,6,!1,a,null,!1)});[\"rowSpan\",\"start\"].forEach(function(a){C[a]=new v(a,5,!1,a.toLowerCase(),null,!1)});var Ua=/[\\-:]([a-z])/g;function Va(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(a){var b=a.replace(Ua,\nVa);C[b]=new v(b,1,!1,a,null,!1)});\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(Ua,Va);C[b]=new v(b,1,!1,a,\"http://www.w3.org/1999/xlink\",!1)});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(Ua,Va);C[b]=new v(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\",!1)});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){C[a]=new v(a,1,!1,a.toLowerCase(),null,!1)});\nC.xlinkHref=new v(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0);[\"src\",\"href\",\"action\",\"formAction\"].forEach(function(a){C[a]=new v(a,1,!1,a.toLowerCase(),null,!0)});var Wa=aa.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;Wa.hasOwnProperty(\"ReactCurrentDispatcher\")||(Wa.ReactCurrentDispatcher={current:null});Wa.hasOwnProperty(\"ReactCurrentBatchConfig\")||(Wa.ReactCurrentBatchConfig={suspense:null});\nfunction Xa(a,b,c,d){var e=C.hasOwnProperty(b)?C[b]:null;var f=null!==e?0===e.type:d?!1:!(2<b.length)||\"o\"!==b[0]&&\"O\"!==b[0]||\"n\"!==b[1]&&\"N\"!==b[1]?!1:!0;f||(Ta(b,c,e,d)&&(c=null),d||null===e?Ra(b)&&(null===c?a.removeAttribute(b):a.setAttribute(b,\"\"+c)):e.mustUseProperty?a[e.propertyName]=null===c?3===e.type?!1:\"\":c:(b=e.attributeName,d=e.attributeNamespace,null===c?a.removeAttribute(b):(e=e.type,c=3===e||4===e&&!0===c?\"\":\"\"+c,d?a.setAttributeNS(d,b,c):a.setAttribute(b,c))))}\nvar Ya=/^(.*)[\\\\\\/]/,E=\"function\"===typeof Symbol&&Symbol.for,Za=E?Symbol.for(\"react.element\"):60103,$a=E?Symbol.for(\"react.portal\"):60106,ab=E?Symbol.for(\"react.fragment\"):60107,bb=E?Symbol.for(\"react.strict_mode\"):60108,cb=E?Symbol.for(\"react.profiler\"):60114,db=E?Symbol.for(\"react.provider\"):60109,eb=E?Symbol.for(\"react.context\"):60110,fb=E?Symbol.for(\"react.concurrent_mode\"):60111,gb=E?Symbol.for(\"react.forward_ref\"):60112,hb=E?Symbol.for(\"react.suspense\"):60113,ib=E?Symbol.for(\"react.suspense_list\"):\n60120,jb=E?Symbol.for(\"react.memo\"):60115,kb=E?Symbol.for(\"react.lazy\"):60116,lb=E?Symbol.for(\"react.block\"):60121,mb=\"function\"===typeof Symbol&&Symbol.iterator;function nb(a){if(null===a||\"object\"!==typeof a)return null;a=mb&&a[mb]||a[\"@@iterator\"];return\"function\"===typeof a?a:null}function ob(a){if(-1===a._status){a._status=0;var b=a._ctor;b=b();a._result=b;b.then(function(b){0===a._status&&(b=b.default,a._status=1,a._result=b)},function(b){0===a._status&&(a._status=2,a._result=b)})}}\nfunction pb(a){if(null==a)return null;if(\"function\"===typeof a)return a.displayName||a.name||null;if(\"string\"===typeof a)return a;switch(a){case ab:return\"Fragment\";case $a:return\"Portal\";case cb:return\"Profiler\";case bb:return\"StrictMode\";case hb:return\"Suspense\";case ib:return\"SuspenseList\"}if(\"object\"===typeof a)switch(a.$$typeof){case eb:return\"Context.Consumer\";case db:return\"Context.Provider\";case gb:var b=a.render;b=b.displayName||b.name||\"\";return a.displayName||(\"\"!==b?\"ForwardRef(\"+b+\")\":\n\"ForwardRef\");case jb:return pb(a.type);case lb:return pb(a.render);case kb:if(a=1===a._status?a._result:null)return pb(a)}return null}function qb(a){var b=\"\";do{a:switch(a.tag){case 3:case 4:case 6:case 7:case 10:case 9:var c=\"\";break a;default:var d=a._debugOwner,e=a._debugSource,f=pb(a.type);c=null;d&&(c=pb(d.type));d=f;f=\"\";e?f=\" (at \"+e.fileName.replace(Ya,\"\")+\":\"+e.lineNumber+\")\":c&&(f=\" (created by \"+c+\")\");c=\"\\n    in \"+(d||\"Unknown\")+f}b+=c;a=a.return}while(a);return b}\nfunction rb(a){switch(typeof a){case \"boolean\":case \"number\":case \"object\":case \"string\":case \"undefined\":return a;default:return\"\"}}function sb(a){var b=a.type;return(a=a.nodeName)&&\"input\"===a.toLowerCase()&&(\"checkbox\"===b||\"radio\"===b)}\nfunction tb(a){var b=sb(a)?\"checked\":\"value\",c=Object.getOwnPropertyDescriptor(a.constructor.prototype,b),d=\"\"+a[b];if(!a.hasOwnProperty(b)&&\"undefined\"!==typeof c&&\"function\"===typeof c.get&&\"function\"===typeof c.set){var e=c.get,f=c.set;Object.defineProperty(a,b,{configurable:!0,get:function(){return e.call(this)},set:function(a){d=\"\"+a;f.call(this,a)}});Object.defineProperty(a,b,{enumerable:c.enumerable});return{getValue:function(){return d},setValue:function(a){d=\"\"+a},stopTracking:function(){a._valueTracker=\nnull;delete a[b]}}}}function xb(a){a._valueTracker||(a._valueTracker=tb(a))}function yb(a){if(!a)return!1;var b=a._valueTracker;if(!b)return!0;var c=b.getValue();var d=\"\";a&&(d=sb(a)?a.checked?\"true\":\"false\":a.value);a=d;return a!==c?(b.setValue(a),!0):!1}function zb(a,b){var c=b.checked;return n({},b,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=c?c:a._wrapperState.initialChecked})}\nfunction Ab(a,b){var c=null==b.defaultValue?\"\":b.defaultValue,d=null!=b.checked?b.checked:b.defaultChecked;c=rb(null!=b.value?b.value:c);a._wrapperState={initialChecked:d,initialValue:c,controlled:\"checkbox\"===b.type||\"radio\"===b.type?null!=b.checked:null!=b.value}}function Bb(a,b){b=b.checked;null!=b&&Xa(a,\"checked\",b,!1)}\nfunction Cb(a,b){Bb(a,b);var c=rb(b.value),d=b.type;if(null!=c)if(\"number\"===d){if(0===c&&\"\"===a.value||a.value!=c)a.value=\"\"+c}else a.value!==\"\"+c&&(a.value=\"\"+c);else if(\"submit\"===d||\"reset\"===d){a.removeAttribute(\"value\");return}b.hasOwnProperty(\"value\")?Db(a,b.type,c):b.hasOwnProperty(\"defaultValue\")&&Db(a,b.type,rb(b.defaultValue));null==b.checked&&null!=b.defaultChecked&&(a.defaultChecked=!!b.defaultChecked)}\nfunction Eb(a,b,c){if(b.hasOwnProperty(\"value\")||b.hasOwnProperty(\"defaultValue\")){var d=b.type;if(!(\"submit\"!==d&&\"reset\"!==d||void 0!==b.value&&null!==b.value))return;b=\"\"+a._wrapperState.initialValue;c||b===a.value||(a.value=b);a.defaultValue=b}c=a.name;\"\"!==c&&(a.name=\"\");a.defaultChecked=!!a._wrapperState.initialChecked;\"\"!==c&&(a.name=c)}\nfunction Db(a,b,c){if(\"number\"!==b||a.ownerDocument.activeElement!==a)null==c?a.defaultValue=\"\"+a._wrapperState.initialValue:a.defaultValue!==\"\"+c&&(a.defaultValue=\"\"+c)}function Fb(a){var b=\"\";aa.Children.forEach(a,function(a){null!=a&&(b+=a)});return b}function Gb(a,b){a=n({children:void 0},b);if(b=Fb(b.children))a.children=b;return a}\nfunction Hb(a,b,c,d){a=a.options;if(b){b={};for(var e=0;e<c.length;e++)b[\"$\"+c[e]]=!0;for(c=0;c<a.length;c++)e=b.hasOwnProperty(\"$\"+a[c].value),a[c].selected!==e&&(a[c].selected=e),e&&d&&(a[c].defaultSelected=!0)}else{c=\"\"+rb(c);b=null;for(e=0;e<a.length;e++){if(a[e].value===c){a[e].selected=!0;d&&(a[e].defaultSelected=!0);return}null!==b||a[e].disabled||(b=a[e])}null!==b&&(b.selected=!0)}}\nfunction Ib(a,b){if(null!=b.dangerouslySetInnerHTML)throw Error(u(91));return n({},b,{value:void 0,defaultValue:void 0,children:\"\"+a._wrapperState.initialValue})}function Jb(a,b){var c=b.value;if(null==c){c=b.children;b=b.defaultValue;if(null!=c){if(null!=b)throw Error(u(92));if(Array.isArray(c)){if(!(1>=c.length))throw Error(u(93));c=c[0]}b=c}null==b&&(b=\"\");c=b}a._wrapperState={initialValue:rb(c)}}\nfunction Kb(a,b){var c=rb(b.value),d=rb(b.defaultValue);null!=c&&(c=\"\"+c,c!==a.value&&(a.value=c),null==b.defaultValue&&a.defaultValue!==c&&(a.defaultValue=c));null!=d&&(a.defaultValue=\"\"+d)}function Lb(a){var b=a.textContent;b===a._wrapperState.initialValue&&\"\"!==b&&null!==b&&(a.value=b)}var Mb={html:\"http://www.w3.org/1999/xhtml\",mathml:\"http://www.w3.org/1998/Math/MathML\",svg:\"http://www.w3.org/2000/svg\"};\nfunction Nb(a){switch(a){case \"svg\":return\"http://www.w3.org/2000/svg\";case \"math\":return\"http://www.w3.org/1998/Math/MathML\";default:return\"http://www.w3.org/1999/xhtml\"}}function Ob(a,b){return null==a||\"http://www.w3.org/1999/xhtml\"===a?Nb(b):\"http://www.w3.org/2000/svg\"===a&&\"foreignObject\"===b?\"http://www.w3.org/1999/xhtml\":a}\nvar Pb,Qb=function(a){return\"undefined\"!==typeof MSApp&&MSApp.execUnsafeLocalFunction?function(b,c,d,e){MSApp.execUnsafeLocalFunction(function(){return a(b,c,d,e)})}:a}(function(a,b){if(a.namespaceURI!==Mb.svg||\"innerHTML\"in a)a.innerHTML=b;else{Pb=Pb||document.createElement(\"div\");Pb.innerHTML=\"<svg>\"+b.valueOf().toString()+\"</svg>\";for(b=Pb.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction Rb(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}function Sb(a,b){var c={};c[a.toLowerCase()]=b.toLowerCase();c[\"Webkit\"+a]=\"webkit\"+b;c[\"Moz\"+a]=\"moz\"+b;return c}var Tb={animationend:Sb(\"Animation\",\"AnimationEnd\"),animationiteration:Sb(\"Animation\",\"AnimationIteration\"),animationstart:Sb(\"Animation\",\"AnimationStart\"),transitionend:Sb(\"Transition\",\"TransitionEnd\")},Ub={},Vb={};\nya&&(Vb=document.createElement(\"div\").style,\"AnimationEvent\"in window||(delete Tb.animationend.animation,delete Tb.animationiteration.animation,delete Tb.animationstart.animation),\"TransitionEvent\"in window||delete Tb.transitionend.transition);function Wb(a){if(Ub[a])return Ub[a];if(!Tb[a])return a;var b=Tb[a],c;for(c in b)if(b.hasOwnProperty(c)&&c in Vb)return Ub[a]=b[c];return a}\nvar Xb=Wb(\"animationend\"),Yb=Wb(\"animationiteration\"),Zb=Wb(\"animationstart\"),$b=Wb(\"transitionend\"),ac=\"abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting\".split(\" \"),bc=new (\"function\"===typeof WeakMap?WeakMap:Map);function cc(a){var b=bc.get(a);void 0===b&&(b=new Map,bc.set(a,b));return b}\nfunction dc(a){var b=a,c=a;if(a.alternate)for(;b.return;)b=b.return;else{a=b;do b=a,0!==(b.effectTag&1026)&&(c=b.return),a=b.return;while(a)}return 3===b.tag?c:null}function ec(a){if(13===a.tag){var b=a.memoizedState;null===b&&(a=a.alternate,null!==a&&(b=a.memoizedState));if(null!==b)return b.dehydrated}return null}function fc(a){if(dc(a)!==a)throw Error(u(188));}\nfunction gc(a){var b=a.alternate;if(!b){b=dc(a);if(null===b)throw Error(u(188));return b!==a?null:a}for(var c=a,d=b;;){var e=c.return;if(null===e)break;var f=e.alternate;if(null===f){d=e.return;if(null!==d){c=d;continue}break}if(e.child===f.child){for(f=e.child;f;){if(f===c)return fc(e),a;if(f===d)return fc(e),b;f=f.sibling}throw Error(u(188));}if(c.return!==d.return)c=e,d=f;else{for(var g=!1,h=e.child;h;){if(h===c){g=!0;c=e;d=f;break}if(h===d){g=!0;d=e;c=f;break}h=h.sibling}if(!g){for(h=f.child;h;){if(h===\nc){g=!0;c=f;d=e;break}if(h===d){g=!0;d=f;c=e;break}h=h.sibling}if(!g)throw Error(u(189));}}if(c.alternate!==d)throw Error(u(190));}if(3!==c.tag)throw Error(u(188));return c.stateNode.current===c?a:b}function hc(a){a=gc(a);if(!a)return null;for(var b=a;;){if(5===b.tag||6===b.tag)return b;if(b.child)b.child.return=b,b=b.child;else{if(b===a)break;for(;!b.sibling;){if(!b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}}return null}\nfunction ic(a,b){if(null==b)throw Error(u(30));if(null==a)return b;if(Array.isArray(a)){if(Array.isArray(b))return a.push.apply(a,b),a;a.push(b);return a}return Array.isArray(b)?[a].concat(b):[a,b]}function jc(a,b,c){Array.isArray(a)?a.forEach(b,c):a&&b.call(c,a)}var kc=null;\nfunction lc(a){if(a){var b=a._dispatchListeners,c=a._dispatchInstances;if(Array.isArray(b))for(var d=0;d<b.length&&!a.isPropagationStopped();d++)oa(a,b[d],c[d]);else b&&oa(a,b,c);a._dispatchListeners=null;a._dispatchInstances=null;a.isPersistent()||a.constructor.release(a)}}function mc(a){null!==a&&(kc=ic(kc,a));a=kc;kc=null;if(a){jc(a,lc);if(kc)throw Error(u(95));if(fa)throw a=ha,fa=!1,ha=null,a;}}\nfunction nc(a){a=a.target||a.srcElement||window;a.correspondingUseElement&&(a=a.correspondingUseElement);return 3===a.nodeType?a.parentNode:a}function oc(a){if(!ya)return!1;a=\"on\"+a;var b=a in document;b||(b=document.createElement(\"div\"),b.setAttribute(a,\"return;\"),b=\"function\"===typeof b[a]);return b}var pc=[];function qc(a){a.topLevelType=null;a.nativeEvent=null;a.targetInst=null;a.ancestors.length=0;10>pc.length&&pc.push(a)}\nfunction rc(a,b,c,d){if(pc.length){var e=pc.pop();e.topLevelType=a;e.eventSystemFlags=d;e.nativeEvent=b;e.targetInst=c;return e}return{topLevelType:a,eventSystemFlags:d,nativeEvent:b,targetInst:c,ancestors:[]}}\nfunction sc(a){var b=a.targetInst,c=b;do{if(!c){a.ancestors.push(c);break}var d=c;if(3===d.tag)d=d.stateNode.containerInfo;else{for(;d.return;)d=d.return;d=3!==d.tag?null:d.stateNode.containerInfo}if(!d)break;b=c.tag;5!==b&&6!==b||a.ancestors.push(c);c=tc(d)}while(c);for(c=0;c<a.ancestors.length;c++){b=a.ancestors[c];var e=nc(a.nativeEvent);d=a.topLevelType;var f=a.nativeEvent,g=a.eventSystemFlags;0===c&&(g|=64);for(var h=null,k=0;k<sa.length;k++){var l=sa[k];l&&(l=l.extractEvents(d,b,f,e,g))&&(h=\nic(h,l))}mc(h)}}function uc(a,b,c){if(!c.has(a)){switch(a){case \"scroll\":vc(b,\"scroll\",!0);break;case \"focus\":case \"blur\":vc(b,\"focus\",!0);vc(b,\"blur\",!0);c.set(\"blur\",null);c.set(\"focus\",null);break;case \"cancel\":case \"close\":oc(a)&&vc(b,a,!0);break;case \"invalid\":case \"submit\":case \"reset\":break;default:-1===ac.indexOf(a)&&F(a,b)}c.set(a,null)}}\nvar wc,xc,yc,zc=!1,Ac=[],Bc=null,Cc=null,Dc=null,Ec=new Map,Fc=new Map,Gc=[],Hc=\"mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput close cancel copy cut paste click change contextmenu reset submit\".split(\" \"),Ic=\"focus blur dragenter dragleave mouseover mouseout pointerover pointerout gotpointercapture lostpointercapture\".split(\" \");\nfunction Jc(a,b){var c=cc(b);Hc.forEach(function(a){uc(a,b,c)});Ic.forEach(function(a){uc(a,b,c)})}function Kc(a,b,c,d,e){return{blockedOn:a,topLevelType:b,eventSystemFlags:c|32,nativeEvent:e,container:d}}\nfunction Lc(a,b){switch(a){case \"focus\":case \"blur\":Bc=null;break;case \"dragenter\":case \"dragleave\":Cc=null;break;case \"mouseover\":case \"mouseout\":Dc=null;break;case \"pointerover\":case \"pointerout\":Ec.delete(b.pointerId);break;case \"gotpointercapture\":case \"lostpointercapture\":Fc.delete(b.pointerId)}}function Mc(a,b,c,d,e,f){if(null===a||a.nativeEvent!==f)return a=Kc(b,c,d,e,f),null!==b&&(b=Nc(b),null!==b&&xc(b)),a;a.eventSystemFlags|=d;return a}\nfunction Oc(a,b,c,d,e){switch(b){case \"focus\":return Bc=Mc(Bc,a,b,c,d,e),!0;case \"dragenter\":return Cc=Mc(Cc,a,b,c,d,e),!0;case \"mouseover\":return Dc=Mc(Dc,a,b,c,d,e),!0;case \"pointerover\":var f=e.pointerId;Ec.set(f,Mc(Ec.get(f)||null,a,b,c,d,e));return!0;case \"gotpointercapture\":return f=e.pointerId,Fc.set(f,Mc(Fc.get(f)||null,a,b,c,d,e)),!0}return!1}\nfunction Pc(a){var b=tc(a.target);if(null!==b){var c=dc(b);if(null!==c)if(b=c.tag,13===b){if(b=ec(c),null!==b){a.blockedOn=b;r.unstable_runWithPriority(a.priority,function(){yc(c)});return}}else if(3===b&&c.stateNode.hydrate){a.blockedOn=3===c.tag?c.stateNode.containerInfo:null;return}}a.blockedOn=null}function Qc(a){if(null!==a.blockedOn)return!1;var b=Rc(a.topLevelType,a.eventSystemFlags,a.container,a.nativeEvent);if(null!==b){var c=Nc(b);null!==c&&xc(c);a.blockedOn=b;return!1}return!0}\nfunction Sc(a,b,c){Qc(a)&&c.delete(b)}function Tc(){for(zc=!1;0<Ac.length;){var a=Ac[0];if(null!==a.blockedOn){a=Nc(a.blockedOn);null!==a&&wc(a);break}var b=Rc(a.topLevelType,a.eventSystemFlags,a.container,a.nativeEvent);null!==b?a.blockedOn=b:Ac.shift()}null!==Bc&&Qc(Bc)&&(Bc=null);null!==Cc&&Qc(Cc)&&(Cc=null);null!==Dc&&Qc(Dc)&&(Dc=null);Ec.forEach(Sc);Fc.forEach(Sc)}function Uc(a,b){a.blockedOn===b&&(a.blockedOn=null,zc||(zc=!0,r.unstable_scheduleCallback(r.unstable_NormalPriority,Tc)))}\nfunction Vc(a){function b(b){return Uc(b,a)}if(0<Ac.length){Uc(Ac[0],a);for(var c=1;c<Ac.length;c++){var d=Ac[c];d.blockedOn===a&&(d.blockedOn=null)}}null!==Bc&&Uc(Bc,a);null!==Cc&&Uc(Cc,a);null!==Dc&&Uc(Dc,a);Ec.forEach(b);Fc.forEach(b);for(c=0;c<Gc.length;c++)d=Gc[c],d.blockedOn===a&&(d.blockedOn=null);for(;0<Gc.length&&(c=Gc[0],null===c.blockedOn);)Pc(c),null===c.blockedOn&&Gc.shift()}\nvar Wc={},Yc=new Map,Zc=new Map,$c=[\"abort\",\"abort\",Xb,\"animationEnd\",Yb,\"animationIteration\",Zb,\"animationStart\",\"canplay\",\"canPlay\",\"canplaythrough\",\"canPlayThrough\",\"durationchange\",\"durationChange\",\"emptied\",\"emptied\",\"encrypted\",\"encrypted\",\"ended\",\"ended\",\"error\",\"error\",\"gotpointercapture\",\"gotPointerCapture\",\"load\",\"load\",\"loadeddata\",\"loadedData\",\"loadedmetadata\",\"loadedMetadata\",\"loadstart\",\"loadStart\",\"lostpointercapture\",\"lostPointerCapture\",\"playing\",\"playing\",\"progress\",\"progress\",\"seeking\",\n\"seeking\",\"stalled\",\"stalled\",\"suspend\",\"suspend\",\"timeupdate\",\"timeUpdate\",$b,\"transitionEnd\",\"waiting\",\"waiting\"];function ad(a,b){for(var c=0;c<a.length;c+=2){var d=a[c],e=a[c+1],f=\"on\"+(e[0].toUpperCase()+e.slice(1));f={phasedRegistrationNames:{bubbled:f,captured:f+\"Capture\"},dependencies:[d],eventPriority:b};Zc.set(d,b);Yc.set(d,f);Wc[e]=f}}\nad(\"blur blur cancel cancel click click close close contextmenu contextMenu copy copy cut cut auxclick auxClick dblclick doubleClick dragend dragEnd dragstart dragStart drop drop focus focus input input invalid invalid keydown keyDown keypress keyPress keyup keyUp mousedown mouseDown mouseup mouseUp paste paste pause pause play play pointercancel pointerCancel pointerdown pointerDown pointerup pointerUp ratechange rateChange reset reset seeked seeked submit submit touchcancel touchCancel touchend touchEnd touchstart touchStart volumechange volumeChange\".split(\" \"),0);\nad(\"drag drag dragenter dragEnter dragexit dragExit dragleave dragLeave dragover dragOver mousemove mouseMove mouseout mouseOut mouseover mouseOver pointermove pointerMove pointerout pointerOut pointerover pointerOver scroll scroll toggle toggle touchmove touchMove wheel wheel\".split(\" \"),1);ad($c,2);for(var bd=\"change selectionchange textInput compositionstart compositionend compositionupdate\".split(\" \"),cd=0;cd<bd.length;cd++)Zc.set(bd[cd],0);\nvar dd=r.unstable_UserBlockingPriority,ed=r.unstable_runWithPriority,fd=!0;function F(a,b){vc(b,a,!1)}function vc(a,b,c){var d=Zc.get(b);switch(void 0===d?2:d){case 0:d=gd.bind(null,b,1,a);break;case 1:d=hd.bind(null,b,1,a);break;default:d=id.bind(null,b,1,a)}c?a.addEventListener(b,d,!0):a.addEventListener(b,d,!1)}function gd(a,b,c,d){Ja||Ha();var e=id,f=Ja;Ja=!0;try{Ga(e,a,b,c,d)}finally{(Ja=f)||La()}}function hd(a,b,c,d){ed(dd,id.bind(null,a,b,c,d))}\nfunction id(a,b,c,d){if(fd)if(0<Ac.length&&-1<Hc.indexOf(a))a=Kc(null,a,b,c,d),Ac.push(a);else{var e=Rc(a,b,c,d);if(null===e)Lc(a,d);else if(-1<Hc.indexOf(a))a=Kc(e,a,b,c,d),Ac.push(a);else if(!Oc(e,a,b,c,d)){Lc(a,d);a=rc(a,d,null,b);try{Ma(sc,a)}finally{qc(a)}}}}\nfunction Rc(a,b,c,d){c=nc(d);c=tc(c);if(null!==c){var e=dc(c);if(null===e)c=null;else{var f=e.tag;if(13===f){c=ec(e);if(null!==c)return c;c=null}else if(3===f){if(e.stateNode.hydrate)return 3===e.tag?e.stateNode.containerInfo:null;c=null}else e!==c&&(c=null)}}a=rc(a,d,c,b);try{Ma(sc,a)}finally{qc(a)}return null}\nvar jd={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,\nfloodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},kd=[\"Webkit\",\"ms\",\"Moz\",\"O\"];Object.keys(jd).forEach(function(a){kd.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);jd[b]=jd[a]})});function ld(a,b,c){return null==b||\"boolean\"===typeof b||\"\"===b?\"\":c||\"number\"!==typeof b||0===b||jd.hasOwnProperty(a)&&jd[a]?(\"\"+b).trim():b+\"px\"}\nfunction md(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=0===c.indexOf(\"--\"),e=ld(c,b[c],d);\"float\"===c&&(c=\"cssFloat\");d?a.setProperty(c,e):a[c]=e}}var nd=n({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});\nfunction od(a,b){if(b){if(nd[a]&&(null!=b.children||null!=b.dangerouslySetInnerHTML))throw Error(u(137,a,\"\"));if(null!=b.dangerouslySetInnerHTML){if(null!=b.children)throw Error(u(60));if(!(\"object\"===typeof b.dangerouslySetInnerHTML&&\"__html\"in b.dangerouslySetInnerHTML))throw Error(u(61));}if(null!=b.style&&\"object\"!==typeof b.style)throw Error(u(62,\"\"));}}\nfunction pd(a,b){if(-1===a.indexOf(\"-\"))return\"string\"===typeof b.is;switch(a){case \"annotation-xml\":case \"color-profile\":case \"font-face\":case \"font-face-src\":case \"font-face-uri\":case \"font-face-format\":case \"font-face-name\":case \"missing-glyph\":return!1;default:return!0}}var qd=Mb.html;function rd(a,b){a=9===a.nodeType||11===a.nodeType?a:a.ownerDocument;var c=cc(a);b=wa[b];for(var d=0;d<b.length;d++)uc(b[d],a,c)}function sd(){}\nfunction td(a){a=a||(\"undefined\"!==typeof document?document:void 0);if(\"undefined\"===typeof a)return null;try{return a.activeElement||a.body}catch(b){return a.body}}function ud(a){for(;a&&a.firstChild;)a=a.firstChild;return a}function vd(a,b){var c=ud(a);a=0;for(var d;c;){if(3===c.nodeType){d=a+c.textContent.length;if(a<=b&&d>=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=ud(c)}}\nfunction wd(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?wd(a,b.parentNode):\"contains\"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1}function xd(){for(var a=window,b=td();b instanceof a.HTMLIFrameElement;){try{var c=\"string\"===typeof b.contentWindow.location.href}catch(d){c=!1}if(c)a=b.contentWindow;else break;b=td(a.document)}return b}\nfunction yd(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&(\"text\"===a.type||\"search\"===a.type||\"tel\"===a.type||\"url\"===a.type||\"password\"===a.type)||\"textarea\"===b||\"true\"===a.contentEditable)}var zd=\"$\",Ad=\"/$\",Bd=\"$?\",Cd=\"$!\",Dd=null,Ed=null;function Fd(a,b){switch(a){case \"button\":case \"input\":case \"select\":case \"textarea\":return!!b.autoFocus}return!1}\nfunction Gd(a,b){return\"textarea\"===a||\"option\"===a||\"noscript\"===a||\"string\"===typeof b.children||\"number\"===typeof b.children||\"object\"===typeof b.dangerouslySetInnerHTML&&null!==b.dangerouslySetInnerHTML&&null!=b.dangerouslySetInnerHTML.__html}var Hd=\"function\"===typeof setTimeout?setTimeout:void 0,Id=\"function\"===typeof clearTimeout?clearTimeout:void 0;function Jd(a){for(;null!=a;a=a.nextSibling){var b=a.nodeType;if(1===b||3===b)break}return a}\nfunction Kd(a){a=a.previousSibling;for(var b=0;a;){if(8===a.nodeType){var c=a.data;if(c===zd||c===Cd||c===Bd){if(0===b)return a;b--}else c===Ad&&b++}a=a.previousSibling}return null}var Ld=Math.random().toString(36).slice(2),Md=\"__reactInternalInstance$\"+Ld,Nd=\"__reactEventHandlers$\"+Ld,Od=\"__reactContainere$\"+Ld;\nfunction tc(a){var b=a[Md];if(b)return b;for(var c=a.parentNode;c;){if(b=c[Od]||c[Md]){c=b.alternate;if(null!==b.child||null!==c&&null!==c.child)for(a=Kd(a);null!==a;){if(c=a[Md])return c;a=Kd(a)}return b}a=c;c=a.parentNode}return null}function Nc(a){a=a[Md]||a[Od];return!a||5!==a.tag&&6!==a.tag&&13!==a.tag&&3!==a.tag?null:a}function Pd(a){if(5===a.tag||6===a.tag)return a.stateNode;throw Error(u(33));}function Qd(a){return a[Nd]||null}\nfunction Rd(a){do a=a.return;while(a&&5!==a.tag);return a?a:null}\nfunction Sd(a,b){var c=a.stateNode;if(!c)return null;var d=la(c);if(!d)return null;c=d[b];a:switch(b){case \"onClick\":case \"onClickCapture\":case \"onDoubleClick\":case \"onDoubleClickCapture\":case \"onMouseDown\":case \"onMouseDownCapture\":case \"onMouseMove\":case \"onMouseMoveCapture\":case \"onMouseUp\":case \"onMouseUpCapture\":case \"onMouseEnter\":(d=!d.disabled)||(a=a.type,d=!(\"button\"===a||\"input\"===a||\"select\"===a||\"textarea\"===a));a=!d;break a;default:a=!1}if(a)return null;if(c&&\"function\"!==typeof c)throw Error(u(231,\nb,typeof c));return c}function Td(a,b,c){if(b=Sd(a,c.dispatchConfig.phasedRegistrationNames[b]))c._dispatchListeners=ic(c._dispatchListeners,b),c._dispatchInstances=ic(c._dispatchInstances,a)}function Ud(a){if(a&&a.dispatchConfig.phasedRegistrationNames){for(var b=a._targetInst,c=[];b;)c.push(b),b=Rd(b);for(b=c.length;0<b--;)Td(c[b],\"captured\",a);for(b=0;b<c.length;b++)Td(c[b],\"bubbled\",a)}}\nfunction Vd(a,b,c){a&&c&&c.dispatchConfig.registrationName&&(b=Sd(a,c.dispatchConfig.registrationName))&&(c._dispatchListeners=ic(c._dispatchListeners,b),c._dispatchInstances=ic(c._dispatchInstances,a))}function Wd(a){a&&a.dispatchConfig.registrationName&&Vd(a._targetInst,null,a)}function Xd(a){jc(a,Ud)}var Yd=null,Zd=null,$d=null;\nfunction ae(){if($d)return $d;var a,b=Zd,c=b.length,d,e=\"value\"in Yd?Yd.value:Yd.textContent,f=e.length;for(a=0;a<c&&b[a]===e[a];a++);var g=c-a;for(d=1;d<=g&&b[c-d]===e[f-d];d++);return $d=e.slice(a,1<d?1-d:void 0)}function be(){return!0}function ce(){return!1}\nfunction G(a,b,c,d){this.dispatchConfig=a;this._targetInst=b;this.nativeEvent=c;a=this.constructor.Interface;for(var e in a)a.hasOwnProperty(e)&&((b=a[e])?this[e]=b(c):\"target\"===e?this.target=d:this[e]=c[e]);this.isDefaultPrevented=(null!=c.defaultPrevented?c.defaultPrevented:!1===c.returnValue)?be:ce;this.isPropagationStopped=ce;return this}\nn(G.prototype,{preventDefault:function(){this.defaultPrevented=!0;var a=this.nativeEvent;a&&(a.preventDefault?a.preventDefault():\"unknown\"!==typeof a.returnValue&&(a.returnValue=!1),this.isDefaultPrevented=be)},stopPropagation:function(){var a=this.nativeEvent;a&&(a.stopPropagation?a.stopPropagation():\"unknown\"!==typeof a.cancelBubble&&(a.cancelBubble=!0),this.isPropagationStopped=be)},persist:function(){this.isPersistent=be},isPersistent:ce,destructor:function(){var a=this.constructor.Interface,\nb;for(b in a)this[b]=null;this.nativeEvent=this._targetInst=this.dispatchConfig=null;this.isPropagationStopped=this.isDefaultPrevented=ce;this._dispatchInstances=this._dispatchListeners=null}});G.Interface={type:null,target:null,currentTarget:function(){return null},eventPhase:null,bubbles:null,cancelable:null,timeStamp:function(a){return a.timeStamp||Date.now()},defaultPrevented:null,isTrusted:null};\nG.extend=function(a){function b(){}function c(){return d.apply(this,arguments)}var d=this;b.prototype=d.prototype;var e=new b;n(e,c.prototype);c.prototype=e;c.prototype.constructor=c;c.Interface=n({},d.Interface,a);c.extend=d.extend;de(c);return c};de(G);function ee(a,b,c,d){if(this.eventPool.length){var e=this.eventPool.pop();this.call(e,a,b,c,d);return e}return new this(a,b,c,d)}\nfunction fe(a){if(!(a instanceof this))throw Error(u(279));a.destructor();10>this.eventPool.length&&this.eventPool.push(a)}function de(a){a.eventPool=[];a.getPooled=ee;a.release=fe}var ge=G.extend({data:null}),he=G.extend({data:null}),ie=[9,13,27,32],je=ya&&\"CompositionEvent\"in window,ke=null;ya&&\"documentMode\"in document&&(ke=document.documentMode);\nvar le=ya&&\"TextEvent\"in window&&!ke,me=ya&&(!je||ke&&8<ke&&11>=ke),ne=String.fromCharCode(32),oe={beforeInput:{phasedRegistrationNames:{bubbled:\"onBeforeInput\",captured:\"onBeforeInputCapture\"},dependencies:[\"compositionend\",\"keypress\",\"textInput\",\"paste\"]},compositionEnd:{phasedRegistrationNames:{bubbled:\"onCompositionEnd\",captured:\"onCompositionEndCapture\"},dependencies:\"blur compositionend keydown keypress keyup mousedown\".split(\" \")},compositionStart:{phasedRegistrationNames:{bubbled:\"onCompositionStart\",\ncaptured:\"onCompositionStartCapture\"},dependencies:\"blur compositionstart keydown keypress keyup mousedown\".split(\" \")},compositionUpdate:{phasedRegistrationNames:{bubbled:\"onCompositionUpdate\",captured:\"onCompositionUpdateCapture\"},dependencies:\"blur compositionupdate keydown keypress keyup mousedown\".split(\" \")}},pe=!1;\nfunction qe(a,b){switch(a){case \"keyup\":return-1!==ie.indexOf(b.keyCode);case \"keydown\":return 229!==b.keyCode;case \"keypress\":case \"mousedown\":case \"blur\":return!0;default:return!1}}function re(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var se=!1;function te(a,b){switch(a){case \"compositionend\":return re(b);case \"keypress\":if(32!==b.which)return null;pe=!0;return ne;case \"textInput\":return a=b.data,a===ne&&pe?null:a;default:return null}}\nfunction ue(a,b){if(se)return\"compositionend\"===a||!je&&qe(a,b)?(a=ae(),$d=Zd=Yd=null,se=!1,a):null;switch(a){case \"paste\":return null;case \"keypress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1<b.char.length)return b.char;if(b.which)return String.fromCharCode(b.which)}return null;case \"compositionend\":return me&&\"ko\"!==b.locale?null:b.data;default:return null}}\nvar ve={eventTypes:oe,extractEvents:function(a,b,c,d){var e;if(je)b:{switch(a){case \"compositionstart\":var f=oe.compositionStart;break b;case \"compositionend\":f=oe.compositionEnd;break b;case \"compositionupdate\":f=oe.compositionUpdate;break b}f=void 0}else se?qe(a,c)&&(f=oe.compositionEnd):\"keydown\"===a&&229===c.keyCode&&(f=oe.compositionStart);f?(me&&\"ko\"!==c.locale&&(se||f!==oe.compositionStart?f===oe.compositionEnd&&se&&(e=ae()):(Yd=d,Zd=\"value\"in Yd?Yd.value:Yd.textContent,se=!0)),f=ge.getPooled(f,\nb,c,d),e?f.data=e:(e=re(c),null!==e&&(f.data=e)),Xd(f),e=f):e=null;(a=le?te(a,c):ue(a,c))?(b=he.getPooled(oe.beforeInput,b,c,d),b.data=a,Xd(b)):b=null;return null===e?b:null===b?e:[e,b]}},we={color:!0,date:!0,datetime:!0,\"datetime-local\":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function xe(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return\"input\"===b?!!we[a.type]:\"textarea\"===b?!0:!1}\nvar ye={change:{phasedRegistrationNames:{bubbled:\"onChange\",captured:\"onChangeCapture\"},dependencies:\"blur change click focus input keydown keyup selectionchange\".split(\" \")}};function ze(a,b,c){a=G.getPooled(ye.change,a,b,c);a.type=\"change\";Da(c);Xd(a);return a}var Ae=null,Be=null;function Ce(a){mc(a)}function De(a){var b=Pd(a);if(yb(b))return a}function Ee(a,b){if(\"change\"===a)return b}var Fe=!1;ya&&(Fe=oc(\"input\")&&(!document.documentMode||9<document.documentMode));\nfunction Ge(){Ae&&(Ae.detachEvent(\"onpropertychange\",He),Be=Ae=null)}function He(a){if(\"value\"===a.propertyName&&De(Be))if(a=ze(Be,a,nc(a)),Ja)mc(a);else{Ja=!0;try{Fa(Ce,a)}finally{Ja=!1,La()}}}function Ie(a,b,c){\"focus\"===a?(Ge(),Ae=b,Be=c,Ae.attachEvent(\"onpropertychange\",He)):\"blur\"===a&&Ge()}function Je(a){if(\"selectionchange\"===a||\"keyup\"===a||\"keydown\"===a)return De(Be)}function Ke(a,b){if(\"click\"===a)return De(b)}function Le(a,b){if(\"input\"===a||\"change\"===a)return De(b)}\nvar Me={eventTypes:ye,_isInputEventSupported:Fe,extractEvents:function(a,b,c,d){var e=b?Pd(b):window,f=e.nodeName&&e.nodeName.toLowerCase();if(\"select\"===f||\"input\"===f&&\"file\"===e.type)var g=Ee;else if(xe(e))if(Fe)g=Le;else{g=Je;var h=Ie}else(f=e.nodeName)&&\"input\"===f.toLowerCase()&&(\"checkbox\"===e.type||\"radio\"===e.type)&&(g=Ke);if(g&&(g=g(a,b)))return ze(g,c,d);h&&h(a,e,b);\"blur\"===a&&(a=e._wrapperState)&&a.controlled&&\"number\"===e.type&&Db(e,\"number\",e.value)}},Ne=G.extend({view:null,detail:null}),\nOe={Alt:\"altKey\",Control:\"ctrlKey\",Meta:\"metaKey\",Shift:\"shiftKey\"};function Pe(a){var b=this.nativeEvent;return b.getModifierState?b.getModifierState(a):(a=Oe[a])?!!b[a]:!1}function Qe(){return Pe}\nvar Re=0,Se=0,Te=!1,Ue=!1,Ve=Ne.extend({screenX:null,screenY:null,clientX:null,clientY:null,pageX:null,pageY:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,getModifierState:Qe,button:null,buttons:null,relatedTarget:function(a){return a.relatedTarget||(a.fromElement===a.srcElement?a.toElement:a.fromElement)},movementX:function(a){if(\"movementX\"in a)return a.movementX;var b=Re;Re=a.screenX;return Te?\"mousemove\"===a.type?a.screenX-b:0:(Te=!0,0)},movementY:function(a){if(\"movementY\"in a)return a.movementY;\nvar b=Se;Se=a.screenY;return Ue?\"mousemove\"===a.type?a.screenY-b:0:(Ue=!0,0)}}),We=Ve.extend({pointerId:null,width:null,height:null,pressure:null,tangentialPressure:null,tiltX:null,tiltY:null,twist:null,pointerType:null,isPrimary:null}),Xe={mouseEnter:{registrationName:\"onMouseEnter\",dependencies:[\"mouseout\",\"mouseover\"]},mouseLeave:{registrationName:\"onMouseLeave\",dependencies:[\"mouseout\",\"mouseover\"]},pointerEnter:{registrationName:\"onPointerEnter\",dependencies:[\"pointerout\",\"pointerover\"]},pointerLeave:{registrationName:\"onPointerLeave\",\ndependencies:[\"pointerout\",\"pointerover\"]}},Ye={eventTypes:Xe,extractEvents:function(a,b,c,d,e){var f=\"mouseover\"===a||\"pointerover\"===a,g=\"mouseout\"===a||\"pointerout\"===a;if(f&&0===(e&32)&&(c.relatedTarget||c.fromElement)||!g&&!f)return null;f=d.window===d?d:(f=d.ownerDocument)?f.defaultView||f.parentWindow:window;if(g){if(g=b,b=(b=c.relatedTarget||c.toElement)?tc(b):null,null!==b){var h=dc(b);if(b!==h||5!==b.tag&&6!==b.tag)b=null}}else g=null;if(g===b)return null;if(\"mouseout\"===a||\"mouseover\"===\na){var k=Ve;var l=Xe.mouseLeave;var m=Xe.mouseEnter;var p=\"mouse\"}else if(\"pointerout\"===a||\"pointerover\"===a)k=We,l=Xe.pointerLeave,m=Xe.pointerEnter,p=\"pointer\";a=null==g?f:Pd(g);f=null==b?f:Pd(b);l=k.getPooled(l,g,c,d);l.type=p+\"leave\";l.target=a;l.relatedTarget=f;c=k.getPooled(m,b,c,d);c.type=p+\"enter\";c.target=f;c.relatedTarget=a;d=g;p=b;if(d&&p)a:{k=d;m=p;g=0;for(a=k;a;a=Rd(a))g++;a=0;for(b=m;b;b=Rd(b))a++;for(;0<g-a;)k=Rd(k),g--;for(;0<a-g;)m=Rd(m),a--;for(;g--;){if(k===m||k===m.alternate)break a;\nk=Rd(k);m=Rd(m)}k=null}else k=null;m=k;for(k=[];d&&d!==m;){g=d.alternate;if(null!==g&&g===m)break;k.push(d);d=Rd(d)}for(d=[];p&&p!==m;){g=p.alternate;if(null!==g&&g===m)break;d.push(p);p=Rd(p)}for(p=0;p<k.length;p++)Vd(k[p],\"bubbled\",l);for(p=d.length;0<p--;)Vd(d[p],\"captured\",c);return 0===(e&64)?[l]:[l,c]}};function Ze(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var $e=\"function\"===typeof Object.is?Object.is:Ze,af=Object.prototype.hasOwnProperty;\nfunction bf(a,b){if($e(a,b))return!0;if(\"object\"!==typeof a||null===a||\"object\"!==typeof b||null===b)return!1;var c=Object.keys(a),d=Object.keys(b);if(c.length!==d.length)return!1;for(d=0;d<c.length;d++)if(!af.call(b,c[d])||!$e(a[c[d]],b[c[d]]))return!1;return!0}\nvar cf=ya&&\"documentMode\"in document&&11>=document.documentMode,df={select:{phasedRegistrationNames:{bubbled:\"onSelect\",captured:\"onSelectCapture\"},dependencies:\"blur contextmenu dragend focus keydown keyup mousedown mouseup selectionchange\".split(\" \")}},ef=null,ff=null,gf=null,hf=!1;\nfunction jf(a,b){var c=b.window===b?b.document:9===b.nodeType?b:b.ownerDocument;if(hf||null==ef||ef!==td(c))return null;c=ef;\"selectionStart\"in c&&yd(c)?c={start:c.selectionStart,end:c.selectionEnd}:(c=(c.ownerDocument&&c.ownerDocument.defaultView||window).getSelection(),c={anchorNode:c.anchorNode,anchorOffset:c.anchorOffset,focusNode:c.focusNode,focusOffset:c.focusOffset});return gf&&bf(gf,c)?null:(gf=c,a=G.getPooled(df.select,ff,a,b),a.type=\"select\",a.target=ef,Xd(a),a)}\nvar kf={eventTypes:df,extractEvents:function(a,b,c,d,e,f){e=f||(d.window===d?d.document:9===d.nodeType?d:d.ownerDocument);if(!(f=!e)){a:{e=cc(e);f=wa.onSelect;for(var g=0;g<f.length;g++)if(!e.has(f[g])){e=!1;break a}e=!0}f=!e}if(f)return null;e=b?Pd(b):window;switch(a){case \"focus\":if(xe(e)||\"true\"===e.contentEditable)ef=e,ff=b,gf=null;break;case \"blur\":gf=ff=ef=null;break;case \"mousedown\":hf=!0;break;case \"contextmenu\":case \"mouseup\":case \"dragend\":return hf=!1,jf(c,d);case \"selectionchange\":if(cf)break;\ncase \"keydown\":case \"keyup\":return jf(c,d)}return null}},lf=G.extend({animationName:null,elapsedTime:null,pseudoElement:null}),mf=G.extend({clipboardData:function(a){return\"clipboardData\"in a?a.clipboardData:window.clipboardData}}),nf=Ne.extend({relatedTarget:null});function of(a){var b=a.keyCode;\"charCode\"in a?(a=a.charCode,0===a&&13===b&&(a=13)):a=b;10===a&&(a=13);return 32<=a||13===a?a:0}\nvar pf={Esc:\"Escape\",Spacebar:\" \",Left:\"ArrowLeft\",Up:\"ArrowUp\",Right:\"ArrowRight\",Down:\"ArrowDown\",Del:\"Delete\",Win:\"OS\",Menu:\"ContextMenu\",Apps:\"ContextMenu\",Scroll:\"ScrollLock\",MozPrintableKey:\"Unidentified\"},qf={8:\"Backspace\",9:\"Tab\",12:\"Clear\",13:\"Enter\",16:\"Shift\",17:\"Control\",18:\"Alt\",19:\"Pause\",20:\"CapsLock\",27:\"Escape\",32:\" \",33:\"PageUp\",34:\"PageDown\",35:\"End\",36:\"Home\",37:\"ArrowLeft\",38:\"ArrowUp\",39:\"ArrowRight\",40:\"ArrowDown\",45:\"Insert\",46:\"Delete\",112:\"F1\",113:\"F2\",114:\"F3\",115:\"F4\",\n116:\"F5\",117:\"F6\",118:\"F7\",119:\"F8\",120:\"F9\",121:\"F10\",122:\"F11\",123:\"F12\",144:\"NumLock\",145:\"ScrollLock\",224:\"Meta\"},rf=Ne.extend({key:function(a){if(a.key){var b=pf[a.key]||a.key;if(\"Unidentified\"!==b)return b}return\"keypress\"===a.type?(a=of(a),13===a?\"Enter\":String.fromCharCode(a)):\"keydown\"===a.type||\"keyup\"===a.type?qf[a.keyCode]||\"Unidentified\":\"\"},location:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,repeat:null,locale:null,getModifierState:Qe,charCode:function(a){return\"keypress\"===\na.type?of(a):0},keyCode:function(a){return\"keydown\"===a.type||\"keyup\"===a.type?a.keyCode:0},which:function(a){return\"keypress\"===a.type?of(a):\"keydown\"===a.type||\"keyup\"===a.type?a.keyCode:0}}),sf=Ve.extend({dataTransfer:null}),tf=Ne.extend({touches:null,targetTouches:null,changedTouches:null,altKey:null,metaKey:null,ctrlKey:null,shiftKey:null,getModifierState:Qe}),uf=G.extend({propertyName:null,elapsedTime:null,pseudoElement:null}),vf=Ve.extend({deltaX:function(a){return\"deltaX\"in a?a.deltaX:\"wheelDeltaX\"in\na?-a.wheelDeltaX:0},deltaY:function(a){return\"deltaY\"in a?a.deltaY:\"wheelDeltaY\"in a?-a.wheelDeltaY:\"wheelDelta\"in a?-a.wheelDelta:0},deltaZ:null,deltaMode:null}),wf={eventTypes:Wc,extractEvents:function(a,b,c,d){var e=Yc.get(a);if(!e)return null;switch(a){case \"keypress\":if(0===of(c))return null;case \"keydown\":case \"keyup\":a=rf;break;case \"blur\":case \"focus\":a=nf;break;case \"click\":if(2===c.button)return null;case \"auxclick\":case \"dblclick\":case \"mousedown\":case \"mousemove\":case \"mouseup\":case \"mouseout\":case \"mouseover\":case \"contextmenu\":a=\nVe;break;case \"drag\":case \"dragend\":case \"dragenter\":case \"dragexit\":case \"dragleave\":case \"dragover\":case \"dragstart\":case \"drop\":a=sf;break;case \"touchcancel\":case \"touchend\":case \"touchmove\":case \"touchstart\":a=tf;break;case Xb:case Yb:case Zb:a=lf;break;case $b:a=uf;break;case \"scroll\":a=Ne;break;case \"wheel\":a=vf;break;case \"copy\":case \"cut\":case \"paste\":a=mf;break;case \"gotpointercapture\":case \"lostpointercapture\":case \"pointercancel\":case \"pointerdown\":case \"pointermove\":case \"pointerout\":case \"pointerover\":case \"pointerup\":a=\nWe;break;default:a=G}b=a.getPooled(e,b,c,d);Xd(b);return b}};if(pa)throw Error(u(101));pa=Array.prototype.slice.call(\"ResponderEventPlugin SimpleEventPlugin EnterLeaveEventPlugin ChangeEventPlugin SelectEventPlugin BeforeInputEventPlugin\".split(\" \"));ra();var xf=Nc;la=Qd;ma=xf;na=Pd;xa({SimpleEventPlugin:wf,EnterLeaveEventPlugin:Ye,ChangeEventPlugin:Me,SelectEventPlugin:kf,BeforeInputEventPlugin:ve});var yf=[],zf=-1;function H(a){0>zf||(a.current=yf[zf],yf[zf]=null,zf--)}\nfunction I(a,b){zf++;yf[zf]=a.current;a.current=b}var Af={},J={current:Af},K={current:!1},Bf=Af;function Cf(a,b){var c=a.type.contextTypes;if(!c)return Af;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}function L(a){a=a.childContextTypes;return null!==a&&void 0!==a}\nfunction Df(){H(K);H(J)}function Ef(a,b,c){if(J.current!==Af)throw Error(u(168));I(J,b);I(K,c)}function Ff(a,b,c){var d=a.stateNode;a=b.childContextTypes;if(\"function\"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in a))throw Error(u(108,pb(b)||\"Unknown\",e));return n({},c,{},d)}function Gf(a){a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||Af;Bf=J.current;I(J,a);I(K,K.current);return!0}\nfunction Hf(a,b,c){var d=a.stateNode;if(!d)throw Error(u(169));c?(a=Ff(a,b,Bf),d.__reactInternalMemoizedMergedChildContext=a,H(K),H(J),I(J,a)):H(K);I(K,c)}\nvar If=r.unstable_runWithPriority,Jf=r.unstable_scheduleCallback,Kf=r.unstable_cancelCallback,Lf=r.unstable_requestPaint,Mf=r.unstable_now,Nf=r.unstable_getCurrentPriorityLevel,Of=r.unstable_ImmediatePriority,Pf=r.unstable_UserBlockingPriority,Qf=r.unstable_NormalPriority,Rf=r.unstable_LowPriority,Sf=r.unstable_IdlePriority,Tf={},Uf=r.unstable_shouldYield,Vf=void 0!==Lf?Lf:function(){},Wf=null,Xf=null,Yf=!1,Zf=Mf(),$f=1E4>Zf?Mf:function(){return Mf()-Zf};\nfunction ag(){switch(Nf()){case Of:return 99;case Pf:return 98;case Qf:return 97;case Rf:return 96;case Sf:return 95;default:throw Error(u(332));}}function bg(a){switch(a){case 99:return Of;case 98:return Pf;case 97:return Qf;case 96:return Rf;case 95:return Sf;default:throw Error(u(332));}}function cg(a,b){a=bg(a);return If(a,b)}function dg(a,b,c){a=bg(a);return Jf(a,b,c)}function eg(a){null===Wf?(Wf=[a],Xf=Jf(Of,fg)):Wf.push(a);return Tf}function gg(){if(null!==Xf){var a=Xf;Xf=null;Kf(a)}fg()}\nfunction fg(){if(!Yf&&null!==Wf){Yf=!0;var a=0;try{var b=Wf;cg(99,function(){for(;a<b.length;a++){var c=b[a];do c=c(!0);while(null!==c)}});Wf=null}catch(c){throw null!==Wf&&(Wf=Wf.slice(a+1)),Jf(Of,gg),c;}finally{Yf=!1}}}function hg(a,b,c){c/=10;return 1073741821-(((1073741821-a+b/10)/c|0)+1)*c}function ig(a,b){if(a&&a.defaultProps){b=n({},b);a=a.defaultProps;for(var c in a)void 0===b[c]&&(b[c]=a[c])}return b}var jg={current:null},kg=null,lg=null,mg=null;function ng(){mg=lg=kg=null}\nfunction og(a){var b=jg.current;H(jg);a.type._context._currentValue=b}function pg(a,b){for(;null!==a;){var c=a.alternate;if(a.childExpirationTime<b)a.childExpirationTime=b,null!==c&&c.childExpirationTime<b&&(c.childExpirationTime=b);else if(null!==c&&c.childExpirationTime<b)c.childExpirationTime=b;else break;a=a.return}}function qg(a,b){kg=a;mg=lg=null;a=a.dependencies;null!==a&&null!==a.firstContext&&(a.expirationTime>=b&&(rg=!0),a.firstContext=null)}\nfunction sg(a,b){if(mg!==a&&!1!==b&&0!==b){if(\"number\"!==typeof b||1073741823===b)mg=a,b=1073741823;b={context:a,observedBits:b,next:null};if(null===lg){if(null===kg)throw Error(u(308));lg=b;kg.dependencies={expirationTime:0,firstContext:b,responders:null}}else lg=lg.next=b}return a._currentValue}var tg=!1;function ug(a){a.updateQueue={baseState:a.memoizedState,baseQueue:null,shared:{pending:null},effects:null}}\nfunction vg(a,b){a=a.updateQueue;b.updateQueue===a&&(b.updateQueue={baseState:a.baseState,baseQueue:a.baseQueue,shared:a.shared,effects:a.effects})}function wg(a,b){a={expirationTime:a,suspenseConfig:b,tag:0,payload:null,callback:null,next:null};return a.next=a}function xg(a,b){a=a.updateQueue;if(null!==a){a=a.shared;var c=a.pending;null===c?b.next=b:(b.next=c.next,c.next=b);a.pending=b}}\nfunction yg(a,b){var c=a.alternate;null!==c&&vg(c,a);a=a.updateQueue;c=a.baseQueue;null===c?(a.baseQueue=b.next=b,b.next=b):(b.next=c.next,c.next=b)}\nfunction zg(a,b,c,d){var e=a.updateQueue;tg=!1;var f=e.baseQueue,g=e.shared.pending;if(null!==g){if(null!==f){var h=f.next;f.next=g.next;g.next=h}f=g;e.shared.pending=null;h=a.alternate;null!==h&&(h=h.updateQueue,null!==h&&(h.baseQueue=g))}if(null!==f){h=f.next;var k=e.baseState,l=0,m=null,p=null,x=null;if(null!==h){var z=h;do{g=z.expirationTime;if(g<d){var ca={expirationTime:z.expirationTime,suspenseConfig:z.suspenseConfig,tag:z.tag,payload:z.payload,callback:z.callback,next:null};null===x?(p=x=\nca,m=k):x=x.next=ca;g>l&&(l=g)}else{null!==x&&(x=x.next={expirationTime:1073741823,suspenseConfig:z.suspenseConfig,tag:z.tag,payload:z.payload,callback:z.callback,next:null});Ag(g,z.suspenseConfig);a:{var D=a,t=z;g=b;ca=c;switch(t.tag){case 1:D=t.payload;if(\"function\"===typeof D){k=D.call(ca,k,g);break a}k=D;break a;case 3:D.effectTag=D.effectTag&-4097|64;case 0:D=t.payload;g=\"function\"===typeof D?D.call(ca,k,g):D;if(null===g||void 0===g)break a;k=n({},k,g);break a;case 2:tg=!0}}null!==z.callback&&\n(a.effectTag|=32,g=e.effects,null===g?e.effects=[z]:g.push(z))}z=z.next;if(null===z||z===h)if(g=e.shared.pending,null===g)break;else z=f.next=g.next,g.next=h,e.baseQueue=f=g,e.shared.pending=null}while(1)}null===x?m=k:x.next=p;e.baseState=m;e.baseQueue=x;Bg(l);a.expirationTime=l;a.memoizedState=k}}\nfunction Cg(a,b,c){a=b.effects;b.effects=null;if(null!==a)for(b=0;b<a.length;b++){var d=a[b],e=d.callback;if(null!==e){d.callback=null;d=e;e=c;if(\"function\"!==typeof d)throw Error(u(191,d));d.call(e)}}}var Dg=Wa.ReactCurrentBatchConfig,Eg=(new aa.Component).refs;function Fg(a,b,c,d){b=a.memoizedState;c=c(d,b);c=null===c||void 0===c?b:n({},b,c);a.memoizedState=c;0===a.expirationTime&&(a.updateQueue.baseState=c)}\nvar Jg={isMounted:function(a){return(a=a._reactInternalFiber)?dc(a)===a:!1},enqueueSetState:function(a,b,c){a=a._reactInternalFiber;var d=Gg(),e=Dg.suspense;d=Hg(d,a,e);e=wg(d,e);e.payload=b;void 0!==c&&null!==c&&(e.callback=c);xg(a,e);Ig(a,d)},enqueueReplaceState:function(a,b,c){a=a._reactInternalFiber;var d=Gg(),e=Dg.suspense;d=Hg(d,a,e);e=wg(d,e);e.tag=1;e.payload=b;void 0!==c&&null!==c&&(e.callback=c);xg(a,e);Ig(a,d)},enqueueForceUpdate:function(a,b){a=a._reactInternalFiber;var c=Gg(),d=Dg.suspense;\nc=Hg(c,a,d);d=wg(c,d);d.tag=2;void 0!==b&&null!==b&&(d.callback=b);xg(a,d);Ig(a,c)}};function Kg(a,b,c,d,e,f,g){a=a.stateNode;return\"function\"===typeof a.shouldComponentUpdate?a.shouldComponentUpdate(d,f,g):b.prototype&&b.prototype.isPureReactComponent?!bf(c,d)||!bf(e,f):!0}\nfunction Lg(a,b,c){var d=!1,e=Af;var f=b.contextType;\"object\"===typeof f&&null!==f?f=sg(f):(e=L(b)?Bf:J.current,d=b.contextTypes,f=(d=null!==d&&void 0!==d)?Cf(a,e):Af);b=new b(c,f);a.memoizedState=null!==b.state&&void 0!==b.state?b.state:null;b.updater=Jg;a.stateNode=b;b._reactInternalFiber=a;d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=e,a.__reactInternalMemoizedMaskedChildContext=f);return b}\nfunction Mg(a,b,c,d){a=b.state;\"function\"===typeof b.componentWillReceiveProps&&b.componentWillReceiveProps(c,d);\"function\"===typeof b.UNSAFE_componentWillReceiveProps&&b.UNSAFE_componentWillReceiveProps(c,d);b.state!==a&&Jg.enqueueReplaceState(b,b.state,null)}\nfunction Ng(a,b,c,d){var e=a.stateNode;e.props=c;e.state=a.memoizedState;e.refs=Eg;ug(a);var f=b.contextType;\"object\"===typeof f&&null!==f?e.context=sg(f):(f=L(b)?Bf:J.current,e.context=Cf(a,f));zg(a,c,e,d);e.state=a.memoizedState;f=b.getDerivedStateFromProps;\"function\"===typeof f&&(Fg(a,b,f,c),e.state=a.memoizedState);\"function\"===typeof b.getDerivedStateFromProps||\"function\"===typeof e.getSnapshotBeforeUpdate||\"function\"!==typeof e.UNSAFE_componentWillMount&&\"function\"!==typeof e.componentWillMount||\n(b=e.state,\"function\"===typeof e.componentWillMount&&e.componentWillMount(),\"function\"===typeof e.UNSAFE_componentWillMount&&e.UNSAFE_componentWillMount(),b!==e.state&&Jg.enqueueReplaceState(e,e.state,null),zg(a,c,e,d),e.state=a.memoizedState);\"function\"===typeof e.componentDidMount&&(a.effectTag|=4)}var Og=Array.isArray;\nfunction Pg(a,b,c){a=c.ref;if(null!==a&&\"function\"!==typeof a&&\"object\"!==typeof a){if(c._owner){c=c._owner;if(c){if(1!==c.tag)throw Error(u(309));var d=c.stateNode}if(!d)throw Error(u(147,a));var e=\"\"+a;if(null!==b&&null!==b.ref&&\"function\"===typeof b.ref&&b.ref._stringRef===e)return b.ref;b=function(a){var b=d.refs;b===Eg&&(b=d.refs={});null===a?delete b[e]:b[e]=a};b._stringRef=e;return b}if(\"string\"!==typeof a)throw Error(u(284));if(!c._owner)throw Error(u(290,a));}return a}\nfunction Qg(a,b){if(\"textarea\"!==a.type)throw Error(u(31,\"[object Object]\"===Object.prototype.toString.call(b)?\"object with keys {\"+Object.keys(b).join(\", \")+\"}\":b,\"\"));}\nfunction Rg(a){function b(b,c){if(a){var d=b.lastEffect;null!==d?(d.nextEffect=c,b.lastEffect=c):b.firstEffect=b.lastEffect=c;c.nextEffect=null;c.effectTag=8}}function c(c,d){if(!a)return null;for(;null!==d;)b(c,d),d=d.sibling;return null}function d(a,b){for(a=new Map;null!==b;)null!==b.key?a.set(b.key,b):a.set(b.index,b),b=b.sibling;return a}function e(a,b){a=Sg(a,b);a.index=0;a.sibling=null;return a}function f(b,c,d){b.index=d;if(!a)return c;d=b.alternate;if(null!==d)return d=d.index,d<c?(b.effectTag=\n2,c):d;b.effectTag=2;return c}function g(b){a&&null===b.alternate&&(b.effectTag=2);return b}function h(a,b,c,d){if(null===b||6!==b.tag)return b=Tg(c,a.mode,d),b.return=a,b;b=e(b,c);b.return=a;return b}function k(a,b,c,d){if(null!==b&&b.elementType===c.type)return d=e(b,c.props),d.ref=Pg(a,b,c),d.return=a,d;d=Ug(c.type,c.key,c.props,null,a.mode,d);d.ref=Pg(a,b,c);d.return=a;return d}function l(a,b,c,d){if(null===b||4!==b.tag||b.stateNode.containerInfo!==c.containerInfo||b.stateNode.implementation!==\nc.implementation)return b=Vg(c,a.mode,d),b.return=a,b;b=e(b,c.children||[]);b.return=a;return b}function m(a,b,c,d,f){if(null===b||7!==b.tag)return b=Wg(c,a.mode,d,f),b.return=a,b;b=e(b,c);b.return=a;return b}function p(a,b,c){if(\"string\"===typeof b||\"number\"===typeof b)return b=Tg(\"\"+b,a.mode,c),b.return=a,b;if(\"object\"===typeof b&&null!==b){switch(b.$$typeof){case Za:return c=Ug(b.type,b.key,b.props,null,a.mode,c),c.ref=Pg(a,null,b),c.return=a,c;case $a:return b=Vg(b,a.mode,c),b.return=a,b}if(Og(b)||\nnb(b))return b=Wg(b,a.mode,c,null),b.return=a,b;Qg(a,b)}return null}function x(a,b,c,d){var e=null!==b?b.key:null;if(\"string\"===typeof c||\"number\"===typeof c)return null!==e?null:h(a,b,\"\"+c,d);if(\"object\"===typeof c&&null!==c){switch(c.$$typeof){case Za:return c.key===e?c.type===ab?m(a,b,c.props.children,d,e):k(a,b,c,d):null;case $a:return c.key===e?l(a,b,c,d):null}if(Og(c)||nb(c))return null!==e?null:m(a,b,c,d,null);Qg(a,c)}return null}function z(a,b,c,d,e){if(\"string\"===typeof d||\"number\"===typeof d)return a=\na.get(c)||null,h(b,a,\"\"+d,e);if(\"object\"===typeof d&&null!==d){switch(d.$$typeof){case Za:return a=a.get(null===d.key?c:d.key)||null,d.type===ab?m(b,a,d.props.children,e,d.key):k(b,a,d,e);case $a:return a=a.get(null===d.key?c:d.key)||null,l(b,a,d,e)}if(Og(d)||nb(d))return a=a.get(c)||null,m(b,a,d,e,null);Qg(b,d)}return null}function ca(e,g,h,k){for(var l=null,t=null,m=g,y=g=0,A=null;null!==m&&y<h.length;y++){m.index>y?(A=m,m=null):A=m.sibling;var q=x(e,m,h[y],k);if(null===q){null===m&&(m=A);break}a&&\nm&&null===q.alternate&&b(e,m);g=f(q,g,y);null===t?l=q:t.sibling=q;t=q;m=A}if(y===h.length)return c(e,m),l;if(null===m){for(;y<h.length;y++)m=p(e,h[y],k),null!==m&&(g=f(m,g,y),null===t?l=m:t.sibling=m,t=m);return l}for(m=d(e,m);y<h.length;y++)A=z(m,e,y,h[y],k),null!==A&&(a&&null!==A.alternate&&m.delete(null===A.key?y:A.key),g=f(A,g,y),null===t?l=A:t.sibling=A,t=A);a&&m.forEach(function(a){return b(e,a)});return l}function D(e,g,h,l){var k=nb(h);if(\"function\"!==typeof k)throw Error(u(150));h=k.call(h);\nif(null==h)throw Error(u(151));for(var m=k=null,t=g,y=g=0,A=null,q=h.next();null!==t&&!q.done;y++,q=h.next()){t.index>y?(A=t,t=null):A=t.sibling;var D=x(e,t,q.value,l);if(null===D){null===t&&(t=A);break}a&&t&&null===D.alternate&&b(e,t);g=f(D,g,y);null===m?k=D:m.sibling=D;m=D;t=A}if(q.done)return c(e,t),k;if(null===t){for(;!q.done;y++,q=h.next())q=p(e,q.value,l),null!==q&&(g=f(q,g,y),null===m?k=q:m.sibling=q,m=q);return k}for(t=d(e,t);!q.done;y++,q=h.next())q=z(t,e,y,q.value,l),null!==q&&(a&&null!==\nq.alternate&&t.delete(null===q.key?y:q.key),g=f(q,g,y),null===m?k=q:m.sibling=q,m=q);a&&t.forEach(function(a){return b(e,a)});return k}return function(a,d,f,h){var k=\"object\"===typeof f&&null!==f&&f.type===ab&&null===f.key;k&&(f=f.props.children);var l=\"object\"===typeof f&&null!==f;if(l)switch(f.$$typeof){case Za:a:{l=f.key;for(k=d;null!==k;){if(k.key===l){switch(k.tag){case 7:if(f.type===ab){c(a,k.sibling);d=e(k,f.props.children);d.return=a;a=d;break a}break;default:if(k.elementType===f.type){c(a,\nk.sibling);d=e(k,f.props);d.ref=Pg(a,k,f);d.return=a;a=d;break a}}c(a,k);break}else b(a,k);k=k.sibling}f.type===ab?(d=Wg(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=Ug(f.type,f.key,f.props,null,a.mode,h),h.ref=Pg(a,d,f),h.return=a,a=h)}return g(a);case $a:a:{for(k=f.key;null!==d;){if(d.key===k)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[]);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=\nd.sibling}d=Vg(f,a.mode,h);d.return=a;a=d}return g(a)}if(\"string\"===typeof f||\"number\"===typeof f)return f=\"\"+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f),d.return=a,a=d):(c(a,d),d=Tg(f,a.mode,h),d.return=a,a=d),g(a);if(Og(f))return ca(a,d,f,h);if(nb(f))return D(a,d,f,h);l&&Qg(a,f);if(\"undefined\"===typeof f&&!k)switch(a.tag){case 1:case 0:throw a=a.type,Error(u(152,a.displayName||a.name||\"Component\"));}return c(a,d)}}var Xg=Rg(!0),Yg=Rg(!1),Zg={},$g={current:Zg},ah={current:Zg},bh={current:Zg};\nfunction ch(a){if(a===Zg)throw Error(u(174));return a}function dh(a,b){I(bh,b);I(ah,a);I($g,Zg);a=b.nodeType;switch(a){case 9:case 11:b=(b=b.documentElement)?b.namespaceURI:Ob(null,\"\");break;default:a=8===a?b.parentNode:b,b=a.namespaceURI||null,a=a.tagName,b=Ob(b,a)}H($g);I($g,b)}function eh(){H($g);H(ah);H(bh)}function fh(a){ch(bh.current);var b=ch($g.current);var c=Ob(b,a.type);b!==c&&(I(ah,a),I($g,c))}function gh(a){ah.current===a&&(H($g),H(ah))}var M={current:0};\nfunction hh(a){for(var b=a;null!==b;){if(13===b.tag){var c=b.memoizedState;if(null!==c&&(c=c.dehydrated,null===c||c.data===Bd||c.data===Cd))return b}else if(19===b.tag&&void 0!==b.memoizedProps.revealOrder){if(0!==(b.effectTag&64))return b}else if(null!==b.child){b.child.return=b;b=b.child;continue}if(b===a)break;for(;null===b.sibling;){if(null===b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}return null}function ih(a,b){return{responder:a,props:b}}\nvar jh=Wa.ReactCurrentDispatcher,kh=Wa.ReactCurrentBatchConfig,lh=0,N=null,O=null,P=null,mh=!1;function Q(){throw Error(u(321));}function nh(a,b){if(null===b)return!1;for(var c=0;c<b.length&&c<a.length;c++)if(!$e(a[c],b[c]))return!1;return!0}\nfunction oh(a,b,c,d,e,f){lh=f;N=b;b.memoizedState=null;b.updateQueue=null;b.expirationTime=0;jh.current=null===a||null===a.memoizedState?ph:qh;a=c(d,e);if(b.expirationTime===lh){f=0;do{b.expirationTime=0;if(!(25>f))throw Error(u(301));f+=1;P=O=null;b.updateQueue=null;jh.current=rh;a=c(d,e)}while(b.expirationTime===lh)}jh.current=sh;b=null!==O&&null!==O.next;lh=0;P=O=N=null;mh=!1;if(b)throw Error(u(300));return a}\nfunction th(){var a={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};null===P?N.memoizedState=P=a:P=P.next=a;return P}function uh(){if(null===O){var a=N.alternate;a=null!==a?a.memoizedState:null}else a=O.next;var b=null===P?N.memoizedState:P.next;if(null!==b)P=b,O=a;else{if(null===a)throw Error(u(310));O=a;a={memoizedState:O.memoizedState,baseState:O.baseState,baseQueue:O.baseQueue,queue:O.queue,next:null};null===P?N.memoizedState=P=a:P=P.next=a}return P}\nfunction vh(a,b){return\"function\"===typeof b?b(a):b}\nfunction wh(a){var b=uh(),c=b.queue;if(null===c)throw Error(u(311));c.lastRenderedReducer=a;var d=O,e=d.baseQueue,f=c.pending;if(null!==f){if(null!==e){var g=e.next;e.next=f.next;f.next=g}d.baseQueue=e=f;c.pending=null}if(null!==e){e=e.next;d=d.baseState;var h=g=f=null,k=e;do{var l=k.expirationTime;if(l<lh){var m={expirationTime:k.expirationTime,suspenseConfig:k.suspenseConfig,action:k.action,eagerReducer:k.eagerReducer,eagerState:k.eagerState,next:null};null===h?(g=h=m,f=d):h=h.next=m;l>N.expirationTime&&\n(N.expirationTime=l,Bg(l))}else null!==h&&(h=h.next={expirationTime:1073741823,suspenseConfig:k.suspenseConfig,action:k.action,eagerReducer:k.eagerReducer,eagerState:k.eagerState,next:null}),Ag(l,k.suspenseConfig),d=k.eagerReducer===a?k.eagerState:a(d,k.action);k=k.next}while(null!==k&&k!==e);null===h?f=d:h.next=g;$e(d,b.memoizedState)||(rg=!0);b.memoizedState=d;b.baseState=f;b.baseQueue=h;c.lastRenderedState=d}return[b.memoizedState,c.dispatch]}\nfunction xh(a){var b=uh(),c=b.queue;if(null===c)throw Error(u(311));c.lastRenderedReducer=a;var d=c.dispatch,e=c.pending,f=b.memoizedState;if(null!==e){c.pending=null;var g=e=e.next;do f=a(f,g.action),g=g.next;while(g!==e);$e(f,b.memoizedState)||(rg=!0);b.memoizedState=f;null===b.baseQueue&&(b.baseState=f);c.lastRenderedState=f}return[f,d]}\nfunction yh(a){var b=th();\"function\"===typeof a&&(a=a());b.memoizedState=b.baseState=a;a=b.queue={pending:null,dispatch:null,lastRenderedReducer:vh,lastRenderedState:a};a=a.dispatch=zh.bind(null,N,a);return[b.memoizedState,a]}function Ah(a,b,c,d){a={tag:a,create:b,destroy:c,deps:d,next:null};b=N.updateQueue;null===b?(b={lastEffect:null},N.updateQueue=b,b.lastEffect=a.next=a):(c=b.lastEffect,null===c?b.lastEffect=a.next=a:(d=c.next,c.next=a,a.next=d,b.lastEffect=a));return a}\nfunction Bh(){return uh().memoizedState}function Ch(a,b,c,d){var e=th();N.effectTag|=a;e.memoizedState=Ah(1|b,c,void 0,void 0===d?null:d)}function Dh(a,b,c,d){var e=uh();d=void 0===d?null:d;var f=void 0;if(null!==O){var g=O.memoizedState;f=g.destroy;if(null!==d&&nh(d,g.deps)){Ah(b,c,f,d);return}}N.effectTag|=a;e.memoizedState=Ah(1|b,c,f,d)}function Eh(a,b){return Ch(516,4,a,b)}function Fh(a,b){return Dh(516,4,a,b)}function Gh(a,b){return Dh(4,2,a,b)}\nfunction Hh(a,b){if(\"function\"===typeof b)return a=a(),b(a),function(){b(null)};if(null!==b&&void 0!==b)return a=a(),b.current=a,function(){b.current=null}}function Ih(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return Dh(4,2,Hh.bind(null,b,a),c)}function Jh(){}function Kh(a,b){th().memoizedState=[a,void 0===b?null:b];return a}function Lh(a,b){var c=uh();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&nh(b,d[1]))return d[0];c.memoizedState=[a,b];return a}\nfunction Mh(a,b){var c=uh();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&nh(b,d[1]))return d[0];a=a();c.memoizedState=[a,b];return a}function Nh(a,b,c){var d=ag();cg(98>d?98:d,function(){a(!0)});cg(97<d?97:d,function(){var d=kh.suspense;kh.suspense=void 0===b?null:b;try{a(!1),c()}finally{kh.suspense=d}})}\nfunction zh(a,b,c){var d=Gg(),e=Dg.suspense;d=Hg(d,a,e);e={expirationTime:d,suspenseConfig:e,action:c,eagerReducer:null,eagerState:null,next:null};var f=b.pending;null===f?e.next=e:(e.next=f.next,f.next=e);b.pending=e;f=a.alternate;if(a===N||null!==f&&f===N)mh=!0,e.expirationTime=lh,N.expirationTime=lh;else{if(0===a.expirationTime&&(null===f||0===f.expirationTime)&&(f=b.lastRenderedReducer,null!==f))try{var g=b.lastRenderedState,h=f(g,c);e.eagerReducer=f;e.eagerState=h;if($e(h,g))return}catch(k){}finally{}Ig(a,\nd)}}\nvar sh={readContext:sg,useCallback:Q,useContext:Q,useEffect:Q,useImperativeHandle:Q,useLayoutEffect:Q,useMemo:Q,useReducer:Q,useRef:Q,useState:Q,useDebugValue:Q,useResponder:Q,useDeferredValue:Q,useTransition:Q},ph={readContext:sg,useCallback:Kh,useContext:sg,useEffect:Eh,useImperativeHandle:function(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return Ch(4,2,Hh.bind(null,b,a),c)},useLayoutEffect:function(a,b){return Ch(4,2,a,b)},useMemo:function(a,b){var c=th();b=void 0===b?null:b;a=a();c.memoizedState=[a,\nb];return a},useReducer:function(a,b,c){var d=th();b=void 0!==c?c(b):b;d.memoizedState=d.baseState=b;a=d.queue={pending:null,dispatch:null,lastRenderedReducer:a,lastRenderedState:b};a=a.dispatch=zh.bind(null,N,a);return[d.memoizedState,a]},useRef:function(a){var b=th();a={current:a};return b.memoizedState=a},useState:yh,useDebugValue:Jh,useResponder:ih,useDeferredValue:function(a,b){var c=yh(a),d=c[0],e=c[1];Eh(function(){var c=kh.suspense;kh.suspense=void 0===b?null:b;try{e(a)}finally{kh.suspense=\nc}},[a,b]);return d},useTransition:function(a){var b=yh(!1),c=b[0];b=b[1];return[Kh(Nh.bind(null,b,a),[b,a]),c]}},qh={readContext:sg,useCallback:Lh,useContext:sg,useEffect:Fh,useImperativeHandle:Ih,useLayoutEffect:Gh,useMemo:Mh,useReducer:wh,useRef:Bh,useState:function(){return wh(vh)},useDebugValue:Jh,useResponder:ih,useDeferredValue:function(a,b){var c=wh(vh),d=c[0],e=c[1];Fh(function(){var c=kh.suspense;kh.suspense=void 0===b?null:b;try{e(a)}finally{kh.suspense=c}},[a,b]);return d},useTransition:function(a){var b=\nwh(vh),c=b[0];b=b[1];return[Lh(Nh.bind(null,b,a),[b,a]),c]}},rh={readContext:sg,useCallback:Lh,useContext:sg,useEffect:Fh,useImperativeHandle:Ih,useLayoutEffect:Gh,useMemo:Mh,useReducer:xh,useRef:Bh,useState:function(){return xh(vh)},useDebugValue:Jh,useResponder:ih,useDeferredValue:function(a,b){var c=xh(vh),d=c[0],e=c[1];Fh(function(){var c=kh.suspense;kh.suspense=void 0===b?null:b;try{e(a)}finally{kh.suspense=c}},[a,b]);return d},useTransition:function(a){var b=xh(vh),c=b[0];b=b[1];return[Lh(Nh.bind(null,\nb,a),[b,a]),c]}},Oh=null,Ph=null,Qh=!1;function Rh(a,b){var c=Sh(5,null,null,0);c.elementType=\"DELETED\";c.type=\"DELETED\";c.stateNode=b;c.return=a;c.effectTag=8;null!==a.lastEffect?(a.lastEffect.nextEffect=c,a.lastEffect=c):a.firstEffect=a.lastEffect=c}\nfunction Th(a,b){switch(a.tag){case 5:var c=a.type;b=1!==b.nodeType||c.toLowerCase()!==b.nodeName.toLowerCase()?null:b;return null!==b?(a.stateNode=b,!0):!1;case 6:return b=\"\"===a.pendingProps||3!==b.nodeType?null:b,null!==b?(a.stateNode=b,!0):!1;case 13:return!1;default:return!1}}\nfunction Uh(a){if(Qh){var b=Ph;if(b){var c=b;if(!Th(a,b)){b=Jd(c.nextSibling);if(!b||!Th(a,b)){a.effectTag=a.effectTag&-1025|2;Qh=!1;Oh=a;return}Rh(Oh,c)}Oh=a;Ph=Jd(b.firstChild)}else a.effectTag=a.effectTag&-1025|2,Qh=!1,Oh=a}}function Vh(a){for(a=a.return;null!==a&&5!==a.tag&&3!==a.tag&&13!==a.tag;)a=a.return;Oh=a}\nfunction Wh(a){if(a!==Oh)return!1;if(!Qh)return Vh(a),Qh=!0,!1;var b=a.type;if(5!==a.tag||\"head\"!==b&&\"body\"!==b&&!Gd(b,a.memoizedProps))for(b=Ph;b;)Rh(a,b),b=Jd(b.nextSibling);Vh(a);if(13===a.tag){a=a.memoizedState;a=null!==a?a.dehydrated:null;if(!a)throw Error(u(317));a:{a=a.nextSibling;for(b=0;a;){if(8===a.nodeType){var c=a.data;if(c===Ad){if(0===b){Ph=Jd(a.nextSibling);break a}b--}else c!==zd&&c!==Cd&&c!==Bd||b++}a=a.nextSibling}Ph=null}}else Ph=Oh?Jd(a.stateNode.nextSibling):null;return!0}\nfunction Xh(){Ph=Oh=null;Qh=!1}var Yh=Wa.ReactCurrentOwner,rg=!1;function R(a,b,c,d){b.child=null===a?Yg(b,null,c,d):Xg(b,a.child,c,d)}function Zh(a,b,c,d,e){c=c.render;var f=b.ref;qg(b,e);d=oh(a,b,c,d,f,e);if(null!==a&&!rg)return b.updateQueue=a.updateQueue,b.effectTag&=-517,a.expirationTime<=e&&(a.expirationTime=0),$h(a,b,e);b.effectTag|=1;R(a,b,d,e);return b.child}\nfunction ai(a,b,c,d,e,f){if(null===a){var g=c.type;if(\"function\"===typeof g&&!bi(g)&&void 0===g.defaultProps&&null===c.compare&&void 0===c.defaultProps)return b.tag=15,b.type=g,ci(a,b,g,d,e,f);a=Ug(c.type,null,d,null,b.mode,f);a.ref=b.ref;a.return=b;return b.child=a}g=a.child;if(e<f&&(e=g.memoizedProps,c=c.compare,c=null!==c?c:bf,c(e,d)&&a.ref===b.ref))return $h(a,b,f);b.effectTag|=1;a=Sg(g,d);a.ref=b.ref;a.return=b;return b.child=a}\nfunction ci(a,b,c,d,e,f){return null!==a&&bf(a.memoizedProps,d)&&a.ref===b.ref&&(rg=!1,e<f)?(b.expirationTime=a.expirationTime,$h(a,b,f)):di(a,b,c,d,f)}function ei(a,b){var c=b.ref;if(null===a&&null!==c||null!==a&&a.ref!==c)b.effectTag|=128}function di(a,b,c,d,e){var f=L(c)?Bf:J.current;f=Cf(b,f);qg(b,e);c=oh(a,b,c,d,f,e);if(null!==a&&!rg)return b.updateQueue=a.updateQueue,b.effectTag&=-517,a.expirationTime<=e&&(a.expirationTime=0),$h(a,b,e);b.effectTag|=1;R(a,b,c,e);return b.child}\nfunction fi(a,b,c,d,e){if(L(c)){var f=!0;Gf(b)}else f=!1;qg(b,e);if(null===b.stateNode)null!==a&&(a.alternate=null,b.alternate=null,b.effectTag|=2),Lg(b,c,d),Ng(b,c,d,e),d=!0;else if(null===a){var g=b.stateNode,h=b.memoizedProps;g.props=h;var k=g.context,l=c.contextType;\"object\"===typeof l&&null!==l?l=sg(l):(l=L(c)?Bf:J.current,l=Cf(b,l));var m=c.getDerivedStateFromProps,p=\"function\"===typeof m||\"function\"===typeof g.getSnapshotBeforeUpdate;p||\"function\"!==typeof g.UNSAFE_componentWillReceiveProps&&\n\"function\"!==typeof g.componentWillReceiveProps||(h!==d||k!==l)&&Mg(b,g,d,l);tg=!1;var x=b.memoizedState;g.state=x;zg(b,d,g,e);k=b.memoizedState;h!==d||x!==k||K.current||tg?(\"function\"===typeof m&&(Fg(b,c,m,d),k=b.memoizedState),(h=tg||Kg(b,c,h,d,x,k,l))?(p||\"function\"!==typeof g.UNSAFE_componentWillMount&&\"function\"!==typeof g.componentWillMount||(\"function\"===typeof g.componentWillMount&&g.componentWillMount(),\"function\"===typeof g.UNSAFE_componentWillMount&&g.UNSAFE_componentWillMount()),\"function\"===\ntypeof g.componentDidMount&&(b.effectTag|=4)):(\"function\"===typeof g.componentDidMount&&(b.effectTag|=4),b.memoizedProps=d,b.memoizedState=k),g.props=d,g.state=k,g.context=l,d=h):(\"function\"===typeof g.componentDidMount&&(b.effectTag|=4),d=!1)}else g=b.stateNode,vg(a,b),h=b.memoizedProps,g.props=b.type===b.elementType?h:ig(b.type,h),k=g.context,l=c.contextType,\"object\"===typeof l&&null!==l?l=sg(l):(l=L(c)?Bf:J.current,l=Cf(b,l)),m=c.getDerivedStateFromProps,(p=\"function\"===typeof m||\"function\"===\ntypeof g.getSnapshotBeforeUpdate)||\"function\"!==typeof g.UNSAFE_componentWillReceiveProps&&\"function\"!==typeof g.componentWillReceiveProps||(h!==d||k!==l)&&Mg(b,g,d,l),tg=!1,k=b.memoizedState,g.state=k,zg(b,d,g,e),x=b.memoizedState,h!==d||k!==x||K.current||tg?(\"function\"===typeof m&&(Fg(b,c,m,d),x=b.memoizedState),(m=tg||Kg(b,c,h,d,k,x,l))?(p||\"function\"!==typeof g.UNSAFE_componentWillUpdate&&\"function\"!==typeof g.componentWillUpdate||(\"function\"===typeof g.componentWillUpdate&&g.componentWillUpdate(d,\nx,l),\"function\"===typeof g.UNSAFE_componentWillUpdate&&g.UNSAFE_componentWillUpdate(d,x,l)),\"function\"===typeof g.componentDidUpdate&&(b.effectTag|=4),\"function\"===typeof g.getSnapshotBeforeUpdate&&(b.effectTag|=256)):(\"function\"!==typeof g.componentDidUpdate||h===a.memoizedProps&&k===a.memoizedState||(b.effectTag|=4),\"function\"!==typeof g.getSnapshotBeforeUpdate||h===a.memoizedProps&&k===a.memoizedState||(b.effectTag|=256),b.memoizedProps=d,b.memoizedState=x),g.props=d,g.state=x,g.context=l,d=m):\n(\"function\"!==typeof g.componentDidUpdate||h===a.memoizedProps&&k===a.memoizedState||(b.effectTag|=4),\"function\"!==typeof g.getSnapshotBeforeUpdate||h===a.memoizedProps&&k===a.memoizedState||(b.effectTag|=256),d=!1);return gi(a,b,c,d,f,e)}\nfunction gi(a,b,c,d,e,f){ei(a,b);var g=0!==(b.effectTag&64);if(!d&&!g)return e&&Hf(b,c,!1),$h(a,b,f);d=b.stateNode;Yh.current=b;var h=g&&\"function\"!==typeof c.getDerivedStateFromError?null:d.render();b.effectTag|=1;null!==a&&g?(b.child=Xg(b,a.child,null,f),b.child=Xg(b,null,h,f)):R(a,b,h,f);b.memoizedState=d.state;e&&Hf(b,c,!0);return b.child}function hi(a){var b=a.stateNode;b.pendingContext?Ef(a,b.pendingContext,b.pendingContext!==b.context):b.context&&Ef(a,b.context,!1);dh(a,b.containerInfo)}\nvar ii={dehydrated:null,retryTime:0};\nfunction ji(a,b,c){var d=b.mode,e=b.pendingProps,f=M.current,g=!1,h;(h=0!==(b.effectTag&64))||(h=0!==(f&2)&&(null===a||null!==a.memoizedState));h?(g=!0,b.effectTag&=-65):null!==a&&null===a.memoizedState||void 0===e.fallback||!0===e.unstable_avoidThisFallback||(f|=1);I(M,f&1);if(null===a){void 0!==e.fallback&&Uh(b);if(g){g=e.fallback;e=Wg(null,d,0,null);e.return=b;if(0===(b.mode&2))for(a=null!==b.memoizedState?b.child.child:b.child,e.child=a;null!==a;)a.return=e,a=a.sibling;c=Wg(g,d,c,null);c.return=\nb;e.sibling=c;b.memoizedState=ii;b.child=e;return c}d=e.children;b.memoizedState=null;return b.child=Yg(b,null,d,c)}if(null!==a.memoizedState){a=a.child;d=a.sibling;if(g){e=e.fallback;c=Sg(a,a.pendingProps);c.return=b;if(0===(b.mode&2)&&(g=null!==b.memoizedState?b.child.child:b.child,g!==a.child))for(c.child=g;null!==g;)g.return=c,g=g.sibling;d=Sg(d,e);d.return=b;c.sibling=d;c.childExpirationTime=0;b.memoizedState=ii;b.child=c;return d}c=Xg(b,a.child,e.children,c);b.memoizedState=null;return b.child=\nc}a=a.child;if(g){g=e.fallback;e=Wg(null,d,0,null);e.return=b;e.child=a;null!==a&&(a.return=e);if(0===(b.mode&2))for(a=null!==b.memoizedState?b.child.child:b.child,e.child=a;null!==a;)a.return=e,a=a.sibling;c=Wg(g,d,c,null);c.return=b;e.sibling=c;c.effectTag|=2;e.childExpirationTime=0;b.memoizedState=ii;b.child=e;return c}b.memoizedState=null;return b.child=Xg(b,a,e.children,c)}\nfunction ki(a,b){a.expirationTime<b&&(a.expirationTime=b);var c=a.alternate;null!==c&&c.expirationTime<b&&(c.expirationTime=b);pg(a.return,b)}function li(a,b,c,d,e,f){var g=a.memoizedState;null===g?a.memoizedState={isBackwards:b,rendering:null,renderingStartTime:0,last:d,tail:c,tailExpiration:0,tailMode:e,lastEffect:f}:(g.isBackwards=b,g.rendering=null,g.renderingStartTime=0,g.last=d,g.tail=c,g.tailExpiration=0,g.tailMode=e,g.lastEffect=f)}\nfunction mi(a,b,c){var d=b.pendingProps,e=d.revealOrder,f=d.tail;R(a,b,d.children,c);d=M.current;if(0!==(d&2))d=d&1|2,b.effectTag|=64;else{if(null!==a&&0!==(a.effectTag&64))a:for(a=b.child;null!==a;){if(13===a.tag)null!==a.memoizedState&&ki(a,c);else if(19===a.tag)ki(a,c);else if(null!==a.child){a.child.return=a;a=a.child;continue}if(a===b)break a;for(;null===a.sibling;){if(null===a.return||a.return===b)break a;a=a.return}a.sibling.return=a.return;a=a.sibling}d&=1}I(M,d);if(0===(b.mode&2))b.memoizedState=\nnull;else switch(e){case \"forwards\":c=b.child;for(e=null;null!==c;)a=c.alternate,null!==a&&null===hh(a)&&(e=c),c=c.sibling;c=e;null===c?(e=b.child,b.child=null):(e=c.sibling,c.sibling=null);li(b,!1,e,c,f,b.lastEffect);break;case \"backwards\":c=null;e=b.child;for(b.child=null;null!==e;){a=e.alternate;if(null!==a&&null===hh(a)){b.child=e;break}a=e.sibling;e.sibling=c;c=e;e=a}li(b,!0,c,null,f,b.lastEffect);break;case \"together\":li(b,!1,null,null,void 0,b.lastEffect);break;default:b.memoizedState=null}return b.child}\nfunction $h(a,b,c){null!==a&&(b.dependencies=a.dependencies);var d=b.expirationTime;0!==d&&Bg(d);if(b.childExpirationTime<c)return null;if(null!==a&&b.child!==a.child)throw Error(u(153));if(null!==b.child){a=b.child;c=Sg(a,a.pendingProps);b.child=c;for(c.return=b;null!==a.sibling;)a=a.sibling,c=c.sibling=Sg(a,a.pendingProps),c.return=b;c.sibling=null}return b.child}var ni,oi,pi,qi;\nni=function(a,b){for(var c=b.child;null!==c;){if(5===c.tag||6===c.tag)a.appendChild(c.stateNode);else if(4!==c.tag&&null!==c.child){c.child.return=c;c=c.child;continue}if(c===b)break;for(;null===c.sibling;){if(null===c.return||c.return===b)return;c=c.return}c.sibling.return=c.return;c=c.sibling}};oi=function(){};\npi=function(a,b,c,d,e){var f=a.memoizedProps;if(f!==d){var g=b.stateNode;ch($g.current);a=null;switch(c){case \"input\":f=zb(g,f);d=zb(g,d);a=[];break;case \"option\":f=Gb(g,f);d=Gb(g,d);a=[];break;case \"select\":f=n({},f,{value:void 0});d=n({},d,{value:void 0});a=[];break;case \"textarea\":f=Ib(g,f);d=Ib(g,d);a=[];break;default:\"function\"!==typeof f.onClick&&\"function\"===typeof d.onClick&&(g.onclick=sd)}od(c,d);var h,k;c=null;for(h in f)if(!d.hasOwnProperty(h)&&f.hasOwnProperty(h)&&null!=f[h])if(\"style\"===\nh)for(k in g=f[h],g)g.hasOwnProperty(k)&&(c||(c={}),c[k]=\"\");else\"dangerouslySetInnerHTML\"!==h&&\"children\"!==h&&\"suppressContentEditableWarning\"!==h&&\"suppressHydrationWarning\"!==h&&\"autoFocus\"!==h&&(va.hasOwnProperty(h)?a||(a=[]):(a=a||[]).push(h,null));for(h in d){var l=d[h];g=null!=f?f[h]:void 0;if(d.hasOwnProperty(h)&&l!==g&&(null!=l||null!=g))if(\"style\"===h)if(g){for(k in g)!g.hasOwnProperty(k)||l&&l.hasOwnProperty(k)||(c||(c={}),c[k]=\"\");for(k in l)l.hasOwnProperty(k)&&g[k]!==l[k]&&(c||(c={}),\nc[k]=l[k])}else c||(a||(a=[]),a.push(h,c)),c=l;else\"dangerouslySetInnerHTML\"===h?(l=l?l.__html:void 0,g=g?g.__html:void 0,null!=l&&g!==l&&(a=a||[]).push(h,l)):\"children\"===h?g===l||\"string\"!==typeof l&&\"number\"!==typeof l||(a=a||[]).push(h,\"\"+l):\"suppressContentEditableWarning\"!==h&&\"suppressHydrationWarning\"!==h&&(va.hasOwnProperty(h)?(null!=l&&rd(e,h),a||g===l||(a=[])):(a=a||[]).push(h,l))}c&&(a=a||[]).push(\"style\",c);e=a;if(b.updateQueue=e)b.effectTag|=4}};\nqi=function(a,b,c,d){c!==d&&(b.effectTag|=4)};function ri(a,b){switch(a.tailMode){case \"hidden\":b=a.tail;for(var c=null;null!==b;)null!==b.alternate&&(c=b),b=b.sibling;null===c?a.tail=null:c.sibling=null;break;case \"collapsed\":c=a.tail;for(var d=null;null!==c;)null!==c.alternate&&(d=c),c=c.sibling;null===d?b||null===a.tail?a.tail=null:a.tail.sibling=null:d.sibling=null}}\nfunction si(a,b,c){var d=b.pendingProps;switch(b.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return null;case 1:return L(b.type)&&Df(),null;case 3:return eh(),H(K),H(J),c=b.stateNode,c.pendingContext&&(c.context=c.pendingContext,c.pendingContext=null),null!==a&&null!==a.child||!Wh(b)||(b.effectTag|=4),oi(b),null;case 5:gh(b);c=ch(bh.current);var e=b.type;if(null!==a&&null!=b.stateNode)pi(a,b,e,d,c),a.ref!==b.ref&&(b.effectTag|=128);else{if(!d){if(null===b.stateNode)throw Error(u(166));\nreturn null}a=ch($g.current);if(Wh(b)){d=b.stateNode;e=b.type;var f=b.memoizedProps;d[Md]=b;d[Nd]=f;switch(e){case \"iframe\":case \"object\":case \"embed\":F(\"load\",d);break;case \"video\":case \"audio\":for(a=0;a<ac.length;a++)F(ac[a],d);break;case \"source\":F(\"error\",d);break;case \"img\":case \"image\":case \"link\":F(\"error\",d);F(\"load\",d);break;case \"form\":F(\"reset\",d);F(\"submit\",d);break;case \"details\":F(\"toggle\",d);break;case \"input\":Ab(d,f);F(\"invalid\",d);rd(c,\"onChange\");break;case \"select\":d._wrapperState=\n{wasMultiple:!!f.multiple};F(\"invalid\",d);rd(c,\"onChange\");break;case \"textarea\":Jb(d,f),F(\"invalid\",d),rd(c,\"onChange\")}od(e,f);a=null;for(var g in f)if(f.hasOwnProperty(g)){var h=f[g];\"children\"===g?\"string\"===typeof h?d.textContent!==h&&(a=[\"children\",h]):\"number\"===typeof h&&d.textContent!==\"\"+h&&(a=[\"children\",\"\"+h]):va.hasOwnProperty(g)&&null!=h&&rd(c,g)}switch(e){case \"input\":xb(d);Eb(d,f,!0);break;case \"textarea\":xb(d);Lb(d);break;case \"select\":case \"option\":break;default:\"function\"===typeof f.onClick&&\n(d.onclick=sd)}c=a;b.updateQueue=c;null!==c&&(b.effectTag|=4)}else{g=9===c.nodeType?c:c.ownerDocument;a===qd&&(a=Nb(e));a===qd?\"script\"===e?(a=g.createElement(\"div\"),a.innerHTML=\"<script>\\x3c/script>\",a=a.removeChild(a.firstChild)):\"string\"===typeof d.is?a=g.createElement(e,{is:d.is}):(a=g.createElement(e),\"select\"===e&&(g=a,d.multiple?g.multiple=!0:d.size&&(g.size=d.size))):a=g.createElementNS(a,e);a[Md]=b;a[Nd]=d;ni(a,b,!1,!1);b.stateNode=a;g=pd(e,d);switch(e){case \"iframe\":case \"object\":case \"embed\":F(\"load\",\na);h=d;break;case \"video\":case \"audio\":for(h=0;h<ac.length;h++)F(ac[h],a);h=d;break;case \"source\":F(\"error\",a);h=d;break;case \"img\":case \"image\":case \"link\":F(\"error\",a);F(\"load\",a);h=d;break;case \"form\":F(\"reset\",a);F(\"submit\",a);h=d;break;case \"details\":F(\"toggle\",a);h=d;break;case \"input\":Ab(a,d);h=zb(a,d);F(\"invalid\",a);rd(c,\"onChange\");break;case \"option\":h=Gb(a,d);break;case \"select\":a._wrapperState={wasMultiple:!!d.multiple};h=n({},d,{value:void 0});F(\"invalid\",a);rd(c,\"onChange\");break;case \"textarea\":Jb(a,\nd);h=Ib(a,d);F(\"invalid\",a);rd(c,\"onChange\");break;default:h=d}od(e,h);var k=h;for(f in k)if(k.hasOwnProperty(f)){var l=k[f];\"style\"===f?md(a,l):\"dangerouslySetInnerHTML\"===f?(l=l?l.__html:void 0,null!=l&&Qb(a,l)):\"children\"===f?\"string\"===typeof l?(\"textarea\"!==e||\"\"!==l)&&Rb(a,l):\"number\"===typeof l&&Rb(a,\"\"+l):\"suppressContentEditableWarning\"!==f&&\"suppressHydrationWarning\"!==f&&\"autoFocus\"!==f&&(va.hasOwnProperty(f)?null!=l&&rd(c,f):null!=l&&Xa(a,f,l,g))}switch(e){case \"input\":xb(a);Eb(a,d,!1);\nbreak;case \"textarea\":xb(a);Lb(a);break;case \"option\":null!=d.value&&a.setAttribute(\"value\",\"\"+rb(d.value));break;case \"select\":a.multiple=!!d.multiple;c=d.value;null!=c?Hb(a,!!d.multiple,c,!1):null!=d.defaultValue&&Hb(a,!!d.multiple,d.defaultValue,!0);break;default:\"function\"===typeof h.onClick&&(a.onclick=sd)}Fd(e,d)&&(b.effectTag|=4)}null!==b.ref&&(b.effectTag|=128)}return null;case 6:if(a&&null!=b.stateNode)qi(a,b,a.memoizedProps,d);else{if(\"string\"!==typeof d&&null===b.stateNode)throw Error(u(166));\nc=ch(bh.current);ch($g.current);Wh(b)?(c=b.stateNode,d=b.memoizedProps,c[Md]=b,c.nodeValue!==d&&(b.effectTag|=4)):(c=(9===c.nodeType?c:c.ownerDocument).createTextNode(d),c[Md]=b,b.stateNode=c)}return null;case 13:H(M);d=b.memoizedState;if(0!==(b.effectTag&64))return b.expirationTime=c,b;c=null!==d;d=!1;null===a?void 0!==b.memoizedProps.fallback&&Wh(b):(e=a.memoizedState,d=null!==e,c||null===e||(e=a.child.sibling,null!==e&&(f=b.firstEffect,null!==f?(b.firstEffect=e,e.nextEffect=f):(b.firstEffect=b.lastEffect=\ne,e.nextEffect=null),e.effectTag=8)));if(c&&!d&&0!==(b.mode&2))if(null===a&&!0!==b.memoizedProps.unstable_avoidThisFallback||0!==(M.current&1))S===ti&&(S=ui);else{if(S===ti||S===ui)S=vi;0!==wi&&null!==T&&(xi(T,U),yi(T,wi))}if(c||d)b.effectTag|=4;return null;case 4:return eh(),oi(b),null;case 10:return og(b),null;case 17:return L(b.type)&&Df(),null;case 19:H(M);d=b.memoizedState;if(null===d)return null;e=0!==(b.effectTag&64);f=d.rendering;if(null===f)if(e)ri(d,!1);else{if(S!==ti||null!==a&&0!==(a.effectTag&\n64))for(f=b.child;null!==f;){a=hh(f);if(null!==a){b.effectTag|=64;ri(d,!1);e=a.updateQueue;null!==e&&(b.updateQueue=e,b.effectTag|=4);null===d.lastEffect&&(b.firstEffect=null);b.lastEffect=d.lastEffect;for(d=b.child;null!==d;)e=d,f=c,e.effectTag&=2,e.nextEffect=null,e.firstEffect=null,e.lastEffect=null,a=e.alternate,null===a?(e.childExpirationTime=0,e.expirationTime=f,e.child=null,e.memoizedProps=null,e.memoizedState=null,e.updateQueue=null,e.dependencies=null):(e.childExpirationTime=a.childExpirationTime,\ne.expirationTime=a.expirationTime,e.child=a.child,e.memoizedProps=a.memoizedProps,e.memoizedState=a.memoizedState,e.updateQueue=a.updateQueue,f=a.dependencies,e.dependencies=null===f?null:{expirationTime:f.expirationTime,firstContext:f.firstContext,responders:f.responders}),d=d.sibling;I(M,M.current&1|2);return b.child}f=f.sibling}}else{if(!e)if(a=hh(f),null!==a){if(b.effectTag|=64,e=!0,c=a.updateQueue,null!==c&&(b.updateQueue=c,b.effectTag|=4),ri(d,!0),null===d.tail&&\"hidden\"===d.tailMode&&!f.alternate)return b=\nb.lastEffect=d.lastEffect,null!==b&&(b.nextEffect=null),null}else 2*$f()-d.renderingStartTime>d.tailExpiration&&1<c&&(b.effectTag|=64,e=!0,ri(d,!1),b.expirationTime=b.childExpirationTime=c-1);d.isBackwards?(f.sibling=b.child,b.child=f):(c=d.last,null!==c?c.sibling=f:b.child=f,d.last=f)}return null!==d.tail?(0===d.tailExpiration&&(d.tailExpiration=$f()+500),c=d.tail,d.rendering=c,d.tail=c.sibling,d.lastEffect=b.lastEffect,d.renderingStartTime=$f(),c.sibling=null,b=M.current,I(M,e?b&1|2:b&1),c):null}throw Error(u(156,\nb.tag));}function zi(a){switch(a.tag){case 1:L(a.type)&&Df();var b=a.effectTag;return b&4096?(a.effectTag=b&-4097|64,a):null;case 3:eh();H(K);H(J);b=a.effectTag;if(0!==(b&64))throw Error(u(285));a.effectTag=b&-4097|64;return a;case 5:return gh(a),null;case 13:return H(M),b=a.effectTag,b&4096?(a.effectTag=b&-4097|64,a):null;case 19:return H(M),null;case 4:return eh(),null;case 10:return og(a),null;default:return null}}function Ai(a,b){return{value:a,source:b,stack:qb(b)}}\nvar Bi=\"function\"===typeof WeakSet?WeakSet:Set;function Ci(a,b){var c=b.source,d=b.stack;null===d&&null!==c&&(d=qb(c));null!==c&&pb(c.type);b=b.value;null!==a&&1===a.tag&&pb(a.type);try{console.error(b)}catch(e){setTimeout(function(){throw e;})}}function Di(a,b){try{b.props=a.memoizedProps,b.state=a.memoizedState,b.componentWillUnmount()}catch(c){Ei(a,c)}}function Fi(a){var b=a.ref;if(null!==b)if(\"function\"===typeof b)try{b(null)}catch(c){Ei(a,c)}else b.current=null}\nfunction Gi(a,b){switch(b.tag){case 0:case 11:case 15:case 22:return;case 1:if(b.effectTag&256&&null!==a){var c=a.memoizedProps,d=a.memoizedState;a=b.stateNode;b=a.getSnapshotBeforeUpdate(b.elementType===b.type?c:ig(b.type,c),d);a.__reactInternalSnapshotBeforeUpdate=b}return;case 3:case 5:case 6:case 4:case 17:return}throw Error(u(163));}\nfunction Hi(a,b){b=b.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){var c=b=b.next;do{if((c.tag&a)===a){var d=c.destroy;c.destroy=void 0;void 0!==d&&d()}c=c.next}while(c!==b)}}function Ii(a,b){b=b.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){var c=b=b.next;do{if((c.tag&a)===a){var d=c.create;c.destroy=d()}c=c.next}while(c!==b)}}\nfunction Ji(a,b,c){switch(c.tag){case 0:case 11:case 15:case 22:Ii(3,c);return;case 1:a=c.stateNode;if(c.effectTag&4)if(null===b)a.componentDidMount();else{var d=c.elementType===c.type?b.memoizedProps:ig(c.type,b.memoizedProps);a.componentDidUpdate(d,b.memoizedState,a.__reactInternalSnapshotBeforeUpdate)}b=c.updateQueue;null!==b&&Cg(c,b,a);return;case 3:b=c.updateQueue;if(null!==b){a=null;if(null!==c.child)switch(c.child.tag){case 5:a=c.child.stateNode;break;case 1:a=c.child.stateNode}Cg(c,b,a)}return;\ncase 5:a=c.stateNode;null===b&&c.effectTag&4&&Fd(c.type,c.memoizedProps)&&a.focus();return;case 6:return;case 4:return;case 12:return;case 13:null===c.memoizedState&&(c=c.alternate,null!==c&&(c=c.memoizedState,null!==c&&(c=c.dehydrated,null!==c&&Vc(c))));return;case 19:case 17:case 20:case 21:return}throw Error(u(163));}\nfunction Ki(a,b,c){\"function\"===typeof Li&&Li(b);switch(b.tag){case 0:case 11:case 14:case 15:case 22:a=b.updateQueue;if(null!==a&&(a=a.lastEffect,null!==a)){var d=a.next;cg(97<c?97:c,function(){var a=d;do{var c=a.destroy;if(void 0!==c){var g=b;try{c()}catch(h){Ei(g,h)}}a=a.next}while(a!==d)})}break;case 1:Fi(b);c=b.stateNode;\"function\"===typeof c.componentWillUnmount&&Di(b,c);break;case 5:Fi(b);break;case 4:Mi(a,b,c)}}\nfunction Ni(a){var b=a.alternate;a.return=null;a.child=null;a.memoizedState=null;a.updateQueue=null;a.dependencies=null;a.alternate=null;a.firstEffect=null;a.lastEffect=null;a.pendingProps=null;a.memoizedProps=null;a.stateNode=null;null!==b&&Ni(b)}function Oi(a){return 5===a.tag||3===a.tag||4===a.tag}\nfunction Pi(a){a:{for(var b=a.return;null!==b;){if(Oi(b)){var c=b;break a}b=b.return}throw Error(u(160));}b=c.stateNode;switch(c.tag){case 5:var d=!1;break;case 3:b=b.containerInfo;d=!0;break;case 4:b=b.containerInfo;d=!0;break;default:throw Error(u(161));}c.effectTag&16&&(Rb(b,\"\"),c.effectTag&=-17);a:b:for(c=a;;){for(;null===c.sibling;){if(null===c.return||Oi(c.return)){c=null;break a}c=c.return}c.sibling.return=c.return;for(c=c.sibling;5!==c.tag&&6!==c.tag&&18!==c.tag;){if(c.effectTag&2)continue b;\nif(null===c.child||4===c.tag)continue b;else c.child.return=c,c=c.child}if(!(c.effectTag&2)){c=c.stateNode;break a}}d?Qi(a,c,b):Ri(a,c,b)}\nfunction Qi(a,b,c){var d=a.tag,e=5===d||6===d;if(e)a=e?a.stateNode:a.stateNode.instance,b?8===c.nodeType?c.parentNode.insertBefore(a,b):c.insertBefore(a,b):(8===c.nodeType?(b=c.parentNode,b.insertBefore(a,c)):(b=c,b.appendChild(a)),c=c._reactRootContainer,null!==c&&void 0!==c||null!==b.onclick||(b.onclick=sd));else if(4!==d&&(a=a.child,null!==a))for(Qi(a,b,c),a=a.sibling;null!==a;)Qi(a,b,c),a=a.sibling}\nfunction Ri(a,b,c){var d=a.tag,e=5===d||6===d;if(e)a=e?a.stateNode:a.stateNode.instance,b?c.insertBefore(a,b):c.appendChild(a);else if(4!==d&&(a=a.child,null!==a))for(Ri(a,b,c),a=a.sibling;null!==a;)Ri(a,b,c),a=a.sibling}\nfunction Mi(a,b,c){for(var d=b,e=!1,f,g;;){if(!e){e=d.return;a:for(;;){if(null===e)throw Error(u(160));f=e.stateNode;switch(e.tag){case 5:g=!1;break a;case 3:f=f.containerInfo;g=!0;break a;case 4:f=f.containerInfo;g=!0;break a}e=e.return}e=!0}if(5===d.tag||6===d.tag){a:for(var h=a,k=d,l=c,m=k;;)if(Ki(h,m,l),null!==m.child&&4!==m.tag)m.child.return=m,m=m.child;else{if(m===k)break a;for(;null===m.sibling;){if(null===m.return||m.return===k)break a;m=m.return}m.sibling.return=m.return;m=m.sibling}g?(h=\nf,k=d.stateNode,8===h.nodeType?h.parentNode.removeChild(k):h.removeChild(k)):f.removeChild(d.stateNode)}else if(4===d.tag){if(null!==d.child){f=d.stateNode.containerInfo;g=!0;d.child.return=d;d=d.child;continue}}else if(Ki(a,d,c),null!==d.child){d.child.return=d;d=d.child;continue}if(d===b)break;for(;null===d.sibling;){if(null===d.return||d.return===b)return;d=d.return;4===d.tag&&(e=!1)}d.sibling.return=d.return;d=d.sibling}}\nfunction Si(a,b){switch(b.tag){case 0:case 11:case 14:case 15:case 22:Hi(3,b);return;case 1:return;case 5:var c=b.stateNode;if(null!=c){var d=b.memoizedProps,e=null!==a?a.memoizedProps:d;a=b.type;var f=b.updateQueue;b.updateQueue=null;if(null!==f){c[Nd]=d;\"input\"===a&&\"radio\"===d.type&&null!=d.name&&Bb(c,d);pd(a,e);b=pd(a,d);for(e=0;e<f.length;e+=2){var g=f[e],h=f[e+1];\"style\"===g?md(c,h):\"dangerouslySetInnerHTML\"===g?Qb(c,h):\"children\"===g?Rb(c,h):Xa(c,g,h,b)}switch(a){case \"input\":Cb(c,d);break;\ncase \"textarea\":Kb(c,d);break;case \"select\":b=c._wrapperState.wasMultiple,c._wrapperState.wasMultiple=!!d.multiple,a=d.value,null!=a?Hb(c,!!d.multiple,a,!1):b!==!!d.multiple&&(null!=d.defaultValue?Hb(c,!!d.multiple,d.defaultValue,!0):Hb(c,!!d.multiple,d.multiple?[]:\"\",!1))}}}return;case 6:if(null===b.stateNode)throw Error(u(162));b.stateNode.nodeValue=b.memoizedProps;return;case 3:b=b.stateNode;b.hydrate&&(b.hydrate=!1,Vc(b.containerInfo));return;case 12:return;case 13:c=b;null===b.memoizedState?\nd=!1:(d=!0,c=b.child,Ti=$f());if(null!==c)a:for(a=c;;){if(5===a.tag)f=a.stateNode,d?(f=f.style,\"function\"===typeof f.setProperty?f.setProperty(\"display\",\"none\",\"important\"):f.display=\"none\"):(f=a.stateNode,e=a.memoizedProps.style,e=void 0!==e&&null!==e&&e.hasOwnProperty(\"display\")?e.display:null,f.style.display=ld(\"display\",e));else if(6===a.tag)a.stateNode.nodeValue=d?\"\":a.memoizedProps;else if(13===a.tag&&null!==a.memoizedState&&null===a.memoizedState.dehydrated){f=a.child.sibling;f.return=a;a=\nf;continue}else if(null!==a.child){a.child.return=a;a=a.child;continue}if(a===c)break;for(;null===a.sibling;){if(null===a.return||a.return===c)break a;a=a.return}a.sibling.return=a.return;a=a.sibling}Ui(b);return;case 19:Ui(b);return;case 17:return}throw Error(u(163));}function Ui(a){var b=a.updateQueue;if(null!==b){a.updateQueue=null;var c=a.stateNode;null===c&&(c=a.stateNode=new Bi);b.forEach(function(b){var d=Vi.bind(null,a,b);c.has(b)||(c.add(b),b.then(d,d))})}}\nvar Wi=\"function\"===typeof WeakMap?WeakMap:Map;function Xi(a,b,c){c=wg(c,null);c.tag=3;c.payload={element:null};var d=b.value;c.callback=function(){Yi||(Yi=!0,Zi=d);Ci(a,b)};return c}\nfunction $i(a,b,c){c=wg(c,null);c.tag=3;var d=a.type.getDerivedStateFromError;if(\"function\"===typeof d){var e=b.value;c.payload=function(){Ci(a,b);return d(e)}}var f=a.stateNode;null!==f&&\"function\"===typeof f.componentDidCatch&&(c.callback=function(){\"function\"!==typeof d&&(null===aj?aj=new Set([this]):aj.add(this),Ci(a,b));var c=b.stack;this.componentDidCatch(b.value,{componentStack:null!==c?c:\"\"})});return c}\nvar bj=Math.ceil,cj=Wa.ReactCurrentDispatcher,dj=Wa.ReactCurrentOwner,V=0,ej=8,fj=16,gj=32,ti=0,hj=1,ij=2,ui=3,vi=4,jj=5,W=V,T=null,X=null,U=0,S=ti,kj=null,lj=1073741823,mj=1073741823,nj=null,wi=0,oj=!1,Ti=0,pj=500,Y=null,Yi=!1,Zi=null,aj=null,qj=!1,rj=null,sj=90,tj=null,uj=0,vj=null,wj=0;function Gg(){return(W&(fj|gj))!==V?1073741821-($f()/10|0):0!==wj?wj:wj=1073741821-($f()/10|0)}\nfunction Hg(a,b,c){b=b.mode;if(0===(b&2))return 1073741823;var d=ag();if(0===(b&4))return 99===d?1073741823:1073741822;if((W&fj)!==V)return U;if(null!==c)a=hg(a,c.timeoutMs|0||5E3,250);else switch(d){case 99:a=1073741823;break;case 98:a=hg(a,150,100);break;case 97:case 96:a=hg(a,5E3,250);break;case 95:a=2;break;default:throw Error(u(326));}null!==T&&a===U&&--a;return a}\nfunction Ig(a,b){if(50<uj)throw uj=0,vj=null,Error(u(185));a=xj(a,b);if(null!==a){var c=ag();1073741823===b?(W&ej)!==V&&(W&(fj|gj))===V?yj(a):(Z(a),W===V&&gg()):Z(a);(W&4)===V||98!==c&&99!==c||(null===tj?tj=new Map([[a,b]]):(c=tj.get(a),(void 0===c||c>b)&&tj.set(a,b)))}}\nfunction xj(a,b){a.expirationTime<b&&(a.expirationTime=b);var c=a.alternate;null!==c&&c.expirationTime<b&&(c.expirationTime=b);var d=a.return,e=null;if(null===d&&3===a.tag)e=a.stateNode;else for(;null!==d;){c=d.alternate;d.childExpirationTime<b&&(d.childExpirationTime=b);null!==c&&c.childExpirationTime<b&&(c.childExpirationTime=b);if(null===d.return&&3===d.tag){e=d.stateNode;break}d=d.return}null!==e&&(T===e&&(Bg(b),S===vi&&xi(e,U)),yi(e,b));return e}\nfunction zj(a){var b=a.lastExpiredTime;if(0!==b)return b;b=a.firstPendingTime;if(!Aj(a,b))return b;var c=a.lastPingedTime;a=a.nextKnownPendingLevel;a=c>a?c:a;return 2>=a&&b!==a?0:a}\nfunction Z(a){if(0!==a.lastExpiredTime)a.callbackExpirationTime=1073741823,a.callbackPriority=99,a.callbackNode=eg(yj.bind(null,a));else{var b=zj(a),c=a.callbackNode;if(0===b)null!==c&&(a.callbackNode=null,a.callbackExpirationTime=0,a.callbackPriority=90);else{var d=Gg();1073741823===b?d=99:1===b||2===b?d=95:(d=10*(1073741821-b)-10*(1073741821-d),d=0>=d?99:250>=d?98:5250>=d?97:95);if(null!==c){var e=a.callbackPriority;if(a.callbackExpirationTime===b&&e>=d)return;c!==Tf&&Kf(c)}a.callbackExpirationTime=\nb;a.callbackPriority=d;b=1073741823===b?eg(yj.bind(null,a)):dg(d,Bj.bind(null,a),{timeout:10*(1073741821-b)-$f()});a.callbackNode=b}}}\nfunction Bj(a,b){wj=0;if(b)return b=Gg(),Cj(a,b),Z(a),null;var c=zj(a);if(0!==c){b=a.callbackNode;if((W&(fj|gj))!==V)throw Error(u(327));Dj();a===T&&c===U||Ej(a,c);if(null!==X){var d=W;W|=fj;var e=Fj();do try{Gj();break}catch(h){Hj(a,h)}while(1);ng();W=d;cj.current=e;if(S===hj)throw b=kj,Ej(a,c),xi(a,c),Z(a),b;if(null===X)switch(e=a.finishedWork=a.current.alternate,a.finishedExpirationTime=c,d=S,T=null,d){case ti:case hj:throw Error(u(345));case ij:Cj(a,2<c?2:c);break;case ui:xi(a,c);d=a.lastSuspendedTime;\nc===d&&(a.nextKnownPendingLevel=Ij(e));if(1073741823===lj&&(e=Ti+pj-$f(),10<e)){if(oj){var f=a.lastPingedTime;if(0===f||f>=c){a.lastPingedTime=c;Ej(a,c);break}}f=zj(a);if(0!==f&&f!==c)break;if(0!==d&&d!==c){a.lastPingedTime=d;break}a.timeoutHandle=Hd(Jj.bind(null,a),e);break}Jj(a);break;case vi:xi(a,c);d=a.lastSuspendedTime;c===d&&(a.nextKnownPendingLevel=Ij(e));if(oj&&(e=a.lastPingedTime,0===e||e>=c)){a.lastPingedTime=c;Ej(a,c);break}e=zj(a);if(0!==e&&e!==c)break;if(0!==d&&d!==c){a.lastPingedTime=\nd;break}1073741823!==mj?d=10*(1073741821-mj)-$f():1073741823===lj?d=0:(d=10*(1073741821-lj)-5E3,e=$f(),c=10*(1073741821-c)-e,d=e-d,0>d&&(d=0),d=(120>d?120:480>d?480:1080>d?1080:1920>d?1920:3E3>d?3E3:4320>d?4320:1960*bj(d/1960))-d,c<d&&(d=c));if(10<d){a.timeoutHandle=Hd(Jj.bind(null,a),d);break}Jj(a);break;case jj:if(1073741823!==lj&&null!==nj){f=lj;var g=nj;d=g.busyMinDurationMs|0;0>=d?d=0:(e=g.busyDelayMs|0,f=$f()-(10*(1073741821-f)-(g.timeoutMs|0||5E3)),d=f<=e?0:e+d-f);if(10<d){xi(a,c);a.timeoutHandle=\nHd(Jj.bind(null,a),d);break}}Jj(a);break;default:throw Error(u(329));}Z(a);if(a.callbackNode===b)return Bj.bind(null,a)}}return null}\nfunction yj(a){var b=a.lastExpiredTime;b=0!==b?b:1073741823;if((W&(fj|gj))!==V)throw Error(u(327));Dj();a===T&&b===U||Ej(a,b);if(null!==X){var c=W;W|=fj;var d=Fj();do try{Kj();break}catch(e){Hj(a,e)}while(1);ng();W=c;cj.current=d;if(S===hj)throw c=kj,Ej(a,b),xi(a,b),Z(a),c;if(null!==X)throw Error(u(261));a.finishedWork=a.current.alternate;a.finishedExpirationTime=b;T=null;Jj(a);Z(a)}return null}function Lj(){if(null!==tj){var a=tj;tj=null;a.forEach(function(a,c){Cj(c,a);Z(c)});gg()}}\nfunction Mj(a,b){var c=W;W|=1;try{return a(b)}finally{W=c,W===V&&gg()}}function Nj(a,b){var c=W;W&=-2;W|=ej;try{return a(b)}finally{W=c,W===V&&gg()}}\nfunction Ej(a,b){a.finishedWork=null;a.finishedExpirationTime=0;var c=a.timeoutHandle;-1!==c&&(a.timeoutHandle=-1,Id(c));if(null!==X)for(c=X.return;null!==c;){var d=c;switch(d.tag){case 1:d=d.type.childContextTypes;null!==d&&void 0!==d&&Df();break;case 3:eh();H(K);H(J);break;case 5:gh(d);break;case 4:eh();break;case 13:H(M);break;case 19:H(M);break;case 10:og(d)}c=c.return}T=a;X=Sg(a.current,null);U=b;S=ti;kj=null;mj=lj=1073741823;nj=null;wi=0;oj=!1}\nfunction Hj(a,b){do{try{ng();jh.current=sh;if(mh)for(var c=N.memoizedState;null!==c;){var d=c.queue;null!==d&&(d.pending=null);c=c.next}lh=0;P=O=N=null;mh=!1;if(null===X||null===X.return)return S=hj,kj=b,X=null;a:{var e=a,f=X.return,g=X,h=b;b=U;g.effectTag|=2048;g.firstEffect=g.lastEffect=null;if(null!==h&&\"object\"===typeof h&&\"function\"===typeof h.then){var k=h;if(0===(g.mode&2)){var l=g.alternate;l?(g.updateQueue=l.updateQueue,g.memoizedState=l.memoizedState,g.expirationTime=l.expirationTime):(g.updateQueue=\nnull,g.memoizedState=null)}var m=0!==(M.current&1),p=f;do{var x;if(x=13===p.tag){var z=p.memoizedState;if(null!==z)x=null!==z.dehydrated?!0:!1;else{var ca=p.memoizedProps;x=void 0===ca.fallback?!1:!0!==ca.unstable_avoidThisFallback?!0:m?!1:!0}}if(x){var D=p.updateQueue;if(null===D){var t=new Set;t.add(k);p.updateQueue=t}else D.add(k);if(0===(p.mode&2)){p.effectTag|=64;g.effectTag&=-2981;if(1===g.tag)if(null===g.alternate)g.tag=17;else{var y=wg(1073741823,null);y.tag=2;xg(g,y)}g.expirationTime=1073741823;\nbreak a}h=void 0;g=b;var A=e.pingCache;null===A?(A=e.pingCache=new Wi,h=new Set,A.set(k,h)):(h=A.get(k),void 0===h&&(h=new Set,A.set(k,h)));if(!h.has(g)){h.add(g);var q=Oj.bind(null,e,k,g);k.then(q,q)}p.effectTag|=4096;p.expirationTime=b;break a}p=p.return}while(null!==p);h=Error((pb(g.type)||\"A React component\")+\" suspended while rendering, but no fallback UI was specified.\\n\\nAdd a <Suspense fallback=...> component higher in the tree to provide a loading indicator or placeholder to display.\"+qb(g))}S!==\njj&&(S=ij);h=Ai(h,g);p=f;do{switch(p.tag){case 3:k=h;p.effectTag|=4096;p.expirationTime=b;var B=Xi(p,k,b);yg(p,B);break a;case 1:k=h;var w=p.type,ub=p.stateNode;if(0===(p.effectTag&64)&&(\"function\"===typeof w.getDerivedStateFromError||null!==ub&&\"function\"===typeof ub.componentDidCatch&&(null===aj||!aj.has(ub)))){p.effectTag|=4096;p.expirationTime=b;var vb=$i(p,k,b);yg(p,vb);break a}}p=p.return}while(null!==p)}X=Pj(X)}catch(Xc){b=Xc;continue}break}while(1)}\nfunction Fj(){var a=cj.current;cj.current=sh;return null===a?sh:a}function Ag(a,b){a<lj&&2<a&&(lj=a);null!==b&&a<mj&&2<a&&(mj=a,nj=b)}function Bg(a){a>wi&&(wi=a)}function Kj(){for(;null!==X;)X=Qj(X)}function Gj(){for(;null!==X&&!Uf();)X=Qj(X)}function Qj(a){var b=Rj(a.alternate,a,U);a.memoizedProps=a.pendingProps;null===b&&(b=Pj(a));dj.current=null;return b}\nfunction Pj(a){X=a;do{var b=X.alternate;a=X.return;if(0===(X.effectTag&2048)){b=si(b,X,U);if(1===U||1!==X.childExpirationTime){for(var c=0,d=X.child;null!==d;){var e=d.expirationTime,f=d.childExpirationTime;e>c&&(c=e);f>c&&(c=f);d=d.sibling}X.childExpirationTime=c}if(null!==b)return b;null!==a&&0===(a.effectTag&2048)&&(null===a.firstEffect&&(a.firstEffect=X.firstEffect),null!==X.lastEffect&&(null!==a.lastEffect&&(a.lastEffect.nextEffect=X.firstEffect),a.lastEffect=X.lastEffect),1<X.effectTag&&(null!==\na.lastEffect?a.lastEffect.nextEffect=X:a.firstEffect=X,a.lastEffect=X))}else{b=zi(X);if(null!==b)return b.effectTag&=2047,b;null!==a&&(a.firstEffect=a.lastEffect=null,a.effectTag|=2048)}b=X.sibling;if(null!==b)return b;X=a}while(null!==X);S===ti&&(S=jj);return null}function Ij(a){var b=a.expirationTime;a=a.childExpirationTime;return b>a?b:a}function Jj(a){var b=ag();cg(99,Sj.bind(null,a,b));return null}\nfunction Sj(a,b){do Dj();while(null!==rj);if((W&(fj|gj))!==V)throw Error(u(327));var c=a.finishedWork,d=a.finishedExpirationTime;if(null===c)return null;a.finishedWork=null;a.finishedExpirationTime=0;if(c===a.current)throw Error(u(177));a.callbackNode=null;a.callbackExpirationTime=0;a.callbackPriority=90;a.nextKnownPendingLevel=0;var e=Ij(c);a.firstPendingTime=e;d<=a.lastSuspendedTime?a.firstSuspendedTime=a.lastSuspendedTime=a.nextKnownPendingLevel=0:d<=a.firstSuspendedTime&&(a.firstSuspendedTime=\nd-1);d<=a.lastPingedTime&&(a.lastPingedTime=0);d<=a.lastExpiredTime&&(a.lastExpiredTime=0);a===T&&(X=T=null,U=0);1<c.effectTag?null!==c.lastEffect?(c.lastEffect.nextEffect=c,e=c.firstEffect):e=c:e=c.firstEffect;if(null!==e){var f=W;W|=gj;dj.current=null;Dd=fd;var g=xd();if(yd(g)){if(\"selectionStart\"in g)var h={start:g.selectionStart,end:g.selectionEnd};else a:{h=(h=g.ownerDocument)&&h.defaultView||window;var k=h.getSelection&&h.getSelection();if(k&&0!==k.rangeCount){h=k.anchorNode;var l=k.anchorOffset,\nm=k.focusNode;k=k.focusOffset;try{h.nodeType,m.nodeType}catch(wb){h=null;break a}var p=0,x=-1,z=-1,ca=0,D=0,t=g,y=null;b:for(;;){for(var A;;){t!==h||0!==l&&3!==t.nodeType||(x=p+l);t!==m||0!==k&&3!==t.nodeType||(z=p+k);3===t.nodeType&&(p+=t.nodeValue.length);if(null===(A=t.firstChild))break;y=t;t=A}for(;;){if(t===g)break b;y===h&&++ca===l&&(x=p);y===m&&++D===k&&(z=p);if(null!==(A=t.nextSibling))break;t=y;y=t.parentNode}t=A}h=-1===x||-1===z?null:{start:x,end:z}}else h=null}h=h||{start:0,end:0}}else h=\nnull;Ed={activeElementDetached:null,focusedElem:g,selectionRange:h};fd=!1;Y=e;do try{Tj()}catch(wb){if(null===Y)throw Error(u(330));Ei(Y,wb);Y=Y.nextEffect}while(null!==Y);Y=e;do try{for(g=a,h=b;null!==Y;){var q=Y.effectTag;q&16&&Rb(Y.stateNode,\"\");if(q&128){var B=Y.alternate;if(null!==B){var w=B.ref;null!==w&&(\"function\"===typeof w?w(null):w.current=null)}}switch(q&1038){case 2:Pi(Y);Y.effectTag&=-3;break;case 6:Pi(Y);Y.effectTag&=-3;Si(Y.alternate,Y);break;case 1024:Y.effectTag&=-1025;break;case 1028:Y.effectTag&=\n-1025;Si(Y.alternate,Y);break;case 4:Si(Y.alternate,Y);break;case 8:l=Y,Mi(g,l,h),Ni(l)}Y=Y.nextEffect}}catch(wb){if(null===Y)throw Error(u(330));Ei(Y,wb);Y=Y.nextEffect}while(null!==Y);w=Ed;B=xd();q=w.focusedElem;h=w.selectionRange;if(B!==q&&q&&q.ownerDocument&&wd(q.ownerDocument.documentElement,q)){null!==h&&yd(q)&&(B=h.start,w=h.end,void 0===w&&(w=B),\"selectionStart\"in q?(q.selectionStart=B,q.selectionEnd=Math.min(w,q.value.length)):(w=(B=q.ownerDocument||document)&&B.defaultView||window,w.getSelection&&\n(w=w.getSelection(),l=q.textContent.length,g=Math.min(h.start,l),h=void 0===h.end?g:Math.min(h.end,l),!w.extend&&g>h&&(l=h,h=g,g=l),l=vd(q,g),m=vd(q,h),l&&m&&(1!==w.rangeCount||w.anchorNode!==l.node||w.anchorOffset!==l.offset||w.focusNode!==m.node||w.focusOffset!==m.offset)&&(B=B.createRange(),B.setStart(l.node,l.offset),w.removeAllRanges(),g>h?(w.addRange(B),w.extend(m.node,m.offset)):(B.setEnd(m.node,m.offset),w.addRange(B))))));B=[];for(w=q;w=w.parentNode;)1===w.nodeType&&B.push({element:w,left:w.scrollLeft,\ntop:w.scrollTop});\"function\"===typeof q.focus&&q.focus();for(q=0;q<B.length;q++)w=B[q],w.element.scrollLeft=w.left,w.element.scrollTop=w.top}fd=!!Dd;Ed=Dd=null;a.current=c;Y=e;do try{for(q=a;null!==Y;){var ub=Y.effectTag;ub&36&&Ji(q,Y.alternate,Y);if(ub&128){B=void 0;var vb=Y.ref;if(null!==vb){var Xc=Y.stateNode;switch(Y.tag){case 5:B=Xc;break;default:B=Xc}\"function\"===typeof vb?vb(B):vb.current=B}}Y=Y.nextEffect}}catch(wb){if(null===Y)throw Error(u(330));Ei(Y,wb);Y=Y.nextEffect}while(null!==Y);Y=\nnull;Vf();W=f}else a.current=c;if(qj)qj=!1,rj=a,sj=b;else for(Y=e;null!==Y;)b=Y.nextEffect,Y.nextEffect=null,Y=b;b=a.firstPendingTime;0===b&&(aj=null);1073741823===b?a===vj?uj++:(uj=0,vj=a):uj=0;\"function\"===typeof Uj&&Uj(c.stateNode,d);Z(a);if(Yi)throw Yi=!1,a=Zi,Zi=null,a;if((W&ej)!==V)return null;gg();return null}function Tj(){for(;null!==Y;){var a=Y.effectTag;0!==(a&256)&&Gi(Y.alternate,Y);0===(a&512)||qj||(qj=!0,dg(97,function(){Dj();return null}));Y=Y.nextEffect}}\nfunction Dj(){if(90!==sj){var a=97<sj?97:sj;sj=90;return cg(a,Vj)}}function Vj(){if(null===rj)return!1;var a=rj;rj=null;if((W&(fj|gj))!==V)throw Error(u(331));var b=W;W|=gj;for(a=a.current.firstEffect;null!==a;){try{var c=a;if(0!==(c.effectTag&512))switch(c.tag){case 0:case 11:case 15:case 22:Hi(5,c),Ii(5,c)}}catch(d){if(null===a)throw Error(u(330));Ei(a,d)}c=a.nextEffect;a.nextEffect=null;a=c}W=b;gg();return!0}\nfunction Wj(a,b,c){b=Ai(c,b);b=Xi(a,b,1073741823);xg(a,b);a=xj(a,1073741823);null!==a&&Z(a)}function Ei(a,b){if(3===a.tag)Wj(a,a,b);else for(var c=a.return;null!==c;){if(3===c.tag){Wj(c,a,b);break}else if(1===c.tag){var d=c.stateNode;if(\"function\"===typeof c.type.getDerivedStateFromError||\"function\"===typeof d.componentDidCatch&&(null===aj||!aj.has(d))){a=Ai(b,a);a=$i(c,a,1073741823);xg(c,a);c=xj(c,1073741823);null!==c&&Z(c);break}}c=c.return}}\nfunction Oj(a,b,c){var d=a.pingCache;null!==d&&d.delete(b);T===a&&U===c?S===vi||S===ui&&1073741823===lj&&$f()-Ti<pj?Ej(a,U):oj=!0:Aj(a,c)&&(b=a.lastPingedTime,0!==b&&b<c||(a.lastPingedTime=c,Z(a)))}function Vi(a,b){var c=a.stateNode;null!==c&&c.delete(b);b=0;0===b&&(b=Gg(),b=Hg(b,a,null));a=xj(a,b);null!==a&&Z(a)}var Rj;\nRj=function(a,b,c){var d=b.expirationTime;if(null!==a){var e=b.pendingProps;if(a.memoizedProps!==e||K.current)rg=!0;else{if(d<c){rg=!1;switch(b.tag){case 3:hi(b);Xh();break;case 5:fh(b);if(b.mode&4&&1!==c&&e.hidden)return b.expirationTime=b.childExpirationTime=1,null;break;case 1:L(b.type)&&Gf(b);break;case 4:dh(b,b.stateNode.containerInfo);break;case 10:d=b.memoizedProps.value;e=b.type._context;I(jg,e._currentValue);e._currentValue=d;break;case 13:if(null!==b.memoizedState){d=b.child.childExpirationTime;\nif(0!==d&&d>=c)return ji(a,b,c);I(M,M.current&1);b=$h(a,b,c);return null!==b?b.sibling:null}I(M,M.current&1);break;case 19:d=b.childExpirationTime>=c;if(0!==(a.effectTag&64)){if(d)return mi(a,b,c);b.effectTag|=64}e=b.memoizedState;null!==e&&(e.rendering=null,e.tail=null);I(M,M.current);if(!d)return null}return $h(a,b,c)}rg=!1}}else rg=!1;b.expirationTime=0;switch(b.tag){case 2:d=b.type;null!==a&&(a.alternate=null,b.alternate=null,b.effectTag|=2);a=b.pendingProps;e=Cf(b,J.current);qg(b,c);e=oh(null,\nb,d,a,e,c);b.effectTag|=1;if(\"object\"===typeof e&&null!==e&&\"function\"===typeof e.render&&void 0===e.$$typeof){b.tag=1;b.memoizedState=null;b.updateQueue=null;if(L(d)){var f=!0;Gf(b)}else f=!1;b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null;ug(b);var g=d.getDerivedStateFromProps;\"function\"===typeof g&&Fg(b,d,g,a);e.updater=Jg;b.stateNode=e;e._reactInternalFiber=b;Ng(b,d,a,c);b=gi(null,b,d,!0,f,c)}else b.tag=0,R(null,b,e,c),b=b.child;return b;case 16:a:{e=b.elementType;null!==a&&(a.alternate=\nnull,b.alternate=null,b.effectTag|=2);a=b.pendingProps;ob(e);if(1!==e._status)throw e._result;e=e._result;b.type=e;f=b.tag=Xj(e);a=ig(e,a);switch(f){case 0:b=di(null,b,e,a,c);break a;case 1:b=fi(null,b,e,a,c);break a;case 11:b=Zh(null,b,e,a,c);break a;case 14:b=ai(null,b,e,ig(e.type,a),d,c);break a}throw Error(u(306,e,\"\"));}return b;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ig(d,e),di(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ig(d,e),fi(a,b,d,e,c);\ncase 3:hi(b);d=b.updateQueue;if(null===a||null===d)throw Error(u(282));d=b.pendingProps;e=b.memoizedState;e=null!==e?e.element:null;vg(a,b);zg(b,d,null,c);d=b.memoizedState.element;if(d===e)Xh(),b=$h(a,b,c);else{if(e=b.stateNode.hydrate)Ph=Jd(b.stateNode.containerInfo.firstChild),Oh=b,e=Qh=!0;if(e)for(c=Yg(b,null,d,c),b.child=c;c;)c.effectTag=c.effectTag&-3|1024,c=c.sibling;else R(a,b,d,c),Xh();b=b.child}return b;case 5:return fh(b),null===a&&Uh(b),d=b.type,e=b.pendingProps,f=null!==a?a.memoizedProps:\nnull,g=e.children,Gd(d,e)?g=null:null!==f&&Gd(d,f)&&(b.effectTag|=16),ei(a,b),b.mode&4&&1!==c&&e.hidden?(b.expirationTime=b.childExpirationTime=1,b=null):(R(a,b,g,c),b=b.child),b;case 6:return null===a&&Uh(b),null;case 13:return ji(a,b,c);case 4:return dh(b,b.stateNode.containerInfo),d=b.pendingProps,null===a?b.child=Xg(b,null,d,c):R(a,b,d,c),b.child;case 11:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ig(d,e),Zh(a,b,d,e,c);case 7:return R(a,b,b.pendingProps,c),b.child;case 8:return R(a,\nb,b.pendingProps.children,c),b.child;case 12:return R(a,b,b.pendingProps.children,c),b.child;case 10:a:{d=b.type._context;e=b.pendingProps;g=b.memoizedProps;f=e.value;var h=b.type._context;I(jg,h._currentValue);h._currentValue=f;if(null!==g)if(h=g.value,f=$e(h,f)?0:(\"function\"===typeof d._calculateChangedBits?d._calculateChangedBits(h,f):1073741823)|0,0===f){if(g.children===e.children&&!K.current){b=$h(a,b,c);break a}}else for(h=b.child,null!==h&&(h.return=b);null!==h;){var k=h.dependencies;if(null!==\nk){g=h.child;for(var l=k.firstContext;null!==l;){if(l.context===d&&0!==(l.observedBits&f)){1===h.tag&&(l=wg(c,null),l.tag=2,xg(h,l));h.expirationTime<c&&(h.expirationTime=c);l=h.alternate;null!==l&&l.expirationTime<c&&(l.expirationTime=c);pg(h.return,c);k.expirationTime<c&&(k.expirationTime=c);break}l=l.next}}else g=10===h.tag?h.type===b.type?null:h.child:h.child;if(null!==g)g.return=h;else for(g=h;null!==g;){if(g===b){g=null;break}h=g.sibling;if(null!==h){h.return=g.return;g=h;break}g=g.return}h=\ng}R(a,b,e.children,c);b=b.child}return b;case 9:return e=b.type,f=b.pendingProps,d=f.children,qg(b,c),e=sg(e,f.unstable_observedBits),d=d(e),b.effectTag|=1,R(a,b,d,c),b.child;case 14:return e=b.type,f=ig(e,b.pendingProps),f=ig(e.type,f),ai(a,b,e,f,d,c);case 15:return ci(a,b,b.type,b.pendingProps,d,c);case 17:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ig(d,e),null!==a&&(a.alternate=null,b.alternate=null,b.effectTag|=2),b.tag=1,L(d)?(a=!0,Gf(b)):a=!1,qg(b,c),Lg(b,d,e),Ng(b,d,e,c),gi(null,\nb,d,!0,a,c);case 19:return mi(a,b,c)}throw Error(u(156,b.tag));};var Uj=null,Li=null;function Yj(a){if(\"undefined\"===typeof __REACT_DEVTOOLS_GLOBAL_HOOK__)return!1;var b=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(b.isDisabled||!b.supportsFiber)return!0;try{var c=b.inject(a);Uj=function(a){try{b.onCommitFiberRoot(c,a,void 0,64===(a.current.effectTag&64))}catch(e){}};Li=function(a){try{b.onCommitFiberUnmount(c,a)}catch(e){}}}catch(d){}return!0}\nfunction Zj(a,b,c,d){this.tag=a;this.key=c;this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null;this.index=0;this.ref=null;this.pendingProps=b;this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null;this.mode=d;this.effectTag=0;this.lastEffect=this.firstEffect=this.nextEffect=null;this.childExpirationTime=this.expirationTime=0;this.alternate=null}function Sh(a,b,c,d){return new Zj(a,b,c,d)}\nfunction bi(a){a=a.prototype;return!(!a||!a.isReactComponent)}function Xj(a){if(\"function\"===typeof a)return bi(a)?1:0;if(void 0!==a&&null!==a){a=a.$$typeof;if(a===gb)return 11;if(a===jb)return 14}return 2}\nfunction Sg(a,b){var c=a.alternate;null===c?(c=Sh(a.tag,b,a.key,a.mode),c.elementType=a.elementType,c.type=a.type,c.stateNode=a.stateNode,c.alternate=a,a.alternate=c):(c.pendingProps=b,c.effectTag=0,c.nextEffect=null,c.firstEffect=null,c.lastEffect=null);c.childExpirationTime=a.childExpirationTime;c.expirationTime=a.expirationTime;c.child=a.child;c.memoizedProps=a.memoizedProps;c.memoizedState=a.memoizedState;c.updateQueue=a.updateQueue;b=a.dependencies;c.dependencies=null===b?null:{expirationTime:b.expirationTime,\nfirstContext:b.firstContext,responders:b.responders};c.sibling=a.sibling;c.index=a.index;c.ref=a.ref;return c}\nfunction Ug(a,b,c,d,e,f){var g=2;d=a;if(\"function\"===typeof a)bi(a)&&(g=1);else if(\"string\"===typeof a)g=5;else a:switch(a){case ab:return Wg(c.children,e,f,b);case fb:g=8;e|=7;break;case bb:g=8;e|=1;break;case cb:return a=Sh(12,c,b,e|8),a.elementType=cb,a.type=cb,a.expirationTime=f,a;case hb:return a=Sh(13,c,b,e),a.type=hb,a.elementType=hb,a.expirationTime=f,a;case ib:return a=Sh(19,c,b,e),a.elementType=ib,a.expirationTime=f,a;default:if(\"object\"===typeof a&&null!==a)switch(a.$$typeof){case db:g=\n10;break a;case eb:g=9;break a;case gb:g=11;break a;case jb:g=14;break a;case kb:g=16;d=null;break a;case lb:g=22;break a}throw Error(u(130,null==a?a:typeof a,\"\"));}b=Sh(g,c,b,e);b.elementType=a;b.type=d;b.expirationTime=f;return b}function Wg(a,b,c,d){a=Sh(7,a,d,b);a.expirationTime=c;return a}function Tg(a,b,c){a=Sh(6,a,null,b);a.expirationTime=c;return a}\nfunction Vg(a,b,c){b=Sh(4,null!==a.children?a.children:[],a.key,b);b.expirationTime=c;b.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation};return b}\nfunction ak(a,b,c){this.tag=b;this.current=null;this.containerInfo=a;this.pingCache=this.pendingChildren=null;this.finishedExpirationTime=0;this.finishedWork=null;this.timeoutHandle=-1;this.pendingContext=this.context=null;this.hydrate=c;this.callbackNode=null;this.callbackPriority=90;this.lastExpiredTime=this.lastPingedTime=this.nextKnownPendingLevel=this.lastSuspendedTime=this.firstSuspendedTime=this.firstPendingTime=0}\nfunction Aj(a,b){var c=a.firstSuspendedTime;a=a.lastSuspendedTime;return 0!==c&&c>=b&&a<=b}function xi(a,b){var c=a.firstSuspendedTime,d=a.lastSuspendedTime;c<b&&(a.firstSuspendedTime=b);if(d>b||0===c)a.lastSuspendedTime=b;b<=a.lastPingedTime&&(a.lastPingedTime=0);b<=a.lastExpiredTime&&(a.lastExpiredTime=0)}\nfunction yi(a,b){b>a.firstPendingTime&&(a.firstPendingTime=b);var c=a.firstSuspendedTime;0!==c&&(b>=c?a.firstSuspendedTime=a.lastSuspendedTime=a.nextKnownPendingLevel=0:b>=a.lastSuspendedTime&&(a.lastSuspendedTime=b+1),b>a.nextKnownPendingLevel&&(a.nextKnownPendingLevel=b))}function Cj(a,b){var c=a.lastExpiredTime;if(0===c||c>b)a.lastExpiredTime=b}\nfunction bk(a,b,c,d){var e=b.current,f=Gg(),g=Dg.suspense;f=Hg(f,e,g);a:if(c){c=c._reactInternalFiber;b:{if(dc(c)!==c||1!==c.tag)throw Error(u(170));var h=c;do{switch(h.tag){case 3:h=h.stateNode.context;break b;case 1:if(L(h.type)){h=h.stateNode.__reactInternalMemoizedMergedChildContext;break b}}h=h.return}while(null!==h);throw Error(u(171));}if(1===c.tag){var k=c.type;if(L(k)){c=Ff(c,k,h);break a}}c=h}else c=Af;null===b.context?b.context=c:b.pendingContext=c;b=wg(f,g);b.payload={element:a};d=void 0===\nd?null:d;null!==d&&(b.callback=d);xg(e,b);Ig(e,f);return f}function ck(a){a=a.current;if(!a.child)return null;switch(a.child.tag){case 5:return a.child.stateNode;default:return a.child.stateNode}}function dk(a,b){a=a.memoizedState;null!==a&&null!==a.dehydrated&&a.retryTime<b&&(a.retryTime=b)}function ek(a,b){dk(a,b);(a=a.alternate)&&dk(a,b)}\nfunction fk(a,b,c){c=null!=c&&!0===c.hydrate;var d=new ak(a,b,c),e=Sh(3,null,null,2===b?7:1===b?3:0);d.current=e;e.stateNode=d;ug(e);a[Od]=d.current;c&&0!==b&&Jc(a,9===a.nodeType?a:a.ownerDocument);this._internalRoot=d}fk.prototype.render=function(a){bk(a,this._internalRoot,null,null)};fk.prototype.unmount=function(){var a=this._internalRoot,b=a.containerInfo;bk(null,a,null,function(){b[Od]=null})};\nfunction gk(a){return!(!a||1!==a.nodeType&&9!==a.nodeType&&11!==a.nodeType&&(8!==a.nodeType||\" react-mount-point-unstable \"!==a.nodeValue))}function hk(a,b){b||(b=a?9===a.nodeType?a.documentElement:a.firstChild:null,b=!(!b||1!==b.nodeType||!b.hasAttribute(\"data-reactroot\")));if(!b)for(var c;c=a.lastChild;)a.removeChild(c);return new fk(a,0,b?{hydrate:!0}:void 0)}\nfunction ik(a,b,c,d,e){var f=c._reactRootContainer;if(f){var g=f._internalRoot;if(\"function\"===typeof e){var h=e;e=function(){var a=ck(g);h.call(a)}}bk(b,g,a,e)}else{f=c._reactRootContainer=hk(c,d);g=f._internalRoot;if(\"function\"===typeof e){var k=e;e=function(){var a=ck(g);k.call(a)}}Nj(function(){bk(b,g,a,e)})}return ck(g)}function jk(a,b,c){var d=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:$a,key:null==d?null:\"\"+d,children:a,containerInfo:b,implementation:c}}\nwc=function(a){if(13===a.tag){var b=hg(Gg(),150,100);Ig(a,b);ek(a,b)}};xc=function(a){13===a.tag&&(Ig(a,3),ek(a,3))};yc=function(a){if(13===a.tag){var b=Gg();b=Hg(b,a,null);Ig(a,b);ek(a,b)}};\nza=function(a,b,c){switch(b){case \"input\":Cb(a,c);b=c.name;if(\"radio\"===c.type&&null!=b){for(c=a;c.parentNode;)c=c.parentNode;c=c.querySelectorAll(\"input[name=\"+JSON.stringify(\"\"+b)+'][type=\"radio\"]');for(b=0;b<c.length;b++){var d=c[b];if(d!==a&&d.form===a.form){var e=Qd(d);if(!e)throw Error(u(90));yb(d);Cb(d,e)}}}break;case \"textarea\":Kb(a,c);break;case \"select\":b=c.value,null!=b&&Hb(a,!!c.multiple,b,!1)}};Fa=Mj;\nGa=function(a,b,c,d,e){var f=W;W|=4;try{return cg(98,a.bind(null,b,c,d,e))}finally{W=f,W===V&&gg()}};Ha=function(){(W&(1|fj|gj))===V&&(Lj(),Dj())};Ia=function(a,b){var c=W;W|=2;try{return a(b)}finally{W=c,W===V&&gg()}};function kk(a,b){var c=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!gk(b))throw Error(u(200));return jk(a,b,null,c)}var lk={Events:[Nc,Pd,Qd,xa,ta,Xd,function(a){jc(a,Wd)},Da,Ea,id,mc,Dj,{current:!1}]};\n(function(a){var b=a.findFiberByHostInstance;return Yj(n({},a,{overrideHookState:null,overrideProps:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:Wa.ReactCurrentDispatcher,findHostInstanceByFiber:function(a){a=hc(a);return null===a?null:a.stateNode},findFiberByHostInstance:function(a){return b?b(a):null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null}))})({findFiberByHostInstance:tc,bundleType:0,version:\"16.14.0\",\nrendererPackageName:\"react-dom\"});exports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=lk;exports.createPortal=kk;exports.findDOMNode=function(a){if(null==a)return null;if(1===a.nodeType)return a;var b=a._reactInternalFiber;if(void 0===b){if(\"function\"===typeof a.render)throw Error(u(188));throw Error(u(268,Object.keys(a)));}a=hc(b);a=null===a?null:a.stateNode;return a};\nexports.flushSync=function(a,b){if((W&(fj|gj))!==V)throw Error(u(187));var c=W;W|=1;try{return cg(99,a.bind(null,b))}finally{W=c,gg()}};exports.hydrate=function(a,b,c){if(!gk(b))throw Error(u(200));return ik(null,a,b,!0,c)};exports.render=function(a,b,c){if(!gk(b))throw Error(u(200));return ik(null,a,b,!1,c)};\nexports.unmountComponentAtNode=function(a){if(!gk(a))throw Error(u(40));return a._reactRootContainer?(Nj(function(){ik(null,null,a,!1,function(){a._reactRootContainer=null;a[Od]=null})}),!0):!1};exports.unstable_batchedUpdates=Mj;exports.unstable_createPortal=function(a,b){return kk(a,b,2<arguments.length&&void 0!==arguments[2]?arguments[2]:null)};\nexports.unstable_renderSubtreeIntoContainer=function(a,b,c,d){if(!gk(c))throw Error(u(200));if(null==a||void 0===a._reactInternalFiber)throw Error(u(38));return ik(a,b,c,!1,d)};exports.version=\"16.14.0\";\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","/** @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","var arrayLikeToArray = require(\"./arrayLikeToArray.js\");\n\nfunction _arrayWithoutHoles(arr) {\n  if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}\n\nmodule.exports = _arrayWithoutHoles;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _iterableToArray(iter) {\n  if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nmodule.exports = _iterableToArray;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _nonIterableSpread() {\n  throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nmodule.exports = _nonIterableSpread;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _arrayWithHoles(arr) {\n  if (Array.isArray(arr)) return arr;\n}\n\nmodule.exports = _arrayWithHoles;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _iterableToArrayLimit(arr, i) {\n  var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n\n  if (_i == null) return;\n  var _arr = [];\n  var _n = true;\n  var _d = false;\n\n  var _s, _e;\n\n  try {\n    for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n      _arr.push(_s.value);\n\n      if (i && _arr.length === i) break;\n    }\n  } catch (err) {\n    _d = true;\n    _e = err;\n  } finally {\n    try {\n      if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n    } finally {\n      if (_d) throw _e;\n    }\n  }\n\n  return _arr;\n}\n\nmodule.exports = _iterableToArrayLimit;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _nonIterableRest() {\n  throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nmodule.exports = _nonIterableRest;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n  \"use strict\";\n\n  var Op = Object.prototype;\n  var hasOwn = Op.hasOwnProperty;\n  var undefined; // More compressible than void 0.\n  var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n  var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n  var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n  var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n  function define(obj, key, value) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n    return obj[key];\n  }\n  try {\n    // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n    define({}, \"\");\n  } catch (err) {\n    define = function(obj, key, value) {\n      return obj[key] = value;\n    };\n  }\n\n  function wrap(innerFn, outerFn, self, tryLocsList) {\n    // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n    var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n    var generator = Object.create(protoGenerator.prototype);\n    var context = new Context(tryLocsList || []);\n\n    // The ._invoke method unifies the implementations of the .next,\n    // .throw, and .return methods.\n    generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n    return generator;\n  }\n  exports.wrap = wrap;\n\n  // Try/catch helper to minimize deoptimizations. Returns a completion\n  // record like context.tryEntries[i].completion. This interface could\n  // have been (and was previously) designed to take a closure to be\n  // invoked without arguments, but in all the cases we care about we\n  // already have an existing method we want to call, so there's no need\n  // to create a new function object. We can even get away with assuming\n  // the method takes exactly one argument, since that happens to be true\n  // in every case, so we don't have to touch the arguments object. The\n  // only additional allocation required is the completion record, which\n  // has a stable shape and so hopefully should be cheap to allocate.\n  function tryCatch(fn, obj, arg) {\n    try {\n      return { type: \"normal\", arg: fn.call(obj, arg) };\n    } catch (err) {\n      return { type: \"throw\", arg: err };\n    }\n  }\n\n  var GenStateSuspendedStart = \"suspendedStart\";\n  var GenStateSuspendedYield = \"suspendedYield\";\n  var GenStateExecuting = \"executing\";\n  var GenStateCompleted = \"completed\";\n\n  // Returning this object from the innerFn has the same effect as\n  // breaking out of the dispatch switch statement.\n  var ContinueSentinel = {};\n\n  // Dummy constructor functions that we use as the .constructor and\n  // .constructor.prototype properties for functions that return Generator\n  // objects. For full spec compliance, you may wish to configure your\n  // minifier not to mangle the names of these two functions.\n  function Generator() {}\n  function GeneratorFunction() {}\n  function GeneratorFunctionPrototype() {}\n\n  // This is a polyfill for %IteratorPrototype% for environments that\n  // don't natively support it.\n  var IteratorPrototype = {};\n  define(IteratorPrototype, iteratorSymbol, function () {\n    return this;\n  });\n\n  var getProto = Object.getPrototypeOf;\n  var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n  if (NativeIteratorPrototype &&\n      NativeIteratorPrototype !== Op &&\n      hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n    // This environment has a native %IteratorPrototype%; use it instead\n    // of the polyfill.\n    IteratorPrototype = NativeIteratorPrototype;\n  }\n\n  var Gp = GeneratorFunctionPrototype.prototype =\n    Generator.prototype = Object.create(IteratorPrototype);\n  GeneratorFunction.prototype = GeneratorFunctionPrototype;\n  define(Gp, \"constructor\", GeneratorFunctionPrototype);\n  define(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction);\n  GeneratorFunction.displayName = define(\n    GeneratorFunctionPrototype,\n    toStringTagSymbol,\n    \"GeneratorFunction\"\n  );\n\n  // Helper for defining the .next, .throw, and .return methods of the\n  // Iterator interface in terms of a single ._invoke method.\n  function defineIteratorMethods(prototype) {\n    [\"next\", \"throw\", \"return\"].forEach(function(method) {\n      define(prototype, method, function(arg) {\n        return this._invoke(method, arg);\n      });\n    });\n  }\n\n  exports.isGeneratorFunction = function(genFun) {\n    var ctor = typeof genFun === \"function\" && genFun.constructor;\n    return ctor\n      ? ctor === GeneratorFunction ||\n        // For the native GeneratorFunction constructor, the best we can\n        // do is to check its .name property.\n        (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n      : false;\n  };\n\n  exports.mark = function(genFun) {\n    if (Object.setPrototypeOf) {\n      Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n    } else {\n      genFun.__proto__ = GeneratorFunctionPrototype;\n      define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n    }\n    genFun.prototype = Object.create(Gp);\n    return genFun;\n  };\n\n  // Within the body of any async function, `await x` is transformed to\n  // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n  // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n  // meant to be awaited.\n  exports.awrap = function(arg) {\n    return { __await: arg };\n  };\n\n  function AsyncIterator(generator, PromiseImpl) {\n    function invoke(method, arg, resolve, reject) {\n      var record = tryCatch(generator[method], generator, arg);\n      if (record.type === \"throw\") {\n        reject(record.arg);\n      } else {\n        var result = record.arg;\n        var value = result.value;\n        if (value &&\n            typeof value === \"object\" &&\n            hasOwn.call(value, \"__await\")) {\n          return PromiseImpl.resolve(value.__await).then(function(value) {\n            invoke(\"next\", value, resolve, reject);\n          }, function(err) {\n            invoke(\"throw\", err, resolve, reject);\n          });\n        }\n\n        return PromiseImpl.resolve(value).then(function(unwrapped) {\n          // When a yielded Promise is resolved, its final value becomes\n          // the .value of the Promise<{value,done}> result for the\n          // current iteration.\n          result.value = unwrapped;\n          resolve(result);\n        }, function(error) {\n          // If a rejected Promise was yielded, throw the rejection back\n          // into the async generator function so it can be handled there.\n          return invoke(\"throw\", error, resolve, reject);\n        });\n      }\n    }\n\n    var previousPromise;\n\n    function enqueue(method, arg) {\n      function callInvokeWithMethodAndArg() {\n        return new PromiseImpl(function(resolve, reject) {\n          invoke(method, arg, resolve, reject);\n        });\n      }\n\n      return previousPromise =\n        // If enqueue has been called before, then we want to wait until\n        // all previous Promises have been resolved before calling invoke,\n        // so that results are always delivered in the correct order. If\n        // enqueue has not been called before, then it is important to\n        // call invoke immediately, without waiting on a callback to fire,\n        // so that the async generator function has the opportunity to do\n        // any necessary setup in a predictable way. This predictability\n        // is why the Promise constructor synchronously invokes its\n        // executor callback, and why async functions synchronously\n        // execute code before the first await. Since we implement simple\n        // async functions in terms of async generators, it is especially\n        // important to get this right, even though it requires care.\n        previousPromise ? previousPromise.then(\n          callInvokeWithMethodAndArg,\n          // Avoid propagating failures to Promises returned by later\n          // invocations of the iterator.\n          callInvokeWithMethodAndArg\n        ) : callInvokeWithMethodAndArg();\n    }\n\n    // Define the unified helper method that is used to implement .next,\n    // .throw, and .return (see defineIteratorMethods).\n    this._invoke = enqueue;\n  }\n\n  defineIteratorMethods(AsyncIterator.prototype);\n  define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n    return this;\n  });\n  exports.AsyncIterator = AsyncIterator;\n\n  // Note that simple async functions are implemented on top of\n  // AsyncIterator objects; they just return a Promise for the value of\n  // the final result produced by the iterator.\n  exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n    if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n    var iter = new AsyncIterator(\n      wrap(innerFn, outerFn, self, tryLocsList),\n      PromiseImpl\n    );\n\n    return exports.isGeneratorFunction(outerFn)\n      ? iter // If outerFn is a generator, return the full iterator.\n      : iter.next().then(function(result) {\n          return result.done ? result.value : iter.next();\n        });\n  };\n\n  function makeInvokeMethod(innerFn, self, context) {\n    var state = GenStateSuspendedStart;\n\n    return function invoke(method, arg) {\n      if (state === GenStateExecuting) {\n        throw new Error(\"Generator is already running\");\n      }\n\n      if (state === GenStateCompleted) {\n        if (method === \"throw\") {\n          throw arg;\n        }\n\n        // Be forgiving, per 25.3.3.3.3 of the spec:\n        // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n        return doneResult();\n      }\n\n      context.method = method;\n      context.arg = arg;\n\n      while (true) {\n        var delegate = context.delegate;\n        if (delegate) {\n          var delegateResult = maybeInvokeDelegate(delegate, context);\n          if (delegateResult) {\n            if (delegateResult === ContinueSentinel) continue;\n            return delegateResult;\n          }\n        }\n\n        if (context.method === \"next\") {\n          // Setting context._sent for legacy support of Babel's\n          // function.sent implementation.\n          context.sent = context._sent = context.arg;\n\n        } else if (context.method === \"throw\") {\n          if (state === GenStateSuspendedStart) {\n            state = GenStateCompleted;\n            throw context.arg;\n          }\n\n          context.dispatchException(context.arg);\n\n        } else if (context.method === \"return\") {\n          context.abrupt(\"return\", context.arg);\n        }\n\n        state = GenStateExecuting;\n\n        var record = tryCatch(innerFn, self, context);\n        if (record.type === \"normal\") {\n          // If an exception is thrown from innerFn, we leave state ===\n          // GenStateExecuting and loop back for another invocation.\n          state = context.done\n            ? GenStateCompleted\n            : GenStateSuspendedYield;\n\n          if (record.arg === ContinueSentinel) {\n            continue;\n          }\n\n          return {\n            value: record.arg,\n            done: context.done\n          };\n\n        } else if (record.type === \"throw\") {\n          state = GenStateCompleted;\n          // Dispatch the exception by looping back around to the\n          // context.dispatchException(context.arg) call above.\n          context.method = \"throw\";\n          context.arg = record.arg;\n        }\n      }\n    };\n  }\n\n  // Call delegate.iterator[context.method](context.arg) and handle the\n  // result, either by returning a { value, done } result from the\n  // delegate iterator, or by modifying context.method and context.arg,\n  // setting context.delegate to null, and returning the ContinueSentinel.\n  function maybeInvokeDelegate(delegate, context) {\n    var method = delegate.iterator[context.method];\n    if (method === undefined) {\n      // A .throw or .return when the delegate iterator has no .throw\n      // method always terminates the yield* loop.\n      context.delegate = null;\n\n      if (context.method === \"throw\") {\n        // Note: [\"return\"] must be used for ES3 parsing compatibility.\n        if (delegate.iterator[\"return\"]) {\n          // If the delegate iterator has a return method, give it a\n          // chance to clean up.\n          context.method = \"return\";\n          context.arg = undefined;\n          maybeInvokeDelegate(delegate, context);\n\n          if (context.method === \"throw\") {\n            // If maybeInvokeDelegate(context) changed context.method from\n            // \"return\" to \"throw\", let that override the TypeError below.\n            return ContinueSentinel;\n          }\n        }\n\n        context.method = \"throw\";\n        context.arg = new TypeError(\n          \"The iterator does not provide a 'throw' method\");\n      }\n\n      return ContinueSentinel;\n    }\n\n    var record = tryCatch(method, delegate.iterator, context.arg);\n\n    if (record.type === \"throw\") {\n      context.method = \"throw\";\n      context.arg = record.arg;\n      context.delegate = null;\n      return ContinueSentinel;\n    }\n\n    var info = record.arg;\n\n    if (! info) {\n      context.method = \"throw\";\n      context.arg = new TypeError(\"iterator result is not an object\");\n      context.delegate = null;\n      return ContinueSentinel;\n    }\n\n    if (info.done) {\n      // Assign the result of the finished delegate to the temporary\n      // variable specified by delegate.resultName (see delegateYield).\n      context[delegate.resultName] = info.value;\n\n      // Resume execution at the desired location (see delegateYield).\n      context.next = delegate.nextLoc;\n\n      // If context.method was \"throw\" but the delegate handled the\n      // exception, let the outer generator proceed normally. If\n      // context.method was \"next\", forget context.arg since it has been\n      // \"consumed\" by the delegate iterator. If context.method was\n      // \"return\", allow the original .return call to continue in the\n      // outer generator.\n      if (context.method !== \"return\") {\n        context.method = \"next\";\n        context.arg = undefined;\n      }\n\n    } else {\n      // Re-yield the result returned by the delegate method.\n      return info;\n    }\n\n    // The delegate iterator is finished, so forget it and continue with\n    // the outer generator.\n    context.delegate = null;\n    return ContinueSentinel;\n  }\n\n  // Define Generator.prototype.{next,throw,return} in terms of the\n  // unified ._invoke helper method.\n  defineIteratorMethods(Gp);\n\n  define(Gp, toStringTagSymbol, \"Generator\");\n\n  // A Generator should always return itself as the iterator object when the\n  // @@iterator function is called on it. Some browsers' implementations of the\n  // iterator prototype chain incorrectly implement this, causing the Generator\n  // object to not be returned from this call. This ensures that doesn't happen.\n  // See https://github.com/facebook/regenerator/issues/274 for more details.\n  define(Gp, iteratorSymbol, function() {\n    return this;\n  });\n\n  define(Gp, \"toString\", function() {\n    return \"[object Generator]\";\n  });\n\n  function pushTryEntry(locs) {\n    var entry = { tryLoc: locs[0] };\n\n    if (1 in locs) {\n      entry.catchLoc = locs[1];\n    }\n\n    if (2 in locs) {\n      entry.finallyLoc = locs[2];\n      entry.afterLoc = locs[3];\n    }\n\n    this.tryEntries.push(entry);\n  }\n\n  function resetTryEntry(entry) {\n    var record = entry.completion || {};\n    record.type = \"normal\";\n    delete record.arg;\n    entry.completion = record;\n  }\n\n  function Context(tryLocsList) {\n    // The root entry object (effectively a try statement without a catch\n    // or a finally block) gives us a place to store values thrown from\n    // locations where there is no enclosing try statement.\n    this.tryEntries = [{ tryLoc: \"root\" }];\n    tryLocsList.forEach(pushTryEntry, this);\n    this.reset(true);\n  }\n\n  exports.keys = function(object) {\n    var keys = [];\n    for (var key in object) {\n      keys.push(key);\n    }\n    keys.reverse();\n\n    // Rather than returning an object with a next method, we keep\n    // things simple and return the next function itself.\n    return function next() {\n      while (keys.length) {\n        var key = keys.pop();\n        if (key in object) {\n          next.value = key;\n          next.done = false;\n          return next;\n        }\n      }\n\n      // To avoid creating an additional object, we just hang the .value\n      // and .done properties off the next function object itself. This\n      // also ensures that the minifier will not anonymize the function.\n      next.done = true;\n      return next;\n    };\n  };\n\n  function values(iterable) {\n    if (iterable) {\n      var iteratorMethod = iterable[iteratorSymbol];\n      if (iteratorMethod) {\n        return iteratorMethod.call(iterable);\n      }\n\n      if (typeof iterable.next === \"function\") {\n        return iterable;\n      }\n\n      if (!isNaN(iterable.length)) {\n        var i = -1, next = function next() {\n          while (++i < iterable.length) {\n            if (hasOwn.call(iterable, i)) {\n              next.value = iterable[i];\n              next.done = false;\n              return next;\n            }\n          }\n\n          next.value = undefined;\n          next.done = true;\n\n          return next;\n        };\n\n        return next.next = next;\n      }\n    }\n\n    // Return an iterator with no values.\n    return { next: doneResult };\n  }\n  exports.values = values;\n\n  function doneResult() {\n    return { value: undefined, done: true };\n  }\n\n  Context.prototype = {\n    constructor: Context,\n\n    reset: function(skipTempReset) {\n      this.prev = 0;\n      this.next = 0;\n      // Resetting context._sent for legacy support of Babel's\n      // function.sent implementation.\n      this.sent = this._sent = undefined;\n      this.done = false;\n      this.delegate = null;\n\n      this.method = \"next\";\n      this.arg = undefined;\n\n      this.tryEntries.forEach(resetTryEntry);\n\n      if (!skipTempReset) {\n        for (var name in this) {\n          // Not sure about the optimal order of these conditions:\n          if (name.charAt(0) === \"t\" &&\n              hasOwn.call(this, name) &&\n              !isNaN(+name.slice(1))) {\n            this[name] = undefined;\n          }\n        }\n      }\n    },\n\n    stop: function() {\n      this.done = true;\n\n      var rootEntry = this.tryEntries[0];\n      var rootRecord = rootEntry.completion;\n      if (rootRecord.type === \"throw\") {\n        throw rootRecord.arg;\n      }\n\n      return this.rval;\n    },\n\n    dispatchException: function(exception) {\n      if (this.done) {\n        throw exception;\n      }\n\n      var context = this;\n      function handle(loc, caught) {\n        record.type = \"throw\";\n        record.arg = exception;\n        context.next = loc;\n\n        if (caught) {\n          // If the dispatched exception was caught by a catch block,\n          // then let that catch block handle the exception normally.\n          context.method = \"next\";\n          context.arg = undefined;\n        }\n\n        return !! caught;\n      }\n\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        var record = entry.completion;\n\n        if (entry.tryLoc === \"root\") {\n          // Exception thrown outside of any try block that could handle\n          // it, so set the completion value of the entire function to\n          // throw the exception.\n          return handle(\"end\");\n        }\n\n        if (entry.tryLoc <= this.prev) {\n          var hasCatch = hasOwn.call(entry, \"catchLoc\");\n          var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n          if (hasCatch && hasFinally) {\n            if (this.prev < entry.catchLoc) {\n              return handle(entry.catchLoc, true);\n            } else if (this.prev < entry.finallyLoc) {\n              return handle(entry.finallyLoc);\n            }\n\n          } else if (hasCatch) {\n            if (this.prev < entry.catchLoc) {\n              return handle(entry.catchLoc, true);\n            }\n\n          } else if (hasFinally) {\n            if (this.prev < entry.finallyLoc) {\n              return handle(entry.finallyLoc);\n            }\n\n          } else {\n            throw new Error(\"try statement without catch or finally\");\n          }\n        }\n      }\n    },\n\n    abrupt: function(type, arg) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.tryLoc <= this.prev &&\n            hasOwn.call(entry, \"finallyLoc\") &&\n            this.prev < entry.finallyLoc) {\n          var finallyEntry = entry;\n          break;\n        }\n      }\n\n      if (finallyEntry &&\n          (type === \"break\" ||\n           type === \"continue\") &&\n          finallyEntry.tryLoc <= arg &&\n          arg <= finallyEntry.finallyLoc) {\n        // Ignore the finally entry if control is not jumping to a\n        // location outside the try/catch block.\n        finallyEntry = null;\n      }\n\n      var record = finallyEntry ? finallyEntry.completion : {};\n      record.type = type;\n      record.arg = arg;\n\n      if (finallyEntry) {\n        this.method = \"next\";\n        this.next = finallyEntry.finallyLoc;\n        return ContinueSentinel;\n      }\n\n      return this.complete(record);\n    },\n\n    complete: function(record, afterLoc) {\n      if (record.type === \"throw\") {\n        throw record.arg;\n      }\n\n      if (record.type === \"break\" ||\n          record.type === \"continue\") {\n        this.next = record.arg;\n      } else if (record.type === \"return\") {\n        this.rval = this.arg = record.arg;\n        this.method = \"return\";\n        this.next = \"end\";\n      } else if (record.type === \"normal\" && afterLoc) {\n        this.next = afterLoc;\n      }\n\n      return ContinueSentinel;\n    },\n\n    finish: function(finallyLoc) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.finallyLoc === finallyLoc) {\n          this.complete(entry.completion, entry.afterLoc);\n          resetTryEntry(entry);\n          return ContinueSentinel;\n        }\n      }\n    },\n\n    \"catch\": function(tryLoc) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.tryLoc === tryLoc) {\n          var record = entry.completion;\n          if (record.type === \"throw\") {\n            var thrown = record.arg;\n            resetTryEntry(entry);\n          }\n          return thrown;\n        }\n      }\n\n      // The context.catch method must only be called with a location\n      // argument that corresponds to a known catch block.\n      throw new Error(\"illegal catch attempt\");\n    },\n\n    delegateYield: function(iterable, resultName, nextLoc) {\n      this.delegate = {\n        iterator: values(iterable),\n        resultName: resultName,\n        nextLoc: nextLoc\n      };\n\n      if (this.method === \"next\") {\n        // Deliberately forget the last sent value so that we don't\n        // accidentally pass it on to the delegate.\n        this.arg = undefined;\n      }\n\n      return ContinueSentinel;\n    }\n  };\n\n  // Regardless of whether this script is executing as a CommonJS module\n  // or not, return the runtime object so that we can declare the variable\n  // regeneratorRuntime in the outer scope, which allows this module to be\n  // injected easily by `bin/regenerator --include-runtime script.js`.\n  return exports;\n\n}(\n  // If this script is executing as a CommonJS module, use module.exports\n  // as the regeneratorRuntime namespace. Otherwise create a new empty\n  // object. Either way, the resulting object will be used to initialize\n  // the regeneratorRuntime variable at the top of this file.\n  typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n  regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n  // This module should not be running in strict mode, so the above\n  // assignment should always work unless something is misconfigured. Just\n  // in case runtime.js accidentally runs in strict mode, in modern engines\n  // we can explicitly access globalThis. In older engines we can escape\n  // strict mode using a global Function call. This could conceivably fail\n  // if a Content Security Policy forbids using Function, but in that case\n  // the proper solution is to fix the accidental strict mode problem. If\n  // you've misconfigured your bundler to force strict mode and applied a\n  // CSP to forbid Function, and you're not willing to fix either of those\n  // problems, please detail your unique predicament in a GitHub issue.\n  if (typeof globalThis === \"object\") {\n    globalThis.regeneratorRuntime = runtime;\n  } else {\n    Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n  }\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n  function shim(props, propName, componentName, location, propFullName, secret) {\n    if (secret === ReactPropTypesSecret) {\n      // It is still safe when called from React.\n      return;\n    }\n    var err = new Error(\n      'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n      'Use PropTypes.checkPropTypes() to call them. ' +\n      'Read more at http://fb.me/use-check-prop-types'\n    );\n    err.name = 'Invariant Violation';\n    throw err;\n  };\n  shim.isRequired = shim;\n  function getShim() {\n    return shim;\n  };\n  // Important!\n  // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n  var ReactPropTypes = {\n    array: shim,\n    bool: shim,\n    func: shim,\n    number: shim,\n    object: shim,\n    string: shim,\n    symbol: shim,\n\n    any: shim,\n    arrayOf: getShim,\n    element: shim,\n    elementType: shim,\n    instanceOf: getShim,\n    node: shim,\n    objectOf: getShim,\n    oneOf: getShim,\n    oneOfType: getShim,\n    shape: getShim,\n    exact: getShim,\n\n    checkPropTypes: emptyFunctionWithReset,\n    resetWarningCache: emptyFunction\n  };\n\n  ReactPropTypes.PropTypes = ReactPropTypes;\n\n  return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","import Header from './src/js/header.js';\n\nconst constructAll = () => {\n\tHeader.init();\n\tdocument.removeEventListener('o.DOMContentLoaded', constructAll);\n};\n\nif (typeof document !== 'undefined') {\n\tdocument.addEventListener('o.DOMContentLoaded', constructAll);\n}\n\nexport default Header;\n","const FLOURISH_DOMAINS = ['https://flo.uri.sh', 'https://public.flourish.studio'];\n\nlet flourishMessageEventListener;\n\nfunction init(cb) {\n  if (!customFlourishAnalytics.isInitialised) {\n    customFlourishAnalytics.isInitialised = true;\n    flourishMessageEventListener = window.addEventListener(\n      'message',\n      (event) => {\n        if (FLOURISH_DOMAINS.includes(event.origin) && event.data) {\n          const eventData = JSON.parse(event.data);\n          if (eventData.method === 'ftCustomAnalytics') {\n            delete eventData.method;\n            cb(eventData);\n          }\n        }\n      },\n      false\n    );\n  }\n}\n\nfunction destroy() {\n  window.removeEventListener('message', flourishMessageEventListener);\n  customFlourishAnalytics.isInitialised = false;\n}\n\nconst customFlourishAnalytics = {\n  isInitialised: false,\n  destroy,\n  init,\n};\n\nexport default customFlourishAnalytics;\n","import Comments from './src/js/comments.js';\n\nconst constructAll = function () {\n\tComments.init();\n\tdocument.removeEventListener('o.DOMContentLoaded', constructAll);\n};\n\nif (typeof document !== 'undefined') {\n\tdocument.addEventListener('o.DOMContentLoaded', constructAll);\n}\n\nexport default Comments;\n","import Footer from './src/js/footer.js';\n\nconst constructAll = () => {\n\tFooter.init();\n\tdocument.removeEventListener('o.DOMContentLoaded', constructAll);\n};\n\nif (typeof document !== 'undefined') {\n\tdocument.addEventListener('o.DOMContentLoaded', constructAll);\n}\n\nexport default Footer;\n","import Share from './src/js/share.js';\n\nconst constructAll = function() {\n\tShare.init();\n\tdocument.removeEventListener('o.DOMContentLoaded', constructAll);\n};\n\ndocument.addEventListener('o.DOMContentLoaded', constructAll);\n\nexport default Share;\n","import oDate from './src/js/date.js';\nconst constructAll = function () {\n\toDate.init();\n\tdocument.removeEventListener('o.DOMContentLoaded', constructAll);\n};\ndocument.addEventListener('o.DOMContentLoaded', constructAll);\nexport default oDate;\n","'use strict'\n\n/* Dependencies. */\nvar extend = require('extend')\nvar bail = require('bail')\nvar vfile = require('vfile')\nvar trough = require('trough')\nvar string = require('x-is-string')\nvar plain = require('is-plain-obj')\n\n/* Expose a frozen processor. */\nmodule.exports = unified().freeze()\n\nvar slice = [].slice\nvar own = {}.hasOwnProperty\n\n/* Process pipeline. */\nvar pipeline = trough()\n  .use(pipelineParse)\n  .use(pipelineRun)\n  .use(pipelineStringify)\n\nfunction pipelineParse(p, ctx) {\n  ctx.tree = p.parse(ctx.file)\n}\n\nfunction pipelineRun(p, ctx, next) {\n  p.run(ctx.tree, ctx.file, done)\n\n  function done(err, tree, file) {\n    if (err) {\n      next(err)\n    } else {\n      ctx.tree = tree\n      ctx.file = file\n      next()\n    }\n  }\n}\n\nfunction pipelineStringify(p, ctx) {\n  ctx.file.contents = p.stringify(ctx.tree, ctx.file)\n}\n\n/* Function to create the first processor. */\nfunction unified() {\n  var attachers = []\n  var transformers = trough()\n  var namespace = {}\n  var frozen = false\n  var freezeIndex = -1\n\n  /* Data management. */\n  processor.data = data\n\n  /* Lock. */\n  processor.freeze = freeze\n\n  /* Plug-ins. */\n  processor.attachers = attachers\n  processor.use = use\n\n  /* API. */\n  processor.parse = parse\n  processor.stringify = stringify\n  processor.run = run\n  processor.runSync = runSync\n  processor.process = process\n  processor.processSync = processSync\n\n  /* Expose. */\n  return processor\n\n  /* Create a new processor based on the processor\n   * in the current scope. */\n  function processor() {\n    var destination = unified()\n    var length = attachers.length\n    var index = -1\n\n    while (++index < length) {\n      destination.use.apply(null, attachers[index])\n    }\n\n    destination.data(extend(true, {}, namespace))\n\n    return destination\n  }\n\n  /* Freeze: used to signal a processor that has finished\n   * configuration.\n   *\n   * For example, take unified itself.  It’s frozen.\n   * Plug-ins should not be added to it.  Rather, it should\n   * be extended, by invoking it, before modifying it.\n   *\n   * In essence, always invoke this when exporting a\n   * processor. */\n  function freeze() {\n    var values\n    var plugin\n    var options\n    var transformer\n\n    if (frozen) {\n      return processor\n    }\n\n    while (++freezeIndex < attachers.length) {\n      values = attachers[freezeIndex]\n      plugin = values[0]\n      options = values[1]\n      transformer = null\n\n      if (options === false) {\n        continue\n      }\n\n      if (options === true) {\n        values[1] = undefined\n      }\n\n      transformer = plugin.apply(processor, values.slice(1))\n\n      if (typeof transformer === 'function') {\n        transformers.use(transformer)\n      }\n    }\n\n    frozen = true\n    freezeIndex = Infinity\n\n    return processor\n  }\n\n  /* Data management.\n   * Getter / setter for processor-specific informtion. */\n  function data(key, value) {\n    if (string(key)) {\n      /* Set `key`. */\n      if (arguments.length === 2) {\n        assertUnfrozen('data', frozen)\n\n        namespace[key] = value\n\n        return processor\n      }\n\n      /* Get `key`. */\n      return (own.call(namespace, key) && namespace[key]) || null\n    }\n\n    /* Set space. */\n    if (key) {\n      assertUnfrozen('data', frozen)\n      namespace = key\n      return processor\n    }\n\n    /* Get space. */\n    return namespace\n  }\n\n  /* Plug-in management.\n   *\n   * Pass it:\n   * *   an attacher and options,\n   * *   a preset,\n   * *   a list of presets, attachers, and arguments (list\n   *     of attachers and options). */\n  function use(value) {\n    var settings\n\n    assertUnfrozen('use', frozen)\n\n    if (value === null || value === undefined) {\n      /* Empty */\n    } else if (typeof value === 'function') {\n      addPlugin.apply(null, arguments)\n    } else if (typeof value === 'object') {\n      if ('length' in value) {\n        addList(value)\n      } else {\n        addPreset(value)\n      }\n    } else {\n      throw new Error('Expected usable value, not `' + value + '`')\n    }\n\n    if (settings) {\n      namespace.settings = extend(namespace.settings || {}, settings)\n    }\n\n    return processor\n\n    function addPreset(result) {\n      addList(result.plugins)\n\n      if (result.settings) {\n        settings = extend(settings || {}, result.settings)\n      }\n    }\n\n    function add(value) {\n      if (typeof value === 'function') {\n        addPlugin(value)\n      } else if (typeof value === 'object') {\n        if ('length' in value) {\n          addPlugin.apply(null, value)\n        } else {\n          addPreset(value)\n        }\n      } else {\n        throw new Error('Expected usable value, not `' + value + '`')\n      }\n    }\n\n    function addList(plugins) {\n      var length\n      var index\n\n      if (plugins === null || plugins === undefined) {\n        /* Empty */\n      } else if (typeof plugins === 'object' && 'length' in plugins) {\n        length = plugins.length\n        index = -1\n\n        while (++index < length) {\n          add(plugins[index])\n        }\n      } else {\n        throw new Error('Expected a list of plugins, not `' + plugins + '`')\n      }\n    }\n\n    function addPlugin(plugin, value) {\n      var entry = find(plugin)\n\n      if (entry) {\n        if (plain(entry[1]) && plain(value)) {\n          value = extend(entry[1], value)\n        }\n\n        entry[1] = value\n      } else {\n        attachers.push(slice.call(arguments))\n      }\n    }\n  }\n\n  function find(plugin) {\n    var length = attachers.length\n    var index = -1\n    var entry\n\n    while (++index < length) {\n      entry = attachers[index]\n\n      if (entry[0] === plugin) {\n        return entry\n      }\n    }\n  }\n\n  /* Parse a file (in string or VFile representation)\n   * into a Unist node using the `Parser` on the\n   * processor. */\n  function parse(doc) {\n    var file = vfile(doc)\n    var Parser\n\n    freeze()\n    Parser = processor.Parser\n    assertParser('parse', Parser)\n\n    if (newable(Parser)) {\n      return new Parser(String(file), file).parse()\n    }\n\n    return Parser(String(file), file) // eslint-disable-line new-cap\n  }\n\n  /* Run transforms on a Unist node representation of a file\n   * (in string or VFile representation), async. */\n  function run(node, file, cb) {\n    assertNode(node)\n    freeze()\n\n    if (!cb && typeof file === 'function') {\n      cb = file\n      file = null\n    }\n\n    if (!cb) {\n      return new Promise(executor)\n    }\n\n    executor(null, cb)\n\n    function executor(resolve, reject) {\n      transformers.run(node, vfile(file), done)\n\n      function done(err, tree, file) {\n        tree = tree || node\n        if (err) {\n          reject(err)\n        } else if (resolve) {\n          resolve(tree)\n        } else {\n          cb(null, tree, file)\n        }\n      }\n    }\n  }\n\n  /* Run transforms on a Unist node representation of a file\n   * (in string or VFile representation), sync. */\n  function runSync(node, file) {\n    var complete = false\n    var result\n\n    run(node, file, done)\n\n    assertDone('runSync', 'run', complete)\n\n    return result\n\n    function done(err, tree) {\n      complete = true\n      bail(err)\n      result = tree\n    }\n  }\n\n  /* Stringify a Unist node representation of a file\n   * (in string or VFile representation) into a string\n   * using the `Compiler` on the processor. */\n  function stringify(node, doc) {\n    var file = vfile(doc)\n    var Compiler\n\n    freeze()\n    Compiler = processor.Compiler\n    assertCompiler('stringify', Compiler)\n    assertNode(node)\n\n    if (newable(Compiler)) {\n      return new Compiler(node, file).compile()\n    }\n\n    return Compiler(node, file) // eslint-disable-line new-cap\n  }\n\n  /* Parse a file (in string or VFile representation)\n   * into a Unist node using the `Parser` on the processor,\n   * then run transforms on that node, and compile the\n   * resulting node using the `Compiler` on the processor,\n   * and store that result on the VFile. */\n  function process(doc, cb) {\n    freeze()\n    assertParser('process', processor.Parser)\n    assertCompiler('process', processor.Compiler)\n\n    if (!cb) {\n      return new Promise(executor)\n    }\n\n    executor(null, cb)\n\n    function executor(resolve, reject) {\n      var file = vfile(doc)\n\n      pipeline.run(processor, {file: file}, done)\n\n      function done(err) {\n        if (err) {\n          reject(err)\n        } else if (resolve) {\n          resolve(file)\n        } else {\n          cb(null, file)\n        }\n      }\n    }\n  }\n\n  /* Process the given document (in string or VFile\n   * representation), sync. */\n  function processSync(doc) {\n    var complete = false\n    var file\n\n    freeze()\n    assertParser('processSync', processor.Parser)\n    assertCompiler('processSync', processor.Compiler)\n    file = vfile(doc)\n\n    process(file, done)\n\n    assertDone('processSync', 'process', complete)\n\n    return file\n\n    function done(err) {\n      complete = true\n      bail(err)\n    }\n  }\n}\n\n/* Check if `func` is a constructor. */\nfunction newable(value) {\n  return typeof value === 'function' && keys(value.prototype)\n}\n\n/* Check if `value` is an object with keys. */\nfunction keys(value) {\n  var key\n  for (key in value) {\n    return true\n  }\n  return false\n}\n\n/* Assert a parser is available. */\nfunction assertParser(name, Parser) {\n  if (typeof Parser !== 'function') {\n    throw new Error('Cannot `' + name + '` without `Parser`')\n  }\n}\n\n/* Assert a compiler is available. */\nfunction assertCompiler(name, Compiler) {\n  if (typeof Compiler !== 'function') {\n    throw new Error('Cannot `' + name + '` without `Compiler`')\n  }\n}\n\n/* Assert the processor is not frozen. */\nfunction assertUnfrozen(name, frozen) {\n  if (frozen) {\n    throw new Error(\n      [\n        'Cannot invoke `' + name + '` on a frozen processor.\\nCreate a new ',\n        'processor first, by invoking it: use `processor()` instead of ',\n        '`processor`.'\n      ].join('')\n    )\n  }\n}\n\n/* Assert `node` is a Unist node. */\nfunction assertNode(node) {\n  if (!node || !string(node.type)) {\n    throw new Error('Expected node, got `' + node + '`')\n  }\n}\n\n/* Assert that `complete` is `true`. */\nfunction assertDone(name, asyncName, complete) {\n  if (!complete) {\n    throw new Error(\n      '`' + name + '` finished async. Use `' + asyncName + '` instead'\n    )\n  }\n}\n","'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\nvar defineProperty = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nvar isArray = function isArray(arr) {\n\tif (typeof Array.isArray === 'function') {\n\t\treturn Array.isArray(arr);\n\t}\n\n\treturn toStr.call(arr) === '[object Array]';\n};\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) { /**/ }\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\n// If name is '__proto__', and Object.defineProperty is available, define __proto__ as an own property on target\nvar setProperty = function setProperty(target, options) {\n\tif (defineProperty && options.name === '__proto__') {\n\t\tdefineProperty(target, options.name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\t\t\tvalue: options.newValue,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\ttarget[options.name] = options.newValue;\n\t}\n};\n\n// Return undefined instead of __proto__ if '__proto__' is not an own property\nvar getProperty = function getProperty(obj, name) {\n\tif (name === '__proto__') {\n\t\tif (!hasOwn.call(obj, name)) {\n\t\t\treturn void 0;\n\t\t} else if (gOPD) {\n\t\t\t// In early versions of node, obj['__proto__'] is buggy when obj has\n\t\t\t// __proto__ as an own property. Object.getOwnPropertyDescriptor() works.\n\t\t\treturn gOPD(obj, name).value;\n\t\t}\n\t}\n\n\treturn obj[name];\n};\n\nmodule.exports = function extend() {\n\tvar options, name, src, copy, copyIsArray, clone;\n\tvar target = arguments[0];\n\tvar i = 1;\n\tvar length = arguments.length;\n\tvar deep = false;\n\n\t// Handle a deep copy situation\n\tif (typeof target === 'boolean') {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t}\n\tif (target == null || (typeof target !== 'object' && typeof target !== 'function')) {\n\t\ttarget = {};\n\t}\n\n\tfor (; i < length; ++i) {\n\t\toptions = arguments[i];\n\t\t// Only deal with non-null/undefined values\n\t\tif (options != null) {\n\t\t\t// Extend the base object\n\t\t\tfor (name in options) {\n\t\t\t\tsrc = getProperty(target, name);\n\t\t\t\tcopy = getProperty(options, name);\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif (target !== copy) {\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: extend(deep, clone, copy) });\n\n\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: copy });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n","'use strict'\n\nmodule.exports = bail\n\nfunction bail(err) {\n  if (err) {\n    throw err\n  }\n}\n","'use strict';\n\nvar VMessage = require('vfile-message');\nvar VFile = require('./core.js');\n\nmodule.exports = VFile;\n\nvar proto = VFile.prototype;\n\nproto.message = message;\nproto.info = info;\nproto.fail = fail;\n\n/* Slight backwards compatibility.  Remove in the future. */\nproto.warn = message;\n\n/* Create a message with `reason` at `position`.\n * When an error is passed in as `reason`, copies the stack. */\nfunction message(reason, position, origin) {\n  var filePath = this.path;\n  var message = new VMessage(reason, position, origin);\n\n  if (filePath) {\n    message.name = filePath + ':' + message.name;\n    message.file = filePath;\n  }\n\n  message.fatal = false;\n\n  this.messages.push(message);\n\n  return message;\n}\n\n/* Fail. Creates a vmessage, associates it with the file,\n * and throws it. */\nfunction fail() {\n  var message = this.message.apply(this, arguments);\n\n  message.fatal = true;\n\n  throw message;\n}\n\n/* Info. Creates a vmessage, associates it with the file,\n * and marks the fatality as null. */\nfunction info() {\n  var message = this.message.apply(this, arguments);\n\n  message.fatal = null;\n\n  return message;\n}\n","'use strict'\n\nvar stringify = require('unist-util-stringify-position')\n\nmodule.exports = VMessage\n\n// Inherit from `Error#`.\nfunction VMessagePrototype() {}\nVMessagePrototype.prototype = Error.prototype\nVMessage.prototype = new VMessagePrototype()\n\n// Message properties.\nvar proto = VMessage.prototype\n\nproto.file = ''\nproto.name = ''\nproto.reason = ''\nproto.message = ''\nproto.stack = ''\nproto.fatal = null\nproto.column = null\nproto.line = null\n\n// Construct a new VMessage.\n//\n// Note: We cannot invoke `Error` on the created context, as that adds readonly\n// `line` and `column` attributes on Safari 9, thus throwing and failing the\n// data.\nfunction VMessage(reason, position, origin) {\n  var parts\n  var range\n  var location\n\n  if (typeof position === 'string') {\n    origin = position\n    position = null\n  }\n\n  parts = parseOrigin(origin)\n  range = stringify(position) || '1:1'\n\n  location = {\n    start: {line: null, column: null},\n    end: {line: null, column: null}\n  }\n\n  // Node.\n  if (position && position.position) {\n    position = position.position\n  }\n\n  if (position) {\n    // Position.\n    if (position.start) {\n      location = position\n      position = position.start\n    } else {\n      // Point.\n      location.start = position\n    }\n  }\n\n  if (reason.stack) {\n    this.stack = reason.stack\n    reason = reason.message\n  }\n\n  this.message = reason\n  this.name = range\n  this.reason = reason\n  this.line = position ? position.line : null\n  this.column = position ? position.column : null\n  this.location = location\n  this.source = parts[0]\n  this.ruleId = parts[1]\n}\n\nfunction parseOrigin(origin) {\n  var result = [null, null]\n  var index\n\n  if (typeof origin === 'string') {\n    index = origin.indexOf(':')\n\n    if (index === -1) {\n      result[1] = origin\n    } else {\n      result[0] = origin.slice(0, index)\n      result[1] = origin.slice(index + 1)\n    }\n  }\n\n  return result\n}\n","'use strict'\n\nvar own = {}.hasOwnProperty\n\nmodule.exports = stringify\n\nfunction stringify(value) {\n  /* Nothing. */\n  if (!value || typeof value !== 'object') {\n    return null\n  }\n\n  /* Node. */\n  if (own.call(value, 'position') || own.call(value, 'type')) {\n    return position(value.position)\n  }\n\n  /* Position. */\n  if (own.call(value, 'start') || own.call(value, 'end')) {\n    return position(value)\n  }\n\n  /* Point. */\n  if (own.call(value, 'line') || own.call(value, 'column')) {\n    return point(value)\n  }\n\n  /* ? */\n  return null\n}\n\nfunction point(point) {\n  if (!point || typeof point !== 'object') {\n    point = {}\n  }\n\n  return index(point.line) + ':' + index(point.column)\n}\n\nfunction position(pos) {\n  if (!pos || typeof pos !== 'object') {\n    pos = {}\n  }\n\n  return point(pos.start) + '-' + point(pos.end)\n}\n\nfunction index(value) {\n  return value && typeof value === 'number' ? value : 1\n}\n","'use strict';\n\nvar path = require('path');\nvar replace = require('replace-ext');\nvar buffer = require('is-buffer');\n\nmodule.exports = VFile;\n\nvar own = {}.hasOwnProperty;\nvar proto = VFile.prototype;\n\nproto.toString = toString;\n\n/* Order of setting (least specific to most), we need this because\n * otherwise `{stem: 'a', path: '~/b.js'}` would throw, as a path\n * is needed before a stem can be set. */\nvar order = [\n  'history',\n  'path',\n  'basename',\n  'stem',\n  'extname',\n  'dirname'\n];\n\n/* Construct a new file. */\nfunction VFile(options) {\n  var prop;\n  var index;\n  var length;\n\n  if (!options) {\n    options = {};\n  } else if (typeof options === 'string' || buffer(options)) {\n    options = {contents: options};\n  } else if ('message' in options && 'messages' in options) {\n    return options;\n  }\n\n  if (!(this instanceof VFile)) {\n    return new VFile(options);\n  }\n\n  this.data = {};\n  this.messages = [];\n  this.history = [];\n  this.cwd = process.cwd();\n\n  /* Set path related properties in the correct order. */\n  index = -1;\n  length = order.length;\n\n  while (++index < length) {\n    prop = order[index];\n\n    if (own.call(options, prop)) {\n      this[prop] = options[prop];\n    }\n  }\n\n  /* Set non-path related properties. */\n  for (prop in options) {\n    if (order.indexOf(prop) === -1) {\n      this[prop] = options[prop];\n    }\n  }\n}\n\n/* Access full path (`~/index.min.js`). */\nObject.defineProperty(proto, 'path', {\n  get: function () {\n    return this.history[this.history.length - 1];\n  },\n  set: function (path) {\n    assertNonEmpty(path, 'path');\n\n    if (path !== this.path) {\n      this.history.push(path);\n    }\n  }\n});\n\n/* Access parent path (`~`). */\nObject.defineProperty(proto, 'dirname', {\n  get: function () {\n    return typeof this.path === 'string' ? path.dirname(this.path) : undefined;\n  },\n  set: function (dirname) {\n    assertPath(this.path, 'dirname');\n    this.path = path.join(dirname || '', this.basename);\n  }\n});\n\n/* Access basename (`index.min.js`). */\nObject.defineProperty(proto, 'basename', {\n  get: function () {\n    return typeof this.path === 'string' ? path.basename(this.path) : undefined;\n  },\n  set: function (basename) {\n    assertNonEmpty(basename, 'basename');\n    assertPart(basename, 'basename');\n    this.path = path.join(this.dirname || '', basename);\n  }\n});\n\n/* Access extname (`.js`). */\nObject.defineProperty(proto, 'extname', {\n  get: function () {\n    return typeof this.path === 'string' ? path.extname(this.path) : undefined;\n  },\n  set: function (extname) {\n    var ext = extname || '';\n\n    assertPart(ext, 'extname');\n    assertPath(this.path, 'extname');\n\n    if (ext) {\n      if (ext.charAt(0) !== '.') {\n        throw new Error('`extname` must start with `.`');\n      }\n\n      if (ext.indexOf('.', 1) !== -1) {\n        throw new Error('`extname` cannot contain multiple dots');\n      }\n    }\n\n    this.path = replace(this.path, ext);\n  }\n});\n\n/* Access stem (`index.min`). */\nObject.defineProperty(proto, 'stem', {\n  get: function () {\n    return typeof this.path === 'string' ? path.basename(this.path, this.extname) : undefined;\n  },\n  set: function (stem) {\n    assertNonEmpty(stem, 'stem');\n    assertPart(stem, 'stem');\n    this.path = path.join(this.dirname || '', stem + (this.extname || ''));\n  }\n});\n\n/* Get the value of the file. */\nfunction toString(encoding) {\n  var value = this.contents || '';\n  return buffer(value) ? value.toString(encoding) : String(value);\n}\n\n/* Assert that `part` is not a path (i.e., does\n * not contain `path.sep`). */\nfunction assertPart(part, name) {\n  if (part.indexOf(path.sep) !== -1) {\n    throw new Error('`' + name + '` cannot be a path: did not expect `' + path.sep + '`');\n  }\n}\n\n/* Assert that `part` is not empty. */\nfunction assertNonEmpty(part, name) {\n  if (!part) {\n    throw new Error('`' + name + '` cannot be empty');\n  }\n}\n\n/* Assert `path` exists. */\nfunction assertPath(path, name) {\n  if (!path) {\n    throw new Error('Setting `' + name + '` requires `path` to be set too');\n  }\n}\n","'use strict';\n\nvar path = require('path');\n\nfunction replaceExt(npath, ext) {\n  if (typeof npath !== 'string') {\n    return npath;\n  }\n\n  if (npath.length === 0) {\n    return npath;\n  }\n\n  var nFileName = path.basename(npath, path.extname(npath)) + ext;\n  return path.join(path.dirname(npath), nFileName);\n}\n\nmodule.exports = replaceExt;\n","/*!\n * Determine if an object is a Buffer\n *\n * @author   Feross Aboukhadijeh <https://feross.org>\n * @license  MIT\n */\n\n// The _isBuffer check is for Safari 5-7 support, because it's missing\n// Object.prototype.constructor. Remove this eventually\nmodule.exports = function (obj) {\n  return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)\n}\n\nfunction isBuffer (obj) {\n  return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n\n// For Node v0.10 support. Remove this eventually.\nfunction isSlowBuffer (obj) {\n  return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))\n}\n","'use strict'\n\nvar wrap = require('./wrap.js')\n\nmodule.exports = trough\n\ntrough.wrap = wrap\n\nvar slice = [].slice\n\n// Create new middleware.\nfunction trough() {\n  var fns = []\n  var middleware = {}\n\n  middleware.run = run\n  middleware.use = use\n\n  return middleware\n\n  // Run `fns`.  Last argument must be a completion handler.\n  function run() {\n    var index = -1\n    var input = slice.call(arguments, 0, -1)\n    var done = arguments[arguments.length - 1]\n\n    if (typeof done !== 'function') {\n      throw new Error('Expected function as last argument, not ' + done)\n    }\n\n    next.apply(null, [null].concat(input))\n\n    // Run the next `fn`, if any.\n    function next(err) {\n      var fn = fns[++index]\n      var params = slice.call(arguments, 0)\n      var values = params.slice(1)\n      var length = input.length\n      var pos = -1\n\n      if (err) {\n        done(err)\n        return\n      }\n\n      // Copy non-nully input into values.\n      while (++pos < length) {\n        if (values[pos] === null || values[pos] === undefined) {\n          values[pos] = input[pos]\n        }\n      }\n\n      input = values\n\n      // Next or done.\n      if (fn) {\n        wrap(fn, next).apply(null, input)\n      } else {\n        done.apply(null, [null].concat(input))\n      }\n    }\n  }\n\n  // Add `fn` to the list.\n  function use(fn) {\n    if (typeof fn !== 'function') {\n      throw new Error('Expected `fn` to be a function, not ' + fn)\n    }\n\n    fns.push(fn)\n\n    return middleware\n  }\n}\n","'use strict'\n\nvar slice = [].slice\n\nmodule.exports = wrap\n\n// Wrap `fn`.\n// Can be sync or async; return a promise, receive a completion handler, return\n// new values and errors.\nfunction wrap(fn, callback) {\n  var invoked\n\n  return wrapped\n\n  function wrapped() {\n    var params = slice.call(arguments, 0)\n    var callback = fn.length > params.length\n    var result\n\n    if (callback) {\n      params.push(done)\n    }\n\n    try {\n      result = fn.apply(null, params)\n    } catch (error) {\n      // Well, this is quite the pickle.\n      // `fn` received a callback and invoked it (thus continuing the pipeline),\n      // but later also threw an error.\n      // We’re not about to restart the pipeline again, so the only thing left\n      // to do is to throw the thing instead.\n      if (callback && invoked) {\n        throw error\n      }\n\n      return done(error)\n    }\n\n    if (!callback) {\n      if (result && typeof result.then === 'function') {\n        result.then(then, done)\n      } else if (result instanceof Error) {\n        done(result)\n      } else {\n        then(result)\n      }\n    }\n  }\n\n  // Invoke `next`, only once.\n  function done() {\n    if (!invoked) {\n      invoked = true\n\n      callback.apply(null, arguments)\n    }\n  }\n\n  // Invoke `done` with one value.\n  // Tracks if an error is passed, too.\n  function then(value) {\n    done(null, value)\n  }\n}\n","var toString = Object.prototype.toString\n\nmodule.exports = isString\n\nfunction isString(obj) {\n    return toString.call(obj) === \"[object String]\"\n}\n","'use strict';\nvar toString = Object.prototype.toString;\n\nmodule.exports = function (x) {\n\tvar prototype;\n\treturn toString.call(x) === '[object Object]' && (prototype = Object.getPrototypeOf(x), prototype === null || prototype === Object.getPrototypeOf({}));\n};\n","'use strict';\n\nvar unherit = require('unherit');\nvar xtend = require('xtend');\nvar Parser = require('./lib/parser.js');\n\nmodule.exports = parse;\nparse.Parser = Parser;\n\nfunction parse(options) {\n  var Local = unherit(Parser);\n  Local.prototype.options = xtend(Local.prototype.options, this.data('settings'), options);\n  this.Parser = Local;\n}\n","'use strict'\n\nvar xtend = require('xtend')\nvar inherits = require('inherits')\n\nmodule.exports = unherit\n\n// Create a custom constructor which can be modified without affecting the\n// original class.\nfunction unherit(Super) {\n  var result\n  var key\n  var value\n\n  inherits(Of, Super)\n  inherits(From, Of)\n\n  // Clone values.\n  result = Of.prototype\n\n  for (key in result) {\n    value = result[key]\n\n    if (value && typeof value === 'object') {\n      result[key] = 'concat' in value ? value.concat() : xtend(value)\n    }\n  }\n\n  return Of\n\n  // Constructor accepting a single argument, which itself is an `arguments`\n  // object.\n  function From(parameters) {\n    return Super.apply(this, parameters)\n  }\n\n  // Constructor accepting variadic arguments.\n  function Of() {\n    if (!(this instanceof Of)) {\n      return new From(arguments)\n    }\n\n    return Super.apply(this, arguments)\n  }\n}\n","if (typeof Object.create === 'function') {\n  // implementation from standard node.js 'util' module\n  module.exports = function inherits(ctor, superCtor) {\n    if (superCtor) {\n      ctor.super_ = superCtor\n      ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n          value: ctor,\n          enumerable: false,\n          writable: true,\n          configurable: true\n        }\n      })\n    }\n  };\n} else {\n  // old school shim for old browsers\n  module.exports = function inherits(ctor, superCtor) {\n    if (superCtor) {\n      ctor.super_ = superCtor\n      var TempCtor = function () {}\n      TempCtor.prototype = superCtor.prototype\n      ctor.prototype = new TempCtor()\n      ctor.prototype.constructor = ctor\n    }\n  }\n}\n","'use strict';\n\nvar xtend = require('xtend');\nvar toggle = require('state-toggle');\nvar vfileLocation = require('vfile-location');\nvar unescape = require('./unescape');\nvar decode = require('./decode');\nvar tokenizer = require('./tokenizer');\n\nmodule.exports = Parser;\n\nfunction Parser(doc, file) {\n  this.file = file;\n  this.offset = {};\n  this.options = xtend(this.options);\n  this.setOptions({});\n\n  this.inList = false;\n  this.inBlock = false;\n  this.inLink = false;\n  this.atStart = true;\n\n  this.toOffset = vfileLocation(file).toOffset;\n  this.unescape = unescape(this, 'escape');\n  this.decode = decode(this);\n}\n\nvar proto = Parser.prototype;\n\n/* Expose core. */\nproto.setOptions = require('./set-options');\nproto.parse = require('./parse');\n\n/* Expose `defaults`. */\nproto.options = require('./defaults');\n\n/* Enter and exit helpers. */\nproto.exitStart = toggle('atStart', true);\nproto.enterList = toggle('inList', false);\nproto.enterLink = toggle('inLink', false);\nproto.enterBlock = toggle('inBlock', false);\n\n/* Nodes that can interupt a paragraph:\n *\n * ```markdown\n * A paragraph, followed by a thematic break.\n * ___\n * ```\n *\n * In the above example, the thematic break “interupts”\n * the paragraph. */\nproto.interruptParagraph = [\n  ['thematicBreak'],\n  ['atxHeading'],\n  ['fencedCode'],\n  ['blockquote'],\n  ['html'],\n  ['setextHeading', {commonmark: false}],\n  ['definition', {commonmark: false}],\n  ['footnote', {commonmark: false}]\n];\n\n/* Nodes that can interupt a list:\n *\n * ```markdown\n * - One\n * ___\n * ```\n *\n * In the above example, the thematic break “interupts”\n * the list. */\nproto.interruptList = [\n  ['atxHeading', {pedantic: false}],\n  ['fencedCode', {pedantic: false}],\n  ['thematicBreak', {pedantic: false}],\n  ['definition', {commonmark: false}],\n  ['footnote', {commonmark: false}]\n];\n\n/* Nodes that can interupt a blockquote:\n *\n * ```markdown\n * > A paragraph.\n * ___\n * ```\n *\n * In the above example, the thematic break “interupts”\n * the blockquote. */\nproto.interruptBlockquote = [\n  ['indentedCode', {commonmark: true}],\n  ['fencedCode', {commonmark: true}],\n  ['atxHeading', {commonmark: true}],\n  ['setextHeading', {commonmark: true}],\n  ['thematicBreak', {commonmark: true}],\n  ['html', {commonmark: true}],\n  ['list', {commonmark: true}],\n  ['definition', {commonmark: false}],\n  ['footnote', {commonmark: false}]\n];\n\n/* Handlers. */\nproto.blockTokenizers = {\n  newline: require('./tokenize/newline'),\n  indentedCode: require('./tokenize/code-indented'),\n  fencedCode: require('./tokenize/code-fenced'),\n  blockquote: require('./tokenize/blockquote'),\n  atxHeading: require('./tokenize/heading-atx'),\n  thematicBreak: require('./tokenize/thematic-break'),\n  list: require('./tokenize/list'),\n  setextHeading: require('./tokenize/heading-setext'),\n  html: require('./tokenize/html-block'),\n  footnote: require('./tokenize/footnote-definition'),\n  definition: require('./tokenize/definition'),\n  table: require('./tokenize/table'),\n  paragraph: require('./tokenize/paragraph')\n};\n\nproto.inlineTokenizers = {\n  escape: require('./tokenize/escape'),\n  autoLink: require('./tokenize/auto-link'),\n  url: require('./tokenize/url'),\n  html: require('./tokenize/html-inline'),\n  link: require('./tokenize/link'),\n  reference: require('./tokenize/reference'),\n  strong: require('./tokenize/strong'),\n  emphasis: require('./tokenize/emphasis'),\n  deletion: require('./tokenize/delete'),\n  code: require('./tokenize/code-inline'),\n  break: require('./tokenize/break'),\n  text: require('./tokenize/text')\n};\n\n/* Expose precedence. */\nproto.blockMethods = keys(proto.blockTokenizers);\nproto.inlineMethods = keys(proto.inlineTokenizers);\n\n/* Tokenizers. */\nproto.tokenizeBlock = tokenizer('block');\nproto.tokenizeInline = tokenizer('inline');\nproto.tokenizeFactory = tokenizer;\n\n/* Get all keys in `value`. */\nfunction keys(value) {\n  var result = [];\n  var key;\n\n  for (key in value) {\n    result.push(key);\n  }\n\n  return result;\n}\n","'use strict'\n\nmodule.exports = factory\n\n// Construct a state `toggler`: a function which inverses `property` in context\n// based on its current value.\n// The by `toggler` returned function restores that value.\nfunction factory(key, state, ctx) {\n  return enter\n\n  function enter() {\n    var context = ctx || this\n    var current = context[key]\n\n    context[key] = !state\n\n    return exit\n\n    function exit() {\n      context[key] = current\n    }\n  }\n}\n","'use strict'\n\nmodule.exports = factory\n\nfunction factory(file) {\n  var contents = indices(String(file))\n\n  return {\n    toPosition: offsetToPositionFactory(contents),\n    toOffset: positionToOffsetFactory(contents)\n  }\n}\n\n// Factory to get the line and column-based `position` for `offset` in the bound\n// indices.\nfunction offsetToPositionFactory(indices) {\n  return offsetToPosition\n\n  // Get the line and column-based `position` for `offset` in the bound indices.\n  function offsetToPosition(offset) {\n    var index = -1\n    var length = indices.length\n\n    if (offset < 0) {\n      return {}\n    }\n\n    while (++index < length) {\n      if (indices[index] > offset) {\n        return {\n          line: index + 1,\n          column: offset - (indices[index - 1] || 0) + 1,\n          offset: offset\n        }\n      }\n    }\n\n    return {}\n  }\n}\n\n// Factory to get the `offset` for a line and column-based `position` in the\n// bound indices.\nfunction positionToOffsetFactory(indices) {\n  return positionToOffset\n\n  // Get the `offset` for a line and column-based `position` in the bound\n  // indices.\n  function positionToOffset(position) {\n    var line = position && position.line\n    var column = position && position.column\n\n    if (!isNaN(line) && !isNaN(column) && line - 1 in indices) {\n      return (indices[line - 2] || 0) + column - 1 || 0\n    }\n\n    return -1\n  }\n}\n\n// Get indices of line-breaks in `value`.\nfunction indices(value) {\n  var result = []\n  var index = value.indexOf('\\n')\n\n  while (index !== -1) {\n    result.push(index + 1)\n    index = value.indexOf('\\n', index + 1)\n  }\n\n  result.push(value.length + 1)\n\n  return result\n}\n","'use strict';\n\nmodule.exports = factory;\n\n/* Factory to de-escape a value, based on a list at `key`\n * in `ctx`. */\nfunction factory(ctx, key) {\n  return unescape;\n\n  /* De-escape a string using the expression at `key`\n   * in `ctx`. */\n  function unescape(value) {\n    var prev = 0;\n    var index = value.indexOf('\\\\');\n    var escape = ctx[key];\n    var queue = [];\n    var character;\n\n    while (index !== -1) {\n      queue.push(value.slice(prev, index));\n      prev = index + 1;\n      character = value.charAt(prev);\n\n      /* If the following character is not a valid escape,\n       * add the slash. */\n      if (!character || escape.indexOf(character) === -1) {\n        queue.push('\\\\');\n      }\n\n      index = value.indexOf('\\\\', prev);\n    }\n\n    queue.push(value.slice(prev));\n\n    return queue.join('');\n  }\n}\n","'use strict';\n\nvar xtend = require('xtend');\nvar entities = require('parse-entities');\n\nmodule.exports = factory;\n\n/* Factory to create an entity decoder. */\nfunction factory(ctx) {\n  decoder.raw = decodeRaw;\n\n  return decoder;\n\n  /* Normalize `position` to add an `indent`. */\n  function normalize(position) {\n    var offsets = ctx.offset;\n    var line = position.line;\n    var result = [];\n\n    while (++line) {\n      if (!(line in offsets)) {\n        break;\n      }\n\n      result.push((offsets[line] || 0) + 1);\n    }\n\n    return {\n      start: position,\n      indent: result\n    };\n  }\n\n  /* Handle a warning.\n   * See https://github.com/wooorm/parse-entities\n   * for the warnings. */\n  function handleWarning(reason, position, code) {\n    if (code === 3) {\n      return;\n    }\n\n    ctx.file.message(reason, position);\n  }\n\n  /* Decode `value` (at `position`) into text-nodes. */\n  function decoder(value, position, handler) {\n    entities(value, {\n      position: normalize(position),\n      warning: handleWarning,\n      text: handler,\n      reference: handler,\n      textContext: ctx,\n      referenceContext: ctx\n    });\n  }\n\n  /* Decode `value` (at `position`) into a string. */\n  function decodeRaw(value, position, options) {\n    return entities(value, xtend(options, {\n      position: normalize(position),\n      warning: handleWarning\n    }));\n  }\n}\n","'use strict'\n\nmodule.exports = hexadecimal\n\n// Check if the given character code, or the character code at the first\n// character, is hexadecimal.\nfunction hexadecimal(character) {\n  var code = typeof character === 'string' ? character.charCodeAt(0) : character\n\n  return (\n    (code >= 97 /* a */ && code <= 102) /* z */ ||\n    (code >= 65 /* A */ && code <= 70) /* Z */ ||\n    (code >= 48 /* A */ && code <= 57) /* Z */\n  )\n}\n","'use strict'\n\nvar alphabetical = require('is-alphabetical')\nvar decimal = require('is-decimal')\n\nmodule.exports = alphanumerical\n\n// Check if the given character code, or the character code at the first\n// character, is alphanumerical.\nfunction alphanumerical(character) {\n  return alphabetical(character) || decimal(character)\n}\n","'use strict'\n\n/* eslint-env browser */\n\nvar el\n\nvar semicolon = 59 //  ';'\n\nmodule.exports = decodeEntity\n\nfunction decodeEntity(characters) {\n  var entity = '&' + characters + ';'\n  var char\n\n  el = el || document.createElement('i')\n  el.innerHTML = entity\n  char = el.textContent\n\n  // Some entities do not require the closing semicolon (`&not` - for instance),\n  // which leads to situations where parsing the assumed entity of &notit; will\n  // result in the string `¬it;`.  When we encounter a trailing semicolon after\n  // parsing and the entity to decode was not a semicolon (`&semi;`), we can\n  // assume that the matching was incomplete\n  if (char.charCodeAt(char.length - 1) === semicolon && characters !== 'semi') {\n    return false\n  }\n\n  // If the decoded string is equal to the input, the entity was not valid\n  return char === entity ? false : char\n}\n","'use strict';\n\nmodule.exports = factory;\n\nvar MERGEABLE_NODES = {\n  text: mergeText,\n  blockquote: mergeBlockquote\n};\n\n/* Check whether a node is mergeable with adjacent nodes. */\nfunction mergeable(node) {\n  var start;\n  var end;\n\n  if (node.type !== 'text' || !node.position) {\n    return true;\n  }\n\n  start = node.position.start;\n  end = node.position.end;\n\n  /* Only merge nodes which occupy the same size as their\n   * `value`. */\n  return start.line !== end.line ||\n      end.column - start.column === node.value.length;\n}\n\n/* Merge two text nodes: `node` into `prev`. */\nfunction mergeText(prev, node) {\n  prev.value += node.value;\n\n  return prev;\n}\n\n/* Merge two blockquotes: `node` into `prev`, unless in\n * CommonMark mode. */\nfunction mergeBlockquote(prev, node) {\n  if (this.options.commonmark) {\n    return node;\n  }\n\n  prev.children = prev.children.concat(node.children);\n\n  return prev;\n}\n\n/* Construct a tokenizer.  This creates both\n * `tokenizeInline` and `tokenizeBlock`. */\nfunction factory(type) {\n  return tokenize;\n\n  /* Tokenizer for a bound `type`. */\n  function tokenize(value, location) {\n    var self = this;\n    var offset = self.offset;\n    var tokens = [];\n    var methods = self[type + 'Methods'];\n    var tokenizers = self[type + 'Tokenizers'];\n    var line = location.line;\n    var column = location.column;\n    var index;\n    var length;\n    var method;\n    var name;\n    var matched;\n    var valueLength;\n\n    /* Trim white space only lines. */\n    if (!value) {\n      return tokens;\n    }\n\n    /* Expose on `eat`. */\n    eat.now = now;\n    eat.file = self.file;\n\n    /* Sync initial offset. */\n    updatePosition('');\n\n    /* Iterate over `value`, and iterate over all\n     * tokenizers.  When one eats something, re-iterate\n     * with the remaining value.  If no tokenizer eats,\n     * something failed (should not happen) and an\n     * exception is thrown. */\n    while (value) {\n      index = -1;\n      length = methods.length;\n      matched = false;\n\n      while (++index < length) {\n        name = methods[index];\n        method = tokenizers[name];\n\n        if (\n          method &&\n          /* istanbul ignore next */ (!method.onlyAtStart || self.atStart) &&\n          (!method.notInList || !self.inList) &&\n          (!method.notInBlock || !self.inBlock) &&\n          (!method.notInLink || !self.inLink)\n        ) {\n          valueLength = value.length;\n\n          method.apply(self, [eat, value]);\n\n          matched = valueLength !== value.length;\n\n          if (matched) {\n            break;\n          }\n        }\n      }\n\n      /* istanbul ignore if */\n      if (!matched) {\n        self.file.fail(new Error('Infinite loop'), eat.now());\n      }\n    }\n\n    self.eof = now();\n\n    return tokens;\n\n    /* Update line, column, and offset based on\n     * `value`. */\n    function updatePosition(subvalue) {\n      var lastIndex = -1;\n      var index = subvalue.indexOf('\\n');\n\n      while (index !== -1) {\n        line++;\n        lastIndex = index;\n        index = subvalue.indexOf('\\n', index + 1);\n      }\n\n      if (lastIndex === -1) {\n        column += subvalue.length;\n      } else {\n        column = subvalue.length - lastIndex;\n      }\n\n      if (line in offset) {\n        if (lastIndex !== -1) {\n          column += offset[line];\n        } else if (column <= offset[line]) {\n          column = offset[line] + 1;\n        }\n      }\n    }\n\n    /* Get offset.  Called before the first character is\n     * eaten to retrieve the range's offsets. */\n    function getOffset() {\n      var indentation = [];\n      var pos = line + 1;\n\n      /* Done.  Called when the last character is\n       * eaten to retrieve the range’s offsets. */\n      return function () {\n        var last = line + 1;\n\n        while (pos < last) {\n          indentation.push((offset[pos] || 0) + 1);\n\n          pos++;\n        }\n\n        return indentation;\n      };\n    }\n\n    /* Get the current position. */\n    function now() {\n      var pos = {line: line, column: column};\n\n      pos.offset = self.toOffset(pos);\n\n      return pos;\n    }\n\n    /* Store position information for a node. */\n    function Position(start) {\n      this.start = start;\n      this.end = now();\n    }\n\n    /* Throw when a value is incorrectly eaten.\n     * This shouldn’t happen but will throw on new,\n     * incorrect rules. */\n    function validateEat(subvalue) {\n      /* istanbul ignore if */\n      if (value.substring(0, subvalue.length) !== subvalue) {\n        /* Capture stack-trace. */\n        self.file.fail(\n          new Error(\n            'Incorrectly eaten value: please report this ' +\n            'warning on http://git.io/vg5Ft'\n          ),\n          now()\n        );\n      }\n    }\n\n    /* Mark position and patch `node.position`. */\n    function position() {\n      var before = now();\n\n      return update;\n\n      /* Add the position to a node. */\n      function update(node, indent) {\n        var prev = node.position;\n        var start = prev ? prev.start : before;\n        var combined = [];\n        var n = prev && prev.end.line;\n        var l = before.line;\n\n        node.position = new Position(start);\n\n        /* If there was already a `position`, this\n         * node was merged.  Fixing `start` wasn’t\n         * hard, but the indent is different.\n         * Especially because some information, the\n         * indent between `n` and `l` wasn’t\n         * tracked.  Luckily, that space is\n         * (should be?) empty, so we can safely\n         * check for it now. */\n        if (prev && indent && prev.indent) {\n          combined = prev.indent;\n\n          if (n < l) {\n            while (++n < l) {\n              combined.push((offset[n] || 0) + 1);\n            }\n\n            combined.push(before.column);\n          }\n\n          indent = combined.concat(indent);\n        }\n\n        node.position.indent = indent || [];\n\n        return node;\n      }\n    }\n\n    /* Add `node` to `parent`s children or to `tokens`.\n     * Performs merges where possible. */\n    function add(node, parent) {\n      var children = parent ? parent.children : tokens;\n      var prev = children[children.length - 1];\n\n      if (\n        prev &&\n        node.type === prev.type &&\n        node.type in MERGEABLE_NODES &&\n        mergeable(prev) &&\n        mergeable(node)\n      ) {\n        node = MERGEABLE_NODES[node.type].call(self, prev, node);\n      }\n\n      if (node !== prev) {\n        children.push(node);\n      }\n\n      if (self.atStart && tokens.length !== 0) {\n        self.exitStart();\n      }\n\n      return node;\n    }\n\n    /* Remove `subvalue` from `value`.\n     * `subvalue` must be at the start of `value`. */\n    function eat(subvalue) {\n      var indent = getOffset();\n      var pos = position();\n      var current = now();\n\n      validateEat(subvalue);\n\n      apply.reset = reset;\n      reset.test = test;\n      apply.test = test;\n\n      value = value.substring(subvalue.length);\n\n      updatePosition(subvalue);\n\n      indent = indent();\n\n      return apply;\n\n      /* Add the given arguments, add `position` to\n       * the returned node, and return the node. */\n      function apply(node, parent) {\n        return pos(add(pos(node), parent), indent);\n      }\n\n      /* Functions just like apply, but resets the\n       * content:  the line and column are reversed,\n       * and the eaten value is re-added.\n       * This is useful for nodes with a single\n       * type of content, such as lists and tables.\n       * See `apply` above for what parameters are\n       * expected. */\n      function reset() {\n        var node = apply.apply(null, arguments);\n\n        line = current.line;\n        column = current.column;\n        value = subvalue + value;\n\n        return node;\n      }\n\n      /* Test the position, after eating, and reverse\n       * to a not-eaten state. */\n      function test() {\n        var result = pos({});\n\n        line = current.line;\n        column = current.column;\n        value = subvalue + value;\n\n        return result.position;\n      }\n    }\n  }\n}\n","'use strict';\n\nvar xtend = require('xtend');\nvar escapes = require('markdown-escapes');\nvar defaults = require('./defaults');\n\nmodule.exports = setOptions;\n\nfunction setOptions(options) {\n  var self = this;\n  var current = self.options;\n  var key;\n  var value;\n\n  if (options == null) {\n    options = {};\n  } else if (typeof options === 'object') {\n    options = xtend(options);\n  } else {\n    throw new Error(\n      'Invalid value `' + options + '` ' +\n      'for setting `options`'\n    );\n  }\n\n  for (key in defaults) {\n    value = options[key];\n\n    if (value == null) {\n      value = current[key];\n    }\n\n    if (\n      (key !== 'blocks' && typeof value !== 'boolean') ||\n      (key === 'blocks' && typeof value !== 'object')\n    ) {\n      throw new Error('Invalid value `' + value + '` for setting `options.' + key + '`');\n    }\n\n    options[key] = value;\n  }\n\n  self.options = options;\n  self.escape = escapes(options);\n\n  return self;\n}\n","'use strict'\n\nmodule.exports = escapes\n\nvar defaults = [\n  '\\\\',\n  '`',\n  '*',\n  '{',\n  '}',\n  '[',\n  ']',\n  '(',\n  ')',\n  '#',\n  '+',\n  '-',\n  '.',\n  '!',\n  '_',\n  '>'\n]\n\nvar gfm = defaults.concat(['~', '|'])\n\nvar commonmark = gfm.concat([\n  '\\n',\n  '\"',\n  '$',\n  '%',\n  '&',\n  \"'\",\n  ',',\n  '/',\n  ':',\n  ';',\n  '<',\n  '=',\n  '?',\n  '@',\n  '^'\n])\n\nescapes.default = defaults\nescapes.gfm = gfm\nescapes.commonmark = commonmark\n\n// Get markdown escapes.\nfunction escapes(options) {\n  var settings = options || {}\n\n  if (settings.commonmark) {\n    return commonmark\n  }\n\n  return settings.gfm ? gfm : defaults\n}\n","'use strict';\n\nvar xtend = require('xtend');\nvar removePosition = require('unist-util-remove-position');\n\nmodule.exports = parse;\n\nvar C_NEWLINE = '\\n';\nvar EXPRESSION_LINE_BREAKS = /\\r\\n|\\r/g;\n\n/* Parse the bound file. */\nfunction parse() {\n  var self = this;\n  var value = String(self.file);\n  var start = {line: 1, column: 1, offset: 0};\n  var content = xtend(start);\n  var node;\n\n  /* Clean non-unix newlines: `\\r\\n` and `\\r` are all\n   * changed to `\\n`.  This should not affect positional\n   * information. */\n  value = value.replace(EXPRESSION_LINE_BREAKS, C_NEWLINE);\n\n  if (value.charCodeAt(0) === 0xFEFF) {\n    value = value.slice(1);\n\n    content.column++;\n    content.offset++;\n  }\n\n  node = {\n    type: 'root',\n    children: self.tokenizeBlock(value, content),\n    position: {\n      start: start,\n      end: self.eof || xtend(start)\n    }\n  };\n\n  if (!self.options.position) {\n    removePosition(node, true);\n  }\n\n  return node;\n}\n","'use strict'\n\nvar visit = require('unist-util-visit')\n\nmodule.exports = removePosition\n\nfunction removePosition(node, force) {\n  visit(node, force ? hard : soft)\n  return node\n}\n\nfunction hard(node) {\n  delete node.position\n}\n\nfunction soft(node) {\n  node.position = undefined\n}\n","'use strict'\n\nmodule.exports = visitParents\n\nvar convert = require('unist-util-is/convert')\n\nvar CONTINUE = true\nvar SKIP = 'skip'\nvar EXIT = false\n\nvisitParents.CONTINUE = CONTINUE\nvisitParents.SKIP = SKIP\nvisitParents.EXIT = EXIT\n\nfunction visitParents(tree, test, visitor, reverse) {\n  var is\n\n  if (typeof test === 'function' && typeof visitor !== 'function') {\n    reverse = visitor\n    visitor = test\n    test = null\n  }\n\n  is = convert(test)\n\n  one(tree, null, [])\n\n  // Visit a single node.\n  function one(node, index, parents) {\n    var result = []\n    var subresult\n\n    if (!test || is(node, index, parents[parents.length - 1] || null)) {\n      result = toResult(visitor(node, parents))\n\n      if (result[0] === EXIT) {\n        return result\n      }\n    }\n\n    if (node.children && result[0] !== SKIP) {\n      subresult = toResult(all(node.children, parents.concat(node)))\n      return subresult[0] === EXIT ? subresult : result\n    }\n\n    return result\n  }\n\n  // Visit children in `parent`.\n  function all(children, parents) {\n    var min = -1\n    var step = reverse ? -1 : 1\n    var index = (reverse ? children.length : min) + step\n    var result\n\n    while (index > min && index < children.length) {\n      result = one(children[index], index, parents)\n\n      if (result[0] === EXIT) {\n        return result\n      }\n\n      index = typeof result[1] === 'number' ? result[1] : index + step\n    }\n  }\n}\n\nfunction toResult(value) {\n  if (value !== null && typeof value === 'object' && 'length' in value) {\n    return value\n  }\n\n  if (typeof value === 'number') {\n    return [CONTINUE, value]\n  }\n\n  return [value]\n}\n","'use strict'\n\nmodule.exports = convert\n\nfunction convert(test) {\n  if (typeof test === 'string') {\n    return typeFactory(test)\n  }\n\n  if (test === null || test === undefined) {\n    return ok\n  }\n\n  if (typeof test === 'object') {\n    return ('length' in test ? anyFactory : matchesFactory)(test)\n  }\n\n  if (typeof test === 'function') {\n    return test\n  }\n\n  throw new Error('Expected function, string, or object as test')\n}\n\nfunction convertAll(tests) {\n  var results = []\n  var length = tests.length\n  var index = -1\n\n  while (++index < length) {\n    results[index] = convert(tests[index])\n  }\n\n  return results\n}\n\n// Utility assert each property in `test` is represented in `node`, and each\n// values are strictly equal.\nfunction matchesFactory(test) {\n  return matches\n\n  function matches(node) {\n    var key\n\n    for (key in test) {\n      if (node[key] !== test[key]) {\n        return false\n      }\n    }\n\n    return true\n  }\n}\n\nfunction anyFactory(tests) {\n  var checks = convertAll(tests)\n  var length = checks.length\n\n  return matches\n\n  function matches() {\n    var index = -1\n\n    while (++index < length) {\n      if (checks[index].apply(this, arguments)) {\n        return true\n      }\n    }\n\n    return false\n  }\n}\n\n// Utility to convert a string into a function which checks a given node’s type\n// for said string.\nfunction typeFactory(test) {\n  return type\n\n  function type(node) {\n    return Boolean(node && node.type === test)\n  }\n}\n\n// Utility to return true.\nfunction ok() {\n  return true\n}\n","'use strict';\n\nvar whitespace = require('is-whitespace-character');\n\nmodule.exports = newline;\n\n/* Tokenise newline. */\nfunction newline(eat, value, silent) {\n  var character = value.charAt(0);\n  var length;\n  var subvalue;\n  var queue;\n  var index;\n\n  if (character !== '\\n') {\n    return;\n  }\n\n  /* istanbul ignore if - never used (yet) */\n  if (silent) {\n    return true;\n  }\n\n  index = 1;\n  length = value.length;\n  subvalue = character;\n  queue = '';\n\n  while (index < length) {\n    character = value.charAt(index);\n\n    if (!whitespace(character)) {\n      break;\n    }\n\n    queue += character;\n\n    if (character === '\\n') {\n      subvalue += queue;\n      queue = '';\n    }\n\n    index++;\n  }\n\n  eat(subvalue);\n}\n","'use strict';\n\nvar repeat = require('repeat-string');\nvar trim = require('trim-trailing-lines');\n\nmodule.exports = indentedCode;\n\nvar C_NEWLINE = '\\n';\nvar C_TAB = '\\t';\nvar C_SPACE = ' ';\n\nvar CODE_INDENT_COUNT = 4;\nvar CODE_INDENT = repeat(C_SPACE, CODE_INDENT_COUNT);\n\n/* Tokenise indented code. */\nfunction indentedCode(eat, value, silent) {\n  var index = -1;\n  var length = value.length;\n  var subvalue = '';\n  var content = '';\n  var subvalueQueue = '';\n  var contentQueue = '';\n  var character;\n  var blankQueue;\n  var indent;\n\n  while (++index < length) {\n    character = value.charAt(index);\n\n    if (indent) {\n      indent = false;\n\n      subvalue += subvalueQueue;\n      content += contentQueue;\n      subvalueQueue = '';\n      contentQueue = '';\n\n      if (character === C_NEWLINE) {\n        subvalueQueue = character;\n        contentQueue = character;\n      } else {\n        subvalue += character;\n        content += character;\n\n        while (++index < length) {\n          character = value.charAt(index);\n\n          if (!character || character === C_NEWLINE) {\n            contentQueue = character;\n            subvalueQueue = character;\n            break;\n          }\n\n          subvalue += character;\n          content += character;\n        }\n      }\n    } else if (\n      character === C_SPACE &&\n      value.charAt(index + 1) === character &&\n      value.charAt(index + 2) === character &&\n      value.charAt(index + 3) === character\n    ) {\n      subvalueQueue += CODE_INDENT;\n      index += 3;\n      indent = true;\n    } else if (character === C_TAB) {\n      subvalueQueue += character;\n      indent = true;\n    } else {\n      blankQueue = '';\n\n      while (character === C_TAB || character === C_SPACE) {\n        blankQueue += character;\n        character = value.charAt(++index);\n      }\n\n      if (character !== C_NEWLINE) {\n        break;\n      }\n\n      subvalueQueue += blankQueue + character;\n      contentQueue += character;\n    }\n  }\n\n  if (content) {\n    if (silent) {\n      return true;\n    }\n\n    return eat(subvalue)({\n      type: 'code',\n      lang: null,\n      value: trim(content)\n    });\n  }\n}\n","'use strict';\n\nvar trim = require('trim-trailing-lines');\n\nmodule.exports = fencedCode;\n\nvar C_NEWLINE = '\\n';\nvar C_TAB = '\\t';\nvar C_SPACE = ' ';\nvar C_TILDE = '~';\nvar C_TICK = '`';\n\nvar MIN_FENCE_COUNT = 3;\nvar CODE_INDENT_COUNT = 4;\n\nfunction fencedCode(eat, value, silent) {\n  var self = this;\n  var settings = self.options;\n  var length = value.length + 1;\n  var index = 0;\n  var subvalue = '';\n  var fenceCount;\n  var marker;\n  var character;\n  var flag;\n  var queue;\n  var content;\n  var exdentedContent;\n  var closing;\n  var exdentedClosing;\n  var indent;\n  var now;\n\n  if (!settings.gfm) {\n    return;\n  }\n\n  /* Eat initial spacing. */\n  while (index < length) {\n    character = value.charAt(index);\n\n    if (character !== C_SPACE && character !== C_TAB) {\n      break;\n    }\n\n    subvalue += character;\n    index++;\n  }\n\n  indent = index;\n\n  /* Eat the fence. */\n  character = value.charAt(index);\n\n  if (character !== C_TILDE && character !== C_TICK) {\n    return;\n  }\n\n  index++;\n  marker = character;\n  fenceCount = 1;\n  subvalue += character;\n\n  while (index < length) {\n    character = value.charAt(index);\n\n    if (character !== marker) {\n      break;\n    }\n\n    subvalue += character;\n    fenceCount++;\n    index++;\n  }\n\n  if (fenceCount < MIN_FENCE_COUNT) {\n    return;\n  }\n\n  /* Eat spacing before flag. */\n  while (index < length) {\n    character = value.charAt(index);\n\n    if (character !== C_SPACE && character !== C_TAB) {\n      break;\n    }\n\n    subvalue += character;\n    index++;\n  }\n\n  /* Eat flag. */\n  flag = '';\n  queue = '';\n\n  while (index < length) {\n    character = value.charAt(index);\n\n    if (\n      character === C_NEWLINE ||\n      character === C_TILDE ||\n      character === C_TICK\n    ) {\n      break;\n    }\n\n    if (character === C_SPACE || character === C_TAB) {\n      queue += character;\n    } else {\n      flag += queue + character;\n      queue = '';\n    }\n\n    index++;\n  }\n\n  character = value.charAt(index);\n\n  if (character && character !== C_NEWLINE) {\n    return;\n  }\n\n  if (silent) {\n    return true;\n  }\n\n  now = eat.now();\n  now.column += subvalue.length;\n  now.offset += subvalue.length;\n\n  subvalue += flag;\n  flag = self.decode.raw(self.unescape(flag), now);\n\n  if (queue) {\n    subvalue += queue;\n  }\n\n  queue = '';\n  closing = '';\n  exdentedClosing = '';\n  content = '';\n  exdentedContent = '';\n\n  /* Eat content. */\n  while (index < length) {\n    character = value.charAt(index);\n    content += closing;\n    exdentedContent += exdentedClosing;\n    closing = '';\n    exdentedClosing = '';\n\n    if (character !== C_NEWLINE) {\n      content += character;\n      exdentedClosing += character;\n      index++;\n      continue;\n    }\n\n    /* Add the newline to `subvalue` if its the first\n     * character.  Otherwise, add it to the `closing`\n     * queue. */\n    if (content) {\n      closing += character;\n      exdentedClosing += character;\n    } else {\n      subvalue += character;\n    }\n\n    queue = '';\n    index++;\n\n    while (index < length) {\n      character = value.charAt(index);\n\n      if (character !== C_SPACE) {\n        break;\n      }\n\n      queue += character;\n      index++;\n    }\n\n    closing += queue;\n    exdentedClosing += queue.slice(indent);\n\n    if (queue.length >= CODE_INDENT_COUNT) {\n      continue;\n    }\n\n    queue = '';\n\n    while (index < length) {\n      character = value.charAt(index);\n\n      if (character !== marker) {\n        break;\n      }\n\n      queue += character;\n      index++;\n    }\n\n    closing += queue;\n    exdentedClosing += queue;\n\n    if (queue.length < fenceCount) {\n      continue;\n    }\n\n    queue = '';\n\n    while (index < length) {\n      character = value.charAt(index);\n\n      if (character !== C_SPACE && character !== C_TAB) {\n        break;\n      }\n\n      closing += character;\n      exdentedClosing += character;\n      index++;\n    }\n\n    if (!character || character === C_NEWLINE) {\n      break;\n    }\n  }\n\n  subvalue += content + closing;\n\n  return eat(subvalue)({\n    type: 'code',\n    lang: flag || null,\n    value: trim(exdentedContent)\n  });\n}\n","'use strict';\n\nvar trim = require('trim');\nvar interrupt = require('../util/interrupt');\n\nmodule.exports = blockquote;\n\nvar C_NEWLINE = '\\n';\nvar C_TAB = '\\t';\nvar C_SPACE = ' ';\nvar C_GT = '>';\n\n/* Tokenise a blockquote. */\nfunction blockquote(eat, value, silent) {\n  var self = this;\n  var offsets = self.offset;\n  var tokenizers = self.blockTokenizers;\n  var interruptors = self.interruptBlockquote;\n  var now = eat.now();\n  var currentLine = now.line;\n  var length = value.length;\n  var values = [];\n  var contents = [];\n  var indents = [];\n  var add;\n  var index = 0;\n  var character;\n  var rest;\n  var nextIndex;\n  var content;\n  var line;\n  var startIndex;\n  var prefixed;\n  var exit;\n\n  while (index < length) {\n    character = value.charAt(index);\n\n    if (character !== C_SPACE && character !== C_TAB) {\n      break;\n    }\n\n    index++;\n  }\n\n  if (value.charAt(index) !== C_GT) {\n    return;\n  }\n\n  if (silent) {\n    return true;\n  }\n\n  index = 0;\n\n  while (index < length) {\n    nextIndex = value.indexOf(C_NEWLINE, index);\n    startIndex = index;\n    prefixed = false;\n\n    if (nextIndex === -1) {\n      nextIndex = length;\n    }\n\n    while (index < length) {\n      character = value.charAt(index);\n\n      if (character !== C_SPACE && character !== C_TAB) {\n        break;\n      }\n\n      index++;\n    }\n\n    if (value.charAt(index) === C_GT) {\n      index++;\n      prefixed = true;\n\n      if (value.charAt(index) === C_SPACE) {\n        index++;\n      }\n    } else {\n      index = startIndex;\n    }\n\n    content = value.slice(index, nextIndex);\n\n    if (!prefixed && !trim(content)) {\n      index = startIndex;\n      break;\n    }\n\n    if (!prefixed) {\n      rest = value.slice(index);\n\n      /* Check if the following code contains a possible\n       * block. */\n      if (interrupt(interruptors, tokenizers, self, [eat, rest, true])) {\n        break;\n      }\n    }\n\n    line = startIndex === index ? content : value.slice(startIndex, nextIndex);\n\n    indents.push(index - startIndex);\n    values.push(line);\n    contents.push(content);\n\n    index = nextIndex + 1;\n  }\n\n  index = -1;\n  length = indents.length;\n  add = eat(values.join(C_NEWLINE));\n\n  while (++index < length) {\n    offsets[currentLine] = (offsets[currentLine] || 0) + indents[index];\n    currentLine++;\n  }\n\n  exit = self.enterBlock();\n  contents = self.tokenizeBlock(contents.join(C_NEWLINE), now);\n  exit();\n\n  return add({\n    type: 'blockquote',\n    children: contents\n  });\n}\n","'use strict';\n\nmodule.exports = atxHeading;\n\nvar C_NEWLINE = '\\n';\nvar C_TAB = '\\t';\nvar C_SPACE = ' ';\nvar C_HASH = '#';\n\nvar MAX_ATX_COUNT = 6;\n\nfunction atxHeading(eat, value, silent) {\n  var self = this;\n  var settings = self.options;\n  var length = value.length + 1;\n  var index = -1;\n  var now = eat.now();\n  var subvalue = '';\n  var content = '';\n  var character;\n  var queue;\n  var depth;\n\n  /* Eat initial spacing. */\n  while (++index < length) {\n    character = value.charAt(index);\n\n    if (character !== C_SPACE && character !== C_TAB) {\n      index--;\n      break;\n    }\n\n    subvalue += character;\n  }\n\n  /* Eat hashes. */\n  depth = 0;\n\n  while (++index <= length) {\n    character = value.charAt(index);\n\n    if (character !== C_HASH) {\n      index--;\n      break;\n    }\n\n    subvalue += character;\n    depth++;\n  }\n\n  if (depth > MAX_ATX_COUNT) {\n    return;\n  }\n\n  if (\n    !depth ||\n    (!settings.pedantic && value.charAt(index + 1) === C_HASH)\n  ) {\n    return;\n  }\n\n  length = value.length + 1;\n\n  /* Eat intermediate white-space. */\n  queue = '';\n\n  while (++index < length) {\n    character = value.charAt(index);\n\n    if (character !== C_SPACE && character !== C_TAB) {\n      index--;\n      break;\n    }\n\n    queue += character;\n  }\n\n  /* Exit when not in pedantic mode without spacing. */\n  if (\n    !settings.pedantic &&\n    queue.length === 0 &&\n    character &&\n    character !== C_NEWLINE\n  ) {\n    return;\n  }\n\n  if (silent) {\n    return true;\n  }\n\n  /* Eat content. */\n  subvalue += queue;\n  queue = '';\n  content = '';\n\n  while (++index < length) {\n    character = value.charAt(index);\n\n    if (!character || character === C_NEWLINE) {\n      break;\n    }\n\n    if (\n      character !== C_SPACE &&\n      character !== C_TAB &&\n      character !== C_HASH\n    ) {\n      content += queue + character;\n      queue = '';\n      continue;\n    }\n\n    while (character === C_SPACE || character === C_TAB) {\n      queue += character;\n      character = value.charAt(++index);\n    }\n\n    while (character === C_HASH) {\n      queue += character;\n      character = value.charAt(++index);\n    }\n\n    while (character === C_SPACE || character === C_TAB) {\n      queue += character;\n      character = value.charAt(++index);\n    }\n\n    index--;\n  }\n\n  now.column += subvalue.length;\n  now.offset += subvalue.length;\n  subvalue += content + queue;\n\n  return eat(subvalue)({\n    type: 'heading',\n    depth: depth,\n    children: self.tokenizeInline(content, now)\n  });\n}\n","'use strict';\n\nmodule.exports = thematicBreak;\n\nvar C_NEWLINE = '\\n';\nvar C_TAB = '\\t';\nvar C_SPACE = ' ';\nvar C_ASTERISK = '*';\nvar C_UNDERSCORE = '_';\nvar C_DASH = '-';\n\nvar THEMATIC_BREAK_MARKER_COUNT = 3;\n\nfunction thematicBreak(eat, value, silent) {\n  var index = -1;\n  var length = value.length + 1;\n  var subvalue = '';\n  var character;\n  var marker;\n  var markerCount;\n  var queue;\n\n  while (++index < length) {\n    character = value.charAt(index);\n\n    if (character !== C_TAB && character !== C_SPACE) {\n      break;\n    }\n\n    subvalue += character;\n  }\n\n  if (\n    character !== C_ASTERISK &&\n    character !== C_DASH &&\n    character !== C_UNDERSCORE\n  ) {\n    return;\n  }\n\n  marker = character;\n  subvalue += character;\n  markerCount = 1;\n  queue = '';\n\n  while (++index < length) {\n    character = value.charAt(index);\n\n    if (character === marker) {\n      markerCount++;\n      subvalue += queue + marker;\n      queue = '';\n    } else if (character === C_SPACE) {\n      queue += character;\n    } else if (\n      markerCount >= THEMATIC_BREAK_MARKER_COUNT &&\n      (!character || character === C_NEWLINE)\n    ) {\n      subvalue += queue;\n\n      if (silent) {\n        return true;\n      }\n\n      return eat(subvalue)({type: 'thematicBreak'});\n    } else {\n      return;\n    }\n  }\n}\n","'use strict';\n\n/* eslint-disable max-params */\n\nvar trim = require('trim');\nvar repeat = require('repeat-string');\nvar decimal = require('is-decimal');\nvar getIndent = require('../util/get-indentation');\nvar removeIndent = require('../util/remove-indentation');\nvar interrupt = require('../util/interrupt');\n\nmodule.exports = list;\n\nvar C_ASTERISK = '*';\nvar C_UNDERSCORE = '_';\nvar C_PLUS = '+';\nvar C_DASH = '-';\nvar C_DOT = '.';\nvar C_SPACE = ' ';\nvar C_NEWLINE = '\\n';\nvar C_TAB = '\\t';\nvar C_PAREN_CLOSE = ')';\nvar C_X_LOWER = 'x';\n\nvar TAB_SIZE = 4;\nvar EXPRESSION_LOOSE_LIST_ITEM = /\\n\\n(?!\\s*$)/;\nvar EXPRESSION_TASK_ITEM = /^\\[([ \\t]|x|X)][ \\t]/;\nvar EXPRESSION_BULLET = /^([ \\t]*)([*+-]|\\d+[.)])( {1,4}(?! )| |\\t|$|(?=\\n))([^\\n]*)/;\nvar EXPRESSION_PEDANTIC_BULLET = /^([ \\t]*)([*+-]|\\d+[.)])([ \\t]+)/;\nvar EXPRESSION_INITIAL_INDENT = /^( {1,4}|\\t)?/gm;\n\n/* Map of characters which can be used to mark\n * list-items. */\nvar LIST_UNORDERED_MARKERS = {};\n\nLIST_UNORDERED_MARKERS[C_ASTERISK] = true;\nLIST_UNORDERED_MARKERS[C_PLUS] = true;\nLIST_UNORDERED_MARKERS[C_DASH] = true;\n\n/* Map of characters which can be used to mark\n * list-items after a digit. */\nvar LIST_ORDERED_MARKERS = {};\n\nLIST_ORDERED_MARKERS[C_DOT] = true;\n\n/* Map of characters which can be used to mark\n * list-items after a digit. */\nvar LIST_ORDERED_COMMONMARK_MARKERS = {};\n\nLIST_ORDERED_COMMONMARK_MARKERS[C_DOT] = true;\nLIST_ORDERED_COMMONMARK_MARKERS[C_PAREN_CLOSE] = true;\n\nfunction list(eat, value, silent) {\n  var self = this;\n  var commonmark = self.options.commonmark;\n  var pedantic = self.options.pedantic;\n  var tokenizers = self.blockTokenizers;\n  var interuptors = self.interruptList;\n  var markers;\n  var index = 0;\n  var length = value.length;\n  var start = null;\n  var size = 0;\n  var queue;\n  var ordered;\n  var character;\n  var marker;\n  var nextIndex;\n  var startIndex;\n  var prefixed;\n  var currentMarker;\n  var content;\n  var line;\n  var prevEmpty;\n  var empty;\n  var items;\n  var allLines;\n  var emptyLines;\n  var item;\n  var enterTop;\n  var exitBlockquote;\n  var isLoose;\n  var node;\n  var now;\n  var end;\n  var indented;\n\n  while (index < length) {\n    character = value.charAt(index);\n\n    if (character === C_TAB) {\n      size += TAB_SIZE - (size % TAB_SIZE);\n    } else if (character === C_SPACE) {\n      size++;\n    } else {\n      break;\n    }\n\n    index++;\n  }\n\n  if (size >= TAB_SIZE) {\n    return;\n  }\n\n  character = value.charAt(index);\n\n  markers = commonmark ?\n    LIST_ORDERED_COMMONMARK_MARKERS :\n    LIST_ORDERED_MARKERS;\n\n  if (LIST_UNORDERED_MARKERS[character] === true) {\n    marker = character;\n    ordered = false;\n  } else {\n    ordered = true;\n    queue = '';\n\n    while (index < length) {\n      character = value.charAt(index);\n\n      if (!decimal(character)) {\n        break;\n      }\n\n      queue += character;\n      index++;\n    }\n\n    character = value.charAt(index);\n\n    if (!queue || markers[character] !== true) {\n      return;\n    }\n\n    start = parseInt(queue, 10);\n    marker = character;\n  }\n\n  character = value.charAt(++index);\n\n  if (character !== C_SPACE && character !== C_TAB) {\n    return;\n  }\n\n  if (silent) {\n    return true;\n  }\n\n  index = 0;\n  items = [];\n  allLines = [];\n  emptyLines = [];\n\n  while (index < length) {\n    nextIndex = value.indexOf(C_NEWLINE, index);\n    startIndex = index;\n    prefixed = false;\n    indented = false;\n\n    if (nextIndex === -1) {\n      nextIndex = length;\n    }\n\n    end = index + TAB_SIZE;\n    size = 0;\n\n    while (index < length) {\n      character = value.charAt(index);\n\n      if (character === C_TAB) {\n        size += TAB_SIZE - (size % TAB_SIZE);\n      } else if (character === C_SPACE) {\n        size++;\n      } else {\n        break;\n      }\n\n      index++;\n    }\n\n    if (size >= TAB_SIZE) {\n      indented = true;\n    }\n\n    if (item && size >= item.indent) {\n      indented = true;\n    }\n\n    character = value.charAt(index);\n    currentMarker = null;\n\n    if (!indented) {\n      if (LIST_UNORDERED_MARKERS[character] === true) {\n        currentMarker = character;\n        index++;\n        size++;\n      } else {\n        queue = '';\n\n        while (index < length) {\n          character = value.charAt(index);\n\n          if (!decimal(character)) {\n            break;\n          }\n\n          queue += character;\n          index++;\n        }\n\n        character = value.charAt(index);\n        index++;\n\n        if (queue && markers[character] === true) {\n          currentMarker = character;\n          size += queue.length + 1;\n        }\n      }\n\n      if (currentMarker) {\n        character = value.charAt(index);\n\n        if (character === C_TAB) {\n          size += TAB_SIZE - (size % TAB_SIZE);\n          index++;\n        } else if (character === C_SPACE) {\n          end = index + TAB_SIZE;\n\n          while (index < end) {\n            if (value.charAt(index) !== C_SPACE) {\n              break;\n            }\n\n            index++;\n            size++;\n          }\n\n          if (index === end && value.charAt(index) === C_SPACE) {\n            index -= TAB_SIZE - 1;\n            size -= TAB_SIZE - 1;\n          }\n        } else if (character !== C_NEWLINE && character !== '') {\n          currentMarker = null;\n        }\n      }\n    }\n\n    if (currentMarker) {\n      if (!pedantic && marker !== currentMarker) {\n        break;\n      }\n\n      prefixed = true;\n    } else {\n      if (!commonmark && !indented && value.charAt(startIndex) === C_SPACE) {\n        indented = true;\n      } else if (commonmark && item) {\n        indented = size >= item.indent || size > TAB_SIZE;\n      }\n\n      prefixed = false;\n      index = startIndex;\n    }\n\n    line = value.slice(startIndex, nextIndex);\n    content = startIndex === index ? line : value.slice(index, nextIndex);\n\n    if (\n      currentMarker === C_ASTERISK ||\n      currentMarker === C_UNDERSCORE ||\n      currentMarker === C_DASH\n    ) {\n      if (tokenizers.thematicBreak.call(self, eat, line, true)) {\n        break;\n      }\n    }\n\n    prevEmpty = empty;\n    empty = !trim(content).length;\n\n    if (indented && item) {\n      item.value = item.value.concat(emptyLines, line);\n      allLines = allLines.concat(emptyLines, line);\n      emptyLines = [];\n    } else if (prefixed) {\n      if (emptyLines.length !== 0) {\n        item.value.push('');\n        item.trail = emptyLines.concat();\n      }\n\n      item = {\n        value: [line],\n        indent: size,\n        trail: []\n      };\n\n      items.push(item);\n      allLines = allLines.concat(emptyLines, line);\n      emptyLines = [];\n    } else if (empty) {\n      if (prevEmpty) {\n        break;\n      }\n\n      emptyLines.push(line);\n    } else {\n      if (prevEmpty) {\n        break;\n      }\n\n      if (interrupt(interuptors, tokenizers, self, [eat, line, true])) {\n        break;\n      }\n\n      item.value = item.value.concat(emptyLines, line);\n      allLines = allLines.concat(emptyLines, line);\n      emptyLines = [];\n    }\n\n    index = nextIndex + 1;\n  }\n\n  node = eat(allLines.join(C_NEWLINE)).reset({\n    type: 'list',\n    ordered: ordered,\n    start: start,\n    loose: null,\n    children: []\n  });\n\n  enterTop = self.enterList();\n  exitBlockquote = self.enterBlock();\n  isLoose = false;\n  index = -1;\n  length = items.length;\n\n  while (++index < length) {\n    item = items[index].value.join(C_NEWLINE);\n    now = eat.now();\n\n    item = eat(item)(listItem(self, item, now), node);\n\n    if (item.loose) {\n      isLoose = true;\n    }\n\n    item = items[index].trail.join(C_NEWLINE);\n\n    if (index !== length - 1) {\n      item += C_NEWLINE;\n    }\n\n    eat(item);\n  }\n\n  enterTop();\n  exitBlockquote();\n\n  node.loose = isLoose;\n\n  return node;\n}\n\nfunction listItem(ctx, value, position) {\n  var offsets = ctx.offset;\n  var fn = ctx.options.pedantic ? pedanticListItem : normalListItem;\n  var checked = null;\n  var task;\n  var indent;\n\n  value = fn.apply(null, arguments);\n\n  if (ctx.options.gfm) {\n    task = value.match(EXPRESSION_TASK_ITEM);\n\n    if (task) {\n      indent = task[0].length;\n      checked = task[1].toLowerCase() === C_X_LOWER;\n      offsets[position.line] += indent;\n      value = value.slice(indent);\n    }\n  }\n\n  return {\n    type: 'listItem',\n    loose: EXPRESSION_LOOSE_LIST_ITEM.test(value) ||\n      value.charAt(value.length - 1) === C_NEWLINE,\n    checked: checked,\n    children: ctx.tokenizeBlock(value, position)\n  };\n}\n\n/* Create a list-item using overly simple mechanics. */\nfunction pedanticListItem(ctx, value, position) {\n  var offsets = ctx.offset;\n  var line = position.line;\n\n  /* Remove the list-item’s bullet. */\n  value = value.replace(EXPRESSION_PEDANTIC_BULLET, replacer);\n\n  /* The initial line was also matched by the below, so\n   * we reset the `line`. */\n  line = position.line;\n\n  return value.replace(EXPRESSION_INITIAL_INDENT, replacer);\n\n  /* A simple replacer which removed all matches,\n   * and adds their length to `offset`. */\n  function replacer($0) {\n    offsets[line] = (offsets[line] || 0) + $0.length;\n    line++;\n\n    return '';\n  }\n}\n\n/* Create a list-item using sane mechanics. */\nfunction normalListItem(ctx, value, position) {\n  var offsets = ctx.offset;\n  var line = position.line;\n  var max;\n  var bullet;\n  var rest;\n  var lines;\n  var trimmedLines;\n  var index;\n  var length;\n\n  /* Remove the list-item’s bullet. */\n  value = value.replace(EXPRESSION_BULLET, replacer);\n\n  lines = value.split(C_NEWLINE);\n\n  trimmedLines = removeIndent(value, getIndent(max).indent).split(C_NEWLINE);\n\n  /* We replaced the initial bullet with something\n   * else above, which was used to trick\n   * `removeIndentation` into removing some more\n   * characters when possible.  However, that could\n   * result in the initial line to be stripped more\n   * than it should be. */\n  trimmedLines[0] = rest;\n\n  offsets[line] = (offsets[line] || 0) + bullet.length;\n  line++;\n\n  index = 0;\n  length = lines.length;\n\n  while (++index < length) {\n    offsets[line] = (offsets[line] || 0) +\n      lines[index].length - trimmedLines[index].length;\n    line++;\n  }\n\n  return trimmedLines.join(C_NEWLINE);\n\n  function replacer($0, $1, $2, $3, $4) {\n    bullet = $1 + $2 + $3;\n    rest = $4;\n\n    /* Make sure that the first nine numbered list items\n     * can indent with an extra space.  That is, when\n     * the bullet did not receive an extra final space. */\n    if (Number($2) < 10 && bullet.length % 2 === 1) {\n      $2 = C_SPACE + $2;\n    }\n\n    max = $1 + repeat(C_SPACE, $2.length) + $3;\n\n    return max + rest;\n  }\n}\n","'use strict';\n\nvar trim = require('trim');\nvar repeat = require('repeat-string');\nvar getIndent = require('./get-indentation');\n\nmodule.exports = indentation;\n\nvar C_SPACE = ' ';\nvar C_NEWLINE = '\\n';\nvar C_TAB = '\\t';\n\n/* Remove the minimum indent from every line in `value`.\n * Supports both tab, spaced, and mixed indentation (as\n * well as possible). */\nfunction indentation(value, maximum) {\n  var values = value.split(C_NEWLINE);\n  var position = values.length + 1;\n  var minIndent = Infinity;\n  var matrix = [];\n  var index;\n  var indentation;\n  var stops;\n  var padding;\n\n  values.unshift(repeat(C_SPACE, maximum) + '!');\n\n  while (position--) {\n    indentation = getIndent(values[position]);\n\n    matrix[position] = indentation.stops;\n\n    if (trim(values[position]).length === 0) {\n      continue;\n    }\n\n    if (indentation.indent) {\n      if (indentation.indent > 0 && indentation.indent < minIndent) {\n        minIndent = indentation.indent;\n      }\n    } else {\n      minIndent = Infinity;\n\n      break;\n    }\n  }\n\n  if (minIndent !== Infinity) {\n    position = values.length;\n\n    while (position--) {\n      stops = matrix[position];\n      index = minIndent;\n\n      while (index && !(index in stops)) {\n        index--;\n      }\n\n      if (\n        trim(values[position]).length !== 0 &&\n        minIndent &&\n        index !== minIndent\n      ) {\n        padding = C_TAB;\n      } else {\n        padding = '';\n      }\n\n      values[position] = padding + values[position].slice(\n        index in stops ? stops[index] + 1 : 0\n      );\n    }\n  }\n\n  values.shift();\n\n  return values.join(C_NEWLINE);\n}\n","'use strict';\n\nmodule.exports = setextHeading;\n\nvar C_NEWLINE = '\\n';\nvar C_TAB = '\\t';\nvar C_SPACE = ' ';\nvar C_EQUALS = '=';\nvar C_DASH = '-';\n\nvar MAX_HEADING_INDENT = 3;\n\n/* Map of characters which can be used to mark setext\n * headers, mapping to their corresponding depth. */\nvar SETEXT_MARKERS = {};\n\nSETEXT_MARKERS[C_EQUALS] = 1;\nSETEXT_MARKERS[C_DASH] = 2;\n\nfunction setextHeading(eat, value, silent) {\n  var self = this;\n  var now = eat.now();\n  var length = value.length;\n  var index = -1;\n  var subvalue = '';\n  var content;\n  var queue;\n  var character;\n  var marker;\n  var depth;\n\n  /* Eat initial indentation. */\n  while (++index < length) {\n    character = value.charAt(index);\n\n    if (character !== C_SPACE || index >= MAX_HEADING_INDENT) {\n      index--;\n      break;\n    }\n\n    subvalue += character;\n  }\n\n  /* Eat content. */\n  content = '';\n  queue = '';\n\n  while (++index < length) {\n    character = value.charAt(index);\n\n    if (character === C_NEWLINE) {\n      index--;\n      break;\n    }\n\n    if (character === C_SPACE || character === C_TAB) {\n      queue += character;\n    } else {\n      content += queue + character;\n      queue = '';\n    }\n  }\n\n  now.column += subvalue.length;\n  now.offset += subvalue.length;\n  subvalue += content + queue;\n\n  /* Ensure the content is followed by a newline and a\n   * valid marker. */\n  character = value.charAt(++index);\n  marker = value.charAt(++index);\n\n  if (character !== C_NEWLINE || !SETEXT_MARKERS[marker]) {\n    return;\n  }\n\n  subvalue += character;\n\n  /* Eat Setext-line. */\n  queue = marker;\n  depth = SETEXT_MARKERS[marker];\n\n  while (++index < length) {\n    character = value.charAt(index);\n\n    if (character !== marker) {\n      if (character !== C_NEWLINE) {\n        return;\n      }\n\n      index--;\n      break;\n    }\n\n    queue += character;\n  }\n\n  if (silent) {\n    return true;\n  }\n\n  return eat(subvalue + queue)({\n    type: 'heading',\n    depth: depth,\n    children: self.tokenizeInline(content, now)\n  });\n}\n","'use strict';\n\nvar openCloseTag = require('../util/html').openCloseTag;\n\nmodule.exports = blockHTML;\n\nvar C_TAB = '\\t';\nvar C_SPACE = ' ';\nvar C_NEWLINE = '\\n';\nvar C_LT = '<';\n\nfunction blockHTML(eat, value, silent) {\n  var self = this;\n  var blocks = self.options.blocks;\n  var length = value.length;\n  var index = 0;\n  var next;\n  var line;\n  var offset;\n  var character;\n  var count;\n  var sequence;\n  var subvalue;\n\n  var sequences = [\n    [/^<(script|pre|style)(?=(\\s|>|$))/i, /<\\/(script|pre|style)>/i, true],\n    [/^<!--/, /-->/, true],\n    [/^<\\?/, /\\?>/, true],\n    [/^<![A-Za-z]/, />/, true],\n    [/^<!\\[CDATA\\[/, /\\]\\]>/, true],\n    [new RegExp('^</?(' + blocks.join('|') + ')(?=(\\\\s|/?>|$))', 'i'), /^$/, true],\n    [new RegExp(openCloseTag.source + '\\\\s*$'), /^$/, false]\n  ];\n\n  /* Eat initial spacing. */\n  while (index < length) {\n    character = value.charAt(index);\n\n    if (character !== C_TAB && character !== C_SPACE) {\n      break;\n    }\n\n    index++;\n  }\n\n  if (value.charAt(index) !== C_LT) {\n    return;\n  }\n\n  next = value.indexOf(C_NEWLINE, index + 1);\n  next = next === -1 ? length : next;\n  line = value.slice(index, next);\n  offset = -1;\n  count = sequences.length;\n\n  while (++offset < count) {\n    if (sequences[offset][0].test(line)) {\n      sequence = sequences[offset];\n      break;\n    }\n  }\n\n  if (!sequence) {\n    return;\n  }\n\n  if (silent) {\n    return sequence[2];\n  }\n\n  index = next;\n\n  if (!sequence[1].test(line)) {\n    while (index < length) {\n      next = value.indexOf(C_NEWLINE, index + 1);\n      next = next === -1 ? length : next;\n      line = value.slice(index + 1, next);\n\n      if (sequence[1].test(line)) {\n        if (line) {\n          index = next;\n        }\n\n        break;\n      }\n\n      index = next;\n    }\n  }\n\n  subvalue = value.slice(0, index);\n\n  return eat(subvalue)({type: 'html', value: subvalue});\n}\n","'use strict';\n\nvar whitespace = require('is-whitespace-character');\nvar normalize = require('../util/normalize');\n\nmodule.exports = footnoteDefinition;\nfootnoteDefinition.notInList = true;\nfootnoteDefinition.notInBlock = true;\n\nvar C_BACKSLASH = '\\\\';\nvar C_NEWLINE = '\\n';\nvar C_TAB = '\\t';\nvar C_SPACE = ' ';\nvar C_BRACKET_OPEN = '[';\nvar C_BRACKET_CLOSE = ']';\nvar C_CARET = '^';\nvar C_COLON = ':';\n\nvar EXPRESSION_INITIAL_TAB = /^( {4}|\\t)?/gm;\n\nfunction footnoteDefinition(eat, value, silent) {\n  var self = this;\n  var offsets = self.offset;\n  var index;\n  var length;\n  var subvalue;\n  var now;\n  var currentLine;\n  var content;\n  var queue;\n  var subqueue;\n  var character;\n  var identifier;\n  var add;\n  var exit;\n\n  if (!self.options.footnotes) {\n    return;\n  }\n\n  index = 0;\n  length = value.length;\n  subvalue = '';\n  now = eat.now();\n  currentLine = now.line;\n\n  while (index < length) {\n    character = value.charAt(index);\n\n    if (!whitespace(character)) {\n      break;\n    }\n\n    subvalue += character;\n    index++;\n  }\n\n  if (\n    value.charAt(index) !== C_BRACKET_OPEN ||\n    value.charAt(index + 1) !== C_CARET\n  ) {\n    return;\n  }\n\n  subvalue += C_BRACKET_OPEN + C_CARET;\n  index = subvalue.length;\n  queue = '';\n\n  while (index < length) {\n    character = value.charAt(index);\n\n    if (character === C_BRACKET_CLOSE) {\n      break;\n    } else if (character === C_BACKSLASH) {\n      queue += character;\n      index++;\n      character = value.charAt(index);\n    }\n\n    queue += character;\n    index++;\n  }\n\n  if (\n    !queue ||\n    value.charAt(index) !== C_BRACKET_CLOSE ||\n    value.charAt(index + 1) !== C_COLON\n  ) {\n    return;\n  }\n\n  if (silent) {\n    return true;\n  }\n\n  identifier = normalize(queue);\n  subvalue += queue + C_BRACKET_CLOSE + C_COLON;\n  index = subvalue.length;\n\n  while (index < length) {\n    character = value.charAt(index);\n\n    if (character !== C_TAB && character !== C_SPACE) {\n      break;\n    }\n\n    subvalue += character;\n    index++;\n  }\n\n  now.column += subvalue.length;\n  now.offset += subvalue.length;\n  queue = '';\n  content = '';\n  subqueue = '';\n\n  while (index < length) {\n    character = value.charAt(index);\n\n    if (character === C_NEWLINE) {\n      subqueue = character;\n      index++;\n\n      while (index < length) {\n        character = value.charAt(index);\n\n        if (character !== C_NEWLINE) {\n          break;\n        }\n\n        subqueue += character;\n        index++;\n      }\n\n      queue += subqueue;\n      subqueue = '';\n\n      while (index < length) {\n        character = value.charAt(index);\n\n        if (character !== C_SPACE) {\n          break;\n        }\n\n        subqueue += character;\n        index++;\n      }\n\n      if (subqueue.length === 0) {\n        break;\n      }\n\n      queue += subqueue;\n    }\n\n    if (queue) {\n      content += queue;\n      queue = '';\n    }\n\n    content += character;\n    index++;\n  }\n\n  subvalue += content;\n\n  content = content.replace(EXPRESSION_INITIAL_TAB, function (line) {\n    offsets[currentLine] = (offsets[currentLine] || 0) + line.length;\n    currentLine++;\n\n    return '';\n  });\n\n  add = eat(subvalue);\n\n  exit = self.enterBlock();\n  content = self.tokenizeBlock(content, now);\n  exit();\n\n  return add({\n    type: 'footnoteDefinition',\n    identifier: identifier,\n    children: content\n  });\n}\n","'use strict'\n\nmodule.exports = collapse\n\n// `collapse(' \\t\\nbar \\nbaz\\t') // ' bar baz '`\nfunction collapse(value) {\n  return String(value).replace(/\\s+/g, ' ')\n}\n","'use strict';\n\nvar whitespace = require('is-whitespace-character');\nvar normalize = require('../util/normalize');\n\nmodule.exports = definition;\ndefinition.notInList = true;\ndefinition.notInBlock = true;\n\nvar C_DOUBLE_QUOTE = '\"';\nvar C_SINGLE_QUOTE = '\\'';\nvar C_BACKSLASH = '\\\\';\nvar C_NEWLINE = '\\n';\nvar C_TAB = '\\t';\nvar C_SPACE = ' ';\nvar C_BRACKET_OPEN = '[';\nvar C_BRACKET_CLOSE = ']';\nvar C_PAREN_OPEN = '(';\nvar C_PAREN_CLOSE = ')';\nvar C_COLON = ':';\nvar C_LT = '<';\nvar C_GT = '>';\n\nfunction definition(eat, value, silent) {\n  var self = this;\n  var commonmark = self.options.commonmark;\n  var index = 0;\n  var length = value.length;\n  var subvalue = '';\n  var beforeURL;\n  var beforeTitle;\n  var queue;\n  var character;\n  var test;\n  var identifier;\n  var url;\n  var title;\n\n  while (index < length) {\n    character = value.charAt(index);\n\n    if (character !== C_SPACE && character !== C_TAB) {\n      break;\n    }\n\n    subvalue += character;\n    index++;\n  }\n\n  character = value.charAt(index);\n\n  if (character !== C_BRACKET_OPEN) {\n    return;\n  }\n\n  index++;\n  subvalue += character;\n  queue = '';\n\n  while (index < length) {\n    character = value.charAt(index);\n\n    if (character === C_BRACKET_CLOSE) {\n      break;\n    } else if (character === C_BACKSLASH) {\n      queue += character;\n      index++;\n      character = value.charAt(index);\n    }\n\n    queue += character;\n    index++;\n  }\n\n  if (\n    !queue ||\n    value.charAt(index) !== C_BRACKET_CLOSE ||\n    value.charAt(index + 1) !== C_COLON\n  ) {\n    return;\n  }\n\n  identifier = queue;\n  subvalue += queue + C_BRACKET_CLOSE + C_COLON;\n  index = subvalue.length;\n  queue = '';\n\n  while (index < length) {\n    character = value.charAt(index);\n\n    if (\n      character !== C_TAB &&\n      character !== C_SPACE &&\n      character !== C_NEWLINE\n    ) {\n      break;\n    }\n\n    subvalue += character;\n    index++;\n  }\n\n  character = value.charAt(index);\n  queue = '';\n  beforeURL = subvalue;\n\n  if (character === C_LT) {\n    index++;\n\n    while (index < length) {\n      character = value.charAt(index);\n\n      if (!isEnclosedURLCharacter(character)) {\n        break;\n      }\n\n      queue += character;\n      index++;\n    }\n\n    character = value.charAt(index);\n\n    if (character === isEnclosedURLCharacter.delimiter) {\n      subvalue += C_LT + queue + character;\n      index++;\n    } else {\n      if (commonmark) {\n        return;\n      }\n\n      index -= queue.length + 1;\n      queue = '';\n    }\n  }\n\n  if (!queue) {\n    while (index < length) {\n      character = value.charAt(index);\n\n      if (!isUnclosedURLCharacter(character)) {\n        break;\n      }\n\n      queue += character;\n      index++;\n    }\n\n    subvalue += queue;\n  }\n\n  if (!queue) {\n    return;\n  }\n\n  url = queue;\n  queue = '';\n\n  while (index < length) {\n    character = value.charAt(index);\n\n    if (\n      character !== C_TAB &&\n      character !== C_SPACE &&\n      character !== C_NEWLINE\n    ) {\n      break;\n    }\n\n    queue += character;\n    index++;\n  }\n\n  character = value.charAt(index);\n  test = null;\n\n  if (character === C_DOUBLE_QUOTE) {\n    test = C_DOUBLE_QUOTE;\n  } else if (character === C_SINGLE_QUOTE) {\n    test = C_SINGLE_QUOTE;\n  } else if (character === C_PAREN_OPEN) {\n    test = C_PAREN_CLOSE;\n  }\n\n  if (!test) {\n    queue = '';\n    index = subvalue.length;\n  } else if (queue) {\n    subvalue += queue + character;\n    index = subvalue.length;\n    queue = '';\n\n    while (index < length) {\n      character = value.charAt(index);\n\n      if (character === test) {\n        break;\n      }\n\n      if (character === C_NEWLINE) {\n        index++;\n        character = value.charAt(index);\n\n        if (character === C_NEWLINE || character === test) {\n          return;\n        }\n\n        queue += C_NEWLINE;\n      }\n\n      queue += character;\n      index++;\n    }\n\n    character = value.charAt(index);\n\n    if (character !== test) {\n      return;\n    }\n\n    beforeTitle = subvalue;\n    subvalue += queue + character;\n    index++;\n    title = queue;\n    queue = '';\n  } else {\n    return;\n  }\n\n  while (index < length) {\n    character = value.charAt(index);\n\n    if (character !== C_TAB && character !== C_SPACE) {\n      break;\n    }\n\n    subvalue += character;\n    index++;\n  }\n\n  character = value.charAt(index);\n\n  if (!character || character === C_NEWLINE) {\n    if (silent) {\n      return true;\n    }\n\n    beforeURL = eat(beforeURL).test().end;\n    url = self.decode.raw(self.unescape(url), beforeURL, {nonTerminated: false});\n\n    if (title) {\n      beforeTitle = eat(beforeTitle).test().end;\n      title = self.decode.raw(self.unescape(title), beforeTitle);\n    }\n\n    return eat(subvalue)({\n      type: 'definition',\n      identifier: normalize(identifier),\n      title: title || null,\n      url: url\n    });\n  }\n}\n\n/* Check if `character` can be inside an enclosed URI. */\nfunction isEnclosedURLCharacter(character) {\n  return character !== C_GT &&\n    character !== C_BRACKET_OPEN &&\n    character !== C_BRACKET_CLOSE;\n}\n\nisEnclosedURLCharacter.delimiter = C_GT;\n\n/* Check if `character` can be inside an unclosed URI. */\nfunction isUnclosedURLCharacter(character) {\n  return character !== C_BRACKET_OPEN &&\n    character !== C_BRACKET_CLOSE &&\n    !whitespace(character);\n}\n","'use strict';\n\nvar whitespace = require('is-whitespace-character');\n\nmodule.exports = table;\n\nvar C_BACKSLASH = '\\\\';\nvar C_TICK = '`';\nvar C_DASH = '-';\nvar C_PIPE = '|';\nvar C_COLON = ':';\nvar C_SPACE = ' ';\nvar C_NEWLINE = '\\n';\nvar C_TAB = '\\t';\n\nvar MIN_TABLE_COLUMNS = 1;\nvar MIN_TABLE_ROWS = 2;\n\nvar TABLE_ALIGN_LEFT = 'left';\nvar TABLE_ALIGN_CENTER = 'center';\nvar TABLE_ALIGN_RIGHT = 'right';\nvar TABLE_ALIGN_NONE = null;\n\nfunction table(eat, value, silent) {\n  var self = this;\n  var index;\n  var alignments;\n  var alignment;\n  var subvalue;\n  var row;\n  var length;\n  var lines;\n  var queue;\n  var character;\n  var hasDash;\n  var align;\n  var cell;\n  var preamble;\n  var count;\n  var opening;\n  var now;\n  var position;\n  var lineCount;\n  var line;\n  var rows;\n  var table;\n  var lineIndex;\n  var pipeIndex;\n  var first;\n\n  /* Exit when not in gfm-mode. */\n  if (!self.options.gfm) {\n    return;\n  }\n\n  /* Get the rows.\n   * Detecting tables soon is hard, so there are some\n   * checks for performance here, such as the minimum\n   * number of rows, and allowed characters in the\n   * alignment row. */\n  index = 0;\n  lineCount = 0;\n  length = value.length + 1;\n  lines = [];\n\n  while (index < length) {\n    lineIndex = value.indexOf(C_NEWLINE, index);\n    pipeIndex = value.indexOf(C_PIPE, index + 1);\n\n    if (lineIndex === -1) {\n      lineIndex = value.length;\n    }\n\n    if (pipeIndex === -1 || pipeIndex > lineIndex) {\n      if (lineCount < MIN_TABLE_ROWS) {\n        return;\n      }\n\n      break;\n    }\n\n    lines.push(value.slice(index, lineIndex));\n    lineCount++;\n    index = lineIndex + 1;\n  }\n\n  /* Parse the alignment row. */\n  subvalue = lines.join(C_NEWLINE);\n  alignments = lines.splice(1, 1)[0] || [];\n  index = 0;\n  length = alignments.length;\n  lineCount--;\n  alignment = false;\n  align = [];\n\n  while (index < length) {\n    character = alignments.charAt(index);\n\n    if (character === C_PIPE) {\n      hasDash = null;\n\n      if (alignment === false) {\n        if (first === false) {\n          return;\n        }\n      } else {\n        align.push(alignment);\n        alignment = false;\n      }\n\n      first = false;\n    } else if (character === C_DASH) {\n      hasDash = true;\n      alignment = alignment || TABLE_ALIGN_NONE;\n    } else if (character === C_COLON) {\n      if (alignment === TABLE_ALIGN_LEFT) {\n        alignment = TABLE_ALIGN_CENTER;\n      } else if (hasDash && alignment === TABLE_ALIGN_NONE) {\n        alignment = TABLE_ALIGN_RIGHT;\n      } else {\n        alignment = TABLE_ALIGN_LEFT;\n      }\n    } else if (!whitespace(character)) {\n      return;\n    }\n\n    index++;\n  }\n\n  if (alignment !== false) {\n    align.push(alignment);\n  }\n\n  /* Exit when without enough columns. */\n  if (align.length < MIN_TABLE_COLUMNS) {\n    return;\n  }\n\n  /* istanbul ignore if - never used (yet) */\n  if (silent) {\n    return true;\n  }\n\n  /* Parse the rows. */\n  position = -1;\n  rows = [];\n\n  table = eat(subvalue).reset({\n    type: 'table',\n    align: align,\n    children: rows\n  });\n\n  while (++position < lineCount) {\n    line = lines[position];\n    row = {type: 'tableRow', children: []};\n\n    /* Eat a newline character when this is not the\n     * first row. */\n    if (position) {\n      eat(C_NEWLINE);\n    }\n\n    /* Eat the row. */\n    eat(line).reset(row, table);\n\n    length = line.length + 1;\n    index = 0;\n    queue = '';\n    cell = '';\n    preamble = true;\n    count = null;\n    opening = null;\n\n    while (index < length) {\n      character = line.charAt(index);\n\n      if (character === C_TAB || character === C_SPACE) {\n        if (cell) {\n          queue += character;\n        } else {\n          eat(character);\n        }\n\n        index++;\n        continue;\n      }\n\n      if (character === '' || character === C_PIPE) {\n        if (preamble) {\n          eat(character);\n        } else {\n          if (character && opening) {\n            queue += character;\n            index++;\n            continue;\n          }\n\n          if ((cell || character) && !preamble) {\n            subvalue = cell;\n\n            if (queue.length > 1) {\n              if (character) {\n                subvalue += queue.slice(0, queue.length - 1);\n                queue = queue.charAt(queue.length - 1);\n              } else {\n                subvalue += queue;\n                queue = '';\n              }\n            }\n\n            now = eat.now();\n\n            eat(subvalue)({\n              type: 'tableCell',\n              children: self.tokenizeInline(cell, now)\n            }, row);\n          }\n\n          eat(queue + character);\n\n          queue = '';\n          cell = '';\n        }\n      } else {\n        if (queue) {\n          cell += queue;\n          queue = '';\n        }\n\n        cell += character;\n\n        if (character === C_BACKSLASH && index !== length - 2) {\n          cell += line.charAt(index + 1);\n          index++;\n        }\n\n        if (character === C_TICK) {\n          count = 1;\n\n          while (line.charAt(index + 1) === character) {\n            cell += character;\n            index++;\n            count++;\n          }\n\n          if (!opening) {\n            opening = count;\n          } else if (count >= opening) {\n            opening = 0;\n          }\n        }\n      }\n\n      preamble = false;\n      index++;\n    }\n\n    /* Eat the alignment row. */\n    if (!position) {\n      eat(C_NEWLINE + alignments);\n    }\n  }\n\n  return table;\n}\n","'use strict';\n\nvar trim = require('trim');\nvar decimal = require('is-decimal');\nvar trimTrailingLines = require('trim-trailing-lines');\nvar interrupt = require('../util/interrupt');\n\nmodule.exports = paragraph;\n\nvar C_NEWLINE = '\\n';\nvar C_TAB = '\\t';\nvar C_SPACE = ' ';\n\nvar TAB_SIZE = 4;\n\n/* Tokenise paragraph. */\nfunction paragraph(eat, value, silent) {\n  var self = this;\n  var settings = self.options;\n  var commonmark = settings.commonmark;\n  var gfm = settings.gfm;\n  var tokenizers = self.blockTokenizers;\n  var interruptors = self.interruptParagraph;\n  var index = value.indexOf(C_NEWLINE);\n  var length = value.length;\n  var position;\n  var subvalue;\n  var character;\n  var size;\n  var now;\n\n  while (index < length) {\n    /* Eat everything if there’s no following newline. */\n    if (index === -1) {\n      index = length;\n      break;\n    }\n\n    /* Stop if the next character is NEWLINE. */\n    if (value.charAt(index + 1) === C_NEWLINE) {\n      break;\n    }\n\n    /* In commonmark-mode, following indented lines\n     * are part of the paragraph. */\n    if (commonmark) {\n      size = 0;\n      position = index + 1;\n\n      while (position < length) {\n        character = value.charAt(position);\n\n        if (character === C_TAB) {\n          size = TAB_SIZE;\n          break;\n        } else if (character === C_SPACE) {\n          size++;\n        } else {\n          break;\n        }\n\n        position++;\n      }\n\n      if (size >= TAB_SIZE) {\n        index = value.indexOf(C_NEWLINE, index + 1);\n        continue;\n      }\n    }\n\n    subvalue = value.slice(index + 1);\n\n    /* Check if the following code contains a possible\n     * block. */\n    if (interrupt(interruptors, tokenizers, self, [eat, subvalue, true])) {\n      break;\n    }\n\n    /* Break if the following line starts a list, when\n     * already in a list, or when in commonmark, or when\n     * in gfm mode and the bullet is *not* numeric. */\n    if (\n      tokenizers.list.call(self, eat, subvalue, true) &&\n      (\n        self.inList ||\n        commonmark ||\n        (gfm && !decimal(trim.left(subvalue).charAt(0)))\n      )\n    ) {\n      break;\n    }\n\n    position = index;\n    index = value.indexOf(C_NEWLINE, index + 1);\n\n    if (index !== -1 && trim(value.slice(position, index)) === '') {\n      index = position;\n      break;\n    }\n  }\n\n  subvalue = value.slice(0, index);\n\n  if (trim(subvalue) === '') {\n    eat(subvalue);\n\n    return null;\n  }\n\n  /* istanbul ignore if - never used (yet) */\n  if (silent) {\n    return true;\n  }\n\n  now = eat.now();\n  subvalue = trimTrailingLines(subvalue);\n\n  return eat(subvalue)({\n    type: 'paragraph',\n    children: self.tokenizeInline(subvalue, now)\n  });\n}\n","'use strict';\n\nvar locate = require('../locate/escape');\n\nmodule.exports = escape;\nescape.locator = locate;\n\nfunction escape(eat, value, silent) {\n  var self = this;\n  var character;\n  var node;\n\n  if (value.charAt(0) === '\\\\') {\n    character = value.charAt(1);\n\n    if (self.escape.indexOf(character) !== -1) {\n      /* istanbul ignore if - never used (yet) */\n      if (silent) {\n        return true;\n      }\n\n      if (character === '\\n') {\n        node = {type: 'break'};\n      } else {\n        node = {\n          type: 'text',\n          value: character\n        };\n      }\n\n      return eat('\\\\' + character)(node);\n    }\n  }\n}\n","'use strict';\n\nmodule.exports = locate;\n\nfunction locate(value, fromIndex) {\n  return value.indexOf('\\\\', fromIndex);\n}\n","'use strict';\n\nvar whitespace = require('is-whitespace-character');\nvar decode = require('parse-entities');\nvar locate = require('../locate/tag');\n\nmodule.exports = autoLink;\nautoLink.locator = locate;\nautoLink.notInLink = true;\n\nvar C_LT = '<';\nvar C_GT = '>';\nvar C_AT_SIGN = '@';\nvar C_SLASH = '/';\nvar MAILTO = 'mailto:';\nvar MAILTO_LENGTH = MAILTO.length;\n\n/* Tokenise a link. */\nfunction autoLink(eat, value, silent) {\n  var self;\n  var subvalue;\n  var length;\n  var index;\n  var queue;\n  var character;\n  var hasAtCharacter;\n  var link;\n  var now;\n  var content;\n  var tokenizers;\n  var exit;\n\n  if (value.charAt(0) !== C_LT) {\n    return;\n  }\n\n  self = this;\n  subvalue = '';\n  length = value.length;\n  index = 0;\n  queue = '';\n  hasAtCharacter = false;\n  link = '';\n\n  index++;\n  subvalue = C_LT;\n\n  while (index < length) {\n    character = value.charAt(index);\n\n    if (\n      whitespace(character) ||\n      character === C_GT ||\n      character === C_AT_SIGN ||\n      (character === ':' && value.charAt(index + 1) === C_SLASH)\n    ) {\n      break;\n    }\n\n    queue += character;\n    index++;\n  }\n\n  if (!queue) {\n    return;\n  }\n\n  link += queue;\n  queue = '';\n\n  character = value.charAt(index);\n  link += character;\n  index++;\n\n  if (character === C_AT_SIGN) {\n    hasAtCharacter = true;\n  } else {\n    if (\n      character !== ':' ||\n      value.charAt(index + 1) !== C_SLASH\n    ) {\n      return;\n    }\n\n    link += C_SLASH;\n    index++;\n  }\n\n  while (index < length) {\n    character = value.charAt(index);\n\n    if (whitespace(character) || character === C_GT) {\n      break;\n    }\n\n    queue += character;\n    index++;\n  }\n\n  character = value.charAt(index);\n\n  if (!queue || character !== C_GT) {\n    return;\n  }\n\n  /* istanbul ignore if - never used (yet) */\n  if (silent) {\n    return true;\n  }\n\n  link += queue;\n  content = link;\n  subvalue += link + character;\n  now = eat.now();\n  now.column++;\n  now.offset++;\n\n  if (hasAtCharacter) {\n    if (link.slice(0, MAILTO_LENGTH).toLowerCase() === MAILTO) {\n      content = content.substr(MAILTO_LENGTH);\n      now.column += MAILTO_LENGTH;\n      now.offset += MAILTO_LENGTH;\n    } else {\n      link = MAILTO + link;\n    }\n  }\n\n  /* Temporarily remove all tokenizers except text in autolinks. */\n  tokenizers = self.inlineTokenizers;\n  self.inlineTokenizers = {text: tokenizers.text};\n\n  exit = self.enterLink();\n\n  content = self.tokenizeInline(content, now);\n\n  self.inlineTokenizers = tokenizers;\n  exit();\n\n  return eat(subvalue)({\n    type: 'link',\n    title: null,\n    url: decode(link, {nonTerminated: false}),\n    children: content\n  });\n}\n","'use strict';\n\nvar decode = require('parse-entities');\nvar whitespace = require('is-whitespace-character');\nvar locate = require('../locate/url');\n\nmodule.exports = url;\nurl.locator = locate;\nurl.notInLink = true;\n\nvar C_BRACKET_OPEN = '[';\nvar C_BRACKET_CLOSE = ']';\nvar C_PAREN_OPEN = '(';\nvar C_PAREN_CLOSE = ')';\nvar C_LT = '<';\nvar C_AT_SIGN = '@';\n\nvar HTTP_PROTOCOL = 'http://';\nvar HTTPS_PROTOCOL = 'https://';\nvar MAILTO_PROTOCOL = 'mailto:';\n\nvar PROTOCOLS = [\n  HTTP_PROTOCOL,\n  HTTPS_PROTOCOL,\n  MAILTO_PROTOCOL\n];\n\nvar PROTOCOLS_LENGTH = PROTOCOLS.length;\n\nfunction url(eat, value, silent) {\n  var self = this;\n  var subvalue;\n  var content;\n  var character;\n  var index;\n  var position;\n  var protocol;\n  var match;\n  var length;\n  var queue;\n  var parenCount;\n  var nextCharacter;\n  var exit;\n\n  if (!self.options.gfm) {\n    return;\n  }\n\n  subvalue = '';\n  index = -1;\n  length = PROTOCOLS_LENGTH;\n\n  while (++index < length) {\n    protocol = PROTOCOLS[index];\n    match = value.slice(0, protocol.length);\n\n    if (match.toLowerCase() === protocol) {\n      subvalue = match;\n      break;\n    }\n  }\n\n  if (!subvalue) {\n    return;\n  }\n\n  index = subvalue.length;\n  length = value.length;\n  queue = '';\n  parenCount = 0;\n\n  while (index < length) {\n    character = value.charAt(index);\n\n    if (whitespace(character) || character === C_LT) {\n      break;\n    }\n\n    if (\n      character === '.' ||\n      character === ',' ||\n      character === ':' ||\n      character === ';' ||\n      character === '\"' ||\n      character === '\\'' ||\n      character === ')' ||\n      character === ']'\n    ) {\n      nextCharacter = value.charAt(index + 1);\n\n      if (!nextCharacter || whitespace(nextCharacter)) {\n        break;\n      }\n    }\n\n    if (character === C_PAREN_OPEN || character === C_BRACKET_OPEN) {\n      parenCount++;\n    }\n\n    if (character === C_PAREN_CLOSE || character === C_BRACKET_CLOSE) {\n      parenCount--;\n\n      if (parenCount < 0) {\n        break;\n      }\n    }\n\n    queue += character;\n    index++;\n  }\n\n  if (!queue) {\n    return;\n  }\n\n  subvalue += queue;\n  content = subvalue;\n\n  if (protocol === MAILTO_PROTOCOL) {\n    position = queue.indexOf(C_AT_SIGN);\n\n    if (position === -1 || position === length - 1) {\n      return;\n    }\n\n    content = content.substr(MAILTO_PROTOCOL.length);\n  }\n\n  /* istanbul ignore if - never used (yet) */\n  if (silent) {\n    return true;\n  }\n\n  exit = self.enterLink();\n  content = self.tokenizeInline(content, eat.now());\n  exit();\n\n  return eat(subvalue)({\n    type: 'link',\n    title: null,\n    url: decode(subvalue, {nonTerminated: false}),\n    children: content\n  });\n}\n","'use strict';\n\nmodule.exports = locate;\n\nvar PROTOCOLS = ['https://', 'http://', 'mailto:'];\n\nfunction locate(value, fromIndex) {\n  var length = PROTOCOLS.length;\n  var index = -1;\n  var min = -1;\n  var position;\n\n  if (!this.options.gfm) {\n    return -1;\n  }\n\n  while (++index < length) {\n    position = value.indexOf(PROTOCOLS[index], fromIndex);\n\n    if (position !== -1 && (position < min || min === -1)) {\n      min = position;\n    }\n  }\n\n  return min;\n}\n","'use strict';\n\nvar alphabetical = require('is-alphabetical');\nvar locate = require('../locate/tag');\nvar tag = require('../util/html').tag;\n\nmodule.exports = inlineHTML;\ninlineHTML.locator = locate;\n\nvar EXPRESSION_HTML_LINK_OPEN = /^<a /i;\nvar EXPRESSION_HTML_LINK_CLOSE = /^<\\/a>/i;\n\nfunction inlineHTML(eat, value, silent) {\n  var self = this;\n  var length = value.length;\n  var character;\n  var subvalue;\n\n  if (value.charAt(0) !== '<' || length < 3) {\n    return;\n  }\n\n  character = value.charAt(1);\n\n  if (\n    !alphabetical(character) &&\n    character !== '?' &&\n    character !== '!' &&\n    character !== '/'\n  ) {\n    return;\n  }\n\n  subvalue = value.match(tag);\n\n  if (!subvalue) {\n    return;\n  }\n\n  /* istanbul ignore if - not used yet. */\n  if (silent) {\n    return true;\n  }\n\n  subvalue = subvalue[0];\n\n  if (!self.inLink && EXPRESSION_HTML_LINK_OPEN.test(subvalue)) {\n    self.inLink = true;\n  } else if (self.inLink && EXPRESSION_HTML_LINK_CLOSE.test(subvalue)) {\n    self.inLink = false;\n  }\n\n  return eat(subvalue)({type: 'html', value: subvalue});\n}\n","'use strict';\n\nvar whitespace = require('is-whitespace-character');\nvar locate = require('../locate/link');\n\nmodule.exports = link;\nlink.locator = locate;\n\nvar own = {}.hasOwnProperty;\n\nvar C_BACKSLASH = '\\\\';\nvar C_BRACKET_OPEN = '[';\nvar C_BRACKET_CLOSE = ']';\nvar C_PAREN_OPEN = '(';\nvar C_PAREN_CLOSE = ')';\nvar C_LT = '<';\nvar C_GT = '>';\nvar C_TICK = '`';\nvar C_DOUBLE_QUOTE = '\"';\nvar C_SINGLE_QUOTE = '\\'';\n\n/* Map of characters, which can be used to mark link\n * and image titles. */\nvar LINK_MARKERS = {};\n\nLINK_MARKERS[C_DOUBLE_QUOTE] = C_DOUBLE_QUOTE;\nLINK_MARKERS[C_SINGLE_QUOTE] = C_SINGLE_QUOTE;\n\n/* Map of characters, which can be used to mark link\n * and image titles in commonmark-mode. */\nvar COMMONMARK_LINK_MARKERS = {};\n\nCOMMONMARK_LINK_MARKERS[C_DOUBLE_QUOTE] = C_DOUBLE_QUOTE;\nCOMMONMARK_LINK_MARKERS[C_SINGLE_QUOTE] = C_SINGLE_QUOTE;\nCOMMONMARK_LINK_MARKERS[C_PAREN_OPEN] = C_PAREN_CLOSE;\n\nfunction link(eat, value, silent) {\n  var self = this;\n  var subvalue = '';\n  var index = 0;\n  var character = value.charAt(0);\n  var pedantic = self.options.pedantic;\n  var commonmark = self.options.commonmark;\n  var gfm = self.options.gfm;\n  var closed;\n  var count;\n  var opening;\n  var beforeURL;\n  var beforeTitle;\n  var subqueue;\n  var hasMarker;\n  var markers;\n  var isImage;\n  var content;\n  var marker;\n  var length;\n  var title;\n  var depth;\n  var queue;\n  var url;\n  var now;\n  var exit;\n  var node;\n\n  /* Detect whether this is an image. */\n  if (character === '!') {\n    isImage = true;\n    subvalue = character;\n    character = value.charAt(++index);\n  }\n\n  /* Eat the opening. */\n  if (character !== C_BRACKET_OPEN) {\n    return;\n  }\n\n  /* Exit when this is a link and we’re already inside\n   * a link. */\n  if (!isImage && self.inLink) {\n    return;\n  }\n\n  subvalue += character;\n  queue = '';\n  index++;\n\n  /* Eat the content. */\n  length = value.length;\n  now = eat.now();\n  depth = 0;\n\n  now.column += index;\n  now.offset += index;\n\n  while (index < length) {\n    character = value.charAt(index);\n    subqueue = character;\n\n    if (character === C_TICK) {\n      /* Inline-code in link content. */\n      count = 1;\n\n      while (value.charAt(index + 1) === C_TICK) {\n        subqueue += character;\n        index++;\n        count++;\n      }\n\n      if (!opening) {\n        opening = count;\n      } else if (count >= opening) {\n        opening = 0;\n      }\n    } else if (character === C_BACKSLASH) {\n      /* Allow brackets to be escaped. */\n      index++;\n      subqueue += value.charAt(index);\n    /* In GFM mode, brackets in code still count.\n     * In all other modes, they don’t.  This empty\n     * block prevents the next statements are\n     * entered. */\n    } else if ((!opening || gfm) && character === C_BRACKET_OPEN) {\n      depth++;\n    } else if ((!opening || gfm) && character === C_BRACKET_CLOSE) {\n      if (depth) {\n        depth--;\n      } else {\n        /* Allow white-space between content and\n         * url in GFM mode. */\n        if (!pedantic) {\n          while (index < length) {\n            character = value.charAt(index + 1);\n\n            if (!whitespace(character)) {\n              break;\n            }\n\n            subqueue += character;\n            index++;\n          }\n        }\n\n        if (value.charAt(index + 1) !== C_PAREN_OPEN) {\n          return;\n        }\n\n        subqueue += C_PAREN_OPEN;\n        closed = true;\n        index++;\n\n        break;\n      }\n    }\n\n    queue += subqueue;\n    subqueue = '';\n    index++;\n  }\n\n  /* Eat the content closing. */\n  if (!closed) {\n    return;\n  }\n\n  content = queue;\n  subvalue += queue + subqueue;\n  index++;\n\n  /* Eat white-space. */\n  while (index < length) {\n    character = value.charAt(index);\n\n    if (!whitespace(character)) {\n      break;\n    }\n\n    subvalue += character;\n    index++;\n  }\n\n  /* Eat the URL. */\n  character = value.charAt(index);\n  markers = commonmark ? COMMONMARK_LINK_MARKERS : LINK_MARKERS;\n  queue = '';\n  beforeURL = subvalue;\n\n  if (character === C_LT) {\n    index++;\n    beforeURL += C_LT;\n\n    while (index < length) {\n      character = value.charAt(index);\n\n      if (character === C_GT) {\n        break;\n      }\n\n      if (commonmark && character === '\\n') {\n        return;\n      }\n\n      queue += character;\n      index++;\n    }\n\n    if (value.charAt(index) !== C_GT) {\n      return;\n    }\n\n    subvalue += C_LT + queue + C_GT;\n    url = queue;\n    index++;\n  } else {\n    character = null;\n    subqueue = '';\n\n    while (index < length) {\n      character = value.charAt(index);\n\n      if (subqueue && own.call(markers, character)) {\n        break;\n      }\n\n      if (whitespace(character)) {\n        if (!pedantic) {\n          break;\n        }\n\n        subqueue += character;\n      } else {\n        if (character === C_PAREN_OPEN) {\n          depth++;\n        } else if (character === C_PAREN_CLOSE) {\n          if (depth === 0) {\n            break;\n          }\n\n          depth--;\n        }\n\n        queue += subqueue;\n        subqueue = '';\n\n        if (character === C_BACKSLASH) {\n          queue += C_BACKSLASH;\n          character = value.charAt(++index);\n        }\n\n        queue += character;\n      }\n\n      index++;\n    }\n\n    subvalue += queue;\n    url = queue;\n    index = subvalue.length;\n  }\n\n  /* Eat white-space. */\n  queue = '';\n\n  while (index < length) {\n    character = value.charAt(index);\n\n    if (!whitespace(character)) {\n      break;\n    }\n\n    queue += character;\n    index++;\n  }\n\n  character = value.charAt(index);\n  subvalue += queue;\n\n  /* Eat the title. */\n  if (queue && own.call(markers, character)) {\n    index++;\n    subvalue += character;\n    queue = '';\n    marker = markers[character];\n    beforeTitle = subvalue;\n\n    /* In commonmark-mode, things are pretty easy: the\n     * marker cannot occur inside the title.\n     *\n     * Non-commonmark does, however, support nested\n     * delimiters. */\n    if (commonmark) {\n      while (index < length) {\n        character = value.charAt(index);\n\n        if (character === marker) {\n          break;\n        }\n\n        if (character === C_BACKSLASH) {\n          queue += C_BACKSLASH;\n          character = value.charAt(++index);\n        }\n\n        index++;\n        queue += character;\n      }\n\n      character = value.charAt(index);\n\n      if (character !== marker) {\n        return;\n      }\n\n      title = queue;\n      subvalue += queue + character;\n      index++;\n\n      while (index < length) {\n        character = value.charAt(index);\n\n        if (!whitespace(character)) {\n          break;\n        }\n\n        subvalue += character;\n        index++;\n      }\n    } else {\n      subqueue = '';\n\n      while (index < length) {\n        character = value.charAt(index);\n\n        if (character === marker) {\n          if (hasMarker) {\n            queue += marker + subqueue;\n            subqueue = '';\n          }\n\n          hasMarker = true;\n        } else if (!hasMarker) {\n          queue += character;\n        } else if (character === C_PAREN_CLOSE) {\n          subvalue += queue + marker + subqueue;\n          title = queue;\n          break;\n        } else if (whitespace(character)) {\n          subqueue += character;\n        } else {\n          queue += marker + subqueue + character;\n          subqueue = '';\n          hasMarker = false;\n        }\n\n        index++;\n      }\n    }\n  }\n\n  if (value.charAt(index) !== C_PAREN_CLOSE) {\n    return;\n  }\n\n  /* istanbul ignore if - never used (yet) */\n  if (silent) {\n    return true;\n  }\n\n  subvalue += C_PAREN_CLOSE;\n\n  url = self.decode.raw(self.unescape(url), eat(beforeURL).test().end, {nonTerminated: false});\n\n  if (title) {\n    beforeTitle = eat(beforeTitle).test().end;\n    title = self.decode.raw(self.unescape(title), beforeTitle);\n  }\n\n  node = {\n    type: isImage ? 'image' : 'link',\n    title: title || null,\n    url: url\n  };\n\n  if (isImage) {\n    node.alt = self.decode.raw(self.unescape(content), now) || null;\n  } else {\n    exit = self.enterLink();\n    node.children = self.tokenizeInline(content, now);\n    exit();\n  }\n\n  return eat(subvalue)(node);\n}\n","'use strict';\n\nvar whitespace = require('is-whitespace-character');\nvar locate = require('../locate/link');\nvar normalize = require('../util/normalize');\n\nmodule.exports = reference;\nreference.locator = locate;\n\nvar T_LINK = 'link';\nvar T_IMAGE = 'image';\nvar T_FOOTNOTE = 'footnote';\nvar REFERENCE_TYPE_SHORTCUT = 'shortcut';\nvar REFERENCE_TYPE_COLLAPSED = 'collapsed';\nvar REFERENCE_TYPE_FULL = 'full';\nvar C_CARET = '^';\nvar C_BACKSLASH = '\\\\';\nvar C_BRACKET_OPEN = '[';\nvar C_BRACKET_CLOSE = ']';\n\nfunction reference(eat, value, silent) {\n  var self = this;\n  var character = value.charAt(0);\n  var index = 0;\n  var length = value.length;\n  var subvalue = '';\n  var intro = '';\n  var type = T_LINK;\n  var referenceType = REFERENCE_TYPE_SHORTCUT;\n  var content;\n  var identifier;\n  var now;\n  var node;\n  var exit;\n  var queue;\n  var bracketed;\n  var depth;\n\n  /* Check whether we’re eating an image. */\n  if (character === '!') {\n    type = T_IMAGE;\n    intro = character;\n    character = value.charAt(++index);\n  }\n\n  if (character !== C_BRACKET_OPEN) {\n    return;\n  }\n\n  index++;\n  intro += character;\n  queue = '';\n\n  /* Check whether we’re eating a footnote. */\n  if (self.options.footnotes && value.charAt(index) === C_CARET) {\n    /* Exit if `![^` is found, so the `!` will be seen as text after this,\n     * and we’ll enter this function again when `[^` is found. */\n    if (type === T_IMAGE) {\n      return;\n    }\n\n    intro += C_CARET;\n    index++;\n    type = T_FOOTNOTE;\n  }\n\n  /* Eat the text. */\n  depth = 0;\n\n  while (index < length) {\n    character = value.charAt(index);\n\n    if (character === C_BRACKET_OPEN) {\n      bracketed = true;\n      depth++;\n    } else if (character === C_BRACKET_CLOSE) {\n      if (!depth) {\n        break;\n      }\n\n      depth--;\n    }\n\n    if (character === C_BACKSLASH) {\n      queue += C_BACKSLASH;\n      character = value.charAt(++index);\n    }\n\n    queue += character;\n    index++;\n  }\n\n  subvalue = queue;\n  content = queue;\n  character = value.charAt(index);\n\n  if (character !== C_BRACKET_CLOSE) {\n    return;\n  }\n\n  index++;\n  subvalue += character;\n  queue = '';\n\n  while (index < length) {\n    character = value.charAt(index);\n\n    if (!whitespace(character)) {\n      break;\n    }\n\n    queue += character;\n    index++;\n  }\n\n  character = value.charAt(index);\n\n  /* Inline footnotes cannot have an identifier. */\n  if (type !== T_FOOTNOTE && character === C_BRACKET_OPEN) {\n    identifier = '';\n    queue += character;\n    index++;\n\n    while (index < length) {\n      character = value.charAt(index);\n\n      if (character === C_BRACKET_OPEN || character === C_BRACKET_CLOSE) {\n        break;\n      }\n\n      if (character === C_BACKSLASH) {\n        identifier += C_BACKSLASH;\n        character = value.charAt(++index);\n      }\n\n      identifier += character;\n      index++;\n    }\n\n    character = value.charAt(index);\n\n    if (character === C_BRACKET_CLOSE) {\n      referenceType = identifier ? REFERENCE_TYPE_FULL : REFERENCE_TYPE_COLLAPSED;\n      queue += identifier + character;\n      index++;\n    } else {\n      identifier = '';\n    }\n\n    subvalue += queue;\n    queue = '';\n  } else {\n    if (!content) {\n      return;\n    }\n\n    identifier = content;\n  }\n\n  /* Brackets cannot be inside the identifier. */\n  if (referenceType !== REFERENCE_TYPE_FULL && bracketed) {\n    return;\n  }\n\n  subvalue = intro + subvalue;\n\n  if (type === T_LINK && self.inLink) {\n    return null;\n  }\n\n  /* istanbul ignore if - never used (yet) */\n  if (silent) {\n    return true;\n  }\n\n  if (type === T_FOOTNOTE && content.indexOf(' ') !== -1) {\n    return eat(subvalue)({\n      type: 'footnote',\n      children: this.tokenizeInline(content, eat.now())\n    });\n  }\n\n  now = eat.now();\n  now.column += intro.length;\n  now.offset += intro.length;\n  identifier = referenceType === REFERENCE_TYPE_FULL ? identifier : content;\n\n  node = {\n    type: type + 'Reference',\n    identifier: normalize(identifier)\n  };\n\n  if (type === T_LINK || type === T_IMAGE) {\n    node.referenceType = referenceType;\n  }\n\n  if (type === T_LINK) {\n    exit = self.enterLink();\n    node.children = self.tokenizeInline(content, now);\n    exit();\n  } else if (type === T_IMAGE) {\n    node.alt = self.decode.raw(self.unescape(content), now) || null;\n  }\n\n  return eat(subvalue)(node);\n}\n","'use strict';\n\nvar trim = require('trim');\nvar whitespace = require('is-whitespace-character');\nvar locate = require('../locate/strong');\n\nmodule.exports = strong;\nstrong.locator = locate;\n\nvar C_ASTERISK = '*';\nvar C_UNDERSCORE = '_';\n\nfunction strong(eat, value, silent) {\n  var self = this;\n  var index = 0;\n  var character = value.charAt(index);\n  var now;\n  var pedantic;\n  var marker;\n  var queue;\n  var subvalue;\n  var length;\n  var prev;\n\n  if (\n    (character !== C_ASTERISK && character !== C_UNDERSCORE) ||\n    value.charAt(++index) !== character\n  ) {\n    return;\n  }\n\n  pedantic = self.options.pedantic;\n  marker = character;\n  subvalue = marker + marker;\n  length = value.length;\n  index++;\n  queue = '';\n  character = '';\n\n  if (pedantic && whitespace(value.charAt(index))) {\n    return;\n  }\n\n  while (index < length) {\n    prev = character;\n    character = value.charAt(index);\n\n    if (\n      character === marker &&\n      value.charAt(index + 1) === marker &&\n      (!pedantic || !whitespace(prev))\n    ) {\n      character = value.charAt(index + 2);\n\n      if (character !== marker) {\n        if (!trim(queue)) {\n          return;\n        }\n\n        /* istanbul ignore if - never used (yet) */\n        if (silent) {\n          return true;\n        }\n\n        now = eat.now();\n        now.column += 2;\n        now.offset += 2;\n\n        return eat(subvalue + queue + subvalue)({\n          type: 'strong',\n          children: self.tokenizeInline(queue, now)\n        });\n      }\n    }\n\n    if (!pedantic && character === '\\\\') {\n      queue += character;\n      character = value.charAt(++index);\n    }\n\n    queue += character;\n    index++;\n  }\n}\n","'use strict';\n\nmodule.exports = locate;\n\nfunction locate(value, fromIndex) {\n  var asterisk = value.indexOf('**', fromIndex);\n  var underscore = value.indexOf('__', fromIndex);\n\n  if (underscore === -1) {\n    return asterisk;\n  }\n\n  if (asterisk === -1) {\n    return underscore;\n  }\n\n  return underscore < asterisk ? underscore : asterisk;\n}\n","'use strict';\n\nvar trim = require('trim');\nvar word = require('is-word-character');\nvar whitespace = require('is-whitespace-character');\nvar locate = require('../locate/emphasis');\n\nmodule.exports = emphasis;\nemphasis.locator = locate;\n\nvar C_ASTERISK = '*';\nvar C_UNDERSCORE = '_';\n\nfunction emphasis(eat, value, silent) {\n  var self = this;\n  var index = 0;\n  var character = value.charAt(index);\n  var now;\n  var pedantic;\n  var marker;\n  var queue;\n  var subvalue;\n  var length;\n  var prev;\n\n  if (character !== C_ASTERISK && character !== C_UNDERSCORE) {\n    return;\n  }\n\n  pedantic = self.options.pedantic;\n  subvalue = character;\n  marker = character;\n  length = value.length;\n  index++;\n  queue = '';\n  character = '';\n\n  if (pedantic && whitespace(value.charAt(index))) {\n    return;\n  }\n\n  while (index < length) {\n    prev = character;\n    character = value.charAt(index);\n\n    if (character === marker && (!pedantic || !whitespace(prev))) {\n      character = value.charAt(++index);\n\n      if (character !== marker) {\n        if (!trim(queue) || prev === marker) {\n          return;\n        }\n\n        if (!pedantic && marker === C_UNDERSCORE && word(character)) {\n          queue += marker;\n          continue;\n        }\n\n        /* istanbul ignore if - never used (yet) */\n        if (silent) {\n          return true;\n        }\n\n        now = eat.now();\n        now.column++;\n        now.offset++;\n\n        return eat(subvalue + queue + marker)({\n          type: 'emphasis',\n          children: self.tokenizeInline(queue, now)\n        });\n      }\n\n      queue += marker;\n    }\n\n    if (!pedantic && character === '\\\\') {\n      queue += character;\n      character = value.charAt(++index);\n    }\n\n    queue += character;\n    index++;\n  }\n}\n","'use strict'\n\nmodule.exports = wordCharacter\n\nvar fromCode = String.fromCharCode\nvar re = /\\w/\n\n// Check if the given character code, or the character code at the first\n// character, is a word character.\nfunction wordCharacter(character) {\n  return re.test(\n    typeof character === 'number' ? fromCode(character) : character.charAt(0)\n  )\n}\n","'use strict';\n\nmodule.exports = locate;\n\nfunction locate(value, fromIndex) {\n  var asterisk = value.indexOf('*', fromIndex);\n  var underscore = value.indexOf('_', fromIndex);\n\n  if (underscore === -1) {\n    return asterisk;\n  }\n\n  if (asterisk === -1) {\n    return underscore;\n  }\n\n  return underscore < asterisk ? underscore : asterisk;\n}\n","'use strict';\n\nvar whitespace = require('is-whitespace-character');\nvar locate = require('../locate/delete');\n\nmodule.exports = strikethrough;\nstrikethrough.locator = locate;\n\nvar C_TILDE = '~';\nvar DOUBLE = '~~';\n\nfunction strikethrough(eat, value, silent) {\n  var self = this;\n  var character = '';\n  var previous = '';\n  var preceding = '';\n  var subvalue = '';\n  var index;\n  var length;\n  var now;\n\n  if (\n    !self.options.gfm ||\n    value.charAt(0) !== C_TILDE ||\n    value.charAt(1) !== C_TILDE ||\n    whitespace(value.charAt(2))\n  ) {\n    return;\n  }\n\n  index = 1;\n  length = value.length;\n  now = eat.now();\n  now.column += 2;\n  now.offset += 2;\n\n  while (++index < length) {\n    character = value.charAt(index);\n\n    if (\n      character === C_TILDE &&\n      previous === C_TILDE &&\n      (!preceding || !whitespace(preceding))\n    ) {\n      /* istanbul ignore if - never used (yet) */\n      if (silent) {\n        return true;\n      }\n\n      return eat(DOUBLE + subvalue + DOUBLE)({\n        type: 'delete',\n        children: self.tokenizeInline(subvalue, now)\n      });\n    }\n\n    subvalue += previous;\n    preceding = previous;\n    previous = character;\n  }\n}\n","'use strict';\n\nmodule.exports = locate;\n\nfunction locate(value, fromIndex) {\n  return value.indexOf('~~', fromIndex);\n}\n","'use strict';\n\nvar whitespace = require('is-whitespace-character');\nvar locate = require('../locate/code-inline');\n\nmodule.exports = inlineCode;\ninlineCode.locator = locate;\n\nvar C_TICK = '`';\n\n/* Tokenise inline code. */\nfunction inlineCode(eat, value, silent) {\n  var length = value.length;\n  var index = 0;\n  var queue = '';\n  var tickQueue = '';\n  var contentQueue;\n  var subqueue;\n  var count;\n  var openingCount;\n  var subvalue;\n  var character;\n  var found;\n  var next;\n\n  while (index < length) {\n    if (value.charAt(index) !== C_TICK) {\n      break;\n    }\n\n    queue += C_TICK;\n    index++;\n  }\n\n  if (!queue) {\n    return;\n  }\n\n  subvalue = queue;\n  openingCount = index;\n  queue = '';\n  next = value.charAt(index);\n  count = 0;\n\n  while (index < length) {\n    character = next;\n    next = value.charAt(index + 1);\n\n    if (character === C_TICK) {\n      count++;\n      tickQueue += character;\n    } else {\n      count = 0;\n      queue += character;\n    }\n\n    if (count && next !== C_TICK) {\n      if (count === openingCount) {\n        subvalue += queue + tickQueue;\n        found = true;\n        break;\n      }\n\n      queue += tickQueue;\n      tickQueue = '';\n    }\n\n    index++;\n  }\n\n  if (!found) {\n    if (openingCount % 2 !== 0) {\n      return;\n    }\n\n    queue = '';\n  }\n\n  /* istanbul ignore if - never used (yet) */\n  if (silent) {\n    return true;\n  }\n\n  contentQueue = '';\n  subqueue = '';\n  length = queue.length;\n  index = -1;\n\n  while (++index < length) {\n    character = queue.charAt(index);\n\n    if (whitespace(character)) {\n      subqueue += character;\n      continue;\n    }\n\n    if (subqueue) {\n      if (contentQueue) {\n        contentQueue += subqueue;\n      }\n\n      subqueue = '';\n    }\n\n    contentQueue += character;\n  }\n\n  return eat(subvalue)({\n    type: 'inlineCode',\n    value: contentQueue\n  });\n}\n","'use strict';\n\nmodule.exports = locate;\n\nfunction locate(value, fromIndex) {\n  return value.indexOf('`', fromIndex);\n}\n","'use strict';\n\nvar locate = require('../locate/break');\n\nmodule.exports = hardBreak;\nhardBreak.locator = locate;\n\nvar MIN_BREAK_LENGTH = 2;\n\nfunction hardBreak(eat, value, silent) {\n  var length = value.length;\n  var index = -1;\n  var queue = '';\n  var character;\n\n  while (++index < length) {\n    character = value.charAt(index);\n\n    if (character === '\\n') {\n      if (index < MIN_BREAK_LENGTH) {\n        return;\n      }\n\n      /* istanbul ignore if - never used (yet) */\n      if (silent) {\n        return true;\n      }\n\n      queue += character;\n\n      return eat(queue)({type: 'break'});\n    }\n\n    if (character !== ' ') {\n      return;\n    }\n\n    queue += character;\n  }\n}\n","'use strict';\n\nmodule.exports = locate;\n\nfunction locate(value, fromIndex) {\n  var index = value.indexOf('\\n', fromIndex);\n\n  while (index > fromIndex) {\n    if (value.charAt(index - 1) !== ' ') {\n      break;\n    }\n\n    index--;\n  }\n\n  return index;\n}\n","'use strict';\n\nmodule.exports = text;\n\nfunction text(eat, value, silent) {\n  var self = this;\n  var methods;\n  var tokenizers;\n  var index;\n  var length;\n  var subvalue;\n  var position;\n  var tokenizer;\n  var name;\n  var min;\n  var now;\n\n  /* istanbul ignore if - never used (yet) */\n  if (silent) {\n    return true;\n  }\n\n  methods = self.inlineMethods;\n  length = methods.length;\n  tokenizers = self.inlineTokenizers;\n  index = -1;\n  min = value.length;\n\n  while (++index < length) {\n    name = methods[index];\n\n    if (name === 'text' || !tokenizers[name]) {\n      continue;\n    }\n\n    tokenizer = tokenizers[name].locator;\n\n    if (!tokenizer) {\n      eat.file.fail('Missing locator: `' + name + '`');\n    }\n\n    position = tokenizer.call(self, value, 1);\n\n    if (position !== -1 && position < min) {\n      min = position;\n    }\n  }\n\n  subvalue = value.slice(0, min);\n  now = eat.now();\n\n  self.decode(subvalue, now, function (content, position, source) {\n    eat(source || content)({\n      type: 'text',\n      value: content\n    });\n  });\n}\n","var visitWithParents = require('unist-util-visit-parents');\n\nfunction addListMetadata() {\n  return function (ast) {\n    visitWithParents(ast, 'list', function (listNode, parents) {\n      var depth = 0, i, n;\n      for (i = 0, n = parents.length; i < n; i++) {\n        if (parents[i].type === 'list') depth += 1;\n      }\n      for (i = 0, n = listNode.children.length; i < n; i++) {\n        var child = listNode.children[i];\n        child.index = i;\n        child.ordered = listNode.ordered;\n      }\n      listNode.depth = depth;\n    });\n    return ast;\n  };\n}\n\nmodule.exports = addListMetadata;\n","'use strict'\n\n/* Expose. */\nmodule.exports = visitParents\n\n/* Visit. */\nfunction visitParents(tree, type, visitor) {\n  var stack = []\n\n  if (typeof type === 'function') {\n    visitor = type\n    type = null\n  }\n\n  one(tree)\n\n  /* Visit a single node. */\n  function one(node) {\n    var result\n\n    if (!type || node.type === type) {\n      result = visitor(node, stack.concat())\n    }\n\n    if (node.children && result !== false) {\n      return all(node.children, node)\n    }\n\n    return result\n  }\n\n  /* Visit children in `parent`. */\n  function all(children, parent) {\n    var length = children.length\n    var index = -1\n    var child\n\n    stack.push(parent)\n\n    while (++index < length) {\n      child = children[index]\n\n      if (child && one(child) === false) {\n        return false\n      }\n    }\n\n    stack.pop()\n\n    return true\n  }\n}\n","'use strict';\n\n/**\n * Naive, simple plugin to match inline nodes without attributes\n * This allows say <strong>foo</strong>, but not <strong class=\"very\">foo</strong>\n * For proper HTML support, you'll want a different plugin\n **/\nvar visit = require('unist-util-visit');\n\nvar type = 'virtualHtml';\nvar selfClosingRe = /^<(area|base|br|col|embed|hr|img|input|keygen|link|meta|param|source|track|wbr)\\s*\\/?>$/i;\nvar simpleTagRe = /^<(\\/?)([a-z]+)\\s*>$/;\n\nmodule.exports = function (tree) {\n  var open = void 0;\n  var currentParent = void 0;\n  visit(tree, 'html', function (node, index, parent) {\n    if (currentParent !== parent) {\n      open = [];\n      currentParent = parent;\n    }\n\n    var selfClosing = getSelfClosing(node);\n    if (selfClosing) {\n      parent.children.splice(index, 1, {\n        type: type,\n        tag: selfClosing,\n        position: node.position\n      });\n      return true;\n    }\n\n    var current = getSimpleTag(node, parent);\n    if (!current) {\n      return true;\n    }\n\n    var matching = findAndPull(open, current.tag);\n\n    if (matching) {\n      parent.children.splice(index, 0, virtual(current, matching, parent));\n    } else if (!current.opening) {\n      open.push(current);\n    }\n\n    return true;\n  }, true // Iterate in reverse\n  );\n\n  return tree;\n};\n\nfunction findAndPull(open, matchingTag) {\n  var i = open.length;\n  while (i--) {\n    if (open[i].tag === matchingTag) {\n      return open.splice(i, 1)[0];\n    }\n  }\n\n  return false;\n}\n\nfunction getSimpleTag(node, parent) {\n  var match = node.value.match(simpleTagRe);\n  return match ? { tag: match[2], opening: !match[1], node: node } : false;\n}\n\nfunction getSelfClosing(node) {\n  var match = node.value.match(selfClosingRe);\n  return match ? match[1] : false;\n}\n\nfunction virtual(fromNode, toNode, parent) {\n  var fromIndex = parent.children.indexOf(fromNode.node);\n  var toIndex = parent.children.indexOf(toNode.node);\n\n  var extracted = parent.children.splice(fromIndex, toIndex - fromIndex + 1);\n  var children = extracted.slice(1, -1);\n  return {\n    type: type,\n    children: children,\n    tag: fromNode.tag,\n    position: {\n      start: fromNode.node.position.start,\n      end: toNode.node.position.end,\n      indent: []\n    }\n  };\n}","'use strict';\n\nvar visit = require('unist-util-visit');\n\nexports.ofType = function (types, mode) {\n  return function (node) {\n    types.forEach(function (type) {\n      return visit(node, type, disallow, true);\n    });\n    return node;\n  };\n\n  function disallow(node, index, parent) {\n    if (parent) {\n      untangle(node, index, parent, mode);\n    }\n  }\n};\n\nexports.ifNotMatch = function (allowNode, mode) {\n  return function (node) {\n    visit(node, disallow, true);\n    return node;\n  };\n\n  function disallow(node, index, parent) {\n    if (parent && !allowNode(node, index, parent)) {\n      untangle(node, index, parent, mode);\n    }\n  }\n};\n\nfunction untangle(node, index, parent, mode) {\n  if (mode === 'remove') {\n    parent.children.splice(index, 1);\n  } else if (mode === 'unwrap') {\n    var args = [index, 1];\n\n    if (node.children) {\n      args = args.concat(node.children);\n    }\n\n    Array.prototype.splice.apply(parent.children, args);\n  }\n}","'use strict';\n\nvar React = require('react');\nvar xtend = require('xtend');\n\nfunction astToReact(node, options) {\n  var parent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n  var index = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n\n  var renderer = options.renderers[node.type];\n\n  var pos = node.position.start;\n  var key = [node.type, pos.line, pos.column].join('-');\n\n  if (node.type === 'text') {\n    return renderer ? renderer(node.value, key) : node.value;\n  }\n\n  if (typeof renderer !== 'function' && typeof renderer !== 'string' && !isReactFragment(renderer)) {\n    throw new Error('Renderer for type `' + node.type + '` not defined or is not renderable');\n  }\n\n  var nodeProps = getNodeProps(node, key, options, renderer, parent, index);\n\n  return React.createElement(renderer, nodeProps, nodeProps.children || resolveChildren() || undefined);\n\n  function resolveChildren() {\n    return node.children && node.children.map(function (childNode, i) {\n      return astToReact(childNode, options, { node: node, props: nodeProps }, i);\n    });\n  }\n}\n\nfunction isReactFragment(renderer) {\n  return React.Fragment && React.Fragment === renderer;\n}\n\n// eslint-disable-next-line max-params, complexity\nfunction getNodeProps(node, key, opts, renderer, parent, index) {\n  var props = { key: key };\n\n  var isTagRenderer = typeof renderer === 'string';\n\n  // `sourcePos` is true if the user wants source information (line/column info from markdown source)\n  if (opts.sourcePos && node.position) {\n    props['data-sourcepos'] = flattenPosition(node.position);\n  }\n\n  if (opts.rawSourcePos && !isTagRenderer) {\n    props.sourcePosition = node.position;\n  }\n\n  // If `includeNodeIndex` is true, pass node index info to all non-tag renderers\n  if (opts.includeNodeIndex && parent.node && parent.node.children && !isTagRenderer) {\n    props.index = parent.node.children.indexOf(node);\n    props.parentChildCount = parent.node.children.length;\n  }\n\n  var ref = node.identifier !== null && node.identifier !== undefined ? opts.definitions[node.identifier] || {} : null;\n\n  switch (node.type) {\n    case 'root':\n      assignDefined(props, { className: opts.className });\n      break;\n    case 'heading':\n      props.level = node.depth;\n      break;\n    case 'list':\n      props.start = node.start;\n      props.ordered = node.ordered;\n      props.tight = !node.loose;\n      props.depth = node.depth;\n      break;\n    case 'listItem':\n      props.checked = node.checked;\n      props.tight = !node.loose;\n      props.ordered = node.ordered;\n      props.index = node.index;\n      props.children = (props.tight ? unwrapParagraphs(node) : node.children).map(function (childNode, i) {\n        return astToReact(childNode, opts, { node: node, props: props }, i);\n      });\n      break;\n    case 'definition':\n      assignDefined(props, { identifier: node.identifier, title: node.title, url: node.url });\n      break;\n    case 'code':\n      assignDefined(props, { language: node.lang && node.lang.split(/\\s/, 1)[0] });\n      break;\n    case 'inlineCode':\n      props.children = node.value;\n      props.inline = true;\n      break;\n    case 'link':\n      assignDefined(props, {\n        title: node.title || undefined,\n        target: typeof opts.linkTarget === 'function' ? opts.linkTarget(node.url, node.children, node.title) : opts.linkTarget,\n        href: opts.transformLinkUri ? opts.transformLinkUri(node.url, node.children, node.title) : node.url\n      });\n      break;\n    case 'image':\n      assignDefined(props, {\n        alt: node.alt || undefined,\n        title: node.title || undefined,\n        src: opts.transformImageUri ? opts.transformImageUri(node.url, node.children, node.title, node.alt) : node.url\n      });\n      break;\n    case 'linkReference':\n      assignDefined(props, xtend(ref, {\n        href: opts.transformLinkUri ? opts.transformLinkUri(ref.href) : ref.href\n      }));\n      break;\n    case 'imageReference':\n      assignDefined(props, {\n        src: opts.transformImageUri && ref.href ? opts.transformImageUri(ref.href, node.children, ref.title, node.alt) : ref.href,\n        title: ref.title || undefined,\n        alt: node.alt || undefined\n      });\n      break;\n    case 'table':\n    case 'tableHead':\n    case 'tableBody':\n      props.columnAlignment = node.align;\n      break;\n    case 'tableRow':\n      props.isHeader = parent.node.type === 'tableHead';\n      props.columnAlignment = parent.props.columnAlignment;\n      break;\n    case 'tableCell':\n      assignDefined(props, {\n        isHeader: parent.props.isHeader,\n        align: parent.props.columnAlignment[index]\n      });\n      break;\n    case 'virtualHtml':\n      props.tag = node.tag;\n      break;\n    case 'html':\n      // @todo find a better way than this\n      props.isBlock = node.position.start.line !== node.position.end.line;\n      props.escapeHtml = opts.escapeHtml;\n      props.skipHtml = opts.skipHtml;\n      break;\n    default:\n      assignDefined(props, xtend(node, {\n        type: undefined,\n        position: undefined,\n        children: undefined\n      }));\n  }\n\n  if (!isTagRenderer && node.value) {\n    props.value = node.value;\n  }\n\n  return props;\n}\n\nfunction assignDefined(target, attrs) {\n  for (var key in attrs) {\n    if (typeof attrs[key] !== 'undefined') {\n      target[key] = attrs[key];\n    }\n  }\n}\n\nfunction flattenPosition(pos) {\n  return [pos.start.line, ':', pos.start.column, '-', pos.end.line, ':', pos.end.column].map(String).join('');\n}\n\nfunction unwrapParagraphs(node) {\n  return node.children.reduce(function (array, child) {\n    return array.concat(child.type === 'paragraph' ? child.children || [] : [child]);\n  }, []);\n}\n\nmodule.exports = astToReact;","'use strict';\n\nvar visit = require('unist-util-visit');\n\nmodule.exports = function (node) {\n  visit(node, 'table', wrap);\n  return node;\n};\n\nfunction wrap(table) {\n  var children = table.children;\n  table.children = [{\n    type: 'tableHead',\n    align: table.align,\n    children: [children[0]],\n    position: children[0].position\n  }];\n  if (children.length > 1) {\n    table.children.push({\n      type: 'tableBody',\n      align: table.align,\n      children: children.slice(1),\n      position: {\n        start: children[1].position.start,\n        end: children[children.length - 1].position.end\n      }\n    });\n  }\n}","'use strict';\n\nmodule.exports = function getDefinitions(node) {\n  var defs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  return (node.children || []).reduce(function (definitions, child) {\n    if (child.type === 'definition') {\n      definitions[child.identifier] = {\n        href: child.url,\n        title: child.title\n      };\n    }\n\n    return getDefinitions(child, definitions);\n  }, defs);\n};","'use strict';\n\nvar protocols = ['http', 'https', 'mailto', 'tel'];\n\nmodule.exports = function uriTransformer(uri) {\n  var url = (uri || '').trim();\n  var first = url.charAt(0);\n\n  if (first === '#' || first === '/') {\n    return url;\n  }\n\n  var colon = url.indexOf(':');\n  if (colon === -1) {\n    return url;\n  }\n\n  var length = protocols.length;\n  var index = -1;\n\n  while (++index < length) {\n    var protocol = protocols[index];\n\n    if (colon === protocol.length && url.slice(0, protocol.length) === protocol) {\n      return url;\n    }\n  }\n\n  index = url.indexOf('?');\n  if (index !== -1 && colon > index) {\n    return url;\n  }\n\n  index = url.indexOf('#');\n  if (index !== -1 && colon > index) {\n    return url;\n  }\n\n  // eslint-disable-next-line no-script-url\n  return 'javascript:void(0)';\n};","/* eslint-disable react/prop-types, react/no-multi-comp */\n'use strict';\n\nvar xtend = require('xtend');\nvar React = require('react');\nvar createElement = React.createElement;\n\nmodule.exports = {\n  root: 'div',\n  break: 'br',\n  paragraph: 'p',\n  emphasis: 'em',\n  strong: 'strong',\n  thematicBreak: 'hr',\n  blockquote: 'blockquote',\n  delete: 'del',\n  link: 'a',\n  image: 'img',\n  linkReference: 'a',\n  imageReference: 'img',\n  table: SimpleRenderer.bind(null, 'table'),\n  tableHead: SimpleRenderer.bind(null, 'thead'),\n  tableBody: SimpleRenderer.bind(null, 'tbody'),\n  tableRow: SimpleRenderer.bind(null, 'tr'),\n  tableCell: TableCell,\n\n  list: List,\n  listItem: ListItem,\n  definition: NullRenderer,\n  heading: Heading,\n  inlineCode: InlineCode,\n  code: CodeBlock,\n  html: Html,\n  virtualHtml: VirtualHtml\n};\n\nfunction SimpleRenderer(tag, props) {\n  return createElement(tag, getCoreProps(props), props.children);\n}\n\nfunction TableCell(props) {\n  var style = props.align ? { textAlign: props.align } : undefined;\n  var coreProps = getCoreProps(props);\n  return createElement(props.isHeader ? 'th' : 'td', style ? xtend({ style: style }, coreProps) : coreProps, props.children);\n}\n\nfunction Heading(props) {\n  return createElement('h' + props.level, getCoreProps(props), props.children);\n}\n\nfunction List(props) {\n  var attrs = getCoreProps(props);\n  if (props.start !== null && props.start !== 1) {\n    attrs.start = props.start.toString();\n  }\n\n  return createElement(props.ordered ? 'ol' : 'ul', attrs, props.children);\n}\n\nfunction ListItem(props) {\n  var checkbox = null;\n  if (props.checked !== null) {\n    var checked = props.checked;\n    checkbox = createElement('input', { type: 'checkbox', checked: checked, readOnly: true });\n  }\n\n  return createElement('li', getCoreProps(props), checkbox, props.children);\n}\n\nfunction CodeBlock(props) {\n  var className = props.language && 'language-' + props.language;\n  var code = createElement('code', className ? { className: className } : null, props.value);\n  return createElement('pre', getCoreProps(props), code);\n}\n\nfunction InlineCode(props) {\n  return createElement('code', getCoreProps(props), props.children);\n}\n\nfunction Html(props) {\n  if (props.skipHtml) {\n    return null;\n  }\n\n  var tag = props.isBlock ? 'div' : 'span';\n  if (props.escapeHtml) {\n    // @todo when fiber lands, we can simply render props.value\n    return createElement(tag, null, props.value);\n  }\n\n  var nodeProps = { dangerouslySetInnerHTML: { __html: props.value } };\n  return createElement(tag, nodeProps);\n}\n\nfunction VirtualHtml(props) {\n  return createElement(props.tag, getCoreProps(props), props.children);\n}\n\nfunction NullRenderer() {\n  return null;\n}\n\nfunction getCoreProps(props) {\n  return props['data-sourcepos'] ? { 'data-sourcepos': props['data-sourcepos'] } : {};\n}","'use strict';\nmodule.exports = str => encodeURIComponent(str).replace(/[!'()*]/g, x => `%${x.charCodeAt(0).toString(16).toUpperCase()}`);\n","'use strict';\nvar token = '%[a-f0-9]{2}';\nvar singleMatcher = new RegExp(token, 'gi');\nvar multiMatcher = new RegExp('(' + token + ')+', 'gi');\n\nfunction decodeComponents(components, split) {\n\ttry {\n\t\t// Try to decode the entire string first\n\t\treturn decodeURIComponent(components.join(''));\n\t} catch (err) {\n\t\t// Do nothing\n\t}\n\n\tif (components.length === 1) {\n\t\treturn components;\n\t}\n\n\tsplit = split || 1;\n\n\t// Split the array in 2 parts\n\tvar left = components.slice(0, split);\n\tvar right = components.slice(split);\n\n\treturn Array.prototype.concat.call([], decodeComponents(left), decodeComponents(right));\n}\n\nfunction decode(input) {\n\ttry {\n\t\treturn decodeURIComponent(input);\n\t} catch (err) {\n\t\tvar tokens = input.match(singleMatcher);\n\n\t\tfor (var i = 1; i < tokens.length; i++) {\n\t\t\tinput = decodeComponents(tokens, i).join('');\n\n\t\t\ttokens = input.match(singleMatcher);\n\t\t}\n\n\t\treturn input;\n\t}\n}\n\nfunction customDecodeURIComponent(input) {\n\t// Keep track of all the replacements and prefill the map with the `BOM`\n\tvar replaceMap = {\n\t\t'%FE%FF': '\\uFFFD\\uFFFD',\n\t\t'%FF%FE': '\\uFFFD\\uFFFD'\n\t};\n\n\tvar match = multiMatcher.exec(input);\n\twhile (match) {\n\t\ttry {\n\t\t\t// Decode as big chunks as possible\n\t\t\treplaceMap[match[0]] = decodeURIComponent(match[0]);\n\t\t} catch (err) {\n\t\t\tvar result = decode(match[0]);\n\n\t\t\tif (result !== match[0]) {\n\t\t\t\treplaceMap[match[0]] = result;\n\t\t\t}\n\t\t}\n\n\t\tmatch = multiMatcher.exec(input);\n\t}\n\n\t// Add `%C2` at the end of the map to make sure it does not replace the combinator before everything else\n\treplaceMap['%C2'] = '\\uFFFD';\n\n\tvar entries = Object.keys(replaceMap);\n\n\tfor (var i = 0; i < entries.length; i++) {\n\t\t// Replace all decoded components\n\t\tvar key = entries[i];\n\t\tinput = input.replace(new RegExp(key, 'g'), replaceMap[key]);\n\t}\n\n\treturn input;\n}\n\nmodule.exports = function (encodedURI) {\n\tif (typeof encodedURI !== 'string') {\n\t\tthrow new TypeError('Expected `encodedURI` to be of type `string`, got `' + typeof encodedURI + '`');\n\t}\n\n\ttry {\n\t\tencodedURI = encodedURI.replace(/\\+/g, ' ');\n\n\t\t// Try the built in decoder first\n\t\treturn decodeURIComponent(encodedURI);\n\t} catch (err) {\n\t\t// Fallback to a more advanced decoder\n\t\treturn customDecodeURIComponent(encodedURI);\n\t}\n};\n","'use strict';\n\nmodule.exports = (string, separator) => {\n\tif (!(typeof string === 'string' && typeof separator === 'string')) {\n\t\tthrow new TypeError('Expected the arguments to be of type `string`');\n\t}\n\n\tif (separator === '') {\n\t\treturn [string];\n\t}\n\n\tconst separatorIndex = string.indexOf(separator);\n\n\tif (separatorIndex === -1) {\n\t\treturn [string];\n\t}\n\n\treturn [\n\t\tstring.slice(0, separatorIndex),\n\t\tstring.slice(separatorIndex + separator.length)\n\t];\n};\n","'use strict';\nmodule.exports = function (obj, predicate) {\n\tvar ret = {};\n\tvar keys = Object.keys(obj);\n\tvar isArr = Array.isArray(predicate);\n\n\tfor (var i = 0; i < keys.length; i++) {\n\t\tvar key = keys[i];\n\t\tvar val = obj[key];\n\n\t\tif (isArr ? predicate.indexOf(key) !== -1 : predicate(key, val, obj)) {\n\t\t\tret[key] = val;\n\t\t}\n\t}\n\n\treturn ret;\n};\n","var setPrototypeOf = require(\"./setPrototypeOf.js\");\n\nfunction _inheritsLoose(subClass, superClass) {\n  subClass.prototype = Object.create(superClass.prototype);\n  subClass.prototype.constructor = subClass;\n  setPrototypeOf(subClass, superClass);\n}\n\nmodule.exports = _inheritsLoose;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","import React from 'react';\nimport ReactMarkdown from 'react-markdown';\nimport BasicCard from '../basic-card';\n\nconst ListCard = ({ title, source }) => (\n  <BasicCard title={title}>\n    <ReactMarkdown\n      source={source}\n      renderers={{\n        root: ({ children }) => (\n          <ul className=\"o-typography-list o-typography-list--unordered\">{children}</ul>\n        ),\n        paragraph: ({ children }) => <li>{children}</li>,\n      }}\n    />\n  </BasicCard>\n);\n\nexport default ListCard;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n *   console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n  return root.Date.now();\n};\n\nmodule.exports = now;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var baseTrim = require('./_baseTrim'),\n    isObject = require('./isObject'),\n    isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n  if (typeof value == 'number') {\n    return value;\n  }\n  if (isSymbol(value)) {\n    return NAN;\n  }\n  if (isObject(value)) {\n    var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n    value = isObject(other) ? (other + '') : other;\n  }\n  if (typeof value != 'string') {\n    return value === 0 ? value : +value;\n  }\n  value = baseTrim(value);\n  var isBinary = reIsBinary.test(value);\n  return (isBinary || reIsOctal.test(value))\n    ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n    : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n  return string\n    ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n    : string;\n}\n\nmodule.exports = baseTrim;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n  var index = string.length;\n\n  while (index-- && reWhitespace.test(string.charAt(index))) {}\n  return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","var baseGetTag = require('./_baseGetTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n  var isOwn = hasOwnProperty.call(value, symToStringTag),\n      tag = value[symToStringTag];\n\n  try {\n    value[symToStringTag] = undefined;\n    var unmasked = true;\n  } catch (e) {}\n\n  var result = nativeObjectToString.call(value);\n  if (unmasked) {\n    if (isOwn) {\n      value[symToStringTag] = tag;\n    } else {\n      delete value[symToStringTag];\n    }\n  }\n  return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n  return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","module.exports = balanced;\nfunction balanced(a, b, str) {\n  if (a instanceof RegExp) a = maybeMatch(a, str);\n  if (b instanceof RegExp) b = maybeMatch(b, str);\n\n  var r = range(a, b, str);\n\n  return r && {\n    start: r[0],\n    end: r[1],\n    pre: str.slice(0, r[0]),\n    body: str.slice(r[0] + a.length, r[1]),\n    post: str.slice(r[1] + b.length)\n  };\n}\n\nfunction maybeMatch(reg, str) {\n  var m = str.match(reg);\n  return m ? m[0] : null;\n}\n\nbalanced.range = range;\nfunction range(a, b, str) {\n  var begs, beg, left, right, result;\n  var ai = str.indexOf(a);\n  var bi = str.indexOf(b, ai + 1);\n  var i = ai;\n\n  if (ai >= 0 && bi > 0) {\n    begs = [];\n    left = str.length;\n\n    while (i >= 0 && !result) {\n      if (i == ai) {\n        begs.push(i);\n        ai = str.indexOf(a, i + 1);\n      } else if (begs.length == 1) {\n        result = [ begs.pop(), bi ];\n      } else {\n        beg = begs.pop();\n        if (beg < left) {\n          left = beg;\n          right = bi;\n        }\n\n        bi = str.indexOf(b, i + 1);\n      }\n\n      i = ai < bi && ai >= 0 ? ai : bi;\n    }\n\n    if (begs.length) {\n      result = [ left, right ];\n    }\n  }\n\n  return result;\n}\n","/*\n * Module dependencies\n */\nvar balanced = require(\"balanced-match\")\n\n/**\n * Expose `reduceFunctionCall`\n *\n * @type {Function}\n */\nmodule.exports = reduceFunctionCall\n\n/**\n * Walkthrough all expressions, evaluate them and insert them into the declaration\n *\n * @param {Array} expressions\n * @param {Object} declaration\n */\n\nfunction reduceFunctionCall(string, functionRE, callback) {\n  var call = string\n  return getFunctionCalls(string, functionRE).reduce(function(string, obj) {\n    return string.replace(obj.functionIdentifier + \"(\" + obj.matches.body + \")\", evalFunctionCall(obj.matches.body, obj.functionIdentifier, callback, call, functionRE))\n  }, string)\n}\n\n/**\n * Parses expressions in a value\n *\n * @param {String} value\n * @returns {Array}\n * @api private\n */\n\nfunction getFunctionCalls(call, functionRE) {\n  var expressions = []\n\n  var fnRE = typeof functionRE === \"string\" ? new RegExp(\"\\\\b(\" + functionRE + \")\\\\(\") : functionRE\n  do {\n    var searchMatch = fnRE.exec(call)\n    if (!searchMatch) {\n      return expressions\n    }\n    if (searchMatch[1] === undefined) {\n      throw new Error(\"Missing the first couple of parenthesis to get the function identifier in \" + functionRE)\n    }\n    var fn = searchMatch[1]\n    var startIndex = searchMatch.index\n    var matches = balanced(\"(\", \")\", call.substring(startIndex))\n\n    if (!matches || matches.start !== searchMatch[0].length - 1) {\n      throw new SyntaxError(fn + \"(): missing closing ')' in the value '\" + call + \"'\")\n    }\n\n    expressions.push({matches: matches, functionIdentifier: fn})\n    call = matches.post\n  }\n  while (fnRE.test(call))\n\n  return expressions\n}\n\n/**\n * Evaluates an expression\n *\n * @param {String} expression\n * @returns {String}\n * @api private\n */\n\nfunction evalFunctionCall (string, functionIdentifier, callback, call, functionRE) {\n  // allow recursivity\n  return callback(reduceFunctionCall(string, functionRE, callback), functionIdentifier, call)\n}\n","'use strict';\nmodule.exports = balanced;\nfunction balanced(a, b, str) {\n  if (a instanceof RegExp) a = maybeMatch(a, str);\n  if (b instanceof RegExp) b = maybeMatch(b, str);\n\n  var r = range(a, b, str);\n\n  return r && {\n    start: r[0],\n    end: r[1],\n    pre: str.slice(0, r[0]),\n    body: str.slice(r[0] + a.length, r[1]),\n    post: str.slice(r[1] + b.length)\n  };\n}\n\nfunction maybeMatch(reg, str) {\n  var m = str.match(reg);\n  return m ? m[0] : null;\n}\n\nbalanced.range = range;\nfunction range(a, b, str) {\n  var begs, beg, left, right, result;\n  var ai = str.indexOf(a);\n  var bi = str.indexOf(b, ai + 1);\n  var i = ai;\n\n  if (ai >= 0 && bi > 0) {\n    if(a===b) {\n      return [ai, bi];\n    }\n    begs = [];\n    left = str.length;\n\n    while (i >= 0 && !result) {\n      if (i == ai) {\n        begs.push(i);\n        ai = str.indexOf(a, i + 1);\n      } else if (begs.length == 1) {\n        result = [ begs.pop(), bi ];\n      } else {\n        beg = begs.pop();\n        if (beg < left) {\n          left = beg;\n          right = bi;\n        }\n\n        bi = str.indexOf(b, i + 1);\n      }\n\n      i = ai < bi && ai >= 0 ? ai : bi;\n    }\n\n    if (begs.length) {\n      result = [ left, right ];\n    }\n  }\n\n  return result;\n}\n","var Mexp=require('./postfix_evaluator.js');\r\nMexp.prototype.formulaEval = function () {\r\n\t\"use strict\";\r\n\tvar stack=[],pop1,pop2,pop3;\r\n\tvar disp=[];\r\n\tvar temp='';\r\n\tvar arr=this.value;\r\n\tfor(var i=0;i<arr.length;i++){\r\n\t\tif(arr[i].type===1||arr[i].type===3){\r\n\t\t\tdisp.push({value:arr[i].type===3?arr[i].show:arr[i].value,type:1});\r\n\t\t}\r\n\t\telse if(arr[i].type===13){\r\n\t\t\tdisp.push({value:arr[i].show,type:1});\r\n\t\t}\r\n\t\telse if(arr[i].type===0){\r\n\t\t\tdisp[disp.length-1]={value:arr[i].show+(arr[i].show!=\"-\"?\"(\":\"\")+disp[disp.length-1].value+(arr[i].show!=\"-\"?\")\":\"\"),type:0};\r\n\t\t}\r\n\t\telse if(arr[i].type===7){\r\n\t\t\tdisp[disp.length-1]={value:(disp[disp.length-1].type!=1?\"(\":\"\")+disp[disp.length-1].value+(disp[disp.length-1].type!=1?\")\":\"\")+arr[i].show,type:7};\r\n\t\t}\r\n\t\telse if(arr[i].type===10){\r\n\t\t\tpop1=disp.pop();\r\n\t\t\tpop2=disp.pop();\r\n\t\t\tif(arr[i].show==='P'||arr[i].show==='C')disp.push({value:\"<sup>\"+pop2.value+\"</sup>\"+arr[i].show+\"<sub>\"+pop1.value+\"</sub>\",type:10});\r\n\t\t\telse disp.push({value:(pop2.type!=1?\"(\":\"\")+pop2.value+(pop2.type!=1?\")\":\"\")+\"<sup>\"+pop1.value+\"</sup>\",type:1});\r\n\t\t}\r\n\t\telse if(arr[i].type===2||arr[i].type===9){\r\n\t\t\tpop1=disp.pop();\r\n\t\t\tpop2=disp.pop();\r\n\t\t\tdisp.push({value:(pop2.type!=1?\"(\":\"\")+pop2.value+(pop2.type!=1?\")\":\"\")+arr[i].show+(pop1.type!=1?\"(\":\"\")+pop1.value+(pop1.type!=1?\")\":\"\"),type:arr[i].type});\r\n\t\t}\r\n\t\telse if(arr[i].type===12){\r\n\t\t\tpop1=disp.pop();\r\n\t\t\tpop2=disp.pop();\r\n\t\t\tpop3=disp.pop();\r\n\t\t\tdisp.push({value:arr[i].show+\"(\"+pop3.value+\",\"+pop2.value+\",\"+pop1.value+\")\",type:12});\r\n\t\t}\r\n\t}\r\n\treturn disp[0].value;\r\n};\r\nmodule.exports=Mexp;","var Mexp=require('./postfix.js');\r\nMexp.prototype.postfixEval = function (UserDefined) {\r\n\t'use strict';\r\n\tUserDefined=UserDefined||{};\r\n\tUserDefined.PI=Math.PI;\r\n\tUserDefined.E=Math.E;\r\n\tvar stack=[],pop1,pop2,pop3;\r\n\tvar disp=[];\r\n\tvar temp='';\r\n\tvar arr=this.value;\r\n\tvar bool=(typeof UserDefined.n!==\"undefined\");\r\n\tfor(var i=0;i<arr.length;i++){\r\n\t\tif(arr[i].type===1){\r\n\t\t\tstack.push({value:arr[i].value,type:1});\r\n\t\t}\r\n\t\telse if(arr[i].type===3){\r\n\t\t\tstack.push({value:UserDefined[arr[i].value],type:1});\r\n\t\t}\r\n\t\telse if(arr[i].type===0){\r\n\t\t\tif(typeof stack[stack.length-1].type===\"undefined\"){\r\n\t\t\t\tstack[stack.length-1].value.push(arr[i]);\r\n\t\t\t}\r\n\t\t\telse stack[stack.length-1].value=arr[i].value(stack[stack.length-1].value);\r\n\t\t}\r\n\t\telse if(arr[i].type===7){\r\n\t\t\tif(typeof stack[stack.length-1].type===\"undefined\"){\r\n\t\t\t\tstack[stack.length-1].value.push(arr[i]);\r\n\t\t\t}\r\n\t\t\telse stack[stack.length-1].value=arr[i].value(stack[stack.length-1].value);\r\n\t\t}\r\n\t\telse if(arr[i].type===8){\r\n\t\t\tpop1=stack.pop();\r\n\t\t\tpop2=stack.pop();\r\n\t\t\tstack.push({type:1,value:arr[i].value(pop2.value,pop1.value)});\r\n\t\t}\r\n\t\telse if(arr[i].type===10){\r\n\t\t\tpop1=stack.pop();\r\n\t\t\tpop2=stack.pop();\r\n\t\t\tif(typeof pop2.type===\"undefined\"){\r\n\t\t\t\tpop2.value=pop2.concat(pop1);\r\n\t\t\t\tpop2.value.push(arr[i]);\r\n\t\t\t\tstack.push(pop2);\r\n\t\t\t}\r\n\t\t\telse if (typeof pop1.type===\"undefined\") {\r\n\t\t\t\tpop1.unshift(pop2);\r\n\t\t\t\tpop1.push(arr[i]);\r\n\t\t\t\tstack.push(pop1);\r\n\t\t\t}\r\n\t\t\telse{\r\n\t\t\t\tstack.push({type:1,value:arr[i].value(pop2.value,pop1.value)});\r\n            }\r\n\t\t}\r\n\t\telse if(arr[i].type===2||arr[i].type===9){\r\n\t\t\tpop1=stack.pop();\r\n\t\t\tpop2=stack.pop();\r\n\t\t\tif(typeof pop2.type===\"undefined\"){\r\n\t\t\t\tpop2=pop2.concat(pop1);\r\n\t\t\t\tpop2.push(arr[i]);\r\n\t\t\t\tstack.push(pop2);\r\n\t\t\t}\r\n\t\t\telse if (typeof pop1.type===\"undefined\") {\r\n\t\t\t\tpop1.unshift(pop2);\r\n\t\t\t\tpop1.push(arr[i]);\r\n\t\t\t\tstack.push(pop1);\r\n\t\t\t}\r\n\t\t\telse{\r\n\t\t\t\tstack.push({type:1,value:arr[i].value(pop2.value,pop1.value)});\r\n\t\t\t}\r\n\t\t}\r\n\t\telse if(arr[i].type===12){\r\n\t\t\tpop1=stack.pop();\r\n\t\t\tif (typeof pop1.type!==\"undefined\") {\r\n\t\t\t\tpop1=[pop1];\r\n\t\t\t}\r\n\t\t\tpop2=stack.pop();\r\n\t\t\tpop3=stack.pop();\r\n\t\t\tstack.push({type:1,value:arr[i].value(pop3.value,pop2.value,new Mexp(pop1))});\r\n\t\t}\r\n\t\telse if(arr[i].type===13){\r\n\t\t\tif(bool){\r\n\t\t\t\tstack.push({value:UserDefined[arr[i].value],type:3});\r\n\t\t\t}\r\n\t\t\telse stack.push([arr[i]]);\r\n\t\t}\r\n\t}\r\n\tif (stack.length>1) {\r\n\t\tthrow(new Mexp.Exception(\"Uncaught Syntax error\"));\r\n\t}\r\n\treturn stack[0].value>1000000000000000?\"Infinity\":parseFloat(stack[0].value.toFixed(15));\r\n};\r\nMexp.eval=function(str,tokens,obj){\r\n\tif (typeof tokens===\"undefined\") {\r\n\t\treturn this.lex(str).toPostfix().postfixEval();\r\n\t}\r\n\telse if (typeof obj===\"undefined\") {\r\n\t\tif (typeof tokens.length!==\"undefined\") \r\n\t\t\treturn this.lex(str,tokens).toPostfix().postfixEval();\r\n\t\telse\r\n\t\t\treturn this.lex(str).toPostfix().postfixEval(tokens);\r\n\t}\r\n\telse\r\n\t\treturn this.lex(str,tokens).toPostfix().postfixEval(obj);\r\n};\r\nmodule.exports=Mexp;","\r\nvar Mexp = require('./lexer.js');\r\n\r\nMexp.prototype.toPostfix = function () {\r\n\t'use strict';\r\n\tvar post = [], elem, popped, prep, pre, ele;\r\n\tvar stack = [{ value: \"(\", type: 4, pre: 0 }];\r\n\tvar arr = this.value;\r\n\tfor (var i = 1; i < arr.length; i++) {\r\n\t\tif (arr[i].type === 1 || arr[i].type === 3 || arr[i].type === 13) {\t//if token is number,constant,or n(which is also a special constant in our case)\r\n\t\t\tif (arr[i].type === 1)\r\n\t\t\t\tarr[i].value = Number(arr[i].value);\r\n\t\t\tpost.push(arr[i]);\r\n\t\t}\r\n\t\telse if (arr[i].type === 4) {\r\n\t\t\tstack.push(arr[i]);\r\n\t\t}\r\n\t\telse if (arr[i].type === 5) {\r\n\t\t\twhile ((popped = stack.pop()).type !== 4) {\r\n\t\t\t\tpost.push(popped);\r\n\t\t\t}\r\n\t\t}\r\n\t\telse if (arr[i].type === 11) {\r\n\t\t\twhile ((popped = stack.pop()).type !== 4) {\r\n\t\t\t\tpost.push(popped);\r\n\t\t\t}\r\n\t\t\tstack.push(popped);\r\n\t\t}\r\n\t\telse {\r\n\t\t\telem = arr[i];\r\n\t\t\tpre = elem.pre;\r\n\t\t\tele = stack[stack.length - 1];\r\n\t\t\tprep = ele.pre;\r\n\t\t\tvar flag = ele.value == 'Math.pow' && elem.value == 'Math.pow';\r\n\t\t\tif (pre > prep) stack.push(elem);\r\n\t\t\telse {\r\n\t\t\t\twhile (prep >= pre && !flag || flag && pre < prep) {\r\n\t\t\t\t\tpopped = stack.pop();\r\n\t\t\t\t\tele = stack[stack.length - 1];\r\n\t\t\t\t\tpost.push(popped);\r\n\t\t\t\t\tprep = ele.pre;\r\n\t\t\t\t\tflag = elem.value == 'Math.pow' && ele.value == 'Math.pow';\r\n\t\t\t\t}\r\n\t\t\t\tstack.push(elem);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn new Mexp(post);\r\n};\r\nmodule.exports = Mexp;","'use strict'\r\nvar Mexp = require('./math_function.js')\r\nfunction inc (arr, val) {\r\n  for (var i = 0; i < arr.length; i++) {\r\n    arr[i] += val\r\n  }\r\n  return arr\r\n}\r\nvar token = [\r\n  'sin',\r\n  'cos',\r\n  'tan',\r\n  'pi',\r\n  '(',\r\n  ')',\r\n  'P',\r\n  'C',\r\n  ' ',\r\n  'asin',\r\n  'acos',\r\n  'atan',\r\n  '7',\r\n  '8',\r\n  '9',\r\n  'int',\r\n  'cosh',\r\n  'acosh',\r\n  'ln',\r\n  '^',\r\n  'root',\r\n  '4',\r\n  '5',\r\n  '6',\r\n  '/',\r\n  '!',\r\n  'tanh',\r\n  'atanh',\r\n  'Mod',\r\n  '1',\r\n  '2',\r\n  '3',\r\n  '*',\r\n  'sinh',\r\n  'asinh',\r\n  'e',\r\n  'log',\r\n  '0',\r\n  '.',\r\n  '+',\r\n  '-',\r\n  ',',\r\n  'Sigma',\r\n  'n',\r\n  'Pi',\r\n  'pow'\r\n]\r\nvar show = [\r\n  'sin',\r\n  'cos',\r\n  'tan',\r\n  '&pi;',\r\n  '(',\r\n  ')',\r\n  'P',\r\n  'C',\r\n  ' ',\r\n  'asin',\r\n  'acos',\r\n  'atan',\r\n  '7',\r\n  '8',\r\n  '9',\r\n  'Int',\r\n  'cosh',\r\n  'acosh',\r\n  ' ln',\r\n  '^',\r\n  'root',\r\n  '4',\r\n  '5',\r\n  '6',\r\n  '&divide;',\r\n  '!',\r\n  'tanh',\r\n  'atanh',\r\n  ' Mod ',\r\n  '1',\r\n  '2',\r\n  '3',\r\n  '&times;',\r\n  'sinh',\r\n  'asinh',\r\n  'e',\r\n  ' log',\r\n  '0',\r\n  '.',\r\n  '+',\r\n  '-',\r\n  ',',\r\n  '&Sigma;',\r\n  'n',\r\n  '&Pi;',\r\n  'pow'\r\n]\r\nvar eva = [\r\n  Mexp.math.sin,\r\n  Mexp.math.cos,\r\n  Mexp.math.tan,\r\n  'PI',\r\n  '(',\r\n  ')',\r\n  Mexp.math.P,\r\n  Mexp.math.C,\r\n  ' '.anchor,\r\n  Mexp.math.asin,\r\n  Mexp.math.acos,\r\n  Mexp.math.atan,\r\n  '7',\r\n  '8',\r\n  '9',\r\n  Math.floor,\r\n  Mexp.math.cosh,\r\n  Mexp.math.acosh,\r\n  Math.log,\r\n  Math.pow,\r\n  Math.sqrt,\r\n  '4',\r\n  '5',\r\n  '6',\r\n  Mexp.math.div,\r\n  Mexp.math.fact,\r\n  Mexp.math.tanh,\r\n  Mexp.math.atanh,\r\n  Mexp.math.mod,\r\n  '1',\r\n  '2',\r\n  '3',\r\n  Mexp.math.mul,\r\n  Mexp.math.sinh,\r\n  Mexp.math.asinh,\r\n  'E',\r\n  Mexp.math.log,\r\n  '0',\r\n  '.',\r\n  Mexp.math.add,\r\n  Mexp.math.sub,\r\n  ',',\r\n  Mexp.math.sigma,\r\n  'n',\r\n  Mexp.math.Pi,\r\n  Math.pow\r\n]\r\nvar preced = {\r\n  0: 11,\r\n  1: 0,\r\n  2: 3,\r\n  3: 0,\r\n  4: 0,\r\n  5: 0,\r\n  6: 0,\r\n  7: 11,\r\n  8: 11,\r\n  9: 1,\r\n  10: 10,\r\n  11: 0,\r\n  12: 11,\r\n  13: 0,\r\n  14: -1 // will be filtered after lexer\r\n} // stores precedence by types\r\nvar type = [\r\n  0, 0, 0, 3, 4, 5, 10, 10, 14, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 10, 0, 1, 1, 1, 2, 7, 0, 0, 2, 1, 1,\r\n  1, 2, 0, 0, 3, 0, 1, 6, 9, 9, 11, 12, 13, 12, 8\r\n]\r\n/*\r\n0 : function with syntax function_name(Maths_exp)\r\n1 : numbers\r\n2 : binary operators like * / Mod left associate and same precedence\r\n3 : Math constant values like e,pi,Cruncher ans\r\n4 : opening bracket\r\n5 : closing bracket\r\n6 : decimal\r\n7 : function with syntax (Math_exp)function_name\r\n8: function with syntax function_name(Math_exp1,Math_exp2)\r\n9 : binary operator like +,-\r\n10: binary operator like P C or ^\r\n11: ,\r\n12: function with , seperated three parameters and third parameter is a string that will be mexp string\r\n13: variable of Sigma function\r\n*/\r\nvar type0 = {\r\n  0: true,\r\n  1: true,\r\n  3: true,\r\n  4: true,\r\n  6: true,\r\n  8: true,\r\n  9: true,\r\n  12: true,\r\n  13: true,\r\n  14: true\r\n} // type2:true,type4:true,type9:true,type11:true,type21:true,type22\r\nvar type1 = {\r\n  0: true,\r\n  1: true,\r\n  2: true,\r\n  3: true,\r\n  4: true,\r\n  5: true,\r\n  6: true,\r\n  7: true,\r\n  8: true,\r\n  9: true,\r\n  10: true,\r\n  11: true,\r\n  12: true,\r\n  13: true\r\n} // type3:true,type5:true,type7:true,type23\r\nvar type1Asterick = {\r\n  0: true,\r\n  3: true,\r\n  4: true,\r\n  8: true,\r\n  12: true,\r\n  13: true\r\n}\r\nvar empty = {}\r\nvar type3Asterick = {\r\n  0: true,\r\n  1: true,\r\n  3: true,\r\n  4: true,\r\n  6: true,\r\n  8: true,\r\n  12: true,\r\n  13: true\r\n} // type_5:true,type_7:true,type_23\r\nvar type6 = {\r\n  1: true\r\n}\r\nvar newAr = [\r\n  [],\r\n  [\r\n    '1',\r\n    '2',\r\n    '3',\r\n    '7',\r\n    '8',\r\n    '9',\r\n    '4',\r\n    '5',\r\n    '6',\r\n    '+',\r\n    '-',\r\n    '*',\r\n    '/',\r\n    '(',\r\n    ')',\r\n    '^',\r\n    '!',\r\n    'P',\r\n    'C',\r\n    'e',\r\n    '0',\r\n    '.',\r\n    ',',\r\n    'n',\r\n    ' '\r\n  ],\r\n  ['pi', 'ln', 'Pi'],\r\n  ['sin', 'cos', 'tan', 'Del', 'int', 'Mod', 'log', 'pow'],\r\n  ['asin', 'acos', 'atan', 'cosh', 'root', 'tanh', 'sinh'],\r\n  ['acosh', 'atanh', 'asinh', 'Sigma']\r\n]\r\n\r\nfunction match (str1, str2, i, x) {\r\n  for (var f = 0; f < x; f++) {\r\n    if (str1[i + f] !== str2[f]) {\r\n      return false\r\n    }\r\n  }\r\n  return true\r\n}\r\nMexp.addToken = function (tokens) {\r\n  for (var i = 0; i < tokens.length; i++) {\r\n    var x = tokens[i].token.length\r\n    var temp = -1\r\n\r\n    // newAr is a specially designed data structure index of 1d array = length of tokens\r\n    newAr[x] = newAr[x] || []\r\n    for (var y = 0; y < newAr[x].length; y++) {\r\n      if (tokens[i].token === newAr[x][y]) {\r\n        temp = token.indexOf(newAr[x][y])\r\n        break\r\n      }\r\n    }\r\n    if (temp === -1) {\r\n      token.push(tokens[i].token)\r\n      type.push(tokens[i].type)\r\n      if (newAr.length <= tokens[i].token.length) {\r\n        newAr[tokens[i].token.length] = []\r\n      }\r\n      newAr[tokens[i].token.length].push(tokens[i].token)\r\n      eva.push(tokens[i].value)\r\n      show.push(tokens[i].show)\r\n    } else {\r\n      // overwrite\r\n      token[temp] = tokens[i].token\r\n      type[temp] = tokens[i].type\r\n      eva[temp] = tokens[i].value\r\n      show[temp] = tokens[i].show\r\n    }\r\n  }\r\n}\r\n\r\nfunction tokenize (string) {\r\n  var nodes = []\r\n  var length = string.length\r\n  var key, x, y\r\n  for (var i = 0; i < length; i++) {\r\n    if (i < length - 1 && string[i] === ' ' && string[i + 1] === ' ') {\r\n      continue\r\n    }\r\n    key = ''\r\n    for (\r\n      x = string.length - i > newAr.length - 2 ? newAr.length - 1 : string.length - i;\r\n      x > 0;\r\n      x--\r\n    ) {\r\n      if (newAr[x] === undefined) continue\r\n      for (y = 0; y < newAr[x].length; y++) {\r\n        if (match(string, newAr[x][y], i, x)) {\r\n          key = newAr[x][y]\r\n          y = newAr[x].length\r\n          x = 0\r\n        }\r\n      }\r\n    }\r\n    i += key.length - 1\r\n    if (key === '') {\r\n      throw new Mexp.Exception(\"Can't understand after \" + string.slice(i))\r\n    }\r\n    var index = token.indexOf(key)\r\n    nodes.push({\r\n      index: index,\r\n      token: key,\r\n      type: type[index],\r\n      eval: eva[index],\r\n      precedence: preced[type[index]],\r\n      show: show[index]\r\n    })\r\n  }\r\n  return nodes\r\n}\r\n\r\nMexp.lex = function (inp, tokens) {\r\n  'use strict'\r\n\r\n  var changeSignObj = {\r\n    value: Mexp.math.changeSign,\r\n    type: 0,\r\n    pre: 21,\r\n    show: '-'\r\n  }\r\n  var closingParObj = {\r\n    value: ')',\r\n    show: ')',\r\n    type: 5,\r\n    pre: 0\r\n  }\r\n  var openingParObj = {\r\n    value: '(',\r\n    type: 4,\r\n    pre: 0,\r\n    show: '('\r\n  }\r\n  var str = [openingParObj]\r\n\r\n  var ptc = [] // Parenthesis to close at the beginning is after one token\r\n  var inpStr = inp\r\n  var allowed = type0\r\n  var bracToClose = 0\r\n  var asterick = empty\r\n  var prevKey = ''\r\n  var i\r\n  if (typeof tokens !== 'undefined') {\r\n    Mexp.addToken(tokens)\r\n  }\r\n  var obj = {}\r\n  var nodes = tokenize(inpStr)\r\n  for (i = 0; i < nodes.length; i++) {\r\n    var node = nodes[i]\r\n    if (node.type === 14) {\r\n      if (\r\n        i > 0 &&\r\n        i < nodes.length - 1 &&\r\n        nodes[i + 1].type === 1 &&\r\n        (nodes[i - 1].type === 1 || nodes[i - 1].type === 6)\r\n      ) { throw new Mexp.Exception('Unexpected Space') }\r\n      continue\r\n    }\r\n    var cToken = node.token\r\n    var cType = node.type\r\n    var cEv = node.eval\r\n    var cPre = node.precedence\r\n    var cShow = node.show\r\n    var pre = str[str.length - 1]\r\n    var j\r\n    for (j = ptc.length; j--;) {\r\n      // loop over ptc\r\n      if (ptc[j] === 0) {\r\n        if ([0, 2, 3, 4, 5, 9, 11, 12, 13].indexOf(cType) !== -1) {\r\n          if (allowed[cType] !== true) {\r\n            throw new Mexp.Exception(cToken + ' is not allowed after ' + prevKey)\r\n          }\r\n          str.push(closingParObj)\r\n          allowed = type1\r\n          asterick = type3Asterick\r\n          inc(ptc, -1).pop()\r\n        }\r\n      } else break\r\n    }\r\n    if (allowed[cType] !== true) {\r\n      throw new Mexp.Exception(cToken + ' is not allowed after ' + prevKey)\r\n    }\r\n    if (asterick[cType] === true) {\r\n      cType = 2\r\n      cEv = Mexp.math.mul\r\n      cShow = '&times;'\r\n      cPre = 3\r\n      i = i - 1\r\n    }\r\n    obj = {\r\n      value: cEv,\r\n      type: cType,\r\n      pre: cPre,\r\n      show: cShow\r\n    }\r\n    if (cType === 0) {\r\n      allowed = type0\r\n      asterick = empty\r\n      inc(ptc, 2).push(2)\r\n      str.push(obj)\r\n      str.push(openingParObj)\r\n    } else if (cType === 1) {\r\n      if (pre.type === 1) {\r\n        pre.value += cEv\r\n        inc(ptc, 1)\r\n      } else {\r\n        str.push(obj)\r\n      }\r\n      allowed = type1\r\n      asterick = type1Asterick\r\n    } else if (cType === 2) {\r\n      allowed = type0\r\n      asterick = empty\r\n      inc(ptc, 2)\r\n      str.push(obj)\r\n    } else if (cType === 3) {\r\n      // constant\r\n      str.push(obj)\r\n      allowed = type1\r\n      asterick = type3Asterick\r\n    } else if (cType === 4) {\r\n      inc(ptc, 1)\r\n      bracToClose++\r\n      allowed = type0\r\n      asterick = empty\r\n      str.push(obj)\r\n    } else if (cType === 5) {\r\n      if (!bracToClose) {\r\n        throw new Mexp.Exception('Closing parenthesis are more than opening one, wait What!!!')\r\n      }\r\n      bracToClose--\r\n      allowed = type1\r\n      asterick = type3Asterick\r\n      str.push(obj)\r\n      inc(ptc, 1)\r\n    } else if (cType === 6) {\r\n      if (pre.hasDec) {\r\n        throw new Mexp.Exception('Two decimals are not allowed in one number')\r\n      }\r\n      if (pre.type !== 1) {\r\n        pre = {\r\n          value: 0,\r\n          type: 1,\r\n          pre: 0\r\n        } // pre needs to be changed as it will the last value now to be safe in later code\r\n        str.push(pre)\r\n        inc(ptc, -1)\r\n      }\r\n      allowed = type6\r\n      inc(ptc, 1)\r\n      asterick = empty\r\n      pre.value += cEv\r\n      pre.hasDec = true\r\n    } else if (cType === 7) {\r\n      allowed = type1\r\n      asterick = type3Asterick\r\n      inc(ptc, 1)\r\n      str.push(obj)\r\n    }\r\n    if (cType === 8) {\r\n      allowed = type0\r\n      asterick = empty\r\n      inc(ptc, 4).push(4)\r\n      str.push(obj)\r\n      str.push(openingParObj)\r\n    } else if (cType === 9) {\r\n      if (pre.type === 9) {\r\n        if (pre.value === Mexp.math.add) {\r\n          pre.value = cEv\r\n          pre.show = cShow\r\n          inc(ptc, 1)\r\n        } else if (pre.value === Mexp.math.sub && cShow === '-') {\r\n          pre.value = Mexp.math.add\r\n          pre.show = '+'\r\n          inc(ptc, 1)\r\n        }\r\n      } else if (\r\n        pre.type !== 5 &&\r\n        pre.type !== 7 &&\r\n        pre.type !== 1 &&\r\n        pre.type !== 3 &&\r\n        pre.type !== 13\r\n      ) {\r\n        // changesign only when negative is found\r\n        if (cToken === '-') {\r\n          // do nothing for + token\r\n          // don't add with the above if statement as that will run the else statement of parent if on Ctoken +\r\n          allowed = type0\r\n          asterick = empty\r\n          inc(ptc, 2).push(2)\r\n          str.push(changeSignObj)\r\n          str.push(openingParObj)\r\n        }\r\n      } else {\r\n        str.push(obj)\r\n        inc(ptc, 2)\r\n      }\r\n      allowed = type0\r\n      asterick = empty\r\n    } else if (cType === 10) {\r\n      allowed = type0\r\n      asterick = empty\r\n      inc(ptc, 2)\r\n      str.push(obj)\r\n    } else if (cType === 11) {\r\n      allowed = type0\r\n      asterick = empty\r\n      str.push(obj)\r\n    } else if (cType === 12) {\r\n      allowed = type0\r\n      asterick = empty\r\n      inc(ptc, 6).push(6)\r\n      str.push(obj)\r\n      str.push(openingParObj)\r\n    } else if (cType === 13) {\r\n      allowed = type1\r\n      asterick = type3Asterick\r\n      str.push(obj)\r\n    }\r\n    inc(ptc, -1)\r\n    prevKey = cToken\r\n  }\r\n  for (j = ptc.length; j--;) {\r\n    // loop over ptc\r\n    if (ptc[j] === 0) {\r\n      str.push(closingParObj)\r\n      inc(ptc, -1).pop()\r\n    } else break // if it is not zero so before ptc also cant be zero\r\n  }\r\n  if (allowed[5] !== true) {\r\n    throw new Mexp.Exception('complete the expression')\r\n  }\r\n  while (bracToClose--) {\r\n    str.push(closingParObj)\r\n  }\r\n\r\n  str.push(closingParObj)\r\n  //        console.log(str);\r\n  return new Mexp(str)\r\n}\r\nmodule.exports = Mexp\r\n","\"use strict\";\r\nvar Mexp = function (parsed) {\r\n  this.value = parsed\r\n}\r\n\r\nMexp.math = {\r\n  isDegree: true, // mode of calculator\r\n  acos: function (x) {\r\n    return (Mexp.math.isDegree ? 180 / Math.PI * Math.acos(x) : Math.acos(x))\r\n  },\r\n  add: function (a, b) {\r\n    return a + b\r\n  },\r\n  asin: function (x) {\r\n    return (Mexp.math.isDegree ? 180 / Math.PI * Math.asin(x) : Math.asin(x))\r\n  },\r\n  atan: function (x) {\r\n    return (Mexp.math.isDegree ? 180 / Math.PI * Math.atan(x) : Math.atan(x))\r\n  },\r\n  acosh: function (x) {\r\n    return Math.log(x + Math.sqrt(x * x - 1))\r\n  },\r\n  asinh: function (x) {\r\n    return Math.log(x + Math.sqrt(x * x + 1))\r\n  },\r\n  atanh: function (x) {\r\n    return Math.log((1 + x) / (1 - x))\r\n  },\r\n  C: function (n, r) {\r\n    var pro = 1\r\n    var other = n - r\r\n    var choice = r\r\n    if (choice < other) {\r\n      choice = other\r\n      other = r\r\n    }\r\n    for (var i = choice + 1; i <= n; i++) {\r\n      pro *= i\r\n    }\r\n    return pro / Mexp.math.fact(other)\r\n  },\r\n  changeSign: function (x) {\r\n    return -x\r\n  },\r\n  cos: function (x) {\r\n    if (Mexp.math.isDegree) x = Mexp.math.toRadian(x)\r\n    return Math.cos(x)\r\n  },\r\n  cosh: function (x) {\r\n    return (Math.pow(Math.E, x) + Math.pow(Math.E, -1 * x)) / 2\r\n  },\r\n  div: function (a, b) {\r\n    return a / b\r\n  },\r\n  fact: function (n) {\r\n    if (n % 1 !== 0) return 'NaN'\r\n    var pro = 1\r\n    for (var i = 2; i <= n; i++) {\r\n      pro *= i\r\n    }\r\n    return pro\r\n  },\r\n  inverse: function (x) {\r\n    return 1 / x\r\n  },\r\n  log: function (i) {\r\n    return Math.log(i) / Math.log(10)\r\n  },\r\n  mod: function (a, b) {\r\n    return a % b\r\n  },\r\n  mul: function (a, b) {\r\n    return a * b\r\n  },\r\n  P: function (n, r) {\r\n    var pro = 1\r\n    for (var i = Math.floor(n) - Math.floor(r) + 1; i <= Math.floor(n); i++) {\r\n      pro *= i\r\n    }\r\n    return pro\r\n  },\r\n  Pi: function (low, high, ex) {\r\n    var pro = 1\r\n    for (var i = low; i <= high; i++) {\r\n      pro *= Number(ex.postfixEval({\r\n        n: i\r\n      }))\r\n    }\r\n    return pro\r\n  },\r\n  pow10x: function (e) {\r\n    var x = 1\r\n    while (e--) {\r\n      x *= 10\r\n    }\r\n    return x\r\n  },\r\n  sigma: function (low, high, ex) {\r\n    var sum = 0\r\n    for (var i = low; i <= high; i++) {\r\n      sum += Number(ex.postfixEval({\r\n        n: i\r\n      }))\r\n    }\r\n    return sum\r\n  },\r\n  sin: function (x) {\r\n    if (Mexp.math.isDegree) x = Mexp.math.toRadian(x)\r\n    return Math.sin(x)\r\n  },\r\n  sinh: function (x) {\r\n    return (Math.pow(Math.E, x) - Math.pow(Math.E, -1 * x)) / 2\r\n  },\r\n  sub: function (a, b) {\r\n    return a - b\r\n  },\r\n  tan: function (x) {\r\n    if (Mexp.math.isDegree) x = Mexp.math.toRadian(x)\r\n    return Math.tan(x)\r\n  },\r\n  tanh: function (x) {\r\n    return Mexp.sinha(x) / Mexp.cosha(x)\r\n  },\r\n  toRadian: function (x) {\r\n    return x * Math.PI / 180\r\n  }\r\n}\r\nMexp.Exception = function (message) {\r\n  this.message = message\r\n}\r\nmodule.exports = Mexp\r\n","var mapCacheClear = require('./_mapCacheClear'),\n    mapCacheDelete = require('./_mapCacheDelete'),\n    mapCacheGet = require('./_mapCacheGet'),\n    mapCacheHas = require('./_mapCacheHas'),\n    mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n","var Hash = require('./_Hash'),\n    ListCache = require('./_ListCache'),\n    Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n  this.size = 0;\n  this.__data__ = {\n    'hash': new Hash,\n    'map': new (Map || ListCache),\n    'string': new Hash\n  };\n}\n\nmodule.exports = mapCacheClear;\n","var hashClear = require('./_hashClear'),\n    hashDelete = require('./_hashDelete'),\n    hashGet = require('./_hashGet'),\n    hashHas = require('./_hashHas'),\n    hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n","var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n  this.__data__ = nativeCreate ? nativeCreate(null) : {};\n  this.size = 0;\n}\n\nmodule.exports = hashClear;\n","var isFunction = require('./isFunction'),\n    isMasked = require('./_isMasked'),\n    isObject = require('./isObject'),\n    toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n *  else `false`.\n */\nfunction baseIsNative(value) {\n  if (!isObject(value) || isMasked(value)) {\n    return false;\n  }\n  var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n  return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n","var baseGetTag = require('./_baseGetTag'),\n    isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  if (!isObject(value)) {\n    return false;\n  }\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in Safari 9 which returns 'object' for typed arrays and other constructors.\n  var tag = baseGetTag(value);\n  return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n","var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n  var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n  return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n  return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n  if (func != null) {\n    try {\n      return funcToString.call(func);\n    } catch (e) {}\n    try {\n      return (func + '');\n    } catch (e) {}\n  }\n  return '';\n}\n\nmodule.exports = toSource;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n  return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n  var result = this.has(key) && delete this.__data__[key];\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\nmodule.exports = hashDelete;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n  var data = this.__data__;\n  if (nativeCreate) {\n    var result = data[key];\n    return result === HASH_UNDEFINED ? undefined : result;\n  }\n  return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n  var data = this.__data__;\n  return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n  var data = this.__data__;\n  this.size += this.has(key) ? 0 : 1;\n  data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n  return this;\n}\n\nmodule.exports = hashSet;\n","var listCacheClear = require('./_listCacheClear'),\n    listCacheDelete = require('./_listCacheDelete'),\n    listCacheGet = require('./_listCacheGet'),\n    listCacheHas = require('./_listCacheHas'),\n    listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n  this.__data__ = [];\n  this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    return false;\n  }\n  var lastIndex = data.length - 1;\n  if (index == lastIndex) {\n    data.pop();\n  } else {\n    splice.call(data, index, 1);\n  }\n  --this.size;\n  return true;\n}\n\nmodule.exports = listCacheDelete;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n  return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n  return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    ++this.size;\n    data.push([key, value]);\n  } else {\n    data[index][1] = value;\n  }\n  return this;\n}\n\nmodule.exports = listCacheSet;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n","var getMapData = require('./_getMapData');\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n  var result = getMapData(this, key)['delete'](key);\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\nmodule.exports = mapCacheDelete;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n  var type = typeof value;\n  return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n    ? (value !== '__proto__')\n    : (value === null);\n}\n\nmodule.exports = isKeyable;\n","var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n  return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n","var getMapData = require('./_getMapData');\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n  return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n","var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n  var data = getMapData(this, key),\n      size = data.size;\n\n  data.set(key, value);\n  this.size += data.size == size ? 0 : 1;\n  return this;\n}\n\nmodule.exports = mapCacheSet;\n","\"use strict\";\n\nexports.__esModule = true;\nexports.default = localPoint;\n\nvar _point = require(\"@visx/point\");\n\nvar _typeGuards = require(\"./typeGuards\");\n\nvar _getXAndYFromEvent = _interopRequireDefault(require(\"./getXAndYFromEvent\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction localPoint(node, event) {\n  if (!node || !event) return null;\n  var coords = (0, _getXAndYFromEvent.default)(event); // find top-most SVG\n\n  var svg = (0, _typeGuards.isSVGElement)(node) ? node.ownerSVGElement : node;\n  var screenCTM = (0, _typeGuards.isSVGGraphicsElement)(svg) ? svg.getScreenCTM() : null;\n\n  if ((0, _typeGuards.isSVGSVGElement)(svg) && screenCTM) {\n    var point = svg.createSVGPoint();\n    point.x = coords.x;\n    point.y = coords.y;\n    point = point.matrixTransform(screenCTM.inverse());\n    return new _point.Point({\n      x: point.x,\n      y: point.y\n    });\n  } // fall back to bounding box\n\n\n  var rect = node.getBoundingClientRect();\n  return new _point.Point({\n    x: coords.x - rect.left - node.clientLeft,\n    y: coords.y - rect.top - node.clientTop\n  });\n}","\"use strict\";\n\nexports.__esModule = true;\nexports.default = getXAndYFromEvent;\n\nvar _typeGuards = require(\"./typeGuards\");\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nvar DEFAULT_POINT = {\n  x: 0,\n  y: 0\n};\n\nfunction getXAndYFromEvent(event) {\n  if (!event) return _extends({}, DEFAULT_POINT);\n\n  if ((0, _typeGuards.isTouchEvent)(event)) {\n    return event.changedTouches.length > 0 ? {\n      x: event.changedTouches[0].clientX,\n      y: event.changedTouches[0].clientY\n    } : _extends({}, DEFAULT_POINT);\n  }\n\n  if ((0, _typeGuards.isMouseEvent)(event)) {\n    return {\n      x: event.clientX,\n      y: event.clientY\n    };\n  } // for focus events try to extract the center position of the target element\n\n\n  var target = event == null ? void 0 : event.target;\n  var boundingClientRect = target && 'getBoundingClientRect' in target ? target.getBoundingClientRect() : null;\n  if (!boundingClientRect) return _extends({}, DEFAULT_POINT);\n  return {\n    x: boundingClientRect.x + boundingClientRect.width / 2,\n    y: boundingClientRect.y + boundingClientRect.height / 2\n  };\n}","function _typeof(obj) {\n  \"@babel/helpers - typeof\";\n\n  if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n    module.exports = _typeof = function _typeof(obj) {\n      return typeof obj;\n    };\n\n    module.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n  } else {\n    module.exports = _typeof = function _typeof(obj) {\n      return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n    };\n\n    module.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n  }\n\n  return _typeof(obj);\n}\n\nmodule.exports = _typeof;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","import oTable from './src/js/oTable.js';\n\nconst constructAll = function() {\n\toTable.init();\n\tdocument.removeEventListener('o.DOMContentLoaded', constructAll);\n};\n\nif (typeof document !== 'undefined') {\n\tdocument.addEventListener('o.DOMContentLoaded', constructAll);\n}\n\nexport default oTable;\n","\"use strict\";\n\nmodule.exports = require('./Autosuggest')[\"default\"];","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports[\"default\"] = void 0;\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _arrays = _interopRequireDefault(require(\"shallow-equal/arrays\"));\n\nvar _Autowhatever = _interopRequireDefault(require(\"./Autowhatever\"));\n\nvar _theme = require(\"./theme\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { \"default\": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj[\"default\"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar alwaysTrue = function alwaysTrue() {\n  return true;\n};\n\nvar defaultShouldRenderSuggestions = function defaultShouldRenderSuggestions(value) {\n  return value.trim().length > 0;\n};\n\nvar defaultRenderSuggestionsContainer = function defaultRenderSuggestionsContainer(_ref) {\n  var containerProps = _ref.containerProps,\n      children = _ref.children;\n  return /*#__PURE__*/_react[\"default\"].createElement(\"div\", containerProps, children);\n};\n\nvar REASON_SUGGESTIONS_REVEALED = 'suggestions-revealed';\nvar REASON_SUGGESTIONS_UPDATED = 'suggestions-updated';\nvar REASON_SUGGESTION_SELECTED = 'suggestion-selected';\nvar REASON_INPUT_FOCUSED = 'input-focused';\nvar REASON_INPUT_CHANGED = 'input-changed';\nvar REASON_INPUT_BLURRED = 'input-blurred';\nvar REASON_ESCAPE_PRESSED = 'escape-pressed';\n\nvar Autosuggest = /*#__PURE__*/function (_Component) {\n  _inherits(Autosuggest, _Component);\n\n  var _super = _createSuper(Autosuggest);\n\n  function Autosuggest(_ref2) {\n    var _this;\n\n    var _alwaysRenderSuggestions = _ref2.alwaysRenderSuggestions;\n\n    _classCallCheck(this, Autosuggest);\n\n    _this = _super.call(this);\n\n    _defineProperty(_assertThisInitialized(_this), \"onDocumentMouseDown\", function (event) {\n      _this.justClickedOnSuggestionsContainer = false;\n      var node = event.detail && event.detail.target || // This is for testing only. Please show me a better way to emulate this.\n      event.target;\n\n      while (node !== null && node !== document) {\n        if (node.getAttribute && node.getAttribute('data-suggestion-index') !== null) {\n          // Suggestion was clicked\n          return;\n        }\n\n        if (node === _this.suggestionsContainer) {\n          // Something else inside suggestions container was clicked\n          _this.justClickedOnSuggestionsContainer = true;\n          return;\n        }\n\n        node = node.parentNode;\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"storeAutowhateverRef\", function (autowhatever) {\n      if (autowhatever !== null) {\n        _this.autowhatever = autowhatever;\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onSuggestionMouseEnter\", function (event, _ref3) {\n      var sectionIndex = _ref3.sectionIndex,\n          itemIndex = _ref3.itemIndex;\n\n      _this.updateHighlightedSuggestion(sectionIndex, itemIndex);\n\n      if (event.target === _this.pressedSuggestion) {\n        _this.justSelectedSuggestion = true;\n      }\n\n      _this.justMouseEntered = true;\n      setTimeout(function () {\n        _this.justMouseEntered = false;\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"highlightFirstSuggestion\", function () {\n      _this.updateHighlightedSuggestion(_this.props.multiSection ? 0 : null, 0);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onDocumentMouseUp\", function () {\n      if (_this.pressedSuggestion && !_this.justSelectedSuggestion) {\n        _this.input.focus();\n      }\n\n      _this.pressedSuggestion = null;\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onSuggestionMouseDown\", function (event) {\n      // Checking if this.justSelectedSuggestion is already true to not duplicate touch events in chrome\n      // See: https://github.com/facebook/react/issues/9809#issuecomment-413978405\n      if (!_this.justSelectedSuggestion) {\n        _this.justSelectedSuggestion = true;\n        _this.pressedSuggestion = event.target;\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onSuggestionsClearRequested\", function () {\n      var onSuggestionsClearRequested = _this.props.onSuggestionsClearRequested;\n      onSuggestionsClearRequested && onSuggestionsClearRequested();\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onSuggestionSelected\", function (event, data) {\n      var _this$props = _this.props,\n          alwaysRenderSuggestions = _this$props.alwaysRenderSuggestions,\n          onSuggestionSelected = _this$props.onSuggestionSelected,\n          onSuggestionsFetchRequested = _this$props.onSuggestionsFetchRequested;\n      onSuggestionSelected && onSuggestionSelected(event, data);\n\n      var keepSuggestionsOnSelect = _this.props.shouldKeepSuggestionsOnSelect(data.suggestion);\n\n      if (alwaysRenderSuggestions || keepSuggestionsOnSelect) {\n        onSuggestionsFetchRequested({\n          value: data.suggestionValue,\n          reason: REASON_SUGGESTION_SELECTED\n        });\n      } else {\n        _this.onSuggestionsClearRequested();\n      }\n\n      _this.resetHighlightedSuggestion();\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onSuggestionClick\", function (event) {\n      var _this$props2 = _this.props,\n          alwaysRenderSuggestions = _this$props2.alwaysRenderSuggestions,\n          focusInputOnSuggestionClick = _this$props2.focusInputOnSuggestionClick;\n\n      var _this$getSuggestionIn = _this.getSuggestionIndices(_this.findSuggestionElement(event.target)),\n          sectionIndex = _this$getSuggestionIn.sectionIndex,\n          suggestionIndex = _this$getSuggestionIn.suggestionIndex;\n\n      var clickedSuggestion = _this.getSuggestion(sectionIndex, suggestionIndex);\n\n      var clickedSuggestionValue = _this.props.getSuggestionValue(clickedSuggestion);\n\n      _this.maybeCallOnChange(event, clickedSuggestionValue, 'click');\n\n      _this.onSuggestionSelected(event, {\n        suggestion: clickedSuggestion,\n        suggestionValue: clickedSuggestionValue,\n        suggestionIndex: suggestionIndex,\n        sectionIndex: sectionIndex,\n        method: 'click'\n      });\n\n      var keepSuggestionsOnSelect = _this.props.shouldKeepSuggestionsOnSelect(clickedSuggestion);\n\n      if (!(alwaysRenderSuggestions || keepSuggestionsOnSelect)) {\n        _this.closeSuggestions();\n      }\n\n      if (focusInputOnSuggestionClick === true) {\n        _this.input.focus();\n      } else {\n        _this.onBlur();\n      }\n\n      setTimeout(function () {\n        _this.justSelectedSuggestion = false;\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onBlur\", function () {\n      var _this$props3 = _this.props,\n          inputProps = _this$props3.inputProps,\n          shouldRenderSuggestions = _this$props3.shouldRenderSuggestions;\n      var value = inputProps.value,\n          onBlur = inputProps.onBlur;\n\n      var highlightedSuggestion = _this.getHighlightedSuggestion();\n\n      var shouldRender = shouldRenderSuggestions(value, REASON_INPUT_BLURRED);\n\n      _this.setState({\n        isFocused: false,\n        highlightedSectionIndex: null,\n        highlightedSuggestionIndex: null,\n        highlightedSuggestion: null,\n        valueBeforeUpDown: null,\n        isCollapsed: !shouldRender\n      });\n\n      onBlur && onBlur(_this.blurEvent, {\n        highlightedSuggestion: highlightedSuggestion\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onSuggestionMouseLeave\", function (event) {\n      _this.resetHighlightedSuggestion(false); // shouldResetValueBeforeUpDown\n\n\n      if (_this.justSelectedSuggestion && event.target === _this.pressedSuggestion) {\n        _this.justSelectedSuggestion = false;\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onSuggestionTouchStart\", function () {\n      _this.justSelectedSuggestion = true; // todo: event.preventDefault when https://github.com/facebook/react/issues/2043\n      // todo: gets released so onSuggestionMouseDown won't fire in chrome\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onSuggestionTouchMove\", function () {\n      _this.justSelectedSuggestion = false;\n      _this.pressedSuggestion = null;\n\n      _this.input.focus();\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"itemProps\", function (_ref4) {\n      var sectionIndex = _ref4.sectionIndex,\n          itemIndex = _ref4.itemIndex;\n      return {\n        'data-section-index': sectionIndex,\n        'data-suggestion-index': itemIndex,\n        onMouseEnter: _this.onSuggestionMouseEnter,\n        onMouseLeave: _this.onSuggestionMouseLeave,\n        onMouseDown: _this.onSuggestionMouseDown,\n        onTouchStart: _this.onSuggestionTouchStart,\n        onTouchMove: _this.onSuggestionTouchMove,\n        onClick: _this.onSuggestionClick\n      };\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"renderSuggestionsContainer\", function (_ref5) {\n      var containerProps = _ref5.containerProps,\n          children = _ref5.children;\n      var renderSuggestionsContainer = _this.props.renderSuggestionsContainer;\n      return renderSuggestionsContainer({\n        containerProps: containerProps,\n        children: children,\n        query: _this.getQuery()\n      });\n    });\n\n    _this.state = {\n      isFocused: false,\n      isCollapsed: !_alwaysRenderSuggestions,\n      highlightedSectionIndex: null,\n      highlightedSuggestionIndex: null,\n      highlightedSuggestion: null,\n      valueBeforeUpDown: null\n    };\n    _this.justPressedUpDown = false;\n    _this.justMouseEntered = false;\n    _this.pressedSuggestion = null;\n    return _this;\n  }\n\n  _createClass(Autosuggest, [{\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      document.addEventListener('mousedown', this.onDocumentMouseDown);\n      document.addEventListener('mouseup', this.onDocumentMouseUp);\n      this.input = this.autowhatever.input;\n      this.suggestionsContainer = this.autowhatever.itemsContainer;\n    } // eslint-disable-next-line camelcase, react/sort-comp\n\n  }, {\n    key: \"UNSAFE_componentWillReceiveProps\",\n    value: function UNSAFE_componentWillReceiveProps(nextProps) {\n      // When highlightFirstSuggestion becomes deactivated, if the first suggestion was\n      // set, we should reset the suggestion back to the unselected default state.\n      var shouldResetHighlighting = this.state.highlightedSuggestionIndex === 0 && this.props.highlightFirstSuggestion && !nextProps.highlightFirstSuggestion;\n\n      if ((0, _arrays[\"default\"])(nextProps.suggestions, this.props.suggestions)) {\n        if (nextProps.highlightFirstSuggestion && nextProps.suggestions.length > 0 && this.justPressedUpDown === false && this.justMouseEntered === false) {\n          this.highlightFirstSuggestion();\n        } else if (shouldResetHighlighting) {\n          this.resetHighlightedSuggestion();\n        }\n      } else {\n        if (this.willRenderSuggestions(nextProps, REASON_SUGGESTIONS_UPDATED)) {\n          if (this.state.isCollapsed && !this.justSelectedSuggestion) {\n            this.revealSuggestions();\n          }\n\n          if (shouldResetHighlighting) {\n            this.resetHighlightedSuggestion();\n          }\n        } else {\n          this.resetHighlightedSuggestion();\n        }\n      }\n    }\n  }, {\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate(prevProps, prevState) {\n      var _this$props4 = this.props,\n          suggestions = _this$props4.suggestions,\n          onSuggestionHighlighted = _this$props4.onSuggestionHighlighted,\n          highlightFirstSuggestion = _this$props4.highlightFirstSuggestion;\n\n      if (!(0, _arrays[\"default\"])(suggestions, prevProps.suggestions) && suggestions.length > 0 && highlightFirstSuggestion) {\n        this.highlightFirstSuggestion();\n        return;\n      }\n\n      if (onSuggestionHighlighted) {\n        var highlightedSuggestion = this.getHighlightedSuggestion();\n        var prevHighlightedSuggestion = prevState.highlightedSuggestion;\n\n        if (highlightedSuggestion != prevHighlightedSuggestion) {\n          onSuggestionHighlighted({\n            suggestion: highlightedSuggestion\n          });\n        }\n      }\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      document.removeEventListener('mousedown', this.onDocumentMouseDown);\n      document.removeEventListener('mouseup', this.onDocumentMouseUp);\n    }\n  }, {\n    key: \"updateHighlightedSuggestion\",\n    value: function updateHighlightedSuggestion(sectionIndex, suggestionIndex, prevValue) {\n      var _this2 = this;\n\n      this.setState(function (state) {\n        var valueBeforeUpDown = state.valueBeforeUpDown;\n\n        if (suggestionIndex === null) {\n          valueBeforeUpDown = null;\n        } else if (valueBeforeUpDown === null && typeof prevValue !== 'undefined') {\n          valueBeforeUpDown = prevValue;\n        }\n\n        return {\n          highlightedSectionIndex: sectionIndex,\n          highlightedSuggestionIndex: suggestionIndex,\n          highlightedSuggestion: suggestionIndex === null ? null : _this2.getSuggestion(sectionIndex, suggestionIndex),\n          valueBeforeUpDown: valueBeforeUpDown\n        };\n      });\n    }\n  }, {\n    key: \"resetHighlightedSuggestion\",\n    value: function resetHighlightedSuggestion() {\n      var shouldResetValueBeforeUpDown = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n      this.setState(function (state) {\n        var valueBeforeUpDown = state.valueBeforeUpDown;\n        return {\n          highlightedSectionIndex: null,\n          highlightedSuggestionIndex: null,\n          highlightedSuggestion: null,\n          valueBeforeUpDown: shouldResetValueBeforeUpDown ? null : valueBeforeUpDown\n        };\n      });\n    }\n  }, {\n    key: \"revealSuggestions\",\n    value: function revealSuggestions() {\n      this.setState({\n        isCollapsed: false\n      });\n    }\n  }, {\n    key: \"closeSuggestions\",\n    value: function closeSuggestions() {\n      this.setState({\n        highlightedSectionIndex: null,\n        highlightedSuggestionIndex: null,\n        highlightedSuggestion: null,\n        valueBeforeUpDown: null,\n        isCollapsed: true\n      });\n    }\n  }, {\n    key: \"getSuggestion\",\n    value: function getSuggestion(sectionIndex, suggestionIndex) {\n      var _this$props5 = this.props,\n          suggestions = _this$props5.suggestions,\n          multiSection = _this$props5.multiSection,\n          getSectionSuggestions = _this$props5.getSectionSuggestions;\n\n      if (multiSection) {\n        return getSectionSuggestions(suggestions[sectionIndex])[suggestionIndex];\n      }\n\n      return suggestions[suggestionIndex];\n    }\n  }, {\n    key: \"getHighlightedSuggestion\",\n    value: function getHighlightedSuggestion() {\n      var _this$state = this.state,\n          highlightedSectionIndex = _this$state.highlightedSectionIndex,\n          highlightedSuggestionIndex = _this$state.highlightedSuggestionIndex;\n\n      if (highlightedSuggestionIndex === null) {\n        return null;\n      }\n\n      return this.getSuggestion(highlightedSectionIndex, highlightedSuggestionIndex);\n    }\n  }, {\n    key: \"getSuggestionValueByIndex\",\n    value: function getSuggestionValueByIndex(sectionIndex, suggestionIndex) {\n      var getSuggestionValue = this.props.getSuggestionValue;\n      return getSuggestionValue(this.getSuggestion(sectionIndex, suggestionIndex));\n    }\n  }, {\n    key: \"getSuggestionIndices\",\n    value: function getSuggestionIndices(suggestionElement) {\n      var sectionIndex = suggestionElement.getAttribute('data-section-index');\n      var suggestionIndex = suggestionElement.getAttribute('data-suggestion-index');\n      return {\n        sectionIndex: typeof sectionIndex === 'string' ? parseInt(sectionIndex, 10) : null,\n        suggestionIndex: parseInt(suggestionIndex, 10)\n      };\n    }\n  }, {\n    key: \"findSuggestionElement\",\n    value: function findSuggestionElement(startNode) {\n      var node = startNode;\n\n      do {\n        if (node.getAttribute && node.getAttribute('data-suggestion-index') !== null) {\n          return node;\n        }\n\n        node = node.parentNode;\n      } while (node !== null);\n\n      console.error('Clicked element:', startNode); // eslint-disable-line no-console\n\n      throw new Error(\"Couldn't find suggestion element\");\n    }\n  }, {\n    key: \"maybeCallOnChange\",\n    value: function maybeCallOnChange(event, newValue, method) {\n      var _this$props$inputProp = this.props.inputProps,\n          value = _this$props$inputProp.value,\n          onChange = _this$props$inputProp.onChange;\n\n      if (newValue !== value) {\n        onChange(event, {\n          newValue: newValue,\n          method: method\n        });\n      }\n    }\n  }, {\n    key: \"willRenderSuggestions\",\n    value: function willRenderSuggestions(props, reason) {\n      var suggestions = props.suggestions,\n          inputProps = props.inputProps,\n          shouldRenderSuggestions = props.shouldRenderSuggestions;\n      var value = inputProps.value;\n      return suggestions.length > 0 && shouldRenderSuggestions(value, reason);\n    }\n  }, {\n    key: \"getQuery\",\n    value: function getQuery() {\n      var inputProps = this.props.inputProps;\n      var value = inputProps.value;\n      var valueBeforeUpDown = this.state.valueBeforeUpDown;\n      return (valueBeforeUpDown === null ? value : valueBeforeUpDown).trim();\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this3 = this;\n\n      var _this$props6 = this.props,\n          suggestions = _this$props6.suggestions,\n          renderInputComponent = _this$props6.renderInputComponent,\n          onSuggestionsFetchRequested = _this$props6.onSuggestionsFetchRequested,\n          renderSuggestion = _this$props6.renderSuggestion,\n          inputProps = _this$props6.inputProps,\n          multiSection = _this$props6.multiSection,\n          renderSectionTitle = _this$props6.renderSectionTitle,\n          id = _this$props6.id,\n          getSectionSuggestions = _this$props6.getSectionSuggestions,\n          theme = _this$props6.theme,\n          getSuggestionValue = _this$props6.getSuggestionValue,\n          alwaysRenderSuggestions = _this$props6.alwaysRenderSuggestions,\n          highlightFirstSuggestion = _this$props6.highlightFirstSuggestion,\n          containerProps = _this$props6.containerProps;\n      var _this$state2 = this.state,\n          isFocused = _this$state2.isFocused,\n          isCollapsed = _this$state2.isCollapsed,\n          highlightedSectionIndex = _this$state2.highlightedSectionIndex,\n          highlightedSuggestionIndex = _this$state2.highlightedSuggestionIndex,\n          valueBeforeUpDown = _this$state2.valueBeforeUpDown;\n      var shouldRenderSuggestions = alwaysRenderSuggestions ? alwaysTrue : this.props.shouldRenderSuggestions;\n      var value = inputProps.value,\n          _onFocus = inputProps.onFocus,\n          _onKeyDown = inputProps.onKeyDown;\n      var willRenderSuggestions = this.willRenderSuggestions(this.props, 'render');\n      var isOpen = alwaysRenderSuggestions || isFocused && !isCollapsed && willRenderSuggestions;\n      var items = isOpen ? suggestions : [];\n\n      var autowhateverInputProps = _objectSpread({}, inputProps, {\n        onFocus: function onFocus(event) {\n          if (!_this3.justSelectedSuggestion && !_this3.justClickedOnSuggestionsContainer) {\n            var shouldRender = shouldRenderSuggestions(value, REASON_INPUT_FOCUSED);\n\n            _this3.setState({\n              isFocused: true,\n              isCollapsed: !shouldRender\n            });\n\n            _onFocus && _onFocus(event);\n\n            if (shouldRender) {\n              onSuggestionsFetchRequested({\n                value: value,\n                reason: REASON_INPUT_FOCUSED\n              });\n            }\n          }\n        },\n        onBlur: function onBlur(event) {\n          if (_this3.justClickedOnSuggestionsContainer) {\n            _this3.input.focus();\n\n            return;\n          }\n\n          _this3.blurEvent = event;\n\n          if (!_this3.justSelectedSuggestion) {\n            _this3.onBlur();\n\n            _this3.onSuggestionsClearRequested();\n          }\n        },\n        onChange: function onChange(event) {\n          var value = event.target.value;\n          var shouldRender = shouldRenderSuggestions(value, REASON_INPUT_CHANGED);\n\n          _this3.maybeCallOnChange(event, value, 'type');\n\n          if (_this3.suggestionsContainer) {\n            _this3.suggestionsContainer.scrollTop = 0;\n          }\n\n          _this3.setState(_objectSpread({}, highlightFirstSuggestion ? {} : {\n            highlightedSectionIndex: null,\n            highlightedSuggestionIndex: null,\n            highlightedSuggestion: null\n          }, {\n            valueBeforeUpDown: null,\n            isCollapsed: !shouldRender\n          }));\n\n          if (shouldRender) {\n            onSuggestionsFetchRequested({\n              value: value,\n              reason: REASON_INPUT_CHANGED\n            });\n          } else {\n            _this3.onSuggestionsClearRequested();\n          }\n        },\n        onKeyDown: function onKeyDown(event, data) {\n          var keyCode = event.keyCode;\n\n          switch (keyCode) {\n            case 40: // ArrowDown\n\n            case 38:\n              // ArrowUp\n              if (isCollapsed) {\n                if (shouldRenderSuggestions(value, REASON_SUGGESTIONS_REVEALED)) {\n                  onSuggestionsFetchRequested({\n                    value: value,\n                    reason: REASON_SUGGESTIONS_REVEALED\n                  });\n\n                  _this3.revealSuggestions();\n\n                  event.preventDefault(); // We act on the key.\n                }\n              } else if (suggestions.length > 0) {\n                var newHighlightedSectionIndex = data.newHighlightedSectionIndex,\n                    newHighlightedItemIndex = data.newHighlightedItemIndex;\n                var newValue;\n\n                if (newHighlightedItemIndex === null) {\n                  // valueBeforeUpDown can be null if, for example, user\n                  // hovers on the first suggestion and then pressed Up.\n                  // If that happens, use the original input value.\n                  newValue = valueBeforeUpDown === null ? value : valueBeforeUpDown;\n                } else {\n                  newValue = _this3.getSuggestionValueByIndex(newHighlightedSectionIndex, newHighlightedItemIndex);\n                }\n\n                _this3.updateHighlightedSuggestion(newHighlightedSectionIndex, newHighlightedItemIndex, value);\n\n                _this3.maybeCallOnChange(event, newValue, keyCode === 40 ? 'down' : 'up');\n\n                event.preventDefault(); // We act on the key.\n              }\n\n              _this3.justPressedUpDown = true;\n              setTimeout(function () {\n                _this3.justPressedUpDown = false;\n              });\n              break;\n            // Enter\n\n            case 13:\n              {\n                // See #388\n                if (event.keyCode === 229) {\n                  break;\n                }\n\n                var highlightedSuggestion = _this3.getHighlightedSuggestion();\n\n                if (isOpen && !alwaysRenderSuggestions) {\n                  _this3.closeSuggestions();\n                }\n\n                if (highlightedSuggestion != null) {\n                  event.preventDefault();\n\n                  var _newValue = getSuggestionValue(highlightedSuggestion);\n\n                  _this3.maybeCallOnChange(event, _newValue, 'enter');\n\n                  _this3.onSuggestionSelected(event, {\n                    suggestion: highlightedSuggestion,\n                    suggestionValue: _newValue,\n                    suggestionIndex: highlightedSuggestionIndex,\n                    sectionIndex: highlightedSectionIndex,\n                    method: 'enter'\n                  });\n\n                  _this3.justSelectedSuggestion = true;\n                  setTimeout(function () {\n                    _this3.justSelectedSuggestion = false;\n                  });\n                }\n\n                break;\n              }\n            // Escape\n\n            case 27:\n              {\n                if (isOpen) {\n                  // If input.type === 'search', the browser clears the input\n                  // when Escape is pressed. We want to disable this default\n                  // behaviour so that, when suggestions are shown, we just hide\n                  // them, without clearing the input.\n                  event.preventDefault();\n                }\n\n                var willCloseSuggestions = isOpen && !alwaysRenderSuggestions;\n\n                if (valueBeforeUpDown === null) {\n                  // Didn't interact with Up/Down\n                  if (!willCloseSuggestions) {\n                    var _newValue2 = '';\n\n                    _this3.maybeCallOnChange(event, _newValue2, 'escape');\n\n                    if (shouldRenderSuggestions(_newValue2, REASON_ESCAPE_PRESSED)) {\n                      onSuggestionsFetchRequested({\n                        value: _newValue2,\n                        reason: REASON_ESCAPE_PRESSED\n                      });\n                    } else {\n                      _this3.onSuggestionsClearRequested();\n                    }\n                  }\n                } else {\n                  // Interacted with Up/Down\n                  _this3.maybeCallOnChange(event, valueBeforeUpDown, 'escape');\n                }\n\n                if (willCloseSuggestions) {\n                  _this3.onSuggestionsClearRequested();\n\n                  _this3.closeSuggestions();\n                } else {\n                  _this3.resetHighlightedSuggestion();\n                }\n\n                break;\n              }\n          }\n\n          _onKeyDown && _onKeyDown(event);\n        }\n      });\n\n      var renderSuggestionData = {\n        query: this.getQuery()\n      };\n      return /*#__PURE__*/_react[\"default\"].createElement(_Autowhatever[\"default\"], {\n        multiSection: multiSection,\n        items: items,\n        renderInputComponent: renderInputComponent,\n        renderItemsContainer: this.renderSuggestionsContainer,\n        renderItem: renderSuggestion,\n        renderItemData: renderSuggestionData,\n        renderSectionTitle: renderSectionTitle,\n        getSectionItems: getSectionSuggestions,\n        highlightedSectionIndex: highlightedSectionIndex,\n        highlightedItemIndex: highlightedSuggestionIndex,\n        containerProps: containerProps,\n        inputProps: autowhateverInputProps,\n        itemProps: this.itemProps,\n        theme: (0, _theme.mapToAutowhateverTheme)(theme),\n        id: id,\n        ref: this.storeAutowhateverRef\n      });\n    }\n  }]);\n\n  return Autosuggest;\n}(_react.Component);\n\nexports[\"default\"] = Autosuggest;\n\n_defineProperty(Autosuggest, \"propTypes\", {\n  suggestions: _propTypes[\"default\"].array.isRequired,\n  onSuggestionsFetchRequested: function onSuggestionsFetchRequested(props, propName) {\n    var onSuggestionsFetchRequested = props[propName];\n\n    if (typeof onSuggestionsFetchRequested !== 'function') {\n      throw new Error(\"'onSuggestionsFetchRequested' must be implemented. See: https://github.com/moroshko/react-autosuggest#onSuggestionsFetchRequestedProp\");\n    }\n  },\n  onSuggestionsClearRequested: function onSuggestionsClearRequested(props, propName) {\n    var onSuggestionsClearRequested = props[propName];\n\n    if (props.alwaysRenderSuggestions === false && typeof onSuggestionsClearRequested !== 'function') {\n      throw new Error(\"'onSuggestionsClearRequested' must be implemented. See: https://github.com/moroshko/react-autosuggest#onSuggestionsClearRequestedProp\");\n    }\n  },\n  shouldKeepSuggestionsOnSelect: _propTypes[\"default\"].func,\n  onSuggestionSelected: _propTypes[\"default\"].func,\n  onSuggestionHighlighted: _propTypes[\"default\"].func,\n  renderInputComponent: _propTypes[\"default\"].func,\n  renderSuggestionsContainer: _propTypes[\"default\"].func,\n  getSuggestionValue: _propTypes[\"default\"].func.isRequired,\n  renderSuggestion: _propTypes[\"default\"].func.isRequired,\n  inputProps: function inputProps(props, propName) {\n    var inputProps = props[propName];\n\n    if (!inputProps) {\n      throw new Error(\"'inputProps' must be passed.\");\n    }\n\n    if (!Object.prototype.hasOwnProperty.call(inputProps, 'value')) {\n      throw new Error(\"'inputProps' must have 'value'.\");\n    }\n\n    if (!Object.prototype.hasOwnProperty.call(inputProps, 'onChange')) {\n      throw new Error(\"'inputProps' must have 'onChange'.\");\n    }\n  },\n  shouldRenderSuggestions: _propTypes[\"default\"].func,\n  alwaysRenderSuggestions: _propTypes[\"default\"].bool,\n  multiSection: _propTypes[\"default\"].bool,\n  renderSectionTitle: function renderSectionTitle(props, propName) {\n    var renderSectionTitle = props[propName];\n\n    if (props.multiSection === true && typeof renderSectionTitle !== 'function') {\n      throw new Error(\"'renderSectionTitle' must be implemented. See: https://github.com/moroshko/react-autosuggest#renderSectionTitleProp\");\n    }\n  },\n  getSectionSuggestions: function getSectionSuggestions(props, propName) {\n    var getSectionSuggestions = props[propName];\n\n    if (props.multiSection === true && typeof getSectionSuggestions !== 'function') {\n      throw new Error(\"'getSectionSuggestions' must be implemented. See: https://github.com/moroshko/react-autosuggest#getSectionSuggestionsProp\");\n    }\n  },\n  focusInputOnSuggestionClick: _propTypes[\"default\"].bool,\n  highlightFirstSuggestion: _propTypes[\"default\"].bool,\n  theme: _propTypes[\"default\"].object,\n  id: _propTypes[\"default\"].string,\n  containerProps: _propTypes[\"default\"].object // Arbitrary container props\n\n});\n\n_defineProperty(Autosuggest, \"defaultProps\", {\n  renderSuggestionsContainer: defaultRenderSuggestionsContainer,\n  shouldRenderSuggestions: defaultShouldRenderSuggestions,\n  alwaysRenderSuggestions: false,\n  multiSection: false,\n  shouldKeepSuggestionsOnSelect: function shouldKeepSuggestionsOnSelect() {\n    return false;\n  },\n  focusInputOnSuggestionClick: true,\n  highlightFirstSuggestion: false,\n  theme: _theme.defaultTheme,\n  id: '1',\n  containerProps: {}\n});","'use strict';\n\nfunction shallowEqualArrays(arrA, arrB) {\n  if (arrA === arrB) {\n    return true;\n  }\n\n  if (!arrA || !arrB) {\n    return false;\n  }\n\n  var len = arrA.length;\n\n  if (arrB.length !== len) {\n    return false;\n  }\n\n  for (var i = 0; i < len; i++) {\n    if (arrA[i] !== arrB[i]) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nmodule.exports = shallowEqualArrays;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports[\"default\"] = void 0;\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _sectionIterator = _interopRequireDefault(require(\"section-iterator\"));\n\nvar _reactThemeable = _interopRequireDefault(require(\"react-themeable\"));\n\nvar _SectionTitle = _interopRequireDefault(require(\"./SectionTitle\"));\n\nvar _ItemList = _interopRequireDefault(require(\"./ItemList\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { \"default\": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj[\"default\"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(n); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar emptyObject = {};\n\nvar defaultRenderInputComponent = function defaultRenderInputComponent(props) {\n  return /*#__PURE__*/_react[\"default\"].createElement(\"input\", props);\n};\n\nvar defaultRenderItemsContainer = function defaultRenderItemsContainer(_ref) {\n  var containerProps = _ref.containerProps,\n      children = _ref.children;\n  return /*#__PURE__*/_react[\"default\"].createElement(\"div\", containerProps, children);\n};\n\nvar defaultTheme = {\n  container: 'react-autowhatever__container',\n  containerOpen: 'react-autowhatever__container--open',\n  input: 'react-autowhatever__input',\n  inputOpen: 'react-autowhatever__input--open',\n  inputFocused: 'react-autowhatever__input--focused',\n  itemsContainer: 'react-autowhatever__items-container',\n  itemsContainerOpen: 'react-autowhatever__items-container--open',\n  itemsList: 'react-autowhatever__items-list',\n  item: 'react-autowhatever__item',\n  itemFirst: 'react-autowhatever__item--first',\n  itemHighlighted: 'react-autowhatever__item--highlighted',\n  sectionContainer: 'react-autowhatever__section-container',\n  sectionContainerFirst: 'react-autowhatever__section-container--first',\n  sectionTitle: 'react-autowhatever__section-title'\n};\n\nvar Autowhatever = /*#__PURE__*/function (_Component) {\n  _inherits(Autowhatever, _Component);\n\n  var _super = _createSuper(Autowhatever);\n\n  function Autowhatever(props) {\n    var _this;\n\n    _classCallCheck(this, Autowhatever);\n\n    _this = _super.call(this, props);\n\n    _defineProperty(_assertThisInitialized(_this), \"storeInputReference\", function (input) {\n      if (input !== null) {\n        _this.input = input;\n      }\n\n      var userRef = _this.props.inputProps.ref;\n\n      if (userRef) {\n        if (typeof userRef === 'function') {\n          userRef(input);\n        } else if (_typeof(userRef) === 'object' && Object.prototype.hasOwnProperty.call(userRef, 'current')) {\n          userRef.current = input;\n        }\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"storeItemsContainerReference\", function (itemsContainer) {\n      if (itemsContainer !== null) {\n        _this.itemsContainer = itemsContainer;\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onHighlightedItemChange\", function (highlightedItem) {\n      _this.highlightedItem = highlightedItem;\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"getItemId\", function (sectionIndex, itemIndex) {\n      if (itemIndex === null) {\n        return null;\n      }\n\n      var id = _this.props.id;\n      var section = sectionIndex === null ? '' : \"section-\".concat(sectionIndex);\n      return \"react-autowhatever-\".concat(id, \"-\").concat(section, \"-item-\").concat(itemIndex);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onFocus\", function (event) {\n      var inputProps = _this.props.inputProps;\n\n      _this.setState({\n        isInputFocused: true\n      });\n\n      inputProps.onFocus && inputProps.onFocus(event);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onBlur\", function (event) {\n      var inputProps = _this.props.inputProps;\n\n      _this.setState({\n        isInputFocused: false\n      });\n\n      inputProps.onBlur && inputProps.onBlur(event);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onKeyDown\", function (event) {\n      var _this$props = _this.props,\n          inputProps = _this$props.inputProps,\n          highlightedSectionIndex = _this$props.highlightedSectionIndex,\n          highlightedItemIndex = _this$props.highlightedItemIndex;\n      var keyCode = event.keyCode;\n\n      switch (keyCode) {\n        case 40: // ArrowDown\n\n        case 38:\n          {\n            // ArrowUp\n            var nextPrev = keyCode === 40 ? 'next' : 'prev';\n\n            var _this$sectionIterator = _this.sectionIterator[nextPrev]([highlightedSectionIndex, highlightedItemIndex]),\n                _this$sectionIterator2 = _slicedToArray(_this$sectionIterator, 2),\n                newHighlightedSectionIndex = _this$sectionIterator2[0],\n                newHighlightedItemIndex = _this$sectionIterator2[1];\n\n            inputProps.onKeyDown(event, {\n              newHighlightedSectionIndex: newHighlightedSectionIndex,\n              newHighlightedItemIndex: newHighlightedItemIndex\n            });\n            break;\n          }\n\n        default:\n          inputProps.onKeyDown(event, {\n            highlightedSectionIndex: highlightedSectionIndex,\n            highlightedItemIndex: highlightedItemIndex\n          });\n      }\n    });\n\n    _this.highlightedItem = null;\n    _this.state = {\n      isInputFocused: false\n    };\n\n    _this.setSectionsItems(props);\n\n    _this.setSectionIterator(props);\n\n    _this.setTheme(props);\n\n    return _this;\n  }\n\n  _createClass(Autowhatever, [{\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      this.ensureHighlightedItemIsVisible();\n    } // eslint-disable-next-line camelcase, react/sort-comp\n\n  }, {\n    key: \"UNSAFE_componentWillReceiveProps\",\n    value: function UNSAFE_componentWillReceiveProps(nextProps) {\n      if (nextProps.items !== this.props.items) {\n        this.setSectionsItems(nextProps);\n      }\n\n      if (nextProps.items !== this.props.items || nextProps.multiSection !== this.props.multiSection) {\n        this.setSectionIterator(nextProps);\n      }\n\n      if (nextProps.theme !== this.props.theme) {\n        this.setTheme(nextProps);\n      }\n    }\n  }, {\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate() {\n      this.ensureHighlightedItemIsVisible();\n    }\n  }, {\n    key: \"setSectionsItems\",\n    value: function setSectionsItems(props) {\n      if (props.multiSection) {\n        this.sectionsItems = props.items.map(function (section) {\n          return props.getSectionItems(section);\n        });\n        this.sectionsLengths = this.sectionsItems.map(function (items) {\n          return items.length;\n        });\n        this.allSectionsAreEmpty = this.sectionsLengths.every(function (itemsCount) {\n          return itemsCount === 0;\n        });\n      }\n    }\n  }, {\n    key: \"setSectionIterator\",\n    value: function setSectionIterator(props) {\n      this.sectionIterator = (0, _sectionIterator[\"default\"])({\n        multiSection: props.multiSection,\n        data: props.multiSection ? this.sectionsLengths : props.items.length\n      });\n    }\n  }, {\n    key: \"setTheme\",\n    value: function setTheme(props) {\n      this.theme = (0, _reactThemeable[\"default\"])(props.theme);\n    }\n  }, {\n    key: \"renderSections\",\n    value: function renderSections() {\n      var _this2 = this;\n\n      if (this.allSectionsAreEmpty) {\n        return null;\n      }\n\n      var theme = this.theme;\n      var _this$props2 = this.props,\n          id = _this$props2.id,\n          items = _this$props2.items,\n          renderItem = _this$props2.renderItem,\n          renderItemData = _this$props2.renderItemData,\n          renderSectionTitle = _this$props2.renderSectionTitle,\n          highlightedSectionIndex = _this$props2.highlightedSectionIndex,\n          highlightedItemIndex = _this$props2.highlightedItemIndex,\n          itemProps = _this$props2.itemProps;\n      return items.map(function (section, sectionIndex) {\n        var keyPrefix = \"react-autowhatever-\".concat(id, \"-\");\n        var sectionKeyPrefix = \"\".concat(keyPrefix, \"section-\").concat(sectionIndex, \"-\");\n        var isFirstSection = sectionIndex === 0; // `key` is provided by theme()\n\n        /* eslint-disable react/jsx-key */\n\n        return /*#__PURE__*/_react[\"default\"].createElement(\"div\", theme(\"\".concat(sectionKeyPrefix, \"container\"), 'sectionContainer', isFirstSection && 'sectionContainerFirst'), /*#__PURE__*/_react[\"default\"].createElement(_SectionTitle[\"default\"], {\n          section: section,\n          renderSectionTitle: renderSectionTitle,\n          theme: theme,\n          sectionKeyPrefix: sectionKeyPrefix\n        }), /*#__PURE__*/_react[\"default\"].createElement(_ItemList[\"default\"], {\n          items: _this2.sectionsItems[sectionIndex],\n          itemProps: itemProps,\n          renderItem: renderItem,\n          renderItemData: renderItemData,\n          sectionIndex: sectionIndex,\n          highlightedItemIndex: highlightedSectionIndex === sectionIndex ? highlightedItemIndex : null,\n          onHighlightedItemChange: _this2.onHighlightedItemChange,\n          getItemId: _this2.getItemId,\n          theme: theme,\n          keyPrefix: keyPrefix,\n          ref: _this2.storeItemsListReference\n        }));\n        /* eslint-enable react/jsx-key */\n      });\n    }\n  }, {\n    key: \"renderItems\",\n    value: function renderItems() {\n      var items = this.props.items;\n\n      if (items.length === 0) {\n        return null;\n      }\n\n      var theme = this.theme;\n      var _this$props3 = this.props,\n          id = _this$props3.id,\n          renderItem = _this$props3.renderItem,\n          renderItemData = _this$props3.renderItemData,\n          highlightedSectionIndex = _this$props3.highlightedSectionIndex,\n          highlightedItemIndex = _this$props3.highlightedItemIndex,\n          itemProps = _this$props3.itemProps;\n      return /*#__PURE__*/_react[\"default\"].createElement(_ItemList[\"default\"], {\n        items: items,\n        itemProps: itemProps,\n        renderItem: renderItem,\n        renderItemData: renderItemData,\n        highlightedItemIndex: highlightedSectionIndex === null ? highlightedItemIndex : null,\n        onHighlightedItemChange: this.onHighlightedItemChange,\n        getItemId: this.getItemId,\n        theme: theme,\n        keyPrefix: \"react-autowhatever-\".concat(id, \"-\")\n      });\n    }\n  }, {\n    key: \"ensureHighlightedItemIsVisible\",\n    value: function ensureHighlightedItemIsVisible() {\n      var highlightedItem = this.highlightedItem;\n\n      if (!highlightedItem) {\n        return;\n      }\n\n      var itemsContainer = this.itemsContainer;\n      var itemOffsetRelativeToContainer = highlightedItem.offsetParent === itemsContainer ? highlightedItem.offsetTop : highlightedItem.offsetTop - itemsContainer.offsetTop;\n      var scrollTop = itemsContainer.scrollTop; // Top of the visible area\n\n      if (itemOffsetRelativeToContainer < scrollTop) {\n        // Item is off the top of the visible area\n        scrollTop = itemOffsetRelativeToContainer;\n      } else if (itemOffsetRelativeToContainer + highlightedItem.offsetHeight > scrollTop + itemsContainer.offsetHeight) {\n        // Item is off the bottom of the visible area\n        scrollTop = itemOffsetRelativeToContainer + highlightedItem.offsetHeight - itemsContainer.offsetHeight;\n      }\n\n      if (scrollTop !== itemsContainer.scrollTop) {\n        itemsContainer.scrollTop = scrollTop;\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var theme = this.theme;\n      var _this$props4 = this.props,\n          id = _this$props4.id,\n          multiSection = _this$props4.multiSection,\n          renderInputComponent = _this$props4.renderInputComponent,\n          renderItemsContainer = _this$props4.renderItemsContainer,\n          highlightedSectionIndex = _this$props4.highlightedSectionIndex,\n          highlightedItemIndex = _this$props4.highlightedItemIndex;\n      var isInputFocused = this.state.isInputFocused;\n      var renderedItems = multiSection ? this.renderSections() : this.renderItems();\n      var isOpen = renderedItems !== null;\n      var ariaActivedescendant = this.getItemId(highlightedSectionIndex, highlightedItemIndex);\n      var itemsContainerId = \"react-autowhatever-\".concat(id);\n\n      var containerProps = _objectSpread({\n        role: 'combobox',\n        'aria-haspopup': 'listbox',\n        'aria-owns': itemsContainerId,\n        'aria-expanded': isOpen\n      }, theme(\"react-autowhatever-\".concat(id, \"-container\"), 'container', isOpen && 'containerOpen'), {}, this.props.containerProps);\n\n      var inputComponent = renderInputComponent(_objectSpread({\n        type: 'text',\n        value: '',\n        autoComplete: 'off',\n        'aria-autocomplete': 'list',\n        'aria-controls': itemsContainerId,\n        'aria-activedescendant': ariaActivedescendant\n      }, theme(\"react-autowhatever-\".concat(id, \"-input\"), 'input', isOpen && 'inputOpen', isInputFocused && 'inputFocused'), {}, this.props.inputProps, {\n        onFocus: this.onFocus,\n        onBlur: this.onBlur,\n        onKeyDown: this.props.inputProps.onKeyDown && this.onKeyDown,\n        ref: this.storeInputReference\n      }));\n      var itemsContainer = renderItemsContainer({\n        containerProps: _objectSpread({\n          id: itemsContainerId,\n          role: 'listbox'\n        }, theme(\"react-autowhatever-\".concat(id, \"-items-container\"), 'itemsContainer', isOpen && 'itemsContainerOpen'), {\n          ref: this.storeItemsContainerReference\n        }),\n        children: renderedItems\n      });\n      return /*#__PURE__*/_react[\"default\"].createElement(\"div\", containerProps, inputComponent, itemsContainer);\n    }\n  }]);\n\n  return Autowhatever;\n}(_react.Component);\n\nexports[\"default\"] = Autowhatever;\n\n_defineProperty(Autowhatever, \"propTypes\", {\n  id: _propTypes[\"default\"].string,\n  // Used in aria-* attributes. If multiple Autowhatever's are rendered on a page, they must have unique ids.\n  multiSection: _propTypes[\"default\"].bool,\n  // Indicates whether a multi section layout should be rendered.\n  renderInputComponent: _propTypes[\"default\"].func,\n  // When specified, it is used to render the input element.\n  renderItemsContainer: _propTypes[\"default\"].func,\n  // Renders the items container.\n  items: _propTypes[\"default\"].array.isRequired,\n  // Array of items or sections to render.\n  renderItem: _propTypes[\"default\"].func,\n  // This function renders a single item.\n  renderItemData: _propTypes[\"default\"].object,\n  // Arbitrary data that will be passed to renderItem()\n  renderSectionTitle: _propTypes[\"default\"].func,\n  // This function gets a section and renders its title.\n  getSectionItems: _propTypes[\"default\"].func,\n  // This function gets a section and returns its items, which will be passed into `renderItem` for rendering.\n  containerProps: _propTypes[\"default\"].object,\n  // Arbitrary container props\n  inputProps: _propTypes[\"default\"].object,\n  // Arbitrary input props\n  itemProps: _propTypes[\"default\"].oneOfType([// Arbitrary item props\n  _propTypes[\"default\"].object, _propTypes[\"default\"].func]),\n  highlightedSectionIndex: _propTypes[\"default\"].number,\n  // Section index of the highlighted item\n  highlightedItemIndex: _propTypes[\"default\"].number,\n  // Highlighted item index (within a section)\n  theme: _propTypes[\"default\"].oneOfType([// Styles. See: https://github.com/markdalgleish/react-themeable\n  _propTypes[\"default\"].object, _propTypes[\"default\"].array])\n});\n\n_defineProperty(Autowhatever, \"defaultProps\", {\n  id: '1',\n  multiSection: false,\n  renderInputComponent: defaultRenderInputComponent,\n  renderItemsContainer: defaultRenderItemsContainer,\n  renderItem: function renderItem() {\n    throw new Error('`renderItem` must be provided');\n  },\n  renderItemData: emptyObject,\n  renderSectionTitle: function renderSectionTitle() {\n    throw new Error('`renderSectionTitle` must be provided');\n  },\n  getSectionItems: function getSectionItems() {\n    throw new Error('`getSectionItems` must be provided');\n  },\n  containerProps: emptyObject,\n  inputProps: emptyObject,\n  itemProps: emptyObject,\n  highlightedSectionIndex: null,\n  highlightedItemIndex: null,\n  theme: defaultTheme\n});","\"use strict\";\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nmodule.exports = function (_ref) {\n  var data = _ref.data;\n  var multiSection = _ref.multiSection;\n\n  function nextNonEmptySectionIndex(sectionIndex) {\n    if (sectionIndex === null) {\n      sectionIndex = 0;\n    } else {\n      sectionIndex++;\n    }\n\n    while (sectionIndex < data.length && data[sectionIndex] === 0) {\n      sectionIndex++;\n    }\n\n    return sectionIndex === data.length ? null : sectionIndex;\n  }\n\n  function prevNonEmptySectionIndex(sectionIndex) {\n    if (sectionIndex === null) {\n      sectionIndex = data.length - 1;\n    } else {\n      sectionIndex--;\n    }\n\n    while (sectionIndex >= 0 && data[sectionIndex] === 0) {\n      sectionIndex--;\n    }\n\n    return sectionIndex === -1 ? null : sectionIndex;\n  }\n\n  function next(position) {\n    var _position = _slicedToArray(position, 2);\n\n    var sectionIndex = _position[0];\n    var itemIndex = _position[1];\n\n\n    if (multiSection) {\n      if (itemIndex === null || itemIndex === data[sectionIndex] - 1) {\n        sectionIndex = nextNonEmptySectionIndex(sectionIndex);\n\n        if (sectionIndex === null) {\n          return [null, null];\n        }\n\n        return [sectionIndex, 0];\n      }\n\n      return [sectionIndex, itemIndex + 1];\n    }\n\n    if (data === 0 || itemIndex === data - 1) {\n      return [null, null];\n    }\n\n    if (itemIndex === null) {\n      return [null, 0];\n    }\n\n    return [null, itemIndex + 1];\n  }\n\n  function prev(position) {\n    var _position2 = _slicedToArray(position, 2);\n\n    var sectionIndex = _position2[0];\n    var itemIndex = _position2[1];\n\n\n    if (multiSection) {\n      if (itemIndex === null || itemIndex === 0) {\n        sectionIndex = prevNonEmptySectionIndex(sectionIndex);\n\n        if (sectionIndex === null) {\n          return [null, null];\n        }\n\n        return [sectionIndex, data[sectionIndex] - 1];\n      }\n\n      return [sectionIndex, itemIndex - 1];\n    }\n\n    if (data === 0 || itemIndex === 0) {\n      return [null, null];\n    }\n\n    if (itemIndex === null) {\n      return [null, data - 1];\n    }\n\n    return [null, itemIndex - 1];\n  }\n\n  function isLast(position) {\n    return next(position)[1] === null;\n  }\n\n  return {\n    next: next,\n    prev: prev,\n    isLast: isLast\n  };\n};\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true\n});\n\nvar _slicedToArray = (function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i['return']) _i['return'](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError('Invalid attempt to destructure non-iterable instance'); } }; })();\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; return arr2; } else { return Array.from(arr); } }\n\nvar _objectAssign = require('object-assign');\n\nvar _objectAssign2 = _interopRequireDefault(_objectAssign);\n\nvar truthy = function truthy(x) {\n  return x;\n};\n\nexports['default'] = function (input) {\n  var _ref = Array.isArray(input) && input.length === 2 ? input : [input, null];\n\n  var _ref2 = _slicedToArray(_ref, 2);\n\n  var theme = _ref2[0];\n  var classNameDecorator = _ref2[1];\n\n  return function (key) {\n    for (var _len = arguments.length, names = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      names[_key - 1] = arguments[_key];\n    }\n\n    var styles = names.map(function (name) {\n      return theme[name];\n    }).filter(truthy);\n\n    return typeof styles[0] === 'string' || typeof classNameDecorator === 'function' ? { key: key, className: classNameDecorator ? classNameDecorator.apply(undefined, _toConsumableArray(styles)) : styles.join(' ') } : { key: key, style: _objectAssign2['default'].apply(undefined, [{}].concat(_toConsumableArray(styles))) };\n  };\n};\n\nmodule.exports = exports['default'];","'use strict';\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction ToObject(val) {\n\tif (val == null) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction ownEnumerableKeys(obj) {\n\tvar keys = Object.getOwnPropertyNames(obj);\n\n\tif (Object.getOwnPropertySymbols) {\n\t\tkeys = keys.concat(Object.getOwnPropertySymbols(obj));\n\t}\n\n\treturn keys.filter(function (key) {\n\t\treturn propIsEnumerable.call(obj, key);\n\t});\n}\n\nmodule.exports = Object.assign || function (target, source) {\n\tvar from;\n\tvar keys;\n\tvar to = ToObject(target);\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = arguments[s];\n\t\tkeys = ownEnumerableKeys(Object(from));\n\n\t\tfor (var i = 0; i < keys.length; i++) {\n\t\t\tto[keys[i]] = from[keys[i]];\n\t\t}\n\t}\n\n\treturn to;\n};\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports[\"default\"] = void 0;\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _compareObjects = _interopRequireDefault(require(\"./compareObjects\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { \"default\": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj[\"default\"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar SectionTitle = /*#__PURE__*/function (_Component) {\n  _inherits(SectionTitle, _Component);\n\n  var _super = _createSuper(SectionTitle);\n\n  function SectionTitle() {\n    _classCallCheck(this, SectionTitle);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(SectionTitle, [{\n    key: \"shouldComponentUpdate\",\n    value: function shouldComponentUpdate(nextProps) {\n      return (0, _compareObjects[\"default\"])(nextProps, this.props);\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this$props = this.props,\n          section = _this$props.section,\n          renderSectionTitle = _this$props.renderSectionTitle,\n          theme = _this$props.theme,\n          sectionKeyPrefix = _this$props.sectionKeyPrefix;\n      var sectionTitle = renderSectionTitle(section);\n\n      if (!sectionTitle) {\n        return null;\n      }\n\n      return /*#__PURE__*/_react[\"default\"].createElement(\"div\", theme(\"\".concat(sectionKeyPrefix, \"title\"), 'sectionTitle'), sectionTitle);\n    }\n  }]);\n\n  return SectionTitle;\n}(_react.Component);\n\nexports[\"default\"] = SectionTitle;\n\n_defineProperty(SectionTitle, \"propTypes\", {\n  section: _propTypes[\"default\"].any.isRequired,\n  renderSectionTitle: _propTypes[\"default\"].func.isRequired,\n  theme: _propTypes[\"default\"].func.isRequired,\n  sectionKeyPrefix: _propTypes[\"default\"].string.isRequired\n});","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports[\"default\"] = void 0;\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _Item = _interopRequireDefault(require(\"./Item\"));\n\nvar _compareObjects = _interopRequireDefault(require(\"./compareObjects\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { \"default\": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj[\"default\"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar ItemsList = /*#__PURE__*/function (_Component) {\n  _inherits(ItemsList, _Component);\n\n  var _super = _createSuper(ItemsList);\n\n  function ItemsList() {\n    var _this;\n\n    _classCallCheck(this, ItemsList);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n\n    _defineProperty(_assertThisInitialized(_this), \"storeHighlightedItemReference\", function (highlightedItem) {\n      _this.props.onHighlightedItemChange(highlightedItem === null ? null : highlightedItem.item);\n    });\n\n    return _this;\n  }\n\n  _createClass(ItemsList, [{\n    key: \"shouldComponentUpdate\",\n    value: function shouldComponentUpdate(nextProps) {\n      return (0, _compareObjects[\"default\"])(nextProps, this.props, ['itemProps']);\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this2 = this;\n\n      var _this$props = this.props,\n          items = _this$props.items,\n          itemProps = _this$props.itemProps,\n          renderItem = _this$props.renderItem,\n          renderItemData = _this$props.renderItemData,\n          sectionIndex = _this$props.sectionIndex,\n          highlightedItemIndex = _this$props.highlightedItemIndex,\n          getItemId = _this$props.getItemId,\n          theme = _this$props.theme,\n          keyPrefix = _this$props.keyPrefix;\n      var sectionPrefix = sectionIndex === null ? keyPrefix : \"\".concat(keyPrefix, \"section-\").concat(sectionIndex, \"-\");\n      var isItemPropsFunction = typeof itemProps === 'function';\n      return /*#__PURE__*/_react[\"default\"].createElement(\"ul\", _extends({\n        role: \"listbox\"\n      }, theme(\"\".concat(sectionPrefix, \"items-list\"), 'itemsList')), items.map(function (item, itemIndex) {\n        var isFirst = itemIndex === 0;\n        var isHighlighted = itemIndex === highlightedItemIndex;\n        var itemKey = \"\".concat(sectionPrefix, \"item-\").concat(itemIndex);\n        var itemPropsObj = isItemPropsFunction ? itemProps({\n          sectionIndex: sectionIndex,\n          itemIndex: itemIndex\n        }) : itemProps;\n\n        var allItemProps = _objectSpread({\n          id: getItemId(sectionIndex, itemIndex),\n          'aria-selected': isHighlighted\n        }, theme(itemKey, 'item', isFirst && 'itemFirst', isHighlighted && 'itemHighlighted'), {}, itemPropsObj);\n\n        if (isHighlighted) {\n          allItemProps.ref = _this2.storeHighlightedItemReference;\n        } // `key` is provided by theme()\n\n        /* eslint-disable react/jsx-key */\n\n\n        return /*#__PURE__*/_react[\"default\"].createElement(_Item[\"default\"], _extends({}, allItemProps, {\n          sectionIndex: sectionIndex,\n          isHighlighted: isHighlighted,\n          itemIndex: itemIndex,\n          item: item,\n          renderItem: renderItem,\n          renderItemData: renderItemData\n        }));\n        /* eslint-enable react/jsx-key */\n      }));\n    }\n  }]);\n\n  return ItemsList;\n}(_react.Component);\n\nexports[\"default\"] = ItemsList;\n\n_defineProperty(ItemsList, \"propTypes\", {\n  items: _propTypes[\"default\"].array.isRequired,\n  itemProps: _propTypes[\"default\"].oneOfType([_propTypes[\"default\"].object, _propTypes[\"default\"].func]),\n  renderItem: _propTypes[\"default\"].func.isRequired,\n  renderItemData: _propTypes[\"default\"].object.isRequired,\n  sectionIndex: _propTypes[\"default\"].number,\n  highlightedItemIndex: _propTypes[\"default\"].number,\n  onHighlightedItemChange: _propTypes[\"default\"].func.isRequired,\n  getItemId: _propTypes[\"default\"].func.isRequired,\n  theme: _propTypes[\"default\"].func.isRequired,\n  keyPrefix: _propTypes[\"default\"].string.isRequired\n});\n\n_defineProperty(ItemsList, \"defaultProps\", {\n  sectionIndex: null\n});","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports[\"default\"] = void 0;\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _compareObjects = _interopRequireDefault(require(\"./compareObjects\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { \"default\": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj[\"default\"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar Item = /*#__PURE__*/function (_Component) {\n  _inherits(Item, _Component);\n\n  var _super = _createSuper(Item);\n\n  function Item() {\n    var _this;\n\n    _classCallCheck(this, Item);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n\n    _defineProperty(_assertThisInitialized(_this), \"storeItemReference\", function (item) {\n      if (item !== null) {\n        _this.item = item;\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onMouseEnter\", function (event) {\n      var _this$props = _this.props,\n          sectionIndex = _this$props.sectionIndex,\n          itemIndex = _this$props.itemIndex;\n\n      _this.props.onMouseEnter(event, {\n        sectionIndex: sectionIndex,\n        itemIndex: itemIndex\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onMouseLeave\", function (event) {\n      var _this$props2 = _this.props,\n          sectionIndex = _this$props2.sectionIndex,\n          itemIndex = _this$props2.itemIndex;\n\n      _this.props.onMouseLeave(event, {\n        sectionIndex: sectionIndex,\n        itemIndex: itemIndex\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onMouseDown\", function (event) {\n      var _this$props3 = _this.props,\n          sectionIndex = _this$props3.sectionIndex,\n          itemIndex = _this$props3.itemIndex;\n\n      _this.props.onMouseDown(event, {\n        sectionIndex: sectionIndex,\n        itemIndex: itemIndex\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onClick\", function (event) {\n      var _this$props4 = _this.props,\n          sectionIndex = _this$props4.sectionIndex,\n          itemIndex = _this$props4.itemIndex;\n\n      _this.props.onClick(event, {\n        sectionIndex: sectionIndex,\n        itemIndex: itemIndex\n      });\n    });\n\n    return _this;\n  }\n\n  _createClass(Item, [{\n    key: \"shouldComponentUpdate\",\n    value: function shouldComponentUpdate(nextProps) {\n      return (0, _compareObjects[\"default\"])(nextProps, this.props, ['renderItemData']);\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this$props5 = this.props,\n          isHighlighted = _this$props5.isHighlighted,\n          item = _this$props5.item,\n          renderItem = _this$props5.renderItem,\n          renderItemData = _this$props5.renderItemData,\n          restProps = _objectWithoutProperties(_this$props5, [\"isHighlighted\", \"item\", \"renderItem\", \"renderItemData\"]);\n\n      delete restProps.sectionIndex;\n      delete restProps.itemIndex;\n\n      if (typeof restProps.onMouseEnter === 'function') {\n        restProps.onMouseEnter = this.onMouseEnter;\n      }\n\n      if (typeof restProps.onMouseLeave === 'function') {\n        restProps.onMouseLeave = this.onMouseLeave;\n      }\n\n      if (typeof restProps.onMouseDown === 'function') {\n        restProps.onMouseDown = this.onMouseDown;\n      }\n\n      if (typeof restProps.onClick === 'function') {\n        restProps.onClick = this.onClick;\n      }\n\n      return /*#__PURE__*/_react[\"default\"].createElement(\"li\", _extends({\n        role: \"option\"\n      }, restProps, {\n        ref: this.storeItemReference\n      }), renderItem(item, _objectSpread({\n        isHighlighted: isHighlighted\n      }, renderItemData)));\n    }\n  }]);\n\n  return Item;\n}(_react.Component);\n\nexports[\"default\"] = Item;\n\n_defineProperty(Item, \"propTypes\", {\n  sectionIndex: _propTypes[\"default\"].number,\n  isHighlighted: _propTypes[\"default\"].bool.isRequired,\n  itemIndex: _propTypes[\"default\"].number.isRequired,\n  item: _propTypes[\"default\"].any.isRequired,\n  renderItem: _propTypes[\"default\"].func.isRequired,\n  renderItemData: _propTypes[\"default\"].object.isRequired,\n  onMouseEnter: _propTypes[\"default\"].func,\n  onMouseLeave: _propTypes[\"default\"].func,\n  onMouseDown: _propTypes[\"default\"].func,\n  onClick: _propTypes[\"default\"].func\n});","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.mapToAutowhateverTheme = exports.defaultTheme = void 0;\nvar defaultTheme = {\n  container: 'react-autosuggest__container',\n  containerOpen: 'react-autosuggest__container--open',\n  input: 'react-autosuggest__input',\n  inputOpen: 'react-autosuggest__input--open',\n  inputFocused: 'react-autosuggest__input--focused',\n  suggestionsContainer: 'react-autosuggest__suggestions-container',\n  suggestionsContainerOpen: 'react-autosuggest__suggestions-container--open',\n  suggestionsList: 'react-autosuggest__suggestions-list',\n  suggestion: 'react-autosuggest__suggestion',\n  suggestionFirst: 'react-autosuggest__suggestion--first',\n  suggestionHighlighted: 'react-autosuggest__suggestion--highlighted',\n  sectionContainer: 'react-autosuggest__section-container',\n  sectionContainerFirst: 'react-autosuggest__section-container--first',\n  sectionTitle: 'react-autosuggest__section-title'\n};\nexports.defaultTheme = defaultTheme;\n\nvar mapToAutowhateverTheme = function mapToAutowhateverTheme(theme) {\n  var result = {};\n\n  for (var key in theme) {\n    switch (key) {\n      case 'suggestionsContainer':\n        result['itemsContainer'] = theme[key];\n        break;\n\n      case 'suggestionsContainerOpen':\n        result['itemsContainerOpen'] = theme[key];\n        break;\n\n      case 'suggestion':\n        result['item'] = theme[key];\n        break;\n\n      case 'suggestionFirst':\n        result['itemFirst'] = theme[key];\n        break;\n\n      case 'suggestionHighlighted':\n        result['itemHighlighted'] = theme[key];\n        break;\n\n      case 'suggestionsList':\n        result['itemsList'] = theme[key];\n        break;\n\n      default:\n        result[key] = theme[key];\n    }\n  }\n\n  return result;\n};\n\nexports.mapToAutowhateverTheme = mapToAutowhateverTheme;","function _objectWithoutPropertiesLoose(source, excluded) {\n  if (source == null) return {};\n  var target = {};\n  var sourceKeys = Object.keys(source);\n  var key, i;\n\n  for (i = 0; i < sourceKeys.length; i++) {\n    key = sourceKeys[i];\n    if (excluded.indexOf(key) >= 0) continue;\n    target[key] = source[key];\n  }\n\n  return target;\n}\n\nmodule.exports = _objectWithoutPropertiesLoose;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","import React, { useRef, useState, useEffect } from 'react';\nimport * as d3 from 'd3-time-format';\nimport Button from '@financial-times/g-components/button';\nimport Loading from '@financial-times/g-components/loading';\nimport Icon from '@financial-times/g-components/icon';\nimport DatePickerInput from '../date-picker-input';\nimport { getDateNDaysAgo, getReadableDateFormat } from '../date-picker-input/helpers';\nimport './styles.scss';\n\nconst DatePicker = ({\n  minDate,\n  maxDate,\n  selectedStartDate,\n  selectedEndDate,\n  updateDateRange,\n  inputDateFormat,\n  storedDateFormat,\n  isDateRange,\n  labelText,\n  onApplyCallback,\n  loadingTime = 100,\n  error,\n  setError,\n}) => {\n  const [loading, setLoading] = useState(false);\n  const [supportsDateType, setSupportsDateType] = useState(true);\n\n  const [fallbackStartDate, setFallbackStartDate] = useState(selectedStartDate);\n  const [fallbackEndDate, setFallbackEndDate] = useState(selectedEndDate);\n\n  const startDateRef = useRef();\n  const endDateRef = useRef();\n\n  const inputDateParser = d3.timeParse(inputDateFormat);\n  const storedDateFormatter = d3.timeFormat(storedDateFormat); // For query params\n\n  // The max date for the start date input should change if the end date input is updated\n  const minDateInputMaxDate = isDateRange ? fallbackEndDate : maxDate;\n  const readableDateFormat = getReadableDateFormat();\n\n  const weekBeforeMaxDate = getDateNDaysAgo(minDateInputMaxDate, 7);\n\n  useEffect(() => {\n    let timer;\n\n    if (loading && loadingTime > 0) {\n      timer = setTimeout(() => {\n        setLoading(false);\n        if (loading.endDate) {\n          updateDateRange(loading.startDate, loading.endDate);\n        } else {\n          updateDateRange(loading.startDate);\n        }\n        setError({ state: 'default', message: '' });\n        onApplyCallback();\n      }, loadingTime); // Defaults to 100ms\n    }\n\n    return () => {\n      clearTimeout(timer);\n    };\n  }, [loading]);\n\n  return (\n    <React.Fragment>\n      <div className=\"options-panel__row-item-label\">\n        {labelText}\n        {supportsDateType && (\n          <div className=\"options-panel__row-item-label-subhead\">({readableDateFormat})</div>\n        )}\n      </div>\n      <div\n        className={`options-panel__date-picker${\n          error.state === 'error'\n            ? ' options-panel__date-picker--error'\n            : ' options-panel__date-picker--default'\n        }`}\n      >\n        <DatePickerInput\n          minDate={minDate}\n          maxDate={minDateInputMaxDate}\n          selectedDate={selectedStartDate}\n          fallbackDate={fallbackStartDate}\n          inputDateFormat={inputDateFormat}\n          inputRef={startDateRef}\n          setFallbackDate={setFallbackStartDate}\n          supportsDateType={supportsDateType}\n          setSupportsDateType={setSupportsDateType}\n        />\n        {isDateRange && (\n          <DatePickerInput\n            minDate={fallbackStartDate}\n            maxDate={maxDate}\n            selectedDate={selectedEndDate}\n            fallbackDate={fallbackEndDate}\n            inputDateFormat={inputDateFormat}\n            inputRef={endDateRef}\n            setFallbackDate={setFallbackEndDate}\n            supportsDateType={supportsDateType}\n            setSupportsDateType={setSupportsDateType}\n          />\n        )}\n        <Button\n          className=\"date-picker-submit\"\n          big\n          type=\"primary\"\n          onClick={() => {\n            const parsedStartDate = supportsDateType\n              ? inputDateParser(startDateRef.current.value)\n              : fallbackStartDate;\n            const formattedStartDate = storedDateFormatter(parsedStartDate);\n\n            if (isDateRange) {\n              const parsedEndDate = supportsDateType\n                ? inputDateParser(endDateRef.current.value)\n                : fallbackEndDate;\n              const formattedEndDate = storedDateFormatter(parsedEndDate);\n\n              // Pass callback to run\n              setLoading({ startDate: formattedStartDate, endDate: formattedEndDate });\n              // If start date didn't parse properly because of manual data entry\n            } else if (!parsedStartDate) {\n              setError({ state: 'error', message: 'Please enter a valid date' });\n              // If new date within acceptable range\n            } else if (parsedStartDate <= weekBeforeMaxDate && parsedStartDate >= minDate) {\n              // Pass callback to run\n              setLoading({ startDate: formattedStartDate });\n            } else {\n              const errorMessage =\n                parsedStartDate > weekBeforeMaxDate\n                  ? 'Date must be 7 days before latest date'\n                  : `Date must be after ${d3.timeFormat('%b %-d %Y')(minDate)}`;\n              setError({\n                state: 'error',\n                message: errorMessage,\n              });\n            }\n          }}\n        >\n          Apply\n          {loading ? (\n            <div className=\"date-picker-submit__loading\">\n              <Loading size=\"small\" />\n            </div>\n          ) : null}\n        </Button>\n      </div>\n      {error.message && (\n        <div\n          className={`options-panel__date-picker-message options-panel__date-picker-message--${error.state}`}\n        >\n          {error.state === 'error' && <Icon iconName=\"warning-alt\" iconColor=\"#cc0000\" />}\n          {error.message}\n        </div>\n      )}\n    </React.Fragment>\n  );\n};\n\nexport default DatePicker;\n","//! moment-timezone.js\n//! version : 0.5.34\n//! Copyright (c) JS Foundation and other contributors\n//! license : MIT\n//! github.com/moment/moment-timezone\n\n(function (root, factory) {\n\t\"use strict\";\n\n\t/*global define*/\n\tif (typeof module === 'object' && module.exports) {\n\t\tmodule.exports = factory(require('moment')); // Node\n\t} else if (typeof define === 'function' && define.amd) {\n\t\tdefine(['moment'], factory);                 // AMD\n\t} else {\n\t\tfactory(root.moment);                        // Browser\n\t}\n}(this, function (moment) {\n\t\"use strict\";\n\n\t// Resolves es6 module loading issue\n\tif (moment.version === undefined && moment.default) {\n\t\tmoment = moment.default;\n\t}\n\n\t// Do not load moment-timezone a second time.\n\t// if (moment.tz !== undefined) {\n\t// \tlogError('Moment Timezone ' + moment.tz.version + ' was already loaded ' + (moment.tz.dataVersion ? 'with data from ' : 'without any data') + moment.tz.dataVersion);\n\t// \treturn moment;\n\t// }\n\n\tvar VERSION = \"0.5.34\",\n\t\tzones = {},\n\t\tlinks = {},\n\t\tcountries = {},\n\t\tnames = {},\n\t\tguesses = {},\n\t\tcachedGuess;\n\n\tif (!moment || typeof moment.version !== 'string') {\n\t\tlogError('Moment Timezone requires Moment.js. See https://momentjs.com/timezone/docs/#/use-it/browser/');\n\t}\n\n\tvar momentVersion = moment.version.split('.'),\n\t\tmajor = +momentVersion[0],\n\t\tminor = +momentVersion[1];\n\n\t// Moment.js version check\n\tif (major < 2 || (major === 2 && minor < 6)) {\n\t\tlogError('Moment Timezone requires Moment.js >= 2.6.0. You are using Moment.js ' + moment.version + '. See momentjs.com');\n\t}\n\n\t/************************************\n\t\tUnpacking\n\t************************************/\n\n\tfunction charCodeToInt(charCode) {\n\t\tif (charCode > 96) {\n\t\t\treturn charCode - 87;\n\t\t} else if (charCode > 64) {\n\t\t\treturn charCode - 29;\n\t\t}\n\t\treturn charCode - 48;\n\t}\n\n\tfunction unpackBase60(string) {\n\t\tvar i = 0,\n\t\t\tparts = string.split('.'),\n\t\t\twhole = parts[0],\n\t\t\tfractional = parts[1] || '',\n\t\t\tmultiplier = 1,\n\t\t\tnum,\n\t\t\tout = 0,\n\t\t\tsign = 1;\n\n\t\t// handle negative numbers\n\t\tif (string.charCodeAt(0) === 45) {\n\t\t\ti = 1;\n\t\t\tsign = -1;\n\t\t}\n\n\t\t// handle digits before the decimal\n\t\tfor (i; i < whole.length; i++) {\n\t\t\tnum = charCodeToInt(whole.charCodeAt(i));\n\t\t\tout = 60 * out + num;\n\t\t}\n\n\t\t// handle digits after the decimal\n\t\tfor (i = 0; i < fractional.length; i++) {\n\t\t\tmultiplier = multiplier / 60;\n\t\t\tnum = charCodeToInt(fractional.charCodeAt(i));\n\t\t\tout += num * multiplier;\n\t\t}\n\n\t\treturn out * sign;\n\t}\n\n\tfunction arrayToInt (array) {\n\t\tfor (var i = 0; i < array.length; i++) {\n\t\t\tarray[i] = unpackBase60(array[i]);\n\t\t}\n\t}\n\n\tfunction intToUntil (array, length) {\n\t\tfor (var i = 0; i < length; i++) {\n\t\t\tarray[i] = Math.round((array[i - 1] || 0) + (array[i] * 60000)); // minutes to milliseconds\n\t\t}\n\n\t\tarray[length - 1] = Infinity;\n\t}\n\n\tfunction mapIndices (source, indices) {\n\t\tvar out = [], i;\n\n\t\tfor (i = 0; i < indices.length; i++) {\n\t\t\tout[i] = source[indices[i]];\n\t\t}\n\n\t\treturn out;\n\t}\n\n\tfunction unpack (string) {\n\t\tvar data = string.split('|'),\n\t\t\toffsets = data[2].split(' '),\n\t\t\tindices = data[3].split(''),\n\t\t\tuntils  = data[4].split(' ');\n\n\t\tarrayToInt(offsets);\n\t\tarrayToInt(indices);\n\t\tarrayToInt(untils);\n\n\t\tintToUntil(untils, indices.length);\n\n\t\treturn {\n\t\t\tname       : data[0],\n\t\t\tabbrs      : mapIndices(data[1].split(' '), indices),\n\t\t\toffsets    : mapIndices(offsets, indices),\n\t\t\tuntils     : untils,\n\t\t\tpopulation : data[5] | 0\n\t\t};\n\t}\n\n\t/************************************\n\t\tZone object\n\t************************************/\n\n\tfunction Zone (packedString) {\n\t\tif (packedString) {\n\t\t\tthis._set(unpack(packedString));\n\t\t}\n\t}\n\n\tZone.prototype = {\n\t\t_set : function (unpacked) {\n\t\t\tthis.name       = unpacked.name;\n\t\t\tthis.abbrs      = unpacked.abbrs;\n\t\t\tthis.untils     = unpacked.untils;\n\t\t\tthis.offsets    = unpacked.offsets;\n\t\t\tthis.population = unpacked.population;\n\t\t},\n\n\t\t_index : function (timestamp) {\n\t\t\tvar target = +timestamp,\n\t\t\t\tuntils = this.untils,\n\t\t\t\ti;\n\n\t\t\tfor (i = 0; i < untils.length; i++) {\n\t\t\t\tif (target < untils[i]) {\n\t\t\t\t\treturn i;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tcountries : function () {\n\t\t\tvar zone_name = this.name;\n\t\t\treturn Object.keys(countries).filter(function (country_code) {\n\t\t\t\treturn countries[country_code].zones.indexOf(zone_name) !== -1;\n\t\t\t});\n\t\t},\n\n\t\tparse : function (timestamp) {\n\t\t\tvar target  = +timestamp,\n\t\t\t\toffsets = this.offsets,\n\t\t\t\tuntils  = this.untils,\n\t\t\t\tmax     = untils.length - 1,\n\t\t\t\toffset, offsetNext, offsetPrev, i;\n\n\t\t\tfor (i = 0; i < max; i++) {\n\t\t\t\toffset     = offsets[i];\n\t\t\t\toffsetNext = offsets[i + 1];\n\t\t\t\toffsetPrev = offsets[i ? i - 1 : i];\n\n\t\t\t\tif (offset < offsetNext && tz.moveAmbiguousForward) {\n\t\t\t\t\toffset = offsetNext;\n\t\t\t\t} else if (offset > offsetPrev && tz.moveInvalidForward) {\n\t\t\t\t\toffset = offsetPrev;\n\t\t\t\t}\n\n\t\t\t\tif (target < untils[i] - (offset * 60000)) {\n\t\t\t\t\treturn offsets[i];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn offsets[max];\n\t\t},\n\n\t\tabbr : function (mom) {\n\t\t\treturn this.abbrs[this._index(mom)];\n\t\t},\n\n\t\toffset : function (mom) {\n\t\t\tlogError(\"zone.offset has been deprecated in favor of zone.utcOffset\");\n\t\t\treturn this.offsets[this._index(mom)];\n\t\t},\n\n\t\tutcOffset : function (mom) {\n\t\t\treturn this.offsets[this._index(mom)];\n\t\t}\n\t};\n\n\t/************************************\n\t\tCountry object\n\t************************************/\n\n\tfunction Country (country_name, zone_names) {\n\t\tthis.name = country_name;\n\t\tthis.zones = zone_names;\n\t}\n\n\t/************************************\n\t\tCurrent Timezone\n\t************************************/\n\n\tfunction OffsetAt(at) {\n\t\tvar timeString = at.toTimeString();\n\t\tvar abbr = timeString.match(/\\([a-z ]+\\)/i);\n\t\tif (abbr && abbr[0]) {\n\t\t\t// 17:56:31 GMT-0600 (CST)\n\t\t\t// 17:56:31 GMT-0600 (Central Standard Time)\n\t\t\tabbr = abbr[0].match(/[A-Z]/g);\n\t\t\tabbr = abbr ? abbr.join('') : undefined;\n\t\t} else {\n\t\t\t// 17:56:31 CST\n\t\t\t// 17:56:31 GMT+0800 (台北標準時間)\n\t\t\tabbr = timeString.match(/[A-Z]{3,5}/g);\n\t\t\tabbr = abbr ? abbr[0] : undefined;\n\t\t}\n\n\t\tif (abbr === 'GMT') {\n\t\t\tabbr = undefined;\n\t\t}\n\n\t\tthis.at = +at;\n\t\tthis.abbr = abbr;\n\t\tthis.offset = at.getTimezoneOffset();\n\t}\n\n\tfunction ZoneScore(zone) {\n\t\tthis.zone = zone;\n\t\tthis.offsetScore = 0;\n\t\tthis.abbrScore = 0;\n\t}\n\n\tZoneScore.prototype.scoreOffsetAt = function (offsetAt) {\n\t\tthis.offsetScore += Math.abs(this.zone.utcOffset(offsetAt.at) - offsetAt.offset);\n\t\tif (this.zone.abbr(offsetAt.at).replace(/[^A-Z]/g, '') !== offsetAt.abbr) {\n\t\t\tthis.abbrScore++;\n\t\t}\n\t};\n\n\tfunction findChange(low, high) {\n\t\tvar mid, diff;\n\n\t\twhile ((diff = ((high.at - low.at) / 12e4 | 0) * 6e4)) {\n\t\t\tmid = new OffsetAt(new Date(low.at + diff));\n\t\t\tif (mid.offset === low.offset) {\n\t\t\t\tlow = mid;\n\t\t\t} else {\n\t\t\t\thigh = mid;\n\t\t\t}\n\t\t}\n\n\t\treturn low;\n\t}\n\n\tfunction userOffsets() {\n\t\tvar startYear = new Date().getFullYear() - 2,\n\t\t\tlast = new OffsetAt(new Date(startYear, 0, 1)),\n\t\t\toffsets = [last],\n\t\t\tchange, next, i;\n\n\t\tfor (i = 1; i < 48; i++) {\n\t\t\tnext = new OffsetAt(new Date(startYear, i, 1));\n\t\t\tif (next.offset !== last.offset) {\n\t\t\t\tchange = findChange(last, next);\n\t\t\t\toffsets.push(change);\n\t\t\t\toffsets.push(new OffsetAt(new Date(change.at + 6e4)));\n\t\t\t}\n\t\t\tlast = next;\n\t\t}\n\n\t\tfor (i = 0; i < 4; i++) {\n\t\t\toffsets.push(new OffsetAt(new Date(startYear + i, 0, 1)));\n\t\t\toffsets.push(new OffsetAt(new Date(startYear + i, 6, 1)));\n\t\t}\n\n\t\treturn offsets;\n\t}\n\n\tfunction sortZoneScores (a, b) {\n\t\tif (a.offsetScore !== b.offsetScore) {\n\t\t\treturn a.offsetScore - b.offsetScore;\n\t\t}\n\t\tif (a.abbrScore !== b.abbrScore) {\n\t\t\treturn a.abbrScore - b.abbrScore;\n\t\t}\n\t\tif (a.zone.population !== b.zone.population) {\n\t\t\treturn b.zone.population - a.zone.population;\n\t\t}\n\t\treturn b.zone.name.localeCompare(a.zone.name);\n\t}\n\n\tfunction addToGuesses (name, offsets) {\n\t\tvar i, offset;\n\t\tarrayToInt(offsets);\n\t\tfor (i = 0; i < offsets.length; i++) {\n\t\t\toffset = offsets[i];\n\t\t\tguesses[offset] = guesses[offset] || {};\n\t\t\tguesses[offset][name] = true;\n\t\t}\n\t}\n\n\tfunction guessesForUserOffsets (offsets) {\n\t\tvar offsetsLength = offsets.length,\n\t\t\tfilteredGuesses = {},\n\t\t\tout = [],\n\t\t\ti, j, guessesOffset;\n\n\t\tfor (i = 0; i < offsetsLength; i++) {\n\t\t\tguessesOffset = guesses[offsets[i].offset] || {};\n\t\t\tfor (j in guessesOffset) {\n\t\t\t\tif (guessesOffset.hasOwnProperty(j)) {\n\t\t\t\t\tfilteredGuesses[j] = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (i in filteredGuesses) {\n\t\t\tif (filteredGuesses.hasOwnProperty(i)) {\n\t\t\t\tout.push(names[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn out;\n\t}\n\n\tfunction rebuildGuess () {\n\n\t\t// use Intl API when available and returning valid time zone\n\t\ttry {\n\t\t\tvar intlName = Intl.DateTimeFormat().resolvedOptions().timeZone;\n\t\t\tif (intlName && intlName.length > 3) {\n\t\t\t\tvar name = names[normalizeName(intlName)];\n\t\t\t\tif (name) {\n\t\t\t\t\treturn name;\n\t\t\t\t}\n\t\t\t\tlogError(\"Moment Timezone found \" + intlName + \" from the Intl api, but did not have that data loaded.\");\n\t\t\t}\n\t\t} catch (e) {\n\t\t\t// Intl unavailable, fall back to manual guessing.\n\t\t}\n\n\t\tvar offsets = userOffsets(),\n\t\t\toffsetsLength = offsets.length,\n\t\t\tguesses = guessesForUserOffsets(offsets),\n\t\t\tzoneScores = [],\n\t\t\tzoneScore, i, j;\n\n\t\tfor (i = 0; i < guesses.length; i++) {\n\t\t\tzoneScore = new ZoneScore(getZone(guesses[i]), offsetsLength);\n\t\t\tfor (j = 0; j < offsetsLength; j++) {\n\t\t\t\tzoneScore.scoreOffsetAt(offsets[j]);\n\t\t\t}\n\t\t\tzoneScores.push(zoneScore);\n\t\t}\n\n\t\tzoneScores.sort(sortZoneScores);\n\n\t\treturn zoneScores.length > 0 ? zoneScores[0].zone.name : undefined;\n\t}\n\n\tfunction guess (ignoreCache) {\n\t\tif (!cachedGuess || ignoreCache) {\n\t\t\tcachedGuess = rebuildGuess();\n\t\t}\n\t\treturn cachedGuess;\n\t}\n\n\t/************************************\n\t\tGlobal Methods\n\t************************************/\n\n\tfunction normalizeName (name) {\n\t\treturn (name || '').toLowerCase().replace(/\\//g, '_');\n\t}\n\n\tfunction addZone (packed) {\n\t\tvar i, name, split, normalized;\n\n\t\tif (typeof packed === \"string\") {\n\t\t\tpacked = [packed];\n\t\t}\n\n\t\tfor (i = 0; i < packed.length; i++) {\n\t\t\tsplit = packed[i].split('|');\n\t\t\tname = split[0];\n\t\t\tnormalized = normalizeName(name);\n\t\t\tzones[normalized] = packed[i];\n\t\t\tnames[normalized] = name;\n\t\t\taddToGuesses(normalized, split[2].split(' '));\n\t\t}\n\t}\n\n\tfunction getZone (name, caller) {\n\n\t\tname = normalizeName(name);\n\n\t\tvar zone = zones[name];\n\t\tvar link;\n\n\t\tif (zone instanceof Zone) {\n\t\t\treturn zone;\n\t\t}\n\n\t\tif (typeof zone === 'string') {\n\t\t\tzone = new Zone(zone);\n\t\t\tzones[name] = zone;\n\t\t\treturn zone;\n\t\t}\n\n\t\t// Pass getZone to prevent recursion more than 1 level deep\n\t\tif (links[name] && caller !== getZone && (link = getZone(links[name], getZone))) {\n\t\t\tzone = zones[name] = new Zone();\n\t\t\tzone._set(link);\n\t\t\tzone.name = names[name];\n\t\t\treturn zone;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tfunction getNames () {\n\t\tvar i, out = [];\n\n\t\tfor (i in names) {\n\t\t\tif (names.hasOwnProperty(i) && (zones[i] || zones[links[i]]) && names[i]) {\n\t\t\t\tout.push(names[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn out.sort();\n\t}\n\n\tfunction getCountryNames () {\n\t\treturn Object.keys(countries);\n\t}\n\n\tfunction addLink (aliases) {\n\t\tvar i, alias, normal0, normal1;\n\n\t\tif (typeof aliases === \"string\") {\n\t\t\taliases = [aliases];\n\t\t}\n\n\t\tfor (i = 0; i < aliases.length; i++) {\n\t\t\talias = aliases[i].split('|');\n\n\t\t\tnormal0 = normalizeName(alias[0]);\n\t\t\tnormal1 = normalizeName(alias[1]);\n\n\t\t\tlinks[normal0] = normal1;\n\t\t\tnames[normal0] = alias[0];\n\n\t\t\tlinks[normal1] = normal0;\n\t\t\tnames[normal1] = alias[1];\n\t\t}\n\t}\n\n\tfunction addCountries (data) {\n\t\tvar i, country_code, country_zones, split;\n\t\tif (!data || !data.length) return;\n\t\tfor (i = 0; i < data.length; i++) {\n\t\t\tsplit = data[i].split('|');\n\t\t\tcountry_code = split[0].toUpperCase();\n\t\t\tcountry_zones = split[1].split(' ');\n\t\t\tcountries[country_code] = new Country(\n\t\t\t\tcountry_code,\n\t\t\t\tcountry_zones\n\t\t\t);\n\t\t}\n\t}\n\n\tfunction getCountry (name) {\n\t\tname = name.toUpperCase();\n\t\treturn countries[name] || null;\n\t}\n\n\tfunction zonesForCountry(country, with_offset) {\n\t\tcountry = getCountry(country);\n\n\t\tif (!country) return null;\n\n\t\tvar zones = country.zones.sort();\n\n\t\tif (with_offset) {\n\t\t\treturn zones.map(function (zone_name) {\n\t\t\t\tvar zone = getZone(zone_name);\n\t\t\t\treturn {\n\t\t\t\t\tname: zone_name,\n\t\t\t\t\toffset: zone.utcOffset(new Date())\n\t\t\t\t};\n\t\t\t});\n\t\t}\n\n\t\treturn zones;\n\t}\n\n\tfunction loadData (data) {\n\t\taddZone(data.zones);\n\t\taddLink(data.links);\n\t\taddCountries(data.countries);\n\t\ttz.dataVersion = data.version;\n\t}\n\n\tfunction zoneExists (name) {\n\t\tif (!zoneExists.didShowError) {\n\t\t\tzoneExists.didShowError = true;\n\t\t\t\tlogError(\"moment.tz.zoneExists('\" + name + \"') has been deprecated in favor of !moment.tz.zone('\" + name + \"')\");\n\t\t}\n\t\treturn !!getZone(name);\n\t}\n\n\tfunction needsOffset (m) {\n\t\tvar isUnixTimestamp = (m._f === 'X' || m._f === 'x');\n\t\treturn !!(m._a && (m._tzm === undefined) && !isUnixTimestamp);\n\t}\n\n\tfunction logError (message) {\n\t\tif (typeof console !== 'undefined' && typeof console.error === 'function') {\n\t\t\tconsole.error(message);\n\t\t}\n\t}\n\n\t/************************************\n\t\tmoment.tz namespace\n\t************************************/\n\n\tfunction tz (input) {\n\t\tvar args = Array.prototype.slice.call(arguments, 0, -1),\n\t\t\tname = arguments[arguments.length - 1],\n\t\t\tzone = getZone(name),\n\t\t\tout  = moment.utc.apply(null, args);\n\n\t\tif (zone && !moment.isMoment(input) && needsOffset(out)) {\n\t\t\tout.add(zone.parse(out), 'minutes');\n\t\t}\n\n\t\tout.tz(name);\n\n\t\treturn out;\n\t}\n\n\ttz.version      = VERSION;\n\ttz.dataVersion  = '';\n\ttz._zones       = zones;\n\ttz._links       = links;\n\ttz._names       = names;\n\ttz._countries\t= countries;\n\ttz.add          = addZone;\n\ttz.link         = addLink;\n\ttz.load         = loadData;\n\ttz.zone         = getZone;\n\ttz.zoneExists   = zoneExists; // deprecated in 0.1.0\n\ttz.guess        = guess;\n\ttz.names        = getNames;\n\ttz.Zone         = Zone;\n\ttz.unpack       = unpack;\n\ttz.unpackBase60 = unpackBase60;\n\ttz.needsOffset  = needsOffset;\n\ttz.moveInvalidForward   = true;\n\ttz.moveAmbiguousForward = false;\n\ttz.countries    = getCountryNames;\n\ttz.zonesForCountry = zonesForCountry;\n\n\t/************************************\n\t\tInterface with Moment.js\n\t************************************/\n\n\tvar fn = moment.fn;\n\n\tmoment.tz = tz;\n\n\tmoment.defaultZone = null;\n\n\tmoment.updateOffset = function (mom, keepTime) {\n\t\tvar zone = moment.defaultZone,\n\t\t\toffset;\n\n\t\tif (mom._z === undefined) {\n\t\t\tif (zone && needsOffset(mom) && !mom._isUTC) {\n\t\t\t\tmom._d = moment.utc(mom._a)._d;\n\t\t\t\tmom.utc().add(zone.parse(mom), 'minutes');\n\t\t\t}\n\t\t\tmom._z = zone;\n\t\t}\n\t\tif (mom._z) {\n\t\t\toffset = mom._z.utcOffset(mom);\n\t\t\tif (Math.abs(offset) < 16) {\n\t\t\t\toffset = offset / 60;\n\t\t\t}\n\t\t\tif (mom.utcOffset !== undefined) {\n\t\t\t\tvar z = mom._z;\n\t\t\t\tmom.utcOffset(-offset, keepTime);\n\t\t\t\tmom._z = z;\n\t\t\t} else {\n\t\t\t\tmom.zone(offset, keepTime);\n\t\t\t}\n\t\t}\n\t};\n\n\tfn.tz = function (name, keepTime) {\n\t\tif (name) {\n\t\t\tif (typeof name !== 'string') {\n\t\t\t\tthrow new Error('Time zone name must be a string, got ' + name + ' [' + typeof name + ']');\n\t\t\t}\n\t\t\tthis._z = getZone(name);\n\t\t\tif (this._z) {\n\t\t\t\tmoment.updateOffset(this, keepTime);\n\t\t\t} else {\n\t\t\t\tlogError(\"Moment Timezone has no data for \" + name + \". See http://momentjs.com/timezone/docs/#/data-loading/.\");\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif (this._z) { return this._z.name; }\n\t};\n\n\tfunction abbrWrap (old) {\n\t\treturn function () {\n\t\t\tif (this._z) { return this._z.abbr(this); }\n\t\t\treturn old.call(this);\n\t\t};\n\t}\n\n\tfunction resetZoneWrap (old) {\n\t\treturn function () {\n\t\t\tthis._z = null;\n\t\t\treturn old.apply(this, arguments);\n\t\t};\n\t}\n\n\tfunction resetZoneWrap2 (old) {\n\t\treturn function () {\n\t\t\tif (arguments.length > 0) this._z = null;\n\t\t\treturn old.apply(this, arguments);\n\t\t};\n\t}\n\n\tfn.zoneName  = abbrWrap(fn.zoneName);\n\tfn.zoneAbbr  = abbrWrap(fn.zoneAbbr);\n\tfn.utc       = resetZoneWrap(fn.utc);\n\tfn.local     = resetZoneWrap(fn.local);\n\tfn.utcOffset = resetZoneWrap2(fn.utcOffset);\n\n\tmoment.tz.setDefault = function(name) {\n\t\tif (major < 2 || (major === 2 && minor < 9)) {\n\t\t\tlogError('Moment Timezone setDefault() requires Moment.js >= 2.9.0. You are using Moment.js ' + moment.version + '.');\n\t\t}\n\t\tmoment.defaultZone = name ? getZone(name) : null;\n\t\treturn moment;\n\t};\n\n\t// Cloning a moment should include the _z property.\n\tvar momentProperties = moment.momentProperties;\n\tif (Object.prototype.toString.call(momentProperties) === '[object Array]') {\n\t\t// moment 2.8.1+\n\t\tmomentProperties.push('_z');\n\t\tmomentProperties.push('_a');\n\t} else if (momentProperties) {\n\t\t// moment 2.7.0\n\t\tmomentProperties._z = null;\n\t}\n\n\t// INJECT DATA\n\n\treturn moment;\n}));\n","var map = {\n\t\"./af\": 209,\n\t\"./af.js\": 209,\n\t\"./ar\": 210,\n\t\"./ar-dz\": 211,\n\t\"./ar-dz.js\": 211,\n\t\"./ar-kw\": 212,\n\t\"./ar-kw.js\": 212,\n\t\"./ar-ly\": 213,\n\t\"./ar-ly.js\": 213,\n\t\"./ar-ma\": 214,\n\t\"./ar-ma.js\": 214,\n\t\"./ar-sa\": 215,\n\t\"./ar-sa.js\": 215,\n\t\"./ar-tn\": 216,\n\t\"./ar-tn.js\": 216,\n\t\"./ar.js\": 210,\n\t\"./az\": 217,\n\t\"./az.js\": 217,\n\t\"./be\": 218,\n\t\"./be.js\": 218,\n\t\"./bg\": 219,\n\t\"./bg.js\": 219,\n\t\"./bm\": 220,\n\t\"./bm.js\": 220,\n\t\"./bn\": 221,\n\t\"./bn-bd\": 222,\n\t\"./bn-bd.js\": 222,\n\t\"./bn.js\": 221,\n\t\"./bo\": 223,\n\t\"./bo.js\": 223,\n\t\"./br\": 224,\n\t\"./br.js\": 224,\n\t\"./bs\": 225,\n\t\"./bs.js\": 225,\n\t\"./ca\": 226,\n\t\"./ca.js\": 226,\n\t\"./cs\": 227,\n\t\"./cs.js\": 227,\n\t\"./cv\": 228,\n\t\"./cv.js\": 228,\n\t\"./cy\": 229,\n\t\"./cy.js\": 229,\n\t\"./da\": 230,\n\t\"./da.js\": 230,\n\t\"./de\": 231,\n\t\"./de-at\": 232,\n\t\"./de-at.js\": 232,\n\t\"./de-ch\": 233,\n\t\"./de-ch.js\": 233,\n\t\"./de.js\": 231,\n\t\"./dv\": 234,\n\t\"./dv.js\": 234,\n\t\"./el\": 235,\n\t\"./el.js\": 235,\n\t\"./en-au\": 236,\n\t\"./en-au.js\": 236,\n\t\"./en-ca\": 237,\n\t\"./en-ca.js\": 237,\n\t\"./en-gb\": 238,\n\t\"./en-gb.js\": 238,\n\t\"./en-ie\": 239,\n\t\"./en-ie.js\": 239,\n\t\"./en-il\": 240,\n\t\"./en-il.js\": 240,\n\t\"./en-in\": 241,\n\t\"./en-in.js\": 241,\n\t\"./en-nz\": 242,\n\t\"./en-nz.js\": 242,\n\t\"./en-sg\": 243,\n\t\"./en-sg.js\": 243,\n\t\"./eo\": 244,\n\t\"./eo.js\": 244,\n\t\"./es\": 245,\n\t\"./es-do\": 246,\n\t\"./es-do.js\": 246,\n\t\"./es-mx\": 247,\n\t\"./es-mx.js\": 247,\n\t\"./es-us\": 248,\n\t\"./es-us.js\": 248,\n\t\"./es.js\": 245,\n\t\"./et\": 249,\n\t\"./et.js\": 249,\n\t\"./eu\": 250,\n\t\"./eu.js\": 250,\n\t\"./fa\": 251,\n\t\"./fa.js\": 251,\n\t\"./fi\": 252,\n\t\"./fi.js\": 252,\n\t\"./fil\": 253,\n\t\"./fil.js\": 253,\n\t\"./fo\": 254,\n\t\"./fo.js\": 254,\n\t\"./fr\": 255,\n\t\"./fr-ca\": 256,\n\t\"./fr-ca.js\": 256,\n\t\"./fr-ch\": 257,\n\t\"./fr-ch.js\": 257,\n\t\"./fr.js\": 255,\n\t\"./fy\": 258,\n\t\"./fy.js\": 258,\n\t\"./ga\": 259,\n\t\"./ga.js\": 259,\n\t\"./gd\": 260,\n\t\"./gd.js\": 260,\n\t\"./gl\": 261,\n\t\"./gl.js\": 261,\n\t\"./gom-deva\": 262,\n\t\"./gom-deva.js\": 262,\n\t\"./gom-latn\": 263,\n\t\"./gom-latn.js\": 263,\n\t\"./gu\": 264,\n\t\"./gu.js\": 264,\n\t\"./he\": 265,\n\t\"./he.js\": 265,\n\t\"./hi\": 266,\n\t\"./hi.js\": 266,\n\t\"./hr\": 267,\n\t\"./hr.js\": 267,\n\t\"./hu\": 268,\n\t\"./hu.js\": 268,\n\t\"./hy-am\": 269,\n\t\"./hy-am.js\": 269,\n\t\"./id\": 270,\n\t\"./id.js\": 270,\n\t\"./is\": 271,\n\t\"./is.js\": 271,\n\t\"./it\": 272,\n\t\"./it-ch\": 273,\n\t\"./it-ch.js\": 273,\n\t\"./it.js\": 272,\n\t\"./ja\": 274,\n\t\"./ja.js\": 274,\n\t\"./jv\": 275,\n\t\"./jv.js\": 275,\n\t\"./ka\": 276,\n\t\"./ka.js\": 276,\n\t\"./kk\": 277,\n\t\"./kk.js\": 277,\n\t\"./km\": 278,\n\t\"./km.js\": 278,\n\t\"./kn\": 279,\n\t\"./kn.js\": 279,\n\t\"./ko\": 280,\n\t\"./ko.js\": 280,\n\t\"./ku\": 281,\n\t\"./ku.js\": 281,\n\t\"./ky\": 282,\n\t\"./ky.js\": 282,\n\t\"./lb\": 283,\n\t\"./lb.js\": 283,\n\t\"./lo\": 284,\n\t\"./lo.js\": 284,\n\t\"./lt\": 285,\n\t\"./lt.js\": 285,\n\t\"./lv\": 286,\n\t\"./lv.js\": 286,\n\t\"./me\": 287,\n\t\"./me.js\": 287,\n\t\"./mi\": 288,\n\t\"./mi.js\": 288,\n\t\"./mk\": 289,\n\t\"./mk.js\": 289,\n\t\"./ml\": 290,\n\t\"./ml.js\": 290,\n\t\"./mn\": 291,\n\t\"./mn.js\": 291,\n\t\"./mr\": 292,\n\t\"./mr.js\": 292,\n\t\"./ms\": 293,\n\t\"./ms-my\": 294,\n\t\"./ms-my.js\": 294,\n\t\"./ms.js\": 293,\n\t\"./mt\": 295,\n\t\"./mt.js\": 295,\n\t\"./my\": 296,\n\t\"./my.js\": 296,\n\t\"./nb\": 297,\n\t\"./nb.js\": 297,\n\t\"./ne\": 298,\n\t\"./ne.js\": 298,\n\t\"./nl\": 299,\n\t\"./nl-be\": 300,\n\t\"./nl-be.js\": 300,\n\t\"./nl.js\": 299,\n\t\"./nn\": 301,\n\t\"./nn.js\": 301,\n\t\"./oc-lnc\": 302,\n\t\"./oc-lnc.js\": 302,\n\t\"./pa-in\": 303,\n\t\"./pa-in.js\": 303,\n\t\"./pl\": 304,\n\t\"./pl.js\": 304,\n\t\"./pt\": 305,\n\t\"./pt-br\": 306,\n\t\"./pt-br.js\": 306,\n\t\"./pt.js\": 305,\n\t\"./ro\": 307,\n\t\"./ro.js\": 307,\n\t\"./ru\": 308,\n\t\"./ru.js\": 308,\n\t\"./sd\": 309,\n\t\"./sd.js\": 309,\n\t\"./se\": 310,\n\t\"./se.js\": 310,\n\t\"./si\": 311,\n\t\"./si.js\": 311,\n\t\"./sk\": 312,\n\t\"./sk.js\": 312,\n\t\"./sl\": 313,\n\t\"./sl.js\": 313,\n\t\"./sq\": 314,\n\t\"./sq.js\": 314,\n\t\"./sr\": 315,\n\t\"./sr-cyrl\": 316,\n\t\"./sr-cyrl.js\": 316,\n\t\"./sr.js\": 315,\n\t\"./ss\": 317,\n\t\"./ss.js\": 317,\n\t\"./sv\": 318,\n\t\"./sv.js\": 318,\n\t\"./sw\": 319,\n\t\"./sw.js\": 319,\n\t\"./ta\": 320,\n\t\"./ta.js\": 320,\n\t\"./te\": 321,\n\t\"./te.js\": 321,\n\t\"./tet\": 322,\n\t\"./tet.js\": 322,\n\t\"./tg\": 323,\n\t\"./tg.js\": 323,\n\t\"./th\": 324,\n\t\"./th.js\": 324,\n\t\"./tk\": 325,\n\t\"./tk.js\": 325,\n\t\"./tl-ph\": 326,\n\t\"./tl-ph.js\": 326,\n\t\"./tlh\": 327,\n\t\"./tlh.js\": 327,\n\t\"./tr\": 328,\n\t\"./tr.js\": 328,\n\t\"./tzl\": 329,\n\t\"./tzl.js\": 329,\n\t\"./tzm\": 330,\n\t\"./tzm-latn\": 331,\n\t\"./tzm-latn.js\": 331,\n\t\"./tzm.js\": 330,\n\t\"./ug-cn\": 332,\n\t\"./ug-cn.js\": 332,\n\t\"./uk\": 333,\n\t\"./uk.js\": 333,\n\t\"./ur\": 334,\n\t\"./ur.js\": 334,\n\t\"./uz\": 335,\n\t\"./uz-latn\": 336,\n\t\"./uz-latn.js\": 336,\n\t\"./uz.js\": 335,\n\t\"./vi\": 337,\n\t\"./vi.js\": 337,\n\t\"./x-pseudo\": 338,\n\t\"./x-pseudo.js\": 338,\n\t\"./yo\": 339,\n\t\"./yo.js\": 339,\n\t\"./zh-cn\": 340,\n\t\"./zh-cn.js\": 340,\n\t\"./zh-hk\": 341,\n\t\"./zh-hk.js\": 341,\n\t\"./zh-mo\": 342,\n\t\"./zh-mo.js\": 342,\n\t\"./zh-tw\": 343,\n\t\"./zh-tw.js\": 343\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 630;","module.exports = \"- [Vaccines vs variants: the race to immunise the developing world](https://www.ft.com/content/797e3d7b-0091-4bfd-8cae-c0b5be380772)\\n\\n- [In graphics: the UK vaccine supply chain](https://www.ft.com/content/8b48a853-5b14-4378-91d4-17026fa15472)\\n\\n- [Covid vaccine development: The shots available](https://www.ft.com/content/ac5e5ef8-bccb-482b-9f8d-0dab5cac6f9a)\\n\\n- [All FT coverage of Covid-19 vaccines](https://www.ft.com/covid-19-vaccines)\"","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n/* eslint react/no-did-mount-set-state: 0, react/no-find-dom-node: 0 */\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nvar emptyRect = {\n  top: 0,\n  right: 0,\n  bottom: 0,\n  left: 0,\n  width: 0,\n  height: 0\n};\nexport default function withBoundingRects(BaseComponent) {\n  var _class, _temp;\n\n  return _temp = _class = /*#__PURE__*/function (_React$PureComponent) {\n    _inheritsLoose(WrappedComponent, _React$PureComponent);\n\n    function WrappedComponent(props) {\n      var _this;\n\n      _this = _React$PureComponent.call(this, props) || this;\n\n      _defineProperty(_assertThisInitialized(_this), \"node\", void 0);\n\n      _this.state = {\n        rect: undefined,\n        parentRect: undefined\n      };\n      _this.getRects = _this.getRects.bind(_assertThisInitialized(_this));\n      return _this;\n    }\n\n    var _proto = WrappedComponent.prototype;\n\n    _proto.componentDidMount = function componentDidMount() {\n      var _this2 = this;\n\n      this.node = ReactDOM.findDOMNode(this);\n      this.setState(function () {\n        return _this2.getRects();\n      });\n    };\n\n    _proto.getRects = function getRects() {\n      if (!this.node) return this.state;\n      var node = this.node;\n      var parentNode = node.parentNode;\n      var rect = node.getBoundingClientRect ? node.getBoundingClientRect() : emptyRect;\n      var parentRect = parentNode && parentNode.getBoundingClientRect ? parentNode.getBoundingClientRect() : emptyRect;\n      return {\n        rect: rect,\n        parentRect: parentRect\n      };\n    };\n\n    _proto.render = function render() {\n      return /*#__PURE__*/React.createElement(BaseComponent, _extends({\n        getRects: this.getRects\n      }, this.state, this.props));\n    };\n\n    return WrappedComponent;\n  }(React.PureComponent), _defineProperty(_class, \"displayName\", \"withBoundingRects(\" + (BaseComponent.displayName || '') + \")\"), _temp;\n}","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from 'react';\nimport cx from 'classnames';\nimport Axis from './Axis';\nimport Orientation from '../constants/orientation';\nexport var topTickLabelProps = function topTickLabelProps() {\n  return (\n    /** tickValue, index */\n    {\n      dy: '-0.75em',\n      fill: '#222',\n      fontFamily: 'Arial',\n      fontSize: 10,\n      textAnchor: 'middle'\n    }\n  );\n};\nexport default function AxisTop(_ref) {\n  var axisClassName = _ref.axisClassName,\n      _ref$labelOffset = _ref.labelOffset,\n      labelOffset = _ref$labelOffset === void 0 ? 8 : _ref$labelOffset,\n      _ref$tickLabelProps = _ref.tickLabelProps,\n      tickLabelProps = _ref$tickLabelProps === void 0 ? topTickLabelProps : _ref$tickLabelProps,\n      _ref$tickLength = _ref.tickLength,\n      tickLength = _ref$tickLength === void 0 ? 8 : _ref$tickLength,\n      restProps = _objectWithoutPropertiesLoose(_ref, [\"axisClassName\", \"labelOffset\", \"tickLabelProps\", \"tickLength\"]);\n\n  return /*#__PURE__*/React.createElement(Axis, _extends({\n    axisClassName: cx('visx-axis-top', axisClassName),\n    labelOffset: labelOffset,\n    orientation: Orientation.top,\n    tickLabelProps: tickLabelProps,\n    tickLength: tickLength\n  }, restProps));\n}","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from 'react';\nimport cx from 'classnames';\nimport Axis from './Axis';\nimport Orientation from '../constants/orientation';\nexport var rightTickLabelProps = function rightTickLabelProps() {\n  return (\n    /** tickValue, index */\n    {\n      dx: '0.25em',\n      dy: '0.25em',\n      fill: '#222',\n      fontFamily: 'Arial',\n      fontSize: 10,\n      textAnchor: 'start'\n    }\n  );\n};\nexport default function AxisRight(_ref) {\n  var axisClassName = _ref.axisClassName,\n      _ref$labelOffset = _ref.labelOffset,\n      labelOffset = _ref$labelOffset === void 0 ? 36 : _ref$labelOffset,\n      _ref$tickLabelProps = _ref.tickLabelProps,\n      tickLabelProps = _ref$tickLabelProps === void 0 ? rightTickLabelProps : _ref$tickLabelProps,\n      _ref$tickLength = _ref.tickLength,\n      tickLength = _ref$tickLength === void 0 ? 8 : _ref$tickLength,\n      restProps = _objectWithoutPropertiesLoose(_ref, [\"axisClassName\", \"labelOffset\", \"tickLabelProps\", \"tickLength\"]);\n\n  return /*#__PURE__*/React.createElement(Axis, _extends({\n    axisClassName: cx('visx-axis-right', axisClassName),\n    labelOffset: labelOffset,\n    orientation: Orientation.right,\n    tickLabelProps: tickLabelProps,\n    tickLength: tickLength\n  }, restProps));\n}","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from 'react';\nimport cx from 'classnames';\nimport Axis from './Axis';\nimport Orientation from '../constants/orientation';\nexport var bottomTickLabelProps = function bottomTickLabelProps() {\n  return (\n    /** tickValue, index */\n    {\n      dy: '0.25em',\n      fill: '#222',\n      fontFamily: 'Arial',\n      fontSize: 10,\n      textAnchor: 'middle'\n    }\n  );\n};\nexport default function AxisBottom(_ref) {\n  var axisClassName = _ref.axisClassName,\n      _ref$labelOffset = _ref.labelOffset,\n      labelOffset = _ref$labelOffset === void 0 ? 8 : _ref$labelOffset,\n      _ref$tickLabelProps = _ref.tickLabelProps,\n      tickLabelProps = _ref$tickLabelProps === void 0 ? bottomTickLabelProps : _ref$tickLabelProps,\n      _ref$tickLength = _ref.tickLength,\n      tickLength = _ref$tickLength === void 0 ? 8 : _ref$tickLength,\n      restProps = _objectWithoutPropertiesLoose(_ref, [\"axisClassName\", \"labelOffset\", \"tickLabelProps\", \"tickLength\"]);\n\n  return /*#__PURE__*/React.createElement(Axis, _extends({\n    axisClassName: cx('visx-axis-bottom', axisClassName),\n    labelOffset: labelOffset,\n    orientation: Orientation.bottom,\n    tickLabelProps: tickLabelProps,\n    tickLength: tickLength\n  }, restProps));\n}","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from 'react';\nimport cx from 'classnames';\nimport Axis from './Axis';\nimport Orientation from '../constants/orientation';\nexport var leftTickLabelProps = function leftTickLabelProps() {\n  return (\n    /** tickValue, index */\n    {\n      dx: '-0.25em',\n      dy: '0.25em',\n      fill: '#222',\n      fontFamily: 'Arial',\n      fontSize: 10,\n      textAnchor: 'end'\n    }\n  );\n};\nexport default function AxisLeft(_ref) {\n  var axisClassName = _ref.axisClassName,\n      _ref$labelOffset = _ref.labelOffset,\n      labelOffset = _ref$labelOffset === void 0 ? 36 : _ref$labelOffset,\n      _ref$tickLabelProps = _ref.tickLabelProps,\n      tickLabelProps = _ref$tickLabelProps === void 0 ? leftTickLabelProps : _ref$tickLabelProps,\n      _ref$tickLength = _ref.tickLength,\n      tickLength = _ref$tickLength === void 0 ? 8 : _ref$tickLength,\n      restProps = _objectWithoutPropertiesLoose(_ref, [\"axisClassName\", \"labelOffset\", \"tickLabelProps\", \"tickLength\"]);\n\n  return /*#__PURE__*/React.createElement(Axis, _extends({\n    axisClassName: cx('visx-axis-left', axisClassName),\n    labelOffset: labelOffset,\n    orientation: Orientation.left,\n    tickLabelProps: tickLabelProps,\n    tickLength: tickLength\n  }, restProps));\n}","export default function max(values, valueof) {\n  let max;\n  if (valueof === undefined) {\n    for (const value of values) {\n      if (value != null\n          && (max < value || (max === undefined && value >= value))) {\n        max = value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null\n          && (max < value || (max === undefined && value >= value))) {\n        max = value;\n      }\n    }\n  }\n  return max;\n}\n","import { scalePoint } from 'd3-scale';\nimport scaleOperator from '../operators/scaleOperator';\nexport var updatePointScale = scaleOperator('domain', 'range', 'reverse', 'align', 'padding', 'round');\nexport default function createPointScale(config) {\n  return updatePointScale(scalePoint(), config);\n}","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport { isMouseEvent, isTouchEvent } from './typeGuards';\nvar DEFAULT_POINT = {\n  x: 0,\n  y: 0\n};\nexport default function getXAndYFromEvent(event) {\n  if (!event) return _extends({}, DEFAULT_POINT);\n\n  if (isTouchEvent(event)) {\n    return event.changedTouches.length > 0 ? {\n      x: event.changedTouches[0].clientX,\n      y: event.changedTouches[0].clientY\n    } : _extends({}, DEFAULT_POINT);\n  }\n\n  if (isMouseEvent(event)) {\n    return {\n      x: event.clientX,\n      y: event.clientY\n    };\n  } // for focus events try to extract the center position of the target element\n\n\n  var target = event == null ? void 0 : event.target;\n  var boundingClientRect = target && 'getBoundingClientRect' in target ? target.getBoundingClientRect() : null;\n  if (!boundingClientRect) return _extends({}, DEFAULT_POINT);\n  return {\n    x: boundingClientRect.x + boundingClientRect.width / 2,\n    y: boundingClientRect.y + boundingClientRect.height / 2\n  };\n}","import { Point } from '@visx/point';\nimport { isSVGElement, isSVGGraphicsElement, isSVGSVGElement } from './typeGuards';\nimport getXAndYFromEvent from './getXAndYFromEvent';\nexport default function localPoint(node, event) {\n  if (!node || !event) return null;\n  var coords = getXAndYFromEvent(event); // find top-most SVG\n\n  var svg = isSVGElement(node) ? node.ownerSVGElement : node;\n  var screenCTM = isSVGGraphicsElement(svg) ? svg.getScreenCTM() : null;\n\n  if (isSVGSVGElement(svg) && screenCTM) {\n    var point = svg.createSVGPoint();\n    point.x = coords.x;\n    point.y = coords.y;\n    point = point.matrixTransform(screenCTM.inverse());\n    return new Point({\n      x: point.x,\n      y: point.y\n    });\n  } // fall back to bounding box\n\n\n  var rect = node.getBoundingClientRect();\n  return new Point({\n    x: coords.x - rect.left - node.clientLeft,\n    y: coords.y - rect.top - node.clientTop\n  });\n}","export function isElement(elem) {\n  return !!elem && elem instanceof Element;\n} // functional definition of isSVGElement. Note that SVGSVGElements are HTMLElements\n\nexport function isSVGElement(elem) {\n  return !!elem && (elem instanceof SVGElement || 'ownerSVGElement' in elem);\n} // functional definition of SVGGElement\n\nexport function isSVGSVGElement(elem) {\n  return !!elem && 'createSVGPoint' in elem;\n}\nexport function isSVGGraphicsElement(elem) {\n  return !!elem && 'getScreenCTM' in elem;\n} // functional definition of TouchEvent\n\nexport function isTouchEvent(event) {\n  return !!event && 'changedTouches' in event;\n} // functional definition of MouseEvent\n\nexport function isMouseEvent(event) {\n  return !!event && 'clientX' in event;\n} // functional definition of event\n\nexport function isEvent(event) {\n  return !!event && (event instanceof Event || 'nativeEvent' in event && event.nativeEvent instanceof Event);\n}","import localPointGeneric from './localPointGeneric';\nimport { isElement, isEvent } from './typeGuards';\n/** Handles two signatures for backwards compatibility. */\n\nexport default function localPoint(nodeOrEvent, maybeEvent) {\n  // localPoint(node, event)\n  if (isElement(nodeOrEvent) && maybeEvent) {\n    return localPointGeneric(nodeOrEvent, maybeEvent);\n  } // localPoint(event)\n\n\n  if (isEvent(nodeOrEvent)) {\n    var event = nodeOrEvent;\n    var node = event.target;\n    if (node) return localPointGeneric(node, event);\n  }\n\n  return null;\n}","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport { useCallback, useEffect, useRef } from 'react';\nimport { localPoint } from '@visx/event';\nimport useStateWithCallback from './util/useStateWithCallback';\n\n/** Hook for dragging, returns a `UseDrag` object. */\nexport default function useDrag(_temp) {\n  var _ref = _temp === void 0 ? {} : _temp,\n      _ref$resetOnStart = _ref.resetOnStart,\n      resetOnStart = _ref$resetOnStart === void 0 ? false : _ref$resetOnStart,\n      onDragEnd = _ref.onDragEnd,\n      onDragMove = _ref.onDragMove,\n      onDragStart = _ref.onDragStart,\n      x = _ref.x,\n      y = _ref.y,\n      dx = _ref.dx,\n      dy = _ref.dy,\n      isDragging = _ref.isDragging;\n\n  // use ref to detect prop changes\n  var positionPropsRef = useRef({\n    x: x,\n    y: y,\n    dx: dx,\n    dy: dy\n  });\n\n  var _useStateWithCallback = useStateWithCallback({\n    x: x,\n    y: y,\n    dx: dx != null ? dx : 0,\n    dy: dy != null ? dy : 0,\n    isDragging: false\n  }),\n      dragState = _useStateWithCallback[0],\n      setDragStateWithCallback = _useStateWithCallback[1]; // if prop position changes, update state\n\n\n  useEffect(function () {\n    if (positionPropsRef.current.x !== x || positionPropsRef.current.y !== y || positionPropsRef.current.dx !== dx || positionPropsRef.current.dy !== dy) {\n      positionPropsRef.current = {\n        x: x,\n        y: y,\n        dx: dx,\n        dy: dy\n      };\n      setDragStateWithCallback(function (currState) {\n        return _extends({}, currState, {\n          x: x,\n          y: y,\n          dx: dx != null ? dx : 0,\n          dy: dy != null ? dy : 0\n        });\n      });\n    }\n  });\n  useEffect(function () {\n    if (isDragging !== undefined && dragState.isDragging !== isDragging) {\n      setDragStateWithCallback(function (currState) {\n        return _extends({}, currState, {\n          isDragging: isDragging\n        });\n      });\n    }\n  }, [dragState.isDragging, isDragging, setDragStateWithCallback]);\n  var handleDragStart = useCallback(function (event) {\n    event.persist();\n    setDragStateWithCallback(function (currState) {\n      var point = localPoint(event) || {\n        x: 0,\n        y: 0\n      };\n      return {\n        isDragging: true,\n        dx: resetOnStart ? 0 : currState.dx,\n        dy: resetOnStart ? 0 : currState.dy,\n        x: resetOnStart ? point.x : point.x - currState.dx,\n        y: resetOnStart ? point.y : point.y - currState.dy\n      };\n    }, onDragStart && function (currState) {\n      onDragStart(_extends({}, currState, {\n        event: event\n      }));\n    });\n  }, [onDragStart, resetOnStart, setDragStateWithCallback]);\n  var handleDragMove = useCallback(function (event) {\n    event.persist();\n    setDragStateWithCallback(function (currState) {\n      var point = localPoint(event) || {\n        x: 0,\n        y: 0\n      };\n      return currState.isDragging ? _extends({}, currState, {\n        isDragging: true,\n        dx: point.x - (currState.x || 0),\n        dy: point.y - (currState.y || 0)\n      }) : currState;\n    }, onDragMove && function (currState) {\n      if (currState.isDragging) onDragMove(_extends({}, currState, {\n        event: event\n      }));\n    });\n  }, [onDragMove, setDragStateWithCallback]);\n  var handleDragEnd = useCallback(function (event) {\n    event.persist();\n    setDragStateWithCallback(function (currState) {\n      return _extends({}, currState, {\n        isDragging: false\n      });\n    }, onDragEnd && function (currState) {\n      onDragEnd(_extends({}, currState, {\n        event: event\n      }));\n    });\n  }, [onDragEnd, setDragStateWithCallback]);\n  return _extends({}, dragState, {\n    dragEnd: handleDragEnd,\n    dragMove: handleDragMove,\n    dragStart: handleDragStart\n  });\n}","import React, { useCallback, useLayoutEffect, useRef, useState } from 'react';\n\n/** A hook that exposes a setState(state, callback) API similar to a component class. */\nexport default function useStateWithCallback(initialState) {\n  var _useState = useState(initialState),\n      state = _useState[0],\n      setState = _useState[1];\n\n  var callbackRef = useRef(null);\n  var setStateCallback = useCallback(function (nextState, callback) {\n    callbackRef.current = callback || null;\n    setState(nextState);\n  }, [setState]); // if we use useEffect, some callback invocations are skipped\n\n  useLayoutEffect(function () {\n    // `null` on initial render, so we only execute callback on state *updates*\n    if (callbackRef.current) {\n      callbackRef.current(state);\n      callbackRef.current = null; // reset callback after execution\n    }\n  }, [state]);\n  return [state, setStateCallback];\n}","import _pt from \"prop-types\";\n\n/* eslint-disable react/jsx-handler-names */\nimport React from 'react';\nimport useDrag from './useDrag';\nexport default function Drag(_ref) {\n  var _ref$captureDragArea = _ref.captureDragArea,\n      captureDragArea = _ref$captureDragArea === void 0 ? true : _ref$captureDragArea,\n      children = _ref.children,\n      dx = _ref.dx,\n      dy = _ref.dy,\n      height = _ref.height,\n      onDragEnd = _ref.onDragEnd,\n      onDragMove = _ref.onDragMove,\n      onDragStart = _ref.onDragStart,\n      resetOnStart = _ref.resetOnStart,\n      width = _ref.width,\n      x = _ref.x,\n      y = _ref.y,\n      isDragging = _ref.isDragging;\n  var drag = useDrag({\n    resetOnStart: resetOnStart,\n    onDragEnd: onDragEnd,\n    onDragMove: onDragMove,\n    onDragStart: onDragStart,\n    x: x,\n    y: y,\n    dx: dx,\n    dy: dy,\n    isDragging: isDragging\n  });\n  return /*#__PURE__*/React.createElement(React.Fragment, null, drag.isDragging && captureDragArea && /*#__PURE__*/React.createElement(\"rect\", {\n    width: width,\n    height: height,\n    onPointerDown: drag.dragStart,\n    onPointerMove: drag.dragMove,\n    onPointerUp: drag.dragEnd,\n    fill: \"transparent\"\n  }), children(drag));\n}\nDrag.propTypes = {\n  children: _pt.func.isRequired,\n  width: _pt.number.isRequired,\n  height: _pt.number.isRequired,\n  captureDragArea: _pt.bool,\n  isDragging: _pt.bool\n};","\nconst EPSILON = Math.pow(2, -52);\nconst EDGE_STACK = new Uint32Array(512);\n\nexport default class Delaunator {\n\n    static from(points, getX = defaultGetX, getY = defaultGetY) {\n        const n = points.length;\n        const coords = new Float64Array(n * 2);\n\n        for (let i = 0; i < n; i++) {\n            const p = points[i];\n            coords[2 * i] = getX(p);\n            coords[2 * i + 1] = getY(p);\n        }\n\n        return new Delaunator(coords);\n    }\n\n    constructor(coords) {\n        const n = coords.length >> 1;\n        if (n > 0 && typeof coords[0] !== 'number') throw new Error('Expected coords to contain numbers.');\n\n        this.coords = coords;\n\n        // arrays that will store the triangulation graph\n        const maxTriangles = Math.max(2 * n - 5, 0);\n        this._triangles = new Uint32Array(maxTriangles * 3);\n        this._halfedges = new Int32Array(maxTriangles * 3);\n\n        // temporary arrays for tracking the edges of the advancing convex hull\n        this._hashSize = Math.ceil(Math.sqrt(n));\n        this._hullPrev = new Uint32Array(n); // edge to prev edge\n        this._hullNext = new Uint32Array(n); // edge to next edge\n        this._hullTri = new Uint32Array(n); // edge to adjacent triangle\n        this._hullHash = new Int32Array(this._hashSize).fill(-1); // angular edge hash\n\n        // temporary arrays for sorting points\n        this._ids = new Uint32Array(n);\n        this._dists = new Float64Array(n);\n\n        this.update();\n    }\n\n    update() {\n        const {coords, _hullPrev: hullPrev, _hullNext: hullNext, _hullTri: hullTri, _hullHash: hullHash} =  this;\n        const n = coords.length >> 1;\n\n        // populate an array of point indices; calculate input data bbox\n        let minX = Infinity;\n        let minY = Infinity;\n        let maxX = -Infinity;\n        let maxY = -Infinity;\n\n        for (let i = 0; i < n; i++) {\n            const x = coords[2 * i];\n            const y = coords[2 * i + 1];\n            if (x < minX) minX = x;\n            if (y < minY) minY = y;\n            if (x > maxX) maxX = x;\n            if (y > maxY) maxY = y;\n            this._ids[i] = i;\n        }\n        const cx = (minX + maxX) / 2;\n        const cy = (minY + maxY) / 2;\n\n        let minDist = Infinity;\n        let i0, i1, i2;\n\n        // pick a seed point close to the center\n        for (let i = 0; i < n; i++) {\n            const d = dist(cx, cy, coords[2 * i], coords[2 * i + 1]);\n            if (d < minDist) {\n                i0 = i;\n                minDist = d;\n            }\n        }\n        const i0x = coords[2 * i0];\n        const i0y = coords[2 * i0 + 1];\n\n        minDist = Infinity;\n\n        // find the point closest to the seed\n        for (let i = 0; i < n; i++) {\n            if (i === i0) continue;\n            const d = dist(i0x, i0y, coords[2 * i], coords[2 * i + 1]);\n            if (d < minDist && d > 0) {\n                i1 = i;\n                minDist = d;\n            }\n        }\n        let i1x = coords[2 * i1];\n        let i1y = coords[2 * i1 + 1];\n\n        let minRadius = Infinity;\n\n        // find the third point which forms the smallest circumcircle with the first two\n        for (let i = 0; i < n; i++) {\n            if (i === i0 || i === i1) continue;\n            const r = circumradius(i0x, i0y, i1x, i1y, coords[2 * i], coords[2 * i + 1]);\n            if (r < minRadius) {\n                i2 = i;\n                minRadius = r;\n            }\n        }\n        let i2x = coords[2 * i2];\n        let i2y = coords[2 * i2 + 1];\n\n        if (minRadius === Infinity) {\n            // order collinear points by dx (or dy if all x are identical)\n            // and return the list as a hull\n            for (let i = 0; i < n; i++) {\n                this._dists[i] = (coords[2 * i] - coords[0]) || (coords[2 * i + 1] - coords[1]);\n            }\n            quicksort(this._ids, this._dists, 0, n - 1);\n            const hull = new Uint32Array(n);\n            let j = 0;\n            for (let i = 0, d0 = -Infinity; i < n; i++) {\n                const id = this._ids[i];\n                if (this._dists[id] > d0) {\n                    hull[j++] = id;\n                    d0 = this._dists[id];\n                }\n            }\n            this.hull = hull.subarray(0, j);\n            this.triangles = new Uint32Array(0);\n            this.halfedges = new Uint32Array(0);\n            return;\n        }\n\n        // swap the order of the seed points for counter-clockwise orientation\n        if (orient(i0x, i0y, i1x, i1y, i2x, i2y)) {\n            const i = i1;\n            const x = i1x;\n            const y = i1y;\n            i1 = i2;\n            i1x = i2x;\n            i1y = i2y;\n            i2 = i;\n            i2x = x;\n            i2y = y;\n        }\n\n        const center = circumcenter(i0x, i0y, i1x, i1y, i2x, i2y);\n        this._cx = center.x;\n        this._cy = center.y;\n\n        for (let i = 0; i < n; i++) {\n            this._dists[i] = dist(coords[2 * i], coords[2 * i + 1], center.x, center.y);\n        }\n\n        // sort the points by distance from the seed triangle circumcenter\n        quicksort(this._ids, this._dists, 0, n - 1);\n\n        // set up the seed triangle as the starting hull\n        this._hullStart = i0;\n        let hullSize = 3;\n\n        hullNext[i0] = hullPrev[i2] = i1;\n        hullNext[i1] = hullPrev[i0] = i2;\n        hullNext[i2] = hullPrev[i1] = i0;\n\n        hullTri[i0] = 0;\n        hullTri[i1] = 1;\n        hullTri[i2] = 2;\n\n        hullHash.fill(-1);\n        hullHash[this._hashKey(i0x, i0y)] = i0;\n        hullHash[this._hashKey(i1x, i1y)] = i1;\n        hullHash[this._hashKey(i2x, i2y)] = i2;\n\n        this.trianglesLen = 0;\n        this._addTriangle(i0, i1, i2, -1, -1, -1);\n\n        for (let k = 0, xp, yp; k < this._ids.length; k++) {\n            const i = this._ids[k];\n            const x = coords[2 * i];\n            const y = coords[2 * i + 1];\n\n            // skip near-duplicate points\n            if (k > 0 && Math.abs(x - xp) <= EPSILON && Math.abs(y - yp) <= EPSILON) continue;\n            xp = x;\n            yp = y;\n\n            // skip seed triangle points\n            if (i === i0 || i === i1 || i === i2) continue;\n\n            // find a visible edge on the convex hull using edge hash\n            let start = 0;\n            for (let j = 0, key = this._hashKey(x, y); j < this._hashSize; j++) {\n                start = hullHash[(key + j) % this._hashSize];\n                if (start !== -1 && start !== hullNext[start]) break;\n            }\n\n            start = hullPrev[start];\n            let e = start, q;\n            while (q = hullNext[e], !orient(x, y, coords[2 * e], coords[2 * e + 1], coords[2 * q], coords[2 * q + 1])) {\n                e = q;\n                if (e === start) {\n                    e = -1;\n                    break;\n                }\n            }\n            if (e === -1) continue; // likely a near-duplicate point; skip it\n\n            // add the first triangle from the point\n            let t = this._addTriangle(e, i, hullNext[e], -1, -1, hullTri[e]);\n\n            // recursively flip triangles from the point until they satisfy the Delaunay condition\n            hullTri[i] = this._legalize(t + 2);\n            hullTri[e] = t; // keep track of boundary triangles on the hull\n            hullSize++;\n\n            // walk forward through the hull, adding more triangles and flipping recursively\n            let n = hullNext[e];\n            while (q = hullNext[n], orient(x, y, coords[2 * n], coords[2 * n + 1], coords[2 * q], coords[2 * q + 1])) {\n                t = this._addTriangle(n, i, q, hullTri[i], -1, hullTri[n]);\n                hullTri[i] = this._legalize(t + 2);\n                hullNext[n] = n; // mark as removed\n                hullSize--;\n                n = q;\n            }\n\n            // walk backward from the other side, adding more triangles and flipping\n            if (e === start) {\n                while (q = hullPrev[e], orient(x, y, coords[2 * q], coords[2 * q + 1], coords[2 * e], coords[2 * e + 1])) {\n                    t = this._addTriangle(q, i, e, -1, hullTri[e], hullTri[q]);\n                    this._legalize(t + 2);\n                    hullTri[q] = t;\n                    hullNext[e] = e; // mark as removed\n                    hullSize--;\n                    e = q;\n                }\n            }\n\n            // update the hull indices\n            this._hullStart = hullPrev[i] = e;\n            hullNext[e] = hullPrev[n] = i;\n            hullNext[i] = n;\n\n            // save the two new edges in the hash table\n            hullHash[this._hashKey(x, y)] = i;\n            hullHash[this._hashKey(coords[2 * e], coords[2 * e + 1])] = e;\n        }\n\n        this.hull = new Uint32Array(hullSize);\n        for (let i = 0, e = this._hullStart; i < hullSize; i++) {\n            this.hull[i] = e;\n            e = hullNext[e];\n        }\n\n        // trim typed triangle mesh arrays\n        this.triangles = this._triangles.subarray(0, this.trianglesLen);\n        this.halfedges = this._halfedges.subarray(0, this.trianglesLen);\n    }\n\n    _hashKey(x, y) {\n        return Math.floor(pseudoAngle(x - this._cx, y - this._cy) * this._hashSize) % this._hashSize;\n    }\n\n    _legalize(a) {\n        const {_triangles: triangles, _halfedges: halfedges, coords} = this;\n\n        let i = 0;\n        let ar = 0;\n\n        // recursion eliminated with a fixed-size stack\n        while (true) {\n            const b = halfedges[a];\n\n            /* if the pair of triangles doesn't satisfy the Delaunay condition\n             * (p1 is inside the circumcircle of [p0, pl, pr]), flip them,\n             * then do the same check/flip recursively for the new pair of triangles\n             *\n             *           pl                    pl\n             *          /||\\                  /  \\\n             *       al/ || \\bl            al/    \\a\n             *        /  ||  \\              /      \\\n             *       /  a||b  \\    flip    /___ar___\\\n             *     p0\\   ||   /p1   =>   p0\\---bl---/p1\n             *        \\  ||  /              \\      /\n             *       ar\\ || /br             b\\    /br\n             *          \\||/                  \\  /\n             *           pr                    pr\n             */\n            const a0 = a - a % 3;\n            ar = a0 + (a + 2) % 3;\n\n            if (b === -1) { // convex hull edge\n                if (i === 0) break;\n                a = EDGE_STACK[--i];\n                continue;\n            }\n\n            const b0 = b - b % 3;\n            const al = a0 + (a + 1) % 3;\n            const bl = b0 + (b + 2) % 3;\n\n            const p0 = triangles[ar];\n            const pr = triangles[a];\n            const pl = triangles[al];\n            const p1 = triangles[bl];\n\n            const illegal = inCircle(\n                coords[2 * p0], coords[2 * p0 + 1],\n                coords[2 * pr], coords[2 * pr + 1],\n                coords[2 * pl], coords[2 * pl + 1],\n                coords[2 * p1], coords[2 * p1 + 1]);\n\n            if (illegal) {\n                triangles[a] = p1;\n                triangles[b] = p0;\n\n                const hbl = halfedges[bl];\n\n                // edge swapped on the other side of the hull (rare); fix the halfedge reference\n                if (hbl === -1) {\n                    let e = this._hullStart;\n                    do {\n                        if (this._hullTri[e] === bl) {\n                            this._hullTri[e] = a;\n                            break;\n                        }\n                        e = this._hullPrev[e];\n                    } while (e !== this._hullStart);\n                }\n                this._link(a, hbl);\n                this._link(b, halfedges[ar]);\n                this._link(ar, bl);\n\n                const br = b0 + (b + 1) % 3;\n\n                // don't worry about hitting the cap: it can only happen on extremely degenerate input\n                if (i < EDGE_STACK.length) {\n                    EDGE_STACK[i++] = br;\n                }\n            } else {\n                if (i === 0) break;\n                a = EDGE_STACK[--i];\n            }\n        }\n\n        return ar;\n    }\n\n    _link(a, b) {\n        this._halfedges[a] = b;\n        if (b !== -1) this._halfedges[b] = a;\n    }\n\n    // add a new triangle given vertex indices and adjacent half-edge ids\n    _addTriangle(i0, i1, i2, a, b, c) {\n        const t = this.trianglesLen;\n\n        this._triangles[t] = i0;\n        this._triangles[t + 1] = i1;\n        this._triangles[t + 2] = i2;\n\n        this._link(t, a);\n        this._link(t + 1, b);\n        this._link(t + 2, c);\n\n        this.trianglesLen += 3;\n\n        return t;\n    }\n}\n\n// monotonically increases with real angle, but doesn't need expensive trigonometry\nfunction pseudoAngle(dx, dy) {\n    const p = dx / (Math.abs(dx) + Math.abs(dy));\n    return (dy > 0 ? 3 - p : 1 + p) / 4; // [0..1]\n}\n\nfunction dist(ax, ay, bx, by) {\n    const dx = ax - bx;\n    const dy = ay - by;\n    return dx * dx + dy * dy;\n}\n\n// return 2d orientation sign if we're confident in it through J. Shewchuk's error bound check\nfunction orientIfSure(px, py, rx, ry, qx, qy) {\n    const l = (ry - py) * (qx - px);\n    const r = (rx - px) * (qy - py);\n    return Math.abs(l - r) >= 3.3306690738754716e-16 * Math.abs(l + r) ? l - r : 0;\n}\n\n// a more robust orientation test that's stable in a given triangle (to fix robustness issues)\nfunction orient(rx, ry, qx, qy, px, py) {\n    const sign = orientIfSure(px, py, rx, ry, qx, qy) ||\n    orientIfSure(rx, ry, qx, qy, px, py) ||\n    orientIfSure(qx, qy, px, py, rx, ry);\n    return sign < 0;\n}\n\nfunction inCircle(ax, ay, bx, by, cx, cy, px, py) {\n    const dx = ax - px;\n    const dy = ay - py;\n    const ex = bx - px;\n    const ey = by - py;\n    const fx = cx - px;\n    const fy = cy - py;\n\n    const ap = dx * dx + dy * dy;\n    const bp = ex * ex + ey * ey;\n    const cp = fx * fx + fy * fy;\n\n    return dx * (ey * cp - bp * fy) -\n           dy * (ex * cp - bp * fx) +\n           ap * (ex * fy - ey * fx) < 0;\n}\n\nfunction circumradius(ax, ay, bx, by, cx, cy) {\n    const dx = bx - ax;\n    const dy = by - ay;\n    const ex = cx - ax;\n    const ey = cy - ay;\n\n    const bl = dx * dx + dy * dy;\n    const cl = ex * ex + ey * ey;\n    const d = 0.5 / (dx * ey - dy * ex);\n\n    const x = (ey * bl - dy * cl) * d;\n    const y = (dx * cl - ex * bl) * d;\n\n    return x * x + y * y;\n}\n\nfunction circumcenter(ax, ay, bx, by, cx, cy) {\n    const dx = bx - ax;\n    const dy = by - ay;\n    const ex = cx - ax;\n    const ey = cy - ay;\n\n    const bl = dx * dx + dy * dy;\n    const cl = ex * ex + ey * ey;\n    const d = 0.5 / (dx * ey - dy * ex);\n\n    const x = ax + (ey * bl - dy * cl) * d;\n    const y = ay + (dx * cl - ex * bl) * d;\n\n    return {x, y};\n}\n\nfunction quicksort(ids, dists, left, right) {\n    if (right - left <= 20) {\n        for (let i = left + 1; i <= right; i++) {\n            const temp = ids[i];\n            const tempDist = dists[temp];\n            let j = i - 1;\n            while (j >= left && dists[ids[j]] > tempDist) ids[j + 1] = ids[j--];\n            ids[j + 1] = temp;\n        }\n    } else {\n        const median = (left + right) >> 1;\n        let i = left + 1;\n        let j = right;\n        swap(ids, median, i);\n        if (dists[ids[left]] > dists[ids[right]]) swap(ids, left, right);\n        if (dists[ids[i]] > dists[ids[right]]) swap(ids, i, right);\n        if (dists[ids[left]] > dists[ids[i]]) swap(ids, left, i);\n\n        const temp = ids[i];\n        const tempDist = dists[temp];\n        while (true) {\n            do i++; while (dists[ids[i]] < tempDist);\n            do j--; while (dists[ids[j]] > tempDist);\n            if (j < i) break;\n            swap(ids, i, j);\n        }\n        ids[left + 1] = ids[j];\n        ids[j] = temp;\n\n        if (right - i + 1 >= j - left) {\n            quicksort(ids, dists, i, right);\n            quicksort(ids, dists, left, j - 1);\n        } else {\n            quicksort(ids, dists, left, j - 1);\n            quicksort(ids, dists, i, right);\n        }\n    }\n}\n\nfunction swap(arr, i, j) {\n    const tmp = arr[i];\n    arr[i] = arr[j];\n    arr[j] = tmp;\n}\n\nfunction defaultGetX(p) {\n    return p[0];\n}\nfunction defaultGetY(p) {\n    return p[1];\n}\n","const epsilon = 1e-6;\n\nexport default class Path {\n  constructor() {\n    this._x0 = this._y0 = // start of current subpath\n    this._x1 = this._y1 = null; // end of current subpath\n    this._ = \"\";\n  }\n  moveTo(x, y) {\n    this._ += `M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;\n  }\n  closePath() {\n    if (this._x1 !== null) {\n      this._x1 = this._x0, this._y1 = this._y0;\n      this._ += \"Z\";\n    }\n  }\n  lineTo(x, y) {\n    this._ += `L${this._x1 = +x},${this._y1 = +y}`;\n  }\n  arc(x, y, r) {\n    x = +x, y = +y, r = +r;\n    const x0 = x + r;\n    const y0 = y;\n    if (r < 0) throw new Error(\"negative radius\");\n    if (this._x1 === null) this._ += `M${x0},${y0}`;\n    else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) this._ += \"L\" + x0 + \",\" + y0;\n    if (!r) return;\n    this._ += `A${r},${r},0,1,1,${x - r},${y}A${r},${r},0,1,1,${this._x1 = x0},${this._y1 = y0}`;\n  }\n  rect(x, y, w, h) {\n    this._ += `M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${+w}v${+h}h${-w}Z`;\n  }\n  value() {\n    return this._ || null;\n  }\n}\n","export default class Polygon {\n  constructor() {\n    this._ = [];\n  }\n  moveTo(x, y) {\n    this._.push([x, y]);\n  }\n  closePath() {\n    this._.push(this._[0].slice());\n  }\n  lineTo(x, y) {\n    this._.push([x, y]);\n  }\n  value() {\n    return this._.length ? this._ : null;\n  }\n}\n","import Path from \"./path.js\";\nimport Polygon from \"./polygon.js\";\n\nexport default class Voronoi {\n  constructor(delaunay, [xmin, ymin, xmax, ymax] = [0, 0, 960, 500]) {\n    if (!((xmax = +xmax) >= (xmin = +xmin)) || !((ymax = +ymax) >= (ymin = +ymin))) throw new Error(\"invalid bounds\");\n    this.delaunay = delaunay;\n    this._circumcenters = new Float64Array(delaunay.points.length * 2);\n    this.vectors = new Float64Array(delaunay.points.length * 2);\n    this.xmax = xmax, this.xmin = xmin;\n    this.ymax = ymax, this.ymin = ymin;\n    this._init();\n  }\n  update() {\n    this.delaunay.update();\n    this._init();\n    return this;\n  }\n  _init() {\n    const {delaunay: {points, hull, triangles}, vectors} = this;\n\n    // Compute circumcenters.\n    const circumcenters = this.circumcenters = this._circumcenters.subarray(0, triangles.length / 3 * 2);\n    for (let i = 0, j = 0, n = triangles.length, x, y; i < n; i += 3, j += 2) {\n      const t1 = triangles[i] * 2;\n      const t2 = triangles[i + 1] * 2;\n      const t3 = triangles[i + 2] * 2;\n      const x1 = points[t1];\n      const y1 = points[t1 + 1];\n      const x2 = points[t2];\n      const y2 = points[t2 + 1];\n      const x3 = points[t3];\n      const y3 = points[t3 + 1];\n\n      const dx = x2 - x1;\n      const dy = y2 - y1;\n      const ex = x3 - x1;\n      const ey = y3 - y1;\n      const bl = dx * dx + dy * dy;\n      const cl = ex * ex + ey * ey;\n      const ab = (dx * ey - dy * ex) * 2;\n\n      if (!ab) {\n        // degenerate case (collinear diagram)\n        x = (x1 + x3) / 2 - 1e8 * ey;\n        y = (y1 + y3) / 2 + 1e8 * ex;\n      }\n      else if (Math.abs(ab) < 1e-8) {\n        // almost equal points (degenerate triangle)\n        x = (x1 + x3) / 2;\n        y = (y1 + y3) / 2;\n      } else {\n        const d = 1 / ab;\n        x = x1 + (ey * bl - dy * cl) * d;\n        y = y1 + (dx * cl - ex * bl) * d;\n      }\n      circumcenters[j] = x;\n      circumcenters[j + 1] = y;\n    }\n\n    // Compute exterior cell rays.\n    let h = hull[hull.length - 1];\n    let p0, p1 = h * 4;\n    let x0, x1 = points[2 * h];\n    let y0, y1 = points[2 * h + 1];\n    vectors.fill(0);\n    for (let i = 0; i < hull.length; ++i) {\n      h = hull[i];\n      p0 = p1, x0 = x1, y0 = y1;\n      p1 = h * 4, x1 = points[2 * h], y1 = points[2 * h + 1];\n      vectors[p0 + 2] = vectors[p1] = y0 - y1;\n      vectors[p0 + 3] = vectors[p1 + 1] = x1 - x0;\n    }\n  }\n  render(context) {\n    const buffer = context == null ? context = new Path : undefined;\n    const {delaunay: {halfedges, inedges, hull}, circumcenters, vectors} = this;\n    if (hull.length <= 1) return null;\n    for (let i = 0, n = halfedges.length; i < n; ++i) {\n      const j = halfedges[i];\n      if (j < i) continue;\n      const ti = Math.floor(i / 3) * 2;\n      const tj = Math.floor(j / 3) * 2;\n      const xi = circumcenters[ti];\n      const yi = circumcenters[ti + 1];\n      const xj = circumcenters[tj];\n      const yj = circumcenters[tj + 1];\n      this._renderSegment(xi, yi, xj, yj, context);\n    }\n    let h0, h1 = hull[hull.length - 1];\n    for (let i = 0; i < hull.length; ++i) {\n      h0 = h1, h1 = hull[i];\n      const t = Math.floor(inedges[h1] / 3) * 2;\n      const x = circumcenters[t];\n      const y = circumcenters[t + 1];\n      const v = h0 * 4;\n      const p = this._project(x, y, vectors[v + 2], vectors[v + 3]);\n      if (p) this._renderSegment(x, y, p[0], p[1], context);\n    }\n    return buffer && buffer.value();\n  }\n  renderBounds(context) {\n    const buffer = context == null ? context = new Path : undefined;\n    context.rect(this.xmin, this.ymin, this.xmax - this.xmin, this.ymax - this.ymin);\n    return buffer && buffer.value();\n  }\n  renderCell(i, context) {\n    const buffer = context == null ? context = new Path : undefined;\n    const points = this._clip(i);\n    if (points === null || !points.length) return;\n    context.moveTo(points[0], points[1]);\n    let n = points.length;\n    while (points[0] === points[n-2] && points[1] === points[n-1] && n > 1) n -= 2;\n    for (let i = 2; i < n; i += 2) {\n      if (points[i] !== points[i-2] || points[i+1] !== points[i-1])\n        context.lineTo(points[i], points[i + 1]);\n    }\n    context.closePath();\n    return buffer && buffer.value();\n  }\n  *cellPolygons() {\n    const {delaunay: {points}} = this;\n    for (let i = 0, n = points.length / 2; i < n; ++i) {\n      const cell = this.cellPolygon(i);\n      if (cell) cell.index = i, yield cell;\n    }\n  }\n  cellPolygon(i) {\n    const polygon = new Polygon;\n    this.renderCell(i, polygon);\n    return polygon.value();\n  }\n  _renderSegment(x0, y0, x1, y1, context) {\n    let S;\n    const c0 = this._regioncode(x0, y0);\n    const c1 = this._regioncode(x1, y1);\n    if (c0 === 0 && c1 === 0) {\n      context.moveTo(x0, y0);\n      context.lineTo(x1, y1);\n    } else if (S = this._clipSegment(x0, y0, x1, y1, c0, c1)) {\n      context.moveTo(S[0], S[1]);\n      context.lineTo(S[2], S[3]);\n    }\n  }\n  contains(i, x, y) {\n    if ((x = +x, x !== x) || (y = +y, y !== y)) return false;\n    return this.delaunay._step(i, x, y) === i;\n  }\n  *neighbors(i) {\n    const ci = this._clip(i);\n    if (ci) for (const j of this.delaunay.neighbors(i)) {\n      const cj = this._clip(j);\n      // find the common edge\n      if (cj) loop: for (let ai = 0, li = ci.length; ai < li; ai += 2) {\n        for (let aj = 0, lj = cj.length; aj < lj; aj += 2) {\n          if (ci[ai] == cj[aj]\n          && ci[ai + 1] == cj[aj + 1]\n          && ci[(ai + 2) % li] == cj[(aj + lj - 2) % lj]\n          && ci[(ai + 3) % li] == cj[(aj + lj - 1) % lj]\n          ) {\n            yield j;\n            break loop;\n          }\n        }\n      }\n    }\n  }\n  _cell(i) {\n    const {circumcenters, delaunay: {inedges, halfedges, triangles}} = this;\n    const e0 = inedges[i];\n    if (e0 === -1) return null; // coincident point\n    const points = [];\n    let e = e0;\n    do {\n      const t = Math.floor(e / 3);\n      points.push(circumcenters[t * 2], circumcenters[t * 2 + 1]);\n      e = e % 3 === 2 ? e - 2 : e + 1;\n      if (triangles[e] !== i) break; // bad triangulation\n      e = halfedges[e];\n    } while (e !== e0 && e !== -1);\n    return points;\n  }\n  _clip(i) {\n    // degenerate case (1 valid point: return the box)\n    if (i === 0 && this.delaunay.hull.length === 1) {\n      return [this.xmax, this.ymin, this.xmax, this.ymax, this.xmin, this.ymax, this.xmin, this.ymin];\n    }\n    const points = this._cell(i);\n    if (points === null) return null;\n    const {vectors: V} = this;\n    const v = i * 4;\n    return V[v] || V[v + 1]\n        ? this._clipInfinite(i, points, V[v], V[v + 1], V[v + 2], V[v + 3])\n        : this._clipFinite(i, points);\n  }\n  _clipFinite(i, points) {\n    const n = points.length;\n    let P = null;\n    let x0, y0, x1 = points[n - 2], y1 = points[n - 1];\n    let c0, c1 = this._regioncode(x1, y1);\n    let e0, e1;\n    for (let j = 0; j < n; j += 2) {\n      x0 = x1, y0 = y1, x1 = points[j], y1 = points[j + 1];\n      c0 = c1, c1 = this._regioncode(x1, y1);\n      if (c0 === 0 && c1 === 0) {\n        e0 = e1, e1 = 0;\n        if (P) P.push(x1, y1);\n        else P = [x1, y1];\n      } else {\n        let S, sx0, sy0, sx1, sy1;\n        if (c0 === 0) {\n          if ((S = this._clipSegment(x0, y0, x1, y1, c0, c1)) === null) continue;\n          [sx0, sy0, sx1, sy1] = S;\n        } else {\n          if ((S = this._clipSegment(x1, y1, x0, y0, c1, c0)) === null) continue;\n          [sx1, sy1, sx0, sy0] = S;\n          e0 = e1, e1 = this._edgecode(sx0, sy0);\n          if (e0 && e1) this._edge(i, e0, e1, P, P.length);\n          if (P) P.push(sx0, sy0);\n          else P = [sx0, sy0];\n        }\n        e0 = e1, e1 = this._edgecode(sx1, sy1);\n        if (e0 && e1) this._edge(i, e0, e1, P, P.length);\n        if (P) P.push(sx1, sy1);\n        else P = [sx1, sy1];\n      }\n    }\n    if (P) {\n      e0 = e1, e1 = this._edgecode(P[0], P[1]);\n      if (e0 && e1) this._edge(i, e0, e1, P, P.length);\n    } else if (this.contains(i, (this.xmin + this.xmax) / 2, (this.ymin + this.ymax) / 2)) {\n      return [this.xmax, this.ymin, this.xmax, this.ymax, this.xmin, this.ymax, this.xmin, this.ymin];\n    }\n    return P;\n  }\n  _clipSegment(x0, y0, x1, y1, c0, c1) {\n    while (true) {\n      if (c0 === 0 && c1 === 0) return [x0, y0, x1, y1];\n      if (c0 & c1) return null;\n      let x, y, c = c0 || c1;\n      if (c & 0b1000) x = x0 + (x1 - x0) * (this.ymax - y0) / (y1 - y0), y = this.ymax;\n      else if (c & 0b0100) x = x0 + (x1 - x0) * (this.ymin - y0) / (y1 - y0), y = this.ymin;\n      else if (c & 0b0010) y = y0 + (y1 - y0) * (this.xmax - x0) / (x1 - x0), x = this.xmax;\n      else y = y0 + (y1 - y0) * (this.xmin - x0) / (x1 - x0), x = this.xmin;\n      if (c0) x0 = x, y0 = y, c0 = this._regioncode(x0, y0);\n      else x1 = x, y1 = y, c1 = this._regioncode(x1, y1);\n    }\n  }\n  _clipInfinite(i, points, vx0, vy0, vxn, vyn) {\n    let P = Array.from(points), p;\n    if (p = this._project(P[0], P[1], vx0, vy0)) P.unshift(p[0], p[1]);\n    if (p = this._project(P[P.length - 2], P[P.length - 1], vxn, vyn)) P.push(p[0], p[1]);\n    if (P = this._clipFinite(i, P)) {\n      for (let j = 0, n = P.length, c0, c1 = this._edgecode(P[n - 2], P[n - 1]); j < n; j += 2) {\n        c0 = c1, c1 = this._edgecode(P[j], P[j + 1]);\n        if (c0 && c1) j = this._edge(i, c0, c1, P, j), n = P.length;\n      }\n    } else if (this.contains(i, (this.xmin + this.xmax) / 2, (this.ymin + this.ymax) / 2)) {\n      P = [this.xmin, this.ymin, this.xmax, this.ymin, this.xmax, this.ymax, this.xmin, this.ymax];\n    }\n    return P;\n  }\n  _edge(i, e0, e1, P, j) {\n    while (e0 !== e1) {\n      let x, y;\n      switch (e0) {\n        case 0b0101: e0 = 0b0100; continue; // top-left\n        case 0b0100: e0 = 0b0110, x = this.xmax, y = this.ymin; break; // top\n        case 0b0110: e0 = 0b0010; continue; // top-right\n        case 0b0010: e0 = 0b1010, x = this.xmax, y = this.ymax; break; // right\n        case 0b1010: e0 = 0b1000; continue; // bottom-right\n        case 0b1000: e0 = 0b1001, x = this.xmin, y = this.ymax; break; // bottom\n        case 0b1001: e0 = 0b0001; continue; // bottom-left\n        case 0b0001: e0 = 0b0101, x = this.xmin, y = this.ymin; break; // left\n      }\n      if ((P[j] !== x || P[j + 1] !== y) && this.contains(i, x, y)) {\n        P.splice(j, 0, x, y), j += 2;\n      }\n    }\n    if (P.length > 4) {\n      for (let i = 0; i < P.length; i+= 2) {\n        const j = (i + 2) % P.length, k = (i + 4) % P.length;\n        if (P[i] === P[j] && P[j] === P[k]\n        || P[i + 1] === P[j + 1] && P[j + 1] === P[k + 1])\n          P.splice(j, 2), i -= 2;\n      }\n    }\n    return j;\n  }\n  _project(x0, y0, vx, vy) {\n    let t = Infinity, c, x, y;\n    if (vy < 0) { // top\n      if (y0 <= this.ymin) return null;\n      if ((c = (this.ymin - y0) / vy) < t) y = this.ymin, x = x0 + (t = c) * vx;\n    } else if (vy > 0) { // bottom\n      if (y0 >= this.ymax) return null;\n      if ((c = (this.ymax - y0) / vy) < t) y = this.ymax, x = x0 + (t = c) * vx;\n    }\n    if (vx > 0) { // right\n      if (x0 >= this.xmax) return null;\n      if ((c = (this.xmax - x0) / vx) < t) x = this.xmax, y = y0 + (t = c) * vy;\n    } else if (vx < 0) { // left\n      if (x0 <= this.xmin) return null;\n      if ((c = (this.xmin - x0) / vx) < t) x = this.xmin, y = y0 + (t = c) * vy;\n    }\n    return [x, y];\n  }\n  _edgecode(x, y) {\n    return (x === this.xmin ? 0b0001\n        : x === this.xmax ? 0b0010 : 0b0000)\n        | (y === this.ymin ? 0b0100\n        : y === this.ymax ? 0b1000 : 0b0000);\n  }\n  _regioncode(x, y) {\n    return (x < this.xmin ? 0b0001\n        : x > this.xmax ? 0b0010 : 0b0000)\n        | (y < this.ymin ? 0b0100\n        : y > this.ymax ? 0b1000 : 0b0000);\n  }\n}\n","import Delaunator from \"delaunator\";\nimport Path from \"./path.js\";\nimport Polygon from \"./polygon.js\";\nimport Voronoi from \"./voronoi.js\";\n\nconst tau = 2 * Math.PI, pow = Math.pow;\n\nfunction pointX(p) {\n  return p[0];\n}\n\nfunction pointY(p) {\n  return p[1];\n}\n\n// A triangulation is collinear if all its triangles have a non-null area\nfunction collinear(d) {\n  const {triangles, coords} = d;\n  for (let i = 0; i < triangles.length; i += 3) {\n    const a = 2 * triangles[i],\n          b = 2 * triangles[i + 1],\n          c = 2 * triangles[i + 2],\n          cross = (coords[c] - coords[a]) * (coords[b + 1] - coords[a + 1])\n                - (coords[b] - coords[a]) * (coords[c + 1] - coords[a + 1]);\n    if (cross > 1e-10) return false;\n  }\n  return true;\n}\n\nfunction jitter(x, y, r) {\n  return [x + Math.sin(x + y) * r, y + Math.cos(x - y) * r];\n}\n\nexport default class Delaunay {\n  static from(points, fx = pointX, fy = pointY, that) {\n    return new Delaunay(\"length\" in points\n        ? flatArray(points, fx, fy, that)\n        : Float64Array.from(flatIterable(points, fx, fy, that)));\n  }\n  constructor(points) {\n    this._delaunator = new Delaunator(points);\n    this.inedges = new Int32Array(points.length / 2);\n    this._hullIndex = new Int32Array(points.length / 2);\n    this.points = this._delaunator.coords;\n    this._init();\n  }\n  update() {\n    this._delaunator.update();\n    this._init();\n    return this;\n  }\n  _init() {\n    const d = this._delaunator, points = this.points;\n\n    // check for collinear\n    if (d.hull && d.hull.length > 2 && collinear(d)) {\n      this.collinear = Int32Array.from({length: points.length/2}, (_,i) => i)\n        .sort((i, j) => points[2 * i] - points[2 * j] || points[2 * i + 1] - points[2 * j + 1]); // for exact neighbors\n      const e = this.collinear[0], f = this.collinear[this.collinear.length - 1],\n        bounds = [ points[2 * e], points[2 * e + 1], points[2 * f], points[2 * f + 1] ],\n        r = 1e-8 * Math.hypot(bounds[3] - bounds[1], bounds[2] - bounds[0]);\n      for (let i = 0, n = points.length / 2; i < n; ++i) {\n        const p = jitter(points[2 * i], points[2 * i + 1], r);\n        points[2 * i] = p[0];\n        points[2 * i + 1] = p[1];\n      }\n      this._delaunator = new Delaunator(points);\n    } else {\n      delete this.collinear;\n    }\n\n    const halfedges = this.halfedges = this._delaunator.halfedges;\n    const hull = this.hull = this._delaunator.hull;\n    const triangles = this.triangles = this._delaunator.triangles;\n    const inedges = this.inedges.fill(-1);\n    const hullIndex = this._hullIndex.fill(-1);\n\n    // Compute an index from each point to an (arbitrary) incoming halfedge\n    // Used to give the first neighbor of each point; for this reason,\n    // on the hull we give priority to exterior halfedges\n    for (let e = 0, n = halfedges.length; e < n; ++e) {\n      const p = triangles[e % 3 === 2 ? e - 2 : e + 1];\n      if (halfedges[e] === -1 || inedges[p] === -1) inedges[p] = e;\n    }\n    for (let i = 0, n = hull.length; i < n; ++i) {\n      hullIndex[hull[i]] = i;\n    }\n\n    // degenerate case: 1 or 2 (distinct) points\n    if (hull.length <= 2 && hull.length > 0) {\n      this.triangles = new Int32Array(3).fill(-1);\n      this.halfedges = new Int32Array(3).fill(-1);\n      this.triangles[0] = hull[0];\n      this.triangles[1] = hull[1];\n      this.triangles[2] = hull[1];\n      inedges[hull[0]] = 1;\n      if (hull.length === 2) inedges[hull[1]] = 0;\n    }\n  }\n  voronoi(bounds) {\n    return new Voronoi(this, bounds);\n  }\n  *neighbors(i) {\n    const {inedges, hull, _hullIndex, halfedges, triangles, collinear} = this;\n\n    // degenerate case with several collinear points\n    if (collinear) {\n      const l = collinear.indexOf(i);\n      if (l > 0) yield collinear[l - 1];\n      if (l < collinear.length - 1) yield collinear[l + 1];\n      return;\n    }\n\n    const e0 = inedges[i];\n    if (e0 === -1) return; // coincident point\n    let e = e0, p0 = -1;\n    do {\n      yield p0 = triangles[e];\n      e = e % 3 === 2 ? e - 2 : e + 1;\n      if (triangles[e] !== i) return; // bad triangulation\n      e = halfedges[e];\n      if (e === -1) {\n        const p = hull[(_hullIndex[i] + 1) % hull.length];\n        if (p !== p0) yield p;\n        return;\n      }\n    } while (e !== e0);\n  }\n  find(x, y, i = 0) {\n    if ((x = +x, x !== x) || (y = +y, y !== y)) return -1;\n    const i0 = i;\n    let c;\n    while ((c = this._step(i, x, y)) >= 0 && c !== i && c !== i0) i = c;\n    return c;\n  }\n  _step(i, x, y) {\n    const {inedges, hull, _hullIndex, halfedges, triangles, points} = this;\n    if (inedges[i] === -1 || !points.length) return (i + 1) % (points.length >> 1);\n    let c = i;\n    let dc = pow(x - points[i * 2], 2) + pow(y - points[i * 2 + 1], 2);\n    const e0 = inedges[i];\n    let e = e0;\n    do {\n      let t = triangles[e];\n      const dt = pow(x - points[t * 2], 2) + pow(y - points[t * 2 + 1], 2);\n      if (dt < dc) dc = dt, c = t;\n      e = e % 3 === 2 ? e - 2 : e + 1;\n      if (triangles[e] !== i) break; // bad triangulation\n      e = halfedges[e];\n      if (e === -1) {\n        e = hull[(_hullIndex[i] + 1) % hull.length];\n        if (e !== t) {\n          if (pow(x - points[e * 2], 2) + pow(y - points[e * 2 + 1], 2) < dc) return e;\n        }\n        break;\n      }\n    } while (e !== e0);\n    return c;\n  }\n  render(context) {\n    const buffer = context == null ? context = new Path : undefined;\n    const {points, halfedges, triangles} = this;\n    for (let i = 0, n = halfedges.length; i < n; ++i) {\n      const j = halfedges[i];\n      if (j < i) continue;\n      const ti = triangles[i] * 2;\n      const tj = triangles[j] * 2;\n      context.moveTo(points[ti], points[ti + 1]);\n      context.lineTo(points[tj], points[tj + 1]);\n    }\n    this.renderHull(context);\n    return buffer && buffer.value();\n  }\n  renderPoints(context, r = 2) {\n    const buffer = context == null ? context = new Path : undefined;\n    const {points} = this;\n    for (let i = 0, n = points.length; i < n; i += 2) {\n      const x = points[i], y = points[i + 1];\n      context.moveTo(x + r, y);\n      context.arc(x, y, r, 0, tau);\n    }\n    return buffer && buffer.value();\n  }\n  renderHull(context) {\n    const buffer = context == null ? context = new Path : undefined;\n    const {hull, points} = this;\n    const h = hull[0] * 2, n = hull.length;\n    context.moveTo(points[h], points[h + 1]);\n    for (let i = 1; i < n; ++i) {\n      const h = 2 * hull[i];\n      context.lineTo(points[h], points[h + 1]);\n    }\n    context.closePath();\n    return buffer && buffer.value();\n  }\n  hullPolygon() {\n    const polygon = new Polygon;\n    this.renderHull(polygon);\n    return polygon.value();\n  }\n  renderTriangle(i, context) {\n    const buffer = context == null ? context = new Path : undefined;\n    const {points, triangles} = this;\n    const t0 = triangles[i *= 3] * 2;\n    const t1 = triangles[i + 1] * 2;\n    const t2 = triangles[i + 2] * 2;\n    context.moveTo(points[t0], points[t0 + 1]);\n    context.lineTo(points[t1], points[t1 + 1]);\n    context.lineTo(points[t2], points[t2 + 1]);\n    context.closePath();\n    return buffer && buffer.value();\n  }\n  *trianglePolygons() {\n    const {triangles} = this;\n    for (let i = 0, n = triangles.length / 3; i < n; ++i) {\n      yield this.trianglePolygon(i);\n    }\n  }\n  trianglePolygon(i) {\n    const polygon = new Polygon;\n    this.renderTriangle(i, polygon);\n    return polygon.value();\n  }\n}\n\nfunction flatArray(points, fx, fy, that) {\n  const n = points.length;\n  const array = new Float64Array(n * 2);\n  for (let i = 0; i < n; ++i) {\n    const p = points[i];\n    array[i * 2] = fx.call(that, p, i, points);\n    array[i * 2 + 1] = fy.call(that, p, i, points);\n  }\n  return array;\n}\n\nfunction* flatIterable(points, fx, fy, that) {\n  let i = 0;\n  for (const p of points) {\n    yield fx.call(that, p, i, points);\n    yield fy.call(that, p, i, points);\n    ++i;\n  }\n}\n","// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use\nconst mul = 0x19660D;\nconst inc = 0x3C6EF35F;\nconst eps = 1 / 0x100000000;\n\nexport default function lcg(seed = Math.random()) {\n  let state = (0 <= seed && seed < 1 ? seed / eps : Math.abs(seed)) | 0;\n  return () => (state = mul * state + inc | 0, eps * (state >>> 0));\n}\n","import { randomLcg } from 'd3-random'; // returns a seeded random number generator\n\nexport default function getSeededRandom(\n/** Seed in the interval [0, 1). */\nseed) {\n  return randomLcg(seed);\n}","import getSeededRandom from './getSeededRandom';\nexport default function genDateValue(length,\n/** Optional random seed in the interval [0, 1). */\nseed,\n/** Optional start time in ms UTC. */\nstartTimeMs) {\n  var random = seed == null ? Math.random : getSeededRandom(seed);\n  var startDateMs = startTimeMs == null ? Date.now() : new Date(startTimeMs).valueOf();\n  return new Array(length).fill(1).map(function (_, idx) {\n    return {\n      date: new Date(startDateMs - idx * 3600000),\n      // eslint-disable-next-line no-bitwise\n      value: random() * 3000 | 0\n    };\n  });\n}","import { scaleThreshold } from 'd3-scale';\nimport scaleOperator from '../operators/scaleOperator';\nexport var updateThresholdScale = scaleOperator('domain', 'range', 'reverse');\nexport default function createThresholdScale(config) {\n  return updateThresholdScale(scaleThreshold(), config);\n}","import {bisect} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport default function threshold() {\n  var domain = [0.5],\n      range = [0, 1],\n      unknown,\n      n = 1;\n\n  function scale(x) {\n    return x != null && x <= x ? range[bisect(domain, x, 0, n)] : unknown;\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n  };\n\n  scale.invertExtent = function(y) {\n    var i = range.indexOf(y);\n    return [domain[i - 1], domain[i]];\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.copy = function() {\n    return threshold()\n        .domain(domain)\n        .range(range)\n        .unknown(unknown);\n  };\n\n  return initRange.apply(scale, arguments);\n}\n","export default function(a, b) {\n  return a = +a, b = +b, function(t) {\n    return Math.round(a * (1 - t) + b * t);\n  };\n}\n","var e10 = Math.sqrt(50),\n    e5 = Math.sqrt(10),\n    e2 = Math.sqrt(2);\n\nexport default function(start, stop, count) {\n  var reverse,\n      i = -1,\n      n,\n      ticks,\n      step;\n\n  stop = +stop, start = +start, count = +count;\n  if (start === stop && count > 0) return [start];\n  if (reverse = stop < start) n = start, start = stop, stop = n;\n  if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n  if (step > 0) {\n    let r0 = Math.round(start / step), r1 = Math.round(stop / step);\n    if (r0 * step < start) ++r0;\n    if (r1 * step > stop) --r1;\n    ticks = new Array(n = r1 - r0 + 1);\n    while (++i < n) ticks[i] = (r0 + i) * step;\n  } else {\n    step = -step;\n    let r0 = Math.round(start * step), r1 = Math.round(stop * step);\n    if (r0 / step < start) ++r0;\n    if (r1 / step > stop) --r1;\n    ticks = new Array(n = r1 - r0 + 1);\n    while (++i < n) ticks[i] = (r0 + i) / step;\n  }\n\n  if (reverse) ticks.reverse();\n\n  return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n  var step = (stop - start) / Math.max(0, count),\n      power = Math.floor(Math.log(step) / Math.LN10),\n      error = step / Math.pow(10, power);\n  return power >= 0\n      ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n      : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n  var step0 = Math.abs(stop - start) / Math.max(0, count),\n      step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n      error = step0 / step1;\n  if (error >= e10) step1 *= 10;\n  else if (error >= e5) step1 *= 5;\n  else if (error >= e2) step1 *= 2;\n  return stop < start ? -step1 : step1;\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n  var d = formatDecimalParts(x, p);\n  if (!d) return x + \"\";\n  var coefficient = d[0],\n      exponent = d[1],\n      i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n      n = coefficient.length;\n  return i === n ? coefficient\n      : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n      : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n      : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n  thousands: \",\",\n  grouping: [3],\n  currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n  locale = formatLocale(definition);\n  format = locale.format;\n  formatPrefix = locale.formatPrefix;\n  return locale;\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n  var d = formatDecimalParts(x, p);\n  if (!d) return x + \"\";\n  var coefficient = d[0],\n      exponent = d[1];\n  return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n      : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n      : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatDecimal from \"./formatDecimal.js\";\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n  \"%\": (x, p) => (x * 100).toFixed(p),\n  \"b\": (x) => Math.round(x).toString(2),\n  \"c\": (x) => x + \"\",\n  \"d\": formatDecimal,\n  \"e\": (x, p) => x.toExponential(p),\n  \"f\": (x, p) => x.toFixed(p),\n  \"g\": (x, p) => x.toPrecision(p),\n  \"o\": (x) => Math.round(x).toString(8),\n  \"p\": (x, p) => formatRounded(x * 100, p),\n  \"r\": formatRounded,\n  \"s\": formatPrefixAuto,\n  \"X\": (x) => Math.round(x).toString(16).toUpperCase(),\n  \"x\": (x) => Math.round(x).toString(16)\n};\n","export default function(x) {\n  return x;\n}\n","import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n    prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n  var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n      currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n      currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n      decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n      numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n      percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n      minus = locale.minus === undefined ? \"−\" : locale.minus + \"\",\n      nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n  function newFormat(specifier) {\n    specifier = formatSpecifier(specifier);\n\n    var fill = specifier.fill,\n        align = specifier.align,\n        sign = specifier.sign,\n        symbol = specifier.symbol,\n        zero = specifier.zero,\n        width = specifier.width,\n        comma = specifier.comma,\n        precision = specifier.precision,\n        trim = specifier.trim,\n        type = specifier.type;\n\n    // The \"n\" type is an alias for \",g\".\n    if (type === \"n\") comma = true, type = \"g\";\n\n    // The \"\" type, and any invalid type, is an alias for \".12~g\".\n    else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n    // If zero fill is specified, padding goes after sign and before digits.\n    if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n    // Compute the prefix and suffix.\n    // For SI-prefix, the suffix is lazily computed.\n    var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n        suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n    // What format function should we use?\n    // Is this an integer type?\n    // Can this type generate exponential notation?\n    var formatType = formatTypes[type],\n        maybeSuffix = /[defgprs%]/.test(type);\n\n    // Set the default precision if not specified,\n    // or clamp the specified precision to the supported range.\n    // For significant precision, it must be in [1, 21].\n    // For fixed precision, it must be in [0, 20].\n    precision = precision === undefined ? 6\n        : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n        : Math.max(0, Math.min(20, precision));\n\n    function format(value) {\n      var valuePrefix = prefix,\n          valueSuffix = suffix,\n          i, n, c;\n\n      if (type === \"c\") {\n        valueSuffix = formatType(value) + valueSuffix;\n        value = \"\";\n      } else {\n        value = +value;\n\n        // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n        var valueNegative = value < 0 || 1 / value < 0;\n\n        // Perform the initial formatting.\n        value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n        // Trim insignificant zeros.\n        if (trim) value = formatTrim(value);\n\n        // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n        if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n        // Compute the prefix and suffix.\n        valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n        valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n        // Break the formatted value into the integer “value” part that can be\n        // grouped, and fractional or exponential “suffix” part that is not.\n        if (maybeSuffix) {\n          i = -1, n = value.length;\n          while (++i < n) {\n            if (c = value.charCodeAt(i), 48 > c || c > 57) {\n              valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n              value = value.slice(0, i);\n              break;\n            }\n          }\n        }\n      }\n\n      // If the fill character is not \"0\", grouping is applied before padding.\n      if (comma && !zero) value = group(value, Infinity);\n\n      // Compute the padding.\n      var length = valuePrefix.length + value.length + valueSuffix.length,\n          padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n      // If the fill character is \"0\", grouping is applied after padding.\n      if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n      // Reconstruct the final output based on the desired alignment.\n      switch (align) {\n        case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n        case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n        case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n        default: value = padding + valuePrefix + value + valueSuffix; break;\n      }\n\n      return numerals(value);\n    }\n\n    format.toString = function() {\n      return specifier + \"\";\n    };\n\n    return format;\n  }\n\n  function formatPrefix(specifier, value) {\n    var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n        e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n        k = Math.pow(10, -e),\n        prefix = prefixes[8 + e / 3];\n    return function(value) {\n      return f(k * value) + prefix;\n    };\n  }\n\n  return {\n    format: newFormat,\n    formatPrefix: formatPrefix\n  };\n}\n","export default function(grouping, thousands) {\n  return function(value, width) {\n    var i = value.length,\n        t = [],\n        j = 0,\n        g = grouping[0],\n        length = 0;\n\n    while (i > 0 && g > 0) {\n      if (length + g + 1 > width) g = Math.max(1, width - length);\n      t.push(value.substring(i -= g, i + g));\n      if ((length += g + 1) > width) break;\n      g = grouping[j = (j + 1) % grouping.length];\n    }\n\n    return t.reverse().join(thousands);\n  };\n}\n","export default function(numerals) {\n  return function(value) {\n    return value.replace(/[0-9]/g, function(i) {\n      return numerals[+i];\n    });\n  };\n}\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n  out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n    switch (s[i]) {\n      case \".\": i0 = i1 = i; break;\n      case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n      default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n    }\n  }\n  return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\nimport number from \"./number.js\";\n\nconst ascendingBisect = bisector(ascending);\nexport const bisectRight = ascendingBisect.right;\nexport const bisectLeft = ascendingBisect.left;\nexport const bisectCenter = bisector(number).center;\nexport default bisectRight;\n","export default function(x) {\n  return x === null ? NaN : +x;\n}\n\nexport function* numbers(values, valueof) {\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value != null && (value = +value) >= value) {\n        yield value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n        yield value;\n      }\n    }\n  }\n}\n"],"sourceRoot":""}