@digitransit-component/digitransit-component-autosuggest 3.0.5 → 3.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../node_modules/@babel/runtime/helpers/esm/typeof.js","../../../../node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","../../../../node_modules/@babel/runtime/helpers/esm/toPrimitive.js","../../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js","../../../../digitransit-search-util/packages/digitransit-search-util-tru-eq/index.js","../../../../digitransit-search-util/packages/digitransit-search-util-is-duplicate/index.js","../../../../digitransit-search-util/packages/digitransit-search-util-helpers/index.js","../../../../digitransit-search-util/packages/digitransit-search-util-filter-matching-to-input/index.js","../../../../digitransit-search-util/packages/digitransit-search-util-serialize/index.js","../../../../digitransit-search-util/packages/digitransit-search-util-get-json/index.js","../../../../digitransit-search-util/packages/digitransit-search-util-get-geocoding-results/index.js","../../../../digitransit-search-util/packages/digitransit-search-util-execute-search-immidiate/index.js","../../../../digitransit-search-util/packages/digitransit-search-util-uniq-by-label/index.js","../../../../node_modules/moment/moment.js","../../../../node_modules/moment-timezone/moment-timezone.js","../../../../node_modules/moment-timezone/index.js","../../../../node_modules/moment/locale/fi.js","../../../../node_modules/moment/locale/sv.js","../../../../node_modules/moment/locale/de.js","../src/helpers/translations.js","../../../../node_modules/style-inject/dist/style-inject.es.js","../src/helpers/MobileSearch.js","../../../../node_modules/@hsl-fi/hooks/lib/index.js","../src/index.js","../../../../digitransit-search-util/packages/digitransit-search-util-get-label/index.js","../src/helpers/withScrollLock.js"],"sourcesContent":["function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}\nexport { _typeof as default };","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nfunction toPropertyKey(t) {\n var i = toPrimitive(t, \"string\");\n return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nexport { toPropertyKey as default };","import _typeof from \"./typeof.js\";\nfunction toPrimitive(t, r) {\n if (\"object\" != _typeof(t) || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != _typeof(i)) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nexport { toPrimitive as default };","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperty(e, r, t) {\n return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n value: t,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : e[r] = t, e;\n}\nexport { _defineProperty as default };","/**\n * accept equality of non nullish values\n *\n * @name truEq\n * @param {Boolean|Number|BigInt|String|Symbol|Object} val1 First value to be compared\n * @param {Boolean|Number|BigInt|String|Symbol|Object} param2 Second value to be compared\n * @returns {Boolean} true/false\n * @example\n * digitransit-util.truEq('2', '2');\n * //=true\n */\nexport default function truEq(val1, val2) {\n return val1 && val2 && val1 === val2;\n}\n","import truEq from '@digitransit-search-util/digitransit-search-util-tru-eq';\n/**\n * Checks that is items duplicate\n *\n * @name isDuplicate\n * @param {Object} item1 Object containing following attributes:\n * {\n * properties {\n * gtfsId: String\n * gid: String from geocoder\n * name: String\n * label: String\n * address: String\n * geometry {\n * coordinates [Number lat, Number lon]\n * }\n * }\n * }\n * @param {Object} item2 Object with same attributes as item1\n * @returns {Boolean} true/false\n * @example\n * digitransit-util.isDuplicate(param1, param2);\n * //=true\n */\n\nconst gtfsStopLayers = ['stop', 'station', 'favouriteStop', 'favouriteStation'];\nconst vehicleRentalLayers = ['favouriteVehicleRentalStation', 'bikestation'];\n\nfunction labelIdToGid(id) {\n if (!id) {\n return '';\n }\n const parts = id.split(':');\n if (parts.length === 0) {\n return '';\n }\n return `citybikes${parts[0]}:bikestation:${parts[1]}`;\n}\n\nexport default function isDuplicate(item1, item2) {\n const props1 = item1.properties;\n const props2 = item2.properties;\n\n if (item1.type === 'FutureRoute' && item2.type === 'FutureRoute') {\n const o1 = props1.origin;\n const d1 = props1.destination;\n const o2 = props2.origin;\n const d2 = props2.destination;\n\n const name1 = `${o1.name}//${o1.localadmin}//${d1.name}//${d1.localadmin}`;\n const name2 = `${o2.name}//${o2.localadmin}//${d2.name}//${d2.localadmin}`;\n\n return name1 === name2;\n }\n if (item1.type === 'FutureRoute' || item2.type === 'FutureRoute') {\n return false;\n }\n if (\n vehicleRentalLayers.includes(props1.layer) &&\n vehicleRentalLayers.includes(props2.layer)\n ) {\n const id1 = props1.gid || labelIdToGid(props1.labelId);\n const id2 = props2.gid || labelIdToGid(props2.labelId);\n return id1 === id2;\n }\n if (props1.gtfsId && props2.gtfsId) {\n return props1.gtfsId === props2.gtfsId;\n }\n if (\n gtfsStopLayers.includes(props1.layer) &&\n gtfsStopLayers.includes(props2.layer) &&\n props1.gid &&\n props2.gid\n ) {\n return props1.gid === props2.gid;\n }\n\n const p1 = item1 && item1.geometry ? item1.geometry.coordinates : undefined;\n const p2 = item2 && item2.geometry ? item2.geometry.coordinates : undefined;\n\n if (p1 && p2) {\n // both have geometry\n if (Math.abs(p1[0] - p2[0]) < 1e-6 && Math.abs(p1[1] - p2[1]) < 1e-6) {\n // location match is not enough. Require a common property\n if (\n truEq(props1.name, props2.name) ||\n truEq(props1.label, props2.label) ||\n truEq(props1.address, props2.address) ||\n truEq(props1.address, props2.label) ||\n truEq(props1.label, props2.address)\n ) {\n return true;\n }\n }\n }\n return false;\n}\n","import isString from 'lodash/isString';\nimport orderBy from 'lodash/orderBy';\nimport uniqWith from 'lodash/uniqWith';\nimport isDuplicate from '@digitransit-search-util/digitransit-search-util-is-duplicate';\n\nconst normalize = str => {\n if (!isString(str)) {\n return '';\n }\n return str.toLowerCase();\n};\n\n/**\n * LayerType depicts the type of the point-of-interest.\n */\nconst LayerType = {\n Address: 'address',\n Back: 'back',\n CurrentPosition: 'currentPosition',\n FavouriteStop: 'favouriteStop',\n FavouriteStation: 'favouriteStation',\n FavouritePlace: 'favouritePlace',\n FavouriteRoute: 'favouriteRoute',\n FavouriteVehicleRentalStation: 'favouriteVehicleRentalStation',\n FutureRoute: 'futureRoute',\n Station: 'station',\n SelectFromMap: 'selectFromMap',\n SelectFromOwnLocations: 'ownLocations',\n Stop: 'stop',\n Street: 'street',\n Venue: 'venue',\n VehicleRentalStation: 'bikestation',\n CarPark: 'carpark',\n BikePark: 'bikepark',\n};\nexport const isStop = ({ layer, type }) =>\n layer === 'stop' ||\n layer === 'favouriteStop' ||\n type === 'stop' ||\n type === 'favouriteStop';\n\nconst DEFAULT_ROUTES_PREFIX = 'linjat';\nconst DEFAULT_STOPS_PREFIX = 'pysakit';\n\nexport const mapRoute = (item, pathOpts) => {\n if (item === null || item === undefined) {\n return null;\n }\n\n const opts = pathOpts || {};\n\n const routesPrefix = opts.routesPrefix || DEFAULT_ROUTES_PREFIX;\n const stopsPrefix = opts.stopsPrefix || DEFAULT_STOPS_PREFIX;\n\n const link = `/${routesPrefix}/${item.gtfsId}/${stopsPrefix}`;\n return {\n type: 'Route',\n properties: {\n ...item,\n layer: `route-${item.mode}`,\n link,\n },\n geometry: {\n coordinates: null,\n },\n };\n};\n\n/**\n * Tries to match the given search term agains the collection of properties\n * for a geocoding result. The best match will be returned (min: 0, max: 1.5).\n *\n * @param {string} normalizedTerm the normalized search term.\n * @param {*} resultProperties the geocoding result's property collection.\n */\nexport const match = (normalizedTerm, resultProperties) => {\n if (!isString(normalizedTerm) || normalizedTerm.length === 0) {\n return 0;\n }\n\n const matchProps = ['name', 'label', 'address', 'shortName'];\n return matchProps\n .map(name => resultProperties[name])\n .filter(value => isString(value) && value.length > 0)\n .map(value => {\n const normalizedValue = normalize(value);\n if (normalizedValue.indexOf(normalizedTerm) === 0) {\n // full match at start. Return max result when match is full, not only partial\n return 0.5 + normalizedTerm.length / normalizedValue.length;\n }\n // because of filtermatchingtoinput, we know that match occurred somewhere\n // don't run filtermatching again but estimate roughly:\n // the longer the matching string, the better confidence, max being 0.5\n return (0.5 * normalizedTerm.length) / (normalizedTerm.length + 1);\n })\n .reduce(\n (previous, current) => (current > previous ? current : previous),\n 0,\n );\n};\n\n/**\n * Ranks the result based on its layer property.\n *\n * @param {string} layer the layer property.\n * @param {string} source the source property.\n */\nexport const getLayerRank = (layer, source) => {\n switch (layer) {\n case LayerType.CurrentPosition:\n return 1;\n case LayerType.Back:\n return 0.9;\n case LayerType.SelectFromMap:\n return 0.8;\n case LayerType.SelectFromOwnLocations:\n return 0.79;\n case LayerType.FavouriteStation:\n case LayerType.FavouritePlace:\n case LayerType.FavouriteStop:\n case LayerType.FavouriteRoute:\n case LayerType.FavouriteVehicleRentalStation:\n return 0.45;\n case LayerType.FutureRoute:\n return 0.44;\n case LayerType.Station: {\n if (isString(source) && source.indexOf('gtfs') === 0) {\n return 0.43;\n }\n return 0.42;\n }\n case LayerType.CarPark:\n return 0.38;\n case LayerType.BikePark:\n return 0.38;\n case LayerType.VehicleRentalStation:\n return 0.38;\n case LayerType.Stop:\n return 0.36;\n default:\n // venue, address, street, route-xxx\n return 0.41;\n }\n};\n\n/**\n * Helper function to sort the results. Orders as follows:\n * - current position first for an empty search\n * - matching routes first\n * - otherwise by confidence, except that:\n * - boost well matching stations (especially from GTFS)\n * - rank stops lower as they tend to occupy most of the search results\n * - items with no confidence (old searches and favorites):\n * - rank favourites better than ordinary old searches\n * - rank full match better than partial match\n * - rank match at middle word lower than match at the beginning\n * - rank bike rental stations lower\n * @param {*[]} results The search results that were received\n * @param {String} term The search term that was used\n */\nexport const sortSearchResults = (lineRegexp, results, term = '') => {\n if (!Array.isArray(results)) {\n return results;\n }\n const isLineIdentifier = value =>\n isString(value) && lineRegexp && lineRegexp.test(value);\n\n const normalizedTerm = normalize(term);\n const isLineSearch = isLineIdentifier(normalizedTerm);\n\n const orderedResults = orderBy(\n results,\n [\n // rank matching routes best\n result =>\n isLineSearch &&\n isLineIdentifier(normalize(result.properties.shortName)) &&\n normalize(result.properties.shortName).indexOf(normalizedTerm) === 0\n ? 1\n : 0,\n\n result => {\n const { confidence, layer, source } = result.properties;\n if (normalizedTerm.length === 0) {\n // Doing search with empty string.\n // No confidence to match, so use ranked old searches and favourites\n return getLayerRank(layer, source);\n }\n\n // must handle a mixup of geocoder searches and items above\n // Normal confidence range from geocoder is about 0.3 .. 1\n if (!confidence) {\n // not from geocoder, estimate confidence ourselves\n return (\n getLayerRank(layer, source) +\n match(normalizedTerm, result.properties)\n );\n }\n // geocoded items with confidence, just adjust a little\n switch (layer) {\n case LayerType.Station: {\n const boost = source.indexOf('gtfs') === 0 ? 0.02 : 0.01;\n return confidence + boost;\n }\n case LayerType.Stop:\n return confidence - 0.05;\n case LayerType.CarPark:\n return confidence - 0.05;\n case LayerType.BikePark:\n return confidence - 0.05;\n case LayerType.VehicleRentalStation:\n return confidence - 0.04;\n default:\n return confidence;\n }\n },\n ],\n ['desc', 'desc'],\n );\n\n return uniqWith(orderedResults, isDuplicate);\n};\n\n/**\n * Parses stop's name without stop code from a stop name from geocoding results\n *\n * @param {string} label stop's name from geocoding results.\n * @param {string} stopCode stop code.\n */\nexport const getStopName = (name, stopCode) => {\n if (\n stopCode !== undefined &&\n stopCode !== null &&\n name.lastIndexOf(stopCode) !== -1\n ) {\n return name.substring(0, name.lastIndexOf(stopCode) - 1);\n }\n return name;\n};\n","import get from 'lodash/get';\n\n/**\n * Function that filters list matching to input.\n *\n * @name filterMatchingToInput\n * @param {Array} list List containin objects e.g( {\n * type: 'Feature'\n * properties: {\n * label: 'testaddress4',\n * layer: 'address',\n * name: 'testaddress4',\n * },\n * geometry: { coordinates: [lon, lat] },\n * },)\n * @param {String} Input Input given for filtering the list\n * @param {Array} fields List of fields that list is filtered by e.g ([properties.label, properties.name])\n * @returns {Array} Filtered Array.\n * @example\n * digitransit-util.filterMatchingToInput([{type: feature, properties { ... name: testaddress4 } ... }], 'testaddress4', 'properties.name');\n * //= List containing object with given name.\n */\nexport default function filterMatchingToInput(list, Input, fields) {\n if (typeof Input === 'string' && Input.length > 0) {\n const input = Input.toLowerCase().trim();\n const multiWord = input.includes(' ') || input.includes(',');\n return list.filter(item => {\n let parts = [];\n fields.forEach(pName => {\n let value = get(item, pName);\n\n if (\n !multiWord &&\n (pName === 'properties.label' || pName === 'address') &&\n value\n ) {\n // special case: drop last parts i.e. city and neighbourhood\n value = value.split(',');\n if (value.length > 2) {\n value.splice(value.length - 2, 2);\n } else if (value.length > 1) {\n value.splice(value.length - 1, 1);\n }\n value = value.join(',');\n }\n if (value) {\n if (multiWord) {\n parts = parts.concat(value.toLowerCase());\n } else {\n parts = parts.concat(\n value.toLowerCase().replace(/,/g, ' ').split(' '),\n );\n }\n }\n });\n for (let i = 0; i < parts.length; i++) {\n if (parts[i].indexOf(input) === 0) {\n // accept match only at word start\n return true;\n }\n }\n return false;\n });\n }\n\n return list;\n}\n","/**\n * Serializes objects\n *\n * @name serialize\n * @param {Object} obj Object to be serialized\n * @param {Any} prefix\n * @returns {String} Serialized object\n * @example\n * digitransit-search-util.serialize(param1, param2);\n * //=true\n */\nexport default function serialize(obj, prefix) {\n if (!obj) {\n return '';\n }\n return Object.keys(obj)\n .map(p => {\n const k = prefix || p;\n const v = obj[p];\n\n return typeof v === 'object'\n ? serialize(v, k)\n : `${encodeURIComponent(k)}=${encodeURIComponent(v)}`;\n })\n .join('&');\n}\n","import serialize from '@digitransit-search-util/digitransit-search-util-serialize';\n/**\n * Return Promise for a url json get request\n *\n * @name getJson\n * @param {String} url\n * @param {Array} params\n * @returns {Object} response\n * @example\n * digitransit-search-util.getJson(param1, param2);\n * //=response\n */\nconst axios = require('axios').default;\n\nexport default function getJson(url, params) {\n return axios\n .get(\n encodeURI(url) +\n (params\n ? (url.search(/\\?/) === -1 ? '?' : '&') + serialize(params)\n : ''),\n {\n timeout: 10000,\n method: 'GET',\n\n headers: {\n Accept: 'application/json',\n },\n },\n )\n .then(res => {\n return res.data;\n });\n}\n","import getJson from '@digitransit-search-util/digitransit-search-util-get-json';\n\nconst DEFAULT_PELIAS_URL = 'https://api.digitransit.fi/geocoding/v1/search';\n/**\n * <DESCRIPTION>\n *\n * @name getGeocodingResults\n * @param {String} searchString\n * @param {String} searchParams (Optional) Parameters appended to url, basically box / polygon to restrict search area\n * @param {String} lang (Optional) search language\n * @param {Object} focusPoint (Optional) Own Position (PELIAS API)\n * @param {String} sources (Optional) search sources (e.g OSM, GTFS..)\n * @param {Object} minimalRegexp (Optional) Regexp for testing\n * @param {*} geocodingLayers (Optional) Array of strings that is used to determine which layers is searched, e.g. ['venue', 'address', 'stop']\n * @returns {String} Results in JSON form\n * @example\n * digitransit-search-util.getGeocodingResults(\"result\");\n * //= e.g. {text:\"result\"}\n */\nexport default function getGeocodingResults(\n searchString,\n searchParams,\n lang,\n focusPoint,\n sources,\n peliasUrl,\n minimalRegexp,\n geocodingLayers,\n) {\n const text = searchString ? searchString.trim() : null;\n if (\n text === undefined ||\n text === null ||\n text.length < 1 ||\n (minimalRegexp && !minimalRegexp.test(text))\n ) {\n return Promise.resolve([]);\n }\n const PELIAS_URL = peliasUrl || DEFAULT_PELIAS_URL;\n let opts = { text, ...searchParams, ...focusPoint, lang };\n if (sources) {\n opts = { ...opts, sources };\n }\n if (geocodingLayers) {\n const layers = geocodingLayers.toString();\n opts = { ...opts, layers };\n }\n return getJson(PELIAS_URL, opts).then(res => {\n return res.features;\n });\n}\n","import debounce from 'lodash/debounce';\nimport flatten from 'lodash/flatten';\nimport take from 'lodash/take';\nimport {\n sortSearchResults,\n isStop,\n} from '@digitransit-search-util/digitransit-search-util-helpers';\nimport filterMatchingToInput from '@digitransit-search-util/digitransit-search-util-filter-matching-to-input';\nimport getGeocodingResults from '@digitransit-search-util/digitransit-search-util-get-geocoding-results';\nimport getJson from '@digitransit-search-util/digitransit-search-util-get-json';\n\nfunction getStopsFromGeocoding(stops, URL_PELIAS_PLACE) {\n if (!stops || stops.length < 1) {\n return Promise.resolve([]);\n }\n let gids = '';\n const stopsWithGids = stops.map(stop => {\n const type = stop.type === 'stop' ? 'stop' : 'station';\n let gid = `gtfs${stop.gtfsId.split(':')[0].toLowerCase()}:${type}:GTFS:${\n stop.gtfsId\n }`;\n if (stop.code) {\n gid += `#${stop.code}`;\n }\n gids += `${gid},`;\n return { ...stop, gid };\n });\n const stopStationMap = stopsWithGids.reduce(function redu(\n map,\n stopOrStation,\n ) {\n // eslint-disable-next-line no-param-reassign\n map[stopOrStation.gid] = stopOrStation;\n return map;\n }, {});\n return getJson(URL_PELIAS_PLACE, {\n ids: gids.slice(0, -1),\n // lang: context.getStore('PreferencesStore').getLanguage(), TODO enable this when OTP supports translations\n }).then(res => {\n return res.features.map(stop => {\n const favourite = {\n type: 'FavouriteStop',\n properties: {\n addendum: stop.properties.addendum,\n gid: stopStationMap[stop.properties.gid].gid,\n code: stopStationMap[stop.properties.gid].code,\n gtfsId: stopStationMap[stop.properties.gid].gtfsId,\n lastUpdated: stopStationMap[stop.properties.gid].lastUpdated,\n favouriteId: stopStationMap[stop.properties.gid].favouriteId,\n address: stop.properties.label,\n layer: isStop(stop.properties) ? 'favouriteStop' : 'favouriteStation',\n },\n geometry: stop.geometry,\n };\n return favourite;\n });\n });\n}\nfunction filterFavouriteLocations(favourites, input) {\n return Promise.resolve(\n filterMatchingToInput(favourites, input, ['address', 'name']).map(item => ({\n type: 'FavouritePlace',\n properties: {\n ...item,\n label: item.name,\n layer: 'favouritePlace',\n },\n geometry: { type: 'Point', coordinates: [item.lon, item.lat] },\n })),\n );\n}\nfunction selectPositionFomMap(input) {\n if (typeof input !== 'string' || input.length === 0) {\n return Promise.resolve([\n {\n type: 'SelectFromMap',\n address: 'SelectFromMap',\n lat: null,\n lon: null,\n properties: {\n labelId: 'select-from-map',\n layer: 'selectFromMap',\n address: 'SelectFromMap',\n lat: null,\n lon: null,\n },\n geometry: {\n type: 'Point',\n coordinates: [],\n },\n },\n ]);\n }\n return Promise.resolve([]);\n}\n\nfunction getCurrentPositionIfEmpty(input, position) {\n if (typeof input !== 'string' || input.length === 0) {\n return Promise.resolve([\n {\n type: 'CurrentLocation',\n address: position.address,\n lat: position.lat,\n lon: position.lon,\n properties: {\n labelId: 'use-own-position',\n layer: 'currentPosition',\n address: position.address,\n lat: position.lat,\n lon: position.lon,\n },\n geometry: {\n type: 'Point',\n coordinates: [position.lon, position.lat],\n },\n },\n ]);\n }\n\n return Promise.resolve([]);\n}\n\nfunction selectFromOwnLocations(input) {\n if (typeof input !== 'string' || input.length === 0) {\n return Promise.resolve([\n {\n type: 'SelectFromOwnLocations',\n address: 'SelectFromOwnLocations',\n lat: null,\n lon: null,\n properties: {\n labelId: 'select-from-own-locations',\n layer: 'ownLocations',\n address: 'selectFromOwnLocations',\n lat: null,\n lon: null,\n },\n geometry: {\n type: 'Point',\n coordinates: [],\n },\n },\n ]);\n }\n return Promise.resolve([]);\n}\n\nfunction getBackSuggestion() {\n return Promise.resolve([\n {\n type: 'back',\n address: 'back',\n lat: null,\n lon: null,\n properties: {\n labelId: 'back',\n layer: 'back',\n address: 'back',\n lat: null,\n lon: null,\n },\n geometry: {\n type: 'Point',\n coordinates: [],\n },\n },\n ]);\n}\n\nfunction filterFavouriteStops(stopsAndStations, input, useStops, useStations) {\n return stopsAndStations.then(stopsStations => {\n const candidates = stopsStations.filter(s =>\n s.type === 'stop' ? useStops : useStations,\n );\n return filterMatchingToInput(candidates, input, [\n 'properties.name',\n 'properties.name',\n 'properties.address',\n ]);\n });\n}\n\nfunction filterOldSearches(oldSearches, input, dropLayers) {\n let matchingOldSearches = filterMatchingToInput(oldSearches, input, [\n 'properties.name',\n 'properties.label',\n 'properties.address',\n 'properties.shortName',\n 'properties.longName',\n ]);\n if (dropLayers) {\n // don't want these\n matchingOldSearches = matchingOldSearches.filter(\n item => !dropLayers.includes(item.properties.layer),\n );\n }\n return Promise.resolve(\n take(matchingOldSearches, 10).map(item => {\n const newItem = {\n ...item,\n type: 'OldSearch',\n timetableClicked: false, // reset latest selection action\n arrowClicked: false,\n };\n delete newItem.properties.confidence;\n return newItem;\n }),\n );\n}\n\nfunction hasFavourites(searchContext) {\n const favouriteLocations = searchContext.getFavouriteLocations(\n searchContext.context,\n );\n if (favouriteLocations?.length > 0) {\n return true;\n }\n\n const favouriteVehicleRentalStations =\n searchContext.getFavouriteVehicleRentalStations(searchContext.context);\n if (favouriteVehicleRentalStations?.length > 0) {\n return true;\n }\n const favouriteStops = searchContext.getFavouriteStops(searchContext.context);\n return favouriteStops?.length > 0;\n}\n\nconst routeLayers = [\n 'route-TRAM',\n 'route-BUS',\n 'route-RAIL',\n 'route-FERRY',\n 'route-SUBWAY',\n 'route-AIRPLANE',\n 'route-FUNICULAR',\n];\nconst locationLayers = ['venue', 'address', 'street'];\nconst parkingLayers = ['carpark', 'bikepark'];\nconst stopLayers = ['stop', 'station'];\n\n/**\n * Executes the search\n *\n */\nexport function getSearchResults(\n targets,\n sources,\n transportMode,\n searchContext,\n filterResults,\n geocodingSize,\n { input },\n callback,\n pathOpts,\n refPoint,\n) {\n const {\n getPositions,\n getFavouriteLocations,\n getOldSearches,\n getFavouriteStops,\n parkingAreaSources,\n getLanguage,\n getStopAndStationsQuery,\n getFavouriteVehicleRentalStationsQuery,\n getFavouriteVehicleRentalStations,\n getFavouriteRoutesQuery,\n getFavouriteRoutes,\n getRoutesQuery,\n context,\n isPeliasLocationAware: locationAware,\n minimalRegexp,\n lineRegexp,\n URL_PELIAS,\n URL_PELIAS_PLACE,\n feedIDs,\n geocodingSearchParams,\n geocodingSources,\n getFutureRoutes,\n cityBikeNetworks,\n } = searchContext;\n // if no targets are provided, search them all.\n const allTargets = !targets || targets.length === 0;\n // if no sources are provided, use them all.\n const allSources = !sources || sources.length === 0;\n const position = getPositions(context);\n const searchComponents = [];\n const searches = { type: 'all', term: input, results: [] };\n const language = getLanguage(context);\n const focusPoint =\n locationAware && refPoint?.lat && refPoint?.lon\n ? {\n // Round coordinates to approx 1 km, in order to improve caching\n 'focus.point.lat': refPoint.lat.toFixed(3),\n 'focus.point.lon': refPoint.lon.toFixed(3),\n }\n : {};\n const mode = transportMode ? transportMode.split('-')[1] : undefined;\n if (\n targets.includes('CurrentPosition') &&\n position.status !== 'geolocation-not-supported'\n ) {\n searchComponents.push(getCurrentPositionIfEmpty(input, position));\n }\n if (allTargets || targets.includes('MapPosition')) {\n searchComponents.push(selectPositionFomMap(input));\n }\n if (targets.includes('FutureRoutes')) {\n const items = getFutureRoutes(context);\n searchComponents.push(take(items, 3));\n }\n if (\n targets.includes('SelectFromOwnLocations') &&\n hasFavourites(searchContext)\n ) {\n searchComponents.push(selectFromOwnLocations(input));\n }\n if (allTargets || targets.includes('Locations')) {\n // eslint-disable-next-line prefer-destructuring\n const searchParams = geocodingSearchParams;\n if (sources.includes('Favourite')) {\n const favouriteLocations = getFavouriteLocations(context);\n searchComponents.push(\n filterFavouriteLocations(favouriteLocations, input),\n );\n if (sources.includes('Back')) {\n searchComponents.push(getBackSuggestion());\n }\n }\n\n if (allSources || sources.includes('Datasource')) {\n const geocodingLayers = ['venue', 'address', 'street'];\n if (targets.includes('Stations')) {\n geocodingLayers.push('station'); // search stations from OSM\n }\n searchComponents.push(\n getGeocodingResults(\n input,\n searchParams,\n language,\n focusPoint,\n geocodingSources.join(','),\n URL_PELIAS,\n minimalRegexp,\n geocodingLayers,\n ),\n );\n }\n if (allSources || sources.includes('History')) {\n const locationHistory = getOldSearches(context, 'endpoint');\n const dropLayers = ['bikestation'];\n dropLayers.push(...stopLayers);\n dropLayers.push(...routeLayers);\n dropLayers.push(...parkingLayers);\n searchComponents.push(\n filterOldSearches(locationHistory, input, dropLayers),\n );\n }\n }\n if (allTargets || targets.includes('ParkingAreas')) {\n if (allSources || sources.includes('Datasource')) {\n const searchParams = geocodingSearchParams;\n if (geocodingSize && geocodingSize !== 10) {\n searchParams.size = geocodingSize;\n }\n const geocodingLayers = ['carpark', 'bikepark'];\n const feedIds = parkingAreaSources ? parkingAreaSources.join(',') : null;\n searchComponents.push(\n getGeocodingResults(\n input,\n searchParams,\n language,\n focusPoint,\n feedIds,\n URL_PELIAS,\n minimalRegexp,\n geocodingLayers,\n ).then(results => {\n if (filterResults) {\n return filterResults(results, mode);\n }\n return results;\n }),\n );\n }\n if (allSources || sources.includes('History')) {\n const history = getOldSearches(context);\n const dropLayers = ['bikestation'];\n dropLayers.push(...stopLayers);\n dropLayers.push(...routeLayers);\n dropLayers.push(...locationLayers);\n searchComponents.push(filterOldSearches(history, input, dropLayers));\n }\n }\n\n const useStops = targets.includes('Stops');\n const useStations = targets.includes('Stations');\n\n if (allTargets || useStops || useStations) {\n if (sources.includes('Favourite')) {\n const favouriteStops = getFavouriteStops(context);\n let stopsAndStations;\n if (favouriteStops.every(stop => stop.type === 'station')) {\n stopsAndStations = getStopsFromGeocoding(\n favouriteStops,\n URL_PELIAS_PLACE,\n ).then(results => {\n if (filterResults) {\n return filterResults(results, mode);\n }\n return results;\n });\n } else {\n stopsAndStations = getStopAndStationsQuery(favouriteStops)\n .then(favourites =>\n getStopsFromGeocoding(favourites, URL_PELIAS_PLACE),\n )\n .then(results => {\n if (filterResults) {\n return filterResults(results, mode);\n }\n return results;\n });\n }\n searchComponents.push(\n filterFavouriteStops(stopsAndStations, input, useStops, useStations),\n );\n }\n if (allSources || sources.includes('Datasource')) {\n const geocodingLayers = [];\n if (useStops) {\n geocodingLayers.push('stop');\n }\n if (useStations) {\n geocodingLayers.push('station');\n }\n const searchParams =\n geocodingSize && geocodingSize !== 10 ? { size: geocodingSize } : {};\n if (geocodingSearchParams && geocodingSearchParams['boundary.country']) {\n searchParams['boundary.country'] =\n geocodingSearchParams['boundary.country'];\n }\n // a little hack: when searching location data, automatically dedupe stops\n // this could be a new explicit prop\n if (allTargets || targets.includes('Locations')) {\n searchParams.dedupestops = 1;\n }\n const feeds = feedIDs.map(v => `gtfs${v}`).join(',');\n searchComponents.push(\n getGeocodingResults(\n input,\n searchParams,\n language,\n focusPoint,\n feeds,\n URL_PELIAS,\n minimalRegexp,\n geocodingLayers,\n ).then(results => {\n if (filterResults) {\n return filterResults(results, mode);\n }\n return results;\n }),\n );\n }\n if (allSources || sources.includes('History')) {\n const stopHistory = getOldSearches(context).filter(item => {\n if (item.properties.gid) {\n return item.properties.gid.includes('GTFS:');\n }\n return true;\n });\n const dropLayers = ['bikestation'];\n dropLayers.push(...routeLayers);\n dropLayers.push(...locationLayers);\n dropLayers.push(...parkingLayers);\n if (!useStops) {\n dropLayers.push('stop');\n }\n if (!useStations) {\n dropLayers.push('station');\n }\n if (transportMode) {\n searchComponents.push(\n filterOldSearches(stopHistory, input, dropLayers).then(result =>\n filterResults ? filterResults(result, mode) : result,\n ),\n );\n } else {\n searchComponents.push(\n filterOldSearches(stopHistory, input, dropLayers),\n );\n }\n }\n }\n if (allTargets || targets.includes('Routes')) {\n if (sources.includes('Favourite')) {\n const favouriteRoutes = getFavouriteRoutes(context);\n searchComponents.push(\n getFavouriteRoutesQuery(favouriteRoutes, input, mode, pathOpts).then(\n result =>\n filterResults ? filterResults(result, mode, 'Routes') : result,\n ),\n );\n }\n searchComponents.push(\n getRoutesQuery(input, feedIDs, transportMode, pathOpts).then(result =>\n filterResults ? filterResults(result, mode, 'Routes') : result,\n ),\n );\n if (allSources || sources.includes('History')) {\n const routeHistory = getOldSearches(context);\n const dropLayers = ['bikestation'];\n if (transportMode) {\n dropLayers.push(...routeLayers.filter(i => !(i === transportMode)));\n }\n dropLayers.push(...stopLayers);\n dropLayers.push(...locationLayers);\n dropLayers.push(...parkingLayers);\n\n searchComponents.push(\n filterOldSearches(routeHistory, input, dropLayers).then(results =>\n filterResults ? filterResults(results, mode, 'Routes') : results,\n ),\n );\n }\n }\n if (allTargets || targets.includes('VehicleRentalStations')) {\n if (sources.includes('Favourite')) {\n const favouriteVehicleRentalStation =\n getFavouriteVehicleRentalStations(context);\n searchComponents.push(\n getFavouriteVehicleRentalStationsQuery(\n favouriteVehicleRentalStation,\n input,\n ),\n );\n }\n if (allSources || sources.includes('Datasource')) {\n const geocodingLayers = ['bikestation'];\n const searchParams =\n geocodingSize && geocodingSize !== 10 ? { size: geocodingSize } : {};\n searchComponents.push(\n getGeocodingResults(\n input,\n searchParams,\n language,\n focusPoint,\n cityBikeNetworks.join(','),\n URL_PELIAS,\n minimalRegexp,\n geocodingLayers,\n ).then(results => {\n if (filterResults) {\n return filterResults(results, mode, 'VehicleRentalStations');\n }\n return results;\n }),\n );\n }\n if (allSources || sources.includes('History')) {\n const history = getOldSearches(context);\n const dropLayers = [...stopLayers];\n dropLayers.push(...routeLayers);\n dropLayers.push(...locationLayers);\n dropLayers.push(...parkingLayers);\n\n searchComponents.push(filterOldSearches(history, input, dropLayers));\n }\n }\n\n const searchResultsPromise = Promise.all(searchComponents)\n .then(flatten)\n .then(results => {\n searches.results = results;\n })\n .catch(err => {\n searches.error = err;\n });\n searchResultsPromise.then(() => {\n callback({\n ...searches,\n results: sortSearchResults(lineRegexp, searches.results, input),\n });\n });\n}\n\nconst debouncedSearch = debounce(getSearchResults, 300, {\n leading: true,\n});\n\nexport const executeSearch = (\n targets,\n sources,\n transportMode,\n searchContext,\n filterResults,\n geocodingSize,\n data,\n callback,\n pathOpts,\n refPoint,\n) => {\n callback(null); // This means 'we are searching'\n debouncedSearch(\n targets,\n sources,\n transportMode,\n searchContext,\n filterResults,\n geocodingSize,\n data,\n callback,\n pathOpts,\n refPoint,\n );\n};\n","import uniqWith from 'lodash/uniqWith';\nimport isEqual from 'lodash/isEqual';\nimport memoize from 'lodash/memoize';\nimport escapeRegExp from 'lodash/escapeRegExp';\nimport cloneDeep from 'lodash/cloneDeep';\n\n/**\n * Location properties.\n * @typedef {LocationProperties}\n * @property {string} layer Suggestion layer.\n * @property {lat} [number]\n * @property {lon} [number]\n * @property {string} address Address.\n */\n\n/**\n * Returns localadmin (city name) for suggestions\n *\n * @name getLocaladmin\n * @param {Object} suggestion suggestion's properties from geocoding or a favourite stop/station.\n * Expects last part of an address (after ',') to contain the city name of the suggestion location.\n * @returns {String} City name or empty string\n */\nconst getLocaladmin = suggestion =>\n suggestion.localadmin ||\n suggestion.localadmin ||\n (suggestion.address &&\n suggestion.address.lastIndexOf(',') < suggestion.address.length - 2 &&\n suggestion.address.substring(suggestion.address.lastIndexOf(',') + 2)) ||\n '';\n\nexport const getStopCode = ({ id, code }) => {\n if (code) {\n return code;\n }\n if (\n id === undefined ||\n typeof id.indexOf === 'undefined' ||\n id.indexOf('#') === -1\n ) {\n return undefined;\n }\n // id from pelias\n return id.substring(id.indexOf('#') + 1);\n};\n\nexport const formatFavouritePlaceLabel = (name, address) => [\n name || (address && address.split(',')[0]),\n typeof address === 'string'\n ? address.replace(new RegExp(`${escapeRegExp(name)}([ ,]|$)+`), '')\n : '',\n];\n\n/**\n * Format suggestion-pair [name, address] by `suggestion.layer`.\n *\n * @name getNameLabel\n * @param {LocationProperties} suggestion\n * @param {boolean} [plain]\n *\n * @returns {Array.<string>} Formatted label.\n */\nexport const getNameLabel = memoize(\n (suggestion, plain = false) => {\n switch (suggestion.layer) {\n case 'currentPosition':\n return [suggestion.labelId, suggestion.address];\n case 'selectFromMap':\n case 'ownLocations':\n case 'back':\n return [suggestion.labelId];\n case 'favouritePlace':\n return formatFavouritePlaceLabel(suggestion.name, suggestion.address);\n case 'favouriteVehicleRentalStation':\n case 'bikestation':\n return [suggestion.name];\n case 'favouriteRoute':\n case 'route-BUS':\n case 'route-TRAM':\n case 'route-RAIL':\n case 'route-SUBWAY':\n case 'route-FERRY':\n case 'route-FUNICULAR':\n case 'route-AIRPLANE':\n return !plain && suggestion.shortName\n ? [\n suggestion.gtfsId,\n suggestion.mode.toLowerCase(),\n suggestion.longName,\n ]\n : [\n suggestion.shortName,\n suggestion.longName,\n suggestion.agency ? suggestion.agency.name : undefined,\n ];\n case 'venue':\n case 'address':\n case 'street':\n return [\n suggestion.name,\n suggestion.label.replace(\n new RegExp(`${escapeRegExp(suggestion.name)}(,)?( )?`),\n '',\n ),\n ];\n case 'favouriteStop':\n case 'stop':\n return plain\n ? [\n suggestion.name ||\n suggestion.label ||\n (suggestion.address && suggestion.address.split(',')[0]),\n getLocaladmin(suggestion),\n ]\n : [\n suggestion.name,\n suggestion.id,\n getStopCode(suggestion),\n getLocaladmin(suggestion),\n ];\n case 'favouriteStation':\n case 'station':\n default:\n return [\n suggestion.name ||\n suggestion.label ||\n (suggestion.address && suggestion.address.split(',')[0]),\n getLocaladmin(suggestion),\n ];\n }\n },\n (item, plain) => {\n const i = cloneDeep(item);\n i.plain = plain;\n return i;\n },\n);\n\n/**\n * Checks that features are unique by label\n *\n * @name uniqByLabel\n * @param {Array} features Array of features\n * @returns {Array} Array of unique features\n * @example\n * digitransit-search-util.uniqByLabel(features);\n * //= Array(2)\n */\nexport default function uniqByLabel(features) {\n return uniqWith(features, (feat1, feat2) => {\n if (feat1.type === 'FutureRoute' || feat2.type === 'FutureRoute') {\n return false;\n }\n return (\n isEqual(getNameLabel(feat1.properties), getNameLabel(feat2.properties)) &&\n feat1.properties.layer === feat2.properties.layer\n );\n });\n}\n","//! moment.js\n//! version : 2.30.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 arrLen = arr.length;\n for (i = 0; i < arrLen; ++i) {\n res.push(fn(arr[i], i));\n }\n return res;\n }\n\n function extend(a, b) {\n for (var i in b) {\n if (hasOwnProp(b, i)) {\n a[i] = b[i];\n }\n }\n\n if (hasOwnProp(b, 'toString')) {\n a.toString = b.toString;\n }\n\n if (hasOwnProp(b, 'valueOf')) {\n a.valueOf = b.valueOf;\n }\n\n return a;\n }\n\n function createUTC(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, true).utc();\n }\n\n function defaultParsingFlags() {\n // We need to deep clone this object.\n return {\n empty: false,\n unusedTokens: [],\n unusedInput: [],\n overflow: -2,\n charsLeftOver: 0,\n nullInput: false,\n invalidEra: null,\n invalidMonth: null,\n invalidFormat: false,\n userInvalidated: false,\n iso: false,\n parsedDateParts: [],\n era: null,\n meridiem: null,\n rfc2822: false,\n weekdayMismatch: false,\n };\n }\n\n function getParsingFlags(m) {\n if (m._pf == null) {\n m._pf = defaultParsingFlags();\n }\n return m._pf;\n }\n\n var some;\n if (Array.prototype.some) {\n some = Array.prototype.some;\n } else {\n some = function (fun) {\n var t = Object(this),\n len = t.length >>> 0,\n i;\n\n for (i = 0; i < len; i++) {\n if (i in t && fun.call(this, t[i], i, t)) {\n return true;\n }\n }\n\n return false;\n };\n }\n\n function isValid(m) {\n var flags = null,\n parsedParts = false,\n isNowValid = m._d && !isNaN(m._d.getTime());\n if (isNowValid) {\n flags = getParsingFlags(m);\n parsedParts = some.call(flags.parsedDateParts, function (i) {\n return i != null;\n });\n isNowValid =\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 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 return m._isValid;\n }\n\n function createInvalid(flags) {\n var m = createUTC(NaN);\n if (flags != null) {\n extend(getParsingFlags(m), flags);\n } else {\n getParsingFlags(m).userInvalidated = true;\n }\n\n return m;\n }\n\n // Plugins that add properties should also add the key here (null value),\n // so we can properly clone ourselves.\n var momentProperties = (hooks.momentProperties = []),\n updateInProgress = false;\n\n function copyConfig(to, from) {\n var i,\n prop,\n val,\n momentPropertiesLen = momentProperties.length;\n\n if (!isUndefined(from._isAMomentObject)) {\n to._isAMomentObject = from._isAMomentObject;\n }\n if (!isUndefined(from._i)) {\n to._i = from._i;\n }\n if (!isUndefined(from._f)) {\n to._f = from._f;\n }\n if (!isUndefined(from._l)) {\n to._l = from._l;\n }\n if (!isUndefined(from._strict)) {\n to._strict = from._strict;\n }\n if (!isUndefined(from._tzm)) {\n to._tzm = from._tzm;\n }\n if (!isUndefined(from._isUTC)) {\n to._isUTC = from._isUTC;\n }\n if (!isUndefined(from._offset)) {\n to._offset = from._offset;\n }\n if (!isUndefined(from._pf)) {\n to._pf = getParsingFlags(from);\n }\n if (!isUndefined(from._locale)) {\n to._locale = from._locale;\n }\n\n if (momentPropertiesLen > 0) {\n for (i = 0; i < momentPropertiesLen; i++) {\n prop = momentProperties[i];\n val = from[prop];\n if (!isUndefined(val)) {\n to[prop] = val;\n }\n }\n }\n\n return to;\n }\n\n // Moment prototype object\n function Moment(config) {\n copyConfig(this, config);\n this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n if (!this.isValid()) {\n this._d = new Date(NaN);\n }\n // Prevent infinite loop in case updateOffset creates new moment\n // objects.\n if (updateInProgress === false) {\n updateInProgress = true;\n hooks.updateOffset(this);\n updateInProgress = false;\n }\n }\n\n function isMoment(obj) {\n return (\n obj instanceof Moment || (obj != null && obj._isAMomentObject != null)\n );\n }\n\n function warn(msg) {\n if (\n hooks.suppressDeprecationWarnings === false &&\n typeof console !== 'undefined' &&\n console.warn\n ) {\n console.warn('Deprecation warning: ' + msg);\n }\n }\n\n function deprecate(msg, fn) {\n var firstTime = true;\n\n return extend(function () {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(null, msg);\n }\n if (firstTime) {\n var args = [],\n arg,\n i,\n key,\n argLen = arguments.length;\n for (i = 0; i < argLen; i++) {\n arg = '';\n if (typeof arguments[i] === 'object') {\n arg += '\\n[' + i + '] ';\n for (key in arguments[0]) {\n if (hasOwnProp(arguments[0], key)) {\n arg += key + ': ' + arguments[0][key] + ', ';\n }\n }\n arg = arg.slice(0, -2); // Remove trailing comma and space\n } else {\n arg = arguments[i];\n }\n args.push(arg);\n }\n warn(\n msg +\n '\\nArguments: ' +\n Array.prototype.slice.call(args).join('') +\n '\\n' +\n new Error().stack\n );\n firstTime = false;\n }\n return fn.apply(this, arguments);\n }, fn);\n }\n\n var deprecations = {};\n\n function deprecateSimple(name, msg) {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(name, msg);\n }\n if (!deprecations[name]) {\n warn(msg);\n deprecations[name] = true;\n }\n }\n\n hooks.suppressDeprecationWarnings = false;\n hooks.deprecationHandler = null;\n\n function isFunction(input) {\n return (\n (typeof Function !== 'undefined' && input instanceof Function) ||\n Object.prototype.toString.call(input) === '[object Function]'\n );\n }\n\n function set(config) {\n var prop, i;\n for (i in config) {\n if (hasOwnProp(config, i)) {\n prop = config[i];\n if (isFunction(prop)) {\n this[i] = prop;\n } else {\n this['_' + i] = prop;\n }\n }\n }\n this._config = config;\n // Lenient ordinal parsing accepts just a number in addition to\n // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n this._dayOfMonthOrdinalParseLenient = new RegExp(\n (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n '|' +\n /\\d{1,2}/.source\n );\n }\n\n function mergeConfigs(parentConfig, childConfig) {\n var res = extend({}, parentConfig),\n prop;\n for (prop in childConfig) {\n if (hasOwnProp(childConfig, prop)) {\n if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n res[prop] = {};\n extend(res[prop], parentConfig[prop]);\n extend(res[prop], childConfig[prop]);\n } else if (childConfig[prop] != null) {\n res[prop] = childConfig[prop];\n } else {\n delete res[prop];\n }\n }\n }\n for (prop in parentConfig) {\n if (\n hasOwnProp(parentConfig, prop) &&\n !hasOwnProp(childConfig, prop) &&\n isObject(parentConfig[prop])\n ) {\n // make sure changes to properties don't modify parent config\n res[prop] = extend({}, res[prop]);\n }\n }\n return res;\n }\n\n function Locale(config) {\n if (config != null) {\n this.set(config);\n }\n }\n\n var keys;\n\n if (Object.keys) {\n keys = Object.keys;\n } else {\n keys = function (obj) {\n var i,\n res = [];\n for (i in obj) {\n if (hasOwnProp(obj, i)) {\n res.push(i);\n }\n }\n return res;\n };\n }\n\n var defaultCalendar = {\n sameDay: '[Today at] LT',\n nextDay: '[Tomorrow at] LT',\n nextWeek: 'dddd [at] LT',\n lastDay: '[Yesterday at] LT',\n lastWeek: '[Last] dddd [at] LT',\n sameElse: 'L',\n };\n\n function calendar(key, mom, now) {\n var output = this._calendar[key] || this._calendar['sameElse'];\n return isFunction(output) ? output.call(mom, now) : output;\n }\n\n function zeroFill(number, targetLength, forceSign) {\n var absNumber = '' + Math.abs(number),\n zerosToFill = targetLength - absNumber.length,\n sign = number >= 0;\n return (\n (sign ? (forceSign ? '+' : '') : '-') +\n Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +\n absNumber\n );\n }\n\n var formattingTokens =\n /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,\n localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,\n formatFunctions = {},\n formatTokenFunctions = {};\n\n // token: 'M'\n // padded: ['MM', 2]\n // ordinal: 'Mo'\n // callback: function () { this.month() + 1 }\n function addFormatToken(token, padded, ordinal, callback) {\n var func = callback;\n if (typeof callback === 'string') {\n func = function () {\n return this[callback]();\n };\n }\n if (token) {\n formatTokenFunctions[token] = func;\n }\n if (padded) {\n formatTokenFunctions[padded[0]] = function () {\n return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n };\n }\n if (ordinal) {\n formatTokenFunctions[ordinal] = function () {\n return this.localeData().ordinal(\n func.apply(this, arguments),\n token\n );\n };\n }\n }\n\n function removeFormattingTokens(input) {\n if (input.match(/\\[[\\s\\S]/)) {\n return input.replace(/^\\[|\\]$/g, '');\n }\n return input.replace(/\\\\/g, '');\n }\n\n function makeFormatFunction(format) {\n var array = format.match(formattingTokens),\n i,\n length;\n\n for (i = 0, length = array.length; i < length; i++) {\n if (formatTokenFunctions[array[i]]) {\n array[i] = formatTokenFunctions[array[i]];\n } else {\n array[i] = removeFormattingTokens(array[i]);\n }\n }\n\n return function (mom) {\n var output = '',\n i;\n for (i = 0; i < length; i++) {\n output += isFunction(array[i])\n ? array[i].call(mom, format)\n : array[i];\n }\n return output;\n };\n }\n\n // format date using native date object\n function formatMoment(m, format) {\n if (!m.isValid()) {\n return m.localeData().invalidDate();\n }\n\n format = expandFormat(format, m.localeData());\n formatFunctions[format] =\n formatFunctions[format] || makeFormatFunction(format);\n\n return formatFunctions[format](m);\n }\n\n function expandFormat(format, locale) {\n var i = 5;\n\n function replaceLongDateFormatTokens(input) {\n return locale.longDateFormat(input) || input;\n }\n\n localFormattingTokens.lastIndex = 0;\n while (i >= 0 && localFormattingTokens.test(format)) {\n format = format.replace(\n localFormattingTokens,\n replaceLongDateFormatTokens\n );\n localFormattingTokens.lastIndex = 0;\n i -= 1;\n }\n\n return format;\n }\n\n var defaultLongDateFormat = {\n LTS: 'h:mm:ss A',\n LT: 'h:mm A',\n L: 'MM/DD/YYYY',\n LL: 'MMMM D, YYYY',\n LLL: 'MMMM D, YYYY h:mm A',\n LLLL: 'dddd, MMMM D, YYYY h:mm A',\n };\n\n function longDateFormat(key) {\n var format = this._longDateFormat[key],\n formatUpper = this._longDateFormat[key.toUpperCase()];\n\n if (format || !formatUpper) {\n return format;\n }\n\n this._longDateFormat[key] = formatUpper\n .match(formattingTokens)\n .map(function (tok) {\n if (\n tok === 'MMMM' ||\n tok === 'MM' ||\n tok === 'DD' ||\n tok === 'dddd'\n ) {\n return tok.slice(1);\n }\n return tok;\n })\n .join('');\n\n return this._longDateFormat[key];\n }\n\n var defaultInvalidDate = 'Invalid date';\n\n function invalidDate() {\n return this._invalidDate;\n }\n\n var defaultOrdinal = '%d',\n defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n function ordinal(number) {\n return this._ordinal.replace('%d', number);\n }\n\n var defaultRelativeTime = {\n future: 'in %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: 'a minute',\n mm: '%d minutes',\n h: 'an hour',\n hh: '%d hours',\n d: 'a day',\n dd: '%d days',\n w: 'a week',\n ww: '%d weeks',\n M: 'a month',\n MM: '%d months',\n y: 'a year',\n yy: '%d years',\n };\n\n function relativeTime(number, withoutSuffix, string, isFuture) {\n var output = this._relativeTime[string];\n return isFunction(output)\n ? output(number, withoutSuffix, string, isFuture)\n : output.replace(/%d/i, number);\n }\n\n function pastFuture(diff, output) {\n var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n }\n\n var aliases = {\n D: 'date',\n dates: 'date',\n date: 'date',\n d: 'day',\n days: 'day',\n day: 'day',\n e: 'weekday',\n weekdays: 'weekday',\n weekday: 'weekday',\n E: 'isoWeekday',\n isoweekdays: 'isoWeekday',\n isoweekday: 'isoWeekday',\n DDD: 'dayOfYear',\n dayofyears: 'dayOfYear',\n dayofyear: 'dayOfYear',\n h: 'hour',\n hours: 'hour',\n hour: 'hour',\n ms: 'millisecond',\n milliseconds: 'millisecond',\n millisecond: 'millisecond',\n m: 'minute',\n minutes: 'minute',\n minute: 'minute',\n M: 'month',\n months: 'month',\n month: 'month',\n Q: 'quarter',\n quarters: 'quarter',\n quarter: 'quarter',\n s: 'second',\n seconds: 'second',\n second: 'second',\n gg: 'weekYear',\n weekyears: 'weekYear',\n weekyear: 'weekYear',\n GG: 'isoWeekYear',\n isoweekyears: 'isoWeekYear',\n isoweekyear: 'isoWeekYear',\n w: 'week',\n weeks: 'week',\n week: 'week',\n W: 'isoWeek',\n isoweeks: 'isoWeek',\n isoweek: 'isoWeek',\n y: 'year',\n years: 'year',\n year: 'year',\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 date: 9,\n day: 11,\n weekday: 11,\n isoWeekday: 11,\n dayOfYear: 4,\n hour: 13,\n millisecond: 16,\n minute: 14,\n month: 8,\n quarter: 7,\n second: 15,\n weekYear: 1,\n isoWeekYear: 1,\n week: 5,\n isoWeek: 5,\n year: 1,\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 var match1 = /\\d/, // 0 - 9\n match2 = /\\d\\d/, // 00 - 99\n match3 = /\\d{3}/, // 000 - 999\n match4 = /\\d{4}/, // 0000 - 9999\n match6 = /[+-]?\\d{6}/, // -999999 - 999999\n match1to2 = /\\d\\d?/, // 0 - 99\n match3to4 = /\\d\\d\\d\\d?/, // 999 - 9999\n match5to6 = /\\d\\d\\d\\d\\d\\d?/, // 99999 - 999999\n match1to3 = /\\d{1,3}/, // 0 - 999\n match1to4 = /\\d{1,4}/, // 0 - 9999\n match1to6 = /[+-]?\\d{1,6}/, // -999999 - 999999\n matchUnsigned = /\\d+/, // 0 - inf\n matchSigned = /[+-]?\\d+/, // -inf - inf\n matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi, // +00:00 -00:00 +0000 -0000 or Z\n matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/, // 123456789 123456789.123\n // any word (or two) characters or numbers including two/three word month in arabic.\n // includes scottish gaelic two word and hyphenated months\n matchWord =\n /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,\n match1to2NoLeadingZero = /^[1-9]\\d?/, // 1-99\n match1to2HasZero = /^([1-9]\\d|\\d)/, // 0-99\n regexes;\n\n regexes = {};\n\n function addRegexToken(token, regex, strictRegex) {\n regexes[token] = isFunction(regex)\n ? regex\n : function (isStrict, localeData) {\n return isStrict && strictRegex ? strictRegex : regex;\n };\n }\n\n function getParseRegexForToken(token, config) {\n if (!hasOwnProp(regexes, token)) {\n return new RegExp(unescapeFormat(token));\n }\n\n return regexes[token](config._strict, config._locale);\n }\n\n // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n function unescapeFormat(s) {\n return regexEscape(\n s\n .replace('\\\\', '')\n .replace(\n /\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,\n function (matched, p1, p2, p3, p4) {\n return p1 || p2 || p3 || p4;\n }\n )\n );\n }\n\n function regexEscape(s) {\n return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n }\n\n 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 var tokens = {};\n\n function addParseToken(token, callback) {\n var i,\n func = callback,\n tokenLen;\n if (typeof token === 'string') {\n token = [token];\n }\n if (isNumber(callback)) {\n func = function (input, array) {\n array[callback] = toInt(input);\n };\n }\n tokenLen = token.length;\n for (i = 0; i < tokenLen; i++) {\n tokens[token[i]] = func;\n }\n }\n\n function addWeekParseToken(token, callback) {\n addParseToken(token, function (input, array, config, token) {\n config._w = config._w || {};\n callback(input, config._w, config, token);\n });\n }\n\n function addTimeToArrayFromToken(token, input, config) {\n if (input != null && hasOwnProp(tokens, token)) {\n tokens[token](input, config._a, config, token);\n }\n }\n\n function isLeapYear(year) {\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\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 // 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 // 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 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 if (!mom.isValid()) {\n return NaN;\n }\n\n var d = mom._d,\n isUTC = mom._isUTC;\n\n switch (unit) {\n case 'Milliseconds':\n return isUTC ? d.getUTCMilliseconds() : d.getMilliseconds();\n case 'Seconds':\n return isUTC ? d.getUTCSeconds() : d.getSeconds();\n case 'Minutes':\n return isUTC ? d.getUTCMinutes() : d.getMinutes();\n case 'Hours':\n return isUTC ? d.getUTCHours() : d.getHours();\n case 'Date':\n return isUTC ? d.getUTCDate() : d.getDate();\n case 'Day':\n return isUTC ? d.getUTCDay() : d.getDay();\n case 'Month':\n return isUTC ? d.getUTCMonth() : d.getMonth();\n case 'FullYear':\n return isUTC ? d.getUTCFullYear() : d.getFullYear();\n default:\n return NaN; // Just in case\n }\n }\n\n function set$1(mom, unit, value) {\n var d, isUTC, year, month, date;\n\n if (!mom.isValid() || isNaN(value)) {\n return;\n }\n\n d = mom._d;\n isUTC = mom._isUTC;\n\n switch (unit) {\n case 'Milliseconds':\n return void (isUTC\n ? d.setUTCMilliseconds(value)\n : d.setMilliseconds(value));\n case 'Seconds':\n return void (isUTC ? d.setUTCSeconds(value) : d.setSeconds(value));\n case 'Minutes':\n return void (isUTC ? d.setUTCMinutes(value) : d.setMinutes(value));\n case 'Hours':\n return void (isUTC ? d.setUTCHours(value) : d.setHours(value));\n case 'Date':\n return void (isUTC ? d.setUTCDate(value) : d.setDate(value));\n // case 'Day': // Not real\n // return void (isUTC ? d.setUTCDay(value) : d.setDay(value));\n // case 'Month': // Not used because we need to pass two variables\n // return void (isUTC ? d.setUTCMonth(value) : d.setMonth(value));\n case 'FullYear':\n break; // See below ...\n default:\n return; // Just in case\n }\n\n year = value;\n month = mom.month();\n date = mom.date();\n date = date === 29 && month === 1 && !isLeapYear(year) ? 28 : date;\n void (isUTC\n ? d.setUTCFullYear(year, month, date)\n : d.setFullYear(year, month, date));\n }\n\n // MOMENTS\n\n function stringGet(units) {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units]();\n }\n return this;\n }\n\n function stringSet(units, value) {\n if (typeof units === 'object') {\n units = normalizeObjectUnits(units);\n var prioritized = getPrioritizedUnits(units),\n i,\n prioritizedLen = prioritized.length;\n for (i = 0; i < prioritizedLen; i++) {\n this[prioritized[i].unit](units[prioritized[i].unit]);\n }\n } else {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units](value);\n }\n }\n return this;\n }\n\n 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 // PARSING\n\n addRegexToken('M', match1to2, match1to2NoLeadingZero);\n addRegexToken('MM', match1to2, match2);\n addRegexToken('MMM', function (isStrict, locale) {\n return locale.monthsShortRegex(isStrict);\n });\n addRegexToken('MMMM', function (isStrict, locale) {\n return locale.monthsRegex(isStrict);\n });\n\n addParseToken(['M', 'MM'], function (input, array) {\n array[MONTH] = toInt(input) - 1;\n });\n\n addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n var month = config._locale.monthsParse(input, token, config._strict);\n // if we didn't find a month name, mark the date as invalid.\n if (month != null) {\n array[MONTH] = month;\n } else {\n getParsingFlags(config).invalidMonth = input;\n }\n });\n\n // LOCALES\n\n var defaultLocaleMonths =\n 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n '_'\n ),\n defaultLocaleMonthsShort =\n 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,\n defaultMonthsShortRegex = matchWord,\n defaultMonthsRegex = matchWord;\n\n function localeMonths(m, format) {\n if (!m) {\n return isArray(this._months)\n ? this._months\n : this._months['standalone'];\n }\n return isArray(this._months)\n ? this._months[m.month()]\n : this._months[\n (this._months.isFormat || MONTHS_IN_FORMAT).test(format)\n ? 'format'\n : 'standalone'\n ][m.month()];\n }\n\n function localeMonthsShort(m, format) {\n if (!m) {\n return isArray(this._monthsShort)\n ? this._monthsShort\n : this._monthsShort['standalone'];\n }\n return isArray(this._monthsShort)\n ? this._monthsShort[m.month()]\n : this._monthsShort[\n MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'\n ][m.month()];\n }\n\n function handleStrictParse(monthName, format, strict) {\n var i,\n ii,\n mom,\n llc = monthName.toLocaleLowerCase();\n if (!this._monthsParse) {\n // this is not used\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n for (i = 0; i < 12; ++i) {\n mom = createUTC([2000, i]);\n this._shortMonthsParse[i] = this.monthsShort(\n mom,\n ''\n ).toLocaleLowerCase();\n this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeMonthsParse(monthName, format, strict) {\n var i, mom, regex;\n\n if (this._monthsParseExact) {\n return handleStrictParse.call(this, monthName, format, strict);\n }\n\n if (!this._monthsParse) {\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n }\n\n // TODO: add sorting\n // Sorting makes sure if one month (or abbr) is a prefix of another\n // see sorting in computeMonthsParse\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n if (strict && !this._longMonthsParse[i]) {\n this._longMonthsParse[i] = new RegExp(\n '^' + this.months(mom, '').replace('.', '') + '$',\n 'i'\n );\n this._shortMonthsParse[i] = new RegExp(\n '^' + this.monthsShort(mom, '').replace('.', '') + '$',\n 'i'\n );\n }\n if (!strict && !this._monthsParse[i]) {\n regex =\n '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'MMMM' &&\n this._longMonthsParse[i].test(monthName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'MMM' &&\n this._shortMonthsParse[i].test(monthName)\n ) {\n return i;\n } else if (!strict && this._monthsParse[i].test(monthName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function setMonth(mom, value) {\n 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 var month = value,\n date = mom.date();\n\n date = date < 29 ? date : Math.min(date, daysInMonth(mom.year(), month));\n void (mom._isUTC\n ? mom._d.setUTCMonth(month, date)\n : mom._d.setMonth(month, date));\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 shortP,\n longP;\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n shortP = regexEscape(this.monthsShort(mom, ''));\n longP = regexEscape(this.months(mom, ''));\n shortPieces.push(shortP);\n longPieces.push(longP);\n mixedPieces.push(longP);\n mixedPieces.push(shortP);\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\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 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 // PARSING\n\n addRegexToken('w', match1to2, match1to2NoLeadingZero);\n addRegexToken('ww', match1to2, match2);\n addRegexToken('W', match1to2, match1to2NoLeadingZero);\n addRegexToken('WW', match1to2, match2);\n\n addWeekParseToken(\n ['w', 'ww', 'W', 'WW'],\n function (input, week, config, token) {\n week[token.substr(0, 1)] = toInt(input);\n }\n );\n\n // HELPERS\n\n // LOCALES\n\n function localeWeek(mom) {\n return weekOfYear(mom, this._week.dow, this._week.doy).week;\n }\n\n var defaultLocaleWeek = {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n };\n\n function localeFirstDayOfWeek() {\n return this._week.dow;\n }\n\n function localeFirstDayOfYear() {\n return this._week.doy;\n }\n\n // MOMENTS\n\n function getSetWeek(input) {\n var week = this.localeData().week(this);\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n function getSetISOWeek(input) {\n var week = weekOfYear(this, 1, 4).week;\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('d', 0, 'do', 'day');\n\n addFormatToken('dd', 0, 0, function (format) {\n return this.localeData().weekdaysMin(this, format);\n });\n\n addFormatToken('ddd', 0, 0, function (format) {\n return this.localeData().weekdaysShort(this, format);\n });\n\n addFormatToken('dddd', 0, 0, function (format) {\n return this.localeData().weekdays(this, format);\n });\n\n addFormatToken('e', 0, 0, 'weekday');\n addFormatToken('E', 0, 0, 'isoWeekday');\n\n // PARSING\n\n addRegexToken('d', match1to2);\n addRegexToken('e', match1to2);\n addRegexToken('E', match1to2);\n addRegexToken('dd', function (isStrict, locale) {\n return locale.weekdaysMinRegex(isStrict);\n });\n addRegexToken('ddd', function (isStrict, locale) {\n return locale.weekdaysShortRegex(isStrict);\n });\n addRegexToken('dddd', function (isStrict, locale) {\n return locale.weekdaysRegex(isStrict);\n });\n\n addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n var weekday = config._locale.weekdaysParse(input, token, config._strict);\n // if we didn't get a weekday name, mark the date as invalid\n if (weekday != null) {\n week.d = weekday;\n } else {\n getParsingFlags(config).invalidWeekday = input;\n }\n });\n\n addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n week[token] = toInt(input);\n });\n\n // HELPERS\n\n function parseWeekday(input, locale) {\n if (typeof input !== 'string') {\n return input;\n }\n\n if (!isNaN(input)) {\n return parseInt(input, 10);\n }\n\n input = locale.weekdaysParse(input);\n if (typeof input === 'number') {\n return input;\n }\n\n return null;\n }\n\n function parseIsoWeekday(input, locale) {\n if (typeof input === 'string') {\n return locale.weekdaysParse(input) % 7 || 7;\n }\n return isNaN(input) ? null : input;\n }\n\n // LOCALES\n function shiftWeekdays(ws, n) {\n return ws.slice(n, 7).concat(ws.slice(0, n));\n }\n\n var defaultLocaleWeekdays =\n 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n defaultWeekdaysRegex = matchWord,\n defaultWeekdaysShortRegex = matchWord,\n defaultWeekdaysMinRegex = matchWord;\n\n function localeWeekdays(m, format) {\n var weekdays = isArray(this._weekdays)\n ? this._weekdays\n : this._weekdays[\n m && m !== true && this._weekdays.isFormat.test(format)\n ? 'format'\n : 'standalone'\n ];\n return m === true\n ? shiftWeekdays(weekdays, this._week.dow)\n : m\n ? weekdays[m.day()]\n : weekdays;\n }\n\n function localeWeekdaysShort(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n : m\n ? this._weekdaysShort[m.day()]\n : this._weekdaysShort;\n }\n\n function localeWeekdaysMin(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n : m\n ? this._weekdaysMin[m.day()]\n : this._weekdaysMin;\n }\n\n function handleStrictParse$1(weekdayName, format, strict) {\n var i,\n ii,\n mom,\n llc = weekdayName.toLocaleLowerCase();\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._minWeekdaysParse = [];\n\n for (i = 0; i < 7; ++i) {\n mom = createUTC([2000, 1]).day(i);\n this._minWeekdaysParse[i] = this.weekdaysMin(\n mom,\n ''\n ).toLocaleLowerCase();\n this._shortWeekdaysParse[i] = this.weekdaysShort(\n mom,\n ''\n ).toLocaleLowerCase();\n this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeWeekdaysParse(weekdayName, format, strict) {\n var i, mom, regex;\n\n if (this._weekdaysParseExact) {\n return handleStrictParse$1.call(this, weekdayName, format, strict);\n }\n\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._minWeekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._fullWeekdaysParse = [];\n }\n\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n\n mom = createUTC([2000, 1]).day(i);\n if (strict && !this._fullWeekdaysParse[i]) {\n this._fullWeekdaysParse[i] = new RegExp(\n '^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._shortWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._minWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n }\n if (!this._weekdaysParse[i]) {\n regex =\n '^' +\n this.weekdays(mom, '') +\n '|^' +\n this.weekdaysShort(mom, '') +\n '|^' +\n this.weekdaysMin(mom, '');\n this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'dddd' &&\n this._fullWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'ddd' &&\n this._shortWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'dd' &&\n this._minWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function getSetDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n\n var day = get(this, 'Day');\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 // 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, match1to2HasZero);\n addRegexToken('h', match1to2, match1to2NoLeadingZero);\n addRegexToken('k', match1to2, match1to2NoLeadingZero);\n addRegexToken('HH', match1to2, match2);\n addRegexToken('hh', match1to2, match2);\n addRegexToken('kk', match1to2, match2);\n\n addRegexToken('hmm', match3to4);\n addRegexToken('hmmss', match5to6);\n addRegexToken('Hmm', match3to4);\n addRegexToken('Hmmss', match5to6);\n\n addParseToken(['H', 'HH'], HOUR);\n addParseToken(['k', 'kk'], function (input, array, config) {\n var kInput = toInt(input);\n array[HOUR] = kInput === 24 ? 0 : kInput;\n });\n addParseToken(['a', 'A'], function (input, array, config) {\n config._isPm = config._locale.isPM(input);\n config._meridiem = input;\n });\n addParseToken(['h', 'hh'], function (input, array, config) {\n array[HOUR] = toInt(input);\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('Hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n });\n addParseToken('Hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n });\n\n // LOCALES\n\n function localeIsPM(input) {\n // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n // Using charAt should be more compatible.\n return (input + '').toLowerCase().charAt(0) === 'p';\n }\n\n var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i,\n // Setting the hour should keep the time, because the user explicitly\n // specified which hour they want. So trying to maintain the same hour (in\n // a new timezone) makes sense. Adding/subtracting hours does not follow\n // this rule.\n getSetHour = makeGetSet('Hours', true);\n\n function localeMeridiem(hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'pm' : 'PM';\n } else {\n return isLower ? 'am' : 'AM';\n }\n }\n\n var baseConfig = {\n calendar: defaultCalendar,\n longDateFormat: defaultLongDateFormat,\n invalidDate: defaultInvalidDate,\n ordinal: defaultOrdinal,\n dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n relativeTime: defaultRelativeTime,\n\n months: defaultLocaleMonths,\n monthsShort: defaultLocaleMonthsShort,\n\n week: defaultLocaleWeek,\n\n weekdays: defaultLocaleWeekdays,\n weekdaysMin: defaultLocaleWeekdaysMin,\n weekdaysShort: defaultLocaleWeekdaysShort,\n\n meridiemParse: defaultLocaleMeridiemParse,\n };\n\n // internal storage for locale config files\n var locales = {},\n localeFamilies = {},\n globalLocale;\n\n function commonPrefix(arr1, arr2) {\n var i,\n minl = Math.min(arr1.length, arr2.length);\n for (i = 0; i < minl; i += 1) {\n if (arr1[i] !== arr2[i]) {\n return i;\n }\n }\n return minl;\n }\n\n function normalizeLocale(key) {\n return key ? key.toLowerCase().replace('_', '-') : key;\n }\n\n // pick the locale from the array\n // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n function chooseLocale(names) {\n var i = 0,\n j,\n next,\n locale,\n split;\n\n while (i < names.length) {\n split = normalizeLocale(names[i]).split('-');\n j = split.length;\n next = normalizeLocale(names[i + 1]);\n next = next ? next.split('-') : null;\n while (j > 0) {\n locale = loadLocale(split.slice(0, j).join('-'));\n if (locale) {\n return locale;\n }\n if (\n next &&\n next.length >= j &&\n commonPrefix(split, next) >= j - 1\n ) {\n //the next array item is better than a shallower substring of this one\n break;\n }\n j--;\n }\n i++;\n }\n return globalLocale;\n }\n\n function isLocaleNameSane(name) {\n // Prevent names that look like filesystem paths, i.e contain '/' or '\\'\n // Ensure name is available and function returns boolean\n return !!(name && name.match('^[^/\\\\\\\\]*$'));\n }\n\n function loadLocale(name) {\n var oldLocale = null,\n aliasedRequire;\n // TODO: Find a better way to register and load all the locales in Node\n if (\n locales[name] === undefined &&\n typeof module !== 'undefined' &&\n module &&\n module.exports &&\n isLocaleNameSane(name)\n ) {\n try {\n oldLocale = globalLocale._abbr;\n aliasedRequire = require;\n aliasedRequire('./locale/' + name);\n getSetGlobalLocale(oldLocale);\n } catch (e) {\n // mark as not found to avoid repeating expensive file require call causing high CPU\n // when trying to find en-US, en_US, en-us for every format call\n locales[name] = null; // null means not found\n }\n }\n return locales[name];\n }\n\n // This function will load locale and then set the global locale. If\n // no arguments are passed in, it will simply return the current global\n // locale key.\n function getSetGlobalLocale(key, values) {\n var data;\n if (key) {\n if (isUndefined(values)) {\n data = getLocale(key);\n } else {\n data = defineLocale(key, values);\n }\n\n if (data) {\n // moment.duration._locale = moment._locale = data;\n globalLocale = data;\n } else {\n if (typeof console !== 'undefined' && console.warn) {\n //warn user if arguments are passed but the locale could not be set\n console.warn(\n 'Locale ' + key + ' not found. Did you forget to load it?'\n );\n }\n }\n }\n\n return globalLocale._abbr;\n }\n\n function defineLocale(name, config) {\n if (config !== null) {\n var locale,\n parentConfig = baseConfig;\n config.abbr = name;\n if (locales[name] != null) {\n deprecateSimple(\n 'defineLocaleOverride',\n 'use moment.updateLocale(localeName, config) to change ' +\n 'an existing locale. moment.defineLocale(localeName, ' +\n 'config) should only be used for creating a new locale ' +\n 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'\n );\n parentConfig = locales[name]._config;\n } else if (config.parentLocale != null) {\n if (locales[config.parentLocale] != null) {\n parentConfig = locales[config.parentLocale]._config;\n } else {\n locale = loadLocale(config.parentLocale);\n if (locale != null) {\n parentConfig = locale._config;\n } else {\n if (!localeFamilies[config.parentLocale]) {\n localeFamilies[config.parentLocale] = [];\n }\n localeFamilies[config.parentLocale].push({\n name: name,\n config: config,\n });\n return null;\n }\n }\n }\n locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n if (localeFamilies[name]) {\n localeFamilies[name].forEach(function (x) {\n defineLocale(x.name, x.config);\n });\n }\n\n // backwards compat for now: also set the locale\n // make sure we set the locale AFTER all child locales have been\n // created, so we won't end up with the child locale set.\n getSetGlobalLocale(name);\n\n return locales[name];\n } else {\n // useful for testing\n delete locales[name];\n return null;\n }\n }\n\n function updateLocale(name, config) {\n if (config != null) {\n var locale,\n tmpLocale,\n parentConfig = baseConfig;\n\n if (locales[name] != null && locales[name].parentLocale != null) {\n // Update existing child locale in-place to avoid memory-leaks\n locales[name].set(mergeConfigs(locales[name]._config, config));\n } else {\n // MERGE\n tmpLocale = loadLocale(name);\n if (tmpLocale != null) {\n parentConfig = tmpLocale._config;\n }\n config = mergeConfigs(parentConfig, config);\n if (tmpLocale == null) {\n // updateLocale is called for creating a new locale\n // Set abbr so it will have a name (getters return\n // undefined otherwise).\n config.abbr = name;\n }\n locale = new Locale(config);\n locale.parentLocale = locales[name];\n locales[name] = locale;\n }\n\n // backwards compat for now: also set the locale\n getSetGlobalLocale(name);\n } else {\n // pass null for config to unupdate, useful for tests\n if (locales[name] != null) {\n if (locales[name].parentLocale != null) {\n locales[name] = locales[name].parentLocale;\n if (name === getSetGlobalLocale()) {\n getSetGlobalLocale(name);\n }\n } else if (locales[name] != null) {\n delete locales[name];\n }\n }\n }\n return locales[name];\n }\n\n // returns locale data\n function getLocale(key) {\n var locale;\n\n if (key && key._locale && key._locale._abbr) {\n key = key._locale._abbr;\n }\n\n if (!key) {\n return globalLocale;\n }\n\n if (!isArray(key)) {\n //short-circuit everything else\n locale = loadLocale(key);\n if (locale) {\n return locale;\n }\n key = [key];\n }\n\n return chooseLocale(key);\n }\n\n function listLocales() {\n return keys(locales);\n }\n\n function checkOverflow(m) {\n var overflow,\n a = m._a;\n\n if (a && getParsingFlags(m).overflow === -2) {\n overflow =\n a[MONTH] < 0 || a[MONTH] > 11\n ? MONTH\n : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])\n ? DATE\n : a[HOUR] < 0 ||\n a[HOUR] > 24 ||\n (a[HOUR] === 24 &&\n (a[MINUTE] !== 0 ||\n a[SECOND] !== 0 ||\n a[MILLISECOND] !== 0))\n ? HOUR\n : a[MINUTE] < 0 || a[MINUTE] > 59\n ? MINUTE\n : a[SECOND] < 0 || a[SECOND] > 59\n ? SECOND\n : a[MILLISECOND] < 0 || a[MILLISECOND] > 999\n ? MILLISECOND\n : -1;\n\n if (\n getParsingFlags(m)._overflowDayOfYear &&\n (overflow < YEAR || overflow > DATE)\n ) {\n overflow = DATE;\n }\n if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n overflow = WEEK;\n }\n if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n overflow = WEEKDAY;\n }\n\n getParsingFlags(m).overflow = overflow;\n }\n\n return m;\n }\n\n // iso 8601 regex\n // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n var extendedIsoRegex =\n /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n basicIsoRegex =\n /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/,\n isoDates = [\n ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n ['YYYY-DDD', /\\d{4}-\\d{3}/],\n ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n ['YYYYYYMMDD', /[+-]\\d{10}/],\n ['YYYYMMDD', /\\d{8}/],\n ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n ['YYYYDDD', /\\d{7}/],\n ['YYYYMM', /\\d{6}/, false],\n ['YYYY', /\\d{4}/, false],\n ],\n // iso time formats and regexes\n isoTimes = [\n ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n ['HH:mm', /\\d\\d:\\d\\d/],\n ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n ['HHmm', /\\d\\d\\d\\d/],\n ['HH', /\\d\\d/],\n ],\n aspNetJsonRegex = /^\\/?Date\\((-?\\d+)/i,\n // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n rfc2822 =\n /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,\n obsOffsets = {\n UT: 0,\n GMT: 0,\n EDT: -4 * 60,\n EST: -5 * 60,\n CDT: -5 * 60,\n CST: -6 * 60,\n MDT: -6 * 60,\n MST: -7 * 60,\n PDT: -7 * 60,\n PST: -8 * 60,\n };\n\n // date from iso format\n function configFromISO(config) {\n var i,\n l,\n string = config._i,\n match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n allowTime,\n dateFormat,\n timeFormat,\n tzFormat,\n isoDatesLen = isoDates.length,\n isoTimesLen = isoTimes.length;\n\n if (match) {\n getParsingFlags(config).iso = true;\n for (i = 0, l = isoDatesLen; i < l; i++) {\n if (isoDates[i][1].exec(match[1])) {\n dateFormat = isoDates[i][0];\n allowTime = isoDates[i][2] !== false;\n break;\n }\n }\n if (dateFormat == null) {\n config._isValid = false;\n return;\n }\n if (match[3]) {\n for (i = 0, l = isoTimesLen; i < l; i++) {\n if (isoTimes[i][1].exec(match[3])) {\n // match[2] should be 'T' or space\n timeFormat = (match[2] || ' ') + isoTimes[i][0];\n break;\n }\n }\n if (timeFormat == null) {\n config._isValid = false;\n return;\n }\n }\n if (!allowTime && timeFormat != null) {\n config._isValid = false;\n return;\n }\n if (match[4]) {\n if (tzRegex.exec(match[4])) {\n tzFormat = 'Z';\n } else {\n config._isValid = false;\n return;\n }\n }\n config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n configFromStringAndFormat(config);\n } else {\n config._isValid = false;\n }\n }\n\n function extractFromRFC2822Strings(\n yearStr,\n monthStr,\n dayStr,\n hourStr,\n minuteStr,\n secondStr\n ) {\n var result = [\n untruncateYear(yearStr),\n defaultLocaleMonthsShort.indexOf(monthStr),\n parseInt(dayStr, 10),\n parseInt(hourStr, 10),\n parseInt(minuteStr, 10),\n ];\n\n if (secondStr) {\n result.push(parseInt(secondStr, 10));\n }\n\n return result;\n }\n\n function untruncateYear(yearStr) {\n var year = parseInt(yearStr, 10);\n if (year <= 49) {\n return 2000 + year;\n } else if (year <= 999) {\n return 1900 + year;\n }\n return year;\n }\n\n function preprocessRFC2822(s) {\n // Remove comments and folding whitespace and replace multiple-spaces with a single space\n return s\n .replace(/\\([^()]*\\)|[\\n\\t]/g, ' ')\n .replace(/(\\s\\s+)/g, ' ')\n .replace(/^\\s\\s*/, '')\n .replace(/\\s\\s*$/, '');\n }\n\n function checkWeekday(weekdayStr, parsedInput, config) {\n if (weekdayStr) {\n // TODO: Replace the vanilla JS Date object with an independent day-of-week check.\n var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n weekdayActual = new Date(\n parsedInput[0],\n parsedInput[1],\n parsedInput[2]\n ).getDay();\n if (weekdayProvided !== weekdayActual) {\n getParsingFlags(config).weekdayMismatch = true;\n config._isValid = false;\n return false;\n }\n }\n return true;\n }\n\n function calculateOffset(obsOffset, militaryOffset, numOffset) {\n if (obsOffset) {\n return obsOffsets[obsOffset];\n } else if (militaryOffset) {\n // the only allowed military tz is Z\n return 0;\n } else {\n var hm = parseInt(numOffset, 10),\n m = hm % 100,\n h = (hm - m) / 100;\n return h * 60 + m;\n }\n }\n\n // date and time from ref 2822 format\n function configFromRFC2822(config) {\n var match = rfc2822.exec(preprocessRFC2822(config._i)),\n parsedArray;\n if (match) {\n parsedArray = extractFromRFC2822Strings(\n match[4],\n match[3],\n match[2],\n match[5],\n match[6],\n match[7]\n );\n if (!checkWeekday(match[1], parsedArray, config)) {\n return;\n }\n\n config._a = parsedArray;\n config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n config._d = createUTCDate.apply(null, config._a);\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n getParsingFlags(config).rfc2822 = true;\n } else {\n config._isValid = false;\n }\n }\n\n // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict\n function configFromString(config) {\n var matched = aspNetJsonRegex.exec(config._i);\n if (matched !== null) {\n config._d = new Date(+matched[1]);\n return;\n }\n\n configFromISO(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n configFromRFC2822(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n if (config._strict) {\n config._isValid = false;\n } else {\n // Final attempt, use Input Fallback\n hooks.createFromInputFallback(config);\n }\n }\n\n hooks.createFromInputFallback = deprecate(\n 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n 'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n function (config) {\n config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n }\n );\n\n // Pick the first defined of two or three arguments.\n function defaults(a, b, c) {\n if (a != null) {\n return a;\n }\n if (b != null) {\n return b;\n }\n return c;\n }\n\n function currentDateArray(config) {\n // hooks is actually the exported moment object\n var nowValue = new Date(hooks.now());\n if (config._useUTC) {\n return [\n nowValue.getUTCFullYear(),\n nowValue.getUTCMonth(),\n nowValue.getUTCDate(),\n ];\n }\n return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n }\n\n // convert an array to a date.\n // the array should mirror the parameters below\n // note: all values past the year are optional and will default to the lowest possible value.\n // [year, month, day , hour, minute, second, millisecond]\n function configFromArray(config) {\n var i,\n date,\n input = [],\n currentDate,\n expectedWeekday,\n yearToUse;\n\n if (config._d) {\n return;\n }\n\n currentDate = currentDateArray(config);\n\n //compute day of the year from weeks and weekdays\n if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n dayOfYearFromWeekInfo(config);\n }\n\n //if the day of the year is set, figure out what it is\n if (config._dayOfYear != null) {\n yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n if (\n config._dayOfYear > daysInYear(yearToUse) ||\n config._dayOfYear === 0\n ) {\n getParsingFlags(config)._overflowDayOfYear = true;\n }\n\n date = createUTCDate(yearToUse, 0, config._dayOfYear);\n config._a[MONTH] = date.getUTCMonth();\n config._a[DATE] = date.getUTCDate();\n }\n\n // Default to current date.\n // * if no year, month, day of month are given, default to today\n // * if day of month is given, default month and year\n // * if month is given, default only year\n // * if year is given, don't default anything\n for (i = 0; i < 3 && config._a[i] == null; ++i) {\n config._a[i] = input[i] = currentDate[i];\n }\n\n // Zero out whatever was not defaulted, including time\n for (; i < 7; i++) {\n config._a[i] = input[i] =\n config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];\n }\n\n // Check for 24:00:00.000\n if (\n config._a[HOUR] === 24 &&\n config._a[MINUTE] === 0 &&\n config._a[SECOND] === 0 &&\n config._a[MILLISECOND] === 0\n ) {\n config._nextDay = true;\n config._a[HOUR] = 0;\n }\n\n config._d = (config._useUTC ? createUTCDate : createDate).apply(\n null,\n input\n );\n expectedWeekday = config._useUTC\n ? config._d.getUTCDay()\n : config._d.getDay();\n\n // Apply timezone offset from input. The actual utcOffset can be changed\n // with parseZone.\n if (config._tzm != null) {\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n }\n\n if (config._nextDay) {\n config._a[HOUR] = 24;\n }\n\n // check for mismatching day of week\n if (\n config._w &&\n typeof config._w.d !== 'undefined' &&\n config._w.d !== expectedWeekday\n ) {\n getParsingFlags(config).weekdayMismatch = true;\n }\n }\n\n function dayOfYearFromWeekInfo(config) {\n var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;\n\n w = config._w;\n if (w.GG != null || w.W != null || w.E != null) {\n dow = 1;\n doy = 4;\n\n // TODO: We need to take the current isoWeekYear, but that depends on\n // how we interpret now (local, utc, fixed offset). So create\n // a now version of current config (take local/utc/offset flags, and\n // create now).\n weekYear = defaults(\n w.GG,\n config._a[YEAR],\n weekOfYear(createLocal(), 1, 4).year\n );\n week = defaults(w.W, 1);\n weekday = defaults(w.E, 1);\n if (weekday < 1 || weekday > 7) {\n weekdayOverflow = true;\n }\n } else {\n dow = config._locale._week.dow;\n doy = config._locale._week.doy;\n\n curWeek = weekOfYear(createLocal(), dow, doy);\n\n weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n // Default to current week.\n week = defaults(w.w, curWeek.week);\n\n if (w.d != null) {\n // weekday -- low day numbers are considered next week\n weekday = w.d;\n if (weekday < 0 || weekday > 6) {\n weekdayOverflow = true;\n }\n } else if (w.e != null) {\n // local weekday -- counting starts from beginning of week\n weekday = w.e + dow;\n if (w.e < 0 || w.e > 6) {\n weekdayOverflow = true;\n }\n } else {\n // default to beginning of week\n weekday = dow;\n }\n }\n if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n getParsingFlags(config)._overflowWeeks = true;\n } else if (weekdayOverflow != null) {\n getParsingFlags(config)._overflowWeekday = true;\n } else {\n temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n config._a[YEAR] = temp.year;\n config._dayOfYear = temp.dayOfYear;\n }\n }\n\n // constant that refers to the ISO standard\n hooks.ISO_8601 = function () {};\n\n // constant that refers to the RFC 2822 form\n hooks.RFC_2822 = function () {};\n\n // date from string and format string\n function configFromStringAndFormat(config) {\n // TODO: Move this to another part of the creation flow to prevent circular deps\n if (config._f === hooks.ISO_8601) {\n configFromISO(config);\n return;\n }\n if (config._f === hooks.RFC_2822) {\n configFromRFC2822(config);\n return;\n }\n config._a = [];\n getParsingFlags(config).empty = true;\n\n // This array is used to make a Date, either with `new Date` or `Date.UTC`\n var string = '' + config._i,\n i,\n parsedInput,\n tokens,\n token,\n skipped,\n stringLength = string.length,\n totalParsedInputLength = 0,\n era,\n tokenLen;\n\n tokens =\n expandFormat(config._f, config._locale).match(formattingTokens) || [];\n tokenLen = tokens.length;\n for (i = 0; i < tokenLen; i++) {\n token = tokens[i];\n parsedInput = (string.match(getParseRegexForToken(token, config)) ||\n [])[0];\n if (parsedInput) {\n skipped = string.substr(0, string.indexOf(parsedInput));\n if (skipped.length > 0) {\n getParsingFlags(config).unusedInput.push(skipped);\n }\n string = string.slice(\n string.indexOf(parsedInput) + parsedInput.length\n );\n totalParsedInputLength += parsedInput.length;\n }\n // don't parse if it's not a known token\n if (formatTokenFunctions[token]) {\n if (parsedInput) {\n getParsingFlags(config).empty = false;\n } else {\n getParsingFlags(config).unusedTokens.push(token);\n }\n addTimeToArrayFromToken(token, parsedInput, config);\n } else if (config._strict && !parsedInput) {\n getParsingFlags(config).unusedTokens.push(token);\n }\n }\n\n // add remaining unparsed input length to the string\n getParsingFlags(config).charsLeftOver =\n stringLength - totalParsedInputLength;\n if (string.length > 0) {\n getParsingFlags(config).unusedInput.push(string);\n }\n\n // clear _12h flag if hour is <= 12\n if (\n config._a[HOUR] <= 12 &&\n getParsingFlags(config).bigHour === true &&\n config._a[HOUR] > 0\n ) {\n getParsingFlags(config).bigHour = undefined;\n }\n\n getParsingFlags(config).parsedDateParts = config._a.slice(0);\n getParsingFlags(config).meridiem = config._meridiem;\n // handle meridiem\n config._a[HOUR] = meridiemFixWrap(\n config._locale,\n config._a[HOUR],\n config._meridiem\n );\n\n // handle era\n era = getParsingFlags(config).era;\n if (era !== null) {\n config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);\n }\n\n configFromArray(config);\n checkOverflow(config);\n }\n\n function meridiemFixWrap(locale, hour, meridiem) {\n var isPm;\n\n if (meridiem == null) {\n // nothing to do\n return hour;\n }\n if (locale.meridiemHour != null) {\n return locale.meridiemHour(hour, meridiem);\n } else if (locale.isPM != null) {\n // Fallback\n isPm = locale.isPM(meridiem);\n if (isPm && hour < 12) {\n hour += 12;\n }\n if (!isPm && hour === 12) {\n hour = 0;\n }\n return hour;\n } else {\n // this is not supposed to happen\n return hour;\n }\n }\n\n // date from string and array of format strings\n function configFromStringAndArray(config) {\n var tempConfig,\n bestMoment,\n scoreToBeat,\n i,\n currentScore,\n validFormatFound,\n bestFormatIsValid = false,\n configfLen = config._f.length;\n\n if (configfLen === 0) {\n getParsingFlags(config).invalidFormat = true;\n config._d = new Date(NaN);\n return;\n }\n\n for (i = 0; i < configfLen; i++) {\n currentScore = 0;\n validFormatFound = false;\n tempConfig = copyConfig({}, config);\n if (config._useUTC != null) {\n tempConfig._useUTC = config._useUTC;\n }\n tempConfig._f = config._f[i];\n configFromStringAndFormat(tempConfig);\n\n if (isValid(tempConfig)) {\n validFormatFound = true;\n }\n\n // if there is any input that was not parsed add a penalty for that format\n currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n //or tokens\n currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n getParsingFlags(tempConfig).score = currentScore;\n\n if (!bestFormatIsValid) {\n if (\n scoreToBeat == null ||\n currentScore < scoreToBeat ||\n validFormatFound\n ) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n if (validFormatFound) {\n bestFormatIsValid = true;\n }\n }\n } else {\n if (currentScore < scoreToBeat) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n }\n }\n }\n\n extend(config, bestMoment || tempConfig);\n }\n\n function configFromObject(config) {\n if (config._d) {\n return;\n }\n\n var i = normalizeObjectUnits(config._i),\n dayOrDate = i.day === undefined ? i.date : i.day;\n config._a = map(\n [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],\n function (obj) {\n return obj && parseInt(obj, 10);\n }\n );\n\n configFromArray(config);\n }\n\n function createFromConfig(config) {\n var res = new Moment(checkOverflow(prepareConfig(config)));\n if (res._nextDay) {\n // Adding is smart enough around DST\n res.add(1, 'd');\n res._nextDay = undefined;\n }\n\n return res;\n }\n\n function prepareConfig(config) {\n var input = config._i,\n format = config._f;\n\n config._locale = config._locale || getLocale(config._l);\n\n if (input === null || (format === undefined && input === '')) {\n return createInvalid({ nullInput: true });\n }\n\n if (typeof input === 'string') {\n config._i = input = config._locale.preparse(input);\n }\n\n if (isMoment(input)) {\n return new Moment(checkOverflow(input));\n } else if (isDate(input)) {\n config._d = input;\n } else if (isArray(format)) {\n configFromStringAndArray(config);\n } else if (format) {\n configFromStringAndFormat(config);\n } else {\n configFromInput(config);\n }\n\n if (!isValid(config)) {\n config._d = null;\n }\n\n return config;\n }\n\n function configFromInput(config) {\n var input = config._i;\n if (isUndefined(input)) {\n config._d = new Date(hooks.now());\n } else if (isDate(input)) {\n config._d = new Date(input.valueOf());\n } else if (typeof input === 'string') {\n configFromString(config);\n } else if (isArray(input)) {\n config._a = map(input.slice(0), function (obj) {\n return parseInt(obj, 10);\n });\n configFromArray(config);\n } else if (isObject(input)) {\n configFromObject(config);\n } else if (isNumber(input)) {\n // from milliseconds\n config._d = new Date(input);\n } else {\n hooks.createFromInputFallback(config);\n }\n }\n\n function createLocalOrUTC(input, format, locale, strict, isUTC) {\n var c = {};\n\n if (format === true || format === false) {\n strict = format;\n format = undefined;\n }\n\n if (locale === true || locale === false) {\n strict = locale;\n locale = undefined;\n }\n\n if (\n (isObject(input) && isObjectEmpty(input)) ||\n (isArray(input) && input.length === 0)\n ) {\n input = undefined;\n }\n // object construction must be done this way.\n // https://github.com/moment/moment/issues/1423\n c._isAMomentObject = true;\n c._useUTC = c._isUTC = isUTC;\n c._l = locale;\n c._i = input;\n c._f = format;\n c._strict = strict;\n\n return createFromConfig(c);\n }\n\n function createLocal(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, false);\n }\n\n var prototypeMin = deprecate(\n 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other < this ? this : other;\n } else {\n return createInvalid();\n }\n }\n ),\n prototypeMax = deprecate(\n 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other > this ? this : other;\n } else {\n return createInvalid();\n }\n }\n );\n\n // Pick a moment m from moments so that m[fn](other) is true for all\n // other. This relies on the function fn to be transitive.\n //\n // moments should either be an array of moment objects or an array, whose\n // first element is an array of moment objects.\n function pickBy(fn, moments) {\n var res, i;\n if (moments.length === 1 && isArray(moments[0])) {\n moments = moments[0];\n }\n if (!moments.length) {\n return createLocal();\n }\n res = moments[0];\n for (i = 1; i < moments.length; ++i) {\n if (!moments[i].isValid() || moments[i][fn](res)) {\n res = moments[i];\n }\n }\n return res;\n }\n\n // TODO: Use [].sort instead?\n function min() {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isBefore', args);\n }\n\n function max() {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isAfter', args);\n }\n\n var now = function () {\n return Date.now ? Date.now() : +new Date();\n };\n\n var ordering = [\n 'year',\n 'quarter',\n 'month',\n 'week',\n 'day',\n 'hour',\n 'minute',\n 'second',\n 'millisecond',\n ];\n\n function isDurationValid(m) {\n var key,\n unitHasDecimal = false,\n i,\n orderLen = ordering.length;\n for (key in m) {\n if (\n hasOwnProp(m, key) &&\n !(\n indexOf.call(ordering, key) !== -1 &&\n (m[key] == null || !isNaN(m[key]))\n )\n ) {\n return false;\n }\n }\n\n for (i = 0; i < orderLen; ++i) {\n if (m[ordering[i]]) {\n if (unitHasDecimal) {\n return false; // only allow non-integers for smallest unit\n }\n if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n unitHasDecimal = true;\n }\n }\n }\n\n return true;\n }\n\n function isValid$1() {\n return this._isValid;\n }\n\n function createInvalid$1() {\n return createDuration(NaN);\n }\n\n function Duration(duration) {\n var normalizedInput = normalizeObjectUnits(duration),\n years = normalizedInput.year || 0,\n quarters = normalizedInput.quarter || 0,\n months = normalizedInput.month || 0,\n weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n days = normalizedInput.day || 0,\n hours = normalizedInput.hour || 0,\n minutes = normalizedInput.minute || 0,\n seconds = normalizedInput.second || 0,\n milliseconds = normalizedInput.millisecond || 0;\n\n this._isValid = isDurationValid(normalizedInput);\n\n // representation for dateAddRemove\n this._milliseconds =\n +milliseconds +\n seconds * 1e3 + // 1000\n minutes * 6e4 + // 1000 * 60\n hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n // Because of dateAddRemove treats 24 hours as different from a\n // day when working around DST, we need to store them separately\n this._days = +days + weeks * 7;\n // It is impossible to translate months into days without knowing\n // which months you are are talking about, so we have to store\n // it separately.\n this._months = +months + quarters * 3 + years * 12;\n\n this._data = {};\n\n this._locale = getLocale();\n\n this._bubble();\n }\n\n function isDuration(obj) {\n return obj instanceof Duration;\n }\n\n function absRound(number) {\n if (number < 0) {\n return Math.round(-1 * number) * -1;\n } else {\n return Math.round(number);\n }\n }\n\n // compare two arrays, return the number of differences\n function compareArrays(array1, array2, dontConvert) {\n var len = Math.min(array1.length, array2.length),\n lengthDiff = Math.abs(array1.length - array2.length),\n diffs = 0,\n i;\n for (i = 0; i < len; i++) {\n if (\n (dontConvert && array1[i] !== array2[i]) ||\n (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))\n ) {\n diffs++;\n }\n }\n return diffs + lengthDiff;\n }\n\n // FORMATTING\n\n function offset(token, separator) {\n addFormatToken(token, 0, 0, function () {\n var offset = this.utcOffset(),\n sign = '+';\n if (offset < 0) {\n offset = -offset;\n sign = '-';\n }\n return (\n sign +\n zeroFill(~~(offset / 60), 2) +\n separator +\n zeroFill(~~offset % 60, 2)\n );\n });\n }\n\n offset('Z', ':');\n offset('ZZ', '');\n\n // PARSING\n\n addRegexToken('Z', matchShortOffset);\n addRegexToken('ZZ', matchShortOffset);\n addParseToken(['Z', 'ZZ'], function (input, array, config) {\n config._useUTC = true;\n config._tzm = offsetFromString(matchShortOffset, input);\n });\n\n // HELPERS\n\n // timezone chunker\n // '+10:00' > ['10', '00']\n // '-1530' > ['-15', '30']\n var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n function offsetFromString(matcher, string) {\n var matches = (string || '').match(matcher),\n chunk,\n parts,\n minutes;\n\n if (matches === null) {\n return null;\n }\n\n chunk = matches[matches.length - 1] || [];\n parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;\n }\n\n // Return a moment from input, that is local/utc/zone equivalent to model.\n function cloneWithOffset(input, model) {\n var res, diff;\n if (model._isUTC) {\n res = model.clone();\n diff =\n (isMoment(input) || isDate(input)\n ? input.valueOf()\n : createLocal(input).valueOf()) - res.valueOf();\n // Use low-level api, because this fn is low-level api.\n res._d.setTime(res._d.valueOf() + diff);\n hooks.updateOffset(res, false);\n return res;\n } else {\n return createLocal(input).local();\n }\n }\n\n function getDateOffset(m) {\n // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n // https://github.com/moment/moment/pull/1871\n return -Math.round(m._d.getTimezoneOffset());\n }\n\n // HOOKS\n\n // This function will be called whenever a moment is mutated.\n // It is intended to keep the offset in sync with the timezone.\n hooks.updateOffset = function () {};\n\n // MOMENTS\n\n // keepLocalTime = true means only change the timezone, without\n // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n // +0200, so we adjust the time as needed, to be valid.\n //\n // Keeping the time actually adds/subtracts (one hour)\n // from the actual represented time. That is why we call updateOffset\n // a second time. In case it wants us to change the offset again\n // _changeInProgress == true case, then we have to adjust, because\n // there is no such time in the given timezone.\n function getSetOffset(input, keepLocalTime, keepMinutes) {\n var offset = this._offset || 0,\n localAdjust;\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n if (input != null) {\n if (typeof input === 'string') {\n input = offsetFromString(matchShortOffset, input);\n if (input === null) {\n return this;\n }\n } else if (Math.abs(input) < 16 && !keepMinutes) {\n input = input * 60;\n }\n if (!this._isUTC && keepLocalTime) {\n localAdjust = getDateOffset(this);\n }\n this._offset = input;\n this._isUTC = true;\n if (localAdjust != null) {\n this.add(localAdjust, 'm');\n }\n if (offset !== input) {\n if (!keepLocalTime || this._changeInProgress) {\n addSubtract(\n this,\n createDuration(input - offset, 'm'),\n 1,\n false\n );\n } else if (!this._changeInProgress) {\n this._changeInProgress = true;\n hooks.updateOffset(this, true);\n this._changeInProgress = null;\n }\n }\n return this;\n } else {\n return this._isUTC ? offset : getDateOffset(this);\n }\n }\n\n function getSetZone(input, keepLocalTime) {\n if (input != null) {\n if (typeof input !== 'string') {\n input = -input;\n }\n\n this.utcOffset(input, keepLocalTime);\n\n return this;\n } else {\n return -this.utcOffset();\n }\n }\n\n function setOffsetToUTC(keepLocalTime) {\n return this.utcOffset(0, keepLocalTime);\n }\n\n function setOffsetToLocal(keepLocalTime) {\n if (this._isUTC) {\n this.utcOffset(0, keepLocalTime);\n this._isUTC = false;\n\n if (keepLocalTime) {\n this.subtract(getDateOffset(this), 'm');\n }\n }\n return this;\n }\n\n function setOffsetToParsedOffset() {\n if (this._tzm != null) {\n this.utcOffset(this._tzm, false, true);\n } else if (typeof this._i === 'string') {\n var tZone = offsetFromString(matchOffset, this._i);\n if (tZone != null) {\n this.utcOffset(tZone);\n } else {\n this.utcOffset(0, true);\n }\n }\n return this;\n }\n\n function hasAlignedHourOffset(input) {\n if (!this.isValid()) {\n return false;\n }\n input = input ? createLocal(input).utcOffset() : 0;\n\n return (this.utcOffset() - input) % 60 === 0;\n }\n\n function isDaylightSavingTime() {\n return (\n this.utcOffset() > this.clone().month(0).utcOffset() ||\n this.utcOffset() > this.clone().month(5).utcOffset()\n );\n }\n\n function isDaylightSavingTimeShifted() {\n if (!isUndefined(this._isDSTShifted)) {\n return this._isDSTShifted;\n }\n\n var c = {},\n other;\n\n copyConfig(c, this);\n c = prepareConfig(c);\n\n if (c._a) {\n other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n this._isDSTShifted =\n this.isValid() && compareArrays(c._a, other.toArray()) > 0;\n } else {\n this._isDSTShifted = false;\n }\n\n return this._isDSTShifted;\n }\n\n function isLocal() {\n return this.isValid() ? !this._isUTC : false;\n }\n\n function isUtcOffset() {\n return this.isValid() ? this._isUTC : false;\n }\n\n function isUtc() {\n return this.isValid() ? this._isUTC && this._offset === 0 : false;\n }\n\n // ASP.NET json date format regex\n var aspNetRegex = /^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,\n // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n // and further modified to allow for strings containing both week and day\n isoRegex =\n /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n function createDuration(input, key) {\n var duration = input,\n // matching against regexp is expensive, do it on demand\n match = null,\n sign,\n ret,\n diffRes;\n\n if (isDuration(input)) {\n duration = {\n ms: input._milliseconds,\n d: input._days,\n M: input._months,\n };\n } else if (isNumber(input) || !isNaN(+input)) {\n duration = {};\n if (key) {\n duration[key] = +input;\n } else {\n duration.milliseconds = +input;\n }\n } else if ((match = aspNetRegex.exec(input))) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: 0,\n d: toInt(match[DATE]) * sign,\n h: toInt(match[HOUR]) * sign,\n m: toInt(match[MINUTE]) * sign,\n s: toInt(match[SECOND]) * sign,\n ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match\n };\n } else if ((match = isoRegex.exec(input))) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: parseIso(match[2], sign),\n M: parseIso(match[3], sign),\n w: parseIso(match[4], sign),\n d: parseIso(match[5], sign),\n h: parseIso(match[6], sign),\n m: parseIso(match[7], sign),\n s: parseIso(match[8], sign),\n };\n } else if (duration == null) {\n // checks for null or undefined\n duration = {};\n } else if (\n typeof duration === 'object' &&\n ('from' in duration || 'to' in duration)\n ) {\n diffRes = momentsDifference(\n createLocal(duration.from),\n createLocal(duration.to)\n );\n\n duration = {};\n duration.ms = diffRes.milliseconds;\n duration.M = diffRes.months;\n }\n\n ret = new Duration(duration);\n\n if (isDuration(input) && hasOwnProp(input, '_locale')) {\n ret._locale = input._locale;\n }\n\n if (isDuration(input) && hasOwnProp(input, '_isValid')) {\n ret._isValid = input._isValid;\n }\n\n return ret;\n }\n\n createDuration.fn = Duration.prototype;\n createDuration.invalid = createInvalid$1;\n\n function parseIso(inp, sign) {\n // We'd normally use ~~inp for this, but unfortunately it also\n // converts floats to ints.\n // inp may be undefined, so careful calling replace on it.\n var res = inp && parseFloat(inp.replace(',', '.'));\n // apply sign while we're at it\n return (isNaN(res) ? 0 : res) * sign;\n }\n\n function positiveMomentsDifference(base, other) {\n var res = {};\n\n res.months =\n other.month() - base.month() + (other.year() - base.year()) * 12;\n if (base.clone().add(res.months, 'M').isAfter(other)) {\n --res.months;\n }\n\n res.milliseconds = +other - +base.clone().add(res.months, 'M');\n\n return res;\n }\n\n function momentsDifference(base, other) {\n var res;\n if (!(base.isValid() && other.isValid())) {\n return { milliseconds: 0, months: 0 };\n }\n\n other = cloneWithOffset(other, base);\n if (base.isBefore(other)) {\n res = positiveMomentsDifference(base, other);\n } else {\n res = positiveMomentsDifference(other, base);\n res.milliseconds = -res.milliseconds;\n res.months = -res.months;\n }\n\n return res;\n }\n\n // TODO: remove 'name' arg after deprecation is removed\n function createAdder(direction, name) {\n return function (val, period) {\n var dur, tmp;\n //invert the arguments, but complain about it\n if (period !== null && !isNaN(+period)) {\n deprecateSimple(\n name,\n 'moment().' +\n name +\n '(period, number) is deprecated. Please use moment().' +\n name +\n '(number, period). ' +\n 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'\n );\n tmp = val;\n val = period;\n period = tmp;\n }\n\n dur = createDuration(val, period);\n addSubtract(this, dur, direction);\n return this;\n };\n }\n\n function addSubtract(mom, duration, isAdding, updateOffset) {\n var milliseconds = duration._milliseconds,\n days = absRound(duration._days),\n months = absRound(duration._months);\n\n if (!mom.isValid()) {\n // No op\n return;\n }\n\n updateOffset = updateOffset == null ? true : updateOffset;\n\n if (months) {\n setMonth(mom, get(mom, 'Month') + months * isAdding);\n }\n if (days) {\n set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n }\n if (milliseconds) {\n mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n }\n if (updateOffset) {\n hooks.updateOffset(mom, days || months);\n }\n }\n\n var add = createAdder(1, 'add'),\n subtract = createAdder(-1, 'subtract');\n\n function isString(input) {\n return typeof input === 'string' || input instanceof String;\n }\n\n // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined\n function isMomentInput(input) {\n return (\n isMoment(input) ||\n isDate(input) ||\n isString(input) ||\n isNumber(input) ||\n isNumberOrStringArray(input) ||\n isMomentInputObject(input) ||\n input === null ||\n input === undefined\n );\n }\n\n function isMomentInputObject(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'years',\n 'year',\n 'y',\n 'months',\n 'month',\n 'M',\n 'days',\n 'day',\n 'd',\n 'dates',\n 'date',\n 'D',\n 'hours',\n 'hour',\n 'h',\n 'minutes',\n 'minute',\n 'm',\n 'seconds',\n 'second',\n 's',\n 'milliseconds',\n 'millisecond',\n 'ms',\n ],\n i,\n property,\n propertyLen = properties.length;\n\n for (i = 0; i < propertyLen; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n }\n\n function isNumberOrStringArray(input) {\n var arrayTest = isArray(input),\n dataTypeTest = false;\n if (arrayTest) {\n dataTypeTest =\n input.filter(function (item) {\n return !isNumber(item) && isString(input);\n }).length === 0;\n }\n return arrayTest && dataTypeTest;\n }\n\n function isCalendarSpec(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'sameDay',\n 'nextDay',\n 'lastDay',\n 'nextWeek',\n 'lastWeek',\n 'sameElse',\n ],\n i,\n property;\n\n for (i = 0; i < properties.length; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n }\n\n function getCalendarFormat(myMoment, now) {\n var diff = myMoment.diff(now, 'days', true);\n return diff < -6\n ? 'sameElse'\n : diff < -1\n ? 'lastWeek'\n : diff < 0\n ? 'lastDay'\n : diff < 1\n ? 'sameDay'\n : diff < 2\n ? 'nextDay'\n : diff < 7\n ? 'nextWeek'\n : 'sameElse';\n }\n\n function calendar$1(time, formats) {\n // Support for single parameter, formats only overload to the calendar function\n if (arguments.length === 1) {\n if (!arguments[0]) {\n time = undefined;\n formats = undefined;\n } else if (isMomentInput(arguments[0])) {\n time = arguments[0];\n formats = undefined;\n } else if (isCalendarSpec(arguments[0])) {\n formats = arguments[0];\n time = undefined;\n }\n }\n // We want to compare the start of today, vs this.\n // Getting start-of-today depends on whether we're local/utc/offset or not.\n var now = time || createLocal(),\n sod = cloneWithOffset(now, this).startOf('day'),\n format = hooks.calendarFormat(this, sod) || 'sameElse',\n output =\n formats &&\n (isFunction(formats[format])\n ? formats[format].call(this, now)\n : formats[format]);\n\n return this.format(\n output || this.localeData().calendar(format, this, createLocal(now))\n );\n }\n\n function clone() {\n return new Moment(this);\n }\n\n function isAfter(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() > localInput.valueOf();\n } else {\n return localInput.valueOf() < this.clone().startOf(units).valueOf();\n }\n }\n\n function isBefore(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() < localInput.valueOf();\n } else {\n return this.clone().endOf(units).valueOf() < localInput.valueOf();\n }\n }\n\n function isBetween(from, to, units, inclusivity) {\n var localFrom = isMoment(from) ? from : createLocal(from),\n localTo = isMoment(to) ? to : createLocal(to);\n if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n return false;\n }\n inclusivity = inclusivity || '()';\n return (\n (inclusivity[0] === '('\n ? this.isAfter(localFrom, units)\n : !this.isBefore(localFrom, units)) &&\n (inclusivity[1] === ')'\n ? this.isBefore(localTo, units)\n : !this.isAfter(localTo, units))\n );\n }\n\n function isSame(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input),\n inputMs;\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() === localInput.valueOf();\n } else {\n inputMs = localInput.valueOf();\n return (\n this.clone().startOf(units).valueOf() <= inputMs &&\n inputMs <= this.clone().endOf(units).valueOf()\n );\n }\n }\n\n function isSameOrAfter(input, units) {\n return this.isSame(input, units) || this.isAfter(input, units);\n }\n\n function isSameOrBefore(input, units) {\n return this.isSame(input, units) || this.isBefore(input, units);\n }\n\n function diff(input, units, asFloat) {\n var that, zoneDelta, output;\n\n if (!this.isValid()) {\n return NaN;\n }\n\n that = cloneWithOffset(input, this);\n\n if (!that.isValid()) {\n return NaN;\n }\n\n zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n units = normalizeUnits(units);\n\n switch (units) {\n case 'year':\n output = monthDiff(this, that) / 12;\n break;\n case 'month':\n output = monthDiff(this, that);\n break;\n case 'quarter':\n output = monthDiff(this, that) / 3;\n break;\n case 'second':\n output = (this - that) / 1e3;\n break; // 1000\n case 'minute':\n output = (this - that) / 6e4;\n break; // 1000 * 60\n case 'hour':\n output = (this - that) / 36e5;\n break; // 1000 * 60 * 60\n case 'day':\n output = (this - that - zoneDelta) / 864e5;\n break; // 1000 * 60 * 60 * 24, negate dst\n case 'week':\n output = (this - that - zoneDelta) / 6048e5;\n break; // 1000 * 60 * 60 * 24 * 7, negate dst\n default:\n output = this - that;\n }\n\n return asFloat ? output : absFloor(output);\n }\n\n function monthDiff(a, b) {\n if (a.date() < b.date()) {\n // end-of-month calculations work correct when the start month has more\n // days than the end month.\n return -monthDiff(b, a);\n }\n // difference in months\n var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),\n // b is in (anchor - 1 month, anchor + 1 month)\n anchor = a.clone().add(wholeMonthDiff, 'months'),\n anchor2,\n adjust;\n\n if (b - anchor < 0) {\n anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor - anchor2);\n } else {\n anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor2 - anchor);\n }\n\n //check for negative zero, return zero if negative zero\n return -(wholeMonthDiff + adjust) || 0;\n }\n\n hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n function toString() {\n return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n }\n\n function toISOString(keepOffset) {\n if (!this.isValid()) {\n return null;\n }\n var utc = keepOffset !== true,\n m = utc ? this.clone().utc() : this;\n if (m.year() < 0 || m.year() > 9999) {\n return formatMoment(\n m,\n utc\n ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'\n : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\n }\n if (isFunction(Date.prototype.toISOString)) {\n // native implementation is ~50x faster, use it when we can\n if (utc) {\n return this.toDate().toISOString();\n } else {\n return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)\n .toISOString()\n .replace('Z', formatMoment(m, 'Z'));\n }\n }\n return formatMoment(\n m,\n utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\n }\n\n /**\n * Return a human readable representation of a moment that can\n * also be evaluated to get a new moment which is the same\n *\n * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n */\n function inspect() {\n if (!this.isValid()) {\n return 'moment.invalid(/* ' + this._i + ' */)';\n }\n var func = 'moment',\n zone = '',\n prefix,\n year,\n datetime,\n suffix;\n if (!this.isLocal()) {\n func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n zone = 'Z';\n }\n prefix = '[' + func + '(\"]';\n year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';\n datetime = '-MM-DD[T]HH:mm:ss.SSS';\n suffix = zone + '[\")]';\n\n return this.format(prefix + year + datetime + suffix);\n }\n\n function format(inputString) {\n if (!inputString) {\n inputString = this.isUtc()\n ? hooks.defaultFormatUtc\n : hooks.defaultFormat;\n }\n var output = formatMoment(this, inputString);\n return this.localeData().postformat(output);\n }\n\n function from(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ to: this, from: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function fromNow(withoutSuffix) {\n return this.from(createLocal(), withoutSuffix);\n }\n\n function to(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ from: this, to: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function toNow(withoutSuffix) {\n return this.to(createLocal(), withoutSuffix);\n }\n\n // If passed a locale key, it will set the locale for this\n // instance. Otherwise, it will return the locale configuration\n // variables for this instance.\n function locale(key) {\n var newLocaleData;\n\n if (key === undefined) {\n return this._locale._abbr;\n } else {\n newLocaleData = getLocale(key);\n if (newLocaleData != null) {\n this._locale = newLocaleData;\n }\n return this;\n }\n }\n\n var lang = deprecate(\n 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n function (key) {\n if (key === undefined) {\n return this.localeData();\n } else {\n return this.locale(key);\n }\n }\n );\n\n function localeData() {\n return this._locale;\n }\n\n var MS_PER_SECOND = 1000,\n MS_PER_MINUTE = 60 * MS_PER_SECOND,\n MS_PER_HOUR = 60 * MS_PER_MINUTE,\n MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n\n // actual modulo - handles negative numbers (for dates before 1970):\n function mod$1(dividend, divisor) {\n return ((dividend % divisor) + divisor) % divisor;\n }\n\n function localStartOfDate(y, m, d) {\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return new Date(y, m, d).valueOf();\n }\n }\n\n function utcStartOfDate(y, m, d) {\n // Date.UTC remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return Date.UTC(y, m, d);\n }\n }\n\n function startOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year(), 0, 1);\n break;\n case 'quarter':\n time = startOfDate(\n this.year(),\n this.month() - (this.month() % 3),\n 1\n );\n break;\n case 'month':\n time = startOfDate(this.year(), this.month(), 1);\n break;\n case 'week':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday()\n );\n break;\n case 'isoWeek':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1)\n );\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date());\n break;\n case 'hour':\n time = this._d.valueOf();\n time -= mod$1(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n );\n break;\n case 'minute':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_MINUTE);\n break;\n case 'second':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_SECOND);\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function endOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year() + 1, 0, 1) - 1;\n break;\n case 'quarter':\n time =\n startOfDate(\n this.year(),\n this.month() - (this.month() % 3) + 3,\n 1\n ) - 1;\n break;\n case 'month':\n time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n break;\n case 'week':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday() + 7\n ) - 1;\n break;\n case 'isoWeek':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1) + 7\n ) - 1;\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n break;\n case 'hour':\n time = this._d.valueOf();\n time +=\n MS_PER_HOUR -\n mod$1(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n ) -\n 1;\n break;\n case 'minute':\n time = this._d.valueOf();\n time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n break;\n case 'second':\n time = this._d.valueOf();\n time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function valueOf() {\n return this._d.valueOf() - (this._offset || 0) * 60000;\n }\n\n function unix() {\n return Math.floor(this.valueOf() / 1000);\n }\n\n function toDate() {\n return new Date(this.valueOf());\n }\n\n function toArray() {\n var m = this;\n return [\n m.year(),\n m.month(),\n m.date(),\n m.hour(),\n m.minute(),\n m.second(),\n m.millisecond(),\n ];\n }\n\n function toObject() {\n var m = this;\n return {\n years: m.year(),\n months: m.month(),\n date: m.date(),\n hours: m.hours(),\n minutes: m.minutes(),\n seconds: m.seconds(),\n milliseconds: m.milliseconds(),\n };\n }\n\n function toJSON() {\n // new Date(NaN).toJSON() === null\n return this.isValid() ? this.toISOString() : null;\n }\n\n function isValid$2() {\n return isValid(this);\n }\n\n function parsingFlags() {\n return extend({}, getParsingFlags(this));\n }\n\n function invalidAt() {\n return getParsingFlags(this).overflow;\n }\n\n function creationData() {\n return {\n input: this._i,\n format: this._f,\n locale: this._locale,\n isUTC: this._isUTC,\n strict: this._strict,\n };\n }\n\n addFormatToken('N', 0, 0, 'eraAbbr');\n addFormatToken('NN', 0, 0, 'eraAbbr');\n addFormatToken('NNN', 0, 0, 'eraAbbr');\n addFormatToken('NNNN', 0, 0, 'eraName');\n addFormatToken('NNNNN', 0, 0, 'eraNarrow');\n\n addFormatToken('y', ['y', 1], 'yo', 'eraYear');\n addFormatToken('y', ['yy', 2], 0, 'eraYear');\n addFormatToken('y', ['yyy', 3], 0, 'eraYear');\n addFormatToken('y', ['yyyy', 4], 0, 'eraYear');\n\n addRegexToken('N', matchEraAbbr);\n addRegexToken('NN', matchEraAbbr);\n addRegexToken('NNN', matchEraAbbr);\n addRegexToken('NNNN', matchEraName);\n addRegexToken('NNNNN', matchEraNarrow);\n\n addParseToken(\n ['N', 'NN', 'NNN', 'NNNN', 'NNNNN'],\n function (input, array, config, token) {\n var era = config._locale.erasParse(input, token, config._strict);\n if (era) {\n getParsingFlags(config).era = era;\n } else {\n getParsingFlags(config).invalidEra = input;\n }\n }\n );\n\n addRegexToken('y', matchUnsigned);\n addRegexToken('yy', matchUnsigned);\n addRegexToken('yyy', matchUnsigned);\n addRegexToken('yyyy', matchUnsigned);\n addRegexToken('yo', matchEraYearOrdinal);\n\n addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);\n addParseToken(['yo'], function (input, array, config, token) {\n var match;\n if (config._locale._eraYearOrdinalRegex) {\n match = input.match(config._locale._eraYearOrdinalRegex);\n }\n\n if (config._locale.eraYearOrdinalParse) {\n array[YEAR] = config._locale.eraYearOrdinalParse(input, match);\n } else {\n array[YEAR] = parseInt(input, 10);\n }\n });\n\n function localeEras(m, format) {\n var i,\n l,\n date,\n eras = this._eras || getLocale('en')._eras;\n for (i = 0, l = eras.length; i < l; ++i) {\n switch (typeof eras[i].since) {\n case 'string':\n // truncate time\n date = hooks(eras[i].since).startOf('day');\n eras[i].since = date.valueOf();\n break;\n }\n\n switch (typeof eras[i].until) {\n case 'undefined':\n eras[i].until = +Infinity;\n break;\n case 'string':\n // truncate time\n date = hooks(eras[i].until).startOf('day').valueOf();\n eras[i].until = date.valueOf();\n break;\n }\n }\n return eras;\n }\n\n function localeErasParse(eraName, format, strict) {\n var i,\n l,\n eras = this.eras(),\n name,\n abbr,\n narrow;\n eraName = eraName.toUpperCase();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n name = eras[i].name.toUpperCase();\n abbr = eras[i].abbr.toUpperCase();\n narrow = eras[i].narrow.toUpperCase();\n\n if (strict) {\n switch (format) {\n case 'N':\n case 'NN':\n case 'NNN':\n if (abbr === eraName) {\n return eras[i];\n }\n break;\n\n case 'NNNN':\n if (name === eraName) {\n return eras[i];\n }\n break;\n\n case 'NNNNN':\n if (narrow === eraName) {\n return eras[i];\n }\n break;\n }\n } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {\n return eras[i];\n }\n }\n }\n\n function localeErasConvertYear(era, year) {\n var dir = era.since <= era.until ? +1 : -1;\n if (year === undefined) {\n return hooks(era.since).year();\n } else {\n return hooks(era.since).year() + (year - era.offset) * dir;\n }\n }\n\n function getEraName() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].name;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].name;\n }\n }\n\n return '';\n }\n\n function getEraNarrow() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].narrow;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].narrow;\n }\n }\n\n return '';\n }\n\n function getEraAbbr() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].abbr;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].abbr;\n }\n }\n\n return '';\n }\n\n function getEraYear() {\n var i,\n l,\n dir,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n dir = eras[i].since <= eras[i].until ? +1 : -1;\n\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (\n (eras[i].since <= val && val <= eras[i].until) ||\n (eras[i].until <= val && val <= eras[i].since)\n ) {\n return (\n (this.year() - hooks(eras[i].since).year()) * dir +\n eras[i].offset\n );\n }\n }\n\n return this.year();\n }\n\n function erasNameRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNameRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNameRegex : this._erasRegex;\n }\n\n function erasAbbrRegex(isStrict) {\n if (!hasOwnProp(this, '_erasAbbrRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasAbbrRegex : this._erasRegex;\n }\n\n function erasNarrowRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNarrowRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNarrowRegex : this._erasRegex;\n }\n\n function matchEraAbbr(isStrict, locale) {\n return locale.erasAbbrRegex(isStrict);\n }\n\n function matchEraName(isStrict, locale) {\n return locale.erasNameRegex(isStrict);\n }\n\n function matchEraNarrow(isStrict, locale) {\n return locale.erasNarrowRegex(isStrict);\n }\n\n function matchEraYearOrdinal(isStrict, locale) {\n return locale._eraYearOrdinalRegex || matchUnsigned;\n }\n\n function computeErasParse() {\n var abbrPieces = [],\n namePieces = [],\n narrowPieces = [],\n mixedPieces = [],\n i,\n l,\n erasName,\n erasAbbr,\n erasNarrow,\n eras = this.eras();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n erasName = regexEscape(eras[i].name);\n erasAbbr = regexEscape(eras[i].abbr);\n erasNarrow = regexEscape(eras[i].narrow);\n\n namePieces.push(erasName);\n abbrPieces.push(erasAbbr);\n narrowPieces.push(erasNarrow);\n mixedPieces.push(erasName);\n mixedPieces.push(erasAbbr);\n mixedPieces.push(erasNarrow);\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 // PARSING\n\n addRegexToken('G', matchSigned);\n addRegexToken('g', matchSigned);\n addRegexToken('GG', match1to2, match2);\n addRegexToken('gg', match1to2, match2);\n addRegexToken('GGGG', match1to4, match4);\n addRegexToken('gggg', match1to4, match4);\n addRegexToken('GGGGG', match1to6, match6);\n addRegexToken('ggggg', match1to6, match6);\n\n addWeekParseToken(\n ['gggg', 'ggggg', 'GGGG', 'GGGGG'],\n function (input, week, config, token) {\n week[token.substr(0, 2)] = toInt(input);\n }\n );\n\n addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n week[token] = hooks.parseTwoDigitYear(input);\n });\n\n // MOMENTS\n\n function getSetWeekYear(input) {\n return getSetWeekYearHelper.call(\n this,\n input,\n this.week(),\n this.weekday() + this.localeData()._week.dow,\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 // 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 // PARSING\n\n addRegexToken('D', match1to2, match1to2NoLeadingZero);\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 // 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 // PARSING\n\n addRegexToken('m', match1to2, match1to2HasZero);\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 // PARSING\n\n addRegexToken('s', match1to2, match1to2HasZero);\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 // 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 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 valueOf$1 = asMilliseconds;\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.30.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","//! moment-timezone.js\n//! version : 0.5.48\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.48\",\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\tfunction closest (num, arr) {\n\t\tvar len = arr.length;\n\t\tif (num < arr[0]) {\n\t\t\treturn 0;\n\t\t} else if (len > 1 && arr[len - 1] === Infinity && num >= arr[len - 2]) {\n\t\t\treturn len - 1;\n\t\t} else if (num >= arr[len - 1]) {\n\t\t\treturn -1;\n\t\t}\n\n\t\tvar mid;\n\t\tvar lo = 0;\n\t\tvar hi = len - 1;\n\t\twhile (hi - lo > 1) {\n\t\t\tmid = Math.floor((lo + hi) / 2);\n\t\t\tif (arr[mid] <= num) {\n\t\t\t\tlo = mid;\n\t\t\t} else {\n\t\t\t\thi = mid;\n\t\t\t}\n\t\t}\n\t\treturn hi;\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\ti = closest(target, untils);\n\t\t\tif (i >= 0) {\n\t\t\t\treturn i;\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\tlastOffset = last.offset,\n\t\t\toffsets = [last],\n\t\t\tchange, next, nextOffset, i;\n\n\t\tfor (i = 1; i < 48; i++) {\n\t\t\tnextOffset = new Date(startYear, i, 1).getTimezoneOffset();\n\t\t\tif (nextOffset !== lastOffset) {\n\t\t\t\t// Create OffsetAt here to avoid unnecessary abbr parsing before checking offsets\n\t\t\t\tnext = new OffsetAt(new Date(startYear, i, 1));\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\tlast = next;\n\t\t\t\tlastOffset = nextOffset;\n\t\t\t}\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\tcheckedOffsets = {},\n\t\t\ti, j, offset, guessesOffset;\n\n\t\tfor (i = 0; i < offsetsLength; i++) {\n\t\t\toffset = offsets[i].offset;\n\t\t\tif (checkedOffsets.hasOwnProperty(offset)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tguessesOffset = guesses[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\tcheckedOffsets[offset] = true;\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\tout = moment.utc.apply(null, args),\n\t\t\tzone;\n\n\t\tif (!moment.isMoment(input) && needsOffset(out) && (zone = getZone(name))) {\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 && mom.isValid()) {\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 moment = module.exports = require(\"./moment-timezone\");\nmoment.tz.load(require('./data/packed/latest.json'));\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 =\n '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:\n 'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split(\n '_'\n ),\n weekdays:\n '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 : 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 : 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:\n 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n monthsParseExact: true,\n weekdays:\n '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","const translations = {\n de: {\n address: 'Adresse',\n 'address-place-or-business': 'Adress, Ort or Geschäft',\n 'add-via-button-label': 'Füge Zwischenziel hinzu',\n 'add-via-duration-button-label': 'Set stop duration at via point {{index}}',\n 'add-via-duration-button-label-close':\n 'Close stop duration selector at via point {{index}}',\n 'add-via-duration-button-label-open':\n 'Open stop duration selector at via point {{index}}',\n airplane: 'Flug',\n arrival: 'Ankunft',\n back: 'Zurück',\n bikerentalstation: 'Leihrad-Station',\n bus: 'Bus',\n cancel: 'Abbrechen',\n 'clear-button-label': 'Löschen',\n 'clear-search-history': 'Suchhistorie löschen',\n currentposition: 'Aktuelle Position',\n delete: 'Löschen',\n 'delete-old-searches-header': 'Wollen Sie die Such-Historie löschen?',\n departure: 'Abfahrt',\n destination: 'Ziel',\n 'give-origin': 'Start eingeben.',\n 'give-destination': 'Ziel eingeben.',\n favourite: 'Favoriten',\n ferry: 'Fähre',\n 'future-route': 'Zukünftige Verbindung',\n origin: 'Start',\n 'origin-stop-near-you': 'Start',\n ownlocations: 'Eigene Favoriten',\n loading: 'Laden...',\n 'minute-short': 'min',\n rail: 'Zug',\n search: 'Suche',\n 'search-address-or-place': 'Suche anhand von Adresse oder Ortsangabe',\n 'search-button-label': 'Suche',\n 'search-destination': 'Suche Zielort, Linie or Haltestelle',\n 'search-destination-index': 'Zielort eingeben',\n 'search-destination-results-but-no-search':\n 'Ergebnisse in “Zielort”-Reiter anzeigen',\n 'search-no-results': 'Kein Ort gefunden.',\n 'search-origin': 'Suche Startort, Linie oder Haltestelle',\n 'search-origin-index': 'Startort eingeben',\n 'search-position': 'Standort ermitteln',\n 'search-autosuggest-label': 'Venue, place and stopsearch.',\n 'search-autosuggest-label-instructions-desktop':\n 'Navigate list with arrow keys and select with enter key.',\n 'search-autosuggest-label-instructions-mobile':\n 'Enter the location and navigate in the list by swiping.',\n 'search-autosuggest-label-move-to-destination':\n 'After selecting the starting location you are automatically moved to the destination field.',\n 'search-autosuggest-len': 'There is {{count}} suggestion available',\n 'search-autosuggest-len_plural':\n 'There are {{count}} suggestions available',\n 'search-current-suggestion': 'Aktuelle Auswahl: {{selection}}',\n street: 'Straße',\n subway: 'U-Bahn',\n station: 'Station',\n stop: 'Haltestelle',\n 'stop-near-you': 'Suche Haltestellen und Linien in der Nähe',\n 'stop-near-you-bus': 'Suche Buslinien or Haltestellen',\n 'stop-near-you-citybike': 'Suche Leihrad-Stationen',\n 'stop-near-you-rail': 'Suche Zugverbindungen oder Bahnhöfe',\n 'stop-near-you-subway': 'Suche U-Bahn-Linien oder Haltestellen',\n 'stop-near-you-tram': 'Suche Stadtbahn-Haltestellen-Suche',\n 'today-at': 'Heute um',\n 'tomorrow-at': 'Morgen um',\n tram: 'Straßenbahn',\n 'use-own-position': 'Benutze aktuellen Standort',\n 'select-from-map': 'Wähle Position anhand Karte',\n 'select-from-own-locations': 'Aus eigenen Favoriten auswählen',\n venue: 'Venue',\n 'via-point': 'Zwischenziel',\n where: 'Wohin?',\n place: 'Ort',\n },\n en: {\n address: 'Address',\n 'address-place-or-business': 'Address, place or business',\n 'add-via-button-label': 'Add via point',\n 'add-via-duration-button-label': 'Set stop duration at via point {{index}}',\n 'add-via-duration-button-label-close':\n 'Close stop duration selector at via point {{index}}',\n 'add-via-duration-button-label-open':\n 'Open stop duration selector at via point {{index}}',\n airplane: 'Flight',\n arrival: 'Arrival',\n back: 'Back',\n bikepark: 'Park & Ride for bikes',\n bikerentalstation: 'Bike station',\n bus: 'bus',\n cancel: 'Cancel',\n carpark: 'Park & Ride',\n 'clear-button-label': 'Clear',\n 'clear-search-history': 'Clear search history',\n currentposition: 'Current position',\n delete: 'Delete',\n 'delete-old-searches-header': 'Do you want to clear the search history?',\n departure: 'Departure',\n destination: 'Destination',\n 'give-origin': 'Enter your origin.',\n 'give-destination': 'Enter your destination',\n favourite: 'Favourite',\n ferry: 'Ferry',\n 'future-route': 'Future route',\n origin: 'Start',\n 'origin-stop-near-you': 'Start',\n ownlocations: 'Own locations',\n loading: 'Loading...',\n 'minute-short': 'm',\n platform: 'Platform',\n rail: 'Train',\n required: 'required field',\n search: 'Search',\n 'search-address-or-place': 'Search by address or place name',\n 'search-button-label': 'Search',\n 'search-destination': 'Search destination, route or stop',\n 'search-destination-index': 'Enter destination',\n 'search-destination-results-but-no-search':\n 'View results in the adjacent “Destination” tab',\n 'search-no-results': 'No location',\n 'search-origin': 'Search origin, route or stop',\n 'search-origin-index': 'Enter origin',\n 'search-position': 'Detect location',\n 'search-autosuggest-label': 'Venue, place and stopsearch.',\n 'search-autosuggest-label-instructions-desktop':\n 'Navigate list with arrow keys and select with enter key.',\n 'search-autosuggest-label-instructions-mobile':\n 'Enter the location and navigate in the list by swiping.',\n 'search-autosuggest-label-move-to-destination':\n 'After selecting the starting location you are automatically moved to the destination field.',\n 'search-autosuggest-len': 'There is {{count}} suggestion available',\n 'search-autosuggest-len_plural':\n 'There are {{count}} suggestions available',\n 'search-current-suggestion': 'Current selection: {{selection}}',\n street: 'Street',\n subway: 'Metro',\n station: 'Station',\n stop: 'Stop',\n 'stop-near-you': 'Search stops and routes',\n 'stop-near-you-airplane': 'Search flights or airports',\n 'stop-near-you-bus': 'Search bus routes or stops',\n 'stop-near-you-citybike': 'Search city bike stations',\n 'stop-near-you-rail': 'Search train routes or stations',\n 'stop-near-you-subway': 'Search metro routes or stations ',\n 'stop-near-you-tram': 'Search tram routes or stops',\n 'stop-route-station': 'Bus and stop search',\n 'today-at': 'today at',\n 'tomorrow-at': 'tomorrow at',\n tram: 'Tram',\n track: 'Track',\n 'use-own-position': 'Use current location',\n 'select-from-map': 'Select position from map',\n 'select-from-own-locations': 'Select from own locations',\n venue: 'Venue',\n 'via-point': 'Via point',\n where: 'Where to?',\n place: 'Location',\n },\n fi: {\n address: 'Osoite',\n 'address-place-or-business': 'Osoite, paikka tai yritys',\n 'add-via-button-label': 'Lisää välipiste',\n 'add-via-duration-button-label':\n 'Aseta välipisteelle {{index}} pysähdyksen kesto',\n 'add-via-duration-button-label-close':\n 'Avaa välipisteen {{index}} pysähdyksen kesto valitsin',\n 'add-via-duration-button-label-open':\n 'Sulje välipisteen {{index}} pysähdyksen kesto valitsin',\n airplane: 'Lentokone',\n arrival: 'Perillä',\n back: 'Takaisin',\n vehiclerentalstation: 'Pyöräasema',\n bikepark: 'Liityntäpyöräparkki',\n bus: 'bussi',\n cancel: 'Peruuta',\n carpark: 'Liityntäpysäkointi',\n 'clear-button-label': 'Tyhjennä',\n 'clear-search-history': 'Tyhjennä hakuhistoria',\n currentposition: 'Tämänhetkinen sijainti',\n delete: 'Poista',\n 'delete-old-searches-header': 'Haluatko tyhjentää hakuhistorian?',\n departure: 'Lähtöaika',\n destination: 'Määränpää',\n favourite: 'Suosikki',\n ferry: 'Lautta',\n 'future-route': 'Tuleva reitti',\n 'give-origin': 'Lähtöpaikka',\n 'give-destination': 'Määränpää',\n origin: 'Lähtöpaikka',\n 'origin-stop-near-you': 'Lähtöpaikka',\n ownlocations: 'Omat paikat',\n loading: 'Ladataan...',\n 'minute-short': 'min',\n platform: 'Laituri',\n rail: 'Juna',\n required: 'pakollinen kenttä',\n search: 'Etsi',\n 'search-address-or-place': 'Hae osoitteella tai paikan nimellä',\n 'search-button-label': 'Hae',\n 'search-destination': 'Hae määränpäätä, linjaa tai pysäkkiä',\n 'search-destination-index': 'Syötä määränpää',\n 'search-destination-results-but-no-search':\n 'Katso tulokset viereiseltä Määränpää-välilehdeltä',\n 'search-no-results': 'Ei tuloksia',\n 'search-origin': 'Hae lähtöpaikkaa, linjaa tai pysäkkiä',\n 'search-origin-index': 'Syötä lähtöpaikka',\n 'search-autosuggest-label': 'Paikka, linja ja pysäkkihaku.',\n 'search-autosuggest-label-instructions-desktop':\n 'Navigoi listassa nuolinäppäimillä ja valitse enterillä.',\n 'search-autosuggest-label-instructions-mobile':\n 'Syötä sijainti ja navigoi listassa pyyhkäisemällä.',\n 'search-autosuggest-label-move-to-destination':\n 'Valittuasi lähtöpaikan siirrytään suoraan määränpää-kenttään.',\n 'search-autosuggest-len': ' Löydettiin {{count}} ehdotus',\n 'search-autosuggest-len_plural': ' Löydettiin {{count}} ehdotusta',\n 'search-current-suggestion': 'Tämänhetkinen valinta: {{selection}}',\n 'search-position': 'Paikanna',\n street: 'Katu',\n subway: 'Metro',\n station: 'Asema',\n stop: 'Pysäkki',\n 'stop-near-you': 'Linja, pysäkki tai asema',\n 'stop-near-you-airplane': 'Hae lentoja tai lentoasemaa',\n 'stop-near-you-bus': 'Hae bussilinjaa tai pysäkkiä',\n 'stop-near-you-citybike': 'Hae kaupunkipyöräasemaa',\n 'stop-near-you-rail': 'Hae lähijunaa tai asemaa',\n 'stop-near-you-subway': 'Hae metrolinjaa tai asemaa',\n 'stop-near-you-tram': 'Hae raitiolinjaa tai pysäkkiä',\n 'stop-route-station': 'Linja- ja pysäkkihaku',\n 'today-at': 'tänään klo',\n 'tomorrow-at': 'huomenna klo',\n tram: 'Raitiovaunu',\n track: 'Raide',\n 'use-own-position': 'Käytä nykyistä sijaintia',\n 'select-from-map': 'Valitse sijainti kartalta',\n 'select-from-own-locations': 'Valitse omista paikoista',\n venue: 'Paikka',\n 'via-point': 'Välipiste',\n where: 'Minne mennään?',\n place: 'Paikka',\n },\n pl: {\n address: 'Adres',\n 'address-place-or-business': 'Adres, miejsce lub firma',\n 'add-via-button-label': 'Dodaj punkt pośredni',\n 'add-via-duration-button-label':\n 'Wybierz czas postoju dla punktu {{index}}',\n 'add-via-duration-button-label-close':\n 'Zamknij wybornik czasu postoju w punkcie {{index}}',\n 'add-via-duration-button-label-open':\n 'Otwórz wybornik czasu postoju w punkcie {{index}}',\n airplane: 'Lot',\n arrival: 'Przyjazd',\n back: 'Wróć',\n bikepark: 'Parkuj i Jedź dla rowerów',\n bikerentalstation: 'Stacja rowerowa',\n bus: 'autobus',\n cancel: 'Anuluj',\n carpark: 'Parkuj i Jedź',\n 'clear-button-label': 'Wyczyść',\n 'clear-search-history': 'Wyczyść historię wyszukiwania',\n currentposition: 'Obecne położenie',\n delete: 'Usuń',\n 'delete-old-searches-header':\n 'Czy na pewno chcesz wyczyścić historię wyszukiwania?',\n departure: 'Odjazd',\n destination: 'Cel',\n 'give-origin': 'Wprowadź swój punkt początkowy.',\n 'give-destination': 'Wprowadź swój cel',\n favourite: 'Ulubione',\n ferry: 'Prom',\n 'future-route': 'Przyszła trasa',\n origin: 'Początek',\n 'origin-stop-near-you': 'Początek',\n ownlocations: 'Własne miejsca',\n loading: 'Ładowanie…',\n 'minute-short': 'min.',\n platform: 'Peron',\n rail: 'Pociąg',\n required: 'wymagane pole',\n search: 'Szukaj',\n 'search-address-or-place': 'Szukaj po adresie lub nazwie miejsca',\n 'search-button-label': 'Szukaj',\n 'search-destination': 'Szukaj celu, trasy lub przystanku',\n 'search-destination-index': 'Wprowadź punkt docelowy',\n 'search-destination-results-but-no-search':\n 'Wyświetl wyniki w sąsiedniej karcie „Cel”',\n 'search-no-results': 'Brak lokalizacji',\n 'search-origin': 'Wyszukaj początek, koniec lub punkt pośredni',\n 'search-origin-index': 'Wprowadź punkt początkowy',\n 'search-position': 'Wykryj lokalizację',\n 'search-autosuggest-label': 'Miejsce, lokalizacja i przystanek.',\n 'search-autosuggest-label-instructions-desktop':\n 'Nawiguj po liście używając strzałek i wybieraj klawiszem Enter.',\n 'search-autosuggest-label-instructions-mobile':\n 'Wprowadź lokalizację i nawiguj po liście gestami przesuwania.',\n 'search-autosuggest-label-move-to-destination':\n 'Po wybraniu lokalizacji początkowej, automatycznie przejdziesz do pola miejsca docelowego.',\n 'search-autosuggest-len': 'Dostępna jest {{count}} propozycja',\n 'search-autosuggest-len_few': 'Dostępne są {{count}} propozycje',\n 'search-autosuggest-len_other': 'Dostępne jest {{count}} propozycji',\n 'search-current-suggestion': 'Obecny wybór: {{selection}}',\n street: 'Ulica',\n subway: 'Metro',\n station: 'Stacja',\n stop: 'Przystanek',\n 'stop-near-you': 'Szukaj przystanków i tras',\n 'stop-near-you-airplane': 'Szukaj lotów i lotnisk',\n 'stop-near-you-bus': 'Szukaj tras autobusowych i przystanków',\n 'stop-near-you-citybike': 'Szukaj stacji rowerów miejskich',\n 'stop-near-you-rail': 'Szukaj tras kolejowych i przystanków',\n 'stop-near-you-subway': 'Szukaj tras metra i przystanków ',\n 'stop-near-you-tram': 'Szukaj tras tramwajowych i przystanków',\n 'stop-route-station': 'Wyszukiwanie autobusów i przystanków',\n 'today-at': 'dziś o',\n 'tomorrow-at': 'jutro o',\n tram: 'Tramwaj',\n track: 'Tor',\n 'use-own-position': 'Użyj obecnej lokalizacji',\n 'select-from-map': 'Wybierz miejsce na mapie',\n 'select-from-own-locations': 'Wybierz z własnych miejsc',\n venue: 'Miejsce',\n 'via-point': 'Przez punkt',\n where: 'Dokąd?',\n place: 'Miejsce',\n },\n sv: {\n address: 'Adress',\n 'address-place-or-business': 'Adress, plats eller företag',\n 'add-via-button-label': 'Lägg till viapunkt',\n 'add-via-duration-button-label':\n 'Ställ in varaktighet för viapunkten {{index}}',\n 'add-via-duration-button-label-close':\n 'Stäng väljaren för varaktighet vid via-punkten {{index}}',\n 'add-via-duration-button-label-open':\n 'Öppna väljaren för varaktighet vid via-punkten {{index}}',\n airplane: 'Flyg',\n arrival: 'Anländer',\n back: 'Tillbaka',\n bikerentalstation: 'Stadscykelstation',\n bikepark: 'Anslutningsparkering för cyklar',\n bus: 'Bussi',\n cancel: 'Avbryt',\n carpark: 'Infartsparkering',\n 'clear-button-label': 'Töm',\n 'clear-search-history': 'Töm sökhistoriken',\n currentposition: 'Nuvarande position',\n delete: 'Ta bort',\n 'delete-old-searches-header': 'Vill du tömma sökhistoriken?',\n departure: 'Avgångstid',\n destination: 'Destination',\n favourite: 'Favorit',\n ferry: 'Färja',\n 'future-route': 'Framtida rutt',\n 'give-destination': 'Skriv in din destination',\n 'give-origin': 'Skriv in din avfärdsplats',\n origin: 'Avfärdsplats',\n 'origin-stop-near-you': 'Avfärdsplats',\n ownlocations: 'Egna platser',\n loading: 'Laddar...',\n 'minute-short': 'min',\n platform: 'Plattform',\n rail: 'Tåg',\n required: 'obligatoriskt fält',\n search: 'Sök',\n 'search-address-or-place': 'Sök med adressen eller platsens namn',\n 'search-button-label': 'Sök',\n 'search-destination': 'Sök destination, linje eller hållplats',\n 'search-destination-index': 'Skriv destination',\n 'search-destination-results-but-no-search':\n 'Se resultaten under fliken Destination',\n 'search-no-results': 'Inga sökresultat',\n 'search-origin': 'Sök avfärdsplats, linje eller hållplats',\n 'search-origin-index': 'Skriv avfärdsplats',\n 'search-position': 'Sök position',\n 'search-autosuggest-label': 'Plats, linje och hållplatssökning.',\n 'search-autosuggest-label-instructions-desktop':\n 'Navigera listan med piltangenterna och välj med Enter-tangeten.',\n 'search-autosuggest-label-instructions-mobile':\n 'Ange platsen och navigera i listan genom att svepa.',\n 'search-autosuggest-label-move-to-destination':\n 'Efter att du valt avgångsplatsen tas du direkt till Destination-fältet.',\n 'search-autosuggest-len': 'Hittade {{count}} förslag',\n 'search-current-suggestion': 'Nuvarande val: {{selection}}',\n street: 'Gata',\n subway: 'Metro',\n station: 'Station',\n stop: 'Hållplats',\n 'stop-near-you': 'Sök hållplatser eller linjer',\n 'stop-near-you-airplane': 'Sök flyg eller flygplatser',\n 'stop-near-you-bus': 'Sök busslinjer eller hållplatser',\n 'stop-near-you-citybike': 'Sök stadscykelstationer',\n 'stop-near-you-rail': 'Sök närtåger eller stationer',\n 'stop-near-you-subway': 'Sök metrolinjer eller stationer',\n 'stop-near-you-tram': 'Sök spårvagnlinjer eller hållplatser',\n 'stop-route-station': 'Buss och stopp sökningen',\n 'today-at': 'i dag kl',\n 'tomorrow-at': 'i morgon',\n tram: 'Spårvagn',\n track: 'Spår',\n 'use-own-position': 'Använd min position',\n 'select-from-map': 'Välj position från kartan',\n 'select-from-own-locations': 'Välj från egna platser',\n venue: 'Mötesplats',\n 'via-point': 'Via punkt',\n where: 'Vart vill du åka?',\n place: 'Plats',\n },\n};\n\nexport default translations;\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import PropTypes from 'prop-types';\nimport React, { useState, useEffect, useCallback } from 'react';\nimport ReactModal from 'react-modal';\nimport cx from 'classnames';\nimport Icon from '@digitransit-component/digitransit-component-icon';\nimport DialogModal from '@digitransit-component/digitransit-component-dialog-modal';\nimport Autosuggest from 'react-autosuggest';\nimport mobileStyles from './MobileSearch.scss';\nimport mobileNoScrollStyles from './MobileNoScroll.scss';\n\nclass AutosuggestPatch extends Autosuggest {\n constructor(props) {\n super(props);\n const self = this;\n self.onSuggestionTouchMove = () => {\n self.justSelectedSuggestion = false;\n self.pressedSuggestion = null;\n };\n }\n}\n\nconst MobileSearch = ({\n appElement,\n id,\n closeHandle,\n clearInput,\n value,\n suggestions,\n inputProps,\n fetchFunction,\n renderSuggestion,\n getSuggestionValue,\n ariaLabel,\n label,\n onSuggestionSelected,\n clearOldSearches,\n dialogHeaderText,\n dialogPrimaryButtonText,\n dialogSecondaryButtonText,\n clearInputButtonText,\n focusInput,\n color,\n hoverColor,\n accessiblePrimaryColor,\n searchOpen,\n fontWeights,\n showScroll,\n}) => {\n const styles = showScroll ? mobileStyles : mobileNoScrollStyles;\n\n const inputId = `${id}-input`;\n const labelId = `${id}-label`;\n\n const [isDialogOpen, setDialogOpen] = useState(false);\n const inputRef = React.useRef();\n\n useEffect(() => {\n ReactModal.setAppElement(appElement);\n }, []);\n\n const onClose = useCallback(() => {\n closeHandle();\n });\n\n const onSelect = (e, ref) => {\n if (ref.suggestion.type === 'clear-search-history') {\n setDialogOpen(true);\n } else if (!ref.suggestion.properties.arrowClicked) {\n // Select item if fill input button is not pressed (diagonal arrow in suggestion items)\n onSuggestionSelected(e, ref);\n }\n };\n\n const isKeyboardSelectionEvent = event => {\n const space = [13, ' ', 'Spacebar'];\n const enter = [32, 'Enter'];\n const key = (event && (event.key || event.which || event.keyCode)) || '';\n\n if (!key || !space.concat(enter).includes(key)) {\n return false;\n }\n event.preventDefault();\n return true;\n };\n\n const getValue = suggestion => {\n if (suggestion.type === 'clear-search-history') {\n return '';\n }\n return getSuggestionValue(suggestion);\n };\n\n const renderItem = item => {\n if (item.type === 'clear-search-history') {\n return (\n <button type=\"button\" className={styles['clear-search-history']}>\n {item.labelId}\n </button>\n );\n }\n return renderSuggestion(item);\n };\n\n const renderDialogModal = () => {\n return (\n <DialogModal\n appElement={appElement}\n isModalOpen={isDialogOpen}\n handleClose={() => setDialogOpen(false)}\n headerText={dialogHeaderText}\n primaryButtonText={dialogPrimaryButtonText}\n secondaryButtonText={dialogSecondaryButtonText}\n primaryButtonOnClick={() => {\n clearOldSearches();\n setDialogOpen(false);\n }}\n secondaryButtonOnClick={() => setDialogOpen(false)}\n color={color}\n hoverColor={hoverColor}\n fontWeights={fontWeights}\n />\n );\n };\n\n const clearButton = () => {\n return (\n <button\n type=\"button\"\n className={styles['clear-input']}\n onClick={clearInput}\n onKeyDown={e => isKeyboardSelectionEvent(e) && clearInput()}\n aria-label={clearInputButtonText}\n >\n <Icon img=\"close\" color={color} />\n </button>\n );\n };\n\n const renderContent = () => {\n return (\n <div className={styles['combobox-container']} htmlFor={inputId}>\n <button\n type=\"button\"\n className={styles['combobox-icon']}\n onClick={() => onClose()}\n onKeyDown={e => isKeyboardSelectionEvent(e) && onClose()}\n aria-label={dialogSecondaryButtonText}\n tabIndex={0}\n >\n <Icon img=\"arrow\" />\n </button>\n <span className={styles['right-column']}>\n <span className={styles['combobox-label']} id={labelId}>\n {label}\n </span>\n <AutosuggestPatch\n alwaysRenderSuggestions\n id={id}\n suggestions={suggestions}\n onSuggestionsFetchRequested={fetchFunction}\n getSuggestionValue={getValue}\n renderSuggestion={renderItem}\n // focusInputOnSuggestionClick must be set to true.\n // If set to false, input won't be focused when user clicks on\n // Fill input button in suggestion list. (diagonal arrow in street name items)\n focusInputOnSuggestionClick\n shouldRenderSuggestions={() => true}\n inputProps={{\n ...inputProps,\n className: cx(\n `${styles.input} ${styles[id] || ''} ${\n inputProps.value ? styles.hasValue : ''\n }`,\n ),\n autoFocus: true,\n }}\n renderInputComponent={p => (\n <>\n <input aria-label={ariaLabel} id={id} {...p} />\n {value && clearButton()}\n </>\n )}\n theme={styles}\n onSuggestionSelected={onSelect}\n ref={inputRef}\n />\n </span>\n </div>\n );\n };\n if (focusInput && inputRef.current?.input) {\n inputRef.current.input.focus();\n }\n\n return (\n <ReactModal\n isOpen={searchOpen}\n className={styles['mobile-modal']}\n overlayClassName={styles['mobile-modal-overlay']}\n onAfterClose={onClose}\n shouldCloseOnEsc\n >\n <div\n className={styles['mobile-modal-content']}\n style={{\n '--color': `${color}`,\n '--accessible-primary-color': accessiblePrimaryColor,\n '--hover-color': `${hoverColor}`,\n '--font-weight-medium': fontWeights.medium,\n }}\n >\n {renderContent()}\n {renderDialogModal()}\n </div>\n </ReactModal>\n );\n};\n\nMobileSearch.propTypes = {\n appElement: PropTypes.string.isRequired,\n id: PropTypes.string.isRequired,\n closeHandle: PropTypes.func.isRequired,\n clearInput: PropTypes.func.isRequired,\n value: PropTypes.string,\n clearInputButtonText: PropTypes.string.isRequired,\n // eslint-disable-next-line\n suggestions: PropTypes.arrayOf(PropTypes.object).isRequired,\n inputProps: PropTypes.shape({\n onChange: PropTypes.func.isRequired,\n onBlur: PropTypes.func.isRequired,\n value: PropTypes.string.isRequired,\n placeholder: PropTypes.string.isRequired,\n className: PropTypes.string.isRequired,\n }).isRequired,\n fetchFunction: PropTypes.func.isRequired,\n getSuggestionValue: PropTypes.func.isRequired,\n renderSuggestion: PropTypes.func.isRequired,\n onSuggestionSelected: PropTypes.func.isRequired,\n label: PropTypes.string.isRequired,\n clearOldSearches: PropTypes.func.isRequired,\n ariaLabel: PropTypes.string,\n dialogHeaderText: PropTypes.string,\n dialogPrimaryButtonText: PropTypes.string,\n dialogSecondaryButtonText: PropTypes.string,\n focusInput: PropTypes.bool,\n color: PropTypes.string,\n hoverColor: PropTypes.string,\n accessiblePrimaryColor: PropTypes.string.isRequired,\n searchOpen: PropTypes.bool.isRequired,\n fontWeights: PropTypes.shape({\n medium: PropTypes.number.isRequired,\n }).isRequired,\n showScroll: PropTypes.bool,\n};\n\nMobileSearch.defaultProps = {\n value: undefined,\n ariaLabel: undefined,\n dialogHeaderText: undefined,\n dialogPrimaryButtonText: undefined,\n dialogSecondaryButtonText: undefined,\n focusInput: false,\n color: undefined,\n hoverColor: undefined,\n showScroll: undefined,\n};\n\nexport default MobileSearch;\n","/*! For license information please see index.js.LICENSE.txt */\n!function(e,t){if(\"object\"==typeof exports&&\"object\"==typeof module)module.exports=t(require(\"react\"));else if(\"function\"==typeof define&&define.amd)define([\"react\"],t);else{var n=\"object\"==typeof exports?t(require(\"react\")):t(e.react);for(var o in n)(\"object\"==typeof exports?exports:e)[o]=n[o]}}(\"undefined\"!=typeof self?self:this,(function(e){return function(){var t={888:function(e,t,n){var o,r;r=void 0!==n.g?n.g:\"undefined\"!=typeof window?window:this,o=function(){return function(e){\"use strict\";var t={ignore:\"[data-scroll-ignore]\",header:null,topOnEmptyHash:!0,speed:500,speedAsDuration:!1,durationMax:null,durationMin:null,clip:!0,offset:0,easing:\"easeInOutCubic\",customEasing:null,updateURL:!0,popstate:!0,emitEvents:!0},n=function(){var e={};return Array.prototype.forEach.call(arguments,(function(t){for(var n in t){if(!t.hasOwnProperty(n))return;e[n]=t[n]}})),e},o=function(e){\"#\"===e.charAt(0)&&(e=e.substr(1));for(var t,n=String(e),o=n.length,r=-1,u=\"\",i=n.charCodeAt(0);++r<o;){if(0===(t=n.charCodeAt(r)))throw new InvalidCharacterError(\"Invalid character: the input contains U+0000.\");u+=t>=1&&t<=31||127==t||0===r&&t>=48&&t<=57||1===r&&t>=48&&t<=57&&45===i?\"\\\\\"+t.toString(16)+\" \":t>=128||45===t||95===t||t>=48&&t<=57||t>=65&&t<=90||t>=97&&t<=122?n.charAt(r):\"\\\\\"+n.charAt(r)}return\"#\"+u},r=function(){return Math.max(document.body.scrollHeight,document.documentElement.scrollHeight,document.body.offsetHeight,document.documentElement.offsetHeight,document.body.clientHeight,document.documentElement.clientHeight)},u=function(t){return t?(n=t,parseInt(e.getComputedStyle(n).height,10)+t.offsetTop):0;var n},i=function(t,n,o){0===t&&document.body.focus(),o||(t.focus(),document.activeElement!==t&&(t.setAttribute(\"tabindex\",\"-1\"),t.focus(),t.style.outline=\"none\"),e.scrollTo(0,n))},s=function(t,n,o,r){if(n.emitEvents&&\"function\"==typeof e.CustomEvent){var u=new CustomEvent(t,{bubbles:!0,detail:{anchor:o,toggle:r}});document.dispatchEvent(u)}};return function(c,a){var l,f,d,v,p={cancelScroll:function(e){cancelAnimationFrame(v),v=null,e||s(\"scrollCancel\",l)},animateScroll:function(o,c,a){p.cancelScroll();var f=n(l||t,a||{}),h=\"[object Number]\"===Object.prototype.toString.call(o),m=h||!o.tagName?null:o;if(h||m){var y=e.pageYOffset;f.header&&!d&&(d=document.querySelector(f.header));var b,g,w,E=u(d),O=h?o:function(t,n,o,u){var i=0;if(t.offsetParent)do{i+=t.offsetTop,t=t.offsetParent}while(t);return i=Math.max(i-n-o,0),u&&(i=Math.min(i,r()-e.innerHeight)),i}(m,E,parseInt(\"function\"==typeof f.offset?f.offset(o,c):f.offset,10),f.clip),S=O-y,_=r(),I=0,M=function(e,t){var n=t.speedAsDuration?t.speed:Math.abs(e/1e3*t.speed);return t.durationMax&&n>t.durationMax?t.durationMax:t.durationMin&&n<t.durationMin?t.durationMin:parseInt(n,10)}(S,f),L=function(t){b||(b=t),I+=t-b,w=y+S*function(e,t){var n;return\"easeInQuad\"===e.easing&&(n=t*t),\"easeOutQuad\"===e.easing&&(n=t*(2-t)),\"easeInOutQuad\"===e.easing&&(n=t<.5?2*t*t:(4-2*t)*t-1),\"easeInCubic\"===e.easing&&(n=t*t*t),\"easeOutCubic\"===e.easing&&(n=--t*t*t+1),\"easeInOutCubic\"===e.easing&&(n=t<.5?4*t*t*t:(t-1)*(2*t-2)*(2*t-2)+1),\"easeInQuart\"===e.easing&&(n=t*t*t*t),\"easeOutQuart\"===e.easing&&(n=1- --t*t*t*t),\"easeInOutQuart\"===e.easing&&(n=t<.5?8*t*t*t*t:1-8*--t*t*t*t),\"easeInQuint\"===e.easing&&(n=t*t*t*t*t),\"easeOutQuint\"===e.easing&&(n=1+--t*t*t*t*t),\"easeInOutQuint\"===e.easing&&(n=t<.5?16*t*t*t*t*t:1+16*--t*t*t*t*t),e.customEasing&&(n=e.customEasing(t)),n||t}(f,g=(g=0===M?0:I/M)>1?1:g),e.scrollTo(0,Math.floor(w)),function(t,n){var r=e.pageYOffset;if(t==n||r==n||(y<n&&e.innerHeight+r)>=_)return p.cancelScroll(!0),i(o,n,h),s(\"scrollStop\",f,o,c),b=null,v=null,!0}(w,O)||(v=e.requestAnimationFrame(L),b=t)};0===e.pageYOffset&&e.scrollTo(0,0),function(e,t,n){t||history.pushState&&n.updateURL&&history.pushState({smoothScroll:JSON.stringify(n),anchor:e.id},document.title,e===document.documentElement?\"#top\":\"#\"+e.id)}(o,h,f),\"matchMedia\"in e&&e.matchMedia(\"(prefers-reduced-motion)\").matches?i(o,Math.floor(O),!1):(s(\"scrollStart\",f,o,c),p.cancelScroll(!0),e.requestAnimationFrame(L))}}},h=function(t){if(!t.defaultPrevented&&!(0!==t.button||t.metaKey||t.ctrlKey||t.shiftKey)&&\"closest\"in t.target&&(f=t.target.closest(c))&&\"a\"===f.tagName.toLowerCase()&&!t.target.closest(l.ignore)&&f.hostname===e.location.hostname&&f.pathname===e.location.pathname&&/#/.test(f.href)){var n,r;try{n=o(decodeURIComponent(f.hash))}catch(e){n=o(f.hash)}if(\"#\"===n){if(!l.topOnEmptyHash)return;r=document.documentElement}else r=document.querySelector(n);(r=r||\"#top\"!==n?r:document.documentElement)&&(t.preventDefault(),function(t){if(history.replaceState&&t.updateURL&&!history.state){var n=e.location.hash;n=n||\"\",history.replaceState({smoothScroll:JSON.stringify(t),anchor:n||e.pageYOffset},document.title,n||e.location.href)}}(l),p.animateScroll(r,f))}},m=function(e){if(null!==history.state&&history.state.smoothScroll&&history.state.smoothScroll===JSON.stringify(l)){var t=history.state.anchor;\"string\"==typeof t&&t&&!(t=document.querySelector(o(history.state.anchor)))||p.animateScroll(t,null,{updateURL:!1})}};return p.destroy=function(){l&&(document.removeEventListener(\"click\",h,!1),e.removeEventListener(\"popstate\",m,!1),p.cancelScroll(),l=null,f=null,d=null,v=null)},function(){if(!(\"querySelector\"in document&&\"addEventListener\"in e&&\"requestAnimationFrame\"in e&&\"closest\"in e.Element.prototype))throw\"Smooth Scroll: This browser does not support the required JavaScript methods and browser APIs.\";p.destroy(),l=n(t,a||{}),d=l.header?document.querySelector(l.header):null,document.addEventListener(\"click\",h,!1),l.updateURL&&l.popstate&&e.addEventListener(\"popstate\",m,!1)}(),p}}(r)}.apply(t,[]),void 0===o||(e.exports=o)},432:function(e,t,n){\"use strict\";var o=this&&this.__createBinding||(Object.create?function(e,t,n,o){void 0===o&&(o=n),Object.defineProperty(e,o,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,o){void 0===o&&(o=n),e[o]=t[n]}),r=this&&this.__exportStar||function(e,t){for(var n in e)\"default\"===n||Object.prototype.hasOwnProperty.call(t,n)||o(t,e,n)};Object.defineProperty(t,\"__esModule\",{value:!0}),r(n(47),t),r(n(926),t),r(n(349),t),r(n(137),t),r(n(729),t),r(n(383),t),r(n(450),t),r(n(358),t),r(n(753),t),r(n(869),t),r(n(352),t),r(n(446),t),r(n(164),t),r(n(305),t),r(n(502),t)},349:function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.useArrowNavigation=void 0;var o=n(156);t.useArrowNavigation=function(e){var t=e.listItems,n=e.onArrowUpOrDown,r=(0,o.useState)(0),u=r[0],i=r[1],s=(0,o.useCallback)((function(e){i(e)}),[t]),c=function(e){var o=e.key;if(null==t?void 0:t.length)if(\"ArrowUp\"===o)n&&n(),e.preventDefault(),s(u>0?u-1:t.length-1);else{if(\"ArrowDown\"!==o)return;n&&n(),e.preventDefault(),u<t.length-1?s(u+1):s(0)}};return(0,o.useEffect)((function(){return window.addEventListener(\"keydown\",c),function(){return window.removeEventListener(\"keydown\",c)}})),(0,o.useEffect)((function(){s(0)}),[t]),{selectedIndex:u}}},446:function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.useDebounce=void 0;var o=n(156);t.useDebounce=function(e,t){void 0===t&&(t=300);var n=(0,o.useState)(e),r=n[0],u=n[1];return(0,o.useEffect)((function(){var n=setTimeout((function(){u(e)}),t);return function(){clearTimeout(n)}}),[e,t]),r}},164:function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.useElementSize=void 0;var o=n(156);t.useElementSize=function(){var e,t,n=(0,o.useRef)(null);return[n,{width:null===(e=null==n?void 0:n.current)||void 0===e?void 0:e.clientWidth,height:null===(t=null==n?void 0:n.current)||void 0===t?void 0:t.clientHeight}]},t.default=t.useElementSize},137:function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.useIntersectionObserver=void 0;var o=n(156);t.useIntersectionObserver=function(e){var t=(0,o.useRef)(null),n=(0,o.useState)(!1),r=n[0],u=n[1],i=function(e){var t=e[0];u(t.isIntersecting)};return(0,o.useEffect)((function(){if(window&&window.IntersectionObserver){var n=new IntersectionObserver(i,e),o=t.current;return t.current&&n.observe(t.current),function(){o&&n.unobserve(o)}}u(!1)}),[t,e]),{containerRef:t,isVisible:r}},t.default=t.useIntersectionObserver},729:function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.useIsBreakpoint=void 0;var o=n(156),r=n(432),u={xs:1,mobileSmall:320,mobile:375,tablet:768,tabletLarge:920,desktopSmall:1024,desktop:1260,desktopLarge:1440};t.useIsBreakpoint=function(e){var t=\"string\"==typeof e?u[e]:e,n=(0,o.useState)(null),i=n[0],s=n[1],c=(0,o.useCallback)((function(){s(window.innerWidth)}),[]);return(0,o.useEffect)((function(){c()}),[]),(0,r.useOnResize)(c),i>=t},t.default=t.useIsBreakpoint},450:function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.useIsLoadingAfterError=void 0;var o=n(156);t.useIsLoadingAfterError=function(e,t){var n=(0,o.useState)(t),r=n[0],u=n[1];return(0,o.useEffect)((function(){e||u(t)}),[e,t]),e&&r}},305:function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.useIsMobile=void 0;var o=n(729);t.useIsMobile=function(){return!(0,o.useIsBreakpoint)(\"tablet\")},t.default=t.useIsMobile},383:function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.useIsomorphicLayoutEffect=void 0;var o=n(156);t.useIsomorphicLayoutEffect=\"undefined\"!=typeof window?o.useLayoutEffect:o.useEffect,t.default=t.useIsomorphicLayoutEffect},753:function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.useOnLoseFocusWithin=void 0;var o=n(156);t.useOnLoseFocusWithin=function(e){var t=e.ref,n=e.callback,r=e.watch;(0,o.useEffect)((function(){var e=function(){var e;if(r)return(null===(e=t.current)||void 0===e?void 0:e.matches(\":focus-within\"))?void 0:n()};return document.addEventListener(\"keyup\",e),function(){return document.removeEventListener(\"keyup\",e)}}),[n,t,r])},t.default=t.useOnLoseFocusWithin},502:function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.useOnResize=void 0;var o=n(156);t.useOnResize=function(e){(0,o.useEffect)((function(){var t=function(){e(window.innerWidth)};return window.addEventListener(\"resize\",t,{passive:!0}),function(){return window.removeEventListener(\"resize\",t)}}),[])},t.default=t.useOnResize},352:function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.useOnWindowFocus=void 0;var o=n(156);t.useOnWindowFocus=function(e){(0,o.useEffect)((function(){var t=function(){e&&\"visible\"===document.visibilityState&&e()};return window.addEventListener(\"visibilitychange\",t,!1),function(){return window.removeEventListener(\"visibilitychange\",t)}}),[e])}},47:function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.useOutsideReacter=void 0;var o=n(156);t.useOutsideReacter=function(e,t){function n(n){e.current&&!e.current.contains(n.target)&&t()}(0,o.useEffect)((function(){return document.addEventListener(\"mousedown\",n),function(){document.removeEventListener(\"mousedown\",n)}}))}},869:function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.useRunAfterUpdate=void 0;var o=n(156);t.useRunAfterUpdate=function(){var e=(0,o.useRef)(null);return(0,o.useEffect)((function(){e.current&&(e.current(),e.current=null)})),function(t){e.current=t}},t.default=t.useRunAfterUpdate},926:function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.useScrollLock=void 0;var o=n(156);t.useScrollLock=function(){return{lock:(0,o.useCallback)((function(){var e=window.scrollY+\"px\",t=document.body;t.style.position=\"fixed\",t.style.top=\"-\"+e}),[]),unlock:(0,o.useCallback)((function(){var e=document.body,t=e.style.top,n=-1*parseInt(t||\"0\");e.style.position=\"\",e.style.top=\"\",n&&window.scrollTo(0,-1*parseInt(t||\"0\"))}),[])}}},358:function(e,t,n){\"use strict\";var o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.useSmoothScroll=void 0;var r=n(156),u=o(n(888));t.useSmoothScroll=function(e){var t=(0,r.useRef)(null),n=e.ref,o=e.offset,i=void 0===o?0:o,s=e.speed,c=void 0===s?500:s;return(0,r.useEffect)((function(){t.current=new u.default(null,{speed:c,speedAsDuration:!0})}),[]),(0,r.useCallback)((function(){n&&t.current&&t.current.animateScroll(n.current,null,{offset:function(){return i},updateURL:!1})}),[i,n])}},156:function(t){\"use strict\";t.exports=e}},n={};function o(e){var r=n[e];if(void 0!==r)return r.exports;var u=n[e]={exports:{}};return t[e].call(u.exports,u,u.exports,o),u.exports}return o.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(e){if(\"object\"==typeof window)return window}}(),o(432)}()}));\n//# sourceMappingURL=index.js.map","/* eslint-disable import/no-extraneous-dependencies */\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport i18next from 'i18next';\nimport cx from 'classnames';\nimport Autosuggest from 'react-autosuggest';\nimport { executeSearch } from '@digitransit-search-util/digitransit-search-util-execute-search-immidiate';\nimport SuggestionItem from '@digitransit-component/digitransit-component-suggestion-item';\nimport {\n getNameLabel,\n getStopCode,\n} from '@digitransit-search-util/digitransit-search-util-uniq-by-label';\nimport { getStopName } from '@digitransit-search-util/digitransit-search-util-helpers';\nimport getLabel from '@digitransit-search-util/digitransit-search-util-get-label';\nimport Icon from '@digitransit-component/digitransit-component-icon';\nimport moment from 'moment-timezone';\nimport 'moment/locale/fi';\nimport 'moment/locale/sv';\nimport 'moment/locale/de';\nimport isEqual from 'lodash/isEqual';\nimport isEmpty from 'lodash/isEmpty';\nimport translations from './helpers/translations';\nimport styles from './helpers/styles.scss';\nimport MobileSearch from './helpers/MobileSearch';\nimport withScrollLock from './helpers/withScrollLock';\n\nmoment.locale('en');\n\ni18next.init({\n fallbackLng: 'fi',\n defaultNS: 'translation',\n interpolation: {\n escapeValue: false, // not needed for react as it escapes by default\n },\n});\n\nconst Loading = props => (\n <div className={styles['spinner-loader']}>\n {(props && props.children) || (\n <span className={styles['sr-only']}>{i18next.t('loading')}</span>\n )}\n </div>\n);\n\nLoading.propTypes = {\n children: PropTypes.node,\n};\n\nLoading.defaultProps = {\n children: undefined,\n};\n\nconst getPlatform = addendum => {\n if (!addendum || !addendum.GTFS.platform) {\n return undefined;\n }\n const { modes, platform } = addendum.GTFS;\n const type =\n modes && modes[0] === 'RAIL' ? i18next.t('track') : i18next.t('platform');\n return [type, platform];\n};\n\nfunction getSuggestionContent(item) {\n if (item.type !== 'FutureRoute') {\n if (item.type === 'SelectFromMap') {\n return ['', i18next.t('select-from-map')];\n }\n if (item.type === 'CurrentLocation') {\n return ['', i18next.t('use-own-position')];\n }\n if (item.type === 'SelectFromOwnLocations') {\n return ['', i18next.t('select-from-own-locations')];\n }\n /* eslint-disable-next-line prefer-const */\n let [name, label] = getNameLabel(item.properties, true);\n let suggestionType;\n if (\n item.properties.layer.toLowerCase().includes('bikerental') ||\n item.properties.layer.toLowerCase().includes('bikestation')\n ) {\n suggestionType = i18next.t('vehiclerentalstation');\n const stopCode = item.properties.labelId;\n return [suggestionType, name, undefined, stopCode];\n }\n\n if (item.properties.layer === 'bikepark') {\n suggestionType = i18next.t('bikepark');\n return [suggestionType, name, undefined, undefined];\n }\n\n if (item.properties.layer === 'carpark') {\n suggestionType = i18next.t('carpark');\n return [suggestionType, name, undefined, undefined];\n }\n\n if (item.properties.mode) {\n suggestionType = i18next.t(\n item.properties.mode.toLowerCase().replace('favourite', ''),\n );\n } else {\n const layer = item.properties.layer\n .replace('route-', '')\n .toLowerCase()\n .replace('favourite', '');\n suggestionType = i18next.t(layer);\n }\n\n if (\n item.properties.id &&\n (item.properties.layer === 'stop' || item.properties.layer === 'station')\n ) {\n const stopCode = getStopCode(item.properties);\n const mode = item.properties.addendum?.GTFS.modes;\n const platform = getPlatform(item.properties.addendum);\n return [\n suggestionType,\n getStopName(name, stopCode),\n label,\n stopCode,\n mode,\n platform,\n ];\n }\n if (\n item.properties.layer === 'favouriteStop' ||\n item.properties.layer === 'favouriteStation'\n ) {\n const { address, code } = item.properties;\n const stoName = address ? getStopName(address.split(',')[0], code) : name;\n const platform = getPlatform(item.properties.addendum);\n return [suggestionType, stoName, label, code, undefined, platform];\n }\n return [suggestionType, name, label];\n }\n const { origin, destination } = item.properties;\n const tail1 = origin.locality ? `, ${origin.locality} foobar` : '';\n const tail2 = destination.locality ? `, ${destination.locality}` : '';\n const name1 = origin.name;\n const name2 = destination.name;\n return [\n i18next.t('future-route'),\n `${i18next.t('origin')} ${name1}${tail1} ${i18next.t(\n 'destination',\n )} ${name2}${tail2}`,\n item.translatedText,\n ];\n}\n\nfunction translateFutureRouteSuggestionTime(item) {\n const time = moment.unix(item.properties.time);\n let str = item.properties.arriveBy\n ? i18next.t('arrival')\n : i18next.t('departure');\n if (time.isSame(moment(), 'day')) {\n str = `${str} ${i18next.t('today-at')}`;\n } else if (time.isSame(moment().add(1, 'day'), 'day')) {\n str = `${str} ${i18next.t('tomorrow-at')}`;\n } else {\n str = `${str} ${time.format('dd D.M.')}`;\n }\n str = `${str} ${moment(time).format('HH:mm')}`;\n return str;\n}\n\nconst getSuggestionValue = suggestion => {\n if (\n suggestion.type === 'SelectFromOwnLocations' ||\n suggestion.type === 'back'\n ) {\n return '';\n }\n return getLabel(suggestion.properties);\n};\n/**\n * @example\n * const searchContext = {\n * isPeliasLocationAware: false // true / false does Let Pelias suggest based on current user location\n * minimalRegexp: undefined // used for testing min. regexp. For example: new RegExp('.{2,}'),\n * lineRegexp: undefined // identify searches for route numbers/labels: bus | train | metro. For example: new RegExp(\n * // '(^[0-9]+[a-z]?$|^[yuleapinkrtdz]$|(^m[12]?b?$))',\n * // 'i',\n * // ),\n * URL_PELIAS: '' // url for pelias searches\n * feedIDs: ['HSL', 'HSLLautta'] // FeedId's like [HSL, HSLLautta]\n * geocodingSources: ['oa','osm','nlsfi'] // sources for geocoding\n * geocodingSearchParams; {} // Searchparmas fro geocoding\n * getFavouriteLocations: () => ({}), // Function that returns array of favourite locations.\n * getFavouriteStops: () => ({}), // Function that returns array of favourite stops.\n * getLanguage: () => ({}), // Function that returns current language.\n * getFavouriteRoutes: () => ({}), // Function that returns array of favourite routes.\n * getPositions: () => ({}), // Function that returns user's geolocation.\n * getRoutesQuery: () => ({}), // Function that returns query for fetching routes.\n * getStopAndStationsQuery: () => ({}), // Function that fetches favourite stops and stations from graphql API.\n * getFavouriteRoutesQuery: () => ({}), // Function that returns query for fetching favourite routes.\n * getFavouriteVehicleRentalStations: () => ({}), // Function that returns favourite bike rental station.\n * getFavouriteVehicleRentalStationsQuery: () => ({}), // Function that returns query for fetching favourite bike rental stations.\n * startLocationWatch: () => ({}), // Function that locates users geolocation.\n * saveSearch: () => ({}), // Function that saves search to old searches store.\n * clearOldSearches: () => ({}), // Function that clears old searches store.\n * getFutureRoutes: () => ({}), // Function that return future routes\n * saveFutureRoute: () => ({}), // Function that saves a future route\n * clearFutureRoutes: () => ({}), // Function that clears future routes\n * };\n * const lang = 'fi'; // en, fi or sv\n * const onSelect = (item, id) => {\n * // Funtionality when user selects a suggesions. No default implementation is given.\n * return null;\n * };\n * const onClear = id => {\n * // Called when user clicks the clear search string button. No default implementation.\n * return null;\n * };\n * const getAutoSuggestIcons: {\n * // Called for every city bike station rendered as a search suggestion. Should return the icon and\n * // color used for that station. Two icons are available, 'citybike-stop-digitransit' anditybike-stop-digitransit-secondary'.\n * citybikes: station => {\n * return ['citybike-stop-digitransit', '#f2b62d'];\n * }\n * }\n * const transportMode = undefined;\n * const placeholder = \"stop-near-you\";\n * const targets = ['Locations', 'Stops', 'Routes']; // Defines what you are searching. Options are Locations, Stops, Stations, Routes, VehicleRentalStations, FutureRoutes, MapPosition and CurrentPosition. Leave empty to search all targets.\n * const sources = ['Favourite', 'History', 'Datasource'] // Defines where you are searching. all available are: Favourite, History (previously searched searches) and Datasource. Leave empty to use all sources.\n * return (\n * <DTAutosuggest\n * appElement={appElement} // Required. Root element's id. Needed for react-modal component.\n * searchContext={searchContext}\n * icon=\"origin\" // Optional String for icon that is shown left of searchfield. used with Icon library\n * id=\"origin\" // used for style props and info for component.\n * placeholder={placeholder} // String that is showns initally in search field\n * value=\"\" // e.g. user typed string that is shown in search field\n * onSelect={onSelect}\n * onClear={onClear}\n * autoFocus={false} // defines that should this field be automatically focused when page is loaded.\n * lang={lang}\n * getAutoSuggestIcons={getAutoSuggestIcons}\n * transportMode={transportMode} // transportmode with which we filter the routes, e.g. route-BUS\n * geocodingSize={10} // defines how many stops and stations to fetch from geocoding. Useful if you want to filter the results and still get a reasonable amount of suggestions.\n * filterResults={results => return results} // Optional filtering function for routes and stops\n * handelViaPoints={() => return null } // Optional Via point handling logic. This is currently managed with DTAutosuggestpanel by default, but if DTAutosuggest is used seperatelly own implementation must be provided.\n * focusChange={() => return null} // When suggestion is selected, handle changing focus. This is currently managed with DTAutosuggestpanel by default, but if DTAutosuggest is used seperatelly own implementation must be provided.\n * storeRef={() => return null} // Functionality to store refs. Currenlty managed with DTAutosuggestpanel by default, but if DTAutosuggest is used seperatelly own implementation must be provided.\n * sources={sources}\n * targets={targets}\n * isMobile // Optional. Defaults to false. Whether to use mobile search.\n * mobileLabel=\"Custom label\" // Optional. Custom label text for autosuggest field on mobile.\n * inputClassName=\"\" // Optional. Custom classname applied to the input element of the component for providing CSS styles.\n * translatedPlaceholder= // Optional. Custon translated placeholder text for autosuggest field.\n */\nclass DTAutosuggest extends React.Component {\n static propTypes = {\n appElement: PropTypes.string.isRequired,\n autoFocus: PropTypes.bool,\n className: PropTypes.string,\n icon: PropTypes.string,\n id: PropTypes.string.isRequired,\n placeholder: PropTypes.string.isRequired,\n translatedPlaceholder: PropTypes.string,\n value: PropTypes.string,\n searchContext: PropTypes.shape({\n URL_PELIAS: PropTypes.string,\n // eslint-disable-next-line\n context: PropTypes.object,\n clearOldSearches: PropTypes.func,\n clearFutureRoutes: PropTypes.func,\n }).isRequired,\n ariaLabel: PropTypes.string,\n onSelect: PropTypes.func.isRequired,\n transportMode: PropTypes.string,\n filterResults: PropTypes.func,\n geocodingSize: PropTypes.number,\n onClear: PropTypes.func,\n storeRef: PropTypes.func,\n handleViaPoints: PropTypes.func,\n focusChange: PropTypes.func,\n lang: PropTypes.string,\n sources: PropTypes.arrayOf(PropTypes.string),\n targets: PropTypes.arrayOf(PropTypes.string),\n isMobile: PropTypes.bool,\n color: PropTypes.string,\n hoverColor: PropTypes.string,\n accessiblePrimaryColor: PropTypes.string,\n timeZone: PropTypes.string,\n pathOpts: PropTypes.shape({\n routesPrefix: PropTypes.string,\n stopsPrefix: PropTypes.string,\n }),\n mobileLabel: PropTypes.string,\n lock: PropTypes.func.isRequired,\n unlock: PropTypes.func.isRequired,\n refPoint: PropTypes.shape({\n address: PropTypes.string,\n lat: PropTypes.number,\n lon: PropTypes.number,\n }),\n inputClassName: PropTypes.string,\n fontWeights: PropTypes.shape({\n medium: PropTypes.number,\n }),\n modeIconColors: PropTypes.objectOf(PropTypes.string),\n getAutoSuggestIcons: PropTypes.objectOf(PropTypes.func),\n required: PropTypes.bool,\n modeSet: PropTypes.string,\n showScroll: PropTypes.bool,\n isEmbedded: PropTypes.bool,\n };\n\n static defaultProps = {\n autoFocus: false,\n className: '',\n icon: undefined,\n value: '',\n transportMode: undefined,\n filterResults: undefined,\n onClear: undefined,\n lang: 'fi',\n storeRef: undefined,\n handleViaPoints: undefined,\n focusChange: undefined,\n getAutoSuggestIcons: undefined,\n sources: [],\n targets: undefined,\n isMobile: false,\n isEmbedded: false,\n geocodingSize: undefined,\n color: '#007ac9',\n hoverColor: '#0062a1',\n accessiblePrimaryColor: '#0074be',\n timeZone: 'Europe/Helsinki',\n pathOpts: {\n routesPrefix: 'linjat',\n stopsPrefix: 'pysakit',\n },\n ariaLabel: undefined,\n mobileLabel: undefined,\n inputClassName: '',\n translatedPlaceholder: undefined,\n fontWeights: {\n medium: 500,\n },\n modeIconColors: {\n 'mode-bus': '#007ac9',\n 'mode-rail': '#8c4799',\n 'mode-tram': '#008151',\n 'mode-metro': '#ed8c00',\n 'mode-ferry': '#007A97',\n 'mode-citybike': '#f2b62d',\n 'mode-funicular': '#ff00ff',\n },\n required: false,\n modeSet: undefined,\n showScroll: false,\n refPoint: {},\n };\n\n constructor(props) {\n super(props);\n moment.tz.setDefault(props.timeZone);\n moment.locale(props.lang);\n\n this.state = {\n value: props.value,\n suggestions: [],\n editing: false,\n valid: true,\n renderMobileSearch: false,\n sources: props.sources,\n ownPlaces: false,\n typingTimer: null,\n typing: false,\n pendingSelection: null,\n suggestionIndex: 0,\n cleanExecuted: false,\n scrollY: 0,\n };\n Object.keys(translations).forEach(lang => {\n i18next.addResourceBundle(lang, 'translation', translations[lang]);\n });\n }\n\n // DT-4074: When a user's location is updated DTAutosuggest would re-render causing suggestion list to reset.\n // This will prevent it.\n shouldComponentUpdate(nextProps, nextState) {\n return !isEqual(nextState, this.state) || !isEqual(nextProps, this.props);\n }\n\n componentDidUpdate() {\n if (i18next.language !== this.props.lang) {\n i18next.changeLanguage(this.props.lang);\n }\n }\n\n // eslint-disable-next-line camelcase\n UNSAFE_componentWillReceiveProps(nextProps) {\n // wait until address is set or geolocationing fails\n if (nextProps.value !== this.state.value && !this.state.editing) {\n this.setState({\n value: nextProps.value,\n });\n }\n }\n\n onChange = (event, { newValue, method }) => {\n const newState = {\n value: this.fInput || newValue || '',\n renderMobileSearch: this.props.isMobile,\n };\n // Remove filled input value so it wont be reused unnecessary\n this.fInput = null;\n if (!this.state.editing) {\n newState.editing = true;\n this.setState(newState, () =>\n this.fetchFunction({ value: newValue || '' }),\n );\n } else if (method !== 'enter' || this.state.valid) {\n // test above drops unnecessary update\n // when user hits enter but search is unfinished\n if (this.state.typingTimer) {\n clearTimeout(this.state.typingTimer);\n }\n if (method === 'type') {\n // after timeout runs, aria alert will announce current selection\n const timer = setTimeout(() => {\n this.setState({ typing: false });\n }, 1000);\n newState.typingTimer = timer;\n newState.typing = true;\n }\n this.setState(newState);\n }\n };\n\n onBlur = () => {\n if (this.state.renderMobileSearch) {\n return;\n }\n if (this.state.editing) {\n this.input.focus();\n }\n this.setState({\n editing: false,\n renderMobileSearch: false,\n value: this.props.value,\n });\n };\n\n onSelected = (e, ref) => {\n if (this.state.valid) {\n if (ref.suggestion.type === 'SelectFromOwnLocations') {\n this.setState(\n {\n sources: ['Favourite', 'Back'],\n ownPlaces: true,\n pendingSelection: ref.suggestion.type,\n value: '',\n },\n () => {\n this.fetchFunction({ value: '' });\n },\n );\n return;\n }\n if (\n ref.suggestion.type === 'back' ||\n ref.suggestion.type === 'FutureRoute'\n ) {\n this.setState(\n {\n sources: this.props.sources,\n ownPlaces: false,\n pendingSelection: ref.suggestion.type,\n suggestionIndex: ref.suggestionIndex,\n },\n () => {\n this.fetchFunction({ value: '' });\n },\n );\n return;\n }\n this.selectionDone = true; // selection done, do not let upcoming keyboard events confuse the flow\n this.setState(\n {\n editing: false,\n value: ref.suggestionValue,\n },\n () => {\n this.input.blur();\n if (this.props.handleViaPoints) {\n this.props.handleViaPoints(ref.suggestion, ref.suggestionIndex);\n } else {\n this.props.onSelect(ref.suggestion, this.props.id);\n }\n this.setState(\n {\n renderMobileSearch: false,\n sources: this.props.sources,\n ownPlaces: false,\n suggestions: [],\n },\n () => {\n this.selectionDone = false;\n },\n );\n if (\n this.props.focusChange &&\n (!this.props.isMobile || this.props.isEmbedded)\n ) {\n this.props.focusChange();\n }\n if (this.props.isMobile) {\n this.closeMobileSearch();\n }\n },\n );\n } else {\n this.setState(\n prevState => ({\n pendingSelection: prevState.value,\n }),\n () => this.checkPendingSelection(), // search may finish during state change\n );\n }\n };\n\n onSuggestionsClearRequested = () => {\n this.setState({\n suggestions: [],\n sources: this.props.sources,\n ownPlaces: false,\n editing: false,\n });\n };\n\n checkPendingSelection = () => {\n if (\n (this.state.pendingSelection === 'SelectFromOwnLocations' ||\n this.state.pendingSelection === 'back') &&\n this.state.valid\n ) {\n this.setState(\n {\n pendingSelection: null,\n editing: true,\n },\n () => {\n this.input.focus();\n },\n );\n // accept after all ongoing searches have finished\n } else if (this.state.pendingSelection && this.state.valid) {\n // finish the selection by picking first = best match or with 'FutureRoute' by suggestionIndex\n this.setState(\n {\n pendingSelection: null,\n editing: false,\n },\n () => {\n if (this.state.suggestions.length) {\n this.input.blur();\n const item = this.state.suggestions[this.state.suggestionIndex];\n if (item.type !== 'back') {\n this.props.onSelect(\n this.state.suggestions[this.state.suggestionIndex],\n this.props.id,\n );\n }\n if (this.props.isMobile) {\n this.closeMobileSearch();\n }\n if (\n this.props.focusChange &&\n (!this.props.isMobile || this.props.isEmbedded)\n ) {\n this.props.focusChange();\n }\n }\n },\n );\n }\n };\n\n clearButton = () => {\n return (\n <button\n type=\"button\"\n className={styles['clear-input']}\n onClick={this.clearInput}\n aria-label={i18next.t('clear-button-label')}\n >\n <Icon img=\"close\" color={this.props.color} />\n </button>\n );\n };\n\n fetchFunction = ({ value, cleanExecuted }) => {\n return this.setState(\n { valid: false, cleanExecuted: !cleanExecuted ? false : cleanExecuted },\n () => {\n if (this.selectionDone) {\n // do not let component cast unnecessary requests\n return;\n }\n const { targets } = this.props;\n const useAll = isEmpty(targets);\n const isLocationSearch =\n isEmpty(targets) || targets.includes('Locations');\n let newTargets;\n if (this.state.ownPlaces) {\n newTargets = ['Locations'];\n if (useAll || targets.includes('Stops')) {\n newTargets.push('Stops');\n }\n if (useAll || targets.includes('Stations')) {\n newTargets.push('Stations');\n }\n if (useAll || targets.includes('VehicleRentalStations')) {\n newTargets.push('VehicleRentalStations');\n }\n } else if (!useAll) {\n newTargets = [...targets];\n // in desktop, favorites are accessed via sub search\n if (\n isLocationSearch &&\n !this.props.isMobile &&\n (isEmpty(this.props.sources) ||\n this.props.sources.includes('Favourite'))\n ) {\n newTargets.push('SelectFromOwnLocations');\n }\n }\n // remove location favourites in desktop search (collection item replaces it in target array)\n const sources =\n this.state.sources &&\n this.state.sources.filter(\n s =>\n !(\n isLocationSearch &&\n s === 'Favourite' &&\n !this.state.ownPlaces &&\n !this.props.isMobile\n ),\n );\n\n executeSearch(\n newTargets,\n sources,\n this.props.transportMode,\n this.props.searchContext,\n this.props.filterResults,\n this.props.geocodingSize,\n {\n input: value || '',\n },\n searchResult => {\n if (searchResult == null) {\n return;\n }\n // XXX translates current location\n const suggestions = (searchResult.results || [])\n .filter(\n suggestion =>\n suggestion.type !== 'FutureRoute' ||\n (suggestion.type === 'FutureRoute' &&\n suggestion.properties.time > moment().unix()),\n )\n .map(suggestion => {\n if (\n suggestion.type === 'CurrentLocation' ||\n suggestion.type === 'SelectFromMap' ||\n suggestion.type === 'SelectFromOwnLocations' ||\n suggestion.type === 'back'\n ) {\n const translated = { ...suggestion };\n translated.properties.labelId = i18next.t(\n suggestion.properties.labelId,\n );\n return translated;\n }\n return suggestion;\n });\n if (\n value === this.state.value ||\n value === this.state.pendingSelection ||\n this.state.pendingSelection === 'SelectFromOwnLocations' ||\n this.state.pendingSelection === 'back' ||\n this.state.pendingSelection === 'FutureRoute'\n ) {\n this.setState(\n {\n valid: true,\n suggestions,\n },\n () => this.checkPendingSelection(),\n );\n }\n },\n this.props.pathOpts,\n this.props.refPoint,\n );\n },\n );\n };\n\n clearInput = () => {\n const newState = {\n editing: true,\n value: '',\n sources: this.props.sources,\n ownPlaces: false,\n renderMobileSearch: this.props.isMobile,\n };\n // must update suggestions\n this.setState(newState, () =>\n this.fetchFunction({ value: '', cleanExecuted: true }),\n );\n if (this.props.onClear) {\n this.props.onClear(this.props.id);\n }\n this.input.focus();\n };\n\n inputClicked = inputValue => {\n this.input.focus();\n this.clearLocationText();\n if (this.props.isMobile) {\n this.props.lock();\n }\n if (!this.state.editing) {\n const newState = {\n editing: true,\n // reset at start, just in case we missed something\n pendingSelection: null,\n renderMobileSearch: this.props.isMobile,\n };\n\n // DT-3263: added stateKeyDown\n const stateKeyDown = {\n editing: true,\n pendingSelection: null,\n value: inputValue,\n };\n\n if (!this.state.suggestions.length) {\n // DT-3263: added if-else statement\n if (typeof inputValue === 'object' || !inputValue) {\n this.setState(newState, () =>\n this.fetchFunction({ value: this.state.value }),\n );\n } else {\n this.setState(stateKeyDown, () =>\n this.fetchFunction({ value: inputValue }),\n );\n }\n } else {\n this.fetchFunction({ value: this.state.value });\n this.setState(newState);\n }\n } else if (this.props.isMobile && !this.state.renderMobileSearch) {\n this.setState({ renderMobileSearch: true });\n }\n };\n\n storeInputReference = autosuggest => {\n if (autosuggest !== null) {\n this.input = autosuggest.input;\n if (this.props.storeRef) {\n this.props.storeRef(autosuggest.input);\n }\n }\n };\n\n // Fill input when user clicks fill input button in street suggestion item\n fillInput = newValue => {\n this.fInput = newValue.properties.name;\n const newState = {\n editing: true,\n value: newValue.properties.name,\n checkPendingSelection: newValue,\n valid: true,\n };\n // must update suggestions\n this.setState(newState);\n this.fetchFunction({ value: newValue.properties.name });\n this.input.focus();\n };\n\n renderItem = item => {\n const newItem =\n item.type === 'FutureRoute'\n ? {\n ...item,\n translatedText: translateFutureRouteSuggestionTime(item),\n }\n : item;\n const content = getSuggestionContent(item);\n return (\n <SuggestionItem\n item={newItem}\n content={content}\n loading={!this.state.valid}\n isMobile={this.props.isMobile}\n ariaFavouriteString={i18next.t('favourite')}\n color={this.props.color}\n accessiblePrimaryColor={this.props.accessiblePrimaryColor}\n fillInput={this.fillInput}\n fontWeights={this.props.fontWeights}\n getAutoSuggestIcons={this.props.getAutoSuggestIcons}\n modeIconColors={this.props.modeIconColors}\n modeSet={this.props.modeSet}\n />\n );\n };\n\n closeMobileSearch = () => {\n this.props.unlock();\n this.setState(\n {\n renderMobileSearch: false,\n value: this.props.value,\n },\n () => {\n window.scrollTo(0, this.state.scrollY);\n this.onSuggestionsClearRequested();\n },\n );\n };\n\n keyDown = event => {\n if (this.selectionDone) {\n return;\n }\n const keyCode = event.key;\n if (keyCode === 'Escape') {\n this.setState({ editing: false });\n }\n if (this.state.editing) {\n if (keyCode === 'Enter' && this.state.value !== '') {\n this.setState({ pendingSelection: true }, () => {\n this.fetchFunction({ value: this.state.value });\n });\n }\n this.inputClicked();\n return;\n }\n\n if (\n (keyCode === 'Enter' || keyCode === 'ArrowDown') &&\n this.state.value === ''\n ) {\n this.clearInput();\n return;\n }\n\n if (keyCode === 'ArrowDown' && this.state.value !== '') {\n const newState = {\n editing: true,\n value: this.state.value,\n };\n // must update suggestions\n this.setState(newState, () =>\n this.fetchFunction({ value: this.state.value }),\n );\n }\n if (!this.state.editing) {\n this.setState({ editing: true });\n }\n\n if (keyCode === 'Tab') {\n this.onBlur();\n }\n };\n\n suggestionAsAriaContent = () => {\n let label = [];\n const firstSuggestion = this.state.suggestions[0];\n if (firstSuggestion) {\n if (firstSuggestion.type && firstSuggestion.type.includes('Favourite')) {\n label.push(i18next.t('favourite'));\n }\n label = label.concat(getSuggestionContent(this.state.suggestions[0]));\n }\n return [...new Set(label)].join(' - ');\n };\n\n clearOldSearches = () => {\n const { context, clearOldSearches, clearFutureRoutes } =\n this.props.searchContext;\n if (context && clearOldSearches) {\n clearOldSearches(context);\n if (clearFutureRoutes) {\n clearFutureRoutes(context);\n }\n this.fetchFunction({ value: this.state.value });\n }\n };\n\n isOriginDestinationOrViapoint = () =>\n this.props.id === 'origin' ||\n this.props.id === 'destination' ||\n this.props.id === 'via-point' ||\n this.props.id === 'origin-stop-near-you';\n\n clearLocationText = () => {\n const positions = [\n 'Valittu sijainti',\n 'Nykyinen sijaintisi',\n 'Current position',\n 'Selected location',\n 'Vald position',\n 'Använd min position',\n 'Min position',\n 'Käytä nykyistä sijaintia',\n 'Use current location',\n 'Your current location',\n 'Wybrane miejsce',\n ];\n if (positions.includes(this.state.value)) {\n this.clearInput();\n }\n };\n\n onFocus = () => {\n this.clearLocationText();\n\n const scrollY = window.pageYOffset;\n return this.setState({ scrollY });\n };\n\n render() {\n if (i18next.language !== this.props.lang) {\n i18next.changeLanguage(this.props.lang);\n }\n const { value, suggestions, renderMobileSearch, cleanExecuted } =\n this.state;\n const inputProps = {\n placeholder: this.props.translatedPlaceholder\n ? this.props.translatedPlaceholder\n : i18next.t(this.props.placeholder),\n value,\n onChange: this.onChange,\n onBlur: this.onBlur,\n className: cx(\n `${styles.input} ${\n this.props.isMobile && this.props.transportMode ? styles.thin : ''\n } ${styles[this.props.id] || ''} ${\n this.state.value ? styles.hasValue : ''\n } ${this.props.inputClassName}`,\n ),\n onKeyDown: this.keyDown, // DT-3263\n required: this.props.required,\n };\n const ariaBarId = this.props.id.replace('searchfield-', '');\n let SearchBarId = this.props.ariaLabel || i18next.t(ariaBarId);\n SearchBarId = SearchBarId.replace('searchfield-', '').concat('.'); // Full stop makes screen reader speech clearer.\n const ariaRequiredText = this.props.required\n ? `${i18next.t('required')}.`\n : '';\n const ariaLabelInstructions = this.props.isMobile\n ? i18next.t('search-autosuggest-label-instructions-mobile')\n : i18next.t('search-autosuggest-label-instructions-desktop');\n const movingToDestinationFieldText =\n this.props.id === 'origin'\n ? i18next.t('search-autosuggest-label-move-to-destination')\n : '';\n const ariaLabelText = ariaLabelInstructions\n .concat(' ')\n .concat(movingToDestinationFieldText);\n\n const ariaSuggestionLen = i18next.t('search-autosuggest-len', {\n count: suggestions.length,\n });\n\n const ariaCurrentSuggestion = () => {\n if (this.suggestionAsAriaContent() || this.props.value) {\n return i18next.t('search-current-suggestion', {\n selection:\n this.suggestionAsAriaContent().toLowerCase() || this.props.value,\n });\n }\n return '';\n };\n\n return (\n <React.Fragment>\n <span className={styles['sr-only']} role=\"alert\">\n {!this.state.typing &&\n this.state.editing &&\n `${ariaSuggestionLen} ${ariaCurrentSuggestion()}`}\n </span>\n {this.props.isMobile && (\n <MobileSearch\n searchOpen={renderMobileSearch}\n appElement={this.props.appElement}\n clearOldSearches={this.clearOldSearches}\n id={this.props.id}\n clearInput={this.clearInput}\n value={this.state.value}\n suggestions={[\n ...suggestions,\n {\n type: 'clear-search-history',\n labelId: i18next.t('clear-search-history'),\n },\n ]}\n inputProps={{\n ...inputProps,\n placeholder: this.isOriginDestinationOrViapoint()\n ? i18next.t('address-place-or-business')\n : inputProps.placeholder,\n }}\n fetchFunction={this.fetchFunction}\n onSuggestionsClearRequested={this.onSuggestionsClearRequested}\n getSuggestionValue={getSuggestionValue}\n renderSuggestion={this.renderItem}\n closeHandle={this.closeMobileSearch}\n ariaLabel={ariaRequiredText\n .concat(' ')\n .concat(SearchBarId)\n .concat(' ')\n .concat(ariaCurrentSuggestion())}\n label={\n this.props.mobileLabel\n ? this.props.mobileLabel\n : i18next.t(this.props.id)\n }\n onSuggestionSelected={this.onSelected}\n dialogHeaderText={i18next.t('delete-old-searches-header')}\n dialogPrimaryButtonText={i18next.t('delete')}\n dialogSecondaryButtonText={i18next.t('cancel')}\n clearInputButtonText={i18next.t('clear-button-label')}\n focusInput={cleanExecuted}\n color={this.props.color}\n hoverColor={this.props.hoverColor}\n accessiblePrimaryColor={this.props.accessiblePrimaryColor}\n fontWeights={this.props.fontWeights}\n showScroll={this.props.showScroll}\n />\n )}\n {!renderMobileSearch && (\n <div\n className={cx([\n styles['autosuggest-input-container'],\n styles[this.props.id],\n ])}\n style={{\n '--color': `${this.props.color}`,\n '--hover-color': `${this.props.hoverColor}`,\n }}\n >\n {this.props.icon && (\n <div\n className={cx([\n styles[`autosuggest-input-icon`],\n styles[this.props.id],\n this.props.inputClassName &&\n `${this.props.inputClassName}-input-icon`,\n ])}\n aria-label={ariaRequiredText\n .concat(' ')\n .concat(SearchBarId)\n .concat(' ')\n .concat(i18next.t('search-autosuggest-label'))}\n >\n <Icon img={`${this.props.icon}`} />\n </div>\n )}\n <Autosuggest\n alwaysRenderSuggestions={this.state.editing}\n id={this.props.id}\n suggestions={suggestions}\n onSuggestionsFetchRequested={this.fetchFunction}\n onSuggestionsClearRequested={this.onSuggestionsClearRequested}\n getSuggestionValue={getSuggestionValue}\n renderSuggestion={this.renderItem}\n inputProps={{\n ...inputProps,\n onFocus: this.onFocus,\n }}\n focusInputOnSuggestionClick\n shouldRenderSuggestions={() => this.state.editing}\n highlightFirstSuggestion={!this.state.ownPlaces}\n theme={styles}\n renderInputComponent={p => (\n <>\n <label className={styles['sr-only']} htmlFor={this.props.id}>\n {ariaCurrentSuggestion()\n .concat(' ')\n .concat(ariaRequiredText)\n .concat(' ')\n .concat(SearchBarId)\n .concat(' ')\n .concat(ariaLabelText)}\n </label>\n <input\n aria-label={ariaCurrentSuggestion()\n .concat(' ')\n .concat(ariaRequiredText)\n .concat(' ')\n .concat(SearchBarId)\n .concat(' ')\n .concat(ariaLabelText)}\n id={this.props.id}\n onClick={this.inputClicked}\n onKeyDown={this.keyDown}\n {...p}\n />\n {this.state.value && this.clearButton()}\n </>\n )}\n onSuggestionSelected={this.onSelected}\n ref={this.storeInputReference}\n />\n </div>\n )}\n </React.Fragment>\n );\n }\n}\n\nconst DTAutosuggestWithScrollLock = withScrollLock(DTAutosuggest);\n\nexport default DTAutosuggestWithScrollLock;\n","import { getNameLabel } from '@digitransit-search-util/digitransit-search-util-uniq-by-label';\n/**\n * Returns label for properties\n *\n * @name getLabel\n * @param {*} properties object\n * @returns {Boolean} true/false\n */\nexport default function getLabel(properties) {\n const parts = getNameLabel(properties, true);\n switch (properties.layer) {\n case 'selectFromMap':\n case 'currentPosition':\n case 'ownLocations':\n case 'back':\n return parts[1] || parts[0];\n case 'favouriteVehicleRentalStation':\n case 'favouritePlace':\n return parts[0];\n default:\n return parts.length > 1 && parts[1] !== ''\n ? parts.join(', ')\n : parts[1] || parts[0];\n }\n}\n","import React from 'react';\nimport hooks from '@hsl-fi/hooks';\n\nconst withScrollLock = Component => {\n return props => {\n const { lock, unlock } = hooks.useScrollLock();\n\n return <Component lock={lock} unlock={unlock} {...props} />;\n };\n};\n\nexport default withScrollLock;\n"],"names":["_typeof","o","Symbol","iterator","constructor","prototype","toPropertyKey","t","i","r","e","toPrimitive","call","TypeError","String","Number","_defineProperty","Object","defineProperty","value","enumerable","configurable","writable","truEq","val1","val2","gtfsStopLayers","vehicleRentalLayers","labelIdToGid","id","parts","split","length","isDuplicate","item1","item2","props1","properties","props2","type","o1","origin","d1","destination","o2","d2","name","localadmin","includes","layer","gid","labelId","gtfsId","p1","geometry","coordinates","undefined","p2","Math","abs","label","address","normalize","str","isString","toLowerCase","LayerType","isStop","getLayerRank","source","indexOf","sortSearchResults","lineRegexp","results","term","Array","isArray","isLineIdentifier","test","normalizedTerm","isLineSearch","orderedResults","orderBy","result","shortName","confidence","match","resultProperties","map","filter","normalizedValue","reduce","previous","current","uniqWith","getStopName","stopCode","lastIndexOf","substring","filterMatchingToInput","list","Input","fields","input","trim","multiWord","item","forEach","pName","get","splice","join","concat","replace","serialize","obj","prefix","keys","p","k","v","encodeURIComponent","axios","require","default","getJson","url","params","encodeURI","search","timeout","method","headers","Accept","then","res","data","DEFAULT_PELIAS_URL","getGeocodingResults","searchString","searchParams","lang","focusPoint","sources","peliasUrl","minimalRegexp","geocodingLayers","text","Promise","resolve","PELIAS_URL","opts","_objectSpread","layers","toString","features","getStopsFromGeocoding","stops","URL_PELIAS_PLACE","gids","stopStationMap","stop","code","stopOrStation","ids","slice","addendum","lastUpdated","favouriteId","filterOldSearches","oldSearches","dropLayers","matchingOldSearches","take","newItem","timetableClicked","arrowClicked","routeLayers","locationLayers","parkingLayers","stopLayers","debouncedSearch","debounce","targets","transportMode","searchContext","filterResults","geocodingSize","callback","pathOpts","refPoint","getPositions","getFavouriteLocations","getOldSearches","getFavouriteStops","parkingAreaSources","getLanguage","getStopAndStationsQuery","getFavouriteVehicleRentalStationsQuery","getFavouriteVehicleRentalStations","getFavouriteRoutesQuery","getFavouriteRoutes","getRoutesQuery","context","isPeliasLocationAware","locationAware","URL_PELIAS","feedIDs","geocodingSearchParams","geocodingSources","getFutureRoutes","cityBikeNetworks","allTargets","allSources","position","searchComponents","searches","language","lat","lon","toFixed","mode","status","push","getCurrentPositionIfEmpty","selectPositionFomMap","items","favouriteLocations","favouriteVehicleRentalStations","favouriteStops","hasFavourites","selectFromOwnLocations","favourites","filterFavouriteLocations","locationHistory","size","feedIds","history","useStops","useStations","stopsAndStations","every","stopsStations","s","filterFavouriteStops","dedupestops","feeds","stopHistory","favouriteRoutes","routeHistory","favouriteVehicleRentalStation","all","flatten","catch","err","error","leading","getLocaladmin","suggestion","getStopCode","getNameLabel","memoize","plain","RegExp","escapeRegExp","longName","agency","formatFavouritePlaceLabel","cloneDeep","module","exports","hookCallback","some","hooks","apply","arguments","setHookCallback","isObject","hasOwnProp","a","b","hasOwnProperty","isObjectEmpty","getOwnPropertyNames","isUndefined","isNumber","isDate","Date","arr","fn","arrLen","extend","valueOf","createUTC","format","locale","strict","createLocalOrUTC","utc","defaultParsingFlags","empty","unusedTokens","unusedInput","overflow","charsLeftOver","nullInput","invalidEra","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","era","meridiem","rfc2822","weekdayMismatch","getParsingFlags","m","_pf","isValid","flags","parsedParts","isNowValid","_d","isNaN","getTime","invalidWeekday","_strict","bigHour","isFrozen","_isValid","createInvalid","NaN","fun","this","len","momentProperties","updateInProgress","copyConfig","to","from","prop","val","momentPropertiesLen","_isAMomentObject","_i","_f","_l","_tzm","_isUTC","_offset","_locale","Moment","config","updateOffset","isMoment","warn","msg","suppressDeprecationWarnings","console","deprecate","firstTime","deprecationHandler","arg","key","args","argLen","Error","stack","deprecations","deprecateSimple","isFunction","Function","set","_config","_dayOfMonthOrdinalParseLenient","_dayOfMonthOrdinalParse","_ordinalParse","mergeConfigs","parentConfig","childConfig","Locale","defaultCalendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","calendar","mom","now","output","_calendar","zeroFill","number","targetLength","forceSign","absNumber","zerosToFill","pow","max","substr","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","token","padded","ordinal","func","localeData","removeFormattingTokens","makeFormatFunction","array","formatMoment","expandFormat","invalidDate","replaceLongDateFormatTokens","longDateFormat","lastIndex","defaultLongDateFormat","LTS","LT","L","LL","LLL","LLLL","_longDateFormat","formatUpper","toUpperCase","tok","defaultInvalidDate","_invalidDate","defaultOrdinal","defaultDayOfMonthOrdinalParse","_ordinal","defaultRelativeTime","future","past","ss","mm","h","hh","d","dd","w","ww","M","MM","y","yy","relativeTime","withoutSuffix","string","isFuture","_relativeTime","pastFuture","diff","aliases","D","dates","date","days","day","weekdays","weekday","E","isoweekdays","isoweekday","DDD","dayofyears","dayofyear","hours","hour","ms","milliseconds","millisecond","minutes","minute","months","month","Q","quarters","quarter","seconds","second","gg","weekyears","weekyear","GG","isoweekyears","isoweekyear","weeks","week","W","isoweeks","isoweek","years","year","normalizeUnits","units","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","priorities","isoWeekday","dayOfYear","weekYear","isoWeekYear","isoWeek","getPrioritizedUnits","unitsObj","u","unit","priority","sort","regexes","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchTimestamp","matchWord","match1to2NoLeadingZero","match1to2HasZero","addRegexToken","regex","strictRegex","isStrict","getParseRegexForToken","unescapeFormat","regexEscape","matched","p3","p4","absFloor","ceil","floor","toInt","argumentForCoercion","coercedNumber","isFinite","tokens","addParseToken","tokenLen","addWeekParseToken","_w","addTimeToArrayFromToken","_a","isLeapYear","YEAR","MONTH","DATE","HOUR","MINUTE","SECOND","MILLISECOND","WEEK","WEEKDAY","daysInYear","parseTwoDigitYear","parseInt","getSetYear","makeGetSet","getIsLeapYear","keepTime","set$1","isUTC","getUTCMilliseconds","getMilliseconds","getUTCSeconds","getSeconds","getUTCMinutes","getMinutes","getUTCHours","getHours","getUTCDate","getDate","getUTCDay","getDay","getUTCMonth","getMonth","getUTCFullYear","getFullYear","setUTCMilliseconds","setMilliseconds","setUTCSeconds","setSeconds","setUTCMinutes","setMinutes","setUTCHours","setHours","setUTCDate","setDate","setUTCFullYear","setFullYear","stringGet","stringSet","prioritized","prioritizedLen","mod","n","x","daysInMonth","modMonth","monthsShort","monthsShortRegex","monthsRegex","monthsParse","defaultLocaleMonths","defaultLocaleMonthsShort","MONTHS_IN_FORMAT","defaultMonthsShortRegex","defaultMonthsRegex","localeMonths","_months","isFormat","localeMonthsShort","_monthsShort","handleStrictParse","monthName","ii","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","localeMonthsParse","_monthsParseExact","setMonth","min","setUTCMonth","getSetMonth","getDaysInMonth","computeMonthsParse","_monthsShortStrictRegex","_monthsShortRegex","_monthsStrictRegex","_monthsRegex","cmpLenRev","shortP","longP","shortPieces","longPieces","mixedPieces","createDate","createUTCDate","UTC","firstWeekOffset","dow","doy","fwd","dayOfYearFromWeeks","resYear","resDayOfYear","weekOfYear","resWeek","weekOffset","weeksInYear","weekOffsetNext","localeWeek","_week","defaultLocaleWeek","localeFirstDayOfWeek","localeFirstDayOfYear","getSetWeek","add","getSetISOWeek","parseWeekday","weekdaysParse","parseIsoWeekday","shiftWeekdays","ws","weekdaysMin","weekdaysShort","weekdaysMinRegex","weekdaysShortRegex","weekdaysRegex","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","localeWeekdays","_weekdays","localeWeekdaysShort","_weekdaysShort","localeWeekdaysMin","_weekdaysMin","handleStrictParse$1","weekdayName","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","localeWeekdaysParse","_weekdaysParseExact","_fullWeekdaysParse","getSetDayOfWeek","getSetLocaleDayOfWeek","getSetISODayOfWeek","computeWeekdaysParse","_weekdaysStrictRegex","_weekdaysRegex","_weekdaysShortStrictRegex","_weekdaysShortRegex","_weekdaysMinStrictRegex","_weekdaysMinRegex","minp","shortp","longp","minPieces","hFormat","kFormat","lowercase","matchMeridiem","_meridiemParse","localeIsPM","charAt","kInput","_isPm","isPM","_meridiem","pos","pos1","pos2","defaultLocaleMeridiemParse","getSetHour","localeMeridiem","isLower","globalLocale","baseConfig","dayOfMonthOrdinalParse","meridiemParse","locales","localeFamilies","commonPrefix","arr1","arr2","minl","normalizeLocale","chooseLocale","names","j","next","loadLocale","isLocaleNameSane","oldLocale","_abbr","getSetGlobalLocale","values","getLocale","defineLocale","abbr","parentLocale","updateLocale","tmpLocale","listLocales","checkOverflow","_overflowDayOfYear","_overflowWeeks","_overflowWeekday","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","obsOffsets","UT","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","configFromISO","l","allowTime","dateFormat","timeFormat","tzFormat","exec","isoDatesLen","isoTimesLen","configFromStringAndFormat","extractFromRFC2822Strings","yearStr","monthStr","dayStr","hourStr","minuteStr","secondStr","untruncateYear","preprocessRFC2822","checkWeekday","weekdayStr","parsedInput","calculateOffset","obsOffset","militaryOffset","numOffset","hm","configFromRFC2822","parsedArray","configFromString","createFromInputFallback","defaults","c","currentDateArray","nowValue","_useUTC","configFromArray","currentDate","expectedWeekday","yearToUse","dayOfYearFromWeekInfo","_dayOfYear","_nextDay","temp","weekdayOverflow","curWeek","createLocal","ISO_8601","RFC_2822","skipped","stringLength","totalParsedInputLength","meridiemFixWrap","erasConvertYear","isPm","meridiemHour","configFromStringAndArray","tempConfig","bestMoment","scoreToBeat","currentScore","validFormatFound","bestFormatIsValid","configfLen","score","configFromObject","dayOrDate","createFromConfig","prepareConfig","preparse","configFromInput","prototypeMin","other","prototypeMax","pickBy","moments","ordering","isDurationValid","unitHasDecimal","orderLen","parseFloat","isValid$1","createInvalid$1","createDuration","Duration","duration","_milliseconds","_days","_data","_bubble","isDuration","absRound","round","compareArrays","array1","array2","dontConvert","lengthDiff","diffs","offset","separator","utcOffset","sign","offsetFromString","chunkOffset","matcher","matches","cloneWithOffset","model","clone","setTime","local","getDateOffset","getTimezoneOffset","getSetOffset","keepLocalTime","keepMinutes","localAdjust","_changeInProgress","addSubtract","getSetZone","setOffsetToUTC","setOffsetToLocal","subtract","setOffsetToParsedOffset","tZone","hasAlignedHourOffset","isDaylightSavingTime","isDaylightSavingTimeShifted","_isDSTShifted","toArray","isLocal","isUtcOffset","isUtc","aspNetRegex","isoRegex","ret","diffRes","parseIso","momentsDifference","inp","positiveMomentsDifference","base","isAfter","isBefore","createAdder","direction","period","tmp","isAdding","invalid","isMomentInput","isNumberOrStringArray","isMomentInputObject","property","objectTest","propertyTest","propertyLen","arrayTest","dataTypeTest","isCalendarSpec","getCalendarFormat","myMoment","calendar$1","time","formats","sod","startOf","calendarFormat","localInput","endOf","isBetween","inclusivity","localFrom","localTo","isSame","inputMs","isSameOrAfter","isSameOrBefore","asFloat","that","zoneDelta","monthDiff","wholeMonthDiff","anchor","toISOString","keepOffset","toDate","inspect","datetime","suffix","zone","inputString","defaultFormatUtc","defaultFormat","postformat","humanize","fromNow","toNow","newLocaleData","MS_PER_SECOND","MS_PER_MINUTE","MS_PER_HOUR","MS_PER_400_YEARS","mod$1","dividend","divisor","localStartOfDate","utcStartOfDate","startOfDate","unix","toObject","toJSON","isValid$2","parsingFlags","invalidAt","creationData","localeEras","eras","_eras","since","until","localeErasParse","eraName","narrow","localeErasConvertYear","dir","getEraName","getEraNarrow","getEraAbbr","getEraYear","erasNameRegex","computeErasParse","_erasNameRegex","_erasRegex","erasAbbrRegex","_erasAbbrRegex","erasNarrowRegex","_erasNarrowRegex","matchEraAbbr","matchEraName","matchEraNarrow","matchEraYearOrdinal","_eraYearOrdinalRegex","erasName","erasAbbr","erasNarrow","abbrPieces","namePieces","narrowPieces","addWeekYearFormatToken","getter","getSetWeekYear","getSetWeekYearHelper","getSetISOWeekYear","getISOWeeksInYear","getISOWeeksInISOWeekYear","getWeeksInYear","weekInfo","getWeeksInWeekYear","weeksTarget","setWeekAll","dayOfYearData","getSetQuarter","erasParse","eraYearOrdinalParse","getSetDayOfMonth","getSetDayOfYear","getSetMinute","getSetMillisecond","getSetSecond","parseMs","getZoneAbbr","getZoneName","proto","createUnix","createInZone","parseZone","preParsePostFormat","for","eraNarrow","eraAbbr","eraYear","isoWeeks","weeksInWeekYear","isoWeeksInYear","isoWeeksInISOWeekYear","isDST","zoneAbbr","zoneName","isDSTShifted","proto$1","get$1","index","field","setter","listMonthsImpl","out","listWeekdaysImpl","localeSorted","shift","listMonths","listMonthsShort","listWeekdays","listWeekdaysShort","listWeekdaysMin","firstDayOfYear","firstDayOfWeek","langData","mathAbs","addSubtract$1","add$1","subtract$1","absCeil","bubble","monthsFromDays","monthsToDays","daysToMonths","as","makeAs","alias","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asQuarters","asYears","valueOf$1","clone$1","get$2","makeGetter","thresholds","substituteTimeAgo","relativeTime$1","posNegDuration","getSetRelativeTimeRounding","roundingFunction","getSetRelativeTimeThreshold","threshold","limit","argWithSuffix","argThresholds","withSuffix","th","assign","abs$1","toISOString$1","totalSign","ymSign","daysSign","hmsSign","total","proto$2","toIsoString","version","relativeTimeRounding","relativeTimeThreshold","HTML5_FMT","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","TIME","TIME_SECONDS","TIME_MS","factory","root","moment","cachedGuess","zones","links","countries","guesses","logError","momentVersion","major","minor","charCodeToInt","charCode","unpackBase60","whole","fractional","multiplier","charCodeAt","arrayToInt","mapIndices","indices","unpack","offsets","untils","Infinity","intToUntil","abbrs","population","Zone","packedString","_set","Country","country_name","zone_names","OffsetAt","at","timeString","toTimeString","ZoneScore","offsetScore","abbrScore","findChange","low","high","mid","sortZoneScores","localeCompare","addToGuesses","guessesForUserOffsets","guessesOffset","offsetsLength","filteredGuesses","checkedOffsets","rebuildGuess","intlName","Intl","DateTimeFormat","resolvedOptions","timeZone","normalizeName","zoneScore","change","nextOffset","startYear","last","lastOffset","userOffsets","zoneScores","getZone","scoreOffsetAt","addZone","packed","normalized","caller","link","addLink","normal0","normal1","needsOffset","isUnixTimestamp","message","tz","parse","unpacked","_index","timestamp","num","lo","hi","closest","zone_name","country_code","offsetNext","offsetPrev","target","moveAmbiguousForward","moveInvalidForward","offsetAt","dataVersion","_zones","_links","_names","_countries","load","country_zones","addCountries","zoneExists","didShowError","guess","ignoreCache","zonesForCountry","country","with_offset","old","abbrWrap","_z","resetZoneWrap","defaultZone","z","setDefault","require$$0","require$$1","numbersPast","numbersFuture","translate","verbalNumber","ll","lll","llll","processRelativeTime","monthsParseExact","weekdaysParseExact","translations","de","airplane","arrival","back","bikerentalstation","bus","cancel","currentposition","delete","departure","favourite","ferry","ownlocations","loading","rail","street","subway","station","tram","venue","where","place","en","bikepark","carpark","platform","required","track","fi","vehiclerentalstation","pl","sv","styleInject","css","ref","insertAt","document","head","getElementsByTagName","style","createElement","firstChild","insertBefore","appendChild","styleSheet","cssText","createTextNode","AutosuggestPatch","Autosuggest","props","super","self","onSuggestionTouchMove","justSelectedSuggestion","pressedSuggestion","MobileSearch","appElement","closeHandle","clearInput","suggestions","inputProps","fetchFunction","renderSuggestion","getSuggestionValue","ariaLabel","onSuggestionSelected","clearOldSearches","dialogHeaderText","dialogPrimaryButtonText","dialogSecondaryButtonText","clearInputButtonText","focusInput","color","hoverColor","accessiblePrimaryColor","searchOpen","fontWeights","showScroll","_inputRef$current","styles","mobileStyles","mobileNoScrollStyles","inputId","isDialogOpen","setDialogOpen","useState","inputRef","React","useRef","useEffect","ReactModal","setAppElement","onClose","useCallback","onSelect","isKeyboardSelectionEvent","event","which","keyCode","preventDefault","getValue","renderItem","className","focus","isOpen","overlayClassName","onAfterClose","shouldCloseOnEsc","medium","htmlFor","onClick","onKeyDown","tabIndex","Icon","img","alwaysRenderSuggestions","onSuggestionsFetchRequested","focusInputOnSuggestionClick","shouldRenderSuggestions","hasValue","autoFocus","renderInputComponent","Fragment","theme","DialogModal","isModalOpen","handleClose","headerText","primaryButtonText","secondaryButtonText","primaryButtonOnClick","secondaryButtonOnClick","process","env","NODE_ENV","propTypes","PropTypes","isRequired","arrayOf","object","shape","onChange","onBlur","placeholder","bool","defaultProps","g","window","ignore","header","topOnEmptyHash","speed","speedAsDuration","durationMax","durationMin","clip","easing","customEasing","updateURL","popstate","emitEvents","InvalidCharacterError","body","scrollHeight","documentElement","offsetHeight","clientHeight","getComputedStyle","height","offsetTop","activeElement","setAttribute","outline","scrollTo","CustomEvent","bubbles","detail","toggle","dispatchEvent","f","cancelScroll","cancelAnimationFrame","animateScroll","tagName","pageYOffset","querySelector","O","offsetParent","innerHeight","S","_","I","requestAnimationFrame","pushState","smoothScroll","JSON","stringify","title","matchMedia","defaultPrevented","button","metaKey","ctrlKey","shiftKey","hostname","location","pathname","href","decodeURIComponent","hash","replaceState","state","destroy","removeEventListener","Element","addEventListener","__createBinding","create","__exportStar","useArrowNavigation","listItems","onArrowUpOrDown","selectedIndex","useDebounce","setTimeout","clearTimeout","useElementSize","width","clientWidth","useIntersectionObserver","isIntersecting","IntersectionObserver","observe","unobserve","containerRef","isVisible","useIsBreakpoint","xs","mobileSmall","mobile","tablet","tabletLarge","desktopSmall","desktop","desktopLarge","innerWidth","useOnResize","useIsLoadingAfterError","useIsMobile","useIsomorphicLayoutEffect","useLayoutEffect","useOnLoseFocusWithin","watch","passive","useOnWindowFocus","visibilityState","useOutsideReacter","contains","useRunAfterUpdate","useScrollLock","lock","scrollY","top","unlock","__importDefault","__esModule","useSmoothScroll","globalThis","i18next__default","init","fallbackLng","defaultNS","interpolation","escapeValue","node","getPlatform","GTFS","modes","i18next","getSuggestionContent","suggestionType","_item$properties$adde","tail1","locality","tail2","name1","name2","translatedText","translateFutureRouteSuggestionTime","arriveBy","getLabel","DTAutosuggest","Component","newValue","newState","fInput","renderMobileSearch","isMobile","editing","valid","typingTimer","timer","setState","typing","ownPlaces","pendingSelection","suggestionIndex","selectionDone","suggestionValue","blur","handleViaPoints","focusChange","isEmbedded","closeMobileSearch","prevState","checkPendingSelection","cleanExecuted","useAll","isEmpty","isLocationSearch","newTargets","executeSearch","searchResult","translated","onClear","inputValue","clearLocationText","stateKeyDown","autosuggest","storeRef","content","SuggestionItem","ariaFavouriteString","fillInput","getAutoSuggestIcons","modeIconColors","modeSet","onSuggestionsClearRequested","inputClicked","firstSuggestion","Set","clearFutureRoutes","addResourceBundle","shouldComponentUpdate","nextProps","nextState","isEqual","componentDidUpdate","changeLanguage","UNSAFE_componentWillReceiveProps","render","translatedPlaceholder","thin","inputClassName","keyDown","ariaBarId","SearchBarId","ariaRequiredText","ariaLabelInstructions","movingToDestinationFieldText","ariaLabelText","ariaSuggestionLen","count","ariaCurrentSuggestion","suggestionAsAriaContent","selection","role","isOriginDestinationOrViapoint","mobileLabel","onSelected","cx","icon","onFocus","highlightFirstSuggestion","clearButton","storeInputReference","routesPrefix","stopsPrefix","objectOf","DTAutosuggestWithScrollLock"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../node_modules/@babel/runtime/helpers/esm/typeof.js","../../../../node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","../../../../node_modules/@babel/runtime/helpers/esm/toPrimitive.js","../../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js","../../../../digitransit-search-util/packages/digitransit-search-util-tru-eq/index.js","../../../../digitransit-search-util/packages/digitransit-search-util-is-duplicate/index.js","../../../../digitransit-search-util/packages/digitransit-search-util-helpers/index.js","../../../../digitransit-search-util/packages/digitransit-search-util-filter-matching-to-input/index.js","../../../../digitransit-search-util/packages/digitransit-search-util-serialize/index.js","../../../../digitransit-search-util/packages/digitransit-search-util-get-json/index.js","../../../../digitransit-search-util/packages/digitransit-search-util-get-geocoding-results/index.js","../../../../digitransit-search-util/packages/digitransit-search-util-execute-search-immidiate/index.js","../../../../digitransit-search-util/packages/digitransit-search-util-uniq-by-label/index.js","../../../../node_modules/moment/moment.js","../../../../node_modules/moment-timezone/moment-timezone.js","../../../../node_modules/moment-timezone/index.js","../../../../node_modules/moment/locale/fi.js","../../../../node_modules/moment/locale/sv.js","../../../../node_modules/moment/locale/de.js","../src/helpers/translations.js","../../../../node_modules/style-inject/dist/style-inject.es.js","../src/helpers/MobileSearch.js","../../../../node_modules/@hsl-fi/hooks/lib/index.js","../src/index.js","../../../../digitransit-search-util/packages/digitransit-search-util-get-label/index.js","../src/helpers/withScrollLock.js"],"sourcesContent":["function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}\nexport { _typeof as default };","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nfunction toPropertyKey(t) {\n var i = toPrimitive(t, \"string\");\n return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nexport { toPropertyKey as default };","import _typeof from \"./typeof.js\";\nfunction toPrimitive(t, r) {\n if (\"object\" != _typeof(t) || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != _typeof(i)) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nexport { toPrimitive as default };","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperty(e, r, t) {\n return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n value: t,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : e[r] = t, e;\n}\nexport { _defineProperty as default };","/**\n * accept equality of non nullish values\n *\n * @name truEq\n * @param {Boolean|Number|BigInt|String|Symbol|Object} val1 First value to be compared\n * @param {Boolean|Number|BigInt|String|Symbol|Object} param2 Second value to be compared\n * @returns {Boolean} true/false\n * @example\n * digitransit-util.truEq('2', '2');\n * //=true\n */\nexport default function truEq(val1, val2) {\n return val1 && val2 && val1 === val2;\n}\n","import truEq from '@digitransit-search-util/digitransit-search-util-tru-eq';\n/**\n * Checks that is items duplicate\n *\n * @name isDuplicate\n * @param {Object} item1 Object containing following attributes:\n * {\n * properties {\n * gtfsId: String\n * gid: String from geocoder\n * name: String\n * label: String\n * address: String\n * geometry {\n * coordinates [Number lat, Number lon]\n * }\n * }\n * }\n * @param {Object} item2 Object with same attributes as item1\n * @returns {Boolean} true/false\n * @example\n * digitransit-util.isDuplicate(param1, param2);\n * //=true\n */\n\nconst gtfsStopLayers = ['stop', 'station', 'favouriteStop', 'favouriteStation'];\nconst vehicleRentalLayers = ['favouriteVehicleRentalStation', 'bikestation'];\n\nfunction labelIdToGid(id) {\n if (!id) {\n return '';\n }\n const parts = id.split(':');\n if (parts.length === 0) {\n return '';\n }\n return `citybikes${parts[0]}:bikestation:${parts[1]}`;\n}\n\nexport default function isDuplicate(item1, item2) {\n const props1 = item1.properties;\n const props2 = item2.properties;\n\n if (item1.type === 'FutureRoute' && item2.type === 'FutureRoute') {\n const o1 = props1.origin;\n const d1 = props1.destination;\n const o2 = props2.origin;\n const d2 = props2.destination;\n\n const name1 = `${o1.name}//${o1.localadmin}//${d1.name}//${d1.localadmin}`;\n const name2 = `${o2.name}//${o2.localadmin}//${d2.name}//${d2.localadmin}`;\n\n return name1 === name2;\n }\n if (item1.type === 'FutureRoute' || item2.type === 'FutureRoute') {\n return false;\n }\n if (\n vehicleRentalLayers.includes(props1.layer) &&\n vehicleRentalLayers.includes(props2.layer)\n ) {\n const id1 = props1.gid || labelIdToGid(props1.labelId);\n const id2 = props2.gid || labelIdToGid(props2.labelId);\n return id1 === id2;\n }\n if (props1.gtfsId && props2.gtfsId) {\n return props1.gtfsId === props2.gtfsId;\n }\n if (\n gtfsStopLayers.includes(props1.layer) &&\n gtfsStopLayers.includes(props2.layer) &&\n props1.gid &&\n props2.gid\n ) {\n return props1.gid === props2.gid;\n }\n\n const p1 = item1 && item1.geometry ? item1.geometry.coordinates : undefined;\n const p2 = item2 && item2.geometry ? item2.geometry.coordinates : undefined;\n\n if (p1 && p2) {\n // both have geometry\n if (Math.abs(p1[0] - p2[0]) < 1e-6 && Math.abs(p1[1] - p2[1]) < 1e-6) {\n // location match is not enough. Require a common property\n if (\n truEq(props1.name, props2.name) ||\n truEq(props1.label, props2.label) ||\n truEq(props1.address, props2.address) ||\n truEq(props1.address, props2.label) ||\n truEq(props1.label, props2.address)\n ) {\n return true;\n }\n }\n }\n return false;\n}\n","import isString from 'lodash/isString';\nimport orderBy from 'lodash/orderBy';\nimport uniqWith from 'lodash/uniqWith';\nimport isDuplicate from '@digitransit-search-util/digitransit-search-util-is-duplicate';\n\nconst normalize = str => {\n if (!isString(str)) {\n return '';\n }\n return str.toLowerCase();\n};\n\n/**\n * LayerType depicts the type of the point-of-interest.\n */\nconst LayerType = {\n Address: 'address',\n Back: 'back',\n CurrentPosition: 'currentPosition',\n FavouriteStop: 'favouriteStop',\n FavouriteStation: 'favouriteStation',\n FavouritePlace: 'favouritePlace',\n FavouriteRoute: 'favouriteRoute',\n FavouriteVehicleRentalStation: 'favouriteVehicleRentalStation',\n FutureRoute: 'futureRoute',\n Station: 'station',\n SelectFromMap: 'selectFromMap',\n SelectFromOwnLocations: 'ownLocations',\n Stop: 'stop',\n Street: 'street',\n Venue: 'venue',\n VehicleRentalStation: 'bikestation',\n CarPark: 'carpark',\n BikePark: 'bikepark',\n};\nexport const isStop = ({ layer, type }) =>\n layer === 'stop' ||\n layer === 'favouriteStop' ||\n type === 'stop' ||\n type === 'favouriteStop';\n\nconst DEFAULT_ROUTES_PREFIX = 'linjat';\nconst DEFAULT_STOPS_PREFIX = 'pysakit';\n\nexport const mapRoute = (item, pathOpts) => {\n if (item === null || item === undefined) {\n return null;\n }\n\n const opts = pathOpts || {};\n\n const routesPrefix = opts.routesPrefix || DEFAULT_ROUTES_PREFIX;\n const stopsPrefix = opts.stopsPrefix || DEFAULT_STOPS_PREFIX;\n\n const link = `/${routesPrefix}/${item.gtfsId}/${stopsPrefix}`;\n return {\n type: 'Route',\n properties: {\n ...item,\n layer: `route-${item.mode}`,\n link,\n },\n geometry: {\n coordinates: null,\n },\n };\n};\n\n/**\n * Tries to match the given search term agains the collection of properties\n * for a geocoding result. The best match will be returned (min: 0, max: 1.5).\n *\n * @param {string} normalizedTerm the normalized search term.\n * @param {*} resultProperties the geocoding result's property collection.\n */\nexport const match = (normalizedTerm, resultProperties) => {\n if (!isString(normalizedTerm) || normalizedTerm.length === 0) {\n return 0;\n }\n\n const matchProps = ['name', 'label', 'address', 'shortName'];\n return matchProps\n .map(name => resultProperties[name])\n .filter(value => isString(value) && value.length > 0)\n .map(value => {\n const normalizedValue = normalize(value);\n if (normalizedValue.indexOf(normalizedTerm) === 0) {\n // full match at start. Return max result when match is full, not only partial\n return 0.5 + normalizedTerm.length / normalizedValue.length;\n }\n // because of filtermatchingtoinput, we know that match occurred somewhere\n // don't run filtermatching again but estimate roughly:\n // the longer the matching string, the better confidence, max being 0.5\n return (0.5 * normalizedTerm.length) / (normalizedTerm.length + 1);\n })\n .reduce(\n (previous, current) => (current > previous ? current : previous),\n 0,\n );\n};\n\n/**\n * Ranks the result based on its layer property.\n *\n * @param {string} layer the layer property.\n * @param {string} source the source property.\n */\nexport const getLayerRank = (layer, source) => {\n switch (layer) {\n case LayerType.CurrentPosition:\n return 1;\n case LayerType.Back:\n return 0.9;\n case LayerType.SelectFromMap:\n return 0.8;\n case LayerType.SelectFromOwnLocations:\n return 0.79;\n case LayerType.FavouriteStation:\n case LayerType.FavouritePlace:\n case LayerType.FavouriteStop:\n case LayerType.FavouriteRoute:\n case LayerType.FavouriteVehicleRentalStation:\n return 0.45;\n case LayerType.FutureRoute:\n return 0.44;\n case LayerType.Station: {\n if (isString(source) && source.indexOf('gtfs') === 0) {\n return 0.43;\n }\n return 0.42;\n }\n case LayerType.CarPark:\n return 0.38;\n case LayerType.BikePark:\n return 0.38;\n case LayerType.VehicleRentalStation:\n return 0.38;\n case LayerType.Stop:\n return 0.36;\n default:\n // venue, address, street, route-xxx\n return 0.41;\n }\n};\n\n/**\n * Helper function to sort the results. Orders as follows:\n * - current position first for an empty search\n * - matching routes first\n * - otherwise by confidence, except that:\n * - boost well matching stations (especially from GTFS)\n * - rank stops lower as they tend to occupy most of the search results\n * - items with no confidence (old searches and favorites):\n * - rank favourites better than ordinary old searches\n * - rank full match better than partial match\n * - rank match at middle word lower than match at the beginning\n * - rank bike rental stations lower\n * @param {*[]} results The search results that were received\n * @param {String} term The search term that was used\n */\nexport const sortSearchResults = (lineRegexp, results, term = '') => {\n if (!Array.isArray(results)) {\n return results;\n }\n const isLineIdentifier = value =>\n isString(value) && lineRegexp && lineRegexp.test(value);\n\n const normalizedTerm = normalize(term);\n const isLineSearch = isLineIdentifier(normalizedTerm);\n\n const orderedResults = orderBy(\n results,\n [\n // rank matching routes best\n result =>\n isLineSearch &&\n isLineIdentifier(normalize(result.properties.shortName)) &&\n normalize(result.properties.shortName).indexOf(normalizedTerm) === 0\n ? 1\n : 0,\n\n result => {\n const { confidence, layer, source } = result.properties;\n if (normalizedTerm.length === 0) {\n // Doing search with empty string.\n // No confidence to match, so use ranked old searches and favourites\n return getLayerRank(layer, source);\n }\n\n // must handle a mixup of geocoder searches and items above\n // Normal confidence range from geocoder is about 0.3 .. 1\n if (!confidence) {\n // not from geocoder, estimate confidence ourselves\n return (\n getLayerRank(layer, source) +\n match(normalizedTerm, result.properties)\n );\n }\n // geocoded items with confidence, just adjust a little\n switch (layer) {\n case LayerType.Station: {\n const boost = source.indexOf('gtfs') === 0 ? 0.02 : 0.01;\n return confidence + boost;\n }\n case LayerType.Stop:\n return confidence - 0.05;\n case LayerType.CarPark:\n return confidence - 0.05;\n case LayerType.BikePark:\n return confidence - 0.05;\n case LayerType.VehicleRentalStation:\n return confidence - 0.04;\n default:\n return confidence;\n }\n },\n ],\n ['desc', 'desc'],\n );\n\n return uniqWith(orderedResults, isDuplicate);\n};\n\n/**\n * Parses stop's name without stop code from a stop name from geocoding results\n *\n * @param {string} label stop's name from geocoding results.\n * @param {string} stopCode stop code.\n */\nexport const getStopName = (name, stopCode) => {\n if (\n stopCode !== undefined &&\n stopCode !== null &&\n name.lastIndexOf(stopCode) !== -1\n ) {\n return name.substring(0, name.lastIndexOf(stopCode) - 1);\n }\n return name;\n};\n","import get from 'lodash/get';\n\n/**\n * Function that filters list matching to input.\n *\n * @name filterMatchingToInput\n * @param {Array} list List containin objects e.g( {\n * type: 'Feature'\n * properties: {\n * label: 'testaddress4',\n * layer: 'address',\n * name: 'testaddress4',\n * },\n * geometry: { coordinates: [lon, lat] },\n * },)\n * @param {String} Input Input given for filtering the list\n * @param {Array} fields List of fields that list is filtered by e.g ([properties.label, properties.name])\n * @returns {Array} Filtered Array.\n * @example\n * digitransit-util.filterMatchingToInput([{type: feature, properties { ... name: testaddress4 } ... }], 'testaddress4', 'properties.name');\n * //= List containing object with given name.\n */\nexport default function filterMatchingToInput(list, Input, fields) {\n if (typeof Input === 'string' && Input.length > 0) {\n const input = Input.toLowerCase().trim();\n const multiWord = input.includes(' ') || input.includes(',');\n return list.filter(item => {\n let parts = [];\n fields.forEach(pName => {\n let value = get(item, pName);\n\n if (\n !multiWord &&\n (pName === 'properties.label' || pName === 'address') &&\n value\n ) {\n // special case: drop last parts i.e. city and neighbourhood\n value = value.split(',');\n if (value.length > 2) {\n value.splice(value.length - 2, 2);\n } else if (value.length > 1) {\n value.splice(value.length - 1, 1);\n }\n value = value.join(',');\n }\n if (value) {\n if (multiWord) {\n parts = parts.concat(value.toLowerCase());\n } else {\n parts = parts.concat(\n value.toLowerCase().replace(/,/g, ' ').split(' '),\n );\n }\n }\n });\n for (let i = 0; i < parts.length; i++) {\n if (parts[i].indexOf(input) === 0) {\n // accept match only at word start\n return true;\n }\n }\n return false;\n });\n }\n\n return list;\n}\n","/**\n * Serializes objects\n *\n * @name serialize\n * @param {Object} obj Object to be serialized\n * @param {Any} prefix\n * @returns {String} Serialized object\n * @example\n * digitransit-search-util.serialize(param1, param2);\n * //=true\n */\nexport default function serialize(obj, prefix) {\n if (!obj) {\n return '';\n }\n return Object.keys(obj)\n .map(p => {\n const k = prefix || p;\n const v = obj[p];\n\n return typeof v === 'object'\n ? serialize(v, k)\n : `${encodeURIComponent(k)}=${encodeURIComponent(v)}`;\n })\n .join('&');\n}\n","import serialize from '@digitransit-search-util/digitransit-search-util-serialize';\n/**\n * Return Promise for a url json get request\n *\n * @name getJson\n * @param {String} url\n * @param {Array} params\n * @returns {Object} response\n * @example\n * digitransit-search-util.getJson(param1, param2);\n * //=response\n */\nconst axios = require('axios').default;\n\nexport default function getJson(url, params) {\n return axios\n .get(\n encodeURI(url) +\n (params\n ? (url.search(/\\?/) === -1 ? '?' : '&') + serialize(params)\n : ''),\n {\n timeout: 10000,\n method: 'GET',\n\n headers: {\n Accept: 'application/json',\n },\n },\n )\n .then(res => {\n return res.data;\n });\n}\n","import getJson from '@digitransit-search-util/digitransit-search-util-get-json';\n\nconst DEFAULT_PELIAS_URL = 'https://api.digitransit.fi/geocoding/v1/search';\n/**\n * <DESCRIPTION>\n *\n * @name getGeocodingResults\n * @param {String} searchString\n * @param {String} searchParams (Optional) Parameters appended to url, basically box / polygon to restrict search area\n * @param {String} lang (Optional) search language\n * @param {Object} focusPoint (Optional) Own Position (PELIAS API)\n * @param {String} sources (Optional) search sources (e.g OSM, GTFS..)\n * @param {Object} minimalRegexp (Optional) Regexp for testing\n * @param {*} geocodingLayers (Optional) Array of strings that is used to determine which layers is searched, e.g. ['venue', 'address', 'stop']\n * @returns {String} Results in JSON form\n * @example\n * digitransit-search-util.getGeocodingResults(\"result\");\n * //= e.g. {text:\"result\"}\n */\nexport default function getGeocodingResults(\n searchString,\n searchParams,\n lang,\n focusPoint,\n sources,\n peliasUrl,\n minimalRegexp,\n geocodingLayers,\n) {\n const text = searchString ? searchString.trim() : null;\n if (\n text === undefined ||\n text === null ||\n text.length < 1 ||\n (minimalRegexp && !minimalRegexp.test(text))\n ) {\n return Promise.resolve([]);\n }\n const PELIAS_URL = peliasUrl || DEFAULT_PELIAS_URL;\n let opts = { text, ...searchParams, ...focusPoint, lang };\n if (sources) {\n opts = { ...opts, sources };\n }\n if (geocodingLayers) {\n const layers = geocodingLayers.toString();\n opts = { ...opts, layers };\n }\n return getJson(PELIAS_URL, opts).then(res => {\n return res.features;\n });\n}\n","import debounce from 'lodash/debounce';\nimport flatten from 'lodash/flatten';\nimport take from 'lodash/take';\nimport {\n sortSearchResults,\n isStop,\n} from '@digitransit-search-util/digitransit-search-util-helpers';\nimport filterMatchingToInput from '@digitransit-search-util/digitransit-search-util-filter-matching-to-input';\nimport getGeocodingResults from '@digitransit-search-util/digitransit-search-util-get-geocoding-results';\nimport getJson from '@digitransit-search-util/digitransit-search-util-get-json';\n\nfunction getStopsFromGeocoding(stops, URL_PELIAS_PLACE) {\n if (!stops || stops.length < 1) {\n return Promise.resolve([]);\n }\n let gids = '';\n const stopsWithGids = stops.map(stop => {\n const type = stop.type === 'stop' ? 'stop' : 'station';\n let gid = `gtfs${stop.gtfsId.split(':')[0].toLowerCase()}:${type}:GTFS:${\n stop.gtfsId\n }`;\n if (stop.code) {\n gid += `#${stop.code}`;\n }\n gids += `${gid},`;\n return { ...stop, gid };\n });\n const stopStationMap = stopsWithGids.reduce(function redu(\n map,\n stopOrStation,\n ) {\n // eslint-disable-next-line no-param-reassign\n map[stopOrStation.gid] = stopOrStation;\n return map;\n }, {});\n return getJson(URL_PELIAS_PLACE, {\n ids: gids.slice(0, -1),\n // lang: context.getStore('PreferencesStore').getLanguage(), TODO enable this when OTP supports translations\n }).then(res => {\n return res.features.map(stop => {\n const favourite = {\n type: 'FavouriteStop',\n properties: {\n addendum: stop.properties.addendum,\n gid: stopStationMap[stop.properties.gid].gid,\n code: stopStationMap[stop.properties.gid].code,\n gtfsId: stopStationMap[stop.properties.gid].gtfsId,\n lastUpdated: stopStationMap[stop.properties.gid].lastUpdated,\n favouriteId: stopStationMap[stop.properties.gid].favouriteId,\n address: stop.properties.label,\n layer: isStop(stop.properties) ? 'favouriteStop' : 'favouriteStation',\n },\n geometry: stop.geometry,\n };\n return favourite;\n });\n });\n}\nfunction filterFavouriteLocations(favourites, input) {\n return Promise.resolve(\n filterMatchingToInput(favourites, input, ['address', 'name']).map(item => ({\n type: 'FavouritePlace',\n properties: {\n ...item,\n label: item.name,\n layer: 'favouritePlace',\n },\n geometry: { type: 'Point', coordinates: [item.lon, item.lat] },\n })),\n );\n}\nfunction selectPositionFomMap(input) {\n if (typeof input !== 'string' || input.length === 0) {\n return Promise.resolve([\n {\n type: 'SelectFromMap',\n address: 'SelectFromMap',\n lat: null,\n lon: null,\n properties: {\n labelId: 'select-from-map',\n layer: 'selectFromMap',\n address: 'SelectFromMap',\n lat: null,\n lon: null,\n },\n geometry: {\n type: 'Point',\n coordinates: [],\n },\n },\n ]);\n }\n return Promise.resolve([]);\n}\n\nfunction getCurrentPositionIfEmpty(input, position) {\n if (typeof input !== 'string' || input.length === 0) {\n return Promise.resolve([\n {\n type: 'CurrentLocation',\n address: position.address,\n lat: position.lat,\n lon: position.lon,\n properties: {\n labelId: 'use-own-position',\n layer: 'currentPosition',\n address: position.address,\n lat: position.lat,\n lon: position.lon,\n },\n geometry: {\n type: 'Point',\n coordinates: [position.lon, position.lat],\n },\n },\n ]);\n }\n\n return Promise.resolve([]);\n}\n\nfunction selectFromOwnLocations(input) {\n if (typeof input !== 'string' || input.length === 0) {\n return Promise.resolve([\n {\n type: 'SelectFromOwnLocations',\n address: 'SelectFromOwnLocations',\n lat: null,\n lon: null,\n properties: {\n labelId: 'select-from-own-locations',\n layer: 'ownLocations',\n address: 'selectFromOwnLocations',\n lat: null,\n lon: null,\n },\n geometry: {\n type: 'Point',\n coordinates: [],\n },\n },\n ]);\n }\n return Promise.resolve([]);\n}\n\nfunction getBackSuggestion() {\n return Promise.resolve([\n {\n type: 'back',\n address: 'back',\n lat: null,\n lon: null,\n properties: {\n labelId: 'back',\n layer: 'back',\n address: 'back',\n lat: null,\n lon: null,\n },\n geometry: {\n type: 'Point',\n coordinates: [],\n },\n },\n ]);\n}\n\nfunction filterFavouriteStops(stopsAndStations, input, useStops, useStations) {\n return stopsAndStations.then(stopsStations => {\n const candidates = stopsStations.filter(s =>\n s.type === 'stop' ? useStops : useStations,\n );\n return filterMatchingToInput(candidates, input, [\n 'properties.name',\n 'properties.name',\n 'properties.address',\n ]);\n });\n}\n\nfunction filterOldSearches(oldSearches, input, dropLayers) {\n let matchingOldSearches = filterMatchingToInput(oldSearches, input, [\n 'properties.name',\n 'properties.label',\n 'properties.address',\n 'properties.shortName',\n 'properties.longName',\n ]);\n if (dropLayers) {\n // don't want these\n matchingOldSearches = matchingOldSearches.filter(\n item => !dropLayers.includes(item.properties.layer),\n );\n }\n return Promise.resolve(\n take(matchingOldSearches, 10).map(item => {\n const newItem = {\n ...item,\n type: 'OldSearch',\n timetableClicked: false, // reset latest selection action\n arrowClicked: false,\n };\n delete newItem.properties.confidence;\n return newItem;\n }),\n );\n}\n\nfunction hasFavourites(searchContext) {\n const favouriteLocations = searchContext.getFavouriteLocations(\n searchContext.context,\n );\n if (favouriteLocations?.length > 0) {\n return true;\n }\n\n const favouriteVehicleRentalStations =\n searchContext.getFavouriteVehicleRentalStations(searchContext.context);\n if (favouriteVehicleRentalStations?.length > 0) {\n return true;\n }\n const favouriteStops = searchContext.getFavouriteStops(searchContext.context);\n return favouriteStops?.length > 0;\n}\n\nconst routeLayers = [\n 'route-TRAM',\n 'route-BUS',\n 'route-RAIL',\n 'route-FERRY',\n 'route-SUBWAY',\n 'route-AIRPLANE',\n 'route-FUNICULAR',\n];\nconst locationLayers = ['venue', 'address', 'street'];\nconst parkingLayers = ['carpark', 'bikepark'];\nconst stopLayers = ['stop', 'station'];\n\n/**\n * Executes the search\n *\n */\nexport function getSearchResults(\n targets,\n sources,\n transportMode,\n searchContext,\n filterResults,\n geocodingSize,\n { input },\n callback,\n pathOpts,\n refPoint,\n) {\n const {\n getPositions,\n getFavouriteLocations,\n getOldSearches,\n getFavouriteStops,\n parkingAreaSources,\n getLanguage,\n getStopAndStationsQuery,\n getFavouriteVehicleRentalStationsQuery,\n getFavouriteVehicleRentalStations,\n getFavouriteRoutesQuery,\n getFavouriteRoutes,\n getRoutesQuery,\n context,\n isPeliasLocationAware: locationAware,\n minimalRegexp,\n lineRegexp,\n URL_PELIAS,\n URL_PELIAS_PLACE,\n feedIDs,\n geocodingSearchParams,\n geocodingSources,\n getFutureRoutes,\n cityBikeNetworks,\n } = searchContext;\n // if no targets are provided, search them all.\n const allTargets = !targets || targets.length === 0;\n // if no sources are provided, use them all.\n const allSources = !sources || sources.length === 0;\n const position = getPositions(context);\n const searchComponents = [];\n const searches = { type: 'all', term: input, results: [] };\n const language = getLanguage(context);\n const focusPoint =\n locationAware && refPoint?.lat && refPoint?.lon\n ? {\n // Round coordinates to approx 1 km, in order to improve caching\n 'focus.point.lat': refPoint.lat.toFixed(3),\n 'focus.point.lon': refPoint.lon.toFixed(3),\n }\n : {};\n const mode = transportMode ? transportMode.split('-')[1] : undefined;\n if (\n targets.includes('CurrentPosition') &&\n position.status !== 'geolocation-not-supported'\n ) {\n searchComponents.push(getCurrentPositionIfEmpty(input, position));\n }\n if (allTargets || targets.includes('MapPosition')) {\n searchComponents.push(selectPositionFomMap(input));\n }\n if (targets.includes('FutureRoutes')) {\n const items = getFutureRoutes(context);\n searchComponents.push(take(items, 3));\n }\n if (\n targets.includes('SelectFromOwnLocations') &&\n hasFavourites(searchContext)\n ) {\n searchComponents.push(selectFromOwnLocations(input));\n }\n if (allTargets || targets.includes('Locations')) {\n // eslint-disable-next-line prefer-destructuring\n const searchParams = geocodingSearchParams;\n if (sources.includes('Favourite')) {\n const favouriteLocations = getFavouriteLocations(context);\n searchComponents.push(\n filterFavouriteLocations(favouriteLocations, input),\n );\n if (sources.includes('Back')) {\n searchComponents.push(getBackSuggestion());\n }\n }\n\n if (allSources || sources.includes('Datasource')) {\n const geocodingLayers = ['venue', 'address', 'street'];\n if (targets.includes('Stations')) {\n geocodingLayers.push('station'); // search stations from OSM\n }\n searchComponents.push(\n getGeocodingResults(\n input,\n searchParams,\n language,\n focusPoint,\n geocodingSources.join(','),\n URL_PELIAS,\n minimalRegexp,\n geocodingLayers,\n ),\n );\n }\n if (allSources || sources.includes('History')) {\n const locationHistory = getOldSearches(context, 'endpoint');\n const dropLayers = ['bikestation'];\n dropLayers.push(...stopLayers);\n dropLayers.push(...routeLayers);\n dropLayers.push(...parkingLayers);\n searchComponents.push(\n filterOldSearches(locationHistory, input, dropLayers),\n );\n }\n }\n if (allTargets || targets.includes('ParkingAreas')) {\n if (allSources || sources.includes('Datasource')) {\n const searchParams = geocodingSearchParams;\n if (geocodingSize && geocodingSize !== 10) {\n searchParams.size = geocodingSize;\n }\n const geocodingLayers = ['carpark', 'bikepark'];\n const feedIds = parkingAreaSources ? parkingAreaSources.join(',') : null;\n searchComponents.push(\n getGeocodingResults(\n input,\n searchParams,\n language,\n focusPoint,\n feedIds,\n URL_PELIAS,\n minimalRegexp,\n geocodingLayers,\n ).then(results => {\n if (filterResults) {\n return filterResults(results, mode);\n }\n return results;\n }),\n );\n }\n if (allSources || sources.includes('History')) {\n const history = getOldSearches(context);\n const dropLayers = ['bikestation'];\n dropLayers.push(...stopLayers);\n dropLayers.push(...routeLayers);\n dropLayers.push(...locationLayers);\n searchComponents.push(filterOldSearches(history, input, dropLayers));\n }\n }\n\n const useStops = targets.includes('Stops');\n const useStations = targets.includes('Stations');\n\n if (allTargets || useStops || useStations) {\n if (sources.includes('Favourite')) {\n const favouriteStops = getFavouriteStops(context);\n let stopsAndStations;\n if (favouriteStops.every(stop => stop.type === 'station')) {\n stopsAndStations = getStopsFromGeocoding(\n favouriteStops,\n URL_PELIAS_PLACE,\n ).then(results => {\n if (filterResults) {\n return filterResults(results, mode);\n }\n return results;\n });\n } else {\n stopsAndStations = getStopAndStationsQuery(favouriteStops)\n .then(favourites =>\n getStopsFromGeocoding(favourites, URL_PELIAS_PLACE),\n )\n .then(results => {\n if (filterResults) {\n return filterResults(results, mode);\n }\n return results;\n });\n }\n searchComponents.push(\n filterFavouriteStops(stopsAndStations, input, useStops, useStations),\n );\n }\n if (allSources || sources.includes('Datasource')) {\n const geocodingLayers = [];\n if (useStops) {\n geocodingLayers.push('stop');\n }\n if (useStations) {\n geocodingLayers.push('station');\n }\n const searchParams =\n geocodingSize && geocodingSize !== 10 ? { size: geocodingSize } : {};\n if (geocodingSearchParams && geocodingSearchParams['boundary.country']) {\n searchParams['boundary.country'] =\n geocodingSearchParams['boundary.country'];\n }\n // a little hack: when searching location data, automatically dedupe stops\n // this could be a new explicit prop\n if (allTargets || targets.includes('Locations')) {\n searchParams.dedupestops = 1;\n }\n const feeds = feedIDs.map(v => `gtfs${v}`).join(',');\n searchComponents.push(\n getGeocodingResults(\n input,\n searchParams,\n language,\n focusPoint,\n feeds,\n URL_PELIAS,\n minimalRegexp,\n geocodingLayers,\n ).then(results => {\n if (filterResults) {\n return filterResults(results, mode);\n }\n return results;\n }),\n );\n }\n if (allSources || sources.includes('History')) {\n const stopHistory = getOldSearches(context).filter(item => {\n if (item.properties.gid) {\n return item.properties.gid.includes('GTFS:');\n }\n return true;\n });\n const dropLayers = ['bikestation'];\n dropLayers.push(...routeLayers);\n dropLayers.push(...locationLayers);\n dropLayers.push(...parkingLayers);\n if (!useStops) {\n dropLayers.push('stop');\n }\n if (!useStations) {\n dropLayers.push('station');\n }\n if (transportMode) {\n searchComponents.push(\n filterOldSearches(stopHistory, input, dropLayers).then(result =>\n filterResults ? filterResults(result, mode) : result,\n ),\n );\n } else {\n searchComponents.push(\n filterOldSearches(stopHistory, input, dropLayers),\n );\n }\n }\n }\n if (allTargets || targets.includes('Routes')) {\n if (sources.includes('Favourite')) {\n const favouriteRoutes = getFavouriteRoutes(context);\n searchComponents.push(\n getFavouriteRoutesQuery(favouriteRoutes, input, mode, pathOpts).then(\n result =>\n filterResults ? filterResults(result, mode, 'Routes') : result,\n ),\n );\n }\n searchComponents.push(\n getRoutesQuery(input, feedIDs, transportMode, pathOpts).then(result =>\n filterResults ? filterResults(result, mode, 'Routes') : result,\n ),\n );\n if (allSources || sources.includes('History')) {\n const routeHistory = getOldSearches(context);\n const dropLayers = ['bikestation'];\n if (transportMode) {\n dropLayers.push(...routeLayers.filter(i => !(i === transportMode)));\n }\n dropLayers.push(...stopLayers);\n dropLayers.push(...locationLayers);\n dropLayers.push(...parkingLayers);\n\n searchComponents.push(\n filterOldSearches(routeHistory, input, dropLayers).then(results =>\n filterResults ? filterResults(results, mode, 'Routes') : results,\n ),\n );\n }\n }\n if (allTargets || targets.includes('VehicleRentalStations')) {\n if (sources.includes('Favourite')) {\n const favouriteVehicleRentalStation =\n getFavouriteVehicleRentalStations(context);\n searchComponents.push(\n getFavouriteVehicleRentalStationsQuery(\n favouriteVehicleRentalStation,\n input,\n ),\n );\n }\n if (allSources || sources.includes('Datasource')) {\n const geocodingLayers = ['bikestation'];\n const searchParams =\n geocodingSize && geocodingSize !== 10 ? { size: geocodingSize } : {};\n searchComponents.push(\n getGeocodingResults(\n input,\n searchParams,\n language,\n focusPoint,\n cityBikeNetworks.join(','),\n URL_PELIAS,\n minimalRegexp,\n geocodingLayers,\n ).then(results => {\n if (filterResults) {\n return filterResults(results, mode, 'VehicleRentalStations');\n }\n return results;\n }),\n );\n }\n if (allSources || sources.includes('History')) {\n const history = getOldSearches(context);\n const dropLayers = [...stopLayers];\n dropLayers.push(...routeLayers);\n dropLayers.push(...locationLayers);\n dropLayers.push(...parkingLayers);\n\n searchComponents.push(filterOldSearches(history, input, dropLayers));\n }\n }\n\n const searchResultsPromise = Promise.all(searchComponents)\n .then(flatten)\n .then(results => {\n searches.results = results;\n })\n .catch(err => {\n searches.error = err;\n });\n searchResultsPromise.then(() => {\n callback({\n ...searches,\n results: sortSearchResults(lineRegexp, searches.results, input),\n });\n });\n}\n\nconst debouncedSearch = debounce(getSearchResults, 300, {\n leading: true,\n});\n\nexport const executeSearch = (\n targets,\n sources,\n transportMode,\n searchContext,\n filterResults,\n geocodingSize,\n data,\n callback,\n pathOpts,\n refPoint,\n) => {\n callback(null); // This means 'we are searching'\n debouncedSearch(\n targets,\n sources,\n transportMode,\n searchContext,\n filterResults,\n geocodingSize,\n data,\n callback,\n pathOpts,\n refPoint,\n );\n};\n","import uniqWith from 'lodash/uniqWith';\nimport isEqual from 'lodash/isEqual';\nimport memoize from 'lodash/memoize';\nimport escapeRegExp from 'lodash/escapeRegExp';\nimport cloneDeep from 'lodash/cloneDeep';\n\n/**\n * Location properties.\n * @typedef {LocationProperties}\n * @property {string} layer Suggestion layer.\n * @property {lat} [number]\n * @property {lon} [number]\n * @property {string} address Address.\n */\n\n/**\n * Returns localadmin (city name) for suggestions\n *\n * @name getLocaladmin\n * @param {Object} suggestion suggestion's properties from geocoding or a favourite stop/station.\n * Expects last part of an address (after ',') to contain the city name of the suggestion location.\n * @returns {String} City name or empty string\n */\nconst getLocaladmin = suggestion =>\n suggestion.localadmin ||\n suggestion.localadmin ||\n (suggestion.address &&\n suggestion.address.lastIndexOf(',') < suggestion.address.length - 2 &&\n suggestion.address.substring(suggestion.address.lastIndexOf(',') + 2)) ||\n '';\n\nexport const getStopCode = ({ id, code }) => {\n if (code) {\n return code;\n }\n if (\n id === undefined ||\n typeof id.indexOf === 'undefined' ||\n id.indexOf('#') === -1\n ) {\n return undefined;\n }\n // id from pelias\n return id.substring(id.indexOf('#') + 1);\n};\n\nexport const formatFavouritePlaceLabel = (name, address) => [\n name || (address && address.split(',')[0]),\n typeof address === 'string'\n ? address.replace(new RegExp(`${escapeRegExp(name)}([ ,]|$)+`), '')\n : '',\n];\n\n/**\n * Format suggestion-pair [name, address] by `suggestion.layer`.\n *\n * @name getNameLabel\n * @param {LocationProperties} suggestion\n * @param {boolean} [plain]\n *\n * @returns {Array.<string>} Formatted label.\n */\nexport const getNameLabel = memoize(\n (suggestion, plain = false) => {\n switch (suggestion.layer) {\n case 'currentPosition':\n return [suggestion.labelId, suggestion.address];\n case 'selectFromMap':\n case 'ownLocations':\n case 'back':\n return [suggestion.labelId];\n case 'favouritePlace':\n return formatFavouritePlaceLabel(suggestion.name, suggestion.address);\n case 'favouriteVehicleRentalStation':\n case 'bikestation':\n return [suggestion.name];\n case 'favouriteRoute':\n case 'route-BUS':\n case 'route-TRAM':\n case 'route-RAIL':\n case 'route-SUBWAY':\n case 'route-FERRY':\n case 'route-FUNICULAR':\n case 'route-AIRPLANE':\n return !plain && suggestion.shortName\n ? [\n suggestion.gtfsId,\n suggestion.mode.toLowerCase(),\n suggestion.longName,\n ]\n : [\n suggestion.shortName,\n suggestion.longName,\n suggestion.agency ? suggestion.agency.name : undefined,\n ];\n case 'venue':\n case 'address':\n case 'street':\n return [\n suggestion.name,\n suggestion.label.replace(\n new RegExp(`${escapeRegExp(suggestion.name)}(,)?( )?`),\n '',\n ),\n ];\n case 'favouriteStop':\n case 'stop':\n return plain\n ? [\n suggestion.name ||\n suggestion.label ||\n (suggestion.address && suggestion.address.split(',')[0]),\n getLocaladmin(suggestion),\n ]\n : [\n suggestion.name,\n suggestion.id,\n getStopCode(suggestion),\n getLocaladmin(suggestion),\n ];\n case 'favouriteStation':\n case 'station':\n default:\n return [\n suggestion.name ||\n suggestion.label ||\n (suggestion.address && suggestion.address.split(',')[0]),\n getLocaladmin(suggestion),\n ];\n }\n },\n (item, plain) => {\n const i = cloneDeep(item);\n i.plain = plain;\n return i;\n },\n);\n\n/**\n * Checks that features are unique by label\n *\n * @name uniqByLabel\n * @param {Array} features Array of features\n * @returns {Array} Array of unique features\n * @example\n * digitransit-search-util.uniqByLabel(features);\n * //= Array(2)\n */\nexport default function uniqByLabel(features) {\n return uniqWith(features, (feat1, feat2) => {\n if (feat1.type === 'FutureRoute' || feat2.type === 'FutureRoute') {\n return false;\n }\n return (\n isEqual(getNameLabel(feat1.properties), getNameLabel(feat2.properties)) &&\n feat1.properties.layer === feat2.properties.layer\n );\n });\n}\n","//! moment.js\n//! version : 2.30.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 arrLen = arr.length;\n for (i = 0; i < arrLen; ++i) {\n res.push(fn(arr[i], i));\n }\n return res;\n }\n\n function extend(a, b) {\n for (var i in b) {\n if (hasOwnProp(b, i)) {\n a[i] = b[i];\n }\n }\n\n if (hasOwnProp(b, 'toString')) {\n a.toString = b.toString;\n }\n\n if (hasOwnProp(b, 'valueOf')) {\n a.valueOf = b.valueOf;\n }\n\n return a;\n }\n\n function createUTC(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, true).utc();\n }\n\n function defaultParsingFlags() {\n // We need to deep clone this object.\n return {\n empty: false,\n unusedTokens: [],\n unusedInput: [],\n overflow: -2,\n charsLeftOver: 0,\n nullInput: false,\n invalidEra: null,\n invalidMonth: null,\n invalidFormat: false,\n userInvalidated: false,\n iso: false,\n parsedDateParts: [],\n era: null,\n meridiem: null,\n rfc2822: false,\n weekdayMismatch: false,\n };\n }\n\n function getParsingFlags(m) {\n if (m._pf == null) {\n m._pf = defaultParsingFlags();\n }\n return m._pf;\n }\n\n var some;\n if (Array.prototype.some) {\n some = Array.prototype.some;\n } else {\n some = function (fun) {\n var t = Object(this),\n len = t.length >>> 0,\n i;\n\n for (i = 0; i < len; i++) {\n if (i in t && fun.call(this, t[i], i, t)) {\n return true;\n }\n }\n\n return false;\n };\n }\n\n function isValid(m) {\n var flags = null,\n parsedParts = false,\n isNowValid = m._d && !isNaN(m._d.getTime());\n if (isNowValid) {\n flags = getParsingFlags(m);\n parsedParts = some.call(flags.parsedDateParts, function (i) {\n return i != null;\n });\n isNowValid =\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 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 return m._isValid;\n }\n\n function createInvalid(flags) {\n var m = createUTC(NaN);\n if (flags != null) {\n extend(getParsingFlags(m), flags);\n } else {\n getParsingFlags(m).userInvalidated = true;\n }\n\n return m;\n }\n\n // Plugins that add properties should also add the key here (null value),\n // so we can properly clone ourselves.\n var momentProperties = (hooks.momentProperties = []),\n updateInProgress = false;\n\n function copyConfig(to, from) {\n var i,\n prop,\n val,\n momentPropertiesLen = momentProperties.length;\n\n if (!isUndefined(from._isAMomentObject)) {\n to._isAMomentObject = from._isAMomentObject;\n }\n if (!isUndefined(from._i)) {\n to._i = from._i;\n }\n if (!isUndefined(from._f)) {\n to._f = from._f;\n }\n if (!isUndefined(from._l)) {\n to._l = from._l;\n }\n if (!isUndefined(from._strict)) {\n to._strict = from._strict;\n }\n if (!isUndefined(from._tzm)) {\n to._tzm = from._tzm;\n }\n if (!isUndefined(from._isUTC)) {\n to._isUTC = from._isUTC;\n }\n if (!isUndefined(from._offset)) {\n to._offset = from._offset;\n }\n if (!isUndefined(from._pf)) {\n to._pf = getParsingFlags(from);\n }\n if (!isUndefined(from._locale)) {\n to._locale = from._locale;\n }\n\n if (momentPropertiesLen > 0) {\n for (i = 0; i < momentPropertiesLen; i++) {\n prop = momentProperties[i];\n val = from[prop];\n if (!isUndefined(val)) {\n to[prop] = val;\n }\n }\n }\n\n return to;\n }\n\n // Moment prototype object\n function Moment(config) {\n copyConfig(this, config);\n this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n if (!this.isValid()) {\n this._d = new Date(NaN);\n }\n // Prevent infinite loop in case updateOffset creates new moment\n // objects.\n if (updateInProgress === false) {\n updateInProgress = true;\n hooks.updateOffset(this);\n updateInProgress = false;\n }\n }\n\n function isMoment(obj) {\n return (\n obj instanceof Moment || (obj != null && obj._isAMomentObject != null)\n );\n }\n\n function warn(msg) {\n if (\n hooks.suppressDeprecationWarnings === false &&\n typeof console !== 'undefined' &&\n console.warn\n ) {\n console.warn('Deprecation warning: ' + msg);\n }\n }\n\n function deprecate(msg, fn) {\n var firstTime = true;\n\n return extend(function () {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(null, msg);\n }\n if (firstTime) {\n var args = [],\n arg,\n i,\n key,\n argLen = arguments.length;\n for (i = 0; i < argLen; i++) {\n arg = '';\n if (typeof arguments[i] === 'object') {\n arg += '\\n[' + i + '] ';\n for (key in arguments[0]) {\n if (hasOwnProp(arguments[0], key)) {\n arg += key + ': ' + arguments[0][key] + ', ';\n }\n }\n arg = arg.slice(0, -2); // Remove trailing comma and space\n } else {\n arg = arguments[i];\n }\n args.push(arg);\n }\n warn(\n msg +\n '\\nArguments: ' +\n Array.prototype.slice.call(args).join('') +\n '\\n' +\n new Error().stack\n );\n firstTime = false;\n }\n return fn.apply(this, arguments);\n }, fn);\n }\n\n var deprecations = {};\n\n function deprecateSimple(name, msg) {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(name, msg);\n }\n if (!deprecations[name]) {\n warn(msg);\n deprecations[name] = true;\n }\n }\n\n hooks.suppressDeprecationWarnings = false;\n hooks.deprecationHandler = null;\n\n function isFunction(input) {\n return (\n (typeof Function !== 'undefined' && input instanceof Function) ||\n Object.prototype.toString.call(input) === '[object Function]'\n );\n }\n\n function set(config) {\n var prop, i;\n for (i in config) {\n if (hasOwnProp(config, i)) {\n prop = config[i];\n if (isFunction(prop)) {\n this[i] = prop;\n } else {\n this['_' + i] = prop;\n }\n }\n }\n this._config = config;\n // Lenient ordinal parsing accepts just a number in addition to\n // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n this._dayOfMonthOrdinalParseLenient = new RegExp(\n (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n '|' +\n /\\d{1,2}/.source\n );\n }\n\n function mergeConfigs(parentConfig, childConfig) {\n var res = extend({}, parentConfig),\n prop;\n for (prop in childConfig) {\n if (hasOwnProp(childConfig, prop)) {\n if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n res[prop] = {};\n extend(res[prop], parentConfig[prop]);\n extend(res[prop], childConfig[prop]);\n } else if (childConfig[prop] != null) {\n res[prop] = childConfig[prop];\n } else {\n delete res[prop];\n }\n }\n }\n for (prop in parentConfig) {\n if (\n hasOwnProp(parentConfig, prop) &&\n !hasOwnProp(childConfig, prop) &&\n isObject(parentConfig[prop])\n ) {\n // make sure changes to properties don't modify parent config\n res[prop] = extend({}, res[prop]);\n }\n }\n return res;\n }\n\n function Locale(config) {\n if (config != null) {\n this.set(config);\n }\n }\n\n var keys;\n\n if (Object.keys) {\n keys = Object.keys;\n } else {\n keys = function (obj) {\n var i,\n res = [];\n for (i in obj) {\n if (hasOwnProp(obj, i)) {\n res.push(i);\n }\n }\n return res;\n };\n }\n\n var defaultCalendar = {\n sameDay: '[Today at] LT',\n nextDay: '[Tomorrow at] LT',\n nextWeek: 'dddd [at] LT',\n lastDay: '[Yesterday at] LT',\n lastWeek: '[Last] dddd [at] LT',\n sameElse: 'L',\n };\n\n function calendar(key, mom, now) {\n var output = this._calendar[key] || this._calendar['sameElse'];\n return isFunction(output) ? output.call(mom, now) : output;\n }\n\n function zeroFill(number, targetLength, forceSign) {\n var absNumber = '' + Math.abs(number),\n zerosToFill = targetLength - absNumber.length,\n sign = number >= 0;\n return (\n (sign ? (forceSign ? '+' : '') : '-') +\n Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +\n absNumber\n );\n }\n\n var formattingTokens =\n /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,\n localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,\n formatFunctions = {},\n formatTokenFunctions = {};\n\n // token: 'M'\n // padded: ['MM', 2]\n // ordinal: 'Mo'\n // callback: function () { this.month() + 1 }\n function addFormatToken(token, padded, ordinal, callback) {\n var func = callback;\n if (typeof callback === 'string') {\n func = function () {\n return this[callback]();\n };\n }\n if (token) {\n formatTokenFunctions[token] = func;\n }\n if (padded) {\n formatTokenFunctions[padded[0]] = function () {\n return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n };\n }\n if (ordinal) {\n formatTokenFunctions[ordinal] = function () {\n return this.localeData().ordinal(\n func.apply(this, arguments),\n token\n );\n };\n }\n }\n\n function removeFormattingTokens(input) {\n if (input.match(/\\[[\\s\\S]/)) {\n return input.replace(/^\\[|\\]$/g, '');\n }\n return input.replace(/\\\\/g, '');\n }\n\n function makeFormatFunction(format) {\n var array = format.match(formattingTokens),\n i,\n length;\n\n for (i = 0, length = array.length; i < length; i++) {\n if (formatTokenFunctions[array[i]]) {\n array[i] = formatTokenFunctions[array[i]];\n } else {\n array[i] = removeFormattingTokens(array[i]);\n }\n }\n\n return function (mom) {\n var output = '',\n i;\n for (i = 0; i < length; i++) {\n output += isFunction(array[i])\n ? array[i].call(mom, format)\n : array[i];\n }\n return output;\n };\n }\n\n // format date using native date object\n function formatMoment(m, format) {\n if (!m.isValid()) {\n return m.localeData().invalidDate();\n }\n\n format = expandFormat(format, m.localeData());\n formatFunctions[format] =\n formatFunctions[format] || makeFormatFunction(format);\n\n return formatFunctions[format](m);\n }\n\n function expandFormat(format, locale) {\n var i = 5;\n\n function replaceLongDateFormatTokens(input) {\n return locale.longDateFormat(input) || input;\n }\n\n localFormattingTokens.lastIndex = 0;\n while (i >= 0 && localFormattingTokens.test(format)) {\n format = format.replace(\n localFormattingTokens,\n replaceLongDateFormatTokens\n );\n localFormattingTokens.lastIndex = 0;\n i -= 1;\n }\n\n return format;\n }\n\n var defaultLongDateFormat = {\n LTS: 'h:mm:ss A',\n LT: 'h:mm A',\n L: 'MM/DD/YYYY',\n LL: 'MMMM D, YYYY',\n LLL: 'MMMM D, YYYY h:mm A',\n LLLL: 'dddd, MMMM D, YYYY h:mm A',\n };\n\n function longDateFormat(key) {\n var format = this._longDateFormat[key],\n formatUpper = this._longDateFormat[key.toUpperCase()];\n\n if (format || !formatUpper) {\n return format;\n }\n\n this._longDateFormat[key] = formatUpper\n .match(formattingTokens)\n .map(function (tok) {\n if (\n tok === 'MMMM' ||\n tok === 'MM' ||\n tok === 'DD' ||\n tok === 'dddd'\n ) {\n return tok.slice(1);\n }\n return tok;\n })\n .join('');\n\n return this._longDateFormat[key];\n }\n\n var defaultInvalidDate = 'Invalid date';\n\n function invalidDate() {\n return this._invalidDate;\n }\n\n var defaultOrdinal = '%d',\n defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n function ordinal(number) {\n return this._ordinal.replace('%d', number);\n }\n\n var defaultRelativeTime = {\n future: 'in %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: 'a minute',\n mm: '%d minutes',\n h: 'an hour',\n hh: '%d hours',\n d: 'a day',\n dd: '%d days',\n w: 'a week',\n ww: '%d weeks',\n M: 'a month',\n MM: '%d months',\n y: 'a year',\n yy: '%d years',\n };\n\n function relativeTime(number, withoutSuffix, string, isFuture) {\n var output = this._relativeTime[string];\n return isFunction(output)\n ? output(number, withoutSuffix, string, isFuture)\n : output.replace(/%d/i, number);\n }\n\n function pastFuture(diff, output) {\n var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n }\n\n var aliases = {\n D: 'date',\n dates: 'date',\n date: 'date',\n d: 'day',\n days: 'day',\n day: 'day',\n e: 'weekday',\n weekdays: 'weekday',\n weekday: 'weekday',\n E: 'isoWeekday',\n isoweekdays: 'isoWeekday',\n isoweekday: 'isoWeekday',\n DDD: 'dayOfYear',\n dayofyears: 'dayOfYear',\n dayofyear: 'dayOfYear',\n h: 'hour',\n hours: 'hour',\n hour: 'hour',\n ms: 'millisecond',\n milliseconds: 'millisecond',\n millisecond: 'millisecond',\n m: 'minute',\n minutes: 'minute',\n minute: 'minute',\n M: 'month',\n months: 'month',\n month: 'month',\n Q: 'quarter',\n quarters: 'quarter',\n quarter: 'quarter',\n s: 'second',\n seconds: 'second',\n second: 'second',\n gg: 'weekYear',\n weekyears: 'weekYear',\n weekyear: 'weekYear',\n GG: 'isoWeekYear',\n isoweekyears: 'isoWeekYear',\n isoweekyear: 'isoWeekYear',\n w: 'week',\n weeks: 'week',\n week: 'week',\n W: 'isoWeek',\n isoweeks: 'isoWeek',\n isoweek: 'isoWeek',\n y: 'year',\n years: 'year',\n year: 'year',\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 date: 9,\n day: 11,\n weekday: 11,\n isoWeekday: 11,\n dayOfYear: 4,\n hour: 13,\n millisecond: 16,\n minute: 14,\n month: 8,\n quarter: 7,\n second: 15,\n weekYear: 1,\n isoWeekYear: 1,\n week: 5,\n isoWeek: 5,\n year: 1,\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 var match1 = /\\d/, // 0 - 9\n match2 = /\\d\\d/, // 00 - 99\n match3 = /\\d{3}/, // 000 - 999\n match4 = /\\d{4}/, // 0000 - 9999\n match6 = /[+-]?\\d{6}/, // -999999 - 999999\n match1to2 = /\\d\\d?/, // 0 - 99\n match3to4 = /\\d\\d\\d\\d?/, // 999 - 9999\n match5to6 = /\\d\\d\\d\\d\\d\\d?/, // 99999 - 999999\n match1to3 = /\\d{1,3}/, // 0 - 999\n match1to4 = /\\d{1,4}/, // 0 - 9999\n match1to6 = /[+-]?\\d{1,6}/, // -999999 - 999999\n matchUnsigned = /\\d+/, // 0 - inf\n matchSigned = /[+-]?\\d+/, // -inf - inf\n matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi, // +00:00 -00:00 +0000 -0000 or Z\n matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/, // 123456789 123456789.123\n // any word (or two) characters or numbers including two/three word month in arabic.\n // includes scottish gaelic two word and hyphenated months\n matchWord =\n /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,\n match1to2NoLeadingZero = /^[1-9]\\d?/, // 1-99\n match1to2HasZero = /^([1-9]\\d|\\d)/, // 0-99\n regexes;\n\n regexes = {};\n\n function addRegexToken(token, regex, strictRegex) {\n regexes[token] = isFunction(regex)\n ? regex\n : function (isStrict, localeData) {\n return isStrict && strictRegex ? strictRegex : regex;\n };\n }\n\n function getParseRegexForToken(token, config) {\n if (!hasOwnProp(regexes, token)) {\n return new RegExp(unescapeFormat(token));\n }\n\n return regexes[token](config._strict, config._locale);\n }\n\n // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n function unescapeFormat(s) {\n return regexEscape(\n s\n .replace('\\\\', '')\n .replace(\n /\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,\n function (matched, p1, p2, p3, p4) {\n return p1 || p2 || p3 || p4;\n }\n )\n );\n }\n\n function regexEscape(s) {\n return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n }\n\n 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 var tokens = {};\n\n function addParseToken(token, callback) {\n var i,\n func = callback,\n tokenLen;\n if (typeof token === 'string') {\n token = [token];\n }\n if (isNumber(callback)) {\n func = function (input, array) {\n array[callback] = toInt(input);\n };\n }\n tokenLen = token.length;\n for (i = 0; i < tokenLen; i++) {\n tokens[token[i]] = func;\n }\n }\n\n function addWeekParseToken(token, callback) {\n addParseToken(token, function (input, array, config, token) {\n config._w = config._w || {};\n callback(input, config._w, config, token);\n });\n }\n\n function addTimeToArrayFromToken(token, input, config) {\n if (input != null && hasOwnProp(tokens, token)) {\n tokens[token](input, config._a, config, token);\n }\n }\n\n function isLeapYear(year) {\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\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 // 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 // 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 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 if (!mom.isValid()) {\n return NaN;\n }\n\n var d = mom._d,\n isUTC = mom._isUTC;\n\n switch (unit) {\n case 'Milliseconds':\n return isUTC ? d.getUTCMilliseconds() : d.getMilliseconds();\n case 'Seconds':\n return isUTC ? d.getUTCSeconds() : d.getSeconds();\n case 'Minutes':\n return isUTC ? d.getUTCMinutes() : d.getMinutes();\n case 'Hours':\n return isUTC ? d.getUTCHours() : d.getHours();\n case 'Date':\n return isUTC ? d.getUTCDate() : d.getDate();\n case 'Day':\n return isUTC ? d.getUTCDay() : d.getDay();\n case 'Month':\n return isUTC ? d.getUTCMonth() : d.getMonth();\n case 'FullYear':\n return isUTC ? d.getUTCFullYear() : d.getFullYear();\n default:\n return NaN; // Just in case\n }\n }\n\n function set$1(mom, unit, value) {\n var d, isUTC, year, month, date;\n\n if (!mom.isValid() || isNaN(value)) {\n return;\n }\n\n d = mom._d;\n isUTC = mom._isUTC;\n\n switch (unit) {\n case 'Milliseconds':\n return void (isUTC\n ? d.setUTCMilliseconds(value)\n : d.setMilliseconds(value));\n case 'Seconds':\n return void (isUTC ? d.setUTCSeconds(value) : d.setSeconds(value));\n case 'Minutes':\n return void (isUTC ? d.setUTCMinutes(value) : d.setMinutes(value));\n case 'Hours':\n return void (isUTC ? d.setUTCHours(value) : d.setHours(value));\n case 'Date':\n return void (isUTC ? d.setUTCDate(value) : d.setDate(value));\n // case 'Day': // Not real\n // return void (isUTC ? d.setUTCDay(value) : d.setDay(value));\n // case 'Month': // Not used because we need to pass two variables\n // return void (isUTC ? d.setUTCMonth(value) : d.setMonth(value));\n case 'FullYear':\n break; // See below ...\n default:\n return; // Just in case\n }\n\n year = value;\n month = mom.month();\n date = mom.date();\n date = date === 29 && month === 1 && !isLeapYear(year) ? 28 : date;\n void (isUTC\n ? d.setUTCFullYear(year, month, date)\n : d.setFullYear(year, month, date));\n }\n\n // MOMENTS\n\n function stringGet(units) {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units]();\n }\n return this;\n }\n\n function stringSet(units, value) {\n if (typeof units === 'object') {\n units = normalizeObjectUnits(units);\n var prioritized = getPrioritizedUnits(units),\n i,\n prioritizedLen = prioritized.length;\n for (i = 0; i < prioritizedLen; i++) {\n this[prioritized[i].unit](units[prioritized[i].unit]);\n }\n } else {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units](value);\n }\n }\n return this;\n }\n\n 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 // PARSING\n\n addRegexToken('M', match1to2, match1to2NoLeadingZero);\n addRegexToken('MM', match1to2, match2);\n addRegexToken('MMM', function (isStrict, locale) {\n return locale.monthsShortRegex(isStrict);\n });\n addRegexToken('MMMM', function (isStrict, locale) {\n return locale.monthsRegex(isStrict);\n });\n\n addParseToken(['M', 'MM'], function (input, array) {\n array[MONTH] = toInt(input) - 1;\n });\n\n addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n var month = config._locale.monthsParse(input, token, config._strict);\n // if we didn't find a month name, mark the date as invalid.\n if (month != null) {\n array[MONTH] = month;\n } else {\n getParsingFlags(config).invalidMonth = input;\n }\n });\n\n // LOCALES\n\n var defaultLocaleMonths =\n 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n '_'\n ),\n defaultLocaleMonthsShort =\n 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,\n defaultMonthsShortRegex = matchWord,\n defaultMonthsRegex = matchWord;\n\n function localeMonths(m, format) {\n if (!m) {\n return isArray(this._months)\n ? this._months\n : this._months['standalone'];\n }\n return isArray(this._months)\n ? this._months[m.month()]\n : this._months[\n (this._months.isFormat || MONTHS_IN_FORMAT).test(format)\n ? 'format'\n : 'standalone'\n ][m.month()];\n }\n\n function localeMonthsShort(m, format) {\n if (!m) {\n return isArray(this._monthsShort)\n ? this._monthsShort\n : this._monthsShort['standalone'];\n }\n return isArray(this._monthsShort)\n ? this._monthsShort[m.month()]\n : this._monthsShort[\n MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'\n ][m.month()];\n }\n\n function handleStrictParse(monthName, format, strict) {\n var i,\n ii,\n mom,\n llc = monthName.toLocaleLowerCase();\n if (!this._monthsParse) {\n // this is not used\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n for (i = 0; i < 12; ++i) {\n mom = createUTC([2000, i]);\n this._shortMonthsParse[i] = this.monthsShort(\n mom,\n ''\n ).toLocaleLowerCase();\n this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeMonthsParse(monthName, format, strict) {\n var i, mom, regex;\n\n if (this._monthsParseExact) {\n return handleStrictParse.call(this, monthName, format, strict);\n }\n\n if (!this._monthsParse) {\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n }\n\n // TODO: add sorting\n // Sorting makes sure if one month (or abbr) is a prefix of another\n // see sorting in computeMonthsParse\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n if (strict && !this._longMonthsParse[i]) {\n this._longMonthsParse[i] = new RegExp(\n '^' + this.months(mom, '').replace('.', '') + '$',\n 'i'\n );\n this._shortMonthsParse[i] = new RegExp(\n '^' + this.monthsShort(mom, '').replace('.', '') + '$',\n 'i'\n );\n }\n if (!strict && !this._monthsParse[i]) {\n regex =\n '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'MMMM' &&\n this._longMonthsParse[i].test(monthName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'MMM' &&\n this._shortMonthsParse[i].test(monthName)\n ) {\n return i;\n } else if (!strict && this._monthsParse[i].test(monthName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function setMonth(mom, value) {\n 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 var month = value,\n date = mom.date();\n\n date = date < 29 ? date : Math.min(date, daysInMonth(mom.year(), month));\n void (mom._isUTC\n ? mom._d.setUTCMonth(month, date)\n : mom._d.setMonth(month, date));\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 shortP,\n longP;\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n shortP = regexEscape(this.monthsShort(mom, ''));\n longP = regexEscape(this.months(mom, ''));\n shortPieces.push(shortP);\n longPieces.push(longP);\n mixedPieces.push(longP);\n mixedPieces.push(shortP);\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\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 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 // PARSING\n\n addRegexToken('w', match1to2, match1to2NoLeadingZero);\n addRegexToken('ww', match1to2, match2);\n addRegexToken('W', match1to2, match1to2NoLeadingZero);\n addRegexToken('WW', match1to2, match2);\n\n addWeekParseToken(\n ['w', 'ww', 'W', 'WW'],\n function (input, week, config, token) {\n week[token.substr(0, 1)] = toInt(input);\n }\n );\n\n // HELPERS\n\n // LOCALES\n\n function localeWeek(mom) {\n return weekOfYear(mom, this._week.dow, this._week.doy).week;\n }\n\n var defaultLocaleWeek = {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n };\n\n function localeFirstDayOfWeek() {\n return this._week.dow;\n }\n\n function localeFirstDayOfYear() {\n return this._week.doy;\n }\n\n // MOMENTS\n\n function getSetWeek(input) {\n var week = this.localeData().week(this);\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n function getSetISOWeek(input) {\n var week = weekOfYear(this, 1, 4).week;\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('d', 0, 'do', 'day');\n\n addFormatToken('dd', 0, 0, function (format) {\n return this.localeData().weekdaysMin(this, format);\n });\n\n addFormatToken('ddd', 0, 0, function (format) {\n return this.localeData().weekdaysShort(this, format);\n });\n\n addFormatToken('dddd', 0, 0, function (format) {\n return this.localeData().weekdays(this, format);\n });\n\n addFormatToken('e', 0, 0, 'weekday');\n addFormatToken('E', 0, 0, 'isoWeekday');\n\n // PARSING\n\n addRegexToken('d', match1to2);\n addRegexToken('e', match1to2);\n addRegexToken('E', match1to2);\n addRegexToken('dd', function (isStrict, locale) {\n return locale.weekdaysMinRegex(isStrict);\n });\n addRegexToken('ddd', function (isStrict, locale) {\n return locale.weekdaysShortRegex(isStrict);\n });\n addRegexToken('dddd', function (isStrict, locale) {\n return locale.weekdaysRegex(isStrict);\n });\n\n addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n var weekday = config._locale.weekdaysParse(input, token, config._strict);\n // if we didn't get a weekday name, mark the date as invalid\n if (weekday != null) {\n week.d = weekday;\n } else {\n getParsingFlags(config).invalidWeekday = input;\n }\n });\n\n addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n week[token] = toInt(input);\n });\n\n // HELPERS\n\n function parseWeekday(input, locale) {\n if (typeof input !== 'string') {\n return input;\n }\n\n if (!isNaN(input)) {\n return parseInt(input, 10);\n }\n\n input = locale.weekdaysParse(input);\n if (typeof input === 'number') {\n return input;\n }\n\n return null;\n }\n\n function parseIsoWeekday(input, locale) {\n if (typeof input === 'string') {\n return locale.weekdaysParse(input) % 7 || 7;\n }\n return isNaN(input) ? null : input;\n }\n\n // LOCALES\n function shiftWeekdays(ws, n) {\n return ws.slice(n, 7).concat(ws.slice(0, n));\n }\n\n var defaultLocaleWeekdays =\n 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n defaultWeekdaysRegex = matchWord,\n defaultWeekdaysShortRegex = matchWord,\n defaultWeekdaysMinRegex = matchWord;\n\n function localeWeekdays(m, format) {\n var weekdays = isArray(this._weekdays)\n ? this._weekdays\n : this._weekdays[\n m && m !== true && this._weekdays.isFormat.test(format)\n ? 'format'\n : 'standalone'\n ];\n return m === true\n ? shiftWeekdays(weekdays, this._week.dow)\n : m\n ? weekdays[m.day()]\n : weekdays;\n }\n\n function localeWeekdaysShort(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n : m\n ? this._weekdaysShort[m.day()]\n : this._weekdaysShort;\n }\n\n function localeWeekdaysMin(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n : m\n ? this._weekdaysMin[m.day()]\n : this._weekdaysMin;\n }\n\n function handleStrictParse$1(weekdayName, format, strict) {\n var i,\n ii,\n mom,\n llc = weekdayName.toLocaleLowerCase();\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._minWeekdaysParse = [];\n\n for (i = 0; i < 7; ++i) {\n mom = createUTC([2000, 1]).day(i);\n this._minWeekdaysParse[i] = this.weekdaysMin(\n mom,\n ''\n ).toLocaleLowerCase();\n this._shortWeekdaysParse[i] = this.weekdaysShort(\n mom,\n ''\n ).toLocaleLowerCase();\n this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeWeekdaysParse(weekdayName, format, strict) {\n var i, mom, regex;\n\n if (this._weekdaysParseExact) {\n return handleStrictParse$1.call(this, weekdayName, format, strict);\n }\n\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._minWeekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._fullWeekdaysParse = [];\n }\n\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n\n mom = createUTC([2000, 1]).day(i);\n if (strict && !this._fullWeekdaysParse[i]) {\n this._fullWeekdaysParse[i] = new RegExp(\n '^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._shortWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._minWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n }\n if (!this._weekdaysParse[i]) {\n regex =\n '^' +\n this.weekdays(mom, '') +\n '|^' +\n this.weekdaysShort(mom, '') +\n '|^' +\n this.weekdaysMin(mom, '');\n this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'dddd' &&\n this._fullWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'ddd' &&\n this._shortWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'dd' &&\n this._minWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function getSetDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n\n var day = get(this, 'Day');\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 // 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, match1to2HasZero);\n addRegexToken('h', match1to2, match1to2NoLeadingZero);\n addRegexToken('k', match1to2, match1to2NoLeadingZero);\n addRegexToken('HH', match1to2, match2);\n addRegexToken('hh', match1to2, match2);\n addRegexToken('kk', match1to2, match2);\n\n addRegexToken('hmm', match3to4);\n addRegexToken('hmmss', match5to6);\n addRegexToken('Hmm', match3to4);\n addRegexToken('Hmmss', match5to6);\n\n addParseToken(['H', 'HH'], HOUR);\n addParseToken(['k', 'kk'], function (input, array, config) {\n var kInput = toInt(input);\n array[HOUR] = kInput === 24 ? 0 : kInput;\n });\n addParseToken(['a', 'A'], function (input, array, config) {\n config._isPm = config._locale.isPM(input);\n config._meridiem = input;\n });\n addParseToken(['h', 'hh'], function (input, array, config) {\n array[HOUR] = toInt(input);\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('Hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n });\n addParseToken('Hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n });\n\n // LOCALES\n\n function localeIsPM(input) {\n // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n // Using charAt should be more compatible.\n return (input + '').toLowerCase().charAt(0) === 'p';\n }\n\n var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i,\n // Setting the hour should keep the time, because the user explicitly\n // specified which hour they want. So trying to maintain the same hour (in\n // a new timezone) makes sense. Adding/subtracting hours does not follow\n // this rule.\n getSetHour = makeGetSet('Hours', true);\n\n function localeMeridiem(hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'pm' : 'PM';\n } else {\n return isLower ? 'am' : 'AM';\n }\n }\n\n var baseConfig = {\n calendar: defaultCalendar,\n longDateFormat: defaultLongDateFormat,\n invalidDate: defaultInvalidDate,\n ordinal: defaultOrdinal,\n dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n relativeTime: defaultRelativeTime,\n\n months: defaultLocaleMonths,\n monthsShort: defaultLocaleMonthsShort,\n\n week: defaultLocaleWeek,\n\n weekdays: defaultLocaleWeekdays,\n weekdaysMin: defaultLocaleWeekdaysMin,\n weekdaysShort: defaultLocaleWeekdaysShort,\n\n meridiemParse: defaultLocaleMeridiemParse,\n };\n\n // internal storage for locale config files\n var locales = {},\n localeFamilies = {},\n globalLocale;\n\n function commonPrefix(arr1, arr2) {\n var i,\n minl = Math.min(arr1.length, arr2.length);\n for (i = 0; i < minl; i += 1) {\n if (arr1[i] !== arr2[i]) {\n return i;\n }\n }\n return minl;\n }\n\n function normalizeLocale(key) {\n return key ? key.toLowerCase().replace('_', '-') : key;\n }\n\n // pick the locale from the array\n // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n function chooseLocale(names) {\n var i = 0,\n j,\n next,\n locale,\n split;\n\n while (i < names.length) {\n split = normalizeLocale(names[i]).split('-');\n j = split.length;\n next = normalizeLocale(names[i + 1]);\n next = next ? next.split('-') : null;\n while (j > 0) {\n locale = loadLocale(split.slice(0, j).join('-'));\n if (locale) {\n return locale;\n }\n if (\n next &&\n next.length >= j &&\n commonPrefix(split, next) >= j - 1\n ) {\n //the next array item is better than a shallower substring of this one\n break;\n }\n j--;\n }\n i++;\n }\n return globalLocale;\n }\n\n function isLocaleNameSane(name) {\n // Prevent names that look like filesystem paths, i.e contain '/' or '\\'\n // Ensure name is available and function returns boolean\n return !!(name && name.match('^[^/\\\\\\\\]*$'));\n }\n\n function loadLocale(name) {\n var oldLocale = null,\n aliasedRequire;\n // TODO: Find a better way to register and load all the locales in Node\n if (\n locales[name] === undefined &&\n typeof module !== 'undefined' &&\n module &&\n module.exports &&\n isLocaleNameSane(name)\n ) {\n try {\n oldLocale = globalLocale._abbr;\n aliasedRequire = require;\n aliasedRequire('./locale/' + name);\n getSetGlobalLocale(oldLocale);\n } catch (e) {\n // mark as not found to avoid repeating expensive file require call causing high CPU\n // when trying to find en-US, en_US, en-us for every format call\n locales[name] = null; // null means not found\n }\n }\n return locales[name];\n }\n\n // This function will load locale and then set the global locale. If\n // no arguments are passed in, it will simply return the current global\n // locale key.\n function getSetGlobalLocale(key, values) {\n var data;\n if (key) {\n if (isUndefined(values)) {\n data = getLocale(key);\n } else {\n data = defineLocale(key, values);\n }\n\n if (data) {\n // moment.duration._locale = moment._locale = data;\n globalLocale = data;\n } else {\n if (typeof console !== 'undefined' && console.warn) {\n //warn user if arguments are passed but the locale could not be set\n console.warn(\n 'Locale ' + key + ' not found. Did you forget to load it?'\n );\n }\n }\n }\n\n return globalLocale._abbr;\n }\n\n function defineLocale(name, config) {\n if (config !== null) {\n var locale,\n parentConfig = baseConfig;\n config.abbr = name;\n if (locales[name] != null) {\n deprecateSimple(\n 'defineLocaleOverride',\n 'use moment.updateLocale(localeName, config) to change ' +\n 'an existing locale. moment.defineLocale(localeName, ' +\n 'config) should only be used for creating a new locale ' +\n 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'\n );\n parentConfig = locales[name]._config;\n } else if (config.parentLocale != null) {\n if (locales[config.parentLocale] != null) {\n parentConfig = locales[config.parentLocale]._config;\n } else {\n locale = loadLocale(config.parentLocale);\n if (locale != null) {\n parentConfig = locale._config;\n } else {\n if (!localeFamilies[config.parentLocale]) {\n localeFamilies[config.parentLocale] = [];\n }\n localeFamilies[config.parentLocale].push({\n name: name,\n config: config,\n });\n return null;\n }\n }\n }\n locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n if (localeFamilies[name]) {\n localeFamilies[name].forEach(function (x) {\n defineLocale(x.name, x.config);\n });\n }\n\n // backwards compat for now: also set the locale\n // make sure we set the locale AFTER all child locales have been\n // created, so we won't end up with the child locale set.\n getSetGlobalLocale(name);\n\n return locales[name];\n } else {\n // useful for testing\n delete locales[name];\n return null;\n }\n }\n\n function updateLocale(name, config) {\n if (config != null) {\n var locale,\n tmpLocale,\n parentConfig = baseConfig;\n\n if (locales[name] != null && locales[name].parentLocale != null) {\n // Update existing child locale in-place to avoid memory-leaks\n locales[name].set(mergeConfigs(locales[name]._config, config));\n } else {\n // MERGE\n tmpLocale = loadLocale(name);\n if (tmpLocale != null) {\n parentConfig = tmpLocale._config;\n }\n config = mergeConfigs(parentConfig, config);\n if (tmpLocale == null) {\n // updateLocale is called for creating a new locale\n // Set abbr so it will have a name (getters return\n // undefined otherwise).\n config.abbr = name;\n }\n locale = new Locale(config);\n locale.parentLocale = locales[name];\n locales[name] = locale;\n }\n\n // backwards compat for now: also set the locale\n getSetGlobalLocale(name);\n } else {\n // pass null for config to unupdate, useful for tests\n if (locales[name] != null) {\n if (locales[name].parentLocale != null) {\n locales[name] = locales[name].parentLocale;\n if (name === getSetGlobalLocale()) {\n getSetGlobalLocale(name);\n }\n } else if (locales[name] != null) {\n delete locales[name];\n }\n }\n }\n return locales[name];\n }\n\n // returns locale data\n function getLocale(key) {\n var locale;\n\n if (key && key._locale && key._locale._abbr) {\n key = key._locale._abbr;\n }\n\n if (!key) {\n return globalLocale;\n }\n\n if (!isArray(key)) {\n //short-circuit everything else\n locale = loadLocale(key);\n if (locale) {\n return locale;\n }\n key = [key];\n }\n\n return chooseLocale(key);\n }\n\n function listLocales() {\n return keys(locales);\n }\n\n function checkOverflow(m) {\n var overflow,\n a = m._a;\n\n if (a && getParsingFlags(m).overflow === -2) {\n overflow =\n a[MONTH] < 0 || a[MONTH] > 11\n ? MONTH\n : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])\n ? DATE\n : a[HOUR] < 0 ||\n a[HOUR] > 24 ||\n (a[HOUR] === 24 &&\n (a[MINUTE] !== 0 ||\n a[SECOND] !== 0 ||\n a[MILLISECOND] !== 0))\n ? HOUR\n : a[MINUTE] < 0 || a[MINUTE] > 59\n ? MINUTE\n : a[SECOND] < 0 || a[SECOND] > 59\n ? SECOND\n : a[MILLISECOND] < 0 || a[MILLISECOND] > 999\n ? MILLISECOND\n : -1;\n\n if (\n getParsingFlags(m)._overflowDayOfYear &&\n (overflow < YEAR || overflow > DATE)\n ) {\n overflow = DATE;\n }\n if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n overflow = WEEK;\n }\n if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n overflow = WEEKDAY;\n }\n\n getParsingFlags(m).overflow = overflow;\n }\n\n return m;\n }\n\n // iso 8601 regex\n // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n var extendedIsoRegex =\n /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n basicIsoRegex =\n /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/,\n isoDates = [\n ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n ['YYYY-DDD', /\\d{4}-\\d{3}/],\n ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n ['YYYYYYMMDD', /[+-]\\d{10}/],\n ['YYYYMMDD', /\\d{8}/],\n ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n ['YYYYDDD', /\\d{7}/],\n ['YYYYMM', /\\d{6}/, false],\n ['YYYY', /\\d{4}/, false],\n ],\n // iso time formats and regexes\n isoTimes = [\n ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n ['HH:mm', /\\d\\d:\\d\\d/],\n ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n ['HHmm', /\\d\\d\\d\\d/],\n ['HH', /\\d\\d/],\n ],\n aspNetJsonRegex = /^\\/?Date\\((-?\\d+)/i,\n // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n rfc2822 =\n /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,\n obsOffsets = {\n UT: 0,\n GMT: 0,\n EDT: -4 * 60,\n EST: -5 * 60,\n CDT: -5 * 60,\n CST: -6 * 60,\n MDT: -6 * 60,\n MST: -7 * 60,\n PDT: -7 * 60,\n PST: -8 * 60,\n };\n\n // date from iso format\n function configFromISO(config) {\n var i,\n l,\n string = config._i,\n match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n allowTime,\n dateFormat,\n timeFormat,\n tzFormat,\n isoDatesLen = isoDates.length,\n isoTimesLen = isoTimes.length;\n\n if (match) {\n getParsingFlags(config).iso = true;\n for (i = 0, l = isoDatesLen; i < l; i++) {\n if (isoDates[i][1].exec(match[1])) {\n dateFormat = isoDates[i][0];\n allowTime = isoDates[i][2] !== false;\n break;\n }\n }\n if (dateFormat == null) {\n config._isValid = false;\n return;\n }\n if (match[3]) {\n for (i = 0, l = isoTimesLen; i < l; i++) {\n if (isoTimes[i][1].exec(match[3])) {\n // match[2] should be 'T' or space\n timeFormat = (match[2] || ' ') + isoTimes[i][0];\n break;\n }\n }\n if (timeFormat == null) {\n config._isValid = false;\n return;\n }\n }\n if (!allowTime && timeFormat != null) {\n config._isValid = false;\n return;\n }\n if (match[4]) {\n if (tzRegex.exec(match[4])) {\n tzFormat = 'Z';\n } else {\n config._isValid = false;\n return;\n }\n }\n config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n configFromStringAndFormat(config);\n } else {\n config._isValid = false;\n }\n }\n\n function extractFromRFC2822Strings(\n yearStr,\n monthStr,\n dayStr,\n hourStr,\n minuteStr,\n secondStr\n ) {\n var result = [\n untruncateYear(yearStr),\n defaultLocaleMonthsShort.indexOf(monthStr),\n parseInt(dayStr, 10),\n parseInt(hourStr, 10),\n parseInt(minuteStr, 10),\n ];\n\n if (secondStr) {\n result.push(parseInt(secondStr, 10));\n }\n\n return result;\n }\n\n function untruncateYear(yearStr) {\n var year = parseInt(yearStr, 10);\n if (year <= 49) {\n return 2000 + year;\n } else if (year <= 999) {\n return 1900 + year;\n }\n return year;\n }\n\n function preprocessRFC2822(s) {\n // Remove comments and folding whitespace and replace multiple-spaces with a single space\n return s\n .replace(/\\([^()]*\\)|[\\n\\t]/g, ' ')\n .replace(/(\\s\\s+)/g, ' ')\n .replace(/^\\s\\s*/, '')\n .replace(/\\s\\s*$/, '');\n }\n\n function checkWeekday(weekdayStr, parsedInput, config) {\n if (weekdayStr) {\n // TODO: Replace the vanilla JS Date object with an independent day-of-week check.\n var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n weekdayActual = new Date(\n parsedInput[0],\n parsedInput[1],\n parsedInput[2]\n ).getDay();\n if (weekdayProvided !== weekdayActual) {\n getParsingFlags(config).weekdayMismatch = true;\n config._isValid = false;\n return false;\n }\n }\n return true;\n }\n\n function calculateOffset(obsOffset, militaryOffset, numOffset) {\n if (obsOffset) {\n return obsOffsets[obsOffset];\n } else if (militaryOffset) {\n // the only allowed military tz is Z\n return 0;\n } else {\n var hm = parseInt(numOffset, 10),\n m = hm % 100,\n h = (hm - m) / 100;\n return h * 60 + m;\n }\n }\n\n // date and time from ref 2822 format\n function configFromRFC2822(config) {\n var match = rfc2822.exec(preprocessRFC2822(config._i)),\n parsedArray;\n if (match) {\n parsedArray = extractFromRFC2822Strings(\n match[4],\n match[3],\n match[2],\n match[5],\n match[6],\n match[7]\n );\n if (!checkWeekday(match[1], parsedArray, config)) {\n return;\n }\n\n config._a = parsedArray;\n config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n config._d = createUTCDate.apply(null, config._a);\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n getParsingFlags(config).rfc2822 = true;\n } else {\n config._isValid = false;\n }\n }\n\n // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict\n function configFromString(config) {\n var matched = aspNetJsonRegex.exec(config._i);\n if (matched !== null) {\n config._d = new Date(+matched[1]);\n return;\n }\n\n configFromISO(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n configFromRFC2822(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n if (config._strict) {\n config._isValid = false;\n } else {\n // Final attempt, use Input Fallback\n hooks.createFromInputFallback(config);\n }\n }\n\n hooks.createFromInputFallback = deprecate(\n 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n 'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n function (config) {\n config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n }\n );\n\n // Pick the first defined of two or three arguments.\n function defaults(a, b, c) {\n if (a != null) {\n return a;\n }\n if (b != null) {\n return b;\n }\n return c;\n }\n\n function currentDateArray(config) {\n // hooks is actually the exported moment object\n var nowValue = new Date(hooks.now());\n if (config._useUTC) {\n return [\n nowValue.getUTCFullYear(),\n nowValue.getUTCMonth(),\n nowValue.getUTCDate(),\n ];\n }\n return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n }\n\n // convert an array to a date.\n // the array should mirror the parameters below\n // note: all values past the year are optional and will default to the lowest possible value.\n // [year, month, day , hour, minute, second, millisecond]\n function configFromArray(config) {\n var i,\n date,\n input = [],\n currentDate,\n expectedWeekday,\n yearToUse;\n\n if (config._d) {\n return;\n }\n\n currentDate = currentDateArray(config);\n\n //compute day of the year from weeks and weekdays\n if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n dayOfYearFromWeekInfo(config);\n }\n\n //if the day of the year is set, figure out what it is\n if (config._dayOfYear != null) {\n yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n if (\n config._dayOfYear > daysInYear(yearToUse) ||\n config._dayOfYear === 0\n ) {\n getParsingFlags(config)._overflowDayOfYear = true;\n }\n\n date = createUTCDate(yearToUse, 0, config._dayOfYear);\n config._a[MONTH] = date.getUTCMonth();\n config._a[DATE] = date.getUTCDate();\n }\n\n // Default to current date.\n // * if no year, month, day of month are given, default to today\n // * if day of month is given, default month and year\n // * if month is given, default only year\n // * if year is given, don't default anything\n for (i = 0; i < 3 && config._a[i] == null; ++i) {\n config._a[i] = input[i] = currentDate[i];\n }\n\n // Zero out whatever was not defaulted, including time\n for (; i < 7; i++) {\n config._a[i] = input[i] =\n config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];\n }\n\n // Check for 24:00:00.000\n if (\n config._a[HOUR] === 24 &&\n config._a[MINUTE] === 0 &&\n config._a[SECOND] === 0 &&\n config._a[MILLISECOND] === 0\n ) {\n config._nextDay = true;\n config._a[HOUR] = 0;\n }\n\n config._d = (config._useUTC ? createUTCDate : createDate).apply(\n null,\n input\n );\n expectedWeekday = config._useUTC\n ? config._d.getUTCDay()\n : config._d.getDay();\n\n // Apply timezone offset from input. The actual utcOffset can be changed\n // with parseZone.\n if (config._tzm != null) {\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n }\n\n if (config._nextDay) {\n config._a[HOUR] = 24;\n }\n\n // check for mismatching day of week\n if (\n config._w &&\n typeof config._w.d !== 'undefined' &&\n config._w.d !== expectedWeekday\n ) {\n getParsingFlags(config).weekdayMismatch = true;\n }\n }\n\n function dayOfYearFromWeekInfo(config) {\n var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;\n\n w = config._w;\n if (w.GG != null || w.W != null || w.E != null) {\n dow = 1;\n doy = 4;\n\n // TODO: We need to take the current isoWeekYear, but that depends on\n // how we interpret now (local, utc, fixed offset). So create\n // a now version of current config (take local/utc/offset flags, and\n // create now).\n weekYear = defaults(\n w.GG,\n config._a[YEAR],\n weekOfYear(createLocal(), 1, 4).year\n );\n week = defaults(w.W, 1);\n weekday = defaults(w.E, 1);\n if (weekday < 1 || weekday > 7) {\n weekdayOverflow = true;\n }\n } else {\n dow = config._locale._week.dow;\n doy = config._locale._week.doy;\n\n curWeek = weekOfYear(createLocal(), dow, doy);\n\n weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n // Default to current week.\n week = defaults(w.w, curWeek.week);\n\n if (w.d != null) {\n // weekday -- low day numbers are considered next week\n weekday = w.d;\n if (weekday < 0 || weekday > 6) {\n weekdayOverflow = true;\n }\n } else if (w.e != null) {\n // local weekday -- counting starts from beginning of week\n weekday = w.e + dow;\n if (w.e < 0 || w.e > 6) {\n weekdayOverflow = true;\n }\n } else {\n // default to beginning of week\n weekday = dow;\n }\n }\n if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n getParsingFlags(config)._overflowWeeks = true;\n } else if (weekdayOverflow != null) {\n getParsingFlags(config)._overflowWeekday = true;\n } else {\n temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n config._a[YEAR] = temp.year;\n config._dayOfYear = temp.dayOfYear;\n }\n }\n\n // constant that refers to the ISO standard\n hooks.ISO_8601 = function () {};\n\n // constant that refers to the RFC 2822 form\n hooks.RFC_2822 = function () {};\n\n // date from string and format string\n function configFromStringAndFormat(config) {\n // TODO: Move this to another part of the creation flow to prevent circular deps\n if (config._f === hooks.ISO_8601) {\n configFromISO(config);\n return;\n }\n if (config._f === hooks.RFC_2822) {\n configFromRFC2822(config);\n return;\n }\n config._a = [];\n getParsingFlags(config).empty = true;\n\n // This array is used to make a Date, either with `new Date` or `Date.UTC`\n var string = '' + config._i,\n i,\n parsedInput,\n tokens,\n token,\n skipped,\n stringLength = string.length,\n totalParsedInputLength = 0,\n era,\n tokenLen;\n\n tokens =\n expandFormat(config._f, config._locale).match(formattingTokens) || [];\n tokenLen = tokens.length;\n for (i = 0; i < tokenLen; i++) {\n token = tokens[i];\n parsedInput = (string.match(getParseRegexForToken(token, config)) ||\n [])[0];\n if (parsedInput) {\n skipped = string.substr(0, string.indexOf(parsedInput));\n if (skipped.length > 0) {\n getParsingFlags(config).unusedInput.push(skipped);\n }\n string = string.slice(\n string.indexOf(parsedInput) + parsedInput.length\n );\n totalParsedInputLength += parsedInput.length;\n }\n // don't parse if it's not a known token\n if (formatTokenFunctions[token]) {\n if (parsedInput) {\n getParsingFlags(config).empty = false;\n } else {\n getParsingFlags(config).unusedTokens.push(token);\n }\n addTimeToArrayFromToken(token, parsedInput, config);\n } else if (config._strict && !parsedInput) {\n getParsingFlags(config).unusedTokens.push(token);\n }\n }\n\n // add remaining unparsed input length to the string\n getParsingFlags(config).charsLeftOver =\n stringLength - totalParsedInputLength;\n if (string.length > 0) {\n getParsingFlags(config).unusedInput.push(string);\n }\n\n // clear _12h flag if hour is <= 12\n if (\n config._a[HOUR] <= 12 &&\n getParsingFlags(config).bigHour === true &&\n config._a[HOUR] > 0\n ) {\n getParsingFlags(config).bigHour = undefined;\n }\n\n getParsingFlags(config).parsedDateParts = config._a.slice(0);\n getParsingFlags(config).meridiem = config._meridiem;\n // handle meridiem\n config._a[HOUR] = meridiemFixWrap(\n config._locale,\n config._a[HOUR],\n config._meridiem\n );\n\n // handle era\n era = getParsingFlags(config).era;\n if (era !== null) {\n config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);\n }\n\n configFromArray(config);\n checkOverflow(config);\n }\n\n function meridiemFixWrap(locale, hour, meridiem) {\n var isPm;\n\n if (meridiem == null) {\n // nothing to do\n return hour;\n }\n if (locale.meridiemHour != null) {\n return locale.meridiemHour(hour, meridiem);\n } else if (locale.isPM != null) {\n // Fallback\n isPm = locale.isPM(meridiem);\n if (isPm && hour < 12) {\n hour += 12;\n }\n if (!isPm && hour === 12) {\n hour = 0;\n }\n return hour;\n } else {\n // this is not supposed to happen\n return hour;\n }\n }\n\n // date from string and array of format strings\n function configFromStringAndArray(config) {\n var tempConfig,\n bestMoment,\n scoreToBeat,\n i,\n currentScore,\n validFormatFound,\n bestFormatIsValid = false,\n configfLen = config._f.length;\n\n if (configfLen === 0) {\n getParsingFlags(config).invalidFormat = true;\n config._d = new Date(NaN);\n return;\n }\n\n for (i = 0; i < configfLen; i++) {\n currentScore = 0;\n validFormatFound = false;\n tempConfig = copyConfig({}, config);\n if (config._useUTC != null) {\n tempConfig._useUTC = config._useUTC;\n }\n tempConfig._f = config._f[i];\n configFromStringAndFormat(tempConfig);\n\n if (isValid(tempConfig)) {\n validFormatFound = true;\n }\n\n // if there is any input that was not parsed add a penalty for that format\n currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n //or tokens\n currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n getParsingFlags(tempConfig).score = currentScore;\n\n if (!bestFormatIsValid) {\n if (\n scoreToBeat == null ||\n currentScore < scoreToBeat ||\n validFormatFound\n ) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n if (validFormatFound) {\n bestFormatIsValid = true;\n }\n }\n } else {\n if (currentScore < scoreToBeat) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n }\n }\n }\n\n extend(config, bestMoment || tempConfig);\n }\n\n function configFromObject(config) {\n if (config._d) {\n return;\n }\n\n var i = normalizeObjectUnits(config._i),\n dayOrDate = i.day === undefined ? i.date : i.day;\n config._a = map(\n [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],\n function (obj) {\n return obj && parseInt(obj, 10);\n }\n );\n\n configFromArray(config);\n }\n\n function createFromConfig(config) {\n var res = new Moment(checkOverflow(prepareConfig(config)));\n if (res._nextDay) {\n // Adding is smart enough around DST\n res.add(1, 'd');\n res._nextDay = undefined;\n }\n\n return res;\n }\n\n function prepareConfig(config) {\n var input = config._i,\n format = config._f;\n\n config._locale = config._locale || getLocale(config._l);\n\n if (input === null || (format === undefined && input === '')) {\n return createInvalid({ nullInput: true });\n }\n\n if (typeof input === 'string') {\n config._i = input = config._locale.preparse(input);\n }\n\n if (isMoment(input)) {\n return new Moment(checkOverflow(input));\n } else if (isDate(input)) {\n config._d = input;\n } else if (isArray(format)) {\n configFromStringAndArray(config);\n } else if (format) {\n configFromStringAndFormat(config);\n } else {\n configFromInput(config);\n }\n\n if (!isValid(config)) {\n config._d = null;\n }\n\n return config;\n }\n\n function configFromInput(config) {\n var input = config._i;\n if (isUndefined(input)) {\n config._d = new Date(hooks.now());\n } else if (isDate(input)) {\n config._d = new Date(input.valueOf());\n } else if (typeof input === 'string') {\n configFromString(config);\n } else if (isArray(input)) {\n config._a = map(input.slice(0), function (obj) {\n return parseInt(obj, 10);\n });\n configFromArray(config);\n } else if (isObject(input)) {\n configFromObject(config);\n } else if (isNumber(input)) {\n // from milliseconds\n config._d = new Date(input);\n } else {\n hooks.createFromInputFallback(config);\n }\n }\n\n function createLocalOrUTC(input, format, locale, strict, isUTC) {\n var c = {};\n\n if (format === true || format === false) {\n strict = format;\n format = undefined;\n }\n\n if (locale === true || locale === false) {\n strict = locale;\n locale = undefined;\n }\n\n if (\n (isObject(input) && isObjectEmpty(input)) ||\n (isArray(input) && input.length === 0)\n ) {\n input = undefined;\n }\n // object construction must be done this way.\n // https://github.com/moment/moment/issues/1423\n c._isAMomentObject = true;\n c._useUTC = c._isUTC = isUTC;\n c._l = locale;\n c._i = input;\n c._f = format;\n c._strict = strict;\n\n return createFromConfig(c);\n }\n\n function createLocal(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, false);\n }\n\n var prototypeMin = deprecate(\n 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other < this ? this : other;\n } else {\n return createInvalid();\n }\n }\n ),\n prototypeMax = deprecate(\n 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other > this ? this : other;\n } else {\n return createInvalid();\n }\n }\n );\n\n // Pick a moment m from moments so that m[fn](other) is true for all\n // other. This relies on the function fn to be transitive.\n //\n // moments should either be an array of moment objects or an array, whose\n // first element is an array of moment objects.\n function pickBy(fn, moments) {\n var res, i;\n if (moments.length === 1 && isArray(moments[0])) {\n moments = moments[0];\n }\n if (!moments.length) {\n return createLocal();\n }\n res = moments[0];\n for (i = 1; i < moments.length; ++i) {\n if (!moments[i].isValid() || moments[i][fn](res)) {\n res = moments[i];\n }\n }\n return res;\n }\n\n // TODO: Use [].sort instead?\n function min() {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isBefore', args);\n }\n\n function max() {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isAfter', args);\n }\n\n var now = function () {\n return Date.now ? Date.now() : +new Date();\n };\n\n var ordering = [\n 'year',\n 'quarter',\n 'month',\n 'week',\n 'day',\n 'hour',\n 'minute',\n 'second',\n 'millisecond',\n ];\n\n function isDurationValid(m) {\n var key,\n unitHasDecimal = false,\n i,\n orderLen = ordering.length;\n for (key in m) {\n if (\n hasOwnProp(m, key) &&\n !(\n indexOf.call(ordering, key) !== -1 &&\n (m[key] == null || !isNaN(m[key]))\n )\n ) {\n return false;\n }\n }\n\n for (i = 0; i < orderLen; ++i) {\n if (m[ordering[i]]) {\n if (unitHasDecimal) {\n return false; // only allow non-integers for smallest unit\n }\n if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n unitHasDecimal = true;\n }\n }\n }\n\n return true;\n }\n\n function isValid$1() {\n return this._isValid;\n }\n\n function createInvalid$1() {\n return createDuration(NaN);\n }\n\n function Duration(duration) {\n var normalizedInput = normalizeObjectUnits(duration),\n years = normalizedInput.year || 0,\n quarters = normalizedInput.quarter || 0,\n months = normalizedInput.month || 0,\n weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n days = normalizedInput.day || 0,\n hours = normalizedInput.hour || 0,\n minutes = normalizedInput.minute || 0,\n seconds = normalizedInput.second || 0,\n milliseconds = normalizedInput.millisecond || 0;\n\n this._isValid = isDurationValid(normalizedInput);\n\n // representation for dateAddRemove\n this._milliseconds =\n +milliseconds +\n seconds * 1e3 + // 1000\n minutes * 6e4 + // 1000 * 60\n hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n // Because of dateAddRemove treats 24 hours as different from a\n // day when working around DST, we need to store them separately\n this._days = +days + weeks * 7;\n // It is impossible to translate months into days without knowing\n // which months you are are talking about, so we have to store\n // it separately.\n this._months = +months + quarters * 3 + years * 12;\n\n this._data = {};\n\n this._locale = getLocale();\n\n this._bubble();\n }\n\n function isDuration(obj) {\n return obj instanceof Duration;\n }\n\n function absRound(number) {\n if (number < 0) {\n return Math.round(-1 * number) * -1;\n } else {\n return Math.round(number);\n }\n }\n\n // compare two arrays, return the number of differences\n function compareArrays(array1, array2, dontConvert) {\n var len = Math.min(array1.length, array2.length),\n lengthDiff = Math.abs(array1.length - array2.length),\n diffs = 0,\n i;\n for (i = 0; i < len; i++) {\n if (\n (dontConvert && array1[i] !== array2[i]) ||\n (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))\n ) {\n diffs++;\n }\n }\n return diffs + lengthDiff;\n }\n\n // FORMATTING\n\n function offset(token, separator) {\n addFormatToken(token, 0, 0, function () {\n var offset = this.utcOffset(),\n sign = '+';\n if (offset < 0) {\n offset = -offset;\n sign = '-';\n }\n return (\n sign +\n zeroFill(~~(offset / 60), 2) +\n separator +\n zeroFill(~~offset % 60, 2)\n );\n });\n }\n\n offset('Z', ':');\n offset('ZZ', '');\n\n // PARSING\n\n addRegexToken('Z', matchShortOffset);\n addRegexToken('ZZ', matchShortOffset);\n addParseToken(['Z', 'ZZ'], function (input, array, config) {\n config._useUTC = true;\n config._tzm = offsetFromString(matchShortOffset, input);\n });\n\n // HELPERS\n\n // timezone chunker\n // '+10:00' > ['10', '00']\n // '-1530' > ['-15', '30']\n var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n function offsetFromString(matcher, string) {\n var matches = (string || '').match(matcher),\n chunk,\n parts,\n minutes;\n\n if (matches === null) {\n return null;\n }\n\n chunk = matches[matches.length - 1] || [];\n parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;\n }\n\n // Return a moment from input, that is local/utc/zone equivalent to model.\n function cloneWithOffset(input, model) {\n var res, diff;\n if (model._isUTC) {\n res = model.clone();\n diff =\n (isMoment(input) || isDate(input)\n ? input.valueOf()\n : createLocal(input).valueOf()) - res.valueOf();\n // Use low-level api, because this fn is low-level api.\n res._d.setTime(res._d.valueOf() + diff);\n hooks.updateOffset(res, false);\n return res;\n } else {\n return createLocal(input).local();\n }\n }\n\n function getDateOffset(m) {\n // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n // https://github.com/moment/moment/pull/1871\n return -Math.round(m._d.getTimezoneOffset());\n }\n\n // HOOKS\n\n // This function will be called whenever a moment is mutated.\n // It is intended to keep the offset in sync with the timezone.\n hooks.updateOffset = function () {};\n\n // MOMENTS\n\n // keepLocalTime = true means only change the timezone, without\n // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n // +0200, so we adjust the time as needed, to be valid.\n //\n // Keeping the time actually adds/subtracts (one hour)\n // from the actual represented time. That is why we call updateOffset\n // a second time. In case it wants us to change the offset again\n // _changeInProgress == true case, then we have to adjust, because\n // there is no such time in the given timezone.\n function getSetOffset(input, keepLocalTime, keepMinutes) {\n var offset = this._offset || 0,\n localAdjust;\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n if (input != null) {\n if (typeof input === 'string') {\n input = offsetFromString(matchShortOffset, input);\n if (input === null) {\n return this;\n }\n } else if (Math.abs(input) < 16 && !keepMinutes) {\n input = input * 60;\n }\n if (!this._isUTC && keepLocalTime) {\n localAdjust = getDateOffset(this);\n }\n this._offset = input;\n this._isUTC = true;\n if (localAdjust != null) {\n this.add(localAdjust, 'm');\n }\n if (offset !== input) {\n if (!keepLocalTime || this._changeInProgress) {\n addSubtract(\n this,\n createDuration(input - offset, 'm'),\n 1,\n false\n );\n } else if (!this._changeInProgress) {\n this._changeInProgress = true;\n hooks.updateOffset(this, true);\n this._changeInProgress = null;\n }\n }\n return this;\n } else {\n return this._isUTC ? offset : getDateOffset(this);\n }\n }\n\n function getSetZone(input, keepLocalTime) {\n if (input != null) {\n if (typeof input !== 'string') {\n input = -input;\n }\n\n this.utcOffset(input, keepLocalTime);\n\n return this;\n } else {\n return -this.utcOffset();\n }\n }\n\n function setOffsetToUTC(keepLocalTime) {\n return this.utcOffset(0, keepLocalTime);\n }\n\n function setOffsetToLocal(keepLocalTime) {\n if (this._isUTC) {\n this.utcOffset(0, keepLocalTime);\n this._isUTC = false;\n\n if (keepLocalTime) {\n this.subtract(getDateOffset(this), 'm');\n }\n }\n return this;\n }\n\n function setOffsetToParsedOffset() {\n if (this._tzm != null) {\n this.utcOffset(this._tzm, false, true);\n } else if (typeof this._i === 'string') {\n var tZone = offsetFromString(matchOffset, this._i);\n if (tZone != null) {\n this.utcOffset(tZone);\n } else {\n this.utcOffset(0, true);\n }\n }\n return this;\n }\n\n function hasAlignedHourOffset(input) {\n if (!this.isValid()) {\n return false;\n }\n input = input ? createLocal(input).utcOffset() : 0;\n\n return (this.utcOffset() - input) % 60 === 0;\n }\n\n function isDaylightSavingTime() {\n return (\n this.utcOffset() > this.clone().month(0).utcOffset() ||\n this.utcOffset() > this.clone().month(5).utcOffset()\n );\n }\n\n function isDaylightSavingTimeShifted() {\n if (!isUndefined(this._isDSTShifted)) {\n return this._isDSTShifted;\n }\n\n var c = {},\n other;\n\n copyConfig(c, this);\n c = prepareConfig(c);\n\n if (c._a) {\n other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n this._isDSTShifted =\n this.isValid() && compareArrays(c._a, other.toArray()) > 0;\n } else {\n this._isDSTShifted = false;\n }\n\n return this._isDSTShifted;\n }\n\n function isLocal() {\n return this.isValid() ? !this._isUTC : false;\n }\n\n function isUtcOffset() {\n return this.isValid() ? this._isUTC : false;\n }\n\n function isUtc() {\n return this.isValid() ? this._isUTC && this._offset === 0 : false;\n }\n\n // ASP.NET json date format regex\n var aspNetRegex = /^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,\n // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n // and further modified to allow for strings containing both week and day\n isoRegex =\n /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n function createDuration(input, key) {\n var duration = input,\n // matching against regexp is expensive, do it on demand\n match = null,\n sign,\n ret,\n diffRes;\n\n if (isDuration(input)) {\n duration = {\n ms: input._milliseconds,\n d: input._days,\n M: input._months,\n };\n } else if (isNumber(input) || !isNaN(+input)) {\n duration = {};\n if (key) {\n duration[key] = +input;\n } else {\n duration.milliseconds = +input;\n }\n } else if ((match = aspNetRegex.exec(input))) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: 0,\n d: toInt(match[DATE]) * sign,\n h: toInt(match[HOUR]) * sign,\n m: toInt(match[MINUTE]) * sign,\n s: toInt(match[SECOND]) * sign,\n ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match\n };\n } else if ((match = isoRegex.exec(input))) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: parseIso(match[2], sign),\n M: parseIso(match[3], sign),\n w: parseIso(match[4], sign),\n d: parseIso(match[5], sign),\n h: parseIso(match[6], sign),\n m: parseIso(match[7], sign),\n s: parseIso(match[8], sign),\n };\n } else if (duration == null) {\n // checks for null or undefined\n duration = {};\n } else if (\n typeof duration === 'object' &&\n ('from' in duration || 'to' in duration)\n ) {\n diffRes = momentsDifference(\n createLocal(duration.from),\n createLocal(duration.to)\n );\n\n duration = {};\n duration.ms = diffRes.milliseconds;\n duration.M = diffRes.months;\n }\n\n ret = new Duration(duration);\n\n if (isDuration(input) && hasOwnProp(input, '_locale')) {\n ret._locale = input._locale;\n }\n\n if (isDuration(input) && hasOwnProp(input, '_isValid')) {\n ret._isValid = input._isValid;\n }\n\n return ret;\n }\n\n createDuration.fn = Duration.prototype;\n createDuration.invalid = createInvalid$1;\n\n function parseIso(inp, sign) {\n // We'd normally use ~~inp for this, but unfortunately it also\n // converts floats to ints.\n // inp may be undefined, so careful calling replace on it.\n var res = inp && parseFloat(inp.replace(',', '.'));\n // apply sign while we're at it\n return (isNaN(res) ? 0 : res) * sign;\n }\n\n function positiveMomentsDifference(base, other) {\n var res = {};\n\n res.months =\n other.month() - base.month() + (other.year() - base.year()) * 12;\n if (base.clone().add(res.months, 'M').isAfter(other)) {\n --res.months;\n }\n\n res.milliseconds = +other - +base.clone().add(res.months, 'M');\n\n return res;\n }\n\n function momentsDifference(base, other) {\n var res;\n if (!(base.isValid() && other.isValid())) {\n return { milliseconds: 0, months: 0 };\n }\n\n other = cloneWithOffset(other, base);\n if (base.isBefore(other)) {\n res = positiveMomentsDifference(base, other);\n } else {\n res = positiveMomentsDifference(other, base);\n res.milliseconds = -res.milliseconds;\n res.months = -res.months;\n }\n\n return res;\n }\n\n // TODO: remove 'name' arg after deprecation is removed\n function createAdder(direction, name) {\n return function (val, period) {\n var dur, tmp;\n //invert the arguments, but complain about it\n if (period !== null && !isNaN(+period)) {\n deprecateSimple(\n name,\n 'moment().' +\n name +\n '(period, number) is deprecated. Please use moment().' +\n name +\n '(number, period). ' +\n 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'\n );\n tmp = val;\n val = period;\n period = tmp;\n }\n\n dur = createDuration(val, period);\n addSubtract(this, dur, direction);\n return this;\n };\n }\n\n function addSubtract(mom, duration, isAdding, updateOffset) {\n var milliseconds = duration._milliseconds,\n days = absRound(duration._days),\n months = absRound(duration._months);\n\n if (!mom.isValid()) {\n // No op\n return;\n }\n\n updateOffset = updateOffset == null ? true : updateOffset;\n\n if (months) {\n setMonth(mom, get(mom, 'Month') + months * isAdding);\n }\n if (days) {\n set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n }\n if (milliseconds) {\n mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n }\n if (updateOffset) {\n hooks.updateOffset(mom, days || months);\n }\n }\n\n var add = createAdder(1, 'add'),\n subtract = createAdder(-1, 'subtract');\n\n function isString(input) {\n return typeof input === 'string' || input instanceof String;\n }\n\n // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined\n function isMomentInput(input) {\n return (\n isMoment(input) ||\n isDate(input) ||\n isString(input) ||\n isNumber(input) ||\n isNumberOrStringArray(input) ||\n isMomentInputObject(input) ||\n input === null ||\n input === undefined\n );\n }\n\n function isMomentInputObject(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'years',\n 'year',\n 'y',\n 'months',\n 'month',\n 'M',\n 'days',\n 'day',\n 'd',\n 'dates',\n 'date',\n 'D',\n 'hours',\n 'hour',\n 'h',\n 'minutes',\n 'minute',\n 'm',\n 'seconds',\n 'second',\n 's',\n 'milliseconds',\n 'millisecond',\n 'ms',\n ],\n i,\n property,\n propertyLen = properties.length;\n\n for (i = 0; i < propertyLen; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n }\n\n function isNumberOrStringArray(input) {\n var arrayTest = isArray(input),\n dataTypeTest = false;\n if (arrayTest) {\n dataTypeTest =\n input.filter(function (item) {\n return !isNumber(item) && isString(input);\n }).length === 0;\n }\n return arrayTest && dataTypeTest;\n }\n\n function isCalendarSpec(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'sameDay',\n 'nextDay',\n 'lastDay',\n 'nextWeek',\n 'lastWeek',\n 'sameElse',\n ],\n i,\n property;\n\n for (i = 0; i < properties.length; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n }\n\n function getCalendarFormat(myMoment, now) {\n var diff = myMoment.diff(now, 'days', true);\n return diff < -6\n ? 'sameElse'\n : diff < -1\n ? 'lastWeek'\n : diff < 0\n ? 'lastDay'\n : diff < 1\n ? 'sameDay'\n : diff < 2\n ? 'nextDay'\n : diff < 7\n ? 'nextWeek'\n : 'sameElse';\n }\n\n function calendar$1(time, formats) {\n // Support for single parameter, formats only overload to the calendar function\n if (arguments.length === 1) {\n if (!arguments[0]) {\n time = undefined;\n formats = undefined;\n } else if (isMomentInput(arguments[0])) {\n time = arguments[0];\n formats = undefined;\n } else if (isCalendarSpec(arguments[0])) {\n formats = arguments[0];\n time = undefined;\n }\n }\n // We want to compare the start of today, vs this.\n // Getting start-of-today depends on whether we're local/utc/offset or not.\n var now = time || createLocal(),\n sod = cloneWithOffset(now, this).startOf('day'),\n format = hooks.calendarFormat(this, sod) || 'sameElse',\n output =\n formats &&\n (isFunction(formats[format])\n ? formats[format].call(this, now)\n : formats[format]);\n\n return this.format(\n output || this.localeData().calendar(format, this, createLocal(now))\n );\n }\n\n function clone() {\n return new Moment(this);\n }\n\n function isAfter(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() > localInput.valueOf();\n } else {\n return localInput.valueOf() < this.clone().startOf(units).valueOf();\n }\n }\n\n function isBefore(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() < localInput.valueOf();\n } else {\n return this.clone().endOf(units).valueOf() < localInput.valueOf();\n }\n }\n\n function isBetween(from, to, units, inclusivity) {\n var localFrom = isMoment(from) ? from : createLocal(from),\n localTo = isMoment(to) ? to : createLocal(to);\n if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n return false;\n }\n inclusivity = inclusivity || '()';\n return (\n (inclusivity[0] === '('\n ? this.isAfter(localFrom, units)\n : !this.isBefore(localFrom, units)) &&\n (inclusivity[1] === ')'\n ? this.isBefore(localTo, units)\n : !this.isAfter(localTo, units))\n );\n }\n\n function isSame(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input),\n inputMs;\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() === localInput.valueOf();\n } else {\n inputMs = localInput.valueOf();\n return (\n this.clone().startOf(units).valueOf() <= inputMs &&\n inputMs <= this.clone().endOf(units).valueOf()\n );\n }\n }\n\n function isSameOrAfter(input, units) {\n return this.isSame(input, units) || this.isAfter(input, units);\n }\n\n function isSameOrBefore(input, units) {\n return this.isSame(input, units) || this.isBefore(input, units);\n }\n\n function diff(input, units, asFloat) {\n var that, zoneDelta, output;\n\n if (!this.isValid()) {\n return NaN;\n }\n\n that = cloneWithOffset(input, this);\n\n if (!that.isValid()) {\n return NaN;\n }\n\n zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n units = normalizeUnits(units);\n\n switch (units) {\n case 'year':\n output = monthDiff(this, that) / 12;\n break;\n case 'month':\n output = monthDiff(this, that);\n break;\n case 'quarter':\n output = monthDiff(this, that) / 3;\n break;\n case 'second':\n output = (this - that) / 1e3;\n break; // 1000\n case 'minute':\n output = (this - that) / 6e4;\n break; // 1000 * 60\n case 'hour':\n output = (this - that) / 36e5;\n break; // 1000 * 60 * 60\n case 'day':\n output = (this - that - zoneDelta) / 864e5;\n break; // 1000 * 60 * 60 * 24, negate dst\n case 'week':\n output = (this - that - zoneDelta) / 6048e5;\n break; // 1000 * 60 * 60 * 24 * 7, negate dst\n default:\n output = this - that;\n }\n\n return asFloat ? output : absFloor(output);\n }\n\n function monthDiff(a, b) {\n if (a.date() < b.date()) {\n // end-of-month calculations work correct when the start month has more\n // days than the end month.\n return -monthDiff(b, a);\n }\n // difference in months\n var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),\n // b is in (anchor - 1 month, anchor + 1 month)\n anchor = a.clone().add(wholeMonthDiff, 'months'),\n anchor2,\n adjust;\n\n if (b - anchor < 0) {\n anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor - anchor2);\n } else {\n anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor2 - anchor);\n }\n\n //check for negative zero, return zero if negative zero\n return -(wholeMonthDiff + adjust) || 0;\n }\n\n hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n function toString() {\n return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n }\n\n function toISOString(keepOffset) {\n if (!this.isValid()) {\n return null;\n }\n var utc = keepOffset !== true,\n m = utc ? this.clone().utc() : this;\n if (m.year() < 0 || m.year() > 9999) {\n return formatMoment(\n m,\n utc\n ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'\n : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\n }\n if (isFunction(Date.prototype.toISOString)) {\n // native implementation is ~50x faster, use it when we can\n if (utc) {\n return this.toDate().toISOString();\n } else {\n return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)\n .toISOString()\n .replace('Z', formatMoment(m, 'Z'));\n }\n }\n return formatMoment(\n m,\n utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\n }\n\n /**\n * Return a human readable representation of a moment that can\n * also be evaluated to get a new moment which is the same\n *\n * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n */\n function inspect() {\n if (!this.isValid()) {\n return 'moment.invalid(/* ' + this._i + ' */)';\n }\n var func = 'moment',\n zone = '',\n prefix,\n year,\n datetime,\n suffix;\n if (!this.isLocal()) {\n func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n zone = 'Z';\n }\n prefix = '[' + func + '(\"]';\n year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';\n datetime = '-MM-DD[T]HH:mm:ss.SSS';\n suffix = zone + '[\")]';\n\n return this.format(prefix + year + datetime + suffix);\n }\n\n function format(inputString) {\n if (!inputString) {\n inputString = this.isUtc()\n ? hooks.defaultFormatUtc\n : hooks.defaultFormat;\n }\n var output = formatMoment(this, inputString);\n return this.localeData().postformat(output);\n }\n\n function from(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ to: this, from: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function fromNow(withoutSuffix) {\n return this.from(createLocal(), withoutSuffix);\n }\n\n function to(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ from: this, to: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function toNow(withoutSuffix) {\n return this.to(createLocal(), withoutSuffix);\n }\n\n // If passed a locale key, it will set the locale for this\n // instance. Otherwise, it will return the locale configuration\n // variables for this instance.\n function locale(key) {\n var newLocaleData;\n\n if (key === undefined) {\n return this._locale._abbr;\n } else {\n newLocaleData = getLocale(key);\n if (newLocaleData != null) {\n this._locale = newLocaleData;\n }\n return this;\n }\n }\n\n var lang = deprecate(\n 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n function (key) {\n if (key === undefined) {\n return this.localeData();\n } else {\n return this.locale(key);\n }\n }\n );\n\n function localeData() {\n return this._locale;\n }\n\n var MS_PER_SECOND = 1000,\n MS_PER_MINUTE = 60 * MS_PER_SECOND,\n MS_PER_HOUR = 60 * MS_PER_MINUTE,\n MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n\n // actual modulo - handles negative numbers (for dates before 1970):\n function mod$1(dividend, divisor) {\n return ((dividend % divisor) + divisor) % divisor;\n }\n\n function localStartOfDate(y, m, d) {\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return new Date(y, m, d).valueOf();\n }\n }\n\n function utcStartOfDate(y, m, d) {\n // Date.UTC remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return Date.UTC(y, m, d);\n }\n }\n\n function startOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year(), 0, 1);\n break;\n case 'quarter':\n time = startOfDate(\n this.year(),\n this.month() - (this.month() % 3),\n 1\n );\n break;\n case 'month':\n time = startOfDate(this.year(), this.month(), 1);\n break;\n case 'week':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday()\n );\n break;\n case 'isoWeek':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1)\n );\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date());\n break;\n case 'hour':\n time = this._d.valueOf();\n time -= mod$1(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n );\n break;\n case 'minute':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_MINUTE);\n break;\n case 'second':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_SECOND);\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function endOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year() + 1, 0, 1) - 1;\n break;\n case 'quarter':\n time =\n startOfDate(\n this.year(),\n this.month() - (this.month() % 3) + 3,\n 1\n ) - 1;\n break;\n case 'month':\n time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n break;\n case 'week':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday() + 7\n ) - 1;\n break;\n case 'isoWeek':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1) + 7\n ) - 1;\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n break;\n case 'hour':\n time = this._d.valueOf();\n time +=\n MS_PER_HOUR -\n mod$1(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n ) -\n 1;\n break;\n case 'minute':\n time = this._d.valueOf();\n time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n break;\n case 'second':\n time = this._d.valueOf();\n time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function valueOf() {\n return this._d.valueOf() - (this._offset || 0) * 60000;\n }\n\n function unix() {\n return Math.floor(this.valueOf() / 1000);\n }\n\n function toDate() {\n return new Date(this.valueOf());\n }\n\n function toArray() {\n var m = this;\n return [\n m.year(),\n m.month(),\n m.date(),\n m.hour(),\n m.minute(),\n m.second(),\n m.millisecond(),\n ];\n }\n\n function toObject() {\n var m = this;\n return {\n years: m.year(),\n months: m.month(),\n date: m.date(),\n hours: m.hours(),\n minutes: m.minutes(),\n seconds: m.seconds(),\n milliseconds: m.milliseconds(),\n };\n }\n\n function toJSON() {\n // new Date(NaN).toJSON() === null\n return this.isValid() ? this.toISOString() : null;\n }\n\n function isValid$2() {\n return isValid(this);\n }\n\n function parsingFlags() {\n return extend({}, getParsingFlags(this));\n }\n\n function invalidAt() {\n return getParsingFlags(this).overflow;\n }\n\n function creationData() {\n return {\n input: this._i,\n format: this._f,\n locale: this._locale,\n isUTC: this._isUTC,\n strict: this._strict,\n };\n }\n\n addFormatToken('N', 0, 0, 'eraAbbr');\n addFormatToken('NN', 0, 0, 'eraAbbr');\n addFormatToken('NNN', 0, 0, 'eraAbbr');\n addFormatToken('NNNN', 0, 0, 'eraName');\n addFormatToken('NNNNN', 0, 0, 'eraNarrow');\n\n addFormatToken('y', ['y', 1], 'yo', 'eraYear');\n addFormatToken('y', ['yy', 2], 0, 'eraYear');\n addFormatToken('y', ['yyy', 3], 0, 'eraYear');\n addFormatToken('y', ['yyyy', 4], 0, 'eraYear');\n\n addRegexToken('N', matchEraAbbr);\n addRegexToken('NN', matchEraAbbr);\n addRegexToken('NNN', matchEraAbbr);\n addRegexToken('NNNN', matchEraName);\n addRegexToken('NNNNN', matchEraNarrow);\n\n addParseToken(\n ['N', 'NN', 'NNN', 'NNNN', 'NNNNN'],\n function (input, array, config, token) {\n var era = config._locale.erasParse(input, token, config._strict);\n if (era) {\n getParsingFlags(config).era = era;\n } else {\n getParsingFlags(config).invalidEra = input;\n }\n }\n );\n\n addRegexToken('y', matchUnsigned);\n addRegexToken('yy', matchUnsigned);\n addRegexToken('yyy', matchUnsigned);\n addRegexToken('yyyy', matchUnsigned);\n addRegexToken('yo', matchEraYearOrdinal);\n\n addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);\n addParseToken(['yo'], function (input, array, config, token) {\n var match;\n if (config._locale._eraYearOrdinalRegex) {\n match = input.match(config._locale._eraYearOrdinalRegex);\n }\n\n if (config._locale.eraYearOrdinalParse) {\n array[YEAR] = config._locale.eraYearOrdinalParse(input, match);\n } else {\n array[YEAR] = parseInt(input, 10);\n }\n });\n\n function localeEras(m, format) {\n var i,\n l,\n date,\n eras = this._eras || getLocale('en')._eras;\n for (i = 0, l = eras.length; i < l; ++i) {\n switch (typeof eras[i].since) {\n case 'string':\n // truncate time\n date = hooks(eras[i].since).startOf('day');\n eras[i].since = date.valueOf();\n break;\n }\n\n switch (typeof eras[i].until) {\n case 'undefined':\n eras[i].until = +Infinity;\n break;\n case 'string':\n // truncate time\n date = hooks(eras[i].until).startOf('day').valueOf();\n eras[i].until = date.valueOf();\n break;\n }\n }\n return eras;\n }\n\n function localeErasParse(eraName, format, strict) {\n var i,\n l,\n eras = this.eras(),\n name,\n abbr,\n narrow;\n eraName = eraName.toUpperCase();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n name = eras[i].name.toUpperCase();\n abbr = eras[i].abbr.toUpperCase();\n narrow = eras[i].narrow.toUpperCase();\n\n if (strict) {\n switch (format) {\n case 'N':\n case 'NN':\n case 'NNN':\n if (abbr === eraName) {\n return eras[i];\n }\n break;\n\n case 'NNNN':\n if (name === eraName) {\n return eras[i];\n }\n break;\n\n case 'NNNNN':\n if (narrow === eraName) {\n return eras[i];\n }\n break;\n }\n } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {\n return eras[i];\n }\n }\n }\n\n function localeErasConvertYear(era, year) {\n var dir = era.since <= era.until ? +1 : -1;\n if (year === undefined) {\n return hooks(era.since).year();\n } else {\n return hooks(era.since).year() + (year - era.offset) * dir;\n }\n }\n\n function getEraName() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].name;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].name;\n }\n }\n\n return '';\n }\n\n function getEraNarrow() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].narrow;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].narrow;\n }\n }\n\n return '';\n }\n\n function getEraAbbr() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].abbr;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].abbr;\n }\n }\n\n return '';\n }\n\n function getEraYear() {\n var i,\n l,\n dir,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n dir = eras[i].since <= eras[i].until ? +1 : -1;\n\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (\n (eras[i].since <= val && val <= eras[i].until) ||\n (eras[i].until <= val && val <= eras[i].since)\n ) {\n return (\n (this.year() - hooks(eras[i].since).year()) * dir +\n eras[i].offset\n );\n }\n }\n\n return this.year();\n }\n\n function erasNameRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNameRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNameRegex : this._erasRegex;\n }\n\n function erasAbbrRegex(isStrict) {\n if (!hasOwnProp(this, '_erasAbbrRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasAbbrRegex : this._erasRegex;\n }\n\n function erasNarrowRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNarrowRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNarrowRegex : this._erasRegex;\n }\n\n function matchEraAbbr(isStrict, locale) {\n return locale.erasAbbrRegex(isStrict);\n }\n\n function matchEraName(isStrict, locale) {\n return locale.erasNameRegex(isStrict);\n }\n\n function matchEraNarrow(isStrict, locale) {\n return locale.erasNarrowRegex(isStrict);\n }\n\n function matchEraYearOrdinal(isStrict, locale) {\n return locale._eraYearOrdinalRegex || matchUnsigned;\n }\n\n function computeErasParse() {\n var abbrPieces = [],\n namePieces = [],\n narrowPieces = [],\n mixedPieces = [],\n i,\n l,\n erasName,\n erasAbbr,\n erasNarrow,\n eras = this.eras();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n erasName = regexEscape(eras[i].name);\n erasAbbr = regexEscape(eras[i].abbr);\n erasNarrow = regexEscape(eras[i].narrow);\n\n namePieces.push(erasName);\n abbrPieces.push(erasAbbr);\n narrowPieces.push(erasNarrow);\n mixedPieces.push(erasName);\n mixedPieces.push(erasAbbr);\n mixedPieces.push(erasNarrow);\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 // PARSING\n\n addRegexToken('G', matchSigned);\n addRegexToken('g', matchSigned);\n addRegexToken('GG', match1to2, match2);\n addRegexToken('gg', match1to2, match2);\n addRegexToken('GGGG', match1to4, match4);\n addRegexToken('gggg', match1to4, match4);\n addRegexToken('GGGGG', match1to6, match6);\n addRegexToken('ggggg', match1to6, match6);\n\n addWeekParseToken(\n ['gggg', 'ggggg', 'GGGG', 'GGGGG'],\n function (input, week, config, token) {\n week[token.substr(0, 2)] = toInt(input);\n }\n );\n\n addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n week[token] = hooks.parseTwoDigitYear(input);\n });\n\n // MOMENTS\n\n function getSetWeekYear(input) {\n return getSetWeekYearHelper.call(\n this,\n input,\n this.week(),\n this.weekday() + this.localeData()._week.dow,\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 // 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 // PARSING\n\n addRegexToken('D', match1to2, match1to2NoLeadingZero);\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 // 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 // PARSING\n\n addRegexToken('m', match1to2, match1to2HasZero);\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 // PARSING\n\n addRegexToken('s', match1to2, match1to2HasZero);\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 // 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 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 valueOf$1 = asMilliseconds;\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.30.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","//! moment-timezone.js\n//! version : 0.5.48\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.48\",\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\tfunction closest (num, arr) {\n\t\tvar len = arr.length;\n\t\tif (num < arr[0]) {\n\t\t\treturn 0;\n\t\t} else if (len > 1 && arr[len - 1] === Infinity && num >= arr[len - 2]) {\n\t\t\treturn len - 1;\n\t\t} else if (num >= arr[len - 1]) {\n\t\t\treturn -1;\n\t\t}\n\n\t\tvar mid;\n\t\tvar lo = 0;\n\t\tvar hi = len - 1;\n\t\twhile (hi - lo > 1) {\n\t\t\tmid = Math.floor((lo + hi) / 2);\n\t\t\tif (arr[mid] <= num) {\n\t\t\t\tlo = mid;\n\t\t\t} else {\n\t\t\t\thi = mid;\n\t\t\t}\n\t\t}\n\t\treturn hi;\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\ti = closest(target, untils);\n\t\t\tif (i >= 0) {\n\t\t\t\treturn i;\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\tlastOffset = last.offset,\n\t\t\toffsets = [last],\n\t\t\tchange, next, nextOffset, i;\n\n\t\tfor (i = 1; i < 48; i++) {\n\t\t\tnextOffset = new Date(startYear, i, 1).getTimezoneOffset();\n\t\t\tif (nextOffset !== lastOffset) {\n\t\t\t\t// Create OffsetAt here to avoid unnecessary abbr parsing before checking offsets\n\t\t\t\tnext = new OffsetAt(new Date(startYear, i, 1));\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\tlast = next;\n\t\t\t\tlastOffset = nextOffset;\n\t\t\t}\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\tcheckedOffsets = {},\n\t\t\ti, j, offset, guessesOffset;\n\n\t\tfor (i = 0; i < offsetsLength; i++) {\n\t\t\toffset = offsets[i].offset;\n\t\t\tif (checkedOffsets.hasOwnProperty(offset)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tguessesOffset = guesses[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\tcheckedOffsets[offset] = true;\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\tout = moment.utc.apply(null, args),\n\t\t\tzone;\n\n\t\tif (!moment.isMoment(input) && needsOffset(out) && (zone = getZone(name))) {\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 && mom.isValid()) {\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 moment = module.exports = require(\"./moment-timezone\");\nmoment.tz.load(require('./data/packed/latest.json'));\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 =\n '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:\n 'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split(\n '_'\n ),\n weekdays:\n '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 : 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 : 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:\n 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n monthsParseExact: true,\n weekdays:\n '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","const translations = {\n de: {\n address: 'Adresse',\n 'address-place-or-business': 'Adress, Ort or Geschäft',\n 'add-via-button-label': 'Füge Zwischenziel hinzu',\n 'add-via-duration-button-label': 'Set stop duration at via point {{index}}',\n 'add-via-duration-button-label-close':\n 'Close stop duration selector at via point {{index}}',\n 'add-via-duration-button-label-open':\n 'Open stop duration selector at via point {{index}}',\n airplane: 'Flug',\n arrival: 'Ankunft',\n back: 'Zurück',\n bikerentalstation: 'Leihrad-Station',\n bus: 'Bus',\n cancel: 'Abbrechen',\n 'clear-button-label': 'Löschen',\n 'clear-search-history': 'Suchhistorie löschen',\n currentposition: 'Aktuelle Position',\n delete: 'Löschen',\n 'delete-old-searches-header': 'Wollen Sie die Such-Historie löschen?',\n departure: 'Abfahrt',\n destination: 'Ziel',\n 'give-origin': 'Start eingeben.',\n 'give-destination': 'Ziel eingeben.',\n favourite: 'Favoriten',\n ferry: 'Fähre',\n 'future-route': 'Zukünftige Verbindung',\n origin: 'Start',\n 'origin-stop-near-you': 'Start',\n ownlocations: 'Eigene Favoriten',\n loading: 'Laden...',\n 'minute-short': 'min',\n rail: 'Zug',\n search: 'Suche',\n 'search-address-or-place': 'Suche anhand von Adresse oder Ortsangabe',\n 'search-button-label': 'Suche',\n 'search-destination': 'Suche Zielort, Linie or Haltestelle',\n 'search-destination-index': 'Zielort eingeben',\n 'search-destination-results-but-no-search':\n 'Ergebnisse in “Zielort”-Reiter anzeigen',\n 'search-no-results': 'Kein Ort gefunden.',\n 'search-origin': 'Suche Startort, Linie oder Haltestelle',\n 'search-origin-index': 'Startort eingeben',\n 'search-position': 'Standort ermitteln',\n 'search-autosuggest-label': 'Venue, place and stopsearch.',\n 'search-autosuggest-label-instructions-desktop':\n 'Navigate list with arrow keys and select with enter key.',\n 'search-autosuggest-label-instructions-mobile':\n 'Enter the location and navigate in the list by swiping.',\n 'search-autosuggest-label-move-to-destination':\n 'After selecting the starting location you are automatically moved to the destination field.',\n 'search-autosuggest-len': 'There is {{count}} suggestion available',\n 'search-autosuggest-len_plural':\n 'There are {{count}} suggestions available',\n 'search-current-suggestion': 'Aktuelle Auswahl: {{selection}}',\n street: 'Straße',\n subway: 'U-Bahn',\n station: 'Station',\n stop: 'Haltestelle',\n 'stop-near-you': 'Suche Haltestellen und Linien in der Nähe',\n 'stop-near-you-bus': 'Suche Buslinien or Haltestellen',\n 'stop-near-you-citybike': 'Suche Leihrad-Stationen',\n 'stop-near-you-rail': 'Suche Zugverbindungen oder Bahnhöfe',\n 'stop-near-you-subway': 'Suche U-Bahn-Linien oder Haltestellen',\n 'stop-near-you-tram': 'Suche Stadtbahn-Haltestellen-Suche',\n 'today-at': 'Heute um',\n 'tomorrow-at': 'Morgen um',\n tram: 'Straßenbahn',\n 'use-own-position': 'Benutze aktuellen Standort',\n 'select-from-map': 'Wähle Position anhand Karte',\n 'select-from-own-locations': 'Aus eigenen Favoriten auswählen',\n venue: 'Venue',\n 'via-point': 'Zwischenziel',\n where: 'Wohin?',\n place: 'Ort',\n },\n en: {\n address: 'Address',\n 'address-place-or-business': 'Address, place or business',\n 'add-via-button-label': 'Add via point',\n 'add-via-duration-button-label': 'Set stop duration at via point {{index}}',\n 'add-via-duration-button-label-close':\n 'Close stop duration selector at via point {{index}}',\n 'add-via-duration-button-label-open':\n 'Open stop duration selector at via point {{index}}',\n airplane: 'Flight',\n arrival: 'Arrival',\n back: 'Back',\n bikepark: 'Park & Ride for bikes',\n bikerentalstation: 'Bike station',\n bus: 'bus',\n cancel: 'Cancel',\n carpark: 'Park & Ride',\n 'clear-button-label': 'Clear',\n 'clear-search-history': 'Clear search history',\n currentposition: 'Current position',\n delete: 'Delete',\n 'delete-old-searches-header': 'Do you want to clear the search history?',\n departure: 'Departure',\n destination: 'Destination',\n 'give-origin': 'Enter your origin.',\n 'give-destination': 'Enter your destination',\n favourite: 'Favourite',\n ferry: 'Ferry',\n 'future-route': 'Future route',\n origin: 'Start',\n 'origin-stop-near-you': 'Start',\n ownlocations: 'Own locations',\n loading: 'Loading...',\n 'minute-short': 'm',\n platform: 'Platform',\n rail: 'Train',\n required: 'required field',\n search: 'Search',\n 'search-address-or-place': 'Search by address or place name',\n 'search-button-label': 'Search',\n 'search-destination': 'Search destination, route or stop',\n 'search-destination-index': 'Enter destination',\n 'search-destination-results-but-no-search':\n 'View results in the adjacent “Destination” tab',\n 'search-no-results': 'No location',\n 'search-origin': 'Search origin, route or stop',\n 'search-origin-index': 'Enter origin',\n 'search-position': 'Detect location',\n 'search-autosuggest-label': 'Venue, place and stopsearch.',\n 'search-autosuggest-label-instructions-desktop':\n 'Navigate list with arrow keys and select with enter key.',\n 'search-autosuggest-label-instructions-mobile':\n 'Enter the location and navigate in the list by swiping.',\n 'search-autosuggest-label-move-to-destination':\n 'After selecting the starting location you are automatically moved to the destination field.',\n 'search-autosuggest-len': 'There is {{count}} suggestion available',\n 'search-autosuggest-len_plural':\n 'There are {{count}} suggestions available',\n 'search-current-suggestion': 'Current selection: {{selection}}',\n street: 'Street',\n subway: 'Metro',\n station: 'Station',\n stop: 'Stop',\n 'stop-near-you': 'Search stops and routes',\n 'stop-near-you-airplane': 'Search flights or airports',\n 'stop-near-you-bus': 'Search bus routes or stops',\n 'stop-near-you-citybike': 'Search city bike stations',\n 'stop-near-you-rail': 'Search train routes or stations',\n 'stop-near-you-subway': 'Search metro routes or stations ',\n 'stop-near-you-tram': 'Search tram routes or stops',\n 'stop-route-station': 'Bus and stop search',\n 'today-at': 'today at',\n 'tomorrow-at': 'tomorrow at',\n tram: 'Tram',\n track: 'Track',\n 'use-own-position': 'Use current location',\n 'select-from-map': 'Select position from map',\n 'select-from-own-locations': 'Select from own locations',\n venue: 'Venue',\n 'via-point': 'Via point',\n where: 'Where to?',\n place: 'Location',\n },\n fi: {\n address: 'Osoite',\n 'address-place-or-business': 'Osoite, paikka tai yritys',\n 'add-via-button-label': 'Lisää välipiste',\n 'add-via-duration-button-label':\n 'Aseta välipisteelle {{index}} pysähdyksen kesto',\n 'add-via-duration-button-label-close':\n 'Avaa välipisteen {{index}} pysähdyksen kesto valitsin',\n 'add-via-duration-button-label-open':\n 'Sulje välipisteen {{index}} pysähdyksen kesto valitsin',\n airplane: 'Lentokone',\n arrival: 'Perillä',\n back: 'Takaisin',\n vehiclerentalstation: 'Pyöräasema',\n bikepark: 'Liityntäpyöräparkki',\n bus: 'bussi',\n cancel: 'Peruuta',\n carpark: 'Liityntäpysäkointi',\n 'clear-button-label': 'Tyhjennä',\n 'clear-search-history': 'Tyhjennä hakuhistoria',\n currentposition: 'Tämänhetkinen sijainti',\n delete: 'Poista',\n 'delete-old-searches-header': 'Haluatko tyhjentää hakuhistorian?',\n departure: 'Lähtöaika',\n destination: 'Määränpää',\n favourite: 'Suosikki',\n ferry: 'Lautta',\n 'future-route': 'Tuleva reitti',\n 'give-origin': 'Lähtöpaikka',\n 'give-destination': 'Määränpää',\n origin: 'Lähtöpaikka',\n 'origin-stop-near-you': 'Lähtöpaikka',\n ownlocations: 'Omat paikat',\n loading: 'Ladataan...',\n 'minute-short': 'min',\n platform: 'Laituri',\n rail: 'Juna',\n required: 'pakollinen kenttä',\n search: 'Etsi',\n 'search-address-or-place': 'Hae osoitteella tai paikan nimellä',\n 'search-button-label': 'Hae',\n 'search-destination': 'Hae määränpäätä, linjaa tai pysäkkiä',\n 'search-destination-index': 'Syötä määränpää',\n 'search-destination-results-but-no-search':\n 'Katso tulokset viereiseltä Määränpää-välilehdeltä',\n 'search-no-results': 'Ei tuloksia',\n 'search-origin': 'Hae lähtöpaikkaa, linjaa tai pysäkkiä',\n 'search-origin-index': 'Syötä lähtöpaikka',\n 'search-autosuggest-label': 'Paikka, linja ja pysäkkihaku.',\n 'search-autosuggest-label-instructions-desktop':\n 'Navigoi listassa nuolinäppäimillä ja valitse enterillä.',\n 'search-autosuggest-label-instructions-mobile':\n 'Syötä sijainti ja navigoi listassa pyyhkäisemällä.',\n 'search-autosuggest-label-move-to-destination':\n 'Valittuasi lähtöpaikan siirrytään suoraan määränpää-kenttään.',\n 'search-autosuggest-len': ' Löydettiin {{count}} ehdotus',\n 'search-autosuggest-len_plural': ' Löydettiin {{count}} ehdotusta',\n 'search-current-suggestion': 'Tämänhetkinen valinta: {{selection}}',\n 'search-position': 'Paikanna',\n street: 'Katu',\n subway: 'Metro',\n station: 'Asema',\n stop: 'Pysäkki',\n 'stop-near-you': 'Linja, pysäkki tai asema',\n 'stop-near-you-airplane': 'Hae lentoja tai lentoasemaa',\n 'stop-near-you-bus': 'Hae bussilinjaa tai pysäkkiä',\n 'stop-near-you-citybike': 'Hae kaupunkipyöräasemaa',\n 'stop-near-you-rail': 'Hae lähijunaa tai asemaa',\n 'stop-near-you-subway': 'Hae metrolinjaa tai asemaa',\n 'stop-near-you-tram': 'Hae raitiolinjaa tai pysäkkiä',\n 'stop-route-station': 'Linja- ja pysäkkihaku',\n 'today-at': 'tänään klo',\n 'tomorrow-at': 'huomenna klo',\n tram: 'Raitiovaunu',\n track: 'Raide',\n 'use-own-position': 'Käytä nykyistä sijaintia',\n 'select-from-map': 'Valitse sijainti kartalta',\n 'select-from-own-locations': 'Valitse omista paikoista',\n venue: 'Paikka',\n 'via-point': 'Välipiste',\n where: 'Minne mennään?',\n place: 'Paikka',\n },\n pl: {\n address: 'Adres',\n 'address-place-or-business': 'Adres, miejsce lub firma',\n 'add-via-button-label': 'Dodaj punkt pośredni',\n 'add-via-duration-button-label':\n 'Wybierz czas postoju dla punktu {{index}}',\n 'add-via-duration-button-label-close':\n 'Zamknij wybornik czasu postoju w punkcie {{index}}',\n 'add-via-duration-button-label-open':\n 'Otwórz wybornik czasu postoju w punkcie {{index}}',\n airplane: 'Lot',\n arrival: 'Przyjazd',\n back: 'Wróć',\n bikepark: 'Parkuj i Jedź dla rowerów',\n bikerentalstation: 'Stacja rowerowa',\n bus: 'autobus',\n cancel: 'Anuluj',\n carpark: 'Parkuj i Jedź',\n 'clear-button-label': 'Wyczyść',\n 'clear-search-history': 'Wyczyść historię wyszukiwania',\n currentposition: 'Obecne położenie',\n delete: 'Usuń',\n 'delete-old-searches-header':\n 'Czy na pewno chcesz wyczyścić historię wyszukiwania?',\n departure: 'Odjazd',\n destination: 'Cel',\n 'give-origin': 'Wprowadź swój punkt początkowy.',\n 'give-destination': 'Wprowadź swój cel',\n favourite: 'Ulubione',\n ferry: 'Prom',\n 'future-route': 'Przyszła trasa',\n origin: 'Początek',\n 'origin-stop-near-you': 'Początek',\n ownlocations: 'Własne miejsca',\n loading: 'Ładowanie…',\n 'minute-short': 'min.',\n platform: 'Peron',\n rail: 'Pociąg',\n required: 'wymagane pole',\n search: 'Szukaj',\n 'search-address-or-place': 'Szukaj po adresie lub nazwie miejsca',\n 'search-button-label': 'Szukaj',\n 'search-destination': 'Szukaj celu, trasy lub przystanku',\n 'search-destination-index': 'Wprowadź punkt docelowy',\n 'search-destination-results-but-no-search':\n 'Wyświetl wyniki w sąsiedniej karcie „Cel”',\n 'search-no-results': 'Brak lokalizacji',\n 'search-origin': 'Wyszukaj początek, koniec lub punkt pośredni',\n 'search-origin-index': 'Wprowadź punkt początkowy',\n 'search-position': 'Wykryj lokalizację',\n 'search-autosuggest-label': 'Miejsce, lokalizacja i przystanek.',\n 'search-autosuggest-label-instructions-desktop':\n 'Nawiguj po liście używając strzałek i wybieraj klawiszem Enter.',\n 'search-autosuggest-label-instructions-mobile':\n 'Wprowadź lokalizację i nawiguj po liście gestami przesuwania.',\n 'search-autosuggest-label-move-to-destination':\n 'Po wybraniu lokalizacji początkowej, automatycznie przejdziesz do pola miejsca docelowego.',\n 'search-autosuggest-len': 'Dostępna jest {{count}} propozycja',\n 'search-autosuggest-len_few': 'Dostępne są {{count}} propozycje',\n 'search-autosuggest-len_other': 'Dostępne jest {{count}} propozycji',\n 'search-current-suggestion': 'Obecny wybór: {{selection}}',\n street: 'Ulica',\n subway: 'Metro',\n station: 'Stacja',\n stop: 'Przystanek',\n 'stop-near-you': 'Szukaj przystanków i tras',\n 'stop-near-you-airplane': 'Szukaj lotów i lotnisk',\n 'stop-near-you-bus': 'Szukaj tras autobusowych i przystanków',\n 'stop-near-you-citybike': 'Szukaj stacji rowerów miejskich',\n 'stop-near-you-rail': 'Szukaj tras kolejowych i przystanków',\n 'stop-near-you-subway': 'Szukaj tras metra i przystanków ',\n 'stop-near-you-tram': 'Szukaj tras tramwajowych i przystanków',\n 'stop-route-station': 'Wyszukiwanie autobusów i przystanków',\n 'today-at': 'dziś o',\n 'tomorrow-at': 'jutro o',\n tram: 'Tramwaj',\n track: 'Tor',\n 'use-own-position': 'Użyj obecnej lokalizacji',\n 'select-from-map': 'Wybierz miejsce na mapie',\n 'select-from-own-locations': 'Wybierz z własnych miejsc',\n venue: 'Miejsce',\n 'via-point': 'Przez punkt',\n where: 'Dokąd?',\n place: 'Miejsce',\n },\n sv: {\n address: 'Adress',\n 'address-place-or-business': 'Adress, plats eller företag',\n 'add-via-button-label': 'Lägg till viapunkt',\n 'add-via-duration-button-label':\n 'Ställ in varaktighet för viapunkten {{index}}',\n 'add-via-duration-button-label-close':\n 'Stäng väljaren för varaktighet vid via-punkten {{index}}',\n 'add-via-duration-button-label-open':\n 'Öppna väljaren för varaktighet vid via-punkten {{index}}',\n airplane: 'Flyg',\n arrival: 'Anländer',\n back: 'Tillbaka',\n bikerentalstation: 'Stadscykelstation',\n bikepark: 'Anslutningsparkering för cyklar',\n bus: 'Bussi',\n cancel: 'Avbryt',\n carpark: 'Infartsparkering',\n 'clear-button-label': 'Töm',\n 'clear-search-history': 'Töm sökhistoriken',\n currentposition: 'Nuvarande position',\n delete: 'Ta bort',\n 'delete-old-searches-header': 'Vill du tömma sökhistoriken?',\n departure: 'Avgångstid',\n destination: 'Destination',\n favourite: 'Favorit',\n ferry: 'Färja',\n 'future-route': 'Framtida rutt',\n 'give-destination': 'Skriv in din destination',\n 'give-origin': 'Skriv in din avfärdsplats',\n origin: 'Avfärdsplats',\n 'origin-stop-near-you': 'Avfärdsplats',\n ownlocations: 'Egna platser',\n loading: 'Laddar...',\n 'minute-short': 'min',\n platform: 'Plattform',\n rail: 'Tåg',\n required: 'obligatoriskt fält',\n search: 'Sök',\n 'search-address-or-place': 'Sök med adressen eller platsens namn',\n 'search-button-label': 'Sök',\n 'search-destination': 'Sök destination, linje eller hållplats',\n 'search-destination-index': 'Skriv destination',\n 'search-destination-results-but-no-search':\n 'Se resultaten under fliken Destination',\n 'search-no-results': 'Inga sökresultat',\n 'search-origin': 'Sök avfärdsplats, linje eller hållplats',\n 'search-origin-index': 'Skriv avfärdsplats',\n 'search-position': 'Sök position',\n 'search-autosuggest-label': 'Plats, linje och hållplatssökning.',\n 'search-autosuggest-label-instructions-desktop':\n 'Navigera listan med piltangenterna och välj med Enter-tangeten.',\n 'search-autosuggest-label-instructions-mobile':\n 'Ange platsen och navigera i listan genom att svepa.',\n 'search-autosuggest-label-move-to-destination':\n 'Efter att du valt avgångsplatsen tas du direkt till Destination-fältet.',\n 'search-autosuggest-len': 'Hittade {{count}} förslag',\n 'search-current-suggestion': 'Nuvarande val: {{selection}}',\n street: 'Gata',\n subway: 'Metro',\n station: 'Station',\n stop: 'Hållplats',\n 'stop-near-you': 'Sök hållplatser eller linjer',\n 'stop-near-you-airplane': 'Sök flyg eller flygplatser',\n 'stop-near-you-bus': 'Sök busslinjer eller hållplatser',\n 'stop-near-you-citybike': 'Sök stadscykelstationer',\n 'stop-near-you-rail': 'Sök närtåger eller stationer',\n 'stop-near-you-subway': 'Sök metrolinjer eller stationer',\n 'stop-near-you-tram': 'Sök spårvagnlinjer eller hållplatser',\n 'stop-route-station': 'Buss och stopp sökningen',\n 'today-at': 'i dag kl',\n 'tomorrow-at': 'i morgon',\n tram: 'Spårvagn',\n track: 'Spår',\n 'use-own-position': 'Använd min position',\n 'select-from-map': 'Välj position från kartan',\n 'select-from-own-locations': 'Välj från egna platser',\n venue: 'Mötesplats',\n 'via-point': 'Via punkt',\n where: 'Vart vill du åka?',\n place: 'Plats',\n },\n};\n\nexport default translations;\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import PropTypes from 'prop-types';\nimport React, { useState, useEffect, useCallback } from 'react';\nimport ReactModal from 'react-modal';\nimport cx from 'classnames';\nimport Icon from '@digitransit-component/digitransit-component-icon';\nimport DialogModal from '@digitransit-component/digitransit-component-dialog-modal';\nimport Autosuggest from 'react-autosuggest';\nimport mobileStyles from './MobileSearch.scss';\nimport mobileNoScrollStyles from './MobileNoScroll.scss';\n\nclass AutosuggestPatch extends Autosuggest {\n constructor(props) {\n super(props);\n const self = this;\n self.onSuggestionTouchMove = () => {\n self.justSelectedSuggestion = false;\n self.pressedSuggestion = null;\n };\n }\n}\n\nconst MobileSearch = ({\n appElement,\n id,\n closeHandle,\n clearInput,\n value,\n suggestions,\n inputProps,\n fetchFunction,\n renderSuggestion,\n getSuggestionValue,\n ariaLabel,\n label,\n onSuggestionSelected,\n clearOldSearches,\n dialogHeaderText,\n dialogPrimaryButtonText,\n dialogSecondaryButtonText,\n clearInputButtonText,\n focusInput,\n color,\n hoverColor,\n accessiblePrimaryColor,\n searchOpen,\n fontWeights,\n showScroll,\n}) => {\n const styles = showScroll ? mobileStyles : mobileNoScrollStyles;\n\n const inputId = `${id}-input`;\n const labelId = `${id}-label`;\n\n const [isDialogOpen, setDialogOpen] = useState(false);\n const inputRef = React.useRef();\n\n useEffect(() => {\n ReactModal.setAppElement(appElement);\n }, []);\n\n const onClose = useCallback(() => {\n closeHandle();\n });\n\n const onSelect = (e, ref) => {\n if (ref.suggestion.type === 'clear-search-history') {\n setDialogOpen(true);\n } else if (!ref.suggestion.properties.arrowClicked) {\n // Select item if fill input button is not pressed (diagonal arrow in suggestion items)\n onSuggestionSelected(e, ref);\n }\n };\n\n const isKeyboardSelectionEvent = event => {\n const space = [13, ' ', 'Spacebar'];\n const enter = [32, 'Enter'];\n const key = (event && (event.key || event.which || event.keyCode)) || '';\n\n if (!key || !space.concat(enter).includes(key)) {\n return false;\n }\n event.preventDefault();\n return true;\n };\n\n const getValue = suggestion => {\n if (suggestion.type === 'clear-search-history') {\n return '';\n }\n return getSuggestionValue(suggestion);\n };\n\n const renderItem = item => {\n if (item.type === 'clear-search-history') {\n return (\n <button type=\"button\" className={styles['clear-search-history']}>\n {item.labelId}\n </button>\n );\n }\n return renderSuggestion(item);\n };\n\n const renderDialogModal = () => {\n return (\n <DialogModal\n appElement={appElement}\n isModalOpen={isDialogOpen}\n handleClose={() => setDialogOpen(false)}\n headerText={dialogHeaderText}\n primaryButtonText={dialogPrimaryButtonText}\n secondaryButtonText={dialogSecondaryButtonText}\n primaryButtonOnClick={() => {\n clearOldSearches();\n setDialogOpen(false);\n }}\n secondaryButtonOnClick={() => setDialogOpen(false)}\n color={color}\n hoverColor={hoverColor}\n fontWeights={fontWeights}\n />\n );\n };\n\n const clearButton = () => {\n return (\n <button\n type=\"button\"\n className={styles['clear-input']}\n onClick={clearInput}\n onKeyDown={e => isKeyboardSelectionEvent(e) && clearInput()}\n aria-label={clearInputButtonText}\n >\n <Icon img=\"close\" color={color} />\n </button>\n );\n };\n\n const renderContent = () => {\n return (\n <div className={styles['combobox-container']} htmlFor={inputId}>\n <button\n type=\"button\"\n className={styles['combobox-icon']}\n onClick={() => onClose()}\n onKeyDown={e => isKeyboardSelectionEvent(e) && onClose()}\n aria-label={dialogSecondaryButtonText}\n tabIndex={0}\n >\n <Icon img=\"arrow\" />\n </button>\n <span className={styles['right-column']}>\n <span className={styles['combobox-label']} id={labelId}>\n {label}\n </span>\n <AutosuggestPatch\n alwaysRenderSuggestions\n id={id}\n suggestions={suggestions}\n onSuggestionsFetchRequested={fetchFunction}\n getSuggestionValue={getValue}\n renderSuggestion={renderItem}\n // focusInputOnSuggestionClick must be set to true.\n // If set to false, input won't be focused when user clicks on\n // Fill input button in suggestion list. (diagonal arrow in street name items)\n focusInputOnSuggestionClick\n shouldRenderSuggestions={() => true}\n inputProps={{\n ...inputProps,\n className: cx(\n `${styles.input} ${styles[id] || ''} ${\n inputProps.value ? styles.hasValue : ''\n }`,\n ),\n autoFocus: true,\n }}\n renderInputComponent={p => (\n <>\n <input aria-label={ariaLabel} id={id} {...p} />\n {value && clearButton()}\n </>\n )}\n theme={styles}\n onSuggestionSelected={onSelect}\n ref={inputRef}\n />\n </span>\n </div>\n );\n };\n if (focusInput && inputRef.current?.input) {\n inputRef.current.input.focus();\n }\n\n return (\n <ReactModal\n isOpen={searchOpen}\n className={styles['mobile-modal']}\n overlayClassName={styles['mobile-modal-overlay']}\n onAfterClose={onClose}\n shouldCloseOnEsc\n >\n <div\n className={styles['mobile-modal-content']}\n style={{\n '--color': `${color}`,\n '--accessible-primary-color': accessiblePrimaryColor,\n '--hover-color': `${hoverColor}`,\n '--font-weight-medium': fontWeights.medium,\n }}\n >\n {renderContent()}\n {renderDialogModal()}\n </div>\n </ReactModal>\n );\n};\n\nMobileSearch.propTypes = {\n appElement: PropTypes.string.isRequired,\n id: PropTypes.string.isRequired,\n closeHandle: PropTypes.func.isRequired,\n clearInput: PropTypes.func.isRequired,\n value: PropTypes.string,\n clearInputButtonText: PropTypes.string.isRequired,\n // eslint-disable-next-line\n suggestions: PropTypes.arrayOf(PropTypes.object).isRequired,\n inputProps: PropTypes.shape({\n onChange: PropTypes.func.isRequired,\n onBlur: PropTypes.func.isRequired,\n value: PropTypes.string.isRequired,\n placeholder: PropTypes.string.isRequired,\n className: PropTypes.string.isRequired,\n }).isRequired,\n fetchFunction: PropTypes.func.isRequired,\n getSuggestionValue: PropTypes.func.isRequired,\n renderSuggestion: PropTypes.func.isRequired,\n onSuggestionSelected: PropTypes.func.isRequired,\n label: PropTypes.string.isRequired,\n clearOldSearches: PropTypes.func.isRequired,\n ariaLabel: PropTypes.string,\n dialogHeaderText: PropTypes.string,\n dialogPrimaryButtonText: PropTypes.string,\n dialogSecondaryButtonText: PropTypes.string,\n focusInput: PropTypes.bool,\n color: PropTypes.string,\n hoverColor: PropTypes.string,\n accessiblePrimaryColor: PropTypes.string.isRequired,\n searchOpen: PropTypes.bool.isRequired,\n fontWeights: PropTypes.shape({\n medium: PropTypes.number.isRequired,\n }).isRequired,\n showScroll: PropTypes.bool,\n};\n\nMobileSearch.defaultProps = {\n value: undefined,\n ariaLabel: undefined,\n dialogHeaderText: undefined,\n dialogPrimaryButtonText: undefined,\n dialogSecondaryButtonText: undefined,\n focusInput: false,\n color: undefined,\n hoverColor: undefined,\n showScroll: undefined,\n};\n\nexport default MobileSearch;\n","/*! For license information please see index.js.LICENSE.txt */\n!function(e,t){if(\"object\"==typeof exports&&\"object\"==typeof module)module.exports=t(require(\"react\"));else if(\"function\"==typeof define&&define.amd)define([\"react\"],t);else{var n=\"object\"==typeof exports?t(require(\"react\")):t(e.react);for(var o in n)(\"object\"==typeof exports?exports:e)[o]=n[o]}}(\"undefined\"!=typeof self?self:this,(function(e){return function(){var t={888:function(e,t,n){var o,r;r=void 0!==n.g?n.g:\"undefined\"!=typeof window?window:this,o=function(){return function(e){\"use strict\";var t={ignore:\"[data-scroll-ignore]\",header:null,topOnEmptyHash:!0,speed:500,speedAsDuration:!1,durationMax:null,durationMin:null,clip:!0,offset:0,easing:\"easeInOutCubic\",customEasing:null,updateURL:!0,popstate:!0,emitEvents:!0},n=function(){var e={};return Array.prototype.forEach.call(arguments,(function(t){for(var n in t){if(!t.hasOwnProperty(n))return;e[n]=t[n]}})),e},o=function(e){\"#\"===e.charAt(0)&&(e=e.substr(1));for(var t,n=String(e),o=n.length,r=-1,u=\"\",i=n.charCodeAt(0);++r<o;){if(0===(t=n.charCodeAt(r)))throw new InvalidCharacterError(\"Invalid character: the input contains U+0000.\");u+=t>=1&&t<=31||127==t||0===r&&t>=48&&t<=57||1===r&&t>=48&&t<=57&&45===i?\"\\\\\"+t.toString(16)+\" \":t>=128||45===t||95===t||t>=48&&t<=57||t>=65&&t<=90||t>=97&&t<=122?n.charAt(r):\"\\\\\"+n.charAt(r)}return\"#\"+u},r=function(){return Math.max(document.body.scrollHeight,document.documentElement.scrollHeight,document.body.offsetHeight,document.documentElement.offsetHeight,document.body.clientHeight,document.documentElement.clientHeight)},u=function(t){return t?(n=t,parseInt(e.getComputedStyle(n).height,10)+t.offsetTop):0;var n},i=function(t,n,o){0===t&&document.body.focus(),o||(t.focus(),document.activeElement!==t&&(t.setAttribute(\"tabindex\",\"-1\"),t.focus(),t.style.outline=\"none\"),e.scrollTo(0,n))},s=function(t,n,o,r){if(n.emitEvents&&\"function\"==typeof e.CustomEvent){var u=new CustomEvent(t,{bubbles:!0,detail:{anchor:o,toggle:r}});document.dispatchEvent(u)}};return function(c,a){var l,f,d,v,p={cancelScroll:function(e){cancelAnimationFrame(v),v=null,e||s(\"scrollCancel\",l)},animateScroll:function(o,c,a){p.cancelScroll();var f=n(l||t,a||{}),h=\"[object Number]\"===Object.prototype.toString.call(o),m=h||!o.tagName?null:o;if(h||m){var y=e.pageYOffset;f.header&&!d&&(d=document.querySelector(f.header));var b,g,w,E=u(d),O=h?o:function(t,n,o,u){var i=0;if(t.offsetParent)do{i+=t.offsetTop,t=t.offsetParent}while(t);return i=Math.max(i-n-o,0),u&&(i=Math.min(i,r()-e.innerHeight)),i}(m,E,parseInt(\"function\"==typeof f.offset?f.offset(o,c):f.offset,10),f.clip),S=O-y,_=r(),I=0,M=function(e,t){var n=t.speedAsDuration?t.speed:Math.abs(e/1e3*t.speed);return t.durationMax&&n>t.durationMax?t.durationMax:t.durationMin&&n<t.durationMin?t.durationMin:parseInt(n,10)}(S,f),L=function(t){b||(b=t),I+=t-b,w=y+S*function(e,t){var n;return\"easeInQuad\"===e.easing&&(n=t*t),\"easeOutQuad\"===e.easing&&(n=t*(2-t)),\"easeInOutQuad\"===e.easing&&(n=t<.5?2*t*t:(4-2*t)*t-1),\"easeInCubic\"===e.easing&&(n=t*t*t),\"easeOutCubic\"===e.easing&&(n=--t*t*t+1),\"easeInOutCubic\"===e.easing&&(n=t<.5?4*t*t*t:(t-1)*(2*t-2)*(2*t-2)+1),\"easeInQuart\"===e.easing&&(n=t*t*t*t),\"easeOutQuart\"===e.easing&&(n=1- --t*t*t*t),\"easeInOutQuart\"===e.easing&&(n=t<.5?8*t*t*t*t:1-8*--t*t*t*t),\"easeInQuint\"===e.easing&&(n=t*t*t*t*t),\"easeOutQuint\"===e.easing&&(n=1+--t*t*t*t*t),\"easeInOutQuint\"===e.easing&&(n=t<.5?16*t*t*t*t*t:1+16*--t*t*t*t*t),e.customEasing&&(n=e.customEasing(t)),n||t}(f,g=(g=0===M?0:I/M)>1?1:g),e.scrollTo(0,Math.floor(w)),function(t,n){var r=e.pageYOffset;if(t==n||r==n||(y<n&&e.innerHeight+r)>=_)return p.cancelScroll(!0),i(o,n,h),s(\"scrollStop\",f,o,c),b=null,v=null,!0}(w,O)||(v=e.requestAnimationFrame(L),b=t)};0===e.pageYOffset&&e.scrollTo(0,0),function(e,t,n){t||history.pushState&&n.updateURL&&history.pushState({smoothScroll:JSON.stringify(n),anchor:e.id},document.title,e===document.documentElement?\"#top\":\"#\"+e.id)}(o,h,f),\"matchMedia\"in e&&e.matchMedia(\"(prefers-reduced-motion)\").matches?i(o,Math.floor(O),!1):(s(\"scrollStart\",f,o,c),p.cancelScroll(!0),e.requestAnimationFrame(L))}}},h=function(t){if(!t.defaultPrevented&&!(0!==t.button||t.metaKey||t.ctrlKey||t.shiftKey)&&\"closest\"in t.target&&(f=t.target.closest(c))&&\"a\"===f.tagName.toLowerCase()&&!t.target.closest(l.ignore)&&f.hostname===e.location.hostname&&f.pathname===e.location.pathname&&/#/.test(f.href)){var n,r;try{n=o(decodeURIComponent(f.hash))}catch(e){n=o(f.hash)}if(\"#\"===n){if(!l.topOnEmptyHash)return;r=document.documentElement}else r=document.querySelector(n);(r=r||\"#top\"!==n?r:document.documentElement)&&(t.preventDefault(),function(t){if(history.replaceState&&t.updateURL&&!history.state){var n=e.location.hash;n=n||\"\",history.replaceState({smoothScroll:JSON.stringify(t),anchor:n||e.pageYOffset},document.title,n||e.location.href)}}(l),p.animateScroll(r,f))}},m=function(e){if(null!==history.state&&history.state.smoothScroll&&history.state.smoothScroll===JSON.stringify(l)){var t=history.state.anchor;\"string\"==typeof t&&t&&!(t=document.querySelector(o(history.state.anchor)))||p.animateScroll(t,null,{updateURL:!1})}};return p.destroy=function(){l&&(document.removeEventListener(\"click\",h,!1),e.removeEventListener(\"popstate\",m,!1),p.cancelScroll(),l=null,f=null,d=null,v=null)},function(){if(!(\"querySelector\"in document&&\"addEventListener\"in e&&\"requestAnimationFrame\"in e&&\"closest\"in e.Element.prototype))throw\"Smooth Scroll: This browser does not support the required JavaScript methods and browser APIs.\";p.destroy(),l=n(t,a||{}),d=l.header?document.querySelector(l.header):null,document.addEventListener(\"click\",h,!1),l.updateURL&&l.popstate&&e.addEventListener(\"popstate\",m,!1)}(),p}}(r)}.apply(t,[]),void 0===o||(e.exports=o)},432:function(e,t,n){\"use strict\";var o=this&&this.__createBinding||(Object.create?function(e,t,n,o){void 0===o&&(o=n),Object.defineProperty(e,o,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,o){void 0===o&&(o=n),e[o]=t[n]}),r=this&&this.__exportStar||function(e,t){for(var n in e)\"default\"===n||Object.prototype.hasOwnProperty.call(t,n)||o(t,e,n)};Object.defineProperty(t,\"__esModule\",{value:!0}),r(n(47),t),r(n(926),t),r(n(349),t),r(n(137),t),r(n(729),t),r(n(383),t),r(n(450),t),r(n(358),t),r(n(753),t),r(n(869),t),r(n(352),t),r(n(446),t),r(n(164),t),r(n(305),t),r(n(502),t)},349:function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.useArrowNavigation=void 0;var o=n(156);t.useArrowNavigation=function(e){var t=e.listItems,n=e.onArrowUpOrDown,r=(0,o.useState)(0),u=r[0],i=r[1],s=(0,o.useCallback)((function(e){i(e)}),[t]),c=function(e){var o=e.key;if(null==t?void 0:t.length)if(\"ArrowUp\"===o)n&&n(),e.preventDefault(),s(u>0?u-1:t.length-1);else{if(\"ArrowDown\"!==o)return;n&&n(),e.preventDefault(),u<t.length-1?s(u+1):s(0)}};return(0,o.useEffect)((function(){return window.addEventListener(\"keydown\",c),function(){return window.removeEventListener(\"keydown\",c)}})),(0,o.useEffect)((function(){s(0)}),[t]),{selectedIndex:u}}},446:function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.useDebounce=void 0;var o=n(156);t.useDebounce=function(e,t){void 0===t&&(t=300);var n=(0,o.useState)(e),r=n[0],u=n[1];return(0,o.useEffect)((function(){var n=setTimeout((function(){u(e)}),t);return function(){clearTimeout(n)}}),[e,t]),r}},164:function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.useElementSize=void 0;var o=n(156);t.useElementSize=function(){var e,t,n=(0,o.useRef)(null);return[n,{width:null===(e=null==n?void 0:n.current)||void 0===e?void 0:e.clientWidth,height:null===(t=null==n?void 0:n.current)||void 0===t?void 0:t.clientHeight}]},t.default=t.useElementSize},137:function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.useIntersectionObserver=void 0;var o=n(156);t.useIntersectionObserver=function(e){var t=(0,o.useRef)(null),n=(0,o.useState)(!1),r=n[0],u=n[1],i=function(e){var t=e[0];u(t.isIntersecting)};return(0,o.useEffect)((function(){if(window&&window.IntersectionObserver){var n=new IntersectionObserver(i,e),o=t.current;return t.current&&n.observe(t.current),function(){o&&n.unobserve(o)}}u(!1)}),[t,e]),{containerRef:t,isVisible:r}},t.default=t.useIntersectionObserver},729:function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.useIsBreakpoint=void 0;var o=n(156),r=n(432),u={xs:1,mobileSmall:320,mobile:375,tablet:768,tabletLarge:920,desktopSmall:1024,desktop:1260,desktopLarge:1440};t.useIsBreakpoint=function(e){var t=\"string\"==typeof e?u[e]:e,n=(0,o.useState)(null),i=n[0],s=n[1],c=(0,o.useCallback)((function(){s(window.innerWidth)}),[]);return(0,o.useEffect)((function(){c()}),[]),(0,r.useOnResize)(c),i>=t},t.default=t.useIsBreakpoint},450:function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.useIsLoadingAfterError=void 0;var o=n(156);t.useIsLoadingAfterError=function(e,t){var n=(0,o.useState)(t),r=n[0],u=n[1];return(0,o.useEffect)((function(){e||u(t)}),[e,t]),e&&r}},305:function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.useIsMobile=void 0;var o=n(729);t.useIsMobile=function(){return!(0,o.useIsBreakpoint)(\"tablet\")},t.default=t.useIsMobile},383:function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.useIsomorphicLayoutEffect=void 0;var o=n(156);t.useIsomorphicLayoutEffect=\"undefined\"!=typeof window?o.useLayoutEffect:o.useEffect,t.default=t.useIsomorphicLayoutEffect},753:function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.useOnLoseFocusWithin=void 0;var o=n(156);t.useOnLoseFocusWithin=function(e){var t=e.ref,n=e.callback,r=e.watch;(0,o.useEffect)((function(){var e=function(){var e;if(r)return(null===(e=t.current)||void 0===e?void 0:e.matches(\":focus-within\"))?void 0:n()};return document.addEventListener(\"keyup\",e),function(){return document.removeEventListener(\"keyup\",e)}}),[n,t,r])},t.default=t.useOnLoseFocusWithin},502:function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.useOnResize=void 0;var o=n(156);t.useOnResize=function(e){(0,o.useEffect)((function(){var t=function(){e(window.innerWidth)};return window.addEventListener(\"resize\",t,{passive:!0}),function(){return window.removeEventListener(\"resize\",t)}}),[])},t.default=t.useOnResize},352:function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.useOnWindowFocus=void 0;var o=n(156);t.useOnWindowFocus=function(e){(0,o.useEffect)((function(){var t=function(){e&&\"visible\"===document.visibilityState&&e()};return window.addEventListener(\"visibilitychange\",t,!1),function(){return window.removeEventListener(\"visibilitychange\",t)}}),[e])}},47:function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.useOutsideReacter=void 0;var o=n(156);t.useOutsideReacter=function(e,t){function n(n){e.current&&!e.current.contains(n.target)&&t()}(0,o.useEffect)((function(){return document.addEventListener(\"mousedown\",n),function(){document.removeEventListener(\"mousedown\",n)}}))}},869:function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.useRunAfterUpdate=void 0;var o=n(156);t.useRunAfterUpdate=function(){var e=(0,o.useRef)(null);return(0,o.useEffect)((function(){e.current&&(e.current(),e.current=null)})),function(t){e.current=t}},t.default=t.useRunAfterUpdate},926:function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.useScrollLock=void 0;var o=n(156);t.useScrollLock=function(){return{lock:(0,o.useCallback)((function(){var e=window.scrollY+\"px\",t=document.body;t.style.position=\"fixed\",t.style.top=\"-\"+e}),[]),unlock:(0,o.useCallback)((function(){var e=document.body,t=e.style.top,n=-1*parseInt(t||\"0\");e.style.position=\"\",e.style.top=\"\",n&&window.scrollTo(0,-1*parseInt(t||\"0\"))}),[])}}},358:function(e,t,n){\"use strict\";var o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.useSmoothScroll=void 0;var r=n(156),u=o(n(888));t.useSmoothScroll=function(e){var t=(0,r.useRef)(null),n=e.ref,o=e.offset,i=void 0===o?0:o,s=e.speed,c=void 0===s?500:s;return(0,r.useEffect)((function(){t.current=new u.default(null,{speed:c,speedAsDuration:!0})}),[]),(0,r.useCallback)((function(){n&&t.current&&t.current.animateScroll(n.current,null,{offset:function(){return i},updateURL:!1})}),[i,n])}},156:function(t){\"use strict\";t.exports=e}},n={};function o(e){var r=n[e];if(void 0!==r)return r.exports;var u=n[e]={exports:{}};return t[e].call(u.exports,u,u.exports,o),u.exports}return o.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(e){if(\"object\"==typeof window)return window}}(),o(432)}()}));\n//# sourceMappingURL=index.js.map","/* eslint-disable import/no-extraneous-dependencies */\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport i18next from 'i18next';\nimport cx from 'classnames';\nimport Autosuggest from 'react-autosuggest';\nimport { executeSearch } from '@digitransit-search-util/digitransit-search-util-execute-search-immidiate';\nimport SuggestionItem from '@digitransit-component/digitransit-component-suggestion-item';\nimport {\n getNameLabel,\n getStopCode,\n} from '@digitransit-search-util/digitransit-search-util-uniq-by-label';\nimport { getStopName } from '@digitransit-search-util/digitransit-search-util-helpers';\nimport getLabel from '@digitransit-search-util/digitransit-search-util-get-label';\nimport Icon from '@digitransit-component/digitransit-component-icon';\nimport moment from 'moment-timezone';\nimport 'moment/locale/fi';\nimport 'moment/locale/sv';\nimport 'moment/locale/de';\nimport isEqual from 'lodash/isEqual';\nimport isEmpty from 'lodash/isEmpty';\nimport translations from './helpers/translations';\nimport styles from './helpers/styles.scss';\nimport MobileSearch from './helpers/MobileSearch';\nimport withScrollLock from './helpers/withScrollLock';\n\nmoment.locale('en');\n\ni18next.init({\n fallbackLng: 'fi',\n defaultNS: 'translation',\n interpolation: {\n escapeValue: false, // not needed for react as it escapes by default\n },\n});\n\nconst Loading = props => (\n <div className={styles['spinner-loader']}>\n {(props && props.children) || (\n <span className={styles['sr-only']}>{i18next.t('loading')}</span>\n )}\n </div>\n);\n\nLoading.propTypes = {\n children: PropTypes.node,\n};\n\nLoading.defaultProps = {\n children: undefined,\n};\n\nconst getPlatform = addendum => {\n if (!addendum || !addendum.GTFS.platform) {\n return undefined;\n }\n const { modes, platform } = addendum.GTFS;\n const type =\n modes && modes[0] === 'RAIL' ? i18next.t('track') : i18next.t('platform');\n return [type, platform];\n};\n\nfunction getSuggestionContent(item) {\n if (item.type !== 'FutureRoute') {\n if (item.type === 'SelectFromMap') {\n return ['', i18next.t('select-from-map')];\n }\n if (item.type === 'CurrentLocation') {\n return ['', i18next.t('use-own-position')];\n }\n if (item.type === 'SelectFromOwnLocations') {\n return ['', i18next.t('select-from-own-locations')];\n }\n /* eslint-disable-next-line prefer-const */\n let [name, label] = getNameLabel(item.properties, true);\n let suggestionType;\n if (\n item.properties.layer.toLowerCase().includes('bikerental') ||\n item.properties.layer.toLowerCase().includes('bikestation')\n ) {\n suggestionType = i18next.t('vehiclerentalstation');\n const stopCode = item.properties.labelId;\n return [suggestionType, name, undefined, stopCode];\n }\n\n if (item.properties.layer === 'bikepark') {\n suggestionType = i18next.t('bikepark');\n return [suggestionType, name, undefined, undefined];\n }\n\n if (item.properties.layer === 'carpark') {\n suggestionType = i18next.t('carpark');\n return [suggestionType, name, undefined, undefined];\n }\n\n if (item.properties.mode) {\n suggestionType = i18next.t(\n item.properties.mode.toLowerCase().replace('favourite', ''),\n );\n } else {\n const layer = item.properties.layer\n .replace('route-', '')\n .toLowerCase()\n .replace('favourite', '');\n suggestionType = i18next.t(layer);\n }\n\n if (\n item.properties.id &&\n (item.properties.layer === 'stop' || item.properties.layer === 'station')\n ) {\n const stopCode = getStopCode(item.properties);\n const mode = item.properties.addendum?.GTFS.modes;\n const platform = getPlatform(item.properties.addendum);\n return [\n suggestionType,\n getStopName(name, stopCode),\n label,\n stopCode,\n mode,\n platform,\n ];\n }\n if (\n item.properties.layer === 'favouriteStop' ||\n item.properties.layer === 'favouriteStation'\n ) {\n const { address, code } = item.properties;\n const stoName = address ? getStopName(address.split(',')[0], code) : name;\n const platform = getPlatform(item.properties.addendum);\n return [suggestionType, stoName, label, code, undefined, platform];\n }\n return [suggestionType, name, label];\n }\n const { origin, destination } = item.properties;\n const tail1 = origin.locality ? `, ${origin.locality} foobar` : '';\n const tail2 = destination.locality ? `, ${destination.locality}` : '';\n const name1 = origin.name;\n const name2 = destination.name;\n return [\n i18next.t('future-route'),\n `${i18next.t('origin')} ${name1}${tail1} ${i18next.t(\n 'destination',\n )} ${name2}${tail2}`,\n item.translatedText,\n ];\n}\n\nfunction translateFutureRouteSuggestionTime(item) {\n const time = moment.unix(item.properties.time);\n let str = item.properties.arriveBy\n ? i18next.t('arrival')\n : i18next.t('departure');\n if (time.isSame(moment(), 'day')) {\n str = `${str} ${i18next.t('today-at')}`;\n } else if (time.isSame(moment().add(1, 'day'), 'day')) {\n str = `${str} ${i18next.t('tomorrow-at')}`;\n } else {\n str = `${str} ${time.format('dd D.M.')}`;\n }\n str = `${str} ${moment(time).format('HH:mm')}`;\n return str;\n}\n\nconst getSuggestionValue = suggestion => {\n if (\n suggestion.type === 'SelectFromOwnLocations' ||\n suggestion.type === 'back'\n ) {\n return '';\n }\n return getLabel(suggestion.properties);\n};\n/**\n * @example\n * const searchContext = {\n * isPeliasLocationAware: false // true / false does Let Pelias suggest based on current user location\n * minimalRegexp: undefined // used for testing min. regexp. For example: new RegExp('.{2,}'),\n * lineRegexp: undefined // identify searches for route numbers/labels: bus | train | metro. For example: new RegExp(\n * // '(^[0-9]+[a-z]?$|^[yuleapinkrtdz]$|(^m[12]?b?$))',\n * // 'i',\n * // ),\n * URL_PELIAS: '' // url for pelias searches\n * feedIDs: ['HSL', 'HSLLautta'] // FeedId's like [HSL, HSLLautta]\n * geocodingSources: ['oa','osm','nlsfi'] // sources for geocoding\n * geocodingSearchParams; {} // Searchparmas fro geocoding\n * getFavouriteLocations: () => ({}), // Function that returns array of favourite locations.\n * getFavouriteStops: () => ({}), // Function that returns array of favourite stops.\n * getLanguage: () => ({}), // Function that returns current language.\n * getFavouriteRoutes: () => ({}), // Function that returns array of favourite routes.\n * getPositions: () => ({}), // Function that returns user's geolocation.\n * getRoutesQuery: () => ({}), // Function that returns query for fetching routes.\n * getStopAndStationsQuery: () => ({}), // Function that fetches favourite stops and stations from graphql API.\n * getFavouriteRoutesQuery: () => ({}), // Function that returns query for fetching favourite routes.\n * getFavouriteVehicleRentalStations: () => ({}), // Function that returns favourite bike rental station.\n * getFavouriteVehicleRentalStationsQuery: () => ({}), // Function that returns query for fetching favourite bike rental stations.\n * startLocationWatch: () => ({}), // Function that locates users geolocation.\n * saveSearch: () => ({}), // Function that saves search to old searches store.\n * clearOldSearches: () => ({}), // Function that clears old searches store.\n * getFutureRoutes: () => ({}), // Function that return future routes\n * saveFutureRoute: () => ({}), // Function that saves a future route\n * clearFutureRoutes: () => ({}), // Function that clears future routes\n * };\n * const lang = 'fi'; // en, fi or sv\n * const onSelect = (item, id) => {\n * // Funtionality when user selects a suggesions. No default implementation is given.\n * return null;\n * };\n * const onClear = id => {\n * // Called when user clicks the clear search string button. No default implementation.\n * return null;\n * };\n * const getAutoSuggestIcons: {\n * // Called for every city bike station rendered as a search suggestion. Should return the icon and\n * // color used for that station. Two icons are available, 'citybike-stop-digitransit' anditybike-stop-digitransit-secondary'.\n * citybikes: station => {\n * return ['citybike-stop-digitransit', '#f2b62d'];\n * }\n * }\n * const transportMode = undefined;\n * const placeholder = \"stop-near-you\";\n * const targets = ['Locations', 'Stops', 'Routes']; // Defines what you are searching. Options are Locations, Stops, Stations, Routes, VehicleRentalStations, FutureRoutes, MapPosition and CurrentPosition. Leave empty to search all targets.\n * const sources = ['Favourite', 'History', 'Datasource'] // Defines where you are searching. all available are: Favourite, History (previously searched searches) and Datasource. Leave empty to use all sources.\n * return (\n * <DTAutosuggest\n * appElement={appElement} // Required. Root element's id. Needed for react-modal component.\n * searchContext={searchContext}\n * icon=\"origin\" // Optional String for icon that is shown left of searchfield. used with Icon library\n * id=\"origin\" // used for style props and info for component.\n * placeholder={placeholder} // String that is showns initally in search field\n * value=\"\" // e.g. user typed string that is shown in search field\n * onSelect={onSelect}\n * onClear={onClear}\n * autoFocus={false} // defines that should this field be automatically focused when page is loaded.\n * lang={lang}\n * getAutoSuggestIcons={getAutoSuggestIcons}\n * transportMode={transportMode} // transportmode with which we filter the routes, e.g. route-BUS\n * geocodingSize={10} // defines how many stops and stations to fetch from geocoding. Useful if you want to filter the results and still get a reasonable amount of suggestions.\n * filterResults={results => return results} // Optional filtering function for routes and stops\n * handelViaPoints={() => return null } // Optional Via point handling logic. This is currently managed with DTAutosuggestpanel by default, but if DTAutosuggest is used seperatelly own implementation must be provided.\n * focusChange={() => return null} // When suggestion is selected, handle changing focus. This is currently managed with DTAutosuggestpanel by default, but if DTAutosuggest is used seperatelly own implementation must be provided.\n * storeRef={() => return null} // Functionality to store refs. Currenlty managed with DTAutosuggestpanel by default, but if DTAutosuggest is used seperatelly own implementation must be provided.\n * sources={sources}\n * targets={targets}\n * isMobile // Optional. Defaults to false. Whether to use mobile search.\n * mobileLabel=\"Custom label\" // Optional. Custom label text for autosuggest field on mobile.\n * inputClassName=\"\" // Optional. Custom classname applied to the input element of the component for providing CSS styles.\n * translatedPlaceholder= // Optional. Custon translated placeholder text for autosuggest field.\n */\nclass DTAutosuggest extends React.Component {\n static propTypes = {\n appElement: PropTypes.string.isRequired,\n autoFocus: PropTypes.bool,\n className: PropTypes.string,\n icon: PropTypes.string,\n id: PropTypes.string.isRequired,\n placeholder: PropTypes.string.isRequired,\n translatedPlaceholder: PropTypes.string,\n value: PropTypes.string,\n searchContext: PropTypes.shape({\n URL_PELIAS: PropTypes.string,\n // eslint-disable-next-line\n context: PropTypes.object,\n clearOldSearches: PropTypes.func,\n clearFutureRoutes: PropTypes.func,\n }).isRequired,\n ariaLabel: PropTypes.string,\n onSelect: PropTypes.func.isRequired,\n transportMode: PropTypes.string,\n filterResults: PropTypes.func,\n geocodingSize: PropTypes.number,\n onClear: PropTypes.func,\n storeRef: PropTypes.func,\n handleViaPoints: PropTypes.func,\n focusChange: PropTypes.func,\n lang: PropTypes.string,\n sources: PropTypes.arrayOf(PropTypes.string),\n targets: PropTypes.arrayOf(PropTypes.string),\n isMobile: PropTypes.bool,\n color: PropTypes.string,\n hoverColor: PropTypes.string,\n accessiblePrimaryColor: PropTypes.string,\n timeZone: PropTypes.string,\n pathOpts: PropTypes.shape({\n routesPrefix: PropTypes.string,\n stopsPrefix: PropTypes.string,\n }),\n mobileLabel: PropTypes.string,\n lock: PropTypes.func.isRequired,\n unlock: PropTypes.func.isRequired,\n refPoint: PropTypes.shape({\n address: PropTypes.string,\n lat: PropTypes.number,\n lon: PropTypes.number,\n }),\n inputClassName: PropTypes.string,\n fontWeights: PropTypes.shape({\n medium: PropTypes.number,\n }),\n modeIconColors: PropTypes.objectOf(PropTypes.string),\n getAutoSuggestIcons: PropTypes.objectOf(PropTypes.func),\n required: PropTypes.bool,\n modeSet: PropTypes.string,\n showScroll: PropTypes.bool,\n isEmbedded: PropTypes.bool,\n };\n\n static defaultProps = {\n autoFocus: false,\n className: '',\n icon: undefined,\n value: '',\n transportMode: undefined,\n filterResults: undefined,\n onClear: undefined,\n lang: 'fi',\n storeRef: undefined,\n handleViaPoints: undefined,\n focusChange: undefined,\n getAutoSuggestIcons: undefined,\n sources: [],\n targets: undefined,\n isMobile: false,\n isEmbedded: false,\n geocodingSize: undefined,\n color: '#007ac9',\n hoverColor: '#0062a1',\n accessiblePrimaryColor: '#0074be',\n timeZone: 'Europe/Helsinki',\n pathOpts: {\n routesPrefix: 'linjat',\n stopsPrefix: 'pysakit',\n },\n ariaLabel: undefined,\n mobileLabel: undefined,\n inputClassName: '',\n translatedPlaceholder: undefined,\n fontWeights: {\n medium: 500,\n },\n modeIconColors: {\n 'mode-bus': '#007ac9',\n 'mode-rail': '#8c4799',\n 'mode-tram': '#008151',\n 'mode-metro': '#ed8c00',\n 'mode-ferry': '#007A97',\n 'mode-citybike': '#f2b62d',\n 'mode-funicular': '#ff00ff',\n },\n required: false,\n modeSet: undefined,\n showScroll: false,\n refPoint: {},\n };\n\n constructor(props) {\n super(props);\n moment.tz.setDefault(props.timeZone);\n moment.locale(props.lang);\n\n this.state = {\n value: props.value,\n suggestions: [],\n editing: false,\n valid: true,\n renderMobileSearch: false,\n sources: props.sources,\n ownPlaces: false,\n typingTimer: null,\n typing: false,\n pendingSelection: null,\n suggestionIndex: 0,\n cleanExecuted: false,\n scrollY: 0,\n };\n Object.keys(translations).forEach(lang => {\n i18next.addResourceBundle(lang, 'translation', translations[lang]);\n });\n }\n\n // DT-4074: When a user's location is updated DTAutosuggest would re-render causing suggestion list to reset.\n // This will prevent it.\n shouldComponentUpdate(nextProps, nextState) {\n return !isEqual(nextState, this.state) || !isEqual(nextProps, this.props);\n }\n\n componentDidUpdate() {\n if (i18next.language !== this.props.lang) {\n i18next.changeLanguage(this.props.lang);\n }\n }\n\n // eslint-disable-next-line camelcase\n UNSAFE_componentWillReceiveProps(nextProps) {\n // wait until address is set or geolocationing fails\n if (nextProps.value !== this.state.value && !this.state.editing) {\n this.setState({\n value: nextProps.value,\n });\n }\n }\n\n onChange = (event, { newValue, method }) => {\n const newState = {\n value: this.fInput || newValue || '',\n renderMobileSearch: this.props.isMobile,\n };\n // Remove filled input value so it wont be reused unnecessary\n this.fInput = null;\n if (!this.state.editing) {\n newState.editing = true;\n this.setState(newState, () =>\n this.fetchFunction({ value: newValue || '' }),\n );\n } else if (method !== 'enter' || this.state.valid) {\n // test above drops unnecessary update\n // when user hits enter but search is unfinished\n if (this.state.typingTimer) {\n clearTimeout(this.state.typingTimer);\n }\n if (method === 'type') {\n // after timeout runs, aria alert will announce current selection\n const timer = setTimeout(() => {\n this.setState({ typing: false });\n }, 1000);\n newState.typingTimer = timer;\n newState.typing = true;\n }\n this.setState(newState);\n }\n };\n\n onBlur = () => {\n if (this.state.renderMobileSearch) {\n return;\n }\n if (this.state.editing) {\n this.input.focus();\n }\n this.setState({\n editing: false,\n renderMobileSearch: false,\n value: this.props.value,\n });\n };\n\n onSelected = (e, ref) => {\n if (this.state.valid) {\n if (ref.suggestion.type === 'SelectFromOwnLocations') {\n this.setState(\n {\n sources: ['Favourite', 'Back'],\n ownPlaces: true,\n pendingSelection: ref.suggestion.type,\n value: '',\n },\n () => {\n this.fetchFunction({ value: '' });\n },\n );\n return;\n }\n if (\n ref.suggestion.type === 'back' ||\n ref.suggestion.type === 'FutureRoute'\n ) {\n this.setState(\n {\n sources: this.props.sources,\n ownPlaces: false,\n pendingSelection: ref.suggestion.type,\n suggestionIndex: ref.suggestionIndex,\n },\n () => {\n this.fetchFunction({ value: '' });\n },\n );\n return;\n }\n this.selectionDone = true; // selection done, do not let upcoming keyboard events confuse the flow\n this.setState(\n {\n editing: false,\n value: ref.suggestionValue,\n },\n () => {\n this.input.blur();\n if (this.props.handleViaPoints) {\n this.props.handleViaPoints(ref.suggestion, ref.suggestionIndex);\n } else {\n this.props.onSelect(ref.suggestion, this.props.id);\n }\n this.setState(\n {\n renderMobileSearch: false,\n sources: this.props.sources,\n ownPlaces: false,\n suggestions: [],\n },\n () => {\n this.selectionDone = false;\n },\n );\n if (\n this.props.focusChange &&\n (!this.props.isMobile || this.props.isEmbedded)\n ) {\n this.props.focusChange();\n }\n if (this.props.isMobile) {\n this.closeMobileSearch();\n }\n },\n );\n } else {\n this.setState(\n prevState => ({\n pendingSelection: prevState.value,\n }),\n () => this.checkPendingSelection(), // search may finish during state change\n );\n }\n };\n\n onSuggestionsClearRequested = () => {\n this.setState({\n suggestions: [],\n sources: this.props.sources,\n ownPlaces: false,\n editing: false,\n });\n };\n\n checkPendingSelection = () => {\n if (\n (this.state.pendingSelection === 'SelectFromOwnLocations' ||\n this.state.pendingSelection === 'back') &&\n this.state.valid\n ) {\n this.setState(\n {\n pendingSelection: null,\n editing: true,\n },\n () => {\n this.input.focus();\n },\n );\n // accept after all ongoing searches have finished\n } else if (this.state.pendingSelection && this.state.valid) {\n // finish the selection by picking first = best match or with 'FutureRoute' by suggestionIndex\n this.setState(\n {\n pendingSelection: null,\n editing: false,\n },\n () => {\n if (this.state.suggestions.length) {\n this.input.blur();\n const item = this.state.suggestions[this.state.suggestionIndex];\n if (item.type !== 'back') {\n this.props.onSelect(\n this.state.suggestions[this.state.suggestionIndex],\n this.props.id,\n );\n }\n if (this.props.isMobile) {\n this.closeMobileSearch();\n }\n if (\n this.props.focusChange &&\n (!this.props.isMobile || this.props.isEmbedded)\n ) {\n this.props.focusChange();\n }\n }\n },\n );\n }\n };\n\n clearButton = () => {\n return (\n <button\n type=\"button\"\n className={styles['clear-input']}\n onClick={this.clearInput}\n aria-label={i18next.t('clear-button-label')}\n >\n <Icon img=\"close\" color={this.props.color} />\n </button>\n );\n };\n\n fetchFunction = ({ value, cleanExecuted }) => {\n return this.setState(\n { valid: false, cleanExecuted: !cleanExecuted ? false : cleanExecuted },\n () => {\n if (this.selectionDone) {\n // do not let component cast unnecessary requests\n return;\n }\n const { targets } = this.props;\n const useAll = isEmpty(targets);\n const isLocationSearch =\n isEmpty(targets) || targets.includes('Locations');\n let newTargets;\n if (this.state.ownPlaces) {\n newTargets = ['Locations'];\n if (useAll || targets.includes('Stops')) {\n newTargets.push('Stops');\n }\n if (useAll || targets.includes('Stations')) {\n newTargets.push('Stations');\n }\n if (useAll || targets.includes('VehicleRentalStations')) {\n newTargets.push('VehicleRentalStations');\n }\n } else if (!useAll) {\n newTargets = [...targets];\n // in desktop, favorites are accessed via sub search\n if (\n isLocationSearch &&\n !this.props.isMobile &&\n (isEmpty(this.props.sources) ||\n this.props.sources.includes('Favourite'))\n ) {\n newTargets.push('SelectFromOwnLocations');\n }\n }\n // remove location favourites in desktop search (collection item replaces it in target array)\n const sources =\n this.state.sources &&\n this.state.sources.filter(\n s =>\n !(\n isLocationSearch &&\n s === 'Favourite' &&\n !this.state.ownPlaces &&\n !this.props.isMobile\n ),\n );\n\n executeSearch(\n newTargets,\n sources,\n this.props.transportMode,\n this.props.searchContext,\n this.props.filterResults,\n this.props.geocodingSize,\n {\n input: value || '',\n },\n searchResult => {\n if (searchResult == null) {\n return;\n }\n // XXX translates current location\n const suggestions = (searchResult.results || [])\n .filter(\n suggestion =>\n suggestion.type !== 'FutureRoute' ||\n (suggestion.type === 'FutureRoute' &&\n suggestion.properties.time > moment().unix()),\n )\n .map(suggestion => {\n if (\n suggestion.type === 'CurrentLocation' ||\n suggestion.type === 'SelectFromMap' ||\n suggestion.type === 'SelectFromOwnLocations' ||\n suggestion.type === 'back'\n ) {\n const translated = { ...suggestion };\n translated.properties.labelId = i18next.t(\n suggestion.properties.labelId,\n );\n return translated;\n }\n return suggestion;\n });\n if (\n value === this.state.value ||\n value === this.state.pendingSelection ||\n this.state.pendingSelection === 'SelectFromOwnLocations' ||\n this.state.pendingSelection === 'back' ||\n this.state.pendingSelection === 'FutureRoute'\n ) {\n this.setState(\n {\n valid: true,\n suggestions,\n },\n () => this.checkPendingSelection(),\n );\n }\n },\n this.props.pathOpts,\n this.props.refPoint,\n );\n },\n );\n };\n\n clearInput = () => {\n const newState = {\n editing: true,\n value: '',\n sources: this.props.sources,\n ownPlaces: false,\n renderMobileSearch: this.props.isMobile,\n };\n // must update suggestions\n this.setState(newState, () =>\n this.fetchFunction({ value: '', cleanExecuted: true }),\n );\n if (this.props.onClear) {\n this.props.onClear(this.props.id);\n }\n this.input.focus();\n };\n\n inputClicked = inputValue => {\n this.input.focus();\n this.clearLocationText();\n if (this.props.isMobile) {\n this.props.lock();\n }\n if (!this.state.editing) {\n const newState = {\n editing: true,\n // reset at start, just in case we missed something\n pendingSelection: null,\n renderMobileSearch: this.props.isMobile,\n };\n\n // DT-3263: added stateKeyDown\n const stateKeyDown = {\n editing: true,\n pendingSelection: null,\n value: inputValue,\n };\n\n if (!this.state.suggestions.length) {\n // DT-3263: added if-else statement\n if (typeof inputValue === 'object' || !inputValue) {\n this.setState(newState, () =>\n this.fetchFunction({ value: this.state.value }),\n );\n } else {\n this.setState(stateKeyDown, () =>\n this.fetchFunction({ value: inputValue }),\n );\n }\n } else {\n this.fetchFunction({ value: this.state.value });\n this.setState(newState);\n }\n } else if (this.props.isMobile && !this.state.renderMobileSearch) {\n this.setState({ renderMobileSearch: true });\n }\n };\n\n storeInputReference = autosuggest => {\n if (autosuggest !== null) {\n this.input = autosuggest.input;\n if (this.props.storeRef) {\n this.props.storeRef(autosuggest.input);\n }\n }\n };\n\n // Fill input when user clicks fill input button in street suggestion item\n fillInput = newValue => {\n this.fInput = newValue.properties.name;\n const newState = {\n editing: true,\n value: newValue.properties.name,\n checkPendingSelection: newValue,\n valid: true,\n };\n // must update suggestions\n this.setState(newState);\n this.fetchFunction({ value: newValue.properties.name });\n this.input.focus();\n };\n\n renderItem = item => {\n const newItem =\n item.type === 'FutureRoute'\n ? {\n ...item,\n translatedText: translateFutureRouteSuggestionTime(item),\n }\n : item;\n const content = getSuggestionContent(item);\n return (\n <SuggestionItem\n item={newItem}\n content={content}\n loading={!this.state.valid}\n isMobile={this.props.isMobile}\n ariaFavouriteString={i18next.t('favourite')}\n color={this.props.color}\n accessiblePrimaryColor={this.props.accessiblePrimaryColor}\n fillInput={this.fillInput}\n fontWeights={this.props.fontWeights}\n getAutoSuggestIcons={this.props.getAutoSuggestIcons}\n modeIconColors={this.props.modeIconColors}\n modeSet={this.props.modeSet}\n />\n );\n };\n\n closeMobileSearch = () => {\n this.props.unlock();\n this.setState(\n {\n renderMobileSearch: false,\n value: this.props.value,\n },\n () => {\n window.scrollTo(0, this.state.scrollY);\n this.onSuggestionsClearRequested();\n },\n );\n };\n\n keyDown = event => {\n if (this.selectionDone) {\n return;\n }\n const keyCode = event.key;\n if (keyCode === 'Escape') {\n this.setState({ editing: false });\n }\n if (this.state.editing) {\n if (keyCode === 'Enter' && this.state.value !== '') {\n this.setState({ pendingSelection: true }, () => {\n this.fetchFunction({ value: this.state.value });\n });\n }\n this.inputClicked();\n return;\n }\n\n if (\n (keyCode === 'Enter' || keyCode === 'ArrowDown') &&\n this.state.value === ''\n ) {\n this.clearInput();\n return;\n }\n\n if (keyCode === 'ArrowDown' && this.state.value !== '') {\n const newState = {\n editing: true,\n value: this.state.value,\n };\n // must update suggestions\n this.setState(newState, () =>\n this.fetchFunction({ value: this.state.value }),\n );\n }\n if (!this.state.editing) {\n this.setState({ editing: true });\n }\n\n if (keyCode === 'Tab') {\n this.onBlur();\n }\n };\n\n suggestionAsAriaContent = () => {\n let label = [];\n const firstSuggestion = this.state.suggestions[0];\n if (firstSuggestion) {\n if (firstSuggestion.type && firstSuggestion.type.includes('Favourite')) {\n label.push(i18next.t('favourite'));\n }\n label = label.concat(getSuggestionContent(this.state.suggestions[0]));\n }\n return [...new Set(label)].join(' - ');\n };\n\n clearOldSearches = () => {\n const { context, clearOldSearches, clearFutureRoutes } =\n this.props.searchContext;\n if (context && clearOldSearches) {\n clearOldSearches(context);\n if (clearFutureRoutes) {\n clearFutureRoutes(context);\n }\n this.fetchFunction({ value: this.state.value });\n }\n };\n\n isOriginDestinationOrViapoint = () =>\n this.props.id === 'origin' ||\n this.props.id === 'destination' ||\n this.props.id === 'via-point' ||\n this.props.id === 'origin-stop-near-you';\n\n clearLocationText = () => {\n const positions = [\n 'Valittu sijainti',\n 'Nykyinen sijaintisi',\n 'Current position',\n 'Selected location',\n 'Vald position',\n 'Använd min position',\n 'Min position',\n 'Käytä nykyistä sijaintia',\n 'Use current location',\n 'Your current location',\n 'Wybrane miejsce',\n ];\n if (positions.includes(this.state.value)) {\n this.clearInput();\n }\n };\n\n onFocus = () => {\n this.clearLocationText();\n\n const scrollY = window.pageYOffset;\n return this.setState({ scrollY });\n };\n\n render() {\n if (i18next.language !== this.props.lang) {\n i18next.changeLanguage(this.props.lang);\n }\n const { value, suggestions, renderMobileSearch, cleanExecuted } =\n this.state;\n const inputProps = {\n placeholder: this.props.translatedPlaceholder\n ? this.props.translatedPlaceholder\n : i18next.t(this.props.placeholder),\n value,\n onChange: this.onChange,\n onBlur: this.onBlur,\n className: cx(\n `${styles.input} ${\n this.props.isMobile && this.props.transportMode ? styles.thin : ''\n } ${styles[this.props.id] || ''} ${\n this.state.value ? styles.hasValue : ''\n } ${this.props.inputClassName}`,\n ),\n onKeyDown: this.keyDown, // DT-3263\n required: this.props.required,\n };\n const ariaBarId = this.props.id.replace('searchfield-', '');\n let SearchBarId = this.props.ariaLabel || i18next.t(ariaBarId);\n SearchBarId = SearchBarId.replace('searchfield-', '').concat('.'); // Full stop makes screen reader speech clearer.\n const ariaRequiredText = this.props.required\n ? `${i18next.t('required')}.`\n : '';\n const ariaLabelInstructions = this.props.isMobile\n ? i18next.t('search-autosuggest-label-instructions-mobile')\n : i18next.t('search-autosuggest-label-instructions-desktop');\n const movingToDestinationFieldText =\n this.props.id === 'origin'\n ? i18next.t('search-autosuggest-label-move-to-destination')\n : '';\n const ariaLabelText = ariaLabelInstructions\n .concat(' ')\n .concat(movingToDestinationFieldText);\n\n const ariaSuggestionLen = i18next.t('search-autosuggest-len', {\n count: suggestions.length,\n });\n\n const ariaCurrentSuggestion = () => {\n if (this.suggestionAsAriaContent() || this.props.value) {\n return i18next.t('search-current-suggestion', {\n selection:\n this.suggestionAsAriaContent().toLowerCase() || this.props.value,\n });\n }\n return '';\n };\n\n return (\n <React.Fragment>\n <span className={styles['sr-only']} role=\"alert\">\n {!this.state.typing &&\n this.state.editing &&\n `${ariaSuggestionLen} ${ariaCurrentSuggestion()}`}\n </span>\n {this.props.isMobile && (\n <MobileSearch\n searchOpen={renderMobileSearch}\n appElement={this.props.appElement}\n clearOldSearches={this.clearOldSearches}\n id={this.props.id}\n clearInput={this.clearInput}\n value={this.state.value}\n suggestions={[\n ...suggestions,\n {\n type: 'clear-search-history',\n labelId: i18next.t('clear-search-history'),\n },\n ]}\n inputProps={{\n ...inputProps,\n placeholder: this.isOriginDestinationOrViapoint()\n ? i18next.t('address-place-or-business')\n : inputProps.placeholder,\n }}\n fetchFunction={this.fetchFunction}\n onSuggestionsClearRequested={this.onSuggestionsClearRequested}\n getSuggestionValue={getSuggestionValue}\n renderSuggestion={this.renderItem}\n closeHandle={this.closeMobileSearch}\n ariaLabel={ariaRequiredText\n .concat(' ')\n .concat(SearchBarId)\n .concat(' ')\n .concat(ariaCurrentSuggestion())}\n label={\n this.props.mobileLabel\n ? this.props.mobileLabel\n : i18next.t(this.props.id)\n }\n onSuggestionSelected={this.onSelected}\n dialogHeaderText={i18next.t('delete-old-searches-header')}\n dialogPrimaryButtonText={i18next.t('delete')}\n dialogSecondaryButtonText={i18next.t('cancel')}\n clearInputButtonText={i18next.t('clear-button-label')}\n focusInput={cleanExecuted}\n color={this.props.color}\n hoverColor={this.props.hoverColor}\n accessiblePrimaryColor={this.props.accessiblePrimaryColor}\n fontWeights={this.props.fontWeights}\n showScroll={this.props.showScroll}\n />\n )}\n {!renderMobileSearch && (\n <div\n className={cx([\n styles['autosuggest-input-container'],\n styles[this.props.id],\n ])}\n style={{\n '--color': `${this.props.color}`,\n '--hover-color': `${this.props.hoverColor}`,\n }}\n >\n {this.props.icon && (\n <div\n className={cx([\n styles[`autosuggest-input-icon`],\n styles[this.props.id],\n this.props.inputClassName &&\n `${this.props.inputClassName}-input-icon`,\n ])}\n aria-label={ariaRequiredText\n .concat(' ')\n .concat(SearchBarId)\n .concat(' ')\n .concat(i18next.t('search-autosuggest-label'))}\n >\n <Icon img={`${this.props.icon}`} />\n </div>\n )}\n <Autosuggest\n alwaysRenderSuggestions={this.state.editing}\n id={this.props.id}\n suggestions={suggestions}\n onSuggestionsFetchRequested={this.fetchFunction}\n onSuggestionsClearRequested={this.onSuggestionsClearRequested}\n getSuggestionValue={getSuggestionValue}\n renderSuggestion={this.renderItem}\n inputProps={{\n ...inputProps,\n onFocus: this.onFocus,\n }}\n focusInputOnSuggestionClick\n shouldRenderSuggestions={() => this.state.editing}\n highlightFirstSuggestion={!this.state.ownPlaces}\n theme={styles}\n renderInputComponent={p => (\n <>\n <label className={styles['sr-only']} htmlFor={this.props.id}>\n {ariaCurrentSuggestion()\n .concat(' ')\n .concat(ariaRequiredText)\n .concat(' ')\n .concat(SearchBarId)\n .concat(' ')\n .concat(ariaLabelText)}\n </label>\n <input\n aria-label={ariaCurrentSuggestion()\n .concat(' ')\n .concat(ariaRequiredText)\n .concat(' ')\n .concat(SearchBarId)\n .concat(' ')\n .concat(ariaLabelText)}\n id={this.props.id}\n onClick={this.inputClicked}\n onKeyDown={this.keyDown}\n {...p}\n />\n {this.state.value && this.clearButton()}\n </>\n )}\n onSuggestionSelected={this.onSelected}\n ref={this.storeInputReference}\n />\n </div>\n )}\n </React.Fragment>\n );\n }\n}\n\nconst DTAutosuggestWithScrollLock = withScrollLock(DTAutosuggest);\n\nexport default DTAutosuggestWithScrollLock;\n","import { getNameLabel } from '@digitransit-search-util/digitransit-search-util-uniq-by-label';\n/**\n * Returns label for properties\n *\n * @name getLabel\n * @param {*} properties object\n * @returns {Boolean} true/false\n */\nexport default function getLabel(properties) {\n const parts = getNameLabel(properties, true);\n switch (properties.layer) {\n case 'selectFromMap':\n case 'currentPosition':\n case 'ownLocations':\n case 'back':\n return parts[1] || parts[0];\n case 'favouriteVehicleRentalStation':\n case 'favouritePlace':\n return parts[0];\n default:\n return parts.length > 1 && parts[1] !== ''\n ? parts.join(', ')\n : parts[1] || parts[0];\n }\n}\n","import React from 'react';\nimport hooks from '@hsl-fi/hooks';\n\nconst withScrollLock = Component => {\n return props => {\n const { lock, unlock } = hooks.useScrollLock();\n\n return <Component lock={lock} unlock={unlock} {...props} />;\n };\n};\n\nexport default withScrollLock;\n"],"names":["_typeof","o","Symbol","iterator","constructor","prototype","toPropertyKey","t","i","r","e","toPrimitive","call","TypeError","String","Number","_defineProperty","Object","defineProperty","value","enumerable","configurable","writable","truEq","val1","val2","gtfsStopLayers","vehicleRentalLayers","labelIdToGid","id","parts","split","length","isDuplicate","item1","item2","props1","properties","props2","type","o1","origin","d1","destination","o2","d2","name","localadmin","includes","layer","gid","labelId","gtfsId","p1","geometry","coordinates","undefined","p2","Math","abs","label","address","normalize","str","isString","toLowerCase","LayerType","isStop","getLayerRank","source","indexOf","sortSearchResults","lineRegexp","results","term","Array","isArray","isLineIdentifier","test","normalizedTerm","isLineSearch","orderedResults","orderBy","result","shortName","confidence","match","resultProperties","map","filter","normalizedValue","reduce","previous","current","uniqWith","getStopName","stopCode","lastIndexOf","substring","filterMatchingToInput","list","Input","fields","input","trim","multiWord","item","forEach","pName","get","splice","join","concat","replace","serialize","obj","prefix","keys","p","k","v","encodeURIComponent","axios","require","default","getJson","url","params","encodeURI","search","timeout","method","headers","Accept","then","res","data","getGeocodingResults","searchString","searchParams","lang","focusPoint","sources","peliasUrl","minimalRegexp","geocodingLayers","text","Promise","resolve","PELIAS_URL","opts","_objectSpread","layers","toString","features","getStopsFromGeocoding","stops","URL_PELIAS_PLACE","gids","stopStationMap","stop","code","stopOrStation","ids","slice","addendum","lastUpdated","favouriteId","filterOldSearches","oldSearches","dropLayers","matchingOldSearches","take","newItem","timetableClicked","arrowClicked","routeLayers","locationLayers","parkingLayers","stopLayers","debouncedSearch","debounce","targets","transportMode","searchContext","filterResults","geocodingSize","callback","pathOpts","refPoint","getPositions","getFavouriteLocations","getOldSearches","getFavouriteStops","parkingAreaSources","getLanguage","getStopAndStationsQuery","getFavouriteVehicleRentalStationsQuery","getFavouriteVehicleRentalStations","getFavouriteRoutesQuery","getFavouriteRoutes","getRoutesQuery","context","isPeliasLocationAware","locationAware","URL_PELIAS","feedIDs","geocodingSearchParams","geocodingSources","getFutureRoutes","cityBikeNetworks","allTargets","allSources","position","searchComponents","searches","language","lat","lon","toFixed","mode","status","push","getCurrentPositionIfEmpty","selectPositionFomMap","items","favouriteLocations","favouriteVehicleRentalStations","favouriteStops","hasFavourites","selectFromOwnLocations","favourites","filterFavouriteLocations","locationHistory","size","feedIds","history","useStops","useStations","stopsAndStations","every","stopsStations","s","filterFavouriteStops","dedupestops","feeds","stopHistory","favouriteRoutes","routeHistory","favouriteVehicleRentalStation","all","flatten","catch","err","error","leading","getLocaladmin","suggestion","getStopCode","getNameLabel","memoize","plain","RegExp","escapeRegExp","longName","agency","formatFavouritePlaceLabel","cloneDeep","module","exports","hookCallback","some","hooks","apply","arguments","setHookCallback","isObject","hasOwnProp","a","b","hasOwnProperty","isObjectEmpty","getOwnPropertyNames","isUndefined","isNumber","isDate","Date","arr","fn","arrLen","extend","valueOf","createUTC","format","locale","strict","createLocalOrUTC","utc","defaultParsingFlags","empty","unusedTokens","unusedInput","overflow","charsLeftOver","nullInput","invalidEra","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","era","meridiem","rfc2822","weekdayMismatch","getParsingFlags","m","_pf","isValid","flags","parsedParts","isNowValid","_d","isNaN","getTime","invalidWeekday","_strict","bigHour","isFrozen","_isValid","createInvalid","NaN","fun","this","len","momentProperties","updateInProgress","copyConfig","to","from","prop","val","momentPropertiesLen","_isAMomentObject","_i","_f","_l","_tzm","_isUTC","_offset","_locale","Moment","config","updateOffset","isMoment","warn","msg","suppressDeprecationWarnings","console","deprecate","firstTime","deprecationHandler","arg","key","args","argLen","Error","stack","deprecations","deprecateSimple","isFunction","Function","set","_config","_dayOfMonthOrdinalParseLenient","_dayOfMonthOrdinalParse","_ordinalParse","mergeConfigs","parentConfig","childConfig","Locale","defaultCalendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","calendar","mom","now","output","_calendar","zeroFill","number","targetLength","forceSign","absNumber","zerosToFill","pow","max","substr","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","token","padded","ordinal","func","localeData","removeFormattingTokens","makeFormatFunction","array","formatMoment","expandFormat","invalidDate","replaceLongDateFormatTokens","longDateFormat","lastIndex","defaultLongDateFormat","LTS","LT","L","LL","LLL","LLLL","_longDateFormat","formatUpper","toUpperCase","tok","defaultInvalidDate","_invalidDate","defaultOrdinal","defaultDayOfMonthOrdinalParse","_ordinal","defaultRelativeTime","future","past","ss","mm","h","hh","d","dd","w","ww","M","MM","y","yy","relativeTime","withoutSuffix","string","isFuture","_relativeTime","pastFuture","diff","aliases","D","dates","date","days","day","weekdays","weekday","E","isoweekdays","isoweekday","DDD","dayofyears","dayofyear","hours","hour","ms","milliseconds","millisecond","minutes","minute","months","month","Q","quarters","quarter","seconds","second","gg","weekyears","weekyear","GG","isoweekyears","isoweekyear","weeks","week","W","isoweeks","isoweek","years","year","normalizeUnits","units","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","priorities","isoWeekday","dayOfYear","weekYear","isoWeekYear","isoWeek","getPrioritizedUnits","unitsObj","u","unit","priority","sort","regexes","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchTimestamp","matchWord","match1to2NoLeadingZero","match1to2HasZero","addRegexToken","regex","strictRegex","isStrict","getParseRegexForToken","unescapeFormat","regexEscape","matched","p3","p4","absFloor","ceil","floor","toInt","argumentForCoercion","coercedNumber","isFinite","tokens","addParseToken","tokenLen","addWeekParseToken","_w","addTimeToArrayFromToken","_a","isLeapYear","YEAR","MONTH","DATE","HOUR","MINUTE","SECOND","MILLISECOND","WEEK","WEEKDAY","daysInYear","parseTwoDigitYear","parseInt","getSetYear","makeGetSet","getIsLeapYear","keepTime","set$1","isUTC","getUTCMilliseconds","getMilliseconds","getUTCSeconds","getSeconds","getUTCMinutes","getMinutes","getUTCHours","getHours","getUTCDate","getDate","getUTCDay","getDay","getUTCMonth","getMonth","getUTCFullYear","getFullYear","setUTCMilliseconds","setMilliseconds","setUTCSeconds","setSeconds","setUTCMinutes","setMinutes","setUTCHours","setHours","setUTCDate","setDate","setUTCFullYear","setFullYear","stringGet","stringSet","prioritized","prioritizedLen","mod","n","x","daysInMonth","modMonth","monthsShort","monthsShortRegex","monthsRegex","monthsParse","defaultLocaleMonths","defaultLocaleMonthsShort","MONTHS_IN_FORMAT","defaultMonthsShortRegex","defaultMonthsRegex","localeMonths","_months","isFormat","localeMonthsShort","_monthsShort","handleStrictParse","monthName","ii","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","localeMonthsParse","_monthsParseExact","setMonth","min","setUTCMonth","getSetMonth","getDaysInMonth","computeMonthsParse","_monthsShortStrictRegex","_monthsShortRegex","_monthsStrictRegex","_monthsRegex","cmpLenRev","shortP","longP","shortPieces","longPieces","mixedPieces","createDate","createUTCDate","UTC","firstWeekOffset","dow","doy","fwd","dayOfYearFromWeeks","resYear","resDayOfYear","weekOfYear","resWeek","weekOffset","weeksInYear","weekOffsetNext","localeWeek","_week","defaultLocaleWeek","localeFirstDayOfWeek","localeFirstDayOfYear","getSetWeek","add","getSetISOWeek","parseWeekday","weekdaysParse","parseIsoWeekday","shiftWeekdays","ws","weekdaysMin","weekdaysShort","weekdaysMinRegex","weekdaysShortRegex","weekdaysRegex","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","localeWeekdays","_weekdays","localeWeekdaysShort","_weekdaysShort","localeWeekdaysMin","_weekdaysMin","handleStrictParse$1","weekdayName","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","localeWeekdaysParse","_weekdaysParseExact","_fullWeekdaysParse","getSetDayOfWeek","getSetLocaleDayOfWeek","getSetISODayOfWeek","computeWeekdaysParse","_weekdaysStrictRegex","_weekdaysRegex","_weekdaysShortStrictRegex","_weekdaysShortRegex","_weekdaysMinStrictRegex","_weekdaysMinRegex","minp","shortp","longp","minPieces","hFormat","kFormat","lowercase","matchMeridiem","_meridiemParse","localeIsPM","charAt","kInput","_isPm","isPM","_meridiem","pos","pos1","pos2","defaultLocaleMeridiemParse","getSetHour","localeMeridiem","isLower","globalLocale","baseConfig","dayOfMonthOrdinalParse","meridiemParse","locales","localeFamilies","commonPrefix","arr1","arr2","minl","normalizeLocale","chooseLocale","names","j","next","loadLocale","isLocaleNameSane","oldLocale","_abbr","getSetGlobalLocale","values","getLocale","defineLocale","abbr","parentLocale","updateLocale","tmpLocale","listLocales","checkOverflow","_overflowDayOfYear","_overflowWeeks","_overflowWeekday","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","obsOffsets","UT","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","configFromISO","l","allowTime","dateFormat","timeFormat","tzFormat","exec","isoDatesLen","isoTimesLen","configFromStringAndFormat","extractFromRFC2822Strings","yearStr","monthStr","dayStr","hourStr","minuteStr","secondStr","untruncateYear","preprocessRFC2822","checkWeekday","weekdayStr","parsedInput","calculateOffset","obsOffset","militaryOffset","numOffset","hm","configFromRFC2822","parsedArray","configFromString","createFromInputFallback","defaults","c","currentDateArray","nowValue","_useUTC","configFromArray","currentDate","expectedWeekday","yearToUse","dayOfYearFromWeekInfo","_dayOfYear","_nextDay","temp","weekdayOverflow","curWeek","createLocal","ISO_8601","RFC_2822","skipped","stringLength","totalParsedInputLength","meridiemFixWrap","erasConvertYear","isPm","meridiemHour","configFromStringAndArray","tempConfig","bestMoment","scoreToBeat","currentScore","validFormatFound","bestFormatIsValid","configfLen","score","configFromObject","dayOrDate","createFromConfig","prepareConfig","preparse","configFromInput","prototypeMin","other","prototypeMax","pickBy","moments","ordering","isDurationValid","unitHasDecimal","orderLen","parseFloat","isValid$1","createInvalid$1","createDuration","Duration","duration","_milliseconds","_days","_data","_bubble","isDuration","absRound","round","compareArrays","array1","array2","dontConvert","lengthDiff","diffs","offset","separator","utcOffset","sign","offsetFromString","chunkOffset","matcher","matches","cloneWithOffset","model","clone","setTime","local","getDateOffset","getTimezoneOffset","getSetOffset","keepLocalTime","keepMinutes","localAdjust","_changeInProgress","addSubtract","getSetZone","setOffsetToUTC","setOffsetToLocal","subtract","setOffsetToParsedOffset","tZone","hasAlignedHourOffset","isDaylightSavingTime","isDaylightSavingTimeShifted","_isDSTShifted","toArray","isLocal","isUtcOffset","isUtc","aspNetRegex","isoRegex","ret","diffRes","parseIso","momentsDifference","inp","positiveMomentsDifference","base","isAfter","isBefore","createAdder","direction","period","tmp","isAdding","invalid","isMomentInput","isNumberOrStringArray","isMomentInputObject","property","objectTest","propertyTest","propertyLen","arrayTest","dataTypeTest","isCalendarSpec","getCalendarFormat","myMoment","calendar$1","time","formats","sod","startOf","calendarFormat","localInput","endOf","isBetween","inclusivity","localFrom","localTo","isSame","inputMs","isSameOrAfter","isSameOrBefore","asFloat","that","zoneDelta","monthDiff","wholeMonthDiff","anchor","toISOString","keepOffset","toDate","inspect","datetime","suffix","zone","inputString","defaultFormatUtc","defaultFormat","postformat","humanize","fromNow","toNow","newLocaleData","MS_PER_SECOND","MS_PER_MINUTE","MS_PER_HOUR","MS_PER_400_YEARS","mod$1","dividend","divisor","localStartOfDate","utcStartOfDate","startOfDate","unix","toObject","toJSON","isValid$2","parsingFlags","invalidAt","creationData","localeEras","eras","_eras","since","until","localeErasParse","eraName","narrow","localeErasConvertYear","dir","getEraName","getEraNarrow","getEraAbbr","getEraYear","erasNameRegex","computeErasParse","_erasNameRegex","_erasRegex","erasAbbrRegex","_erasAbbrRegex","erasNarrowRegex","_erasNarrowRegex","matchEraAbbr","matchEraName","matchEraNarrow","matchEraYearOrdinal","_eraYearOrdinalRegex","erasName","erasAbbr","erasNarrow","abbrPieces","namePieces","narrowPieces","addWeekYearFormatToken","getter","getSetWeekYear","getSetWeekYearHelper","getSetISOWeekYear","getISOWeeksInYear","getISOWeeksInISOWeekYear","getWeeksInYear","weekInfo","getWeeksInWeekYear","weeksTarget","setWeekAll","dayOfYearData","getSetQuarter","erasParse","eraYearOrdinalParse","getSetDayOfMonth","getSetDayOfYear","getSetMinute","getSetMillisecond","getSetSecond","parseMs","getZoneAbbr","getZoneName","proto","createUnix","createInZone","parseZone","preParsePostFormat","for","eraNarrow","eraAbbr","eraYear","isoWeeks","weeksInWeekYear","isoWeeksInYear","isoWeeksInISOWeekYear","isDST","zoneAbbr","zoneName","isDSTShifted","proto$1","get$1","index","field","setter","listMonthsImpl","out","listWeekdaysImpl","localeSorted","shift","listMonths","listMonthsShort","listWeekdays","listWeekdaysShort","listWeekdaysMin","firstDayOfYear","firstDayOfWeek","langData","mathAbs","addSubtract$1","add$1","subtract$1","absCeil","bubble","monthsFromDays","monthsToDays","daysToMonths","as","makeAs","alias","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asQuarters","asYears","valueOf$1","clone$1","get$2","makeGetter","thresholds","substituteTimeAgo","relativeTime$1","posNegDuration","getSetRelativeTimeRounding","roundingFunction","getSetRelativeTimeThreshold","threshold","limit","argWithSuffix","argThresholds","withSuffix","th","assign","abs$1","toISOString$1","totalSign","ymSign","daysSign","hmsSign","total","proto$2","toIsoString","version","relativeTimeRounding","relativeTimeThreshold","HTML5_FMT","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","TIME","TIME_SECONDS","TIME_MS","factory","root","moment","cachedGuess","zones","links","countries","guesses","logError","momentVersion","major","minor","charCodeToInt","charCode","unpackBase60","whole","fractional","multiplier","charCodeAt","arrayToInt","mapIndices","indices","unpack","offsets","untils","Infinity","intToUntil","abbrs","population","Zone","packedString","_set","Country","country_name","zone_names","OffsetAt","at","timeString","toTimeString","ZoneScore","offsetScore","abbrScore","findChange","low","high","mid","sortZoneScores","localeCompare","addToGuesses","guessesForUserOffsets","guessesOffset","offsetsLength","filteredGuesses","checkedOffsets","rebuildGuess","intlName","Intl","DateTimeFormat","resolvedOptions","timeZone","normalizeName","zoneScore","change","nextOffset","startYear","last","lastOffset","userOffsets","zoneScores","getZone","scoreOffsetAt","addZone","packed","normalized","caller","link","addLink","normal0","normal1","needsOffset","isUnixTimestamp","message","tz","parse","unpacked","_index","timestamp","num","lo","hi","closest","zone_name","country_code","offsetNext","offsetPrev","target","moveAmbiguousForward","moveInvalidForward","offsetAt","dataVersion","_zones","_links","_names","_countries","load","country_zones","addCountries","zoneExists","didShowError","guess","ignoreCache","zonesForCountry","country","with_offset","old","abbrWrap","_z","resetZoneWrap","defaultZone","z","setDefault","require$$0","require$$1","numbersPast","numbersFuture","translate","verbalNumber","ll","lll","llll","processRelativeTime","monthsParseExact","weekdaysParseExact","translations","de","airplane","arrival","back","bikerentalstation","bus","cancel","currentposition","delete","departure","favourite","ferry","ownlocations","loading","rail","street","subway","station","tram","venue","where","place","en","bikepark","carpark","platform","required","track","fi","vehiclerentalstation","pl","sv","styleInject","css","ref","insertAt","document","head","getElementsByTagName","style","createElement","firstChild","insertBefore","appendChild","styleSheet","cssText","createTextNode","AutosuggestPatch","Autosuggest","props","super","self","onSuggestionTouchMove","justSelectedSuggestion","pressedSuggestion","MobileSearch","appElement","closeHandle","clearInput","suggestions","inputProps","fetchFunction","renderSuggestion","getSuggestionValue","ariaLabel","onSuggestionSelected","clearOldSearches","dialogHeaderText","dialogPrimaryButtonText","dialogSecondaryButtonText","clearInputButtonText","focusInput","color","hoverColor","accessiblePrimaryColor","searchOpen","fontWeights","showScroll","_inputRef$current","styles","mobileStyles","mobileNoScrollStyles","inputId","isDialogOpen","setDialogOpen","useState","inputRef","React","useRef","useEffect","ReactModal","setAppElement","onClose","useCallback","onSelect","isKeyboardSelectionEvent","event","which","keyCode","preventDefault","getValue","renderItem","className","focus","isOpen","overlayClassName","onAfterClose","shouldCloseOnEsc","medium","htmlFor","onClick","onKeyDown","tabIndex","Icon","img","alwaysRenderSuggestions","onSuggestionsFetchRequested","focusInputOnSuggestionClick","shouldRenderSuggestions","hasValue","autoFocus","renderInputComponent","Fragment","theme","DialogModal","isModalOpen","handleClose","headerText","primaryButtonText","secondaryButtonText","primaryButtonOnClick","secondaryButtonOnClick","process","env","NODE_ENV","propTypes","PropTypes","isRequired","arrayOf","object","shape","onChange","onBlur","placeholder","bool","defaultProps","g","window","ignore","header","topOnEmptyHash","speed","speedAsDuration","durationMax","durationMin","clip","easing","customEasing","updateURL","popstate","emitEvents","InvalidCharacterError","body","scrollHeight","documentElement","offsetHeight","clientHeight","getComputedStyle","height","offsetTop","activeElement","setAttribute","outline","scrollTo","CustomEvent","bubbles","detail","toggle","dispatchEvent","f","cancelScroll","cancelAnimationFrame","animateScroll","tagName","pageYOffset","querySelector","O","offsetParent","innerHeight","S","_","I","requestAnimationFrame","pushState","smoothScroll","JSON","stringify","title","matchMedia","defaultPrevented","button","metaKey","ctrlKey","shiftKey","hostname","location","pathname","href","decodeURIComponent","hash","replaceState","state","destroy","removeEventListener","Element","addEventListener","__createBinding","create","__exportStar","useArrowNavigation","listItems","onArrowUpOrDown","selectedIndex","useDebounce","setTimeout","clearTimeout","useElementSize","width","clientWidth","useIntersectionObserver","isIntersecting","IntersectionObserver","observe","unobserve","containerRef","isVisible","useIsBreakpoint","xs","mobileSmall","mobile","tablet","tabletLarge","desktopSmall","desktop","desktopLarge","innerWidth","useOnResize","useIsLoadingAfterError","useIsMobile","useIsomorphicLayoutEffect","useLayoutEffect","useOnLoseFocusWithin","watch","passive","useOnWindowFocus","visibilityState","useOutsideReacter","contains","useRunAfterUpdate","useScrollLock","lock","scrollY","top","unlock","__importDefault","__esModule","useSmoothScroll","globalThis","i18next__default","init","fallbackLng","defaultNS","interpolation","escapeValue","node","getPlatform","GTFS","modes","i18next","getSuggestionContent","suggestionType","_item$properties$adde","tail1","locality","tail2","name1","name2","translatedText","translateFutureRouteSuggestionTime","arriveBy","getLabel","DTAutosuggest","Component","newValue","newState","fInput","renderMobileSearch","isMobile","editing","valid","typingTimer","timer","setState","typing","ownPlaces","pendingSelection","suggestionIndex","selectionDone","suggestionValue","blur","handleViaPoints","focusChange","isEmbedded","closeMobileSearch","prevState","checkPendingSelection","cleanExecuted","useAll","isEmpty","isLocationSearch","newTargets","executeSearch","searchResult","translated","onClear","inputValue","clearLocationText","stateKeyDown","autosuggest","storeRef","content","SuggestionItem","ariaFavouriteString","fillInput","getAutoSuggestIcons","modeIconColors","modeSet","onSuggestionsClearRequested","inputClicked","firstSuggestion","Set","clearFutureRoutes","addResourceBundle","shouldComponentUpdate","nextProps","nextState","isEqual","componentDidUpdate","changeLanguage","UNSAFE_componentWillReceiveProps","render","translatedPlaceholder","thin","inputClassName","keyDown","ariaBarId","SearchBarId","ariaRequiredText","ariaLabelInstructions","movingToDestinationFieldText","ariaLabelText","ariaSuggestionLen","count","ariaCurrentSuggestion","suggestionAsAriaContent","selection","role","isOriginDestinationOrViapoint","mobileLabel","onSelected","cx","icon","onFocus","highlightFirstSuggestion","clearButton","storeInputReference","routesPrefix","stopsPrefix","objectOf","DTAutosuggestWithScrollLock"],"mappings":"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"}