{"version":3,"file":"formValidWaitManager.min.js","mappings":"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","sources":["webpack://ecommerce/webpack/runtime/chunk loaded","webpack://ecommerce/./src/globalizer.js","webpack://ecommerce/./src/formValidWaitManager.js","webpack://ecommerce/./node_modules/cldrjs/dist/cldr.js","webpack://ecommerce/./node_modules/cldrjs/dist/cldr/event.js","webpack://ecommerce/./node_modules/cldrjs/dist/cldr/supplemental.js","webpack://ecommerce/./node_modules/globalize/dist/globalize.js","webpack://ecommerce/./node_modules/globalize/dist/globalize/currency.js","webpack://ecommerce/./node_modules/globalize/dist/globalize/date.js","webpack://ecommerce/./node_modules/globalize/dist/globalize/message.js","webpack://ecommerce/./node_modules/globalize/dist/globalize/number.js","webpack://ecommerce/./node_modules/globalize/dist/globalize/plural.js","webpack://ecommerce/./node_modules/globalize/dist/globalize/relative-time.js","webpack://ecommerce/./node_modules/globalize/dist/globalize/unit.js","webpack://ecommerce/./node_modules/globalize/dist/node-main.js","webpack://ecommerce/./node_modules/jquery-validation-unobtrusive/dist/jquery.validate.unobtrusive.min.js","webpack://ecommerce/./node_modules/jquery-validation/dist/jquery.validate.js","webpack://ecommerce/webpack/bootstrap","webpack://ecommerce/webpack/runtime/compat get default export","webpack://ecommerce/webpack/runtime/define property getters","webpack://ecommerce/webpack/runtime/hasOwnProperty shorthand","webpack://ecommerce/webpack/runtime/jsonp chunk loading","webpack://ecommerce/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var Globalize = require('globalize');\r\n\r\nconst getLangMapping = () => {\r\n var lang = document.getElementsByTagName('html')[0].getAttribute('lang');\r\n switch (lang.toLowerCase()) {\r\n case 'it':\r\n case 'it-it':\r\n return 'it';\r\n case 'fr':\r\n case 'fr-fr':\r\n return 'fr';\r\n case 'es':\r\n case 'es-es':\r\n return 'es';\r\n case 'de':\r\n case 'de-de':\r\n return 'de';\r\n case 'en-gb':\r\n return 'en-GB';\r\n case 'ko':\r\n case 'ko-kr':\r\n return 'ko';\r\n default:\r\n return 'en';\r\n }\r\n};\r\n\r\nconst init = () => {\r\n var langMapped = getLangMapping();\r\n if (langMapped === 'it') {\r\n Globalize.load(\r\n require('cldr-data/main/it/ca-gregorian'),\r\n // require(\"cldr-data/main/it/currencies\"),\r\n require('cldr-data/main/it/dateFields'),\r\n require('cldr-data/main/it/numbers'),\r\n require('cldr-data/main/it/timeZoneNames'),\r\n require('cldr-data/main/it/units')\r\n );\r\n } else if (langMapped === 'fr') {\r\n Globalize.load(\r\n require('cldr-data/main/fr/ca-gregorian'),\r\n // require(\"cldr-data/main/fr/currencies\"),\r\n require('cldr-data/main/fr/dateFields'),\r\n require('cldr-data/main/fr/numbers'),\r\n require('cldr-data/main/fr/timeZoneNames'),\r\n require('cldr-data/main/fr/units')\r\n );\r\n } else if (langMapped === 'es') {\r\n Globalize.load(\r\n require('cldr-data/main/es/ca-gregorian'),\r\n // require(\"cldr-data/main/es/currencies\"),\r\n require('cldr-data/main/es/dateFields'),\r\n require('cldr-data/main/es/numbers'),\r\n require('cldr-data/main/es/timeZoneNames'),\r\n require('cldr-data/main/es/units')\r\n );\r\n } else if (langMapped === 'de') {\r\n Globalize.load(\r\n require('cldr-data/main/de/ca-gregorian'),\r\n // require(\"cldr-data/main/de/currencies\"),\r\n require('cldr-data/main/de/dateFields'),\r\n require('cldr-data/main/de/numbers'),\r\n require('cldr-data/main/de/timeZoneNames'),\r\n require('cldr-data/main/de/units')\r\n );\r\n } else if (langMapped === 'en-GB') {\r\n Globalize.load(\r\n require('cldr-data/main/en-GB/ca-gregorian'),\r\n // require(\"cldr-data/main/en-GB/currencies\"),\r\n require('cldr-data/main/en-GB/dateFields'),\r\n require('cldr-data/main/en-GB/numbers'),\r\n require('cldr-data/main/en-GB/timeZoneNames'),\r\n require('cldr-data/main/en-GB/units')\r\n );\r\n } else if (langMapped === 'ko') {\r\n Globalize.load(\r\n require('cldr-data/main/ko/ca-gregorian'),\r\n // require(\"cldr-data/main/ko/currencies\"),\r\n require('cldr-data/main/ko/dateFields'),\r\n require('cldr-data/main/ko/numbers'),\r\n require('cldr-data/main/ko/timeZoneNames'),\r\n require('cldr-data/main/ko/units')\r\n );\r\n } else {\r\n Globalize.load(\r\n require('cldr-data/main/en/ca-gregorian'),\r\n // require(\"cldr-data/main/en/currencies\"),\r\n require('cldr-data/main/en/dateFields'),\r\n require('cldr-data/main/en/numbers'),\r\n require('cldr-data/main/en/timeZoneNames'),\r\n require('cldr-data/main/en/units')\r\n );\r\n }\r\n\r\n Globalize.load(\r\n // require(\"cldr-data/supplemental/currencyData\"),\r\n require('cldr-data/supplemental/likelySubtags'),\r\n require('cldr-data/supplemental/metaZones'),\r\n // require(\"cldr-data/supplemental/plurals\"),\r\n require('cldr-data/supplemental/timeData'),\r\n require('cldr-data/supplemental/weekData')\r\n );\r\n\r\n Globalize.locale(langMapped);\r\n};\r\n\r\nconst parseDate = (value) => {\r\n return Globalize.parseDate(value, { skeleton: 'yMd' });\r\n};\r\n\r\nconst formatDateShort = (date) => {\r\n return Globalize.formatDate(new Date(date), { date: 'short' });\r\n};\r\n\r\nconst formatDateLong = (date) => {\r\n return Globalize.formatDate(new Date(date), { date: 'long' });\r\n};\r\n\r\nconst formatDateFull = (date) => {\r\n // \"The fields are from the Date Field Symbol Table in Date Format Patterns\"\r\n // Ref: http://www.unicode.org/reports/tr35/tr35-dates.html#availableFormats_appendItems\r\n // I.e., check for invalid characters.\r\n // /[^GyYuUrQqMLlwWEecdDFghHKkmsSAzZOvVXx]/\r\n return Globalize.formatDate(new Date(date), {\r\n skeleton: 'MMMMEEEEd',\r\n });\r\n};\r\n\r\nconst numberFormatterPercent = (\r\n number,\r\n maximumFractionDigits = 0,\r\n round = 'floor'\r\n) => {\r\n return Globalize.numberFormatter({\r\n style: 'percent',\r\n round: round,\r\n maximumFractionDigits: maximumFractionDigits,\r\n })(number / 100);\r\n};\r\n\r\nconst formatNumber = (number, fractionDigits = 2) => {\r\n return Globalize.formatNumber(number, {\r\n minimumFractionDigits: fractionDigits,\r\n maximumFractionDigits: fractionDigits,\r\n });\r\n};\r\n\r\nvar Globalizer = {\r\n getLangMapping,\r\n init,\r\n parseDate,\r\n formatDateShort,\r\n formatDateLong,\r\n formatDateFull,\r\n numberFormatterPercent,\r\n formatNumber,\r\n};\r\n\r\nexport default Globalizer;\r\n","import $ from 'jquery';\r\nrequire('jquery-validation');\r\nimport Globalizer from './globalizer.js';\r\n\r\n$.validator.methods.date = function (value, element) {\r\n //Chrome di merda passa le date sempre in ISO1901 indipendentemente da quello che gli dico\r\n var parsedDate = Globalizer.formatDateLong(value);\r\n var result = this.optional(element) || parsedDate;\r\n return result;\r\n};\r\n//Per la validazione clientside dell'attributo BooleanRequired\r\n$.validator.unobtrusive.adapters.add('booleanrequired', function (options) {\r\n if (\r\n options.element.tagName.toUpperCase() === 'INPUT' &&\r\n options.element.type.toUpperCase() === 'CHECKBOX'\r\n ) {\r\n options.rules.required = true;\r\n if (options.message) options.messages.required = options.message;\r\n }\r\n});\r\n$.validator.unobtrusive.adapters.add(\r\n 'provincelengthoncountry',\r\n ['country', 'valuetocheck', 'maxlength'],\r\n function (options) {\r\n options.rules['provincelengthoncountry'] = {\r\n country: options.params.country,\r\n valuetocheck: options.params.valuetocheck,\r\n maxlength: options.params.maxlength,\r\n };\r\n options.messages['provincelengthoncountry'] = options.message;\r\n }\r\n);\r\n$.validator.addMethod(\r\n 'provincelengthoncountry',\r\n function (value, element, params) {\r\n var $country = $('#' + params.country);\r\n var countryVal = $country.val();\r\n if (\r\n countryVal === params.valuetocheck &&\r\n value.length > params.maxlength\r\n )\r\n return false;\r\n return true;\r\n }\r\n);\r\n\r\nconst handleWaitIfFormIsValid = () => {\r\n if (document.querySelectorAll('.js-button-wait').length > 0) {\r\n Array.prototype.forEach.call(\r\n document.querySelectorAll('.js-button-wait'),\r\n (buttonWait) => {\r\n buttonWait.onclick = (e) => {\r\n e.currentTarget.classList.add('button--wait');\r\n };\r\n }\r\n );\r\n\r\n $('form').submit(function () {\r\n let $this = $(this);\r\n if (!$this.valid()) {\r\n $('.js-button-wait').removeClass('button--wait');\r\n }\r\n });\r\n }\r\n};\r\n\r\ndocument.addEventListener('DOMContentLoaded', function (event) {\r\n handleWaitIfFormIsValid();\r\n});\r\n","/**\n * CLDR JavaScript Library v0.5.4\n * http://jquery.com/\n *\n * Copyright 2013 Rafael Xavier de Souza\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2020-10-22T15:56Z\n */\n/*!\n * CLDR JavaScript Library v0.5.4 2020-10-22T15:56Z MIT license © Rafael Xavier\n * http://git.io/h4lmVg\n */\n(function( root, factory ) {\n\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\t// AMD.\n\t\tdefine( factory );\n\t} else if ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\t\t// Node. CommonJS.\n\t\tmodule.exports = factory();\n\t} else {\n\t\t// Global\n\t\troot.Cldr = factory();\n\t}\n\n}( this, function() {\n\n\n\tvar arrayIsArray = Array.isArray || function( obj ) {\n\t\treturn Object.prototype.toString.call( obj ) === \"[object Array]\";\n\t};\n\n\n\n\n\tvar pathNormalize = function( path, attributes ) {\n\t\tif ( arrayIsArray( path ) ) {\n\t\t\tpath = path.join( \"/\" );\n\t\t}\n\t\tif ( typeof path !== \"string\" ) {\n\t\t\tthrow new Error( \"invalid path \\\"\" + path + \"\\\"\" );\n\t\t}\n\t\t// 1: Ignore leading slash `/`\n\t\t// 2: Ignore leading `cldr/`\n\t\tpath = path\n\t\t\t.replace( /^\\// , \"\" ) /* 1 */\n\t\t\t.replace( /^cldr\\// , \"\" ); /* 2 */\n\n\t\t// Replace {attribute}'s\n\t\tpath = path.replace( /{[a-zA-Z]+}/g, function( name ) {\n\t\t\tname = name.replace( /^{([^}]*)}$/, \"$1\" );\n\t\t\treturn attributes[ name ];\n\t\t});\n\n\t\treturn path.split( \"/\" );\n\t};\n\n\n\n\n\tvar arraySome = function( array, callback ) {\n\t\tvar i, length;\n\t\tif ( array.some ) {\n\t\t\treturn array.some( callback );\n\t\t}\n\t\tfor ( i = 0, length = array.length; i < length; i++ ) {\n\t\t\tif ( callback( array[ i ], i, array ) ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t};\n\n\n\n\n\t/**\n\t * Return the maximized language id as defined in\n\t * http://www.unicode.org/reports/tr35/#Likely_Subtags\n\t * 1. Canonicalize.\n\t * 1.1 Make sure the input locale is in canonical form: uses the right\n\t * separator, and has the right casing.\n\t * TODO Right casing? What df? It seems languages are lowercase, scripts are\n\t * Capitalized, territory is uppercase. I am leaving this as an exercise to\n\t * the user.\n\t *\n\t * 1.2 Replace any deprecated subtags with their canonical values using the\n\t * data in supplemental metadata. Use the first value in the\n\t * replacement list, if it exists. Language tag replacements may have multiple\n\t * parts, such as \"sh\" ➞ \"sr_Latn\" or mo\" ➞ \"ro_MD\". In such a case, the\n\t * original script and/or region are retained if there is one. Thus\n\t * \"sh_Arab_AQ\" ➞ \"sr_Arab_AQ\", not \"sr_Latn_AQ\".\n\t * TODO What data?\n\t *\n\t * 1.3 If the tag is grandfathered (see in the supplemental data), then return it.\n\t * TODO grandfathered?\n\t *\n\t * 1.4 Remove the script code 'Zzzz' and the region code 'ZZ' if they occur.\n\t * 1.5 Get the components of the cleaned-up source tag (languages, scripts,\n\t * and regions), plus any variants and extensions.\n\t * 2. Lookup. Lookup each of the following in order, and stop on the first\n\t * match:\n\t * 2.1 languages_scripts_regions\n\t * 2.2 languages_regions\n\t * 2.3 languages_scripts\n\t * 2.4 languages\n\t * 2.5 und_scripts\n\t * 3. Return\n\t * 3.1 If there is no match, either return an error value, or the match for\n\t * \"und\" (in APIs where a valid language tag is required).\n\t * 3.2 Otherwise there is a match = languagem_scriptm_regionm\n\t * 3.3 Let xr = xs if xs is not empty, and xm otherwise.\n\t * 3.4 Return the language tag composed of languager _ scriptr _ regionr +\n\t * variants + extensions.\n\t *\n\t * @subtags [Array] normalized language id subtags tuple (see init.js).\n\t */\n\tvar coreLikelySubtags = function( Cldr, cldr, subtags, options ) {\n\t\tvar match, matchFound,\n\t\t\tlanguage = subtags[ 0 ],\n\t\t\tscript = subtags[ 1 ],\n\t\t\tsep = Cldr.localeSep,\n\t\t\tterritory = subtags[ 2 ],\n\t\t\tvariants = subtags.slice( 3, 4 );\n\t\toptions = options || {};\n\n\t\t// Skip if (language, script, territory) is not empty [3.3]\n\t\tif ( language !== \"und\" && script !== \"Zzzz\" && territory !== \"ZZ\" ) {\n\t\t\treturn [ language, script, territory ].concat( variants );\n\t\t}\n\n\t\t// Skip if no supplemental likelySubtags data is present\n\t\tif ( typeof cldr.get( \"supplemental/likelySubtags\" ) === \"undefined\" ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// [2]\n\t\tmatchFound = arraySome([\n\t\t\t[ language, script, territory ],\n\t\t\t[ language, territory ],\n\t\t\t[ language, script ],\n\t\t\t[ language ],\n\t\t\t[ \"und\", script ]\n\t\t], function( test ) {\n\t\t\treturn match = !(/\\b(Zzzz|ZZ)\\b/).test( test.join( sep ) ) /* [1.4] */ && cldr.get( [ \"supplemental/likelySubtags\", test.join( sep ) ] );\n\t\t});\n\n\t\t// [3]\n\t\tif ( matchFound ) {\n\t\t\t// [3.2 .. 3.4]\n\t\t\tmatch = match.split( sep );\n\t\t\treturn [\n\t\t\t\tlanguage !== \"und\" ? language : match[ 0 ],\n\t\t\t\tscript !== \"Zzzz\" ? script : match[ 1 ],\n\t\t\t\tterritory !== \"ZZ\" ? territory : match[ 2 ]\n\t\t\t].concat( variants );\n\t\t} else if ( options.force ) {\n\t\t\t// [3.1.2]\n\t\t\treturn cldr.get( \"supplemental/likelySubtags/und\" ).split( sep );\n\t\t} else {\n\t\t\t// [3.1.1]\n\t\t\treturn;\n\t\t}\n\t};\n\n\n\n\t/**\n\t * Given a locale, remove any fields that Add Likely Subtags would add.\n\t * http://www.unicode.org/reports/tr35/#Likely_Subtags\n\t * 1. First get max = AddLikelySubtags(inputLocale). If an error is signaled,\n\t * return it.\n\t * 2. Remove the variants from max.\n\t * 3. Then for trial in {language, language _ region, language _ script}. If\n\t * AddLikelySubtags(trial) = max, then return trial + variants.\n\t * 4. If you do not get a match, return max + variants.\n\t * \n\t * @maxLanguageId [Array] maxLanguageId tuple (see init.js).\n\t */\n\tvar coreRemoveLikelySubtags = function( Cldr, cldr, maxLanguageId ) {\n\t\tvar match, matchFound,\n\t\t\tlanguage = maxLanguageId[ 0 ],\n\t\t\tscript = maxLanguageId[ 1 ],\n\t\t\tterritory = maxLanguageId[ 2 ],\n\t\t\tvariants = maxLanguageId[ 3 ];\n\n\t\t// [3]\n\t\tmatchFound = arraySome([\n\t\t\t[ [ language, \"Zzzz\", \"ZZ\" ], [ language ] ],\n\t\t\t[ [ language, \"Zzzz\", territory ], [ language, territory ] ],\n\t\t\t[ [ language, script, \"ZZ\" ], [ language, script ] ]\n\t\t], function( test ) {\n\t\t\tvar result = coreLikelySubtags( Cldr, cldr, test[ 0 ] );\n\t\t\tmatch = test[ 1 ];\n\t\t\treturn result && result[ 0 ] === maxLanguageId[ 0 ] &&\n\t\t\t\tresult[ 1 ] === maxLanguageId[ 1 ] &&\n\t\t\t\tresult[ 2 ] === maxLanguageId[ 2 ];\n\t\t});\n\n\t\tif ( matchFound ) {\n\t\t\tif ( variants ) {\n\t\t\t\tmatch.push( variants );\n\t\t\t}\n\t\t\treturn match;\n\t\t}\n\n\t\t// [4]\n\t\treturn maxLanguageId;\n\t};\n\n\n\n\n\t/**\n\t * subtags( locale )\n\t *\n\t * @locale [String]\n\t */\n\tvar coreSubtags = function( locale ) {\n\t\tvar aux, unicodeLanguageId,\n\t\t\tsubtags = [];\n\n\t\tlocale = locale.replace( /_/, \"-\" );\n\n\t\t// Unicode locale extensions.\n\t\taux = locale.split( \"-u-\" );\n\t\tif ( aux[ 1 ] ) {\n\t\t\taux[ 1 ] = aux[ 1 ].split( \"-t-\" );\n\t\t\tlocale = aux[ 0 ] + ( aux[ 1 ][ 1 ] ? \"-t-\" + aux[ 1 ][ 1 ] : \"\");\n\t\t\tsubtags[ 4 /* unicodeLocaleExtensions */ ] = aux[ 1 ][ 0 ];\n\t\t}\n\n\t\t// TODO normalize transformed extensions. Currently, skipped.\n\t\t// subtags[ x ] = locale.split( \"-t-\" )[ 1 ];\n\t\tunicodeLanguageId = locale.split( \"-t-\" )[ 0 ];\n\n\t\t// unicode_language_id = \"root\"\n\t\t// | unicode_language_subtag \n\t\t// (sep unicode_script_subtag)? \n\t\t// (sep unicode_region_subtag)?\n\t\t// (sep unicode_variant_subtag)* ;\n\t\t//\n\t\t// Although unicode_language_subtag = alpha{2,8}, I'm using alpha{2,3}. Because, there's no language on CLDR lengthier than 3.\n\t\taux = unicodeLanguageId.match( /^(([a-z]{2,3})(-([A-Z][a-z]{3}))?(-([A-Z]{2}|[0-9]{3}))?)((-([a-zA-Z0-9]{5,8}|[0-9][a-zA-Z0-9]{3}))*)$|^(root)$/ );\n\t\tif ( aux === null ) {\n\t\t\treturn [ \"und\", \"Zzzz\", \"ZZ\" ];\n\t\t}\n\t\tsubtags[ 0 /* language */ ] = aux[ 10 ] /* root */ || aux[ 2 ] || \"und\";\n\t\tsubtags[ 1 /* script */ ] = aux[ 4 ] || \"Zzzz\";\n\t\tsubtags[ 2 /* territory */ ] = aux[ 6 ] || \"ZZ\";\n\t\tif ( aux[ 7 ] && aux[ 7 ].length ) {\n\t\t\tsubtags[ 3 /* variant */ ] = aux[ 7 ].slice( 1 ) /* remove leading \"-\" */;\n\t\t}\n\n\t\t// 0: language\n\t\t// 1: script\n\t\t// 2: territory (aka region)\n\t\t// 3: variant\n\t\t// 4: unicodeLocaleExtensions\n\t\treturn subtags;\n\t};\n\n\n\n\n\tvar arrayForEach = function( array, callback ) {\n\t\tvar i, length;\n\t\tif ( array.forEach ) {\n\t\t\treturn array.forEach( callback );\n\t\t}\n\t\tfor ( i = 0, length = array.length; i < length; i++ ) {\n\t\t\tcallback( array[ i ], i, array );\n\t\t}\n\t};\n\n\n\n\n\t/**\n\t * bundleLookup( minLanguageId )\n\t *\n\t * @Cldr [Cldr class]\n\t *\n\t * @cldr [Cldr instance]\n\t *\n\t * @minLanguageId [String] requested languageId after applied remove likely subtags.\n\t */\n\tvar bundleLookup = function( Cldr, cldr, minLanguageId ) {\n\t\tvar availableBundleMap = Cldr._availableBundleMap,\n\t\t\tavailableBundleMapQueue = Cldr._availableBundleMapQueue;\n\n\t\tif ( availableBundleMapQueue.length ) {\n\t\t\tarrayForEach( availableBundleMapQueue, function( bundle, i ) {\n\t\t\t\tvar existing, maxBundle, minBundle, subtags;\n\t\t\t\tsubtags = coreSubtags( bundle );\n\t\t\t\tmaxBundle = coreLikelySubtags( Cldr, cldr, subtags );\n\t\t\t\tif ( maxBundle === undefined ) {\n\t\t\t\t\tavailableBundleMapQueue.splice( i, 1 );\n\t\t\t\t\tthrow new Error( \"Could not find likelySubtags for \" + bundle );\n\t\t\t\t}\n\t\t\t\tminBundle = coreRemoveLikelySubtags( Cldr, cldr, maxBundle );\n\t\t\t\tminBundle = minBundle.join( Cldr.localeSep );\n\t\t\t\texisting = availableBundleMap[ minBundle ];\n\t\t\t\tif ( existing && existing.length < bundle.length ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tavailableBundleMap[ minBundle ] = bundle;\n\t\t\t});\n\t\t\tCldr._availableBundleMapQueue = [];\n\t\t}\n\n\t\treturn availableBundleMap[ minLanguageId ] || null;\n\t};\n\n\n\n\n\tvar objectKeys = function( object ) {\n\t\tvar i,\n\t\t\tresult = [];\n\n\t\tif ( Object.keys ) {\n\t\t\treturn Object.keys( object );\n\t\t}\n\n\t\tfor ( i in object ) {\n\t\t\tresult.push( i );\n\t\t}\n\n\t\treturn result;\n\t};\n\n\n\n\n\tvar createError = function( code, attributes ) {\n\t\tvar error, message;\n\n\t\tmessage = code + ( attributes && JSON ? \": \" + JSON.stringify( attributes ) : \"\" );\n\t\terror = new Error( message );\n\t\terror.code = code;\n\n\t\t// extend( error, attributes );\n\t\tarrayForEach( objectKeys( attributes ), function( attribute ) {\n\t\t\terror[ attribute ] = attributes[ attribute ];\n\t\t});\n\n\t\treturn error;\n\t};\n\n\n\n\n\tvar validate = function( code, check, attributes ) {\n\t\tif ( !check ) {\n\t\t\tthrow createError( code, attributes );\n\t\t}\n\t};\n\n\n\n\n\tvar validatePresence = function( value, name ) {\n\t\tvalidate( \"E_MISSING_PARAMETER\", typeof value !== \"undefined\", {\n\t\t\tname: name\n\t\t});\n\t};\n\n\n\n\n\tvar validateType = function( value, name, check, expected ) {\n\t\tvalidate( \"E_INVALID_PAR_TYPE\", check, {\n\t\t\texpected: expected,\n\t\t\tname: name,\n\t\t\tvalue: value\n\t\t});\n\t};\n\n\n\n\n\tvar validateTypePath = function( value, name ) {\n\t\tvalidateType( value, name, typeof value === \"string\" || arrayIsArray( value ), \"String or Array\" );\n\t};\n\n\n\n\n\t/**\n\t * Function inspired by jQuery Core, but reduced to our use case.\n\t */\n\tvar isPlainObject = function( obj ) {\n\t\treturn obj !== null && \"\" + obj === \"[object Object]\";\n\t};\n\n\n\n\n\tvar validateTypePlainObject = function( value, name ) {\n\t\tvalidateType( value, name, typeof value === \"undefined\" || isPlainObject( value ), \"Plain Object\" );\n\t};\n\n\n\n\n\tvar validateTypeString = function( value, name ) {\n\t\tvalidateType( value, name, typeof value === \"string\", \"a string\" );\n\t};\n\n\n\n\n\t// @path: normalized path\n\tvar resourceGet = function( data, path ) {\n\t\tvar i,\n\t\t\tnode = data,\n\t\t\tlength = path.length;\n\n\t\tfor ( i = 0; i < length - 1; i++ ) {\n\t\t\tnode = node[ path[ i ] ];\n\t\t\tif ( !node ) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t}\n\t\treturn node[ path[ i ] ];\n\t};\n\n\n\n\n\t/**\n\t * setAvailableBundles( Cldr, json )\n\t *\n\t * @Cldr [Cldr class]\n\t *\n\t * @json resolved/unresolved cldr data.\n\t *\n\t * Set available bundles queue based on passed json CLDR data. Considers a bundle as any String at /main/{bundle}.\n\t */\n\tvar coreSetAvailableBundles = function( Cldr, json ) {\n\t\tvar bundle,\n\t\t\tavailableBundleMapQueue = Cldr._availableBundleMapQueue,\n\t\t\tmain = resourceGet( json, [ \"main\" ] );\n\n\t\tif ( main ) {\n\t\t\tfor ( bundle in main ) {\n\t\t\t\tif ( main.hasOwnProperty( bundle ) && bundle !== \"root\" &&\n\t\t\t\t\t\t\tavailableBundleMapQueue.indexOf( bundle ) === -1 ) {\n\t\t\t\t\tavailableBundleMapQueue.push( bundle );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\n\n\tvar alwaysArray = function( somethingOrArray ) {\n\t\treturn arrayIsArray( somethingOrArray ) ? somethingOrArray : [ somethingOrArray ];\n\t};\n\n\n\tvar jsonMerge = (function() {\n\n\t// Returns new deeply merged JSON.\n\t//\n\t// Eg.\n\t// merge( { a: { b: 1, c: 2 } }, { a: { b: 3, d: 4 } } )\n\t// -> { a: { b: 3, c: 2, d: 4 } }\n\t//\n\t// @arguments JSON's\n\t// \n\tvar merge = function() {\n\t\tvar destination = {},\n\t\t\tsources = [].slice.call( arguments, 0 );\n\t\tarrayForEach( sources, function( source ) {\n\t\t\tvar prop;\n\t\t\tfor ( prop in source ) {\n\t\t\t\tif ( prop in destination && typeof destination[ prop ] === \"object\" && !arrayIsArray( destination[ prop ] ) ) {\n\n\t\t\t\t\t// Merge Objects\n\t\t\t\t\tdestination[ prop ] = merge( destination[ prop ], source[ prop ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Set new values\n\t\t\t\t\tdestination[ prop ] = source[ prop ];\n\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn destination;\n\t};\n\n\treturn merge;\n\n}());\n\n\n\t/**\n\t * load( Cldr, source, jsons )\n\t *\n\t * @Cldr [Cldr class]\n\t *\n\t * @source [Object]\n\t *\n\t * @jsons [arguments]\n\t */\n\tvar coreLoad = function( Cldr, source, jsons ) {\n\t\tvar i, j, json;\n\n\t\tvalidatePresence( jsons[ 0 ], \"json\" );\n\n\t\t// Support arbitrary parameters, e.g., `Cldr.load({...}, {...})`.\n\t\tfor ( i = 0; i < jsons.length; i++ ) {\n\n\t\t\t// Support array parameters, e.g., `Cldr.load([{...}, {...}])`.\n\t\t\tjson = alwaysArray( jsons[ i ] );\n\n\t\t\tfor ( j = 0; j < json.length; j++ ) {\n\t\t\t\tvalidateTypePlainObject( json[ j ], \"json\" );\n\t\t\t\tsource = jsonMerge( source, json[ j ] );\n\t\t\t\tcoreSetAvailableBundles( Cldr, json[ j ] );\n\t\t\t}\n\t\t}\n\n\t\treturn source;\n\t};\n\n\n\n\tvar itemGetResolved = function( Cldr, path, attributes ) {\n\t\t// Resolve path\n\t\tvar normalizedPath = pathNormalize( path, attributes );\n\n\t\treturn resourceGet( Cldr._resolved, normalizedPath );\n\t};\n\n\n\n\n\t/**\n\t * new Cldr()\n\t */\n\tvar Cldr = function( locale ) {\n\t\tthis.init( locale );\n\t};\n\n\t// Build optimization hack to avoid duplicating functions across modules.\n\tCldr._alwaysArray = alwaysArray;\n\tCldr._coreLoad = coreLoad;\n\tCldr._createError = createError;\n\tCldr._itemGetResolved = itemGetResolved;\n\tCldr._jsonMerge = jsonMerge;\n\tCldr._pathNormalize = pathNormalize;\n\tCldr._resourceGet = resourceGet;\n\tCldr._validatePresence = validatePresence;\n\tCldr._validateType = validateType;\n\tCldr._validateTypePath = validateTypePath;\n\tCldr._validateTypePlainObject = validateTypePlainObject;\n\n\tCldr._availableBundleMap = {};\n\tCldr._availableBundleMapQueue = [];\n\tCldr._resolved = {};\n\n\t// Allow user to override locale separator \"-\" (default) | \"_\". According to http://www.unicode.org/reports/tr35/#Unicode_language_identifier, both \"-\" and \"_\" are valid locale separators (eg. \"en_GB\", \"en-GB\"). According to http://unicode.org/cldr/trac/ticket/6786 its usage must be consistent throughout the data set.\n\tCldr.localeSep = \"-\";\n\n\t/**\n\t * Cldr.load( json [, json, ...] )\n\t *\n\t * @json [JSON] CLDR data or [Array] Array of @json's.\n\t *\n\t * Load resolved cldr data.\n\t */\n\tCldr.load = function() {\n\t\tCldr._resolved = coreLoad( Cldr, Cldr._resolved, arguments );\n\t};\n\n\t/**\n\t * .init() automatically run on instantiation/construction.\n\t */\n\tCldr.prototype.init = function( locale ) {\n\t\tvar attributes, language, maxLanguageId, minLanguageId, script, subtags, territory, unicodeLocaleExtensions, variant,\n\t\t\tsep = Cldr.localeSep,\n\t\t\tunicodeLocaleExtensionsRaw = \"\";\n\n\t\tvalidatePresence( locale, \"locale\" );\n\t\tvalidateTypeString( locale, \"locale\" );\n\n\t\tsubtags = coreSubtags( locale );\n\n\t\tif ( subtags.length === 5 ) {\n\t\t\tunicodeLocaleExtensions = subtags.pop();\n\t\t\tunicodeLocaleExtensionsRaw = sep + \"u\" + sep + unicodeLocaleExtensions;\n\t\t\t// Remove trailing null when there is unicodeLocaleExtensions but no variants.\n\t\t\tif ( !subtags[ 3 ] ) {\n\t\t\t\tsubtags.pop();\n\t\t\t}\n\t\t}\n\t\tvariant = subtags[ 3 ];\n\n\t\t// Normalize locale code.\n\t\t// Get (or deduce) the \"triple subtags\": language, territory (also aliased as region), and script subtags.\n\t\t// Get the variant subtags (calendar, collation, currency, etc).\n\t\t// refs:\n\t\t// - http://www.unicode.org/reports/tr35/#Field_Definitions\n\t\t// - http://www.unicode.org/reports/tr35/#Language_and_Locale_IDs\n\t\t// - http://www.unicode.org/reports/tr35/#Unicode_locale_identifier\n\n\t\t// When a locale id does not specify a language, or territory (region), or script, they are obtained by Likely Subtags.\n\t\tmaxLanguageId = coreLikelySubtags( Cldr, this, subtags, { force: true } ) || subtags;\n\t\tlanguage = maxLanguageId[ 0 ];\n\t\tscript = maxLanguageId[ 1 ];\n\t\tterritory = maxLanguageId[ 2 ];\n\n\t\tminLanguageId = coreRemoveLikelySubtags( Cldr, this, maxLanguageId ).join( sep );\n\n\t\t// Set attributes\n\t\tthis.attributes = attributes = {\n\t\t\tbundle: bundleLookup( Cldr, this, minLanguageId ),\n\n\t\t\t// Unicode Language Id\n\t\t\tminLanguageId: minLanguageId + unicodeLocaleExtensionsRaw,\n\t\t\tmaxLanguageId: maxLanguageId.join( sep ) + unicodeLocaleExtensionsRaw,\n\n\t\t\t// Unicode Language Id Subtabs\n\t\t\tlanguage: language,\n\t\t\tscript: script,\n\t\t\tterritory: territory,\n\t\t\tregion: territory, /* alias */\n\t\t\tvariant: variant\n\t\t};\n\n\t\t// Unicode locale extensions.\n\t\tunicodeLocaleExtensions && ( \"-\" + unicodeLocaleExtensions ).replace( /-[a-z]{3,8}|(-[a-z]{2})-([a-z]{3,8})/g, function( attribute, key, type ) {\n\n\t\t\tif ( key ) {\n\n\t\t\t\t// Extension is in the `keyword` form.\n\t\t\t\tattributes[ \"u\" + key ] = type;\n\t\t\t} else {\n\n\t\t\t\t// Extension is in the `attribute` form.\n\t\t\t\tattributes[ \"u\" + attribute ] = true;\n\t\t\t}\n\t\t});\n\n\t\tthis.locale = locale;\n\t};\n\n\t/**\n\t * .get()\n\t */\n\tCldr.prototype.get = function( path ) {\n\n\t\tvalidatePresence( path, \"path\" );\n\t\tvalidateTypePath( path, \"path\" );\n\n\t\treturn itemGetResolved( Cldr, path, this.attributes );\n\t};\n\n\t/**\n\t * .main()\n\t */\n\tCldr.prototype.main = function( path ) {\n\t\tvalidatePresence( path, \"path\" );\n\t\tvalidateTypePath( path, \"path\" );\n\n\t\tvalidate( \"E_MISSING_BUNDLE\", this.attributes.bundle !== null, {\n\t\t\tlocale: this.locale\n\t\t});\n\n\t\tpath = alwaysArray( path );\n\t\treturn this.get( [ \"main/{bundle}\" ].concat( path ) );\n\t};\n\n\treturn Cldr;\n\n\n\n\n}));\n","/**\n * CLDR JavaScript Library v0.5.4\n * http://jquery.com/\n *\n * Copyright 2013 Rafael Xavier de Souza\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2020-10-22T15:56Z\n */\n/*!\n * CLDR JavaScript Library v0.5.4 2020-10-22T15:56Z MIT license © Rafael Xavier\n * http://git.io/h4lmVg\n */\n(function( factory ) {\n\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\t// AMD.\n\t\tdefine( [ \"../cldr\" ], factory );\n\t} else if ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\t\t// Node. CommonJS.\n\t\tmodule.exports = factory( require( \"../cldr\" ) );\n\t} else {\n\t\t// Global\n\t\tfactory( Cldr );\n\t}\n\n}(function( Cldr ) {\n\n\t// Build optimization hack to avoid duplicating functions across modules.\n\tvar pathNormalize = Cldr._pathNormalize,\n\t\tvalidatePresence = Cldr._validatePresence,\n\t\tvalidateType = Cldr._validateType;\n\n/*!\n * EventEmitter v4.2.7 - git.io/ee\n * Oliver Caldwell\n * MIT license\n * @preserve\n */\n\nvar EventEmitter;\n/* jshint ignore:start */\nEventEmitter = (function () {\n\n\n\t/**\n\t * Class for managing events.\n\t * Can be extended to provide event functionality in other classes.\n\t *\n\t * @class EventEmitter Manages event registering and emitting.\n\t */\n\tfunction EventEmitter() {}\n\n\t// Shortcuts to improve speed and size\n\tvar proto = EventEmitter.prototype;\n\tvar exports = {};\n\t\n\n\t/**\n\t * Finds the index of the listener for the event in it's storage array.\n\t *\n\t * @param {Function[]} listeners Array of listeners to search through.\n\t * @param {Function} listener Method to look for.\n\t * @return {Number} Index of the specified listener, -1 if not found\n\t * @api private\n\t */\n\tfunction indexOfListener(listeners, listener) {\n\t\tvar i = listeners.length;\n\t\twhile (i--) {\n\t\t\tif (listeners[i].listener === listener) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\n\t\treturn -1;\n\t}\n\n\t/**\n\t * Alias a method while keeping the context correct, to allow for overwriting of target method.\n\t *\n\t * @param {String} name The name of the target method.\n\t * @return {Function} The aliased method\n\t * @api private\n\t */\n\tfunction alias(name) {\n\t\treturn function aliasClosure() {\n\t\t\treturn this[name].apply(this, arguments);\n\t\t};\n\t}\n\n\t/**\n\t * Returns the listener array for the specified event.\n\t * Will initialise the event object and listener arrays if required.\n\t * Will return an object if you use a regex search. The object contains keys for each matched event. So /ba[rz]/ might return an object containing bar and baz. But only if you have either defined them with defineEvent or added some listeners to them.\n\t * Each property in the object response is an array of listener functions.\n\t *\n\t * @param {String|RegExp} evt Name of the event to return the listeners from.\n\t * @return {Function[]|Object} All listener functions for the event.\n\t */\n\tproto.getListeners = function getListeners(evt) {\n\t\tvar events = this._getEvents();\n\t\tvar response;\n\t\tvar key;\n\n\t\t// Return a concatenated array of all matching events if\n\t\t// the selector is a regular expression.\n\t\tif (evt instanceof RegExp) {\n\t\t\tresponse = {};\n\t\t\tfor (key in events) {\n\t\t\t\tif (events.hasOwnProperty(key) && evt.test(key)) {\n\t\t\t\t\tresponse[key] = events[key];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tresponse = events[evt] || (events[evt] = []);\n\t\t}\n\n\t\treturn response;\n\t};\n\n\t/**\n\t * Takes a list of listener objects and flattens it into a list of listener functions.\n\t *\n\t * @param {Object[]} listeners Raw listener objects.\n\t * @return {Function[]} Just the listener functions.\n\t */\n\tproto.flattenListeners = function flattenListeners(listeners) {\n\t\tvar flatListeners = [];\n\t\tvar i;\n\n\t\tfor (i = 0; i < listeners.length; i += 1) {\n\t\t\tflatListeners.push(listeners[i].listener);\n\t\t}\n\n\t\treturn flatListeners;\n\t};\n\n\t/**\n\t * Fetches the requested listeners via getListeners but will always return the results inside an object. This is mainly for internal use but others may find it useful.\n\t *\n\t * @param {String|RegExp} evt Name of the event to return the listeners from.\n\t * @return {Object} All listener functions for an event in an object.\n\t */\n\tproto.getListenersAsObject = function getListenersAsObject(evt) {\n\t\tvar listeners = this.getListeners(evt);\n\t\tvar response;\n\n\t\tif (listeners instanceof Array) {\n\t\t\tresponse = {};\n\t\t\tresponse[evt] = listeners;\n\t\t}\n\n\t\treturn response || listeners;\n\t};\n\n\t/**\n\t * Adds a listener function to the specified event.\n\t * The listener will not be added if it is a duplicate.\n\t * If the listener returns true then it will be removed after it is called.\n\t * If you pass a regular expression as the event name then the listener will be added to all events that match it.\n\t *\n\t * @param {String|RegExp} evt Name of the event to attach the listener to.\n\t * @param {Function} listener Method to be called when the event is emitted. If the function returns true then it will be removed after calling.\n\t * @return {Object} Current instance of EventEmitter for chaining.\n\t */\n\tproto.addListener = function addListener(evt, listener) {\n\t\tvar listeners = this.getListenersAsObject(evt);\n\t\tvar listenerIsWrapped = typeof listener === 'object';\n\t\tvar key;\n\n\t\tfor (key in listeners) {\n\t\t\tif (listeners.hasOwnProperty(key) && indexOfListener(listeners[key], listener) === -1) {\n\t\t\t\tlisteners[key].push(listenerIsWrapped ? listener : {\n\t\t\t\t\tlistener: listener,\n\t\t\t\t\tonce: false\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Alias of addListener\n\t */\n\tproto.on = alias('addListener');\n\n\t/**\n\t * Semi-alias of addListener. It will add a listener that will be\n\t * automatically removed after it's first execution.\n\t *\n\t * @param {String|RegExp} evt Name of the event to attach the listener to.\n\t * @param {Function} listener Method to be called when the event is emitted. If the function returns true then it will be removed after calling.\n\t * @return {Object} Current instance of EventEmitter for chaining.\n\t */\n\tproto.addOnceListener = function addOnceListener(evt, listener) {\n\t\treturn this.addListener(evt, {\n\t\t\tlistener: listener,\n\t\t\tonce: true\n\t\t});\n\t};\n\n\t/**\n\t * Alias of addOnceListener.\n\t */\n\tproto.once = alias('addOnceListener');\n\n\t/**\n\t * Defines an event name. This is required if you want to use a regex to add a listener to multiple events at once. If you don't do this then how do you expect it to know what event to add to? Should it just add to every possible match for a regex? No. That is scary and bad.\n\t * You need to tell it what event names should be matched by a regex.\n\t *\n\t * @param {String} evt Name of the event to create.\n\t * @return {Object} Current instance of EventEmitter for chaining.\n\t */\n\tproto.defineEvent = function defineEvent(evt) {\n\t\tthis.getListeners(evt);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Uses defineEvent to define multiple events.\n\t *\n\t * @param {String[]} evts An array of event names to define.\n\t * @return {Object} Current instance of EventEmitter for chaining.\n\t */\n\tproto.defineEvents = function defineEvents(evts) {\n\t\tfor (var i = 0; i < evts.length; i += 1) {\n\t\t\tthis.defineEvent(evts[i]);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Removes a listener function from the specified event.\n\t * When passed a regular expression as the event name, it will remove the listener from all events that match it.\n\t *\n\t * @param {String|RegExp} evt Name of the event to remove the listener from.\n\t * @param {Function} listener Method to remove from the event.\n\t * @return {Object} Current instance of EventEmitter for chaining.\n\t */\n\tproto.removeListener = function removeListener(evt, listener) {\n\t\tvar listeners = this.getListenersAsObject(evt);\n\t\tvar index;\n\t\tvar key;\n\n\t\tfor (key in listeners) {\n\t\t\tif (listeners.hasOwnProperty(key)) {\n\t\t\t\tindex = indexOfListener(listeners[key], listener);\n\n\t\t\t\tif (index !== -1) {\n\t\t\t\t\tlisteners[key].splice(index, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Alias of removeListener\n\t */\n\tproto.off = alias('removeListener');\n\n\t/**\n\t * Adds listeners in bulk using the manipulateListeners method.\n\t * If you pass an object as the second argument you can add to multiple events at once. The object should contain key value pairs of events and listeners or listener arrays. You can also pass it an event name and an array of listeners to be added.\n\t * You can also pass it a regular expression to add the array of listeners to all events that match it.\n\t * Yeah, this function does quite a bit. That's probably a bad thing.\n\t *\n\t * @param {String|Object|RegExp} evt An event name if you will pass an array of listeners next. An object if you wish to add to multiple events at once.\n\t * @param {Function[]} [listeners] An optional array of listener functions to add.\n\t * @return {Object} Current instance of EventEmitter for chaining.\n\t */\n\tproto.addListeners = function addListeners(evt, listeners) {\n\t\t// Pass through to manipulateListeners\n\t\treturn this.manipulateListeners(false, evt, listeners);\n\t};\n\n\t/**\n\t * Removes listeners in bulk using the manipulateListeners method.\n\t * If you pass an object as the second argument you can remove from multiple events at once. The object should contain key value pairs of events and listeners or listener arrays.\n\t * You can also pass it an event name and an array of listeners to be removed.\n\t * You can also pass it a regular expression to remove the listeners from all events that match it.\n\t *\n\t * @param {String|Object|RegExp} evt An event name if you will pass an array of listeners next. An object if you wish to remove from multiple events at once.\n\t * @param {Function[]} [listeners] An optional array of listener functions to remove.\n\t * @return {Object} Current instance of EventEmitter for chaining.\n\t */\n\tproto.removeListeners = function removeListeners(evt, listeners) {\n\t\t// Pass through to manipulateListeners\n\t\treturn this.manipulateListeners(true, evt, listeners);\n\t};\n\n\t/**\n\t * Edits listeners in bulk. The addListeners and removeListeners methods both use this to do their job. You should really use those instead, this is a little lower level.\n\t * The first argument will determine if the listeners are removed (true) or added (false).\n\t * If you pass an object as the second argument you can add/remove from multiple events at once. The object should contain key value pairs of events and listeners or listener arrays.\n\t * You can also pass it an event name and an array of listeners to be added/removed.\n\t * You can also pass it a regular expression to manipulate the listeners of all events that match it.\n\t *\n\t * @param {Boolean} remove True if you want to remove listeners, false if you want to add.\n\t * @param {String|Object|RegExp} evt An event name if you will pass an array of listeners next. An object if you wish to add/remove from multiple events at once.\n\t * @param {Function[]} [listeners] An optional array of listener functions to add/remove.\n\t * @return {Object} Current instance of EventEmitter for chaining.\n\t */\n\tproto.manipulateListeners = function manipulateListeners(remove, evt, listeners) {\n\t\tvar i;\n\t\tvar value;\n\t\tvar single = remove ? this.removeListener : this.addListener;\n\t\tvar multiple = remove ? this.removeListeners : this.addListeners;\n\n\t\t// If evt is an object then pass each of it's properties to this method\n\t\tif (typeof evt === 'object' && !(evt instanceof RegExp)) {\n\t\t\tfor (i in evt) {\n\t\t\t\tif (evt.hasOwnProperty(i) && (value = evt[i])) {\n\t\t\t\t\t// Pass the single listener straight through to the singular method\n\t\t\t\t\tif (typeof value === 'function') {\n\t\t\t\t\t\tsingle.call(this, i, value);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t// Otherwise pass back to the multiple function\n\t\t\t\t\t\tmultiple.call(this, i, value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t// So evt must be a string\n\t\t\t// And listeners must be an array of listeners\n\t\t\t// Loop over it and pass each one to the multiple method\n\t\t\ti = listeners.length;\n\t\t\twhile (i--) {\n\t\t\t\tsingle.call(this, evt, listeners[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Removes all listeners from a specified event.\n\t * If you do not specify an event then all listeners will be removed.\n\t * That means every event will be emptied.\n\t * You can also pass a regex to remove all events that match it.\n\t *\n\t * @param {String|RegExp} [evt] Optional name of the event to remove all listeners for. Will remove from every event if not passed.\n\t * @return {Object} Current instance of EventEmitter for chaining.\n\t */\n\tproto.removeEvent = function removeEvent(evt) {\n\t\tvar type = typeof evt;\n\t\tvar events = this._getEvents();\n\t\tvar key;\n\n\t\t// Remove different things depending on the state of evt\n\t\tif (type === 'string') {\n\t\t\t// Remove all listeners for the specified event\n\t\t\tdelete events[evt];\n\t\t}\n\t\telse if (evt instanceof RegExp) {\n\t\t\t// Remove all events matching the regex.\n\t\t\tfor (key in events) {\n\t\t\t\tif (events.hasOwnProperty(key) && evt.test(key)) {\n\t\t\t\t\tdelete events[key];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t// Remove all listeners in all events\n\t\t\tdelete this._events;\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Alias of removeEvent.\n\t *\n\t * Added to mirror the node API.\n\t */\n\tproto.removeAllListeners = alias('removeEvent');\n\n\t/**\n\t * Emits an event of your choice.\n\t * When emitted, every listener attached to that event will be executed.\n\t * If you pass the optional argument array then those arguments will be passed to every listener upon execution.\n\t * Because it uses `apply`, your array of arguments will be passed as if you wrote them out separately.\n\t * So they will not arrive within the array on the other side, they will be separate.\n\t * You can also pass a regular expression to emit to all events that match it.\n\t *\n\t * @param {String|RegExp} evt Name of the event to emit and execute listeners for.\n\t * @param {Array} [args] Optional array of arguments to be passed to each listener.\n\t * @return {Object} Current instance of EventEmitter for chaining.\n\t */\n\tproto.emitEvent = function emitEvent(evt, args) {\n\t\tvar listeners = this.getListenersAsObject(evt);\n\t\tvar listener;\n\t\tvar i;\n\t\tvar key;\n\t\tvar response;\n\n\t\tfor (key in listeners) {\n\t\t\tif (listeners.hasOwnProperty(key)) {\n\t\t\t\ti = listeners[key].length;\n\n\t\t\t\twhile (i--) {\n\t\t\t\t\t// If the listener returns true then it shall be removed from the event\n\t\t\t\t\t// The function is executed either with a basic call or an apply if there is an args array\n\t\t\t\t\tlistener = listeners[key][i];\n\n\t\t\t\t\tif (listener.once === true) {\n\t\t\t\t\t\tthis.removeListener(evt, listener.listener);\n\t\t\t\t\t}\n\n\t\t\t\t\tresponse = listener.listener.apply(this, args || []);\n\n\t\t\t\t\tif (response === this._getOnceReturnValue()) {\n\t\t\t\t\t\tthis.removeListener(evt, listener.listener);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Alias of emitEvent\n\t */\n\tproto.trigger = alias('emitEvent');\n\n\t/**\n\t * Subtly different from emitEvent in that it will pass its arguments on to the listeners, as opposed to taking a single array of arguments to pass on.\n\t * As with emitEvent, you can pass a regex in place of the event name to emit to all events that match it.\n\t *\n\t * @param {String|RegExp} evt Name of the event to emit and execute listeners for.\n\t * @param {...*} Optional additional arguments to be passed to each listener.\n\t * @return {Object} Current instance of EventEmitter for chaining.\n\t */\n\tproto.emit = function emit(evt) {\n\t\tvar args = Array.prototype.slice.call(arguments, 1);\n\t\treturn this.emitEvent(evt, args);\n\t};\n\n\t/**\n\t * Sets the current value to check against when executing listeners. If a\n\t * listeners return value matches the one set here then it will be removed\n\t * after execution. This value defaults to true.\n\t *\n\t * @param {*} value The new value to check for when executing listeners.\n\t * @return {Object} Current instance of EventEmitter for chaining.\n\t */\n\tproto.setOnceReturnValue = function setOnceReturnValue(value) {\n\t\tthis._onceReturnValue = value;\n\t\treturn this;\n\t};\n\n\t/**\n\t * Fetches the current value to check against when executing listeners. If\n\t * the listeners return value matches this one then it should be removed\n\t * automatically. It will return true by default.\n\t *\n\t * @return {*|Boolean} The current value to check for or the default, true.\n\t * @api private\n\t */\n\tproto._getOnceReturnValue = function _getOnceReturnValue() {\n\t\tif (this.hasOwnProperty('_onceReturnValue')) {\n\t\t\treturn this._onceReturnValue;\n\t\t}\n\t\telse {\n\t\t\treturn true;\n\t\t}\n\t};\n\n\t/**\n\t * Fetches the events object and creates one if required.\n\t *\n\t * @return {Object} The events storage object.\n\t * @api private\n\t */\n\tproto._getEvents = function _getEvents() {\n\t\treturn this._events || (this._events = {});\n\t};\n\n\t/**\n\t * Reverts the global {@link EventEmitter} to its previous value and returns a reference to this version.\n\t *\n\t * @return {Function} Non conflicting EventEmitter class.\n\t */\n\tEventEmitter.noConflict = function noConflict() {\n\t\texports.EventEmitter = originalGlobalValue;\n\t\treturn EventEmitter;\n\t};\n\n\treturn EventEmitter;\n}());\n/* jshint ignore:end */\n\n\n\n\tvar validateTypeFunction = function( value, name ) {\n\t\tvalidateType( value, name, typeof value === \"undefined\" || typeof value === \"function\", \"Function\" );\n\t};\n\n\n\n\n\tvar superGet, superInit,\n\t\tglobalEe = new EventEmitter();\n\n\tfunction validateTypeEvent( value, name ) {\n\t\tvalidateType( value, name, typeof value === \"string\" || value instanceof RegExp, \"String or RegExp\" );\n\t}\n\n\tfunction validateThenCall( method, self ) {\n\t\treturn function( event, listener ) {\n\t\t\tvalidatePresence( event, \"event\" );\n\t\t\tvalidateTypeEvent( event, \"event\" );\n\n\t\t\tvalidatePresence( listener, \"listener\" );\n\t\t\tvalidateTypeFunction( listener, \"listener\" );\n\n\t\t\treturn self[ method ].apply( self, arguments );\n\t\t};\n\t}\n\n\tfunction off( self ) {\n\t\treturn validateThenCall( \"off\", self );\n\t}\n\n\tfunction on( self ) {\n\t\treturn validateThenCall( \"on\", self );\n\t}\n\n\tfunction once( self ) {\n\t\treturn validateThenCall( \"once\", self );\n\t}\n\n\tCldr.off = off( globalEe );\n\tCldr.on = on( globalEe );\n\tCldr.once = once( globalEe );\n\n\t/**\n\t * Overload Cldr.prototype.init().\n\t */\n\tsuperInit = Cldr.prototype.init;\n\tCldr.prototype.init = function() {\n\t\tvar ee;\n\t\tthis.ee = ee = new EventEmitter();\n\t\tthis.off = off( ee );\n\t\tthis.on = on( ee );\n\t\tthis.once = once( ee );\n\t\tsuperInit.apply( this, arguments );\n\t};\n\n\t/**\n\t * getOverload is encapsulated, because of cldr/unresolved. If it's loaded\n\t * after cldr/event (and note it overwrites .get), it can trigger this\n\t * overload again.\n\t */\n\tfunction getOverload() {\n\n\t\t/**\n\t\t * Overload Cldr.prototype.get().\n\t\t */\n\t\tsuperGet = Cldr.prototype.get;\n\t\tCldr.prototype.get = function( path ) {\n\t\t\tvar value = superGet.apply( this, arguments );\n\t\t\tpath = pathNormalize( path, this.attributes ).join( \"/\" );\n\t\t\tglobalEe.trigger( \"get\", [ path, value ] );\n\t\t\tthis.ee.trigger( \"get\", [ path, value ] );\n\t\t\treturn value;\n\t\t};\n\t}\n\n\tCldr._eventInit = getOverload;\n\tgetOverload();\n\n\treturn Cldr;\n\n\n\n\n}));\n","/**\n * CLDR JavaScript Library v0.5.4\n * http://jquery.com/\n *\n * Copyright 2013 Rafael Xavier de Souza\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2020-10-22T15:56Z\n */\n/*!\n * CLDR JavaScript Library v0.5.4 2020-10-22T15:56Z MIT license © Rafael Xavier\n * http://git.io/h4lmVg\n */\n(function( factory ) {\n\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\t// AMD.\n\t\tdefine( [ \"../cldr\" ], factory );\n\t} else if ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\t\t// Node. CommonJS.\n\t\tmodule.exports = factory( require( \"../cldr\" ) );\n\t} else {\n\t\t// Global\n\t\tfactory( Cldr );\n\t}\n\n}(function( Cldr ) {\n\n\t// Build optimization hack to avoid duplicating functions across modules.\n\tvar alwaysArray = Cldr._alwaysArray;\n\n\n\n\tvar supplementalMain = function( cldr ) {\n\n\t\tvar prepend, supplemental;\n\t\t\n\t\tprepend = function( prepend ) {\n\t\t\treturn function( path ) {\n\t\t\t\tpath = alwaysArray( path );\n\t\t\t\treturn cldr.get( [ prepend ].concat( path ) );\n\t\t\t};\n\t\t};\n\n\t\tsupplemental = prepend( \"supplemental\" );\n\n\t\t// Week Data\n\t\t// http://www.unicode.org/reports/tr35/tr35-dates.html#Week_Data\n\t\tsupplemental.weekData = prepend( \"supplemental/weekData\" );\n\n\t\tsupplemental.weekData.firstDay = function() {\n\t\t\treturn cldr.get( \"supplemental/weekData/firstDay/{territory}\" ) ||\n\t\t\t\tcldr.get( \"supplemental/weekData/firstDay/001\" );\n\t\t};\n\n\t\tsupplemental.weekData.minDays = function() {\n\t\t\tvar minDays = cldr.get( \"supplemental/weekData/minDays/{territory}\" ) ||\n\t\t\t\tcldr.get( \"supplemental/weekData/minDays/001\" );\n\t\t\treturn parseInt( minDays, 10 );\n\t\t};\n\n\t\t// Time Data\n\t\t// http://www.unicode.org/reports/tr35/tr35-dates.html#Time_Data\n\t\tsupplemental.timeData = prepend( \"supplemental/timeData\" );\n\n\t\tsupplemental.timeData.allowed = function() {\n\t\t\treturn cldr.get( \"supplemental/timeData/{territory}/_allowed\" ) ||\n\t\t\t\tcldr.get( \"supplemental/timeData/001/_allowed\" );\n\t\t};\n\n\t\tsupplemental.timeData.preferred = function() {\n\t\t\treturn cldr.get( \"supplemental/timeData/{territory}/_preferred\" ) ||\n\t\t\t\tcldr.get( \"supplemental/timeData/001/_preferred\" );\n\t\t};\n\n\t\treturn supplemental;\n\n\t};\n\n\n\n\n\tvar initSuper = Cldr.prototype.init;\n\n\t/**\n\t * .init() automatically ran on construction.\n\t *\n\t * Overload .init().\n\t */\n\tCldr.prototype.init = function() {\n\t\tinitSuper.apply( this, arguments );\n\t\tthis.supplemental = supplementalMain( this );\n\t};\n\n\treturn Cldr;\n\n\n\n\n}));\n","/**\n * Globalize v1.7.0\n *\n * https://github.com/globalizejs/globalize\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2021-08-02T11:53Z\n */\n/*!\n * Globalize v1.7.0 2021-08-02T11:53Z Released under the MIT license\n * http://git.io/TrdQbw\n */\n(function( root, factory ) {\n\n\t// UMD returnExports\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD\n\t\tdefine([\n\t\t\t\"cldr\",\n\t\t\t\"cldr/event\"\n\t\t], factory );\n\t} else if ( typeof exports === \"object\" ) {\n\n\t\t// Node, CommonJS\n\t\tmodule.exports = factory( require( \"cldrjs\" ) );\n\t} else {\n\n\t\t// Global\n\t\troot.Globalize = factory( root.Cldr );\n\t}\n}( this, function( Cldr ) {\n\n\n/**\n * A toString method that outputs meaningful values for objects or arrays and\n * still performs as fast as a plain string in case variable is string, or as\n * fast as `\"\" + number` in case variable is a number.\n * Ref: http://jsperf.com/my-stringify\n */\nvar toString = function( variable ) {\n\treturn typeof variable === \"string\" ? variable : ( typeof variable === \"number\" ? \"\" +\n\t\tvariable : JSON.stringify( variable ) );\n};\n\n\n\n\n/**\n * formatMessage( message, data )\n *\n * @message [String] A message with optional {vars} to be replaced.\n *\n * @data [Array or JSON] Object with replacing-variables content.\n *\n * Return the formatted message. For example:\n *\n * - formatMessage( \"{0} second\", [ 1 ] ); // 1 second\n *\n * - formatMessage( \"{0}/{1}\", [\"m\", \"s\"] ); // m/s\n *\n * - formatMessage( \"{name} <{email}>\", {\n * name: \"Foo\",\n * email: \"bar@baz.qux\"\n * }); // Foo \n */\nvar formatMessage = function( message, data ) {\n\n\t// Replace {attribute}'s\n\tmessage = message.replace( /{[0-9a-zA-Z-_. ]+}/g, function( name ) {\n\t\tname = name.replace( /^{([^}]*)}$/, \"$1\" );\n\t\treturn toString( data[ name ] );\n\t});\n\n\treturn message;\n};\n\n\n\n\nvar objectExtend = function() {\n\tvar destination = arguments[ 0 ],\n\t\tsources = [].slice.call( arguments, 1 );\n\n\tsources.forEach(function( source ) {\n\t\tvar prop;\n\t\tfor ( prop in source ) {\n\t\t\tdestination[ prop ] = source[ prop ];\n\t\t}\n\t});\n\n\treturn destination;\n};\n\n\n\n\nvar createError = function( code, message, attributes ) {\n\tvar error;\n\n\tmessage = code + ( message ? \": \" + formatMessage( message, attributes ) : \"\" );\n\terror = new Error( message );\n\terror.code = code;\n\n\tobjectExtend( error, attributes );\n\n\treturn error;\n};\n\n\n\n\n/**\n * Pushes part to parts array, concat two consecutive parts of the same type.\n */\nvar partsPush = function( parts, type, value ) {\n\n\t\t// Concat two consecutive parts of same type\n\t\tif ( parts.length && parts[ parts.length - 1 ].type === type ) {\n\t\t\tparts[ parts.length - 1 ].value += value;\n\t\t\treturn;\n\t\t}\n\n\t\tparts.push( { type: type, value: value } );\n};\n\n\n\n\n/**\n * formatMessage( message, data )\n *\n * @message [String] A message with optional {vars} to be replaced.\n *\n * @data [Array or JSON] Object with replacing-variables content.\n *\n * Return the formatted message. For example:\n *\n * - formatMessage( \"{0} second\", [ 1 ] );\n * > [{type: \"variable\", value: \"1\", name: \"0\"}, {type: \"literal\", value: \" second\"}]\n *\n * - formatMessage( \"{0}/{1}\", [\"m\", \"s\"] );\n * > [\n * { type: \"variable\", value: \"m\", name: \"0\" },\n * { type: \"literal\", value: \" /\" },\n * { type: \"variable\", value: \"s\", name: \"1\" }\n * ]\n */\nvar formatMessageToParts = function( message, data ) {\n\n\tvar lastOffset = 0,\n\t\tparts = [];\n\n\t// Create parts.\n\tmessage.replace( /{[0-9a-zA-Z-_. ]+}/g, function( nameIncludingBrackets, offset ) {\n\t\tvar name = nameIncludingBrackets.slice( 1, -1 );\n\t\tpartsPush( parts, \"literal\", message.slice( lastOffset, offset ));\n\t\tpartsPush( parts, \"variable\", data[ name ] );\n\t\tparts[ parts.length - 1 ].name = name;\n\t\tlastOffset += offset + nameIncludingBrackets.length;\n\t});\n\n\t// Skip empty ones such as `{ type: 'literal', value: '' }`.\n\treturn parts.filter(function( part ) {\n\t\treturn part.value !== \"\";\n\t});\n};\n\n\n\n\n/**\n * Returns joined parts values.\n */\nvar partsJoin = function( parts ) {\n\treturn parts.map( function( part ) {\n\t\treturn part.value;\n\t}).join( \"\" );\n};\n\n\n\n\nvar runtimeStringify = function( args ) {\n\treturn JSON.stringify( args, function( _key, value ) {\n\t\tif ( value && value.runtimeKey ) {\n\t\t\treturn value.runtimeKey;\n\t\t}\n\t\treturn value;\n\t} );\n};\n\n\n\n\n// Based on http://stackoverflow.com/questions/7616461/generate-a-hash-from-string-in-javascript-jquery\nvar stringHash = function( str ) {\n\treturn [].reduce.call( str, function( hash, i ) {\n\t\tvar chr = i.charCodeAt( 0 );\n\t\thash = ( ( hash << 5 ) - hash ) + chr;\n\t\treturn hash | 0;\n\t}, 0 );\n};\n\n\n\n\nvar runtimeKey = function( fnName, locale, args, argsStr ) {\n\tvar hash;\n\targsStr = argsStr || runtimeStringify( args );\n\thash = stringHash( fnName + locale + argsStr );\n\treturn hash > 0 ? \"a\" + hash : \"b\" + Math.abs( hash );\n};\n\n\n\n\nvar functionName = function( fn ) {\n\tif ( fn.name !== undefined ) {\n\t\treturn fn.name;\n\t}\n\n\t// fn.name is not supported by IE.\n\tvar matches = /^function\\s+([\\w\\$]+)\\s*\\(/.exec( fn.toString() );\n\n\tif ( matches && matches.length > 0 ) {\n\t\treturn matches[ 1 ];\n\t}\n};\n\n\n\n\nvar runtimeBind = function( args, cldr, fn, runtimeArgs ) {\n\n\tvar argsStr = runtimeStringify( args ),\n\t\tfnName = functionName( fn ),\n\t\tlocale = cldr.locale;\n\n\t// If name of the function is not available, this is most likely due to uglification,\n\t// which most likely means we are in production, and runtimeBind here is not necessary.\n\tif ( !fnName ) {\n\t\treturn fn;\n\t}\n\n\tfn.runtimeKey = runtimeKey( fnName, locale, null, argsStr );\n\n\tfn.generatorString = function() {\n\t\treturn \"Globalize(\\\"\" + locale + \"\\\").\" + fnName + \"(\" + argsStr.slice( 1, -1 ) + \")\";\n\t};\n\n\tfn.runtimeArgs = runtimeArgs;\n\n\treturn fn;\n};\n\n\n\n\nvar validate = function( code, message, check, attributes ) {\n\tif ( !check ) {\n\t\tthrow createError( code, message, attributes );\n\t}\n};\n\n\n\n\nvar alwaysArray = function( stringOrArray ) {\n\treturn Array.isArray( stringOrArray ) ? stringOrArray : stringOrArray ? [ stringOrArray ] : [];\n};\n\n\n\n\nvar validateCldr = function( path, value, options ) {\n\tvar skipBoolean;\n\toptions = options || {};\n\n\tskipBoolean = alwaysArray( options.skip ).some(function( pathRe ) {\n\t\treturn pathRe.test( path );\n\t});\n\n\tvalidate( \"E_MISSING_CLDR\", \"Missing required CLDR content `{path}`.\", value || skipBoolean, {\n\t\tpath: path\n\t});\n};\n\n\n\n\nvar validateDefaultLocale = function( value ) {\n\tvalidate( \"E_DEFAULT_LOCALE_NOT_DEFINED\", \"Default locale has not been defined.\",\n\t\tvalue !== undefined, {} );\n};\n\n\n\n\nvar validateParameterPresence = function( value, name ) {\n\tvalidate( \"E_MISSING_PARAMETER\", \"Missing required parameter `{name}`.\",\n\t\tvalue !== undefined, { name: name });\n};\n\n\n\n\n/**\n * range( value, name, minimum, maximum )\n *\n * @value [Number].\n *\n * @name [String] name of variable.\n *\n * @minimum [Number]. The lowest valid value, inclusive.\n *\n * @maximum [Number]. The greatest valid value, inclusive.\n */\nvar validateParameterRange = function( value, name, minimum, maximum ) {\n\tvalidate(\n\t\t\"E_PAR_OUT_OF_RANGE\",\n\t\t\"Parameter `{name}` has value `{value}` out of range [{minimum}, {maximum}].\",\n\t\tvalue === undefined || value >= minimum && value <= maximum,\n\t\t{\n\t\t\tmaximum: maximum,\n\t\t\tminimum: minimum,\n\t\t\tname: name,\n\t\t\tvalue: value\n\t\t}\n\t);\n};\n\n\n\n\nvar validateParameterType = function( value, name, check, expected ) {\n\tvalidate(\n\t\t\"E_INVALID_PAR_TYPE\",\n\t\t\"Invalid `{name}` parameter ({value}). {expected} expected.\",\n\t\tcheck,\n\t\t{\n\t\t\texpected: expected,\n\t\t\tname: name,\n\t\t\tvalue: value\n\t\t}\n\t);\n};\n\n\n\n\nvar validateParameterTypeLocale = function( value, name ) {\n\tvalidateParameterType(\n\t\tvalue,\n\t\tname,\n\t\tvalue === undefined || typeof value === \"string\" || value instanceof Cldr,\n\t\t\"String or Cldr instance\"\n\t);\n};\n\n\n\n\n/**\n * Function inspired by jQuery Core, but reduced to our use case.\n */\nvar isPlainObject = function( obj ) {\n\treturn obj !== null && \"\" + obj === \"[object Object]\";\n};\n\n\n\n\nvar validateParameterTypePlainObject = function( value, name ) {\n\tvalidateParameterType(\n\t\tvalue,\n\t\tname,\n\t\tvalue === undefined || isPlainObject( value ),\n\t\t\"Plain Object\"\n\t);\n};\n\n\n\n\nvar alwaysCldr = function( localeOrCldr ) {\n\treturn localeOrCldr instanceof Cldr ? localeOrCldr : new Cldr( localeOrCldr );\n};\n\n\n\n\n// ref: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions?redirectlocale=en-US&redirectslug=JavaScript%2FGuide%2FRegular_Expressions\nvar regexpEscape = function( string ) {\n\treturn string.replace( /([.*+?^=!:${}()|\\[\\]\\/\\\\])/g, \"\\\\$1\" );\n};\n\n\n\n\nvar stringPad = function( str, count, right ) {\n\tvar length;\n\tif ( typeof str !== \"string\" ) {\n\t\tstr = String( str );\n\t}\n\tfor ( length = str.length; length < count; length += 1 ) {\n\t\tstr = ( right ? ( str + \"0\" ) : ( \"0\" + str ) );\n\t}\n\treturn str;\n};\n\n\n\n\nfunction validateLikelySubtags( cldr ) {\n\tcldr.once( \"get\", validateCldr );\n\tcldr.get( \"supplemental/likelySubtags\" );\n}\n\n/**\n * [new] Globalize( locale|cldr )\n *\n * @locale [String]\n *\n * @cldr [Cldr instance]\n *\n * Create a Globalize instance.\n */\nfunction Globalize( locale ) {\n\tif ( !( this instanceof Globalize ) ) {\n\t\treturn new Globalize( locale );\n\t}\n\n\tvalidateParameterPresence( locale, \"locale\" );\n\tvalidateParameterTypeLocale( locale, \"locale\" );\n\n\tthis.cldr = alwaysCldr( locale );\n\n\tvalidateLikelySubtags( this.cldr );\n}\n\n/**\n * Globalize.load( json, ... )\n *\n * @json [JSON]\n *\n * Load resolved or unresolved cldr data.\n * Somewhat equivalent to previous Globalize.addCultureInfo(...).\n */\nGlobalize.load = function() {\n\n\t// validations are delegated to Cldr.load().\n\tCldr.load.apply( Cldr, arguments );\n};\n\n/**\n * Globalize.locale( [locale|cldr] )\n *\n * @locale [String]\n *\n * @cldr [Cldr instance]\n *\n * Set default Cldr instance if locale or cldr argument is passed.\n *\n * Return the default Cldr instance.\n */\nGlobalize.locale = function( locale ) {\n\tvalidateParameterTypeLocale( locale, \"locale\" );\n\n\tif ( arguments.length ) {\n\t\tthis.cldr = alwaysCldr( locale );\n\t\tvalidateLikelySubtags( this.cldr );\n\t}\n\treturn this.cldr;\n};\n\n/**\n * Optimization to avoid duplicating some internal functions across modules.\n */\nGlobalize._alwaysArray = alwaysArray;\nGlobalize._createError = createError;\nGlobalize._formatMessage = formatMessage;\nGlobalize._formatMessageToParts = formatMessageToParts;\nGlobalize._isPlainObject = isPlainObject;\nGlobalize._objectExtend = objectExtend;\nGlobalize._partsJoin = partsJoin;\nGlobalize._partsPush = partsPush;\nGlobalize._regexpEscape = regexpEscape;\nGlobalize._runtimeBind = runtimeBind;\nGlobalize._stringPad = stringPad;\nGlobalize._validate = validate;\nGlobalize._validateCldr = validateCldr;\nGlobalize._validateDefaultLocale = validateDefaultLocale;\nGlobalize._validateParameterPresence = validateParameterPresence;\nGlobalize._validateParameterRange = validateParameterRange;\nGlobalize._validateParameterTypePlainObject = validateParameterTypePlainObject;\nGlobalize._validateParameterType = validateParameterType;\n\nreturn Globalize;\n\n\n\n\n}));\n","/*!\n * Globalize v1.7.0\n *\n * https://github.com/globalizejs/globalize\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2021-08-02T11:53Z\n */\n(function( root, factory ) {\n\n\t// UMD returnExports\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD\n\t\tdefine([\n\t\t\t\"cldr\",\n\t\t\t\"../globalize\",\n\t\t\t\"./number\",\n\t\t\t\"cldr/event\",\n\t\t\t\"cldr/supplemental\"\n\t\t], factory );\n\t} else if ( typeof exports === \"object\" ) {\n\n\t\t// Node, CommonJS\n\t\tmodule.exports = factory( require( \"cldrjs\" ), require( \"../globalize\" ) );\n\t} else {\n\n\t\t// Global\n\t\tfactory( root.Cldr, root.Globalize );\n\t}\n}(this, function( Cldr, Globalize ) {\n\nvar alwaysArray = Globalize._alwaysArray,\n\tcreateError = Globalize._createError,\n\tformatMessageToParts = Globalize._formatMessageToParts,\n\tnumberNumberingSystem = Globalize._numberNumberingSystem,\n\tnumberPattern = Globalize._numberPattern,\n\tpartsJoin = Globalize._partsJoin,\n\tpartsPush = Globalize._partsPush,\n\truntimeBind = Globalize._runtimeBind,\n\tstringPad = Globalize._stringPad,\n\tvalidateCldr = Globalize._validateCldr,\n\tvalidateDefaultLocale = Globalize._validateDefaultLocale,\n\tvalidateParameterPresence = Globalize._validateParameterPresence,\n\tvalidateParameterType = Globalize._validateParameterType,\n\tvalidateParameterTypeNumber = Globalize._validateParameterTypeNumber,\n\tvalidateParameterTypePlainObject = Globalize._validateParameterTypePlainObject;\n\n\nvar createErrorPluralModulePresence = function() {\n\treturn createError( \"E_MISSING_PLURAL_MODULE\", \"Plural module not loaded.\" );\n};\n\n\n\n\nvar validateParameterTypeCurrency = function( value, name ) {\n\tvalidateParameterType(\n\t\tvalue,\n\t\tname,\n\t\tvalue === undefined || typeof value === \"string\" && ( /^[A-Za-z]{3}$/ ).test( value ),\n\t\t\"3-letter currency code string as defined by ISO 4217\"\n\t);\n};\n\n\n\n\nvar currencyFormatterFn = function( currencyToPartsFormatter ) {\n\treturn function currencyFormatter( value ) {\n\t\treturn partsJoin( currencyToPartsFormatter( value ));\n\t};\n};\n\n\n\n\n/**\n * supplementalOverride( currency, pattern, cldr )\n *\n * Return pattern with fraction digits overriden by supplemental currency data.\n */\nvar currencySupplementalOverride = function( currency, pattern, cldr ) {\n\tvar digits,\n\t\tfraction = \"\",\n\t\tfractionData = cldr.supplemental([ \"currencyData/fractions\", currency ]) ||\n\t\t\tcldr.supplemental( \"currencyData/fractions/DEFAULT\" );\n\n\tdigits = +fractionData._digits;\n\n\tif ( digits ) {\n\t\tfraction = \".\" + stringPad( \"0\", digits ).slice( 0, -1 ) + fractionData._rounding;\n\t}\n\n\treturn pattern.replace( /\\.(#+|0*[0-9]|0+[0-9]?)/g, fraction );\n};\n\n\n\n\nvar objectFilter = function( object, testRe ) {\n\tvar key,\n\t\tcopy = {};\n\n\tfor ( key in object ) {\n\t\tif ( testRe.test( key ) ) {\n\t\t\tcopy[ key ] = object[ key ];\n\t\t}\n\t}\n\n\treturn copy;\n};\n\n\n\n\nvar currencyUnitPatterns = function( cldr ) {\n\treturn objectFilter( cldr.main([\n\t\t\"numbers\",\n\t\t\"currencyFormats-numberSystem-\" + numberNumberingSystem( cldr )\n\t]), /^unitPattern/ );\n};\n\n\n\n\n/**\n * nameProperties( currency, cldr )\n *\n * Return number pattern with the appropriate currency code in as literal.\n */\nvar currencyNameProperties = function( currency, cldr ) {\n\tvar pattern = numberPattern( \"decimal\", cldr );\n\n\t// The number of decimal places and the rounding for each currency is not locale-specific. Those\n\t// values overridden by Supplemental Currency Data.\n\tpattern = currencySupplementalOverride( currency, pattern, cldr );\n\n\treturn {\n\t\tdisplayNames: objectFilter( cldr.main([\n\t\t\t\"numbers/currencies\",\n\t\t\tcurrency\n\t\t]), /^displayName/ ),\n\t\tpattern: pattern,\n\t\tunitPatterns: currencyUnitPatterns( cldr )\n\t};\n};\n\n\n\n\n/**\n * Unicode regular expression for: everything except symbols from the category S\n *\n * Generated by:\n *\n * var s = regenerate()\n * .addRange( 0x0, 0x10FFFF )\n * .remove( require( \"@unicode/unicode-13.0.0/General_Category/Math_Symbol/symbols\" ) )\n * .remove( require( \"@unicode/unicode-13.0.0/General_Category/Currency_Symbol/symbols\" ) )\n * .remove( require( \"@unicode/unicode-13.0.0/General_Category/Modifier_Symbol/symbols\" ) )\n * .remove( require( \"@unicode/unicode-13.0.0/General_Category/Other_Symbol/symbols\" ) )\n *\n * https://github.com/mathiasbynens/regenerate\n * https://github.com/node-unicode/unicode-13.0.0\n * http://www.unicode.org/reports/tr44/#General_Category_Values\n */\nvar regexpNotS = /[\\0-#%-\\*,-;\\?-\\]_a-\\{\\}\\x7F-\\xA1\\xA7\\xAA\\xAB\\xAD\\xB2\\xB3\\xB5-\\xB7\\xB9-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376-\\u0383\\u0386-\\u03F5\\u03F7-\\u0481\\u0483-\\u058C\\u0590-\\u0605\\u0609\\u060A\\u060C\\u060D\\u0610-\\u06DD\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF-\\u07F5\\u07F7-\\u07FD\\u0800-\\u09F1\\u09F4-\\u09F9\\u09FC-\\u0AF0\\u0AF2-\\u0B6F\\u0B71-\\u0BF2\\u0BFB-\\u0C7E\\u0C80-\\u0D4E\\u0D50-\\u0D78\\u0D7A-\\u0E3E\\u0E40-\\u0F00\\u0F04-\\u0F12\\u0F14\\u0F18\\u0F19\\u0F20-\\u0F33\\u0F35\\u0F37\\u0F39-\\u0FBD\\u0FC6\\u0FCD\\u0FD0-\\u0FD4\\u0FD9-\\u109D\\u10A0-\\u138F\\u139A-\\u166C\\u166E-\\u17DA\\u17DC-\\u193F\\u1941-\\u19DD\\u1A00-\\u1B60\\u1B6B-\\u1B73\\u1B7D-\\u1FBC\\u1FBE\\u1FC2-\\u1FCC\\u1FD0-\\u1FDC\\u1FE0-\\u1FEC\\u1FF0-\\u1FFC\\u1FFF-\\u2043\\u2045-\\u2051\\u2053-\\u2079\\u207D-\\u2089\\u208D-\\u209F\\u20C0-\\u20FF\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2150-\\u2189\\u218C-\\u218F\\u2308-\\u230B\\u2329\\u232A\\u2427-\\u243F\\u244B-\\u249B\\u24EA-\\u24FF\\u2768-\\u2793\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2B74\\u2B75\\u2B96\\u2C00-\\u2CE4\\u2CEB-\\u2E4F\\u2E52-\\u2E7F\\u2E9A\\u2EF4-\\u2EFF\\u2FD6-\\u2FEF\\u2FFC-\\u3003\\u3005-\\u3011\\u3014-\\u301F\\u3021-\\u3035\\u3038-\\u303D\\u3040-\\u309A\\u309D-\\u318F\\u3192-\\u3195\\u31A0-\\u31BF\\u31E4-\\u31FF\\u321F-\\u3229\\u3248-\\u324F\\u3251-\\u325F\\u3280-\\u3289\\u32B1-\\u32BF\\u3400-\\u4DBF\\u4E00-\\uA48F\\uA4C7-\\uA6FF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA827\\uA82C-\\uA835\\uA83A-\\uAA76\\uAA7A-\\uAB5A\\uAB5C-\\uAB69\\uAB6C-\\uD7FF\\uE000-\\uFB28\\uFB2A-\\uFBB1\\uFBC2-\\uFDFB\\uFDFE-\\uFE61\\uFE63\\uFE67\\uFE68\\uFE6A-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF1B\\uFF1F-\\uFF3D\\uFF3F\\uFF41-\\uFF5B\\uFF5D\\uFF5F-\\uFFDF\\uFFE7\\uFFEF-\\uFFFB\\uFFFE\\uFFFF]|\\uD800[\\uDC00-\\uDD36\\uDD40-\\uDD78\\uDD8A\\uDD8B\\uDD8F\\uDD9D-\\uDD9F\\uDDA1-\\uDDCF\\uDDFD-\\uDFFF]|[\\uD801\\uD803\\uD804\\uD806\\uD808-\\uD819\\uD81B-\\uD82E\\uD830-\\uD833\\uD837\\uD839\\uD83A\\uD83F-\\uDBFF][\\uDC00-\\uDFFF]|\\uD802[\\uDC00-\\uDC76\\uDC79-\\uDEC7\\uDEC9-\\uDFFF]|\\uD805[\\uDC00-\\uDF3E\\uDF40-\\uDFFF]|\\uD807[\\uDC00-\\uDFD4\\uDFF2-\\uDFFF]|\\uD81A[\\uDC00-\\uDF3B\\uDF40-\\uDF44\\uDF46-\\uDFFF]|\\uD82F[\\uDC00-\\uDC9B\\uDC9D-\\uDFFF]|\\uD834[\\uDCF6-\\uDCFF\\uDD27\\uDD28\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDDE9-\\uDDFF\\uDE42-\\uDE44\\uDE46-\\uDEFF\\uDF57-\\uDFFF]|\\uD835[\\uDC00-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFFF]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE87-\\uDFFF]|\\uD838[\\uDC00-\\uDD4E\\uDD50-\\uDEFE\\uDF00-\\uDFFF]|\\uD83B[\\uDC00-\\uDCAB\\uDCAD-\\uDCAF\\uDCB1-\\uDD2D\\uDD2F-\\uDEEF\\uDEF2-\\uDFFF]|\\uD83C[\\uDC2C-\\uDC2F\\uDC94-\\uDC9F\\uDCAF\\uDCB0\\uDCC0\\uDCD0\\uDCF6-\\uDD0C\\uDDAE-\\uDDE5\\uDE03-\\uDE0F\\uDE3C-\\uDE3F\\uDE49-\\uDE4F\\uDE52-\\uDE5F\\uDE66-\\uDEFF]|\\uD83D[\\uDED8-\\uDEDF\\uDEED-\\uDEEF\\uDEFD-\\uDEFF\\uDF74-\\uDF7F\\uDFD9-\\uDFDF\\uDFEC-\\uDFFF]|\\uD83E[\\uDC0C-\\uDC0F\\uDC48-\\uDC4F\\uDC5A-\\uDC5F\\uDC88-\\uDC8F\\uDCAE\\uDCAF\\uDCB2-\\uDCFF\\uDD79\\uDDCC\\uDE54-\\uDE5F\\uDE6E\\uDE6F\\uDE75-\\uDE77\\uDE7B-\\uDE7F\\uDE87-\\uDE8F\\uDEA9-\\uDEAF\\uDEB7-\\uDEBF\\uDEC3-\\uDECF\\uDED7-\\uDEFF\\uDF93\\uDFCB-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/;\n\n\n\n\n/**\n * Unicode regular expression for: everything except symbols from categories S and Z\n *\n * Generated by:\n *\n * var s = regenerate()\n * .addRange( 0x0, 0x10FFFF )\n * .remove( require( \"@unicode/unicode-13.0.0/General_Category/Math_Symbol/symbols\" ) )\n * .remove( require( \"@unicode/unicode-13.0.0/General_Category/Currency_Symbol/symbols\" ) )\n * .remove( require( \"@unicode/unicode-13.0.0/General_Category/Modifier_Symbol/symbols\" ) )\n * .remove( require( \"@unicode/unicode-13.0.0/General_Category/Other_Symbol/symbols\" ) )\n * .remove( require( \"@unicode/unicode-13.0.0/General_Category/Space_Separator/symbols\" ) )\n * .remove( require( \"@unicode/unicode-13.0.0/General_Category/Line_Separator/symbols\" ) )\n * .remove( require( \"@unicode/unicode-13.0.0/General_Category/Paragraph_Separator/symbols\" ) );\n *\n * https://github.com/mathiasbynens/regenerate\n * https://github.com/node-unicode/unicode-13.0.0\n * http://www.unicode.org/reports/tr44/#General_Category_Values\n */\nvar regexpNotSAndZ = /[\\0-\\x1F!-#%-\\*,-;\\?-\\]_a-\\{\\}\\x7F-\\x9F\\xA1\\xA7\\xAA\\xAB\\xAD\\xB2\\xB3\\xB5-\\xB7\\xB9-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376-\\u0383\\u0386-\\u03F5\\u03F7-\\u0481\\u0483-\\u058C\\u0590-\\u0605\\u0609\\u060A\\u060C\\u060D\\u0610-\\u06DD\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF-\\u07F5\\u07F7-\\u07FD\\u0800-\\u09F1\\u09F4-\\u09F9\\u09FC-\\u0AF0\\u0AF2-\\u0B6F\\u0B71-\\u0BF2\\u0BFB-\\u0C7E\\u0C80-\\u0D4E\\u0D50-\\u0D78\\u0D7A-\\u0E3E\\u0E40-\\u0F00\\u0F04-\\u0F12\\u0F14\\u0F18\\u0F19\\u0F20-\\u0F33\\u0F35\\u0F37\\u0F39-\\u0FBD\\u0FC6\\u0FCD\\u0FD0-\\u0FD4\\u0FD9-\\u109D\\u10A0-\\u138F\\u139A-\\u166C\\u166E-\\u167F\\u1681-\\u17DA\\u17DC-\\u193F\\u1941-\\u19DD\\u1A00-\\u1B60\\u1B6B-\\u1B73\\u1B7D-\\u1FBC\\u1FBE\\u1FC2-\\u1FCC\\u1FD0-\\u1FDC\\u1FE0-\\u1FEC\\u1FF0-\\u1FFC\\u1FFF\\u200B-\\u2027\\u202A-\\u202E\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u2060-\\u2079\\u207D-\\u2089\\u208D-\\u209F\\u20C0-\\u20FF\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2150-\\u2189\\u218C-\\u218F\\u2308-\\u230B\\u2329\\u232A\\u2427-\\u243F\\u244B-\\u249B\\u24EA-\\u24FF\\u2768-\\u2793\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2B74\\u2B75\\u2B96\\u2C00-\\u2CE4\\u2CEB-\\u2E4F\\u2E52-\\u2E7F\\u2E9A\\u2EF4-\\u2EFF\\u2FD6-\\u2FEF\\u2FFC-\\u2FFF\\u3001-\\u3003\\u3005-\\u3011\\u3014-\\u301F\\u3021-\\u3035\\u3038-\\u303D\\u3040-\\u309A\\u309D-\\u318F\\u3192-\\u3195\\u31A0-\\u31BF\\u31E4-\\u31FF\\u321F-\\u3229\\u3248-\\u324F\\u3251-\\u325F\\u3280-\\u3289\\u32B1-\\u32BF\\u3400-\\u4DBF\\u4E00-\\uA48F\\uA4C7-\\uA6FF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA827\\uA82C-\\uA835\\uA83A-\\uAA76\\uAA7A-\\uAB5A\\uAB5C-\\uAB69\\uAB6C-\\uD7FF\\uE000-\\uFB28\\uFB2A-\\uFBB1\\uFBC2-\\uFDFB\\uFDFE-\\uFE61\\uFE63\\uFE67\\uFE68\\uFE6A-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF1B\\uFF1F-\\uFF3D\\uFF3F\\uFF41-\\uFF5B\\uFF5D\\uFF5F-\\uFFDF\\uFFE7\\uFFEF-\\uFFFB\\uFFFE\\uFFFF]|\\uD800[\\uDC00-\\uDD36\\uDD40-\\uDD78\\uDD8A\\uDD8B\\uDD8F\\uDD9D-\\uDD9F\\uDDA1-\\uDDCF\\uDDFD-\\uDFFF]|[\\uD801\\uD803\\uD804\\uD806\\uD808-\\uD819\\uD81B-\\uD82E\\uD830-\\uD833\\uD837\\uD839\\uD83A\\uD83F-\\uDBFF][\\uDC00-\\uDFFF]|\\uD802[\\uDC00-\\uDC76\\uDC79-\\uDEC7\\uDEC9-\\uDFFF]|\\uD805[\\uDC00-\\uDF3E\\uDF40-\\uDFFF]|\\uD807[\\uDC00-\\uDFD4\\uDFF2-\\uDFFF]|\\uD81A[\\uDC00-\\uDF3B\\uDF40-\\uDF44\\uDF46-\\uDFFF]|\\uD82F[\\uDC00-\\uDC9B\\uDC9D-\\uDFFF]|\\uD834[\\uDCF6-\\uDCFF\\uDD27\\uDD28\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDDE9-\\uDDFF\\uDE42-\\uDE44\\uDE46-\\uDEFF\\uDF57-\\uDFFF]|\\uD835[\\uDC00-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFFF]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE87-\\uDFFF]|\\uD838[\\uDC00-\\uDD4E\\uDD50-\\uDEFE\\uDF00-\\uDFFF]|\\uD83B[\\uDC00-\\uDCAB\\uDCAD-\\uDCAF\\uDCB1-\\uDD2D\\uDD2F-\\uDEEF\\uDEF2-\\uDFFF]|\\uD83C[\\uDC2C-\\uDC2F\\uDC94-\\uDC9F\\uDCAF\\uDCB0\\uDCC0\\uDCD0\\uDCF6-\\uDD0C\\uDDAE-\\uDDE5\\uDE03-\\uDE0F\\uDE3C-\\uDE3F\\uDE49-\\uDE4F\\uDE52-\\uDE5F\\uDE66-\\uDEFF]|\\uD83D[\\uDED8-\\uDEDF\\uDEED-\\uDEEF\\uDEFD-\\uDEFF\\uDF74-\\uDF7F\\uDFD9-\\uDFDF\\uDFEC-\\uDFFF]|\\uD83E[\\uDC0C-\\uDC0F\\uDC48-\\uDC4F\\uDC5A-\\uDC5F\\uDC88-\\uDC8F\\uDCAE\\uDCAF\\uDCB2-\\uDCFF\\uDD79\\uDDCC\\uDE54-\\uDE5F\\uDE6E\\uDE6F\\uDE75-\\uDE77\\uDE7B-\\uDE7F\\uDE87-\\uDE8F\\uDEA9-\\uDEAF\\uDEB7-\\uDEBF\\uDEC3-\\uDECF\\uDED7-\\uDEFF\\uDF93\\uDFCB-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/;\n\n\n\n\n/**\n * symbolProperties( currency, cldr )\n *\n * Return pattern replacing `¤` with the appropriate currency symbol literal.\n */\nvar currencySymbolProperties = function( currency, cldr, options ) {\n\tvar currencySpacing, pattern, symbol, symbolEntries,\n\t\tregexp = {\n\t\t\t\"[:digit:]\": /\\d/,\n\t\t\t\"[:^S:]\": regexpNotS,\n\t\t\t\"[[:^S:]&[:^Z:]]\": regexpNotSAndZ\n\t\t};\n\n\tif ( options.style === \"code\" ) {\n\t\tsymbol = currency;\n\t} else {\n\t\tsymbolEntries = [ \"symbol\" ];\n\n\t\t// If options.symbolForm === \"narrow\" was passed, prepend it.\n\t\tif ( options.symbolForm === \"narrow\" ) {\n\t\t\tsymbolEntries.unshift( \"symbol-alt-narrow\" );\n\t\t}\n\n\t\tsymbolEntries.some(function( symbolEntry ) {\n\t\t\treturn symbol = cldr.main([\n\t\t\t\t\"numbers/currencies\",\n\t\t\t\tcurrency,\n\t\t\t\tsymbolEntry\n\t\t\t]);\n\t\t});\n\t}\n\n\tcurrencySpacing = [ \"beforeCurrency\", \"afterCurrency\" ].map(function( position ) {\n\t\treturn cldr.main([\n\t\t\t\"numbers\",\n\t\t\t\"currencyFormats-numberSystem-\" + numberNumberingSystem( cldr ),\n\t\t\t\"currencySpacing\",\n\t\t\tposition\n\t\t]);\n\t});\n\n\tpattern = cldr.main([\n\t\t\"numbers\",\n\t\t\"currencyFormats-numberSystem-\" + numberNumberingSystem( cldr ),\n\t\toptions.style === \"accounting\" ? \"accounting\" : \"standard\"\n\t]);\n\n\tpattern =\n\n\t\t// The number of decimal places and the rounding for each currency is not locale-specific.\n\t\t// Those values are overridden by Supplemental Currency Data.\n\t\tcurrencySupplementalOverride( currency, pattern, cldr )\n\n\t\t// Replace \"¤\" (\\u00A4) with the appropriate symbol literal.\n\t\t.split( \";\" ).map(function( pattern ) {\n\n\t\t\treturn pattern.split( \"\\u00A4\" ).map(function( part, i ) {\n\t\t\t\tvar currencyMatch = regexp[ currencySpacing[ i ].currencyMatch ],\n\t\t\t\t\tsurroundingMatch = regexp[ currencySpacing[ i ].surroundingMatch ],\n\t\t\t\t\tinsertBetween = \"\";\n\n\t\t\t\t// For currencyMatch and surroundingMatch definitions, read [1].\n\t\t\t\t// When i === 0, beforeCurrency is being handled. Otherwise, afterCurrency.\n\t\t\t\t// 1: http://www.unicode.org/reports/tr35/tr35-numbers.html#Currencies\n\t\t\t\tcurrencyMatch = currencyMatch.test( symbol.charAt( i ? symbol.length - 1 : 0 ) );\n\t\t\t\tsurroundingMatch = surroundingMatch.test(\n\t\t\t\t\tpart.charAt( i ? 0 : part.length - 1 ).replace( /[#@,.]/g, \"0\" )\n\t\t\t\t);\n\n\t\t\t\tif ( currencyMatch && part && surroundingMatch ) {\n\t\t\t\t\tinsertBetween = currencySpacing[ i ].insertBetween;\n\t\t\t\t}\n\n\t\t\t\treturn ( i ? insertBetween : \"\" ) + part + ( i ? \"\" : insertBetween );\n\t\t\t}).join( \"\\u00A4\" );\n\t\t}).join( \";\" );\n\n\treturn {\n\t\tpattern: pattern,\n\t\tsymbol: symbol\n\t};\n};\n\n\n\n\n/**\n * nameFormat( formattedNumber, pluralForm, properties )\n *\n * Return the appropriate name form currency format.\n */\nvar currencyNameFormat = function( formattedNumber, pluralForm, properties ) {\n\tvar displayName, unitPattern,\n\t\tparts = [],\n\t\tdisplayNames = properties.displayNames || {},\n\t\tunitPatterns = properties.unitPatterns;\n\n\tdisplayName = displayNames[ \"displayName-count-\" + pluralForm ] ||\n\t\tdisplayNames[ \"displayName-count-other\" ] ||\n\t\tdisplayNames.displayName ||\n\t\tproperties.currency;\n\tunitPattern = unitPatterns[ \"unitPattern-count-\" + pluralForm ] ||\n\t\tunitPatterns[ \"unitPattern-count-other\" ];\n\n\tformatMessageToParts( unitPattern, [ formattedNumber, displayName ]).forEach(function( part ) {\n\t\tif ( part.type === \"variable\" && part.name === \"0\" ) {\n\t\t\tpart.value.forEach(function( part ) {\n\t\t\t\tpartsPush( parts, part.type, part.value );\n\t\t\t});\n\t\t} else if ( part.type === \"variable\" && part.name === \"1\" ) {\n\t\t\tpartsPush( parts, \"currency\", part.value );\n\t\t} else {\n\t\t\tpartsPush( parts, \"literal\", part.value );\n\t\t}\n\t});\n\n\treturn parts;\n};\n\n\n\n\n/**\n * symbolFormat( parts, symbol )\n *\n * Return the appropriate symbol/account form format.\n */\nvar currencySymbolFormat = function( parts, symbol ) {\n\tparts.forEach(function( part ) {\n\t\tif ( part.type === \"currency\" ) {\n\t\t\tpart.value = symbol;\n\t\t}\n\t});\n\treturn parts;\n};\n\n\n\n\nvar currencyToPartsFormatterFn = function( numberToPartsFormatter, pluralGenerator, properties ) {\n\tvar fn;\n\n\t// Return formatter when style is \"name\".\n\tif ( pluralGenerator && properties ) {\n\t\tfn = function currencyToPartsFormatter( value ) {\n\t\t\tvalidateParameterPresence( value, \"value\" );\n\t\t\tvalidateParameterTypeNumber( value, \"value\" );\n\t\t\treturn currencyNameFormat(\n\t\t\t\tnumberToPartsFormatter( value ),\n\t\t\t\tpluralGenerator( value ),\n\t\t\t\tproperties\n\t\t\t);\n\t\t};\n\n\t// Return formatter when style is \"symbol\", \"accounting\", or \"code\".\n\t} else {\n\t\tfn = function currencyToPartsFormatter( value ) {\n\n\t\t\t// 1: Reusing pluralGenerator argument, but in this case it is actually `symbol`\n\t\t\treturn currencySymbolFormat( numberToPartsFormatter( value ), pluralGenerator /* 1 */ );\n\t\t};\n\t}\n\n\treturn fn;\n};\n\n\n\n\n/**\n * objectOmit( object, keys )\n *\n * Return a copy of the object, filtered to omit the blacklisted key or array of keys.\n */\nvar objectOmit = function( object, keys ) {\n\tvar key,\n\t\tcopy = {};\n\n\tkeys = alwaysArray( keys );\n\n\tfor ( key in object ) {\n\t\tif ( keys.indexOf( key ) === -1 ) {\n\t\t\tcopy[ key ] = object[ key ];\n\t\t}\n\t}\n\n\treturn copy;\n};\n\n\n\n\nfunction validateRequiredCldr( path, value ) {\n\tvalidateCldr( path, value, {\n\t\tskip: [\n\t\t\t/numbers\\/currencies\\/[^/]+\\/symbol-alt-/,\n\t\t\t/supplemental\\/currencyData\\/fractions\\/[A-Za-z]{3}$/\n\t\t]\n\t});\n}\n\n/**\n * .currencyFormatter( currency [, options] )\n *\n * @currency [String] 3-letter currency code as defined by ISO 4217.\n *\n * @options [Object]:\n * - style: [String] \"symbol\" (default), \"accounting\", \"code\" or \"name\".\n * - see also number/format options.\n *\n * Return a function that formats a currency according to the given options and default/instance\n * locale.\n */\nGlobalize.currencyFormatter =\nGlobalize.prototype.currencyFormatter = function( currency, options ) {\n\tvar args, currencyToPartsFormatter, returnFn;\n\n\tvalidateParameterPresence( currency, \"currency\" );\n\tvalidateParameterTypeCurrency( currency, \"currency\" );\n\n\tvalidateParameterTypePlainObject( options, \"options\" );\n\n\toptions = options || {};\n\targs = [ currency, options ];\n\n\tcurrencyToPartsFormatter = this.currencyToPartsFormatter( currency, options );\n\treturnFn = currencyFormatterFn( currencyToPartsFormatter );\n\truntimeBind( args, this.cldr, returnFn, [ currencyToPartsFormatter ] );\n\n\treturn returnFn;\n};\n\n/**\n * .currencyToPartsFormatter( currency [, options] )\n *\n * @currency [String] 3-letter currency code as defined by ISO 4217.\n *\n * @options [Object]:\n * - style: [String] \"symbol\" (default), \"accounting\", \"code\" or \"name\".\n * - see also number/format options.\n *\n * Return a currency formatter function (of the form below) according to the given options and the\n * default/instance locale.\n *\n * fn( value )\n *\n * @value [Number]\n *\n * Return a function that formats a currency to parts according to the given options\n * and the default/instance locale.\n */\nGlobalize.currencyToPartsFormatter =\nGlobalize.prototype.currencyToPartsFormatter = function( currency, options ) {\n\tvar args, cldr, numberToPartsFormatter, pluralGenerator, properties, returnFn, style;\n\n\tvalidateParameterPresence( currency, \"currency\" );\n\tvalidateParameterTypeCurrency( currency, \"currency\" );\n\n\tvalidateParameterTypePlainObject( options, \"options\" );\n\n\tcldr = this.cldr;\n\toptions = options || {};\n\n\targs = [ currency, options ];\n\tstyle = options.style || \"symbol\";\n\n\tvalidateDefaultLocale( cldr );\n\n\t// Get properties given style (\"symbol\" default, \"code\" or \"name\").\n\tcldr.on( \"get\", validateRequiredCldr );\n\ttry {\n\t\tproperties = ({\n\t\t\taccounting: currencySymbolProperties,\n\t\t\tcode: currencySymbolProperties,\n\t\t\tname: currencyNameProperties,\n\t\t\tsymbol: currencySymbolProperties\n\t\t}[ style ] )( currency, cldr, options );\n\t} finally {\n\t\tcldr.off( \"get\", validateRequiredCldr );\n\t}\n\n\t// options = options minus style, plus raw pattern.\n\toptions = objectOmit( options, \"style\" );\n\toptions.raw = properties.pattern;\n\n\t// Return formatter when style is \"symbol\", \"accounting\", or \"code\".\n\tif ( style === \"symbol\" || style === \"accounting\" || style === \"code\" ) {\n\t\tnumberToPartsFormatter = this.numberToPartsFormatter( options );\n\n\t\treturnFn = currencyToPartsFormatterFn( numberToPartsFormatter, properties.symbol );\n\n\t\truntimeBind( args, cldr, returnFn, [ numberToPartsFormatter, properties.symbol ] );\n\n\t// Return formatter when style is \"name\".\n\t} else {\n\t\tnumberToPartsFormatter = this.numberToPartsFormatter( options );\n\n\t\t// Is plural module present? Yes, use its generator. Nope, use an error generator.\n\t\tpluralGenerator = this.plural !== undefined ?\n\t\t\tthis.pluralGenerator() :\n\t\t\tcreateErrorPluralModulePresence;\n\n\t\treturnFn = currencyToPartsFormatterFn(\n\t\t\tnumberToPartsFormatter,\n\t\t\tpluralGenerator,\n\t\t\tproperties\n\t\t);\n\n\t\truntimeBind( args, cldr, returnFn, [\n\t\t\tnumberToPartsFormatter,\n\t\t\tpluralGenerator,\n\t\t\tproperties\n\t\t]);\n\t}\n\n\treturn returnFn;\n};\n\n/**\n * .currencyParser( currency [, options] )\n *\n * @currency [String] 3-letter currency code as defined by ISO 4217.\n *\n * @options [Object] see currencyFormatter.\n *\n * Return the currency parser according to the given options and the default/instance locale.\n */\nGlobalize.currencyParser =\nGlobalize.prototype.currencyParser = function( /* currency, options */ ) {\n\n\t// TODO implement parser.\n\n};\n\n/**\n * .formatCurrency( value, currency [, options] )\n *\n * @value [Number] number to be formatted.\n *\n * @currency [String] 3-letter currency code as defined by ISO 4217.\n *\n * @options [Object] see currencyFormatter.\n *\n * Format a currency according to the given options and the default/instance locale.\n */\nGlobalize.formatCurrency =\nGlobalize.prototype.formatCurrency = function( value, currency, options ) {\n\tvalidateParameterPresence( value, \"value\" );\n\tvalidateParameterTypeNumber( value, \"value\" );\n\treturn this.currencyFormatter( currency, options )( value );\n};\n\n/**\n * .formatCurrencyToParts( value, currency [, options] )\n *\n * @value [Number] number to be formatted.\n *\n * @currency [String] 3-letter currency code as defined by ISO 4217.\n *\n * @options [Object] see currencyFormatter.\n *\n * Format a currency to parts according to the given options and the default/instance locale.\n */\nGlobalize.formatCurrencyToParts =\nGlobalize.prototype.formatCurrencyToParts = function( value, currency, options ) {\n\tvalidateParameterPresence( value, \"value\" );\n\tvalidateParameterTypeNumber( value, \"value\" );\n\treturn this.currencyToPartsFormatter( currency, options )( value );\n};\n\n/**\n * .parseCurrency( value, currency [, options] )\n *\n * @value [String]\n *\n * @currency [String] 3-letter currency code as defined by ISO 4217.\n *\n * @options [Object]: See currencyFormatter.\n *\n * Return the parsed currency or NaN when value is invalid.\n */\nGlobalize.parseCurrency =\nGlobalize.prototype.parseCurrency = function( /* value, currency, options */ ) {\n};\n\nreturn Globalize;\n\n\n\n\n}));\n","/**\n * Globalize v1.7.0\n *\n * https://github.com/globalizejs/globalize\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2021-08-02T11:53Z\n */\n/*!\n * Globalize v1.7.0 2021-08-02T11:53Z Released under the MIT license\n * http://git.io/TrdQbw\n */\n(function( root, factory ) {\n\n\t// UMD returnExports\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD\n\t\tdefine([\n\t\t\t\"cldr\",\n\t\t\t\"../globalize\",\n\t\t\t\"./number\",\n\t\t\t\"cldr/event\",\n\t\t\t\"cldr/supplemental\"\n\t\t], factory );\n\t} else if ( typeof exports === \"object\" ) {\n\n\t\t// Node, CommonJS\n\t\tmodule.exports = factory( require( \"cldrjs\" ), require( \"../globalize\" ) );\n\t} else {\n\n\t\t// Extend global\n\t\tfactory( root.Cldr, root.Globalize );\n\t}\n}(this, function( Cldr, Globalize ) {\n\nvar createError = Globalize._createError,\n\tcreateErrorUnsupportedFeature = Globalize._createErrorUnsupportedFeature,\n\tformatMessage = Globalize._formatMessage,\n\tisPlainObject = Globalize._isPlainObject,\n\tlooseMatching = Globalize._looseMatching,\n\tnumberNumberingSystemDigitsMap = Globalize._numberNumberingSystemDigitsMap,\n\tnumberSymbol = Globalize._numberSymbol,\n\tpartsJoin = Globalize._partsJoin,\n\tpartsPush = Globalize._partsPush,\n\tregexpEscape = Globalize._regexpEscape,\n\tremoveLiteralQuotes = Globalize._removeLiteralQuotes,\n\truntimeBind = Globalize._runtimeBind,\n\tstringPad = Globalize._stringPad,\n\tvalidate = Globalize._validate,\n\tvalidateCldr = Globalize._validateCldr,\n\tvalidateDefaultLocale = Globalize._validateDefaultLocale,\n\tvalidateParameterPresence = Globalize._validateParameterPresence,\n\tvalidateParameterType = Globalize._validateParameterType,\n\tvalidateParameterTypePlainObject = Globalize._validateParameterTypePlainObject,\n\tvalidateParameterTypeString = Globalize._validateParameterTypeString;\n\n\nvar validateParameterTypeDate = function( value, name ) {\n\tvalidateParameterType( value, name, value === undefined || value instanceof Date, \"Date\" );\n};\n\n\n\n\nvar createErrorInvalidParameterValue = function( name, value ) {\n\treturn createError( \"E_INVALID_PAR_VALUE\", \"Invalid `{name}` value ({value}).\", {\n\t\tname: name,\n\t\tvalue: value\n\t});\n};\n\n\n\n\n/**\n * Create a map between the skeleton fields and their positions, e.g.,\n * {\n * G: 0\n * y: 1\n * ...\n * }\n */\nvar validateSkeletonFieldsPosMap = \"GyYuUrQqMLlwWEecdDFghHKkmsSAzZOvVXx\".split( \"\" ).reduce(function( memo, item, i ) {\n\tmemo[ item ] = i;\n\treturn memo;\n}, {});\n\n\n\n\n/**\n * validateSkeleton( skeleton )\n *\n * skeleton: Assume `j` has already been converted into a localized hour field.\n */\nvar validateSkeleton = function validateSkeleton( skeleton ) {\n\tvar last,\n\n\t\t// Using easier to read variable.\n\t\tfieldsPosMap = validateSkeletonFieldsPosMap;\n\n\t// \"The fields are from the Date Field Symbol Table in Date Format Patterns\"\n\t// Ref: http://www.unicode.org/reports/tr35/tr35-dates.html#availableFormats_appendItems\n\t// I.e., check for invalid characters.\n\tskeleton.replace( /[^GyYuUrQqMLlwWEecdDFghHKkmsSAzZOvVXx]/, function( field ) {\n\t\tthrow createError(\n\t\t\t\"E_INVALID_OPTIONS\", \"Invalid field `{invalidField}` of skeleton `{value}`\",\n\t\t\t{\n\t\t\t\tinvalidField: field,\n\t\t\t\ttype: \"skeleton\",\n\t\t\t\tvalue: skeleton\n\t\t\t}\n\t\t);\n\t});\n\n\t// \"The canonical order is from top to bottom in that table; that is, yM not My\".\n\t// http://www.unicode.org/reports/tr35/tr35-dates.html#availableFormats_appendItems\n\t// I.e., check for invalid order.\n\tskeleton.split( \"\" ).every(function( field ) {\n\t\tif ( fieldsPosMap[ field ] < last ) {\n\t\t\tthrow createError(\n\t\t\t\t\"E_INVALID_OPTIONS\", \"Invalid order `{invalidField}` of skeleton `{value}`\",\n\t\t\t\t{\n\t\t\t\t\tinvalidField: field,\n\t\t\t\t\ttype: \"skeleton\",\n\t\t\t\t\tvalue: skeleton\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t\tlast = fieldsPosMap[ field ];\n\t\treturn true;\n\t});\n};\n\n\n\n\n/**\n * Returns a new object created by using `object`'s values as keys, and the keys as values.\n */\nvar objectInvert = function( object, fn ) {\n\tfn = fn || function( object, key, value ) {\n\t\tobject[ value ] = key;\n\t\treturn object;\n\t};\n\treturn Object.keys( object ).reduce(function( newObject, key ) {\n\t\treturn fn( newObject, key, object[ key ] );\n\t}, {});\n};\n\n\n\n\n// Invert key and values, e.g., {\"e\": \"eEc\"} ==> {\"e\": \"e\", \"E\": \"e\", \"c\": \"e\"}.\nvar dateExpandPatternSimilarFieldsMap = objectInvert({\n\t\"e\": \"eEc\",\n\t\"L\": \"ML\"\n}, function( object, key, value ) {\n\tvalue.split( \"\" ).forEach(function( field ) {\n\t\tobject[ field ] = key;\n\t});\n\treturn object;\n});\n\n\n\n\nvar dateExpandPatternNormalizePatternType = function( character ) {\n\treturn dateExpandPatternSimilarFieldsMap[ character ] || character;\n};\n\n\n\n\nvar datePatternRe = ( /([a-z])\\1*|'([^']|'')+'|''|./ig );\n\n\n\n\nvar stringRepeat = function( str, count ) {\n\tvar i, result = \"\";\n\tfor ( i = 0; i < count; i++ ) {\n\t\tresult = result + str;\n\t}\n\treturn result;\n};\n\n\n\n\nfunction expandBestMatchFormat( skeletonWithoutFractionalSeconds, bestMatchFormat ) {\n\tvar i, j, bestMatchFormatParts, matchedType, matchedLength, requestedType,\n\t\trequestedLength, requestedSkeletonParts,\n\n\t\t// Using an easier to read variable.\n\t\tnormalizePatternType = dateExpandPatternNormalizePatternType;\n\n\trequestedSkeletonParts = skeletonWithoutFractionalSeconds.match( datePatternRe );\n\tbestMatchFormatParts = bestMatchFormat.match( datePatternRe );\n\n\tfor ( i = 0; i < bestMatchFormatParts.length; i++ ) {\n\t\tmatchedType = bestMatchFormatParts[ i ].charAt( 0 );\n\t\tmatchedLength = bestMatchFormatParts[ i ].length;\n\t\tfor ( j = 0; j < requestedSkeletonParts.length; j++ ) {\n\t\t\trequestedType = requestedSkeletonParts[ j ].charAt( 0 );\n\t\t\trequestedLength = requestedSkeletonParts[ j ].length;\n\t\t\tif ( normalizePatternType( matchedType ) === normalizePatternType( requestedType ) &&\n\t\t\t\tmatchedLength < requestedLength\n\t\t\t) {\n\t\t\t\tbestMatchFormatParts[ i ] = stringRepeat( matchedType, requestedLength );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn bestMatchFormatParts.join( \"\" );\n}\n\n// See: http://www.unicode.org/reports/tr35/tr35-dates.html#Matching_Skeletons\nvar dateExpandPatternAugmentFormat = function( requestedSkeleton, bestMatchFormat, decimalSeparator ) {\n\tvar countOfFractionalSeconds, fractionalSecondMatch, lastSecondIdx,\n\t\tskeletonWithoutFractionalSeconds;\n\n\tfractionalSecondMatch = requestedSkeleton.match( /S/g );\n\tcountOfFractionalSeconds = fractionalSecondMatch ? fractionalSecondMatch.length : 0;\n\tskeletonWithoutFractionalSeconds = requestedSkeleton.replace( /S/g, \"\" );\n\n\tbestMatchFormat = expandBestMatchFormat( skeletonWithoutFractionalSeconds, bestMatchFormat );\n\n\tlastSecondIdx = bestMatchFormat.lastIndexOf( \"s\" );\n\tif ( lastSecondIdx !== -1 && countOfFractionalSeconds !== 0 ) {\n\t\tbestMatchFormat =\n\t\t\tbestMatchFormat.slice( 0, lastSecondIdx + 1 ) +\n\t\t\tdecimalSeparator +\n\t\t\tstringRepeat( \"S\", countOfFractionalSeconds ) +\n\t\t\tbestMatchFormat.slice( lastSecondIdx + 1 );\n\t}\n\treturn bestMatchFormat;\n};\n\n\n\n\nvar dateExpandPatternCompareFormats = function( formatA, formatB ) {\n\tvar a, b, distance, lenA, lenB, typeA, typeB, i, j,\n\n\t\t// Using easier to read variables.\n\t\tnormalizePatternType = dateExpandPatternNormalizePatternType;\n\n\tif ( formatA === formatB ) {\n\t\treturn 0;\n\t}\n\n\tformatA = formatA.match( datePatternRe );\n\tformatB = formatB.match( datePatternRe );\n\n\tif ( formatA.length !== formatB.length ) {\n\t\treturn -1;\n\t}\n\n\tdistance = 1;\n\tfor ( i = 0; i < formatA.length; i++ ) {\n\t\ta = formatA[ i ].charAt( 0 );\n\t\ttypeA = normalizePatternType( a );\n\t\ttypeB = null;\n\t\tfor ( j = 0; j < formatB.length; j++ ) {\n\t\t\tb = formatB[ j ].charAt( 0 );\n\t\t\ttypeB = normalizePatternType( b );\n\t\t\tif ( typeA === typeB ) {\n\t\t\t\tbreak;\n\t\t\t} else {\n\t\t\t\ttypeB = null;\n\t\t\t}\n\t\t}\n\t\tif ( typeB === null ) {\n\t\t\treturn -1;\n\t\t}\n\t\tlenA = formatA[ i ].length;\n\t\tlenB = formatB[ j ].length;\n\t\tdistance = distance + Math.abs( lenA - lenB );\n\n\t\t// Most symbols have a small distance from each other, e.g., M ≅ L; E ≅ c; a ≅ b ≅ B;\n\t\t// H ≅ k ≅ h ≅ K; ...\n\t\tif ( a !== b ) {\n\t\t\tdistance += 1;\n\t\t}\n\n\t\t// Numeric (l<3) and text fields (l>=3) are given a larger distance from each other.\n\t\tif ( ( lenA < 3 && lenB >= 3 ) || ( lenA >= 3 && lenB < 3 ) ) {\n\t\t\tdistance += 20;\n\t\t}\n\t}\n\treturn distance;\n};\n\n\n\n\nvar dateExpandPatternGetBestMatchPattern = function( cldr, askedSkeleton ) {\n\tvar availableFormats, decimalSeparator, pattern, ratedFormats, skeleton,\n\t\tpath = \"dates/calendars/gregorian/dateTimeFormats/availableFormats\",\n\n\t\t// Using easier to read variables.\n\t\taugmentFormat = dateExpandPatternAugmentFormat,\n\t\tcompareFormats = dateExpandPatternCompareFormats;\n\n\tpattern = cldr.main([ path, askedSkeleton ]);\n\n\tif ( askedSkeleton && !pattern ) {\n\t\tavailableFormats = cldr.main([ path ]);\n\t\tratedFormats = [];\n\n\t\tfor ( skeleton in availableFormats ) {\n\t\t\tratedFormats.push({\n\t\t\t\tskeleton: skeleton,\n\t\t\t\tpattern: availableFormats[ skeleton ],\n\t\t\t\trate: compareFormats( askedSkeleton, skeleton )\n\t\t\t});\n\t\t}\n\n\t\tratedFormats = ratedFormats\n\t\t\t.filter( function( format ) {\n\t\t\t\treturn format.rate > -1;\n\t\t\t} )\n\t\t\t.sort( function( formatA, formatB ) {\n\t\t\t\treturn formatA.rate - formatB.rate;\n\t\t\t});\n\n\t\tif ( ratedFormats.length ) {\n\t\t\tdecimalSeparator = numberSymbol( \"decimal\", cldr );\n\t\t\tpattern = augmentFormat( askedSkeleton, ratedFormats[ 0 ].pattern, decimalSeparator );\n\t\t}\n\t}\n\n\treturn pattern;\n};\n\n\n\n\n/**\n * expandPattern( options, cldr )\n *\n * @options [Object] if String, it's considered a skeleton. Object accepts:\n * - skeleton: [String] lookup availableFormat;\n * - date: [String] ( \"full\" | \"long\" | \"medium\" | \"short\" );\n * - time: [String] ( \"full\" | \"long\" | \"medium\" | \"short\" );\n * - datetime: [String] ( \"full\" | \"long\" | \"medium\" | \"short\" );\n * - raw: [String] For more info see datetime/format.js.\n *\n * @cldr [Cldr instance].\n *\n * Return the corresponding pattern.\n * Eg for \"en\":\n * - \"GyMMMd\" returns \"MMM d, y G\";\n * - { skeleton: \"GyMMMd\" } returns \"MMM d, y G\";\n * - { date: \"full\" } returns \"EEEE, MMMM d, y\";\n * - { time: \"full\" } returns \"h:mm:ss a zzzz\";\n * - { datetime: \"full\" } returns \"EEEE, MMMM d, y 'at' h:mm:ss a zzzz\";\n * - { raw: \"dd/mm\" } returns \"dd/mm\";\n */\nvar dateExpandPattern = function( options, cldr ) {\n\tvar dateSkeleton, result, skeleton, timeSkeleton, type,\n\n\t\t// Using easier to read variables.\n\t\tgetBestMatchPattern = dateExpandPatternGetBestMatchPattern;\n\n\tfunction combineDateTime( type, datePattern, timePattern ) {\n\t\treturn formatMessage(\n\t\t\tcldr.main([\n\t\t\t\t\"dates/calendars/gregorian/dateTimeFormats\",\n\t\t\t\ttype\n\t\t\t]),\n\t\t\t[ timePattern, datePattern ]\n\t\t);\n\t}\n\n\tswitch ( true ) {\n\t\tcase \"skeleton\" in options:\n\t\t\tskeleton = options.skeleton;\n\n\t\t\t// Preferred hour (j).\n\t\t\tskeleton = skeleton.replace( /j/g, function() {\n\t\t\t\treturn cldr.supplemental.timeData.preferred();\n\t\t\t});\n\n\t\t\tvalidateSkeleton( skeleton );\n\n\t\t\t// Try direct map (note that getBestMatchPattern handles it).\n\t\t\t// ... or, try to \"best match\" the whole skeleton.\n\t\t\tresult = getBestMatchPattern(\n\t\t\t\tcldr,\n\t\t\t\tskeleton\n\t\t\t);\n\t\t\tif ( result ) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// ... or, try to \"best match\" the date and time parts individually.\n\t\t\ttimeSkeleton = skeleton.split( /[^hHKkmsSAzZOvVXx]/ ).slice( -1 )[ 0 ];\n\t\t\tdateSkeleton = skeleton.split( /[^GyYuUrQqMLlwWdDFgEec]/ )[ 0 ];\n\t\t\tdateSkeleton = getBestMatchPattern(\n\t\t\t\tcldr,\n\t\t\t\tdateSkeleton\n\t\t\t);\n\t\t\ttimeSkeleton = getBestMatchPattern(\n\t\t\t\tcldr,\n\t\t\t\ttimeSkeleton\n\t\t\t);\n\n\t\t\tif ( /(MMMM|LLLL).*[Ec]/.test( dateSkeleton ) ) {\n\t\t\t\ttype = \"full\";\n\t\t\t} else if ( /MMMM|LLLL/.test( dateSkeleton ) ) {\n\t\t\t\ttype = \"long\";\n\t\t\t} else if ( /MMM|LLL/.test( dateSkeleton ) ) {\n\t\t\t\ttype = \"medium\";\n\t\t\t} else {\n\t\t\t\ttype = \"short\";\n\t\t\t}\n\n\t\t\tif ( dateSkeleton && timeSkeleton ) {\n\t\t\t\tresult = combineDateTime( type, dateSkeleton, timeSkeleton );\n\t\t\t} else {\n\t\t\t\tresult = dateSkeleton || timeSkeleton;\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\tcase \"date\" in options:\n\t\tcase \"time\" in options:\n\t\t\tresult = cldr.main([\n\t\t\t\t\"dates/calendars/gregorian\",\n\t\t\t\t\"date\" in options ? \"dateFormats\" : \"timeFormats\",\n\t\t\t\t( options.date || options.time )\n\t\t\t]);\n\t\t\tbreak;\n\n\t\tcase \"datetime\" in options:\n\t\t\tresult = combineDateTime( options.datetime,\n\t\t\t\tcldr.main([ \"dates/calendars/gregorian/dateFormats\", options.datetime ]),\n\t\t\t\tcldr.main([ \"dates/calendars/gregorian/timeFormats\", options.datetime ])\n\t\t\t);\n\t\t\tbreak;\n\n\t\tcase \"raw\" in options:\n\t\t\tresult = options.raw;\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tthrow createErrorInvalidParameterValue({\n\t\t\t\tname: \"options\",\n\t\t\t\tvalue: options\n\t\t\t});\n\t}\n\n\treturn result;\n};\n\n\n\n\nvar dateWeekDays = [ \"sun\", \"mon\", \"tue\", \"wed\", \"thu\", \"fri\", \"sat\" ];\n\n\n\n\n/**\n * firstDayOfWeek\n */\nvar dateFirstDayOfWeek = function( cldr ) {\n\treturn dateWeekDays.indexOf( cldr.supplemental.weekData.firstDay() );\n};\n\n\n\n\n/**\n * getTimeZoneName( length, type )\n */\nvar dateGetTimeZoneName = function( length, type, timeZone, cldr ) {\n\tvar metaZone, result;\n\n\tif ( !timeZone ) {\n\t\treturn;\n\t}\n\n\tresult = cldr.main([\n\t\t\"dates/timeZoneNames/zone\",\n\t\ttimeZone,\n\t\tlength < 4 ? \"short\" : \"long\",\n\t\ttype\n\t]);\n\n\tif ( result ) {\n\t\treturn result;\n\t}\n\n\t// The latest metazone data of the metazone array.\n\t// TODO expand to support the historic metazones based on the given date.\n\tmetaZone = cldr.supplemental([\n\t\t\"metaZones/metazoneInfo/timezone\", timeZone, 0,\n\t\t\"usesMetazone/_mzone\"\n\t]);\n\n\treturn cldr.main([\n\t\t\"dates/timeZoneNames/metazone\",\n\t\tmetaZone,\n\t\tlength < 4 ? \"short\" : \"long\",\n\t\ttype\n\t]);\n};\n\n\n\n\n/**\n * timezoneHourFormatShortH( hourFormat )\n *\n * @hourFormat [String]\n *\n * Unofficial deduction of the short hourFormat given time zone `hourFormat` element.\n * Official spec is pending resolution: http://unicode.org/cldr/trac/ticket/8293\n *\n * Example:\n * - \"+HH.mm;-HH.mm\" => \"+H;-H\"\n * - \"+HH:mm;-HH:mm\" => \"+H;-H\"\n * - \"+HH:mm;−HH:mm\" => \"+H;−H\" (Note MINUS SIGN \\u2212)\n * - \"+HHmm;-HHmm\" => \"+H:-H\"\n */\nvar dateTimezoneHourFormatH = function( hourFormat ) {\n\treturn hourFormat\n\t\t.split( \";\" )\n\t\t.map(function( format ) {\n\t\t\treturn format.slice( 0, format.indexOf( \"H\" ) + 1 );\n\t\t})\n\t\t.join( \";\" );\n};\n\n\n\n\n/**\n * timezoneHourFormatLongHm( hourFormat )\n *\n * @hourFormat [String]\n *\n * Unofficial deduction of the short hourFormat given time zone `hourFormat` element.\n * Official spec is pending resolution: http://unicode.org/cldr/trac/ticket/8293\n *\n * Example (hFormat === \"H\"): (used for short Hm)\n * - \"+HH.mm;-HH.mm\" => \"+H.mm;-H.mm\"\n * - \"+HH:mm;-HH:mm\" => \"+H:mm;-H:mm\"\n * - \"+HH:mm;−HH:mm\" => \"+H:mm;−H:mm\" (Note MINUS SIGN \\u2212)\n * - \"+HHmm;-HHmm\" => \"+Hmm:-Hmm\"\n *\n * Example (hFormat === \"HH\": (used for long Hm)\n * - \"+HH.mm;-HH.mm\" => \"+HH.mm;-HH.mm\"\n * - \"+HH:mm;-HH:mm\" => \"+HH:mm;-HH:mm\"\n * - \"+H:mm;-H:mm\" => \"+HH:mm;-HH:mm\"\n * - \"+HH:mm;−HH:mm\" => \"+HH:mm;−HH:mm\" (Note MINUS SIGN \\u2212)\n * - \"+HHmm;-HHmm\" => \"+HHmm:-HHmm\"\n */\nvar dateTimezoneHourFormatHm = function( hourFormat, hFormat ) {\n\treturn hourFormat\n\t\t.split( \";\" )\n\t\t.map(function( format ) {\n\t\t\tvar parts = format.split( /H+/ );\n\t\t\tparts.splice( 1, 0, hFormat );\n\t\t\treturn parts.join( \"\" );\n\t\t})\n\t\t.join( \";\" );\n};\n\n\n\n\nvar runtimeCacheDataBind = function( key, data ) {\n\tvar fn = function() {\n\t\treturn data;\n\t};\n\tfn.dataCacheKey = key;\n\treturn fn;\n};\n\n\n\n\n/**\n * properties( pattern, cldr )\n *\n * @pattern [String] raw pattern.\n * ref: http://www.unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns\n *\n * @cldr [Cldr instance].\n *\n * Return the properties given the pattern and cldr.\n *\n * TODO Support other calendar types.\n */\nvar dateFormatProperties = function( pattern, cldr, timeZone ) {\n\tvar properties = {\n\t\t\tnumberFormatters: {},\n\t\t\tpattern: pattern,\n\t\t\ttimeSeparator: numberSymbol( \"timeSeparator\", cldr )\n\t\t},\n\t\twidths = [ \"abbreviated\", \"wide\", \"narrow\" ];\n\n\tfunction setNumberFormatterPattern( pad ) {\n\t\tproperties.numberFormatters[ pad ] = stringPad( \"\", pad );\n\t}\n\n\tif ( timeZone ) {\n\t\tproperties.timeZoneData = runtimeCacheDataBind( \"iana/\" + timeZone, {\n\t\t\toffsets: cldr.get([ \"globalize-iana/zoneData\", timeZone, \"offsets\" ]),\n\t\t\tuntils: cldr.get([ \"globalize-iana/zoneData\", timeZone, \"untils\" ]),\n\t\t\tisdsts: cldr.get([ \"globalize-iana/zoneData\", timeZone, \"isdsts\" ])\n\t\t});\n\t}\n\n\tpattern.replace( datePatternRe, function( current ) {\n\t\tvar aux, chr, daylightTzName, formatNumber, genericTzName, length, standardTzName;\n\n\t\tchr = current.charAt( 0 );\n\t\tlength = current.length;\n\n\t\tif ( chr === \"j\" ) {\n\n\t\t\t// Locale preferred hHKk.\n\t\t\t// http://www.unicode.org/reports/tr35/tr35-dates.html#Time_Data\n\t\t\tproperties.preferredTime = chr = cldr.supplemental.timeData.preferred();\n\t\t}\n\n\t\t// ZZZZ: same as \"OOOO\".\n\t\tif ( chr === \"Z\" && length === 4 ) {\n\t\t\tchr = \"O\";\n\t\t\tlength = 4;\n\t\t}\n\n\t\t// z...zzz: \"{shortRegion}\", eg. \"PST\" or \"PDT\".\n\t\t// zzzz: \"{regionName} {Standard Time}\" or \"{regionName} {Daylight Time}\",\n\t\t// e.g., \"Pacific Standard Time\" or \"Pacific Daylight Time\".\n\t\t// http://unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns\n\t\tif ( chr === \"z\" ) {\n\t\t\tstandardTzName = dateGetTimeZoneName( length, \"standard\", timeZone, cldr );\n\t\t\tdaylightTzName = dateGetTimeZoneName( length, \"daylight\", timeZone, cldr );\n\t\t\tif ( standardTzName ) {\n\t\t\t\tproperties.standardTzName = standardTzName;\n\t\t\t}\n\t\t\tif ( daylightTzName ) {\n\t\t\t\tproperties.daylightTzName = daylightTzName;\n\t\t\t}\n\n\t\t\t// Fall through the \"O\" format in case one name is missing.\n\t\t\tif ( !standardTzName || !daylightTzName ) {\n\t\t\t\tchr = \"O\";\n\t\t\t\tif ( length < 4 ) {\n\t\t\t\t\tlength = 1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// v...vvv: \"{shortRegion}\", eg. \"PT\".\n\t\t// vvvv: \"{regionName} {Time}\" or \"{regionName} {Time}\",\n\t\t// e.g., \"Pacific Time\"\n\t\t// http://unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns\n\t\tif ( chr === \"v\" ) {\n\t\t\tgenericTzName = dateGetTimeZoneName( length, \"generic\", timeZone, cldr );\n\n\t\t\t// Fall back to \"V\" format.\n\t\t\tif ( !genericTzName ) {\n\t\t\t\tchr = \"V\";\n\t\t\t\tlength = 4;\n\t\t\t}\n\t\t}\n\n\t\tswitch ( chr ) {\n\n\t\t\t// Era\n\t\t\tcase \"G\":\n\t\t\t\tproperties.eras = cldr.main([\n\t\t\t\t\t\"dates/calendars/gregorian/eras\",\n\t\t\t\t\tlength <= 3 ? \"eraAbbr\" : ( length === 4 ? \"eraNames\" : \"eraNarrow\" )\n\t\t\t\t]);\n\t\t\t\tbreak;\n\n\t\t\t// Year\n\t\t\tcase \"y\":\n\n\t\t\t\t// Plain year.\n\t\t\t\tformatNumber = true;\n\t\t\t\tbreak;\n\n\t\t\tcase \"Y\":\n\n\t\t\t\t// Year in \"Week of Year\"\n\t\t\t\tproperties.firstDay = dateFirstDayOfWeek( cldr );\n\t\t\t\tproperties.minDays = cldr.supplemental.weekData.minDays();\n\t\t\t\tformatNumber = true;\n\t\t\t\tbreak;\n\n\t\t\tcase \"u\": // Extended year. Need to be implemented.\n\t\t\tcase \"U\": // Cyclic year name. Need to be implemented.\n\t\t\t\tthrow createErrorUnsupportedFeature({\n\t\t\t\t\tfeature: \"year pattern `\" + chr + \"`\"\n\t\t\t\t});\n\n\t\t\t// Quarter\n\t\t\tcase \"Q\":\n\t\t\tcase \"q\":\n\t\t\t\tif ( length > 2 ) {\n\t\t\t\t\tif ( !properties.quarters ) {\n\t\t\t\t\t\tproperties.quarters = {};\n\t\t\t\t\t}\n\t\t\t\t\tif ( !properties.quarters[ chr ] ) {\n\t\t\t\t\t\tproperties.quarters[ chr ] = {};\n\t\t\t\t\t}\n\t\t\t\t\tproperties.quarters[ chr ][ length ] = cldr.main([\n\t\t\t\t\t\t\"dates/calendars/gregorian/quarters\",\n\t\t\t\t\t\tchr === \"Q\" ? \"format\" : \"stand-alone\",\n\t\t\t\t\t\twidths[ length - 3 ]\n\t\t\t\t\t]);\n\t\t\t\t} else {\n\t\t\t\t\tformatNumber = true;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\t// Month\n\t\t\tcase \"M\":\n\t\t\tcase \"L\":\n\t\t\t\tif ( length > 2 ) {\n\t\t\t\t\tif ( !properties.months ) {\n\t\t\t\t\t\tproperties.months = {};\n\t\t\t\t\t}\n\t\t\t\t\tif ( !properties.months[ chr ] ) {\n\t\t\t\t\t\tproperties.months[ chr ] = {};\n\t\t\t\t\t}\n\t\t\t\t\tproperties.months[ chr ][ length ] = cldr.main([\n\t\t\t\t\t\t\"dates/calendars/gregorian/months\",\n\t\t\t\t\t\tchr === \"M\" ? \"format\" : \"stand-alone\",\n\t\t\t\t\t\twidths[ length - 3 ]\n\t\t\t\t\t]);\n\t\t\t\t} else {\n\t\t\t\t\tformatNumber = true;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\t// Week - Week of Year (w) or Week of Month (W).\n\t\t\tcase \"w\":\n\t\t\tcase \"W\":\n\t\t\t\tproperties.firstDay = dateFirstDayOfWeek( cldr );\n\t\t\t\tproperties.minDays = cldr.supplemental.weekData.minDays();\n\t\t\t\tformatNumber = true;\n\t\t\t\tbreak;\n\n\t\t\t// Day\n\t\t\tcase \"d\":\n\t\t\tcase \"D\":\n\t\t\tcase \"F\":\n\t\t\t\tformatNumber = true;\n\t\t\t\tbreak;\n\n\t\t\tcase \"g\":\n\n\t\t\t\t// Modified Julian day. Need to be implemented.\n\t\t\t\tthrow createErrorUnsupportedFeature({\n\t\t\t\t\tfeature: \"Julian day pattern `g`\"\n\t\t\t\t});\n\n\t\t\t// Week day\n\t\t\tcase \"e\":\n\t\t\tcase \"c\":\n\t\t\t\tif ( length <= 2 ) {\n\t\t\t\t\tproperties.firstDay = dateFirstDayOfWeek( cldr );\n\t\t\t\t\tformatNumber = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t/* falls through */\n\t\t\tcase \"E\":\n\t\t\t\tif ( !properties.days ) {\n\t\t\t\t\tproperties.days = {};\n\t\t\t\t}\n\t\t\t\tif ( !properties.days[ chr ] ) {\n\t\t\t\t\tproperties.days[ chr ] = {};\n\t\t\t\t}\n\t\t\t\tif ( length === 6 ) {\n\n\t\t\t\t\t// If short day names are not explicitly specified, abbreviated day names are\n\t\t\t\t\t// used instead.\n\t\t\t\t\t// http://www.unicode.org/reports/tr35/tr35-dates.html#months_days_quarters_eras\n\t\t\t\t\t// http://unicode.org/cldr/trac/ticket/6790\n\t\t\t\t\tproperties.days[ chr ][ length ] = cldr.main([\n\t\t\t\t\t\t\t\"dates/calendars/gregorian/days\",\n\t\t\t\t\t\t\tchr === \"c\" ? \"stand-alone\" : \"format\",\n\t\t\t\t\t\t\t\"short\"\n\t\t\t\t\t\t]) || cldr.main([\n\t\t\t\t\t\t\t\"dates/calendars/gregorian/days\",\n\t\t\t\t\t\t\tchr === \"c\" ? \"stand-alone\" : \"format\",\n\t\t\t\t\t\t\t\"abbreviated\"\n\t\t\t\t\t\t]);\n\t\t\t\t} else {\n\t\t\t\t\tproperties.days[ chr ][ length ] = cldr.main([\n\t\t\t\t\t\t\"dates/calendars/gregorian/days\",\n\t\t\t\t\t\tchr === \"c\" ? \"stand-alone\" : \"format\",\n\t\t\t\t\t\twidths[ length < 3 ? 0 : length - 3 ]\n\t\t\t\t\t]);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\t// Period (AM or PM)\n\t\t\tcase \"a\":\n\t\t\t\tproperties.dayPeriods = {\n\t\t\t\t\tam: cldr.main(\n\t\t\t\t\t\t\"dates/calendars/gregorian/dayPeriods/format/wide/am\"\n\t\t\t\t\t),\n\t\t\t\t\tpm: cldr.main(\n\t\t\t\t\t\t\"dates/calendars/gregorian/dayPeriods/format/wide/pm\"\n\t\t\t\t\t)\n\t\t\t\t};\n\t\t\t\tbreak;\n\n\t\t\t// Hour\n\t\t\tcase \"h\": // 1-12\n\t\t\tcase \"H\": // 0-23\n\t\t\tcase \"K\": // 0-11\n\t\t\tcase \"k\": // 1-24\n\n\t\t\t// Minute\n\t\t\tcase \"m\":\n\n\t\t\t// Second\n\t\t\tcase \"s\":\n\t\t\tcase \"S\":\n\t\t\tcase \"A\":\n\t\t\t\tformatNumber = true;\n\t\t\t\tbreak;\n\n\t\t\t// Zone\n\t\t\tcase \"v\":\n\t\t\t\tif ( length !== 1 && length !== 4 ) {\n\t\t\t\t\tthrow createErrorUnsupportedFeature({\n\t\t\t\t\t\tfeature: \"timezone pattern `\" + pattern + \"`\"\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tproperties.genericTzName = genericTzName;\n\t\t\t\tbreak;\n\n\t\t\tcase \"V\":\n\n\t\t\t\tif ( length === 1 ) {\n\t\t\t\t\tthrow createErrorUnsupportedFeature({\n\t\t\t\t\t\tfeature: \"timezone pattern `\" + pattern + \"`\"\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif ( timeZone ) {\n\t\t\t\t\tif ( length === 2 ) {\n\t\t\t\t\t\tproperties.timeZoneName = timeZone;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar timeZoneName,\n\t\t\t\t\t\texemplarCity = cldr.main([\n\t\t\t\t\t\t\t\"dates/timeZoneNames/zone\", timeZone, \"exemplarCity\"\n\t\t\t\t\t\t]);\n\n\t\t\t\t\tif ( length === 3 ) {\n\t\t\t\t\t\tif ( !exemplarCity ) {\n\t\t\t\t\t\t\texemplarCity = cldr.main([\n\t\t\t\t\t\t\t\t\"dates/timeZoneNames/zone/Etc/Unknown/exemplarCity\"\n\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttimeZoneName = exemplarCity;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( exemplarCity && length === 4 ) {\n\t\t\t\t\t\ttimeZoneName = formatMessage(\n\t\t\t\t\t\t\tcldr.main(\n\t\t\t\t\t\t\t\t\"dates/timeZoneNames/regionFormat\"\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t[ exemplarCity ]\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( timeZoneName ) {\n\t\t\t\t\t\tproperties.timeZoneName = timeZoneName;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( current === \"v\" ) {\n\t\t\t\t\tlength = 1;\n\t\t\t\t}\n\n\t\t\t/* falls through */\n\t\t\tcase \"O\":\n\n\t\t\t\t// O: \"{gmtFormat}+H;{gmtFormat}-H\" or \"{gmtZeroFormat}\", eg. \"GMT-8\" or \"GMT\".\n\t\t\t\t// OOOO: \"{gmtFormat}{hourFormat}\" or \"{gmtZeroFormat}\", eg. \"GMT-08:00\" or \"GMT\".\n\t\t\t\tproperties.gmtFormat = cldr.main( \"dates/timeZoneNames/gmtFormat\" );\n\t\t\t\tproperties.gmtZeroFormat = cldr.main( \"dates/timeZoneNames/gmtZeroFormat\" );\n\n\t\t\t\t// Unofficial deduction of the hourFormat variations.\n\t\t\t\t// Official spec is pending resolution: http://unicode.org/cldr/trac/ticket/8293\n\t\t\t\taux = cldr.main( \"dates/timeZoneNames/hourFormat\" );\n\t\t\t\tproperties.hourFormat = length < 4 ?\n\t\t\t\t\t[ dateTimezoneHourFormatH( aux ), dateTimezoneHourFormatHm( aux, \"H\" ) ] :\n\t\t\t\t\tdateTimezoneHourFormatHm( aux, \"HH\" );\n\n\t\t\t/* falls through */\n\t\t\tcase \"Z\":\n\t\t\tcase \"X\":\n\t\t\tcase \"x\":\n\t\t\t\tsetNumberFormatterPattern( 1 );\n\t\t\t\tsetNumberFormatterPattern( 2 );\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif ( formatNumber ) {\n\t\t\tsetNumberFormatterPattern( length );\n\t\t}\n\t});\n\n\treturn properties;\n};\n\n\n\n\nvar dateFormatterFn = function( dateToPartsFormatter ) {\n\treturn function dateFormatter( value ) {\n\t\treturn partsJoin( dateToPartsFormatter( value ));\n\t};\n};\n\n\n\n\n/**\n * parseProperties( cldr )\n *\n * @cldr [Cldr instance].\n *\n * @timeZone [String] FIXME.\n *\n * Return parser properties.\n */\nvar dateParseProperties = function( cldr, timeZone ) {\n\tvar properties = {\n\t\tpreferredTimeData: cldr.supplemental.timeData.preferred()\n\t};\n\n\tif ( timeZone ) {\n\t\tproperties.timeZoneData = runtimeCacheDataBind( \"iana/\" + timeZone, {\n\t\t\toffsets: cldr.get([ \"globalize-iana/zoneData\", timeZone, \"offsets\" ]),\n\t\t\tuntils: cldr.get([ \"globalize-iana/zoneData\", timeZone, \"untils\" ]),\n\t\t\tisdsts: cldr.get([ \"globalize-iana/zoneData\", timeZone, \"isdsts\" ])\n\t\t});\n\t}\n\n\treturn properties;\n};\n\n\nvar ZonedDateTime = (function() {\nfunction definePrivateProperty(object, property, value) {\n Object.defineProperty(object, property, {\n value: value\n });\n}\n\nfunction getUntilsIndex(original, untils) {\n var index = 0;\n var originalTime = original.getTime();\n\n // TODO Should we do binary search for improved performance?\n while (index < untils.length - 1 && originalTime >= untils[index]) {\n index++;\n }\n return index;\n}\n\nfunction setWrap(fn) {\n var offset1 = this.getTimezoneOffset();\n var ret = fn();\n this.original.setTime(new Date(this.getTime()));\n var offset2 = this.getTimezoneOffset();\n if (offset2 - offset1) {\n this.original.setMinutes(this.original.getMinutes() + offset2 - offset1);\n }\n return ret;\n}\n\nvar ZonedDateTime = function(date, timeZoneData) {\n definePrivateProperty(this, \"original\", new Date(date.getTime()));\n definePrivateProperty(this, \"local\", new Date(date.getTime()));\n definePrivateProperty(this, \"timeZoneData\", timeZoneData);\n definePrivateProperty(this, \"setWrap\", setWrap);\n if (!(timeZoneData.untils && timeZoneData.offsets && timeZoneData.isdsts)) {\n throw new Error(\"Invalid IANA data\");\n }\n this.setTime(this.local.getTime() - this.getTimezoneOffset() * 60 * 1000);\n};\n\nZonedDateTime.prototype.clone = function() {\n return new ZonedDateTime(this.original, this.timeZoneData);\n};\n\n// Date field getters.\n[\"getFullYear\", \"getMonth\", \"getDate\", \"getDay\", \"getHours\", \"getMinutes\",\n\"getSeconds\", \"getMilliseconds\"].forEach(function(method) {\n // Corresponding UTC method, e.g., \"getUTCFullYear\" if method === \"getFullYear\".\n var utcMethod = \"getUTC\" + method.substr(3);\n ZonedDateTime.prototype[method] = function() {\n return this.local[utcMethod]();\n };\n});\n\n// Note: Define .valueOf = .getTime for arithmetic operations like date1 - date2.\nZonedDateTime.prototype.valueOf =\nZonedDateTime.prototype.getTime = function() {\n return this.local.getTime() + this.getTimezoneOffset() * 60 * 1000;\n};\n\nZonedDateTime.prototype.getTimezoneOffset = function() {\n var index = getUntilsIndex(this.original, this.timeZoneData.untils);\n return this.timeZoneData.offsets[index];\n};\n\n// Date field setters.\n[\"setFullYear\", \"setMonth\", \"setDate\", \"setHours\", \"setMinutes\", \"setSeconds\", \"setMilliseconds\"].forEach(function(method) {\n // Corresponding UTC method, e.g., \"setUTCFullYear\" if method === \"setFullYear\".\n var utcMethod = \"setUTC\" + method.substr(3);\n ZonedDateTime.prototype[method] = function(value) {\n var local = this.local;\n // Note setWrap is needed for seconds and milliseconds just because\n // abs(value) could be >= a minute.\n return this.setWrap(function() {\n return local[utcMethod](value);\n });\n };\n});\n\nZonedDateTime.prototype.setTime = function(time) {\n return this.local.setTime(time);\n};\n\nZonedDateTime.prototype.isDST = function() {\n var index = getUntilsIndex(this.original, this.timeZoneData.untils);\n return Boolean(this.timeZoneData.isdsts[index]);\n};\n\nZonedDateTime.prototype.inspect = function() {\n var index = getUntilsIndex(this.original, this.timeZoneData.untils);\n var abbrs = this.timeZoneData.abbrs;\n return this.local.toISOString().replace(/Z$/, \"\") + \" \" +\n (abbrs && abbrs[index] + \" \" || (this.getTimezoneOffset() * -1) + \" \") +\n (this.isDST() ? \"(daylight savings)\" : \"\");\n};\n\nZonedDateTime.prototype.toDate = function() {\n return new Date(this.getTime());\n};\n\n// Type cast getters.\n[\"toISOString\", \"toJSON\", \"toUTCString\"].forEach(function(method) {\n ZonedDateTime.prototype[method] = function() {\n return this.toDate()[method]();\n };\n});\n\nreturn ZonedDateTime;\n}());\n\n\n/**\n * isLeapYear( year )\n *\n * @year [Number]\n *\n * Returns an indication whether the specified year is a leap year.\n */\nvar dateIsLeapYear = function( year ) {\n\treturn new Date( year, 1, 29 ).getMonth() === 1;\n};\n\n\n\n\n/**\n * lastDayOfMonth( date )\n *\n * @date [Date]\n *\n * Return the last day of the given date's month\n */\nvar dateLastDayOfMonth = function( date ) {\n\treturn new Date( date.getFullYear(), date.getMonth() + 1, 0 ).getDate();\n};\n\n\n\n\n/**\n * startOf changes the input to the beginning of the given unit.\n *\n * For example, starting at the start of a day, resets hours, minutes\n * seconds and milliseconds to 0. Starting at the month does the same, but\n * also sets the date to 1.\n *\n * Returns the modified date\n */\nvar dateStartOf = function( date, unit ) {\n\tdate = date instanceof ZonedDateTime ? date.clone() : new Date( date.getTime() );\n\tswitch ( unit ) {\n\t\tcase \"year\":\n\t\t\tdate.setMonth( 0 );\n\t\t/* falls through */\n\t\tcase \"month\":\n\t\t\tdate.setDate( 1 );\n\t\t/* falls through */\n\t\tcase \"day\":\n\t\t\tdate.setHours( 0 );\n\t\t/* falls through */\n\t\tcase \"hour\":\n\t\t\tdate.setMinutes( 0 );\n\t\t/* falls through */\n\t\tcase \"minute\":\n\t\t\tdate.setSeconds( 0 );\n\t\t/* falls through */\n\t\tcase \"second\":\n\t\t\tdate.setMilliseconds( 0 );\n\t}\n\treturn date;\n};\n\n\n\n\n/**\n * Differently from native date.setDate(), this function returns a date whose\n * day remains inside the month boundaries. For example:\n *\n * setDate( FebDate, 31 ): a \"Feb 28\" date.\n * setDate( SepDate, 31 ): a \"Sep 30\" date.\n */\nvar dateSetDate = function( date, day ) {\n\tvar lastDay = new Date( date.getFullYear(), date.getMonth() + 1, 0 ).getDate();\n\n\tdate.setDate( day < 1 ? 1 : day < lastDay ? day : lastDay );\n};\n\n\n\n\n/**\n * Differently from native date.setMonth(), this function adjusts date if\n * needed, so final month is always the one set.\n *\n * setMonth( Jan31Date, 1 ): a \"Feb 28\" date.\n * setDate( Jan31Date, 8 ): a \"Sep 30\" date.\n */\nvar dateSetMonth = function( date, month ) {\n\tvar originalDate = date.getDate();\n\n\tdate.setDate( 1 );\n\tdate.setMonth( month );\n\tdateSetDate( date, originalDate );\n};\n\n\n\n\nvar outOfRange = function( value, low, high ) {\n\treturn value < low || value > high;\n};\n\n\n\n\n/**\n * parse( value, tokens, properties )\n *\n * @value [String] string date.\n *\n * @tokens [Object] tokens returned by date/tokenizer.\n *\n * @properties [Object] output returned by date/tokenizer-properties.\n *\n * ref: http://www.unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns\n */\nvar dateParse = function( _value, tokens, properties ) {\n\tvar amPm, day, daysOfYear, month, era, hour, hour12, timezoneOffset, valid,\n\t\tYEAR = 0,\n\t\tMONTH = 1,\n\t\tDAY = 2,\n\t\tHOUR = 3,\n\t\tMINUTE = 4,\n\t\tSECOND = 5,\n\t\tMILLISECONDS = 6,\n\t\tdate = new Date(),\n\t\ttruncateAt = [],\n\t\tunits = [ \"year\", \"month\", \"day\", \"hour\", \"minute\", \"second\", \"milliseconds\" ];\n\n\t// Create globalize date with given timezone data.\n\tif ( properties.timeZoneData ) {\n\t\tdate = new ZonedDateTime( date, properties.timeZoneData() );\n\t}\n\n\tif ( !tokens.length ) {\n\t\treturn null;\n\t}\n\n\tvalid = tokens.every(function( token ) {\n\t\tvar century, chr, value, length;\n\n\t\tif ( token.type === \"literal\" ) {\n\n\t\t\t// continue\n\t\t\treturn true;\n\t\t}\n\n\t\tchr = token.type.charAt( 0 );\n\t\tlength = token.type.length;\n\n\t\tif ( chr === \"j\" ) {\n\n\t\t\t// Locale preferred hHKk.\n\t\t\t// http://www.unicode.org/reports/tr35/tr35-dates.html#Time_Data\n\t\t\tchr = properties.preferredTimeData;\n\t\t}\n\n\t\tswitch ( chr ) {\n\n\t\t\t// Era\n\t\t\tcase \"G\":\n\t\t\t\ttruncateAt.push( YEAR );\n\t\t\t\tera = +token.value;\n\t\t\t\tbreak;\n\n\t\t\t// Year\n\t\t\tcase \"y\":\n\t\t\t\tvalue = token.value;\n\t\t\t\tif ( length === 2 ) {\n\t\t\t\t\tif ( outOfRange( value, 0, 99 ) ) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\t// mimic dojo/date/locale: choose century to apply, according to a sliding\n\t\t\t\t\t// window of 80 years before and 20 years after present year.\n\t\t\t\t\tcentury = Math.floor( date.getFullYear() / 100 ) * 100;\n\t\t\t\t\tvalue += century;\n\t\t\t\t\tif ( value > date.getFullYear() + 20 ) {\n\t\t\t\t\t\tvalue -= 100;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdate.setFullYear( value );\n\t\t\t\ttruncateAt.push( YEAR );\n\t\t\t\tbreak;\n\n\t\t\tcase \"Y\": // Year in \"Week of Year\"\n\t\t\t\tthrow createErrorUnsupportedFeature({\n\t\t\t\t\tfeature: \"year pattern `\" + chr + \"`\"\n\t\t\t\t});\n\n\t\t\t// Quarter (skip)\n\t\t\tcase \"Q\":\n\t\t\tcase \"q\":\n\t\t\t\tbreak;\n\n\t\t\t// Month\n\t\t\tcase \"M\":\n\t\t\tcase \"L\":\n\t\t\t\tif ( length <= 2 ) {\n\t\t\t\t\tvalue = token.value;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = +token.value;\n\t\t\t\t}\n\t\t\t\tif ( outOfRange( value, 1, 12 ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\t// Setting the month later so that we have the correct year and can determine\n\t\t\t\t// the correct last day of February in case of leap year.\n\t\t\t\tmonth = value;\n\t\t\t\ttruncateAt.push( MONTH );\n\t\t\t\tbreak;\n\n\t\t\t// Week (skip)\n\t\t\tcase \"w\": // Week of Year.\n\t\t\tcase \"W\": // Week of Month.\n\t\t\t\tbreak;\n\n\t\t\t// Day\n\t\t\tcase \"d\":\n\t\t\t\tday = token.value;\n\t\t\t\ttruncateAt.push( DAY );\n\t\t\t\tbreak;\n\n\t\t\tcase \"D\":\n\t\t\t\tdaysOfYear = token.value;\n\t\t\t\ttruncateAt.push( DAY );\n\t\t\t\tbreak;\n\n\t\t\tcase \"F\":\n\n\t\t\t\t// Day of Week in month. eg. 2nd Wed in July.\n\t\t\t\t// Skip\n\t\t\t\tbreak;\n\n\t\t\t// Week day\n\t\t\tcase \"e\":\n\t\t\tcase \"c\":\n\t\t\tcase \"E\":\n\n\t\t\t\t// Skip.\n\t\t\t\t// value = arrayIndexOf( dateWeekDays, token.value );\n\t\t\t\tbreak;\n\n\t\t\t// Period (AM or PM)\n\t\t\tcase \"a\":\n\t\t\t\tamPm = token.value;\n\t\t\t\tbreak;\n\n\t\t\t// Hour\n\t\t\tcase \"h\": // 1-12\n\t\t\t\tvalue = token.value;\n\t\t\t\tif ( outOfRange( value, 1, 12 ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\thour = hour12 = true;\n\t\t\t\tdate.setHours( value === 12 ? 0 : value );\n\t\t\t\ttruncateAt.push( HOUR );\n\t\t\t\tbreak;\n\n\t\t\tcase \"K\": // 0-11\n\t\t\t\tvalue = token.value;\n\t\t\t\tif ( outOfRange( value, 0, 11 ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\thour = hour12 = true;\n\t\t\t\tdate.setHours( value );\n\t\t\t\ttruncateAt.push( HOUR );\n\t\t\t\tbreak;\n\n\t\t\tcase \"k\": // 1-24\n\t\t\t\tvalue = token.value;\n\t\t\t\tif ( outOfRange( value, 1, 24 ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\thour = true;\n\t\t\t\tdate.setHours( value === 24 ? 0 : value );\n\t\t\t\ttruncateAt.push( HOUR );\n\t\t\t\tbreak;\n\n\t\t\tcase \"H\": // 0-23\n\t\t\t\tvalue = token.value;\n\t\t\t\tif ( outOfRange( value, 0, 23 ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\thour = true;\n\t\t\t\tdate.setHours( value );\n\t\t\t\ttruncateAt.push( HOUR );\n\t\t\t\tbreak;\n\n\t\t\t// Minute\n\t\t\tcase \"m\":\n\t\t\t\tvalue = token.value;\n\t\t\t\tif ( outOfRange( value, 0, 59 ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tdate.setMinutes( value );\n\t\t\t\ttruncateAt.push( MINUTE );\n\t\t\t\tbreak;\n\n\t\t\t// Second\n\t\t\tcase \"s\":\n\t\t\t\tvalue = token.value;\n\t\t\t\tif ( outOfRange( value, 0, 59 ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tdate.setSeconds( value );\n\t\t\t\ttruncateAt.push( SECOND );\n\t\t\t\tbreak;\n\n\t\t\tcase \"A\":\n\t\t\t\tdate.setHours( 0 );\n\t\t\t\tdate.setMinutes( 0 );\n\t\t\t\tdate.setSeconds( 0 );\n\n\t\t\t/* falls through */\n\t\t\tcase \"S\":\n\t\t\t\tvalue = Math.round( token.value * Math.pow( 10, 3 - length ) );\n\t\t\t\tdate.setMilliseconds( value );\n\t\t\t\ttruncateAt.push( MILLISECONDS );\n\t\t\t\tbreak;\n\n\t\t\t// Zone\n\t\t\tcase \"z\":\n\t\t\tcase \"Z\":\n\t\t\tcase \"O\":\n\t\t\tcase \"v\":\n\t\t\tcase \"V\":\n\t\t\tcase \"X\":\n\t\t\tcase \"x\":\n\t\t\t\tif ( typeof token.value === \"number\" ) {\n\t\t\t\t\ttimezoneOffset = token.value;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn true;\n\t});\n\n\tif ( !valid ) {\n\t\treturn null;\n\t}\n\n\t// 12-hour format needs AM or PM, 24-hour format doesn't, ie. return null\n\t// if amPm && !hour12 || !amPm && hour12.\n\tif ( hour && !( !amPm ^ hour12 ) ) {\n\t\treturn null;\n\t}\n\n\tif ( era === 0 ) {\n\n\t\t// 1 BC = year 0\n\t\tdate.setFullYear( date.getFullYear() * -1 + 1 );\n\t}\n\n\tif ( month !== undefined ) {\n\t\tdateSetMonth( date, month - 1 );\n\t}\n\n\tif ( day !== undefined ) {\n\t\tif ( outOfRange( day, 1, dateLastDayOfMonth( date ) ) ) {\n\t\t\treturn null;\n\t\t}\n\t\tdate.setDate( day );\n\t} else if ( daysOfYear !== undefined ) {\n\t\tif ( outOfRange( daysOfYear, 1, dateIsLeapYear( date.getFullYear() ) ? 366 : 365 ) ) {\n\t\t\treturn null;\n\t\t}\n\t\tdate.setMonth( 0 );\n\t\tdate.setDate( daysOfYear );\n\t}\n\n\tif ( hour12 && amPm === \"pm\" ) {\n\t\tdate.setHours( date.getHours() + 12 );\n\t}\n\n\tif ( timezoneOffset !== undefined ) {\n\t\tdate.setMinutes( date.getMinutes() + timezoneOffset - date.getTimezoneOffset() );\n\t}\n\n\t// Truncate date at the most precise unit defined. Eg.\n\t// If value is \"12/31\", and pattern is \"MM/dd\":\n\t// => new Date( , 12, 31, 0, 0, 0, 0 );\n\ttruncateAt = Math.max.apply( null, truncateAt );\n\tdate = dateStartOf( date, units[ truncateAt ] );\n\n\t// Get date back from globalize date.\n\tif ( date instanceof ZonedDateTime ) {\n\t\tdate = date.toDate();\n\t}\n\n\treturn date;\n};\n\n\n/* eslint-disable no-unused-expressions */\n\n\n\n/**\n * tokenizer( value, numberParser, properties )\n *\n * @value [String] string date.\n *\n * @numberParser [Function]\n *\n * @properties [Object] output returned by date/tokenizer-properties.\n *\n * Returns an Array of tokens, eg. value \"5 o'clock PM\", pattern \"h 'o''clock' a\":\n * [{\n * type: \"h\",\n * lexeme: \"5\"\n * }, {\n * type: \"literal\",\n * lexeme: \" \"\n * }, {\n * type: \"literal\",\n * lexeme: \"o'clock\"\n * }, {\n * type: \"literal\",\n * lexeme: \" \"\n * }, {\n * type: \"a\",\n * lexeme: \"PM\",\n * value: \"pm\"\n * }]\n *\n * OBS: lexeme's are always String and may return invalid ranges depending of the token type.\n * Eg. \"99\" for month number.\n *\n * Return an empty Array when not successfully parsed.\n */\nvar dateTokenizer = function( value, numberParser, properties ) {\n\tvar digitsRe, valid,\n\t\ttokens = [],\n\t\twidths = [ \"abbreviated\", \"wide\", \"narrow\" ];\n\n\tdigitsRe = properties.digitsRe;\n\tvalue = looseMatching( value );\n\n\tvalid = properties.pattern.match( datePatternRe ).every(function( current ) {\n\t\tvar aux, chr, length, numeric, tokenRe,\n\t\t\ttoken = {};\n\n\t\tfunction hourFormatParse( tokenRe, numberParser ) {\n\t\t\tvar aux, isPositive,\n\t\t\t\tmatch = value.match( tokenRe );\n\t\t\tnumberParser = numberParser || function( value ) {\n\t\t\t\treturn +value;\n\t\t\t};\n\n\t\t\tif ( !match ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tisPositive = match[ 1 ];\n\n\t\t\t// hourFormat containing H only, e.g., `+H;-H`\n\t\t\tif ( match.length < 6 ) {\n\t\t\t\taux = isPositive ? 1 : 3;\n\t\t\t\ttoken.value = numberParser( match[ aux ] ) * 60;\n\n\t\t\t// hourFormat containing H and m, e.g., `+HHmm;-HHmm`\n\t\t\t} else if ( match.length < 10 ) {\n\t\t\t\taux = isPositive ? [ 1, 3 ] : [ 5, 7 ];\n\t\t\t\ttoken.value = numberParser( match[ aux[ 0 ] ] ) * 60 +\n\t\t\t\t\tnumberParser( match[ aux[ 1 ] ] );\n\n\t\t\t// hourFormat containing H, m, and s e.g., `+HHmmss;-HHmmss`\n\t\t\t} else {\n\t\t\t\taux = isPositive ? [ 1, 3, 5 ] : [ 7, 9, 11 ];\n\t\t\t\ttoken.value = numberParser( match[ aux[ 0 ] ] ) * 60 +\n\t\t\t\t\tnumberParser( match[ aux[ 1 ] ] ) +\n\t\t\t\t\tnumberParser( match[ aux[ 2 ] ] ) / 60;\n\t\t\t}\n\n\t\t\tif ( isPositive ) {\n\t\t\t\ttoken.value *= -1;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\n\t\tfunction oneDigitIfLengthOne() {\n\t\t\tif ( length === 1 ) {\n\n\t\t\t\t// Unicode equivalent to /\\d/\n\t\t\t\tnumeric = true;\n\t\t\t\treturn tokenRe = digitsRe;\n\t\t\t}\n\t\t}\n\n\t\tfunction oneOrTwoDigitsIfLengthOne() {\n\t\t\tif ( length === 1 ) {\n\n\t\t\t\t// Unicode equivalent to /\\d\\d?/\n\t\t\t\tnumeric = true;\n\t\t\t\treturn tokenRe = new RegExp( \"^(\" + digitsRe.source + \"){1,2}\" );\n\t\t\t}\n\t\t}\n\n\t\tfunction oneOrTwoDigitsIfLengthOneOrTwo() {\n\t\t\tif ( length === 1 || length === 2 ) {\n\n\t\t\t\t// Unicode equivalent to /\\d\\d?/\n\t\t\t\tnumeric = true;\n\t\t\t\treturn tokenRe = new RegExp( \"^(\" + digitsRe.source + \"){1,2}\" );\n\t\t\t}\n\t\t}\n\n\t\tfunction twoDigitsIfLengthTwo() {\n\t\t\tif ( length === 2 ) {\n\n\t\t\t\t// Unicode equivalent to /\\d\\d/\n\t\t\t\tnumeric = true;\n\t\t\t\treturn tokenRe = new RegExp( \"^(\" + digitsRe.source + \"){2}\" );\n\t\t\t}\n\t\t}\n\n\t\t// Brute-force test every locale entry in an attempt to match the given value.\n\t\t// Return the first found one (and set token accordingly), or null.\n\t\tfunction lookup( path ) {\n\t\t\tvar array = properties[ path.join( \"/\" ) ];\n\n\t\t\tif ( !array ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// array of pairs [key, value] sorted by desc value length.\n\t\t\tarray.some(function( item ) {\n\t\t\t\tvar valueRe = item[ 1 ];\n\t\t\t\tif ( valueRe.test( value ) ) {\n\t\t\t\t\ttoken.value = item[ 0 ];\n\t\t\t\t\ttokenRe = item[ 1 ];\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn null;\n\t\t}\n\n\t\ttoken.type = current;\n\t\tchr = current.charAt( 0 );\n\t\tlength = current.length;\n\n\t\tif ( chr === \"Z\" ) {\n\n\t\t\t// Z..ZZZ: same as \"xxxx\".\n\t\t\tif ( length < 4 ) {\n\t\t\t\tchr = \"x\";\n\t\t\t\tlength = 4;\n\n\t\t\t// ZZZZ: same as \"OOOO\".\n\t\t\t} else if ( length < 5 ) {\n\t\t\t\tchr = \"O\";\n\t\t\t\tlength = 4;\n\n\t\t\t// ZZZZZ: same as \"XXXXX\"\n\t\t\t} else {\n\t\t\t\tchr = \"X\";\n\t\t\t\tlength = 5;\n\t\t\t}\n\t\t}\n\n\t\tif ( chr === \"z\" ) {\n\t\t\tif ( properties.standardOrDaylightTzName ) {\n\t\t\t\ttoken.value = null;\n\t\t\t\ttokenRe = properties.standardOrDaylightTzName;\n\t\t\t}\n\t\t}\n\n\t\t// v...vvv: \"{shortRegion}\", eg. \"PT\".\n\t\t// vvvv: \"{regionName} {Time}\" or \"{regionName} {Time}\",\n\t\t// e.g., \"Pacific Time\"\n\t\t// http://unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns\n\t\tif ( chr === \"v\" ) {\n\t\t\tif ( properties.genericTzName ) {\n\t\t\t\ttoken.value = null;\n\t\t\t\ttokenRe = properties.genericTzName;\n\n\t\t\t// Fall back to \"V\" format.\n\t\t\t} else {\n\t\t\t\tchr = \"V\";\n\t\t\t\tlength = 4;\n\t\t\t}\n\t\t}\n\n\t\tif ( chr === \"V\" && properties.timeZoneName ) {\n\t\t\ttoken.value = length === 2 ? properties.timeZoneName : null;\n\t\t\ttokenRe = properties.timeZoneNameRe;\n\t\t}\n\n\t\tswitch ( chr ) {\n\n\t\t\t// Era\n\t\t\tcase \"G\":\n\t\t\t\tlookup([\n\t\t\t\t\t\"gregorian/eras\",\n\t\t\t\t\tlength <= 3 ? \"eraAbbr\" : ( length === 4 ? \"eraNames\" : \"eraNarrow\" )\n\t\t\t\t]);\n\t\t\t\tbreak;\n\n\t\t\t// Year\n\t\t\tcase \"y\":\n\t\t\tcase \"Y\":\n\t\t\t\tnumeric = true;\n\n\t\t\t\t// number l=1:+, l=2:{2}, l=3:{3,}, l=4:{4,}, ...\n\t\t\t\tif ( length === 1 ) {\n\n\t\t\t\t\t// Unicode equivalent to /\\d+/.\n\t\t\t\t\ttokenRe = new RegExp( \"^(\" + digitsRe.source + \")+\" );\n\t\t\t\t} else if ( length === 2 ) {\n\n\t\t\t\t\t// Lenient parsing: there's no year pattern to indicate non-zero-padded 2-digits\n\t\t\t\t\t// year, so parser accepts both zero-padded and non-zero-padded for `yy`.\n\t\t\t\t\t//\n\t\t\t\t\t// Unicode equivalent to /\\d\\d?/\n\t\t\t\t\ttokenRe = new RegExp( \"^(\" + digitsRe.source + \"){1,2}\" );\n\t\t\t\t} else {\n\n\t\t\t\t\t// Unicode equivalent to /\\d{length,}/\n\t\t\t\t\ttokenRe = new RegExp( \"^(\" + digitsRe.source + \"){\" + length + \",}\" );\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\t// Quarter\n\t\t\tcase \"Q\":\n\t\t\tcase \"q\":\n\n\t\t\t\t// number l=1:{1}, l=2:{2}.\n\t\t\t\t// lookup l=3...\n\t\t\t\toneDigitIfLengthOne() || twoDigitsIfLengthTwo() ||\n\t\t\t\t\tlookup([\n\t\t\t\t\t\t\"gregorian/quarters\",\n\t\t\t\t\t\tchr === \"Q\" ? \"format\" : \"stand-alone\",\n\t\t\t\t\t\twidths[ length - 3 ]\n\t\t\t\t\t]);\n\t\t\t\tbreak;\n\n\t\t\t// Month\n\t\t\tcase \"M\":\n\t\t\tcase \"L\":\n\n\t\t\t\t// number l=1:{1,2}, l=2:{2}.\n\t\t\t\t// lookup l=3...\n\t\t\t\t//\n\t\t\t\t// Lenient parsing: skeleton \"yMd\" (i.e., one M) may include MM for the pattern,\n\t\t\t\t// therefore parser accepts both zero-padded and non-zero-padded for M and MM.\n\t\t\t\t// Similar for L.\n\t\t\t\toneOrTwoDigitsIfLengthOneOrTwo() || lookup([\n\t\t\t\t\t\"gregorian/months\",\n\t\t\t\t\tchr === \"M\" ? \"format\" : \"stand-alone\",\n\t\t\t\t\twidths[ length - 3 ]\n\t\t\t\t]);\n\t\t\t\tbreak;\n\n\t\t\t// Day\n\t\t\tcase \"D\":\n\n\t\t\t\t// number {l,3}.\n\t\t\t\tif ( length <= 3 ) {\n\n\t\t\t\t\t// Equivalent to /\\d{length,3}/\n\t\t\t\t\tnumeric = true;\n\t\t\t\t\ttokenRe = new RegExp( \"^(\" + digitsRe.source + \"){\" + length + \",3}\" );\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"W\":\n\t\t\tcase \"F\":\n\n\t\t\t\t// number l=1:{1}.\n\t\t\t\toneDigitIfLengthOne();\n\t\t\t\tbreak;\n\n\t\t\t// Week day\n\t\t\tcase \"e\":\n\t\t\tcase \"c\":\n\n\t\t\t\t// number l=1:{1}, l=2:{2}.\n\t\t\t\t// lookup for length >=3.\n\t\t\t\tif ( length <= 2 ) {\n\t\t\t\t\toneDigitIfLengthOne() || twoDigitsIfLengthTwo();\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t/* falls through */\n\t\t\tcase \"E\":\n\t\t\t\tif ( length === 6 ) {\n\n\t\t\t\t\t// Note: if short day names are not explicitly specified, abbreviated day\n\t\t\t\t\t// names are used instead http://www.unicode.org/reports/tr35/tr35-dates.html#months_days_quarters_eras\n\t\t\t\t\tlookup([\n\t\t\t\t\t\t\"gregorian/days\",\n\t\t\t\t\t\t[ chr === \"c\" ? \"stand-alone\" : \"format\" ],\n\t\t\t\t\t\t\"short\"\n\t\t\t\t\t]) || lookup([\n\t\t\t\t\t\t\"gregorian/days\",\n\t\t\t\t\t\t[ chr === \"c\" ? \"stand-alone\" : \"format\" ],\n\t\t\t\t\t\t\"abbreviated\"\n\t\t\t\t\t]);\n\t\t\t\t} else {\n\t\t\t\t\tlookup([\n\t\t\t\t\t\t\"gregorian/days\",\n\t\t\t\t\t\t[ chr === \"c\" ? \"stand-alone\" : \"format\" ],\n\t\t\t\t\t\twidths[ length < 3 ? 0 : length - 3 ]\n\t\t\t\t\t]);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\t// Period (AM or PM)\n\t\t\tcase \"a\":\n\t\t\t\tlookup([\n\t\t\t\t\t\"gregorian/dayPeriods/format/wide\"\n\t\t\t\t]);\n\t\t\t\tbreak;\n\n\t\t\t// Week\n\t\t\tcase \"w\":\n\n\t\t\t\t// number l1:{1,2}, l2:{2}.\n\t\t\t\toneOrTwoDigitsIfLengthOne() || twoDigitsIfLengthTwo();\n\t\t\t\tbreak;\n\n\t\t\t// Day, Hour, Minute, or Second\n\t\t\tcase \"d\":\n\t\t\tcase \"h\":\n\t\t\tcase \"H\":\n\t\t\tcase \"K\":\n\t\t\tcase \"k\":\n\t\t\tcase \"j\":\n\t\t\tcase \"m\":\n\t\t\tcase \"s\":\n\n\t\t\t\t// number l1:{1,2}, l2:{2}.\n\t\t\t\t//\n\t\t\t\t// Lenient parsing:\n\t\t\t\t// - skeleton \"hms\" (i.e., one m) always includes mm for the pattern, i.e., it's\n\t\t\t\t// impossible to use a different skeleton to parse non-zero-padded minutes,\n\t\t\t\t// therefore parser accepts both zero-padded and non-zero-padded for m. Similar\n\t\t\t\t// for seconds s.\n\t\t\t\t// - skeleton \"hms\" (i.e., one h) may include h or hh for the pattern, i.e., it's\n\t\t\t\t// impossible to use a different skeleton to parser non-zero-padded hours for some\n\t\t\t\t// locales, therefore parser accepts both zero-padded and non-zero-padded for h.\n\t\t\t\t// Similar for d (in skeleton yMd).\n\t\t\t\toneOrTwoDigitsIfLengthOneOrTwo();\n\t\t\t\tbreak;\n\n\t\t\tcase \"S\":\n\n\t\t\t\t// number {l}.\n\n\t\t\t\t// Unicode equivalent to /\\d{length}/\n\t\t\t\tnumeric = true;\n\t\t\t\ttokenRe = new RegExp( \"^(\" + digitsRe.source + \"){\" + length + \"}\" );\n\t\t\t\tbreak;\n\n\t\t\tcase \"A\":\n\n\t\t\t\t// number {l+5}.\n\n\t\t\t\t// Unicode equivalent to /\\d{length+5}/\n\t\t\t\tnumeric = true;\n\t\t\t\ttokenRe = new RegExp( \"^(\" + digitsRe.source + \"){\" + ( length + 5 ) + \"}\" );\n\t\t\t\tbreak;\n\n\t\t\t// Zone\n\t\t\tcase \"v\":\n\t\t\tcase \"V\":\n\t\t\tcase \"z\":\n\t\t\t\tif ( tokenRe && tokenRe.test( value ) ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif ( chr === \"V\" && length === 2 ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t/* falls through */\n\t\t\tcase \"O\":\n\n\t\t\t\t// O: \"{gmtFormat}+H;{gmtFormat}-H\" or \"{gmtZeroFormat}\", eg. \"GMT-8\" or \"GMT\".\n\t\t\t\t// OOOO: \"{gmtFormat}{hourFormat}\" or \"{gmtZeroFormat}\", eg. \"GMT-08:00\" or \"GMT\".\n\t\t\t\tif ( value === properties[ \"timeZoneNames/gmtZeroFormat\" ] ) {\n\t\t\t\t\ttoken.value = 0;\n\t\t\t\t\ttokenRe = properties[ \"timeZoneNames/gmtZeroFormatRe\" ];\n\t\t\t\t} else {\n\t\t\t\t\taux = properties[ \"timeZoneNames/hourFormat\" ].some(function( hourFormatRe ) {\n\t\t\t\t\t\tif ( hourFormatParse( hourFormatRe, numberParser ) ) {\n\t\t\t\t\t\t\ttokenRe = hourFormatRe;\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tif ( !aux ) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"X\":\n\n\t\t\t\t// Same as x*, except it uses \"Z\" for zero offset.\n\t\t\t\tif ( value === \"Z\" ) {\n\t\t\t\t\ttoken.value = 0;\n\t\t\t\t\ttokenRe = /^Z/;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t/* falls through */\n\t\t\tcase \"x\":\n\n\t\t\t\t// x: hourFormat(\"+HH[mm];-HH[mm]\")\n\t\t\t\t// xx: hourFormat(\"+HHmm;-HHmm\")\n\t\t\t\t// xxx: hourFormat(\"+HH:mm;-HH:mm\")\n\t\t\t\t// xxxx: hourFormat(\"+HHmm[ss];-HHmm[ss]\")\n\t\t\t\t// xxxxx: hourFormat(\"+HH:mm[:ss];-HH:mm[:ss]\")\n\t\t\t\taux = properties.x.some(function( hourFormatRe ) {\n\t\t\t\t\tif ( hourFormatParse( hourFormatRe ) ) {\n\t\t\t\t\t\ttokenRe = hourFormatRe;\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif ( !aux ) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"'\":\n\t\t\t\ttoken.type = \"literal\";\n\t\t\t\ttokenRe = new RegExp( \"^\" + regexpEscape( removeLiteralQuotes( current ) ) );\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\ttoken.type = \"literal\";\n\t\t\t\ttokenRe = new RegExp( \"^\" + regexpEscape( current ) );\n\t\t}\n\n\t\tif ( !tokenRe ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Get lexeme and consume it.\n\t\tvalue = value.replace( tokenRe, function( lexeme ) {\n\t\t\ttoken.lexeme = lexeme;\n\t\t\tif ( numeric ) {\n\t\t\t\ttoken.value = numberParser( lexeme );\n\t\t\t}\n\t\t\treturn \"\";\n\t\t});\n\n\t\tif ( !token.lexeme ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif ( numeric && isNaN( token.value ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttokens.push( token );\n\t\treturn true;\n\t});\n\n\tif ( value !== \"\" ) {\n\t\tvalid = false;\n\t}\n\n\treturn valid ? tokens : [];\n};\n\n\n\n\nvar dateParserFn = function( numberParser, parseProperties, tokenizerProperties ) {\n\treturn function dateParser( value ) {\n\t\tvar tokens;\n\n\t\tvalidateParameterPresence( value, \"value\" );\n\t\tvalidateParameterTypeString( value, \"value\" );\n\n\t\ttokens = dateTokenizer( value, numberParser, tokenizerProperties );\n\t\treturn dateParse( value, tokens, parseProperties ) || null;\n\t};\n};\n\n\n\n\nvar objectFilter = function( object, testRe ) {\n\tvar key,\n\t\tcopy = {};\n\n\tfor ( key in object ) {\n\t\tif ( testRe.test( key ) ) {\n\t\t\tcopy[ key ] = object[ key ];\n\t\t}\n\t}\n\n\treturn copy;\n};\n\n\n\n\n/**\n * tokenizerProperties( pattern, cldr )\n *\n * @pattern [String] raw pattern.\n *\n * @cldr [Cldr instance].\n *\n * Return Object with data that will be used by tokenizer.\n */\nvar dateTokenizerProperties = function( pattern, cldr, timeZone ) {\n\tvar digitsReSource,\n\t\tproperties = {\n\t\t\tpattern: looseMatching( pattern )\n\t\t},\n\t\ttimeSeparator = numberSymbol( \"timeSeparator\", cldr ),\n\t\twidths = [ \"abbreviated\", \"wide\", \"narrow\" ];\n\n\tdigitsReSource = numberNumberingSystemDigitsMap( cldr );\n\tdigitsReSource = digitsReSource ? \"[\" + digitsReSource + \"]\" : \"\\\\d\";\n\tproperties.digitsRe = new RegExp( digitsReSource );\n\n\t// Transform:\n\t// - \"+H;-H\" -> /\\+(\\d\\d?)|-(\\d\\d?)/\n\t// - \"+HH;-HH\" -> /\\+(\\d\\d)|-(\\d\\d)/\n\t// - \"+HHmm;-HHmm\" -> /\\+(\\d\\d)(\\d\\d)|-(\\d\\d)(\\d\\d)/\n\t// - \"+HH:mm;-HH:mm\" -> /\\+(\\d\\d):(\\d\\d)|-(\\d\\d):(\\d\\d)/\n\t//\n\t// If gmtFormat is GMT{0}, the regexp must fill {0} in each side, e.g.:\n\t// - \"+H;-H\" -> /GMT\\+(\\d\\d?)|GMT-(\\d\\d?)/\n\tfunction hourFormatRe( hourFormat, gmtFormat, digitsReSource, timeSeparator ) {\n\t\tvar re;\n\n\t\tif ( !digitsReSource ) {\n\t\t\tdigitsReSource = \"\\\\d\";\n\t\t}\n\t\tif ( !gmtFormat ) {\n\t\t\tgmtFormat = \"{0}\";\n\t\t}\n\n\t\tre = hourFormat\n\t\t\t.replace( \"+\", \"\\\\+\" )\n\n\t\t\t// Unicode equivalent to (\\\\d\\\\d)\n\t\t\t.replace( /HH|mm|ss/g, \"((\" + digitsReSource + \"){2})\" )\n\n\t\t\t// Unicode equivalent to (\\\\d\\\\d?)\n\t\t\t.replace( /H|m/g, \"((\" + digitsReSource + \"){1,2})\" );\n\n\t\tif ( timeSeparator ) {\n\t\t\tre = re.replace( /:/g, timeSeparator );\n\t\t}\n\n\t\tre = re.split( \";\" ).map(function( part ) {\n\t\t\treturn gmtFormat.replace( \"{0}\", part );\n\t\t}).join( \"|\" );\n\n\t\treturn new RegExp( \"^\" + re );\n\t}\n\n\tfunction populateProperties( path, value ) {\n\n\t\t// Skip\n\t\tvar skipRe = /(timeZoneNames\\/zone|supplemental\\/metaZones|timeZoneNames\\/metazone|timeZoneNames\\/regionFormat|timeZoneNames\\/gmtFormat)/;\n\t\tif ( skipRe.test( path ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( !value ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// The `dates` and `calendars` trim's purpose is to reduce properties' key size only.\n\t\tpath = path.replace( /^.*\\/dates\\//, \"\" ).replace( /calendars\\//, \"\" );\n\n\t\t// Specific filter for \"gregorian/dayPeriods/format/wide\".\n\t\tif ( path === \"gregorian/dayPeriods/format/wide\" ) {\n\t\t\tvalue = objectFilter( value, /^am|^pm/ );\n\t\t}\n\n\t\t// Transform object into array of pairs [key, /value/], sort by desc value length.\n\t\tif ( isPlainObject( value ) ) {\n\t\t\tvalue = Object.keys( value ).map(function( key ) {\n\t\t\t\treturn [ key, new RegExp( \"^\" + regexpEscape( looseMatching( value[ key ] ) ) ) ];\n\t\t\t}).sort(function( a, b ) {\n\t\t\t\treturn b[ 1 ].source.length - a[ 1 ].source.length;\n\t\t\t});\n\n\t\t// If typeof value === \"string\".\n\t\t} else {\n\t\t\tvalue = looseMatching( value );\n\t\t}\n\t\tproperties[ path ] = value;\n\t}\n\n\tfunction regexpSourceSomeTerm( terms ) {\n\t\treturn \"(\" + terms.filter(function( item ) {\n\t\t\treturn item;\n\t\t}).reduce(function( memo, item ) {\n\t\t\treturn memo + \"|\" + item;\n\t\t}) + \")\";\n\t}\n\n\tcldr.on( \"get\", populateProperties );\n\n\tpattern.match( datePatternRe ).forEach(function( current ) {\n\t\tvar aux, chr, daylightTzName, gmtFormat, length, standardTzName;\n\n\t\tchr = current.charAt( 0 );\n\t\tlength = current.length;\n\n\t\tif ( chr === \"Z\" ) {\n\t\t\tif ( length < 5 ) {\n\t\t\t\tchr = \"O\";\n\t\t\t\tlength = 4;\n\t\t\t} else {\n\t\t\t\tchr = \"X\";\n\t\t\t\tlength = 5;\n\t\t\t}\n\t\t}\n\n\t\t// z...zzz: \"{shortRegion}\", eg. \"PST\" or \"PDT\".\n\t\t// zzzz: \"{regionName} {Standard Time}\" or \"{regionName} {Daylight Time}\",\n\t\t// e.g., \"Pacific Standard Time\" or \"Pacific Daylight Time\".\n\t\t// http://unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns\n\t\tif ( chr === \"z\" ) {\n\t\t\tstandardTzName = dateGetTimeZoneName( length, \"standard\", timeZone, cldr );\n\t\t\tdaylightTzName = dateGetTimeZoneName( length, \"daylight\", timeZone, cldr );\n\t\t\tif ( standardTzName ) {\n\t\t\t\tstandardTzName = regexpEscape( looseMatching( standardTzName ) );\n\t\t\t}\n\t\t\tif ( daylightTzName ) {\n\t\t\t\tdaylightTzName = regexpEscape( looseMatching( daylightTzName ) );\n\t\t\t}\n\t\t\tif ( standardTzName || daylightTzName ) {\n\t\t\t\tproperties.standardOrDaylightTzName = new RegExp(\n\t\t\t\t\t\"^\" + regexpSourceSomeTerm([ standardTzName, daylightTzName ])\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Fall through the \"O\" format in case one name is missing.\n\t\t\tif ( !standardTzName || !daylightTzName ) {\n\t\t\t\tchr = \"O\";\n\t\t\t\tif ( length < 4 ) {\n\t\t\t\t\tlength = 1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// v...vvv: \"{shortRegion}\", eg. \"PT\".\n\t\t// vvvv: \"{regionName} {Time}\" or \"{regionName} {Time}\",\n\t\t// e.g., \"Pacific Time\"\n\t\t// http://unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns\n\t\tif ( chr === \"v\" ) {\n\t\t\tif ( length !== 1 && length !== 4 ) {\n\t\t\t\tthrow createErrorUnsupportedFeature({\n\t\t\t\t\tfeature: \"timezone pattern `\" + pattern + \"`\"\n\t\t\t\t});\n\t\t\t}\n\t\t\tvar genericTzName = dateGetTimeZoneName( length, \"generic\", timeZone, cldr );\n\t\t\tif ( genericTzName ) {\n\t\t\t\tproperties.genericTzName = new RegExp(\n\t\t\t\t\t\"^\" + regexpEscape( looseMatching( genericTzName ) )\n\t\t\t\t);\n\t\t\t\tchr = \"O\";\n\n\t\t\t// Fall back to \"V\" format.\n\t\t\t} else {\n\t\t\t\tchr = \"V\";\n\t\t\t\tlength = 4;\n\t\t\t}\n\t\t}\n\n\t\tswitch ( chr ) {\n\n\t\t\t// Era\n\t\t\tcase \"G\":\n\t\t\t\tcldr.main([\n\t\t\t\t\t\"dates/calendars/gregorian/eras\",\n\t\t\t\t\tlength <= 3 ? \"eraAbbr\" : ( length === 4 ? \"eraNames\" : \"eraNarrow\" )\n\t\t\t\t]);\n\t\t\t\tbreak;\n\n\t\t\t// Year\n\t\t\tcase \"u\": // Extended year. Need to be implemented.\n\t\t\tcase \"U\": // Cyclic year name. Need to be implemented.\n\t\t\t\tthrow createErrorUnsupportedFeature({\n\t\t\t\t\tfeature: \"year pattern `\" + chr + \"`\"\n\t\t\t\t});\n\n\t\t\t// Quarter\n\t\t\tcase \"Q\":\n\t\t\tcase \"q\":\n\t\t\t\tif ( length > 2 ) {\n\t\t\t\t\tcldr.main([\n\t\t\t\t\t\t\"dates/calendars/gregorian/quarters\",\n\t\t\t\t\t\tchr === \"Q\" ? \"format\" : \"stand-alone\",\n\t\t\t\t\t\twidths[ length - 3 ]\n\t\t\t\t\t]);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\t// Month\n\t\t\tcase \"M\":\n\t\t\tcase \"L\":\n\n\t\t\t\t// number l=1:{1,2}, l=2:{2}.\n\t\t\t\t// lookup l=3...\n\t\t\t\tif ( length > 2 ) {\n\t\t\t\t\tcldr.main([\n\t\t\t\t\t\t\"dates/calendars/gregorian/months\",\n\t\t\t\t\t\tchr === \"M\" ? \"format\" : \"stand-alone\",\n\t\t\t\t\t\twidths[ length - 3 ]\n\t\t\t\t\t]);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\t// Day\n\t\t\tcase \"g\":\n\n\t\t\t\t// Modified Julian day. Need to be implemented.\n\t\t\t\tthrow createErrorUnsupportedFeature({\n\t\t\t\t\tfeature: \"Julian day pattern `g`\"\n\t\t\t\t});\n\n\t\t\t// Week day\n\t\t\tcase \"e\":\n\t\t\tcase \"c\":\n\n\t\t\t\t// lookup for length >=3.\n\t\t\t\tif ( length <= 2 ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t/* falls through */\n\t\t\tcase \"E\":\n\t\t\t\tif ( length === 6 ) {\n\n\t\t\t\t\t// Note: if short day names are not explicitly specified, abbreviated day\n\t\t\t\t\t// names are used instead http://www.unicode.org/reports/tr35/tr35-dates.html#months_days_quarters_eras\n\t\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\t\tcldr.main([\n\t\t\t\t\t\t\"dates/calendars/gregorian/days\",\n\t\t\t\t\t\t[ chr === \"c\" ? \"stand-alone\" : \"format\" ],\n\t\t\t\t\t\t\"short\"\n\t\t\t\t\t]) || cldr.main([\n\t\t\t\t\t\t\"dates/calendars/gregorian/days\",\n\t\t\t\t\t\t[ chr === \"c\" ? \"stand-alone\" : \"format\" ],\n\t\t\t\t\t\t\"abbreviated\"\n\t\t\t\t\t]);\n\t\t\t\t} else {\n\t\t\t\t\tcldr.main([\n\t\t\t\t\t\t\"dates/calendars/gregorian/days\",\n\t\t\t\t\t\t[ chr === \"c\" ? \"stand-alone\" : \"format\" ],\n\t\t\t\t\t\twidths[ length < 3 ? 0 : length - 3 ]\n\t\t\t\t\t]);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\t// Period (AM or PM)\n\t\t\tcase \"a\":\n\t\t\t\tcldr.main(\n\t\t\t\t\t\"dates/calendars/gregorian/dayPeriods/format/wide\"\n\t\t\t\t);\n\t\t\t\tbreak;\n\n\t\t\t// Zone\n\t\t\tcase \"V\":\n\n\t\t\t\tif ( length === 1 ) {\n\t\t\t\t\tthrow createErrorUnsupportedFeature({\n\t\t\t\t\t\tfeature: \"timezone pattern `\" + pattern + \"`\"\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif ( timeZone ) {\n\t\t\t\t\tif ( length === 2 ) {\n\n\t\t\t\t\t\t// Skip looseMatching processing since timeZone is a canonical posix value.\n\t\t\t\t\t\tproperties.timeZoneName = timeZone;\n\t\t\t\t\t\tproperties.timeZoneNameRe = new RegExp( \"^\" + regexpEscape( timeZone ) );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar timeZoneName,\n\t\t\t\t\t\texemplarCity = cldr.main([\n\t\t\t\t\t\t\t\"dates/timeZoneNames/zone\", timeZone, \"exemplarCity\"\n\t\t\t\t\t\t]);\n\n\t\t\t\t\tif ( length === 3 ) {\n\t\t\t\t\t\tif ( !exemplarCity ) {\n\t\t\t\t\t\t\texemplarCity = cldr.main([\n\t\t\t\t\t\t\t\t\"dates/timeZoneNames/zone/Etc/Unknown/exemplarCity\"\n\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttimeZoneName = exemplarCity;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( exemplarCity && length === 4 ) {\n\t\t\t\t\t\ttimeZoneName = formatMessage(\n\t\t\t\t\t\t\tcldr.main(\n\t\t\t\t\t\t\t\t\"dates/timeZoneNames/regionFormat\"\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t[ exemplarCity ]\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( timeZoneName ) {\n\t\t\t\t\t\ttimeZoneName = looseMatching( timeZoneName );\n\t\t\t\t\t\tproperties.timeZoneName = timeZoneName;\n\t\t\t\t\t\tproperties.timeZoneNameRe = new RegExp(\n\t\t\t\t\t\t\t\"^\" + regexpEscape( timeZoneName )\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( current === \"v\" ) {\n\t\t\t\t\tlength = 1;\n\t\t\t\t}\n\n\t\t\t/* falls through */\n\t\t\tcase \"z\":\n\t\t\tcase \"O\":\n\t\t\t\tgmtFormat = cldr.main( \"dates/timeZoneNames/gmtFormat\" );\n\t\t\t\tcldr.main( \"dates/timeZoneNames/gmtZeroFormat\" );\n\t\t\t\tcldr.main( \"dates/timeZoneNames/hourFormat\" );\n\t\t\t\tproperties[ \"timeZoneNames/gmtZeroFormatRe\" ] =\n\t\t\t\t\tnew RegExp( \"^\" + regexpEscape( properties[ \"timeZoneNames/gmtZeroFormat\" ] ) );\n\t\t\t\taux = properties[ \"timeZoneNames/hourFormat\" ];\n\t\t\t\tproperties[ \"timeZoneNames/hourFormat\" ] = (\n\t\t\t\t\tlength < 4 ?\n\t\t\t\t\t\t[ dateTimezoneHourFormatHm( aux, \"H\" ), dateTimezoneHourFormatH( aux ) ] :\n\t\t\t\t\t\t[ dateTimezoneHourFormatHm( aux, \"HH\" ) ]\n\t\t\t\t).map(function( hourFormat ) {\n\t\t\t\t\treturn hourFormatRe(\n\t\t\t\t\t\thourFormat,\n\t\t\t\t\t\tgmtFormat,\n\t\t\t\t\t\tdigitsReSource,\n\t\t\t\t\t\ttimeSeparator\n\t\t\t\t\t);\n\t\t\t\t});\n\n\t\t\t/* falls through */\n\t\t\tcase \"X\":\n\t\t\tcase \"x\":\n\n\t\t\t\t// x: hourFormat(\"+HH[mm];-HH[mm]\")\n\t\t\t\t// xx: hourFormat(\"+HHmm;-HHmm\")\n\t\t\t\t// xxx: hourFormat(\"+HH:mm;-HH:mm\")\n\t\t\t\t// xxxx: hourFormat(\"+HHmm[ss];-HHmm[ss]\")\n\t\t\t\t// xxxxx: hourFormat(\"+HH:mm[:ss];-HH:mm[:ss]\")\n\t\t\t\tproperties.x = [\n\t\t\t\t\t[ \"+HHmm;-HHmm\", \"+HH;-HH\" ],\n\t\t\t\t\t[ \"+HHmm;-HHmm\" ],\n\t\t\t\t\t[ \"+HH:mm;-HH:mm\" ],\n\t\t\t\t\t[ \"+HHmmss;-HHmmss\", \"+HHmm;-HHmm\" ],\n\t\t\t\t\t[ \"+HH:mm:ss;-HH:mm:ss\", \"+HH:mm;-HH:mm\" ]\n\t\t\t\t][ length - 1 ].map(function( hourFormat ) {\n\t\t\t\t\treturn hourFormatRe( hourFormat );\n\t\t\t\t});\n\t\t}\n\t});\n\n\tcldr.off( \"get\", populateProperties );\n\n\treturn properties;\n};\n\n\n\n\n/**\n * dayOfWeek( date, firstDay )\n *\n * @date\n *\n * @firstDay the result of `dateFirstDayOfWeek( cldr )`\n *\n * Return the day of the week normalized by the territory's firstDay [0-6].\n * Eg for \"mon\":\n * - return 0 if territory is GB, or BR, or DE, or FR (week starts on \"mon\");\n * - return 1 if territory is US (week starts on \"sun\");\n * - return 2 if territory is EG (week starts on \"sat\");\n */\nvar dateDayOfWeek = function( date, firstDay ) {\n\treturn ( date.getDay() - firstDay + 7 ) % 7;\n};\n\n\n\n\n/**\n * distanceInDays( from, to )\n *\n * Return the distance in days between from and to Dates.\n */\nvar dateDistanceInDays = function( from, to ) {\n\tvar inDays = 864e5;\n\treturn ( to.getTime() - from.getTime() ) / inDays;\n};\n\n\n\n\n/**\n * dayOfYear\n *\n * Return the distance in days of the date to the begin of the year [0-d].\n */\nvar dateDayOfYear = function( date ) {\n\treturn Math.floor( dateDistanceInDays( dateStartOf( date, \"year\" ), date ) );\n};\n\n\n\n\n// Invert key and values, e.g., {\"year\": \"yY\"} ==> {\"y\": \"year\", \"Y\": \"year\"}\nvar dateFieldsMap = objectInvert({\n\t\"era\": \"G\",\n\t\"year\": \"yY\",\n\t\"quarter\": \"qQ\",\n\t\"month\": \"ML\",\n\t\"week\": \"wW\",\n\t\"day\": \"dDF\",\n\t\"weekday\": \"ecE\",\n\t\"dayperiod\": \"a\",\n\t\"hour\": \"hHkK\",\n\t\"minute\": \"m\",\n\t\"second\": \"sSA\",\n\t\"zone\": \"zvVOxX\"\n}, function( object, key, value ) {\n\tvalue.split( \"\" ).forEach(function( symbol ) {\n\t\tobject[ symbol ] = key;\n\t});\n\treturn object;\n});\n\n\n\n\n/**\n * millisecondsInDay\n */\nvar dateMillisecondsInDay = function( date ) {\n\n\t// TODO Handle daylight savings discontinuities\n\treturn date - dateStartOf( date, \"day\" );\n};\n\n\n\n\n/**\n * hourFormat( date, format, timeSeparator, formatNumber )\n *\n * Return date's timezone offset according to the format passed.\n * Eg for format when timezone offset is 180:\n * - \"+H;-H\": -3\n * - \"+HHmm;-HHmm\": -0300\n * - \"+HH:mm;-HH:mm\": -03:00\n * - \"+HH:mm:ss;-HH:mm:ss\": -03:00:00\n */\nvar dateTimezoneHourFormat = function( date, format, timeSeparator, formatNumber ) {\n\tvar absOffset,\n\t\toffset = date.getTimezoneOffset();\n\n\tabsOffset = Math.abs( offset );\n\tformatNumber = formatNumber || {\n\t\t1: function( value ) {\n\t\t\treturn stringPad( value, 1 );\n\t\t},\n\t\t2: function( value ) {\n\t\t\treturn stringPad( value, 2 );\n\t\t}\n\t};\n\n\treturn format\n\n\t\t// Pick the correct sign side (+ or -).\n\t\t.split( \";\" )[ offset > 0 ? 1 : 0 ]\n\n\t\t// Localize time separator\n\t\t.replace( \":\", timeSeparator )\n\n\t\t// Update hours offset.\n\t\t.replace( /HH?/, function( match ) {\n\t\t\treturn formatNumber[ match.length ]( Math.floor( absOffset / 60 ) );\n\t\t})\n\n\t\t// Update minutes offset and return.\n\t\t.replace( /mm/, function() {\n\t\t\treturn formatNumber[ 2 ]( Math.floor( absOffset % 60 ) );\n\t\t})\n\n\t\t// Update minutes offset and return.\n\t\t.replace( /ss/, function() {\n\t\t\treturn formatNumber[ 2 ]( Math.floor( absOffset % 1 * 60 ) );\n\t\t});\n};\n\n\n\n\n/**\n * format( date, properties )\n *\n * @date [Date instance].\n *\n * @properties\n *\n * TODO Support other calendar types.\n *\n * Disclosure: this function borrows excerpts of dojo/date/locale.\n */\nvar dateFormat = function( date, numberFormatters, properties ) {\n\tvar parts = [];\n\n\tvar timeSeparator = properties.timeSeparator;\n\n\t// create globalize date with given timezone data\n\tif ( properties.timeZoneData ) {\n\t\tdate = new ZonedDateTime( date, properties.timeZoneData() );\n\t}\n\n\tproperties.pattern.replace( datePatternRe, function( current ) {\n\t\tvar aux, dateField, type, value,\n\t\t\tchr = current.charAt( 0 ),\n\t\t\tlength = current.length;\n\n\t\tif ( chr === \"j\" ) {\n\n\t\t\t// Locale preferred hHKk.\n\t\t\t// http://www.unicode.org/reports/tr35/tr35-dates.html#Time_Data\n\t\t\tchr = properties.preferredTime;\n\t\t}\n\n\t\tif ( chr === \"Z\" ) {\n\n\t\t\t// Z..ZZZ: same as \"xxxx\".\n\t\t\tif ( length < 4 ) {\n\t\t\t\tchr = \"x\";\n\t\t\t\tlength = 4;\n\n\t\t\t// ZZZZ: same as \"OOOO\".\n\t\t\t} else if ( length < 5 ) {\n\t\t\t\tchr = \"O\";\n\t\t\t\tlength = 4;\n\n\t\t\t// ZZZZZ: same as \"XXXXX\"\n\t\t\t} else {\n\t\t\t\tchr = \"X\";\n\t\t\t\tlength = 5;\n\t\t\t}\n\t\t}\n\n\t\t// z...zzz: \"{shortRegion}\", e.g., \"PST\" or \"PDT\".\n\t\t// zzzz: \"{regionName} {Standard Time}\" or \"{regionName} {Daylight Time}\",\n\t\t// e.g., \"Pacific Standard Time\" or \"Pacific Daylight Time\".\n\t\tif ( chr === \"z\" ) {\n\t\t\tif ( date.isDST ) {\n\t\t\t\tvalue = date.isDST() ? properties.daylightTzName : properties.standardTzName;\n\t\t\t}\n\n\t\t\t// Fall back to \"O\" format.\n\t\t\tif ( !value ) {\n\t\t\t\tchr = \"O\";\n\t\t\t\tif ( length < 4 ) {\n\t\t\t\t\tlength = 1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tswitch ( chr ) {\n\n\t\t\t// Era\n\t\t\tcase \"G\":\n\t\t\t\tvalue = properties.eras[ date.getFullYear() < 0 ? 0 : 1 ];\n\t\t\t\tbreak;\n\n\t\t\t// Year\n\t\t\tcase \"y\":\n\n\t\t\t\t// Plain year.\n\t\t\t\t// The length specifies the padding, but for two letters it also specifies the\n\t\t\t\t// maximum length.\n\t\t\t\tvalue = date.getFullYear();\n\t\t\t\tif ( length === 2 ) {\n\t\t\t\t\tvalue = String( value );\n\t\t\t\t\tvalue = +value.substr( value.length - 2 );\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"Y\":\n\n\t\t\t\t// Year in \"Week of Year\"\n\t\t\t\t// The length specifies the padding, but for two letters it also specifies the\n\t\t\t\t// maximum length.\n\t\t\t\t// yearInWeekofYear = date + DaysInAWeek - (dayOfWeek - firstDay) - minDays\n\t\t\t\tvalue = new Date( date.getTime() );\n\t\t\t\tvalue.setDate(\n\t\t\t\t\tvalue.getDate() + 7 -\n\t\t\t\t\tdateDayOfWeek( date, properties.firstDay ) -\n\t\t\t\t\tproperties.firstDay -\n\t\t\t\t\tproperties.minDays\n\t\t\t\t);\n\t\t\t\tvalue = value.getFullYear();\n\t\t\t\tif ( length === 2 ) {\n\t\t\t\t\tvalue = String( value );\n\t\t\t\t\tvalue = +value.substr( value.length - 2 );\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\t// Quarter\n\t\t\tcase \"Q\":\n\t\t\tcase \"q\":\n\t\t\t\tvalue = Math.ceil( ( date.getMonth() + 1 ) / 3 );\n\t\t\t\tif ( length > 2 ) {\n\t\t\t\t\tvalue = properties.quarters[ chr ][ length ][ value ];\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\t// Month\n\t\t\tcase \"M\":\n\t\t\tcase \"L\":\n\t\t\t\tvalue = date.getMonth() + 1;\n\t\t\t\tif ( length > 2 ) {\n\t\t\t\t\tvalue = properties.months[ chr ][ length ][ value ];\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\t// Week\n\t\t\tcase \"w\":\n\n\t\t\t\t// Week of Year.\n\t\t\t\t// woy = ceil( ( doy + dow of 1/1 ) / 7 ) - minDaysStuff ? 1 : 0.\n\t\t\t\t// TODO should pad on ww? Not documented, but I guess so.\n\t\t\t\tvalue = dateDayOfWeek( dateStartOf( date, \"year\" ), properties.firstDay );\n\t\t\t\tvalue = Math.ceil( ( dateDayOfYear( date ) + value ) / 7 ) -\n\t\t\t\t\t( 7 - value >= properties.minDays ? 0 : 1 );\n\t\t\t\tbreak;\n\n\t\t\tcase \"W\":\n\n\t\t\t\t// Week of Month.\n\t\t\t\t// wom = ceil( ( dom + dow of `1/month` ) / 7 ) - minDaysStuff ? 1 : 0.\n\t\t\t\tvalue = dateDayOfWeek( dateStartOf( date, \"month\" ), properties.firstDay );\n\t\t\t\tvalue = Math.ceil( ( date.getDate() + value ) / 7 ) -\n\t\t\t\t\t( 7 - value >= properties.minDays ? 0 : 1 );\n\t\t\t\tbreak;\n\n\t\t\t// Day\n\t\t\tcase \"d\":\n\t\t\t\tvalue = date.getDate();\n\t\t\t\tbreak;\n\n\t\t\tcase \"D\":\n\t\t\t\tvalue = dateDayOfYear( date ) + 1;\n\t\t\t\tbreak;\n\n\t\t\tcase \"F\":\n\n\t\t\t\t// Day of Week in month. eg. 2nd Wed in July.\n\t\t\t\tvalue = Math.floor( date.getDate() / 7 ) + 1;\n\t\t\t\tbreak;\n\n\t\t\t// Week day\n\t\t\tcase \"e\":\n\t\t\tcase \"c\":\n\t\t\t\tif ( length <= 2 ) {\n\n\t\t\t\t\t// Range is [1-7] (deduced by example provided on documentation)\n\t\t\t\t\t// TODO Should pad with zeros (not specified in the docs)?\n\t\t\t\t\tvalue = dateDayOfWeek( date, properties.firstDay ) + 1;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t/* falls through */\n\t\t\tcase \"E\":\n\t\t\t\tvalue = dateWeekDays[ date.getDay() ];\n\t\t\t\tvalue = properties.days[ chr ][ length ][ value ];\n\t\t\t\tbreak;\n\n\t\t\t// Period (AM or PM)\n\t\t\tcase \"a\":\n\t\t\t\tvalue = properties.dayPeriods[ date.getHours() < 12 ? \"am\" : \"pm\" ];\n\t\t\t\tbreak;\n\n\t\t\t// Hour\n\t\t\tcase \"h\": // 1-12\n\t\t\t\tvalue = ( date.getHours() % 12 ) || 12;\n\t\t\t\tbreak;\n\n\t\t\tcase \"H\": // 0-23\n\t\t\t\tvalue = date.getHours();\n\t\t\t\tbreak;\n\n\t\t\tcase \"K\": // 0-11\n\t\t\t\tvalue = date.getHours() % 12;\n\t\t\t\tbreak;\n\n\t\t\tcase \"k\": // 1-24\n\t\t\t\tvalue = date.getHours() || 24;\n\t\t\t\tbreak;\n\n\t\t\t// Minute\n\t\t\tcase \"m\":\n\t\t\t\tvalue = date.getMinutes();\n\t\t\t\tbreak;\n\n\t\t\t// Second\n\t\t\tcase \"s\":\n\t\t\t\tvalue = date.getSeconds();\n\t\t\t\tbreak;\n\n\t\t\tcase \"S\":\n\t\t\t\tvalue = Math.round( date.getMilliseconds() * Math.pow( 10, length - 3 ) );\n\t\t\t\tbreak;\n\n\t\t\tcase \"A\":\n\t\t\t\tvalue = Math.round( dateMillisecondsInDay( date ) * Math.pow( 10, length - 3 ) );\n\t\t\t\tbreak;\n\n\t\t\t// Zone\n\t\t\tcase \"z\":\n\t\t\t\tbreak;\n\n\t\t\tcase \"v\":\n\n\t\t\t\t// v...vvv: \"{shortRegion}\", eg. \"PT\".\n\t\t\t\t// vvvv: \"{regionName} {Time}\",\n\t\t\t\t// e.g., \"Pacific Time\".\n\t\t\t\tif ( properties.genericTzName ) {\n\t\t\t\t\tvalue = properties.genericTzName;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t/* falls through */\n\t\t\tcase \"V\":\n\n\t\t\t\t//VVVV: \"{explarCity} {Time}\", e.g., \"Los Angeles Time\"\n\t\t\t\tif ( properties.timeZoneName ) {\n\t\t\t\t\tvalue = properties.timeZoneName;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif ( current === \"v\" ) {\n\t\t\t\t\tlength = 1;\n\t\t\t\t}\n\n\t\t\t/* falls through */\n\t\t\tcase \"O\":\n\n\t\t\t\t// O: \"{gmtFormat}+H;{gmtFormat}-H\" or \"{gmtZeroFormat}\", eg. \"GMT-8\" or \"GMT\".\n\t\t\t\t// OOOO: \"{gmtFormat}{hourFormat}\" or \"{gmtZeroFormat}\", eg. \"GMT-08:00\" or \"GMT\".\n\t\t\t\tif ( date.getTimezoneOffset() === 0 ) {\n\t\t\t\t\tvalue = properties.gmtZeroFormat;\n\t\t\t\t} else {\n\n\t\t\t\t\t// If O..OOO and timezone offset has non-zero minutes, show minutes.\n\t\t\t\t\tif ( length < 4 ) {\n\t\t\t\t\t\taux = date.getTimezoneOffset();\n\t\t\t\t\t\taux = properties.hourFormat[ aux % 60 - aux % 1 === 0 ? 0 : 1 ];\n\t\t\t\t\t} else {\n\t\t\t\t\t\taux = properties.hourFormat;\n\t\t\t\t\t}\n\n\t\t\t\t\tvalue = dateTimezoneHourFormat(\n\t\t\t\t\t\tdate,\n\t\t\t\t\t\taux,\n\t\t\t\t\t\ttimeSeparator,\n\t\t\t\t\t\tnumberFormatters\n\t\t\t\t\t);\n\t\t\t\t\tvalue = properties.gmtFormat.replace( /\\{0\\}/, value );\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"X\":\n\n\t\t\t\t// Same as x*, except it uses \"Z\" for zero offset.\n\t\t\t\tif ( date.getTimezoneOffset() === 0 ) {\n\t\t\t\t\tvalue = \"Z\";\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t/* falls through */\n\t\t\tcase \"x\":\n\n\t\t\t\t// x: hourFormat(\"+HH[mm];-HH[mm]\")\n\t\t\t\t// xx: hourFormat(\"+HHmm;-HHmm\")\n\t\t\t\t// xxx: hourFormat(\"+HH:mm;-HH:mm\")\n\t\t\t\t// xxxx: hourFormat(\"+HHmm[ss];-HHmm[ss]\")\n\t\t\t\t// xxxxx: hourFormat(\"+HH:mm[:ss];-HH:mm[:ss]\")\n\t\t\t\taux = date.getTimezoneOffset();\n\n\t\t\t\t// If x and timezone offset has non-zero minutes, use xx (i.e., show minutes).\n\t\t\t\tif ( length === 1 && aux % 60 - aux % 1 !== 0 ) {\n\t\t\t\t\tlength += 1;\n\t\t\t\t}\n\n\t\t\t\t// If (xxxx or xxxxx) and timezone offset has zero seconds, use xx or xxx\n\t\t\t\t// respectively (i.e., don't show optional seconds).\n\t\t\t\tif ( ( length === 4 || length === 5 ) && aux % 1 === 0 ) {\n\t\t\t\t\tlength -= 2;\n\t\t\t\t}\n\n\t\t\t\tvalue = [\n\t\t\t\t\t\"+HH;-HH\",\n\t\t\t\t\t\"+HHmm;-HHmm\",\n\t\t\t\t\t\"+HH:mm;-HH:mm\",\n\t\t\t\t\t\"+HHmmss;-HHmmss\",\n\t\t\t\t\t\"+HH:mm:ss;-HH:mm:ss\"\n\t\t\t\t][ length - 1 ];\n\n\t\t\t\tvalue = dateTimezoneHourFormat( date, value, \":\" );\n\t\t\t\tbreak;\n\n\t\t\t// timeSeparator\n\t\t\tcase \":\":\n\t\t\t\tvalue = timeSeparator;\n\t\t\t\tbreak;\n\n\t\t\t// ' literals.\n\t\t\tcase \"'\":\n\t\t\t\tvalue = removeLiteralQuotes( current );\n\t\t\t\tbreak;\n\n\t\t\t// Anything else is considered a literal, including [ ,:/.@#], chinese, japonese, and\n\t\t\t// arabic characters.\n\t\t\tdefault:\n\t\t\t\tvalue = current;\n\n\t\t}\n\t\tif ( typeof value === \"number\" ) {\n\t\t\tvalue = numberFormatters[ length ]( value );\n\t\t}\n\n\t\tdateField = dateFieldsMap[ chr ];\n\t\ttype = dateField ? dateField : \"literal\";\n\n\t\tpartsPush( parts, type, value );\n\t});\n\n\treturn parts;\n\n};\n\n\n\n\nvar dateToPartsFormatterFn = function( numberFormatters, properties ) {\n\treturn function dateToPartsFormatter( value ) {\n\t\tvalidateParameterPresence( value, \"value\" );\n\t\tvalidateParameterTypeDate( value, \"value\" );\n\n\t\treturn dateFormat( value, numberFormatters, properties );\n\t};\n\n};\n\n\n\n\nfunction optionsHasStyle( options ) {\n\treturn options.skeleton !== undefined ||\n\t\toptions.date !== undefined ||\n\t\toptions.time !== undefined ||\n\t\toptions.datetime !== undefined ||\n\t\toptions.raw !== undefined;\n}\n\nfunction validateRequiredCldr( path, value ) {\n\tvalidateCldr( path, value, {\n\t\tskip: [\n\t\t\t/dates\\/calendars\\/gregorian\\/dateTimeFormats\\/availableFormats/,\n\t\t\t/dates\\/calendars\\/gregorian\\/days\\/.*\\/short/,\n\t\t\t/dates\\/timeZoneNames\\/zone/,\n\t\t\t/dates\\/timeZoneNames\\/metazone/,\n\t\t\t/globalize-iana/,\n\t\t\t/supplemental\\/metaZones/,\n\t\t\t/supplemental\\/timeData\\/(?!001)/,\n\t\t\t/supplemental\\/weekData\\/(?!001)/\n\t\t]\n\t});\n}\n\nfunction validateOptionsPreset( options ) {\n\tvalidateOptionsPresetEach( \"date\", options );\n\tvalidateOptionsPresetEach( \"time\", options );\n\tvalidateOptionsPresetEach( \"datetime\", options );\n}\n\nfunction validateOptionsPresetEach( type, options ) {\n\tvar value = options[ type ];\n\tvalidate(\n\t\t\"E_INVALID_OPTIONS\",\n\t\t\"Invalid `{{type}: \\\"{value}\\\"}`.\",\n\t\tvalue === undefined || [ \"short\", \"medium\", \"long\", \"full\" ].indexOf( value ) !== -1,\n\t\t{ type: type, value: value }\n\t);\n}\n\nfunction validateOptionsSkeleton( pattern, skeleton ) {\n\tvalidate(\n\t\t\"E_INVALID_OPTIONS\",\n\t\t\"Invalid `{skeleton: \\\"{value}\\\"}` based on provided CLDR.\",\n\t\tskeleton === undefined || ( typeof pattern === \"string\" && pattern ),\n\t\t{ type: \"skeleton\", value: skeleton }\n\t);\n}\n\nfunction validateRequiredIana( timeZone ) {\n\treturn function( path, value ) {\n\n\t\tif ( !/globalize-iana/.test( path ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvalidate(\n\t\t\t\"E_MISSING_IANA_TZ\",\n\t\t\t\"Missing required IANA timezone content for `{timeZone}`: `{path}`.\",\n\t\t\tvalue,\n\t\t\t{\n\t\t\t\tpath: path.replace( /globalize-iana\\//, \"\" ),\n\t\t\t\ttimeZone: timeZone\n\t\t\t}\n\t\t);\n\t};\n}\n\n/**\n * .loadTimeZone( json )\n *\n * @json [JSON]\n *\n * Load IANA timezone data.\n */\nGlobalize.loadTimeZone = function( json ) {\n\tvar customData = {\n\t\t\t\"globalize-iana\": json\n\t\t};\n\n\tvalidateParameterPresence( json, \"json\" );\n\tvalidateParameterTypePlainObject( json, \"json\" );\n\n\tCldr.load( customData );\n};\n\n/**\n * .dateFormatter( options )\n *\n * @options [Object] see date/expand_pattern for more info.\n *\n * Return a date formatter function (of the form below) according to the given options and the\n * default/instance locale.\n *\n * fn( value )\n *\n * @value [Date]\n *\n * Return a function that formats a date according to the given `format` and the default/instance\n * locale.\n */\nGlobalize.dateFormatter =\nGlobalize.prototype.dateFormatter = function( options ) {\n\tvar args, dateToPartsFormatter, returnFn;\n\n\tvalidateParameterTypePlainObject( options, \"options\" );\n\n\toptions = options || {};\n\tif ( !optionsHasStyle( options ) ) {\n\t\toptions.skeleton = \"yMd\";\n\t}\n\targs = [ options ];\n\n\tdateToPartsFormatter = this.dateToPartsFormatter( options );\n\treturnFn = dateFormatterFn( dateToPartsFormatter );\n\truntimeBind( args, this.cldr, returnFn, [ dateToPartsFormatter ] );\n\n\treturn returnFn;\n};\n\n/**\n * .dateToPartsFormatter( options )\n *\n * @options [Object] see date/expand_pattern for more info.\n *\n * Return a date formatter function (of the form below) according to the given options and the\n * default/instance locale.\n *\n * fn( value )\n *\n * @value [Date]\n *\n * Return a function that formats a date to parts according to the given `format`\n * and the default/instance\n * locale.\n */\nGlobalize.dateToPartsFormatter =\nGlobalize.prototype.dateToPartsFormatter = function( options ) {\n\tvar args, cldr, numberFormatters, pad, pattern, properties, returnFn,\n\t\ttimeZone, ianaListener;\n\n\tvalidateParameterTypePlainObject( options, \"options\" );\n\n\tcldr = this.cldr;\n\toptions = options || {};\n\tif ( !optionsHasStyle( options ) ) {\n\t\toptions.skeleton = \"yMd\";\n\t}\n\n\tvalidateOptionsPreset( options );\n\tvalidateDefaultLocale( cldr );\n\n\ttimeZone = options.timeZone;\n\tvalidateParameterTypeString( timeZone, \"options.timeZone\" );\n\n\targs = [ options ];\n\n\tcldr.on( \"get\", validateRequiredCldr );\n\tif ( timeZone ) {\n\t\tianaListener = validateRequiredIana( timeZone );\n\t\tcldr.on( \"get\", ianaListener );\n\t}\n\ttry {\n\t\tpattern = dateExpandPattern( options, cldr );\n\t\tvalidateOptionsSkeleton( pattern, options.skeleton );\n\t\tproperties = dateFormatProperties( pattern, cldr, timeZone );\n\t} finally {\n\t\tcldr.off( \"get\", validateRequiredCldr );\n\t\tif ( ianaListener ) {\n\t\t\tcldr.off( \"get\", ianaListener );\n\t\t}\n\t}\n\n\t// Create needed number formatters.\n\tnumberFormatters = properties.numberFormatters;\n\tdelete properties.numberFormatters;\n\tfor ( pad in numberFormatters ) {\n\t\tnumberFormatters[ pad ] = this.numberFormatter({\n\t\t\traw: numberFormatters[ pad ]\n\t\t});\n\t}\n\n\treturnFn = dateToPartsFormatterFn( numberFormatters, properties );\n\n\truntimeBind( args, cldr, returnFn, [ numberFormatters, properties ] );\n\n\treturn returnFn;\n};\n\n/**\n * .dateParser( options )\n *\n * @options [Object] see date/expand_pattern for more info.\n *\n * Return a function that parses a string date according to the given `formats` and the\n * default/instance locale.\n */\nGlobalize.dateParser =\nGlobalize.prototype.dateParser = function( options ) {\n\tvar args, cldr, numberParser, parseProperties, pattern, returnFn, timeZone,\n\t\ttokenizerProperties;\n\n\tvalidateParameterTypePlainObject( options, \"options\" );\n\n\tcldr = this.cldr;\n\toptions = options || {};\n\tif ( !optionsHasStyle( options ) ) {\n\t\toptions.skeleton = \"yMd\";\n\t}\n\n\tvalidateOptionsPreset( options );\n\tvalidateDefaultLocale( cldr );\n\n\ttimeZone = options.timeZone;\n\tvalidateParameterTypeString( timeZone, \"options.timeZone\" );\n\n\targs = [ options ];\n\n\ttry {\n\t\tcldr.on( \"get\", validateRequiredCldr );\n\t\tif ( timeZone ) {\n\t\t\tcldr.on( \"get\", validateRequiredIana( timeZone ) );\n\t\t}\n\t\tpattern = dateExpandPattern( options, cldr );\n\t\tvalidateOptionsSkeleton( pattern, options.skeleton );\n\t\ttokenizerProperties = dateTokenizerProperties( pattern, cldr, timeZone );\n\t\tparseProperties = dateParseProperties( cldr, timeZone );\n\t} finally {\n\t\tcldr.off( \"get\", validateRequiredCldr );\n\t\tif ( timeZone ) {\n\t\t\tcldr.off( \"get\", validateRequiredIana( timeZone ) );\n\t\t}\n\t}\n\tnumberParser = this.numberParser({ raw: \"0\" });\n\n\treturnFn = dateParserFn( numberParser, parseProperties, tokenizerProperties );\n\n\truntimeBind( args, cldr, returnFn, [ numberParser, parseProperties, tokenizerProperties ] );\n\n\treturn returnFn;\n};\n\n/**\n * .formatDate( value, options )\n *\n * @value [Date]\n *\n * @options [Object] see date/expand_pattern for more info.\n *\n * Formats a date or number according to the given options string and the default/instance locale.\n */\nGlobalize.formatDate =\nGlobalize.prototype.formatDate = function( value, options ) {\n\tvalidateParameterPresence( value, \"value\" );\n\tvalidateParameterTypeDate( value, \"value\" );\n\n\treturn this.dateFormatter( options )( value );\n};\n\n/**\n * .formatDateToParts( value, options )\n *\n * @value [Date]\n *\n * @options [Object] see date/expand_pattern for more info.\n *\n * Formats a date or number to parts according to the given options and the default/instance locale.\n */\nGlobalize.formatDateToParts =\nGlobalize.prototype.formatDateToParts = function( value, options ) {\n\tvalidateParameterPresence( value, \"value\" );\n\tvalidateParameterTypeDate( value, \"value\" );\n\n\treturn this.dateToPartsFormatter( options )( value );\n};\n\n/**\n * .parseDate( value, options )\n *\n * @value [String]\n *\n * @options [Object] see date/expand_pattern for more info.\n *\n * Return a Date instance or null.\n */\nGlobalize.parseDate =\nGlobalize.prototype.parseDate = function( value, options ) {\n\tvalidateParameterPresence( value, \"value\" );\n\tvalidateParameterTypeString( value, \"value\" );\n\n\treturn this.dateParser( options )( value );\n};\n\nreturn Globalize;\n\n\n\n\n}));\n","/**\n * Globalize v1.7.0\n *\n * https://github.com/globalizejs/globalize\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2021-08-02T11:53Z\n */\n/*!\n * Globalize v1.7.0 2021-08-02T11:53Z Released under the MIT license\n * http://git.io/TrdQbw\n */\n(function( root, factory ) {\n\n\t// UMD returnExports\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD\n\t\tdefine([\n\t\t\t\"cldr\",\n\t\t\t\"../globalize\",\n\t\t\t\"cldr/event\"\n\t\t], factory );\n\t} else if ( typeof exports === \"object\" ) {\n\n\t\t// Node, CommonJS\n\t\tmodule.exports = factory( require( \"cldrjs\" ), require( \"../globalize\" ) );\n\t} else {\n\n\t\t// Extend global\n\t\tfactory( root.Cldr, root.Globalize );\n\t}\n}(this, function( Cldr, Globalize ) {\n\nvar alwaysArray = Globalize._alwaysArray,\n\tcreateError = Globalize._createError,\n\tisPlainObject = Globalize._isPlainObject,\n\truntimeBind = Globalize._runtimeBind,\n\tvalidateDefaultLocale = Globalize._validateDefaultLocale,\n\tvalidate = Globalize._validate,\n\tvalidateParameterPresence = Globalize._validateParameterPresence,\n\tvalidateParameterType = Globalize._validateParameterType,\n\tvalidateParameterTypePlainObject = Globalize._validateParameterTypePlainObject;\nvar MessageFormat;\n/* eslint-disable */\nMessageFormat = (function() {\nMessageFormat._parse = (function() {\n\n /*\n * Generated by PEG.js 0.8.0.\n *\n * http://pegjs.majda.cz/\n */\n\n function peg$subclass(child, parent) {\n function ctor() { this.constructor = child; }\n ctor.prototype = parent.prototype;\n child.prototype = new ctor();\n }\n\n function SyntaxError(message, expected, found, offset, line, column) {\n this.message = message;\n this.expected = expected;\n this.found = found;\n this.offset = offset;\n this.line = line;\n this.column = column;\n\n this.name = \"SyntaxError\";\n }\n\n peg$subclass(SyntaxError, Error);\n\n function parse(input) {\n var options = arguments.length > 1 ? arguments[1] : {},\n\n peg$FAILED = {},\n\n peg$startRuleFunctions = { start: peg$parsestart },\n peg$startRuleFunction = peg$parsestart,\n\n peg$c0 = [],\n peg$c1 = function(st) {\n return { type: 'messageFormatPattern', statements: st };\n },\n peg$c2 = peg$FAILED,\n peg$c3 = \"{\",\n peg$c4 = { type: \"literal\", value: \"{\", description: \"\\\"{\\\"\" },\n peg$c5 = null,\n peg$c6 = \",\",\n peg$c7 = { type: \"literal\", value: \",\", description: \"\\\",\\\"\" },\n peg$c8 = \"}\",\n peg$c9 = { type: \"literal\", value: \"}\", description: \"\\\"}\\\"\" },\n peg$c10 = function(argIdx, efmt) {\n var res = {\n type: \"messageFormatElement\",\n argumentIndex: argIdx\n };\n if (efmt && efmt.length) {\n res.elementFormat = efmt[1];\n } else {\n res.output = true;\n }\n return res;\n },\n peg$c11 = \"plural\",\n peg$c12 = { type: \"literal\", value: \"plural\", description: \"\\\"plural\\\"\" },\n peg$c13 = function(t, s) {\n return { type: \"elementFormat\", key: t, val: s };\n },\n peg$c14 = \"selectordinal\",\n peg$c15 = { type: \"literal\", value: \"selectordinal\", description: \"\\\"selectordinal\\\"\" },\n peg$c16 = \"select\",\n peg$c17 = { type: \"literal\", value: \"select\", description: \"\\\"select\\\"\" },\n peg$c18 = function(t, p) {\n return { type: \"elementFormat\", key: t, val: p };\n },\n peg$c19 = function(op, pf) {\n return { type: \"pluralFormatPattern\", pluralForms: pf, offset: op || 0 };\n },\n peg$c20 = \"offset\",\n peg$c21 = { type: \"literal\", value: \"offset\", description: \"\\\"offset\\\"\" },\n peg$c22 = \":\",\n peg$c23 = { type: \"literal\", value: \":\", description: \"\\\":\\\"\" },\n peg$c24 = function(d) { return d; },\n peg$c25 = function(k, mfp) {\n return { key: k, val: mfp };\n },\n peg$c26 = function(i) { return i; },\n peg$c27 = \"=\",\n peg$c28 = { type: \"literal\", value: \"=\", description: \"\\\"=\\\"\" },\n peg$c29 = function(pf) { return { type: \"selectFormatPattern\", pluralForms: pf }; },\n peg$c30 = function(p) { return p; },\n peg$c31 = \"#\",\n peg$c32 = { type: \"literal\", value: \"#\", description: \"\\\"#\\\"\" },\n peg$c33 = function() { return {type: 'octothorpe'}; },\n peg$c34 = function(s) { return { type: \"string\", val: s.join('') }; },\n peg$c35 = { type: \"other\", description: \"identifier\" },\n peg$c36 = /^[0-9a-zA-Z$_]/,\n peg$c37 = { type: \"class\", value: \"[0-9a-zA-Z$_]\", description: \"[0-9a-zA-Z$_]\" },\n peg$c38 = /^[^ \\t\\n\\r,.+={}]/,\n peg$c39 = { type: \"class\", value: \"[^ \\\\t\\\\n\\\\r,.+={}]\", description: \"[^ \\\\t\\\\n\\\\r,.+={}]\" },\n peg$c40 = function(s) { return s; },\n peg$c41 = function(chars) { return chars.join(''); },\n peg$c42 = /^[^{}#\\\\\\0-\\x1F \\t\\n\\r]/,\n peg$c43 = { type: \"class\", value: \"[^{}#\\\\\\\\\\\\0-\\\\x1F \\\\t\\\\n\\\\r]\", description: \"[^{}#\\\\\\\\\\\\0-\\\\x1F \\\\t\\\\n\\\\r]\" },\n peg$c44 = function(x) { return x; },\n peg$c45 = \"\\\\\\\\\",\n peg$c46 = { type: \"literal\", value: \"\\\\\\\\\", description: \"\\\"\\\\\\\\\\\\\\\\\\\"\" },\n peg$c47 = function() { return \"\\\\\"; },\n peg$c48 = \"\\\\#\",\n peg$c49 = { type: \"literal\", value: \"\\\\#\", description: \"\\\"\\\\\\\\#\\\"\" },\n peg$c50 = function() { return \"#\"; },\n peg$c51 = \"\\\\{\",\n peg$c52 = { type: \"literal\", value: \"\\\\{\", description: \"\\\"\\\\\\\\{\\\"\" },\n peg$c53 = function() { return \"\\u007B\"; },\n peg$c54 = \"\\\\}\",\n peg$c55 = { type: \"literal\", value: \"\\\\}\", description: \"\\\"\\\\\\\\}\\\"\" },\n peg$c56 = function() { return \"\\u007D\"; },\n peg$c57 = \"\\\\u\",\n peg$c58 = { type: \"literal\", value: \"\\\\u\", description: \"\\\"\\\\\\\\u\\\"\" },\n peg$c59 = function(h1, h2, h3, h4) {\n return String.fromCharCode(parseInt(\"0x\" + h1 + h2 + h3 + h4));\n },\n peg$c60 = /^[0-9]/,\n peg$c61 = { type: \"class\", value: \"[0-9]\", description: \"[0-9]\" },\n peg$c62 = function(ds) {\n //the number might start with 0 but must not be interpreted as an octal number\n //Hence, the base is passed to parseInt explicitely\n return parseInt((ds.join('')), 10);\n },\n peg$c63 = /^[0-9a-fA-F]/,\n peg$c64 = { type: \"class\", value: \"[0-9a-fA-F]\", description: \"[0-9a-fA-F]\" },\n peg$c65 = { type: \"other\", description: \"whitespace\" },\n peg$c66 = function(w) { return w.join(''); },\n peg$c67 = /^[ \\t\\n\\r]/,\n peg$c68 = { type: \"class\", value: \"[ \\\\t\\\\n\\\\r]\", description: \"[ \\\\t\\\\n\\\\r]\" },\n\n peg$currPos = 0,\n peg$reportedPos = 0,\n peg$cachedPos = 0,\n peg$cachedPosDetails = { line: 1, column: 1, seenCR: false },\n peg$maxFailPos = 0,\n peg$maxFailExpected = [],\n peg$silentFails = 0,\n\n peg$result;\n\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(\"Can't start parsing from rule \\\"\" + options.startRule + \"\\\".\");\n }\n\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n\n function text() {\n return input.substring(peg$reportedPos, peg$currPos);\n }\n\n function offset() {\n return peg$reportedPos;\n }\n\n function line() {\n return peg$computePosDetails(peg$reportedPos).line;\n }\n\n function column() {\n return peg$computePosDetails(peg$reportedPos).column;\n }\n\n function expected(description) {\n throw peg$buildException(\n null,\n [{ type: \"other\", description: description }],\n peg$reportedPos\n );\n }\n\n function error(message) {\n throw peg$buildException(message, null, peg$reportedPos);\n }\n\n function peg$computePosDetails(pos) {\n function advance(details, startPos, endPos) {\n var p, ch;\n\n for (p = startPos; p < endPos; p++) {\n ch = input.charAt(p);\n if (ch === \"\\n\") {\n if (!details.seenCR) { details.line++; }\n details.column = 1;\n details.seenCR = false;\n } else if (ch === \"\\r\" || ch === \"\\u2028\" || ch === \"\\u2029\") {\n details.line++;\n details.column = 1;\n details.seenCR = true;\n } else {\n details.column++;\n details.seenCR = false;\n }\n }\n }\n\n if (peg$cachedPos !== pos) {\n if (peg$cachedPos > pos) {\n peg$cachedPos = 0;\n peg$cachedPosDetails = { line: 1, column: 1, seenCR: false };\n }\n advance(peg$cachedPosDetails, peg$cachedPos, pos);\n peg$cachedPos = pos;\n }\n\n return peg$cachedPosDetails;\n }\n\n function peg$fail(expected) {\n if (peg$currPos < peg$maxFailPos) { return; }\n\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n\n peg$maxFailExpected.push(expected);\n }\n\n function peg$buildException(message, expected, pos) {\n function cleanupExpected(expected) {\n var i = 1;\n\n expected.sort(function(a, b) {\n if (a.description < b.description) {\n return -1;\n } else if (a.description > b.description) {\n return 1;\n } else {\n return 0;\n }\n });\n\n while (i < expected.length) {\n if (expected[i - 1] === expected[i]) {\n expected.splice(i, 1);\n } else {\n i++;\n }\n }\n }\n\n function buildMessage(expected, found) {\n function stringEscape(s) {\n function hex(ch) { return ch.charCodeAt(0).toString(16).toUpperCase(); }\n\n return s\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\"/g, '\\\\\"')\n .replace(/\\x08/g, '\\\\b')\n .replace(/\\t/g, '\\\\t')\n .replace(/\\n/g, '\\\\n')\n .replace(/\\f/g, '\\\\f')\n .replace(/\\r/g, '\\\\r')\n .replace(/[\\x00-\\x07\\x0B\\x0E\\x0F]/g, function(ch) { return '\\\\x0' + hex(ch); })\n .replace(/[\\x10-\\x1F\\x80-\\xFF]/g, function(ch) { return '\\\\x' + hex(ch); })\n .replace(/[\\u0180-\\u0FFF]/g, function(ch) { return '\\\\u0' + hex(ch); })\n .replace(/[\\u1080-\\uFFFF]/g, function(ch) { return '\\\\u' + hex(ch); });\n }\n\n var expectedDescs = new Array(expected.length),\n expectedDesc, foundDesc, i;\n\n for (i = 0; i < expected.length; i++) {\n expectedDescs[i] = expected[i].description;\n }\n\n expectedDesc = expected.length > 1\n ? expectedDescs.slice(0, -1).join(\", \")\n + \" or \"\n + expectedDescs[expected.length - 1]\n : expectedDescs[0];\n\n foundDesc = found ? \"\\\"\" + stringEscape(found) + \"\\\"\" : \"end of input\";\n\n return \"Expected \" + expectedDesc + \" but \" + foundDesc + \" found.\";\n }\n\n var posDetails = peg$computePosDetails(pos),\n found = pos < input.length ? input.charAt(pos) : null;\n\n if (expected !== null) {\n cleanupExpected(expected);\n }\n\n return new SyntaxError(\n message !== null ? message : buildMessage(expected, found),\n expected,\n found,\n pos,\n posDetails.line,\n posDetails.column\n );\n }\n\n function peg$parsestart() {\n var s0;\n\n s0 = peg$parsemessageFormatPattern();\n\n return s0;\n }\n\n function peg$parsemessageFormatPattern() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsemessageFormatElement();\n if (s2 === peg$FAILED) {\n s2 = peg$parsestring();\n if (s2 === peg$FAILED) {\n s2 = peg$parseoctothorpe();\n }\n }\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsemessageFormatElement();\n if (s2 === peg$FAILED) {\n s2 = peg$parsestring();\n if (s2 === peg$FAILED) {\n s2 = peg$parseoctothorpe();\n }\n }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c1(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parsemessageFormatElement() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c3;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c4); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseid();\n if (s3 !== peg$FAILED) {\n s4 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 44) {\n s5 = peg$c6;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c7); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parseelementFormat();\n if (s6 !== peg$FAILED) {\n s5 = [s5, s6];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$c2;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$c2;\n }\n if (s4 === peg$FAILED) {\n s4 = peg$c5;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parse_();\n if (s5 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s6 = peg$c8;\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c9); }\n }\n if (s6 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c10(s3, s4);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n\n return s0;\n }\n\n function peg$parseelementFormat() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n s1 = peg$parse_();\n if (s1 !== peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c11) {\n s2 = peg$c11;\n peg$currPos += 6;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c12); }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parse_();\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s4 = peg$c6;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c7); }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parse_();\n if (s5 !== peg$FAILED) {\n s6 = peg$parsepluralFormatPattern();\n if (s6 !== peg$FAILED) {\n s7 = peg$parse_();\n if (s7 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c13(s2, s6);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parse_();\n if (s1 !== peg$FAILED) {\n if (input.substr(peg$currPos, 13) === peg$c14) {\n s2 = peg$c14;\n peg$currPos += 13;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c15); }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parse_();\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s4 = peg$c6;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c7); }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parse_();\n if (s5 !== peg$FAILED) {\n s6 = peg$parsepluralFormatPattern();\n if (s6 !== peg$FAILED) {\n s7 = peg$parse_();\n if (s7 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c13(s2, s6);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parse_();\n if (s1 !== peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c16) {\n s2 = peg$c16;\n peg$currPos += 6;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c17); }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parse_();\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s4 = peg$c6;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c7); }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parse_();\n if (s5 !== peg$FAILED) {\n s6 = peg$parseselectFormatPattern();\n if (s6 !== peg$FAILED) {\n s7 = peg$parse_();\n if (s7 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c13(s2, s6);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parse_();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseid();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parseargStylePattern();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parseargStylePattern();\n }\n if (s3 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c18(s2, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n }\n }\n }\n\n return s0;\n }\n\n function peg$parsepluralFormatPattern() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n s1 = peg$parseoffsetPattern();\n if (s1 === peg$FAILED) {\n s1 = peg$c5;\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parsepluralForm();\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsepluralForm();\n }\n } else {\n s2 = peg$c2;\n }\n if (s2 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c19(s1, s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n\n return s0;\n }\n\n function peg$parseoffsetPattern() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n s1 = peg$parse_();\n if (s1 !== peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c20) {\n s2 = peg$c20;\n peg$currPos += 6;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c21); }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parse_();\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 58) {\n s4 = peg$c22;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c23); }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parse_();\n if (s5 !== peg$FAILED) {\n s6 = peg$parsedigits();\n if (s6 !== peg$FAILED) {\n s7 = peg$parse_();\n if (s7 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c24(s6);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n\n return s0;\n }\n\n function peg$parsepluralForm() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n\n s0 = peg$currPos;\n s1 = peg$parse_();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsepluralKey();\n if (s2 !== peg$FAILED) {\n s3 = peg$parse_();\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 123) {\n s4 = peg$c3;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c4); }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parse_();\n if (s5 !== peg$FAILED) {\n s6 = peg$parsemessageFormatPattern();\n if (s6 !== peg$FAILED) {\n s7 = peg$parse_();\n if (s7 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s8 = peg$c8;\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c9); }\n }\n if (s8 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c25(s2, s6);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n\n return s0;\n }\n\n function peg$parsepluralKey() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = peg$parseid();\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c26(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 61) {\n s1 = peg$c27;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c28); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsedigits();\n if (s2 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c24(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n }\n\n return s0;\n }\n\n function peg$parseselectFormatPattern() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseselectForm();\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseselectForm();\n }\n } else {\n s1 = peg$c2;\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c29(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseselectForm() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n\n s0 = peg$currPos;\n s1 = peg$parse_();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseid();\n if (s2 !== peg$FAILED) {\n s3 = peg$parse_();\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 123) {\n s4 = peg$c3;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c4); }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parse_();\n if (s5 !== peg$FAILED) {\n s6 = peg$parsemessageFormatPattern();\n if (s6 !== peg$FAILED) {\n s7 = peg$parse_();\n if (s7 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s8 = peg$c8;\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c9); }\n }\n if (s8 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c25(s2, s6);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n\n return s0;\n }\n\n function peg$parseargStylePattern() {\n var s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n s1 = peg$parse_();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s2 = peg$c6;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c7); }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parse_();\n if (s3 !== peg$FAILED) {\n s4 = peg$parseid();\n if (s4 !== peg$FAILED) {\n s5 = peg$parse_();\n if (s5 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c30(s4);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n\n return s0;\n }\n\n function peg$parseoctothorpe() {\n var s0, s1;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 35) {\n s1 = peg$c31;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c32); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c33();\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parsestring() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsechars();\n if (s2 === peg$FAILED) {\n s2 = peg$parsewhitespace();\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsechars();\n if (s2 === peg$FAILED) {\n s2 = peg$parsewhitespace();\n }\n }\n } else {\n s1 = peg$c2;\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c34(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseid() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parse_();\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n s3 = peg$currPos;\n if (peg$c36.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c37); }\n }\n if (s4 !== peg$FAILED) {\n s5 = [];\n if (peg$c38.test(input.charAt(peg$currPos))) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c39); }\n }\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n if (peg$c38.test(input.charAt(peg$currPos))) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c39); }\n }\n }\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$c2;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$c2;\n }\n if (s3 !== peg$FAILED) {\n s3 = input.substring(s2, peg$currPos);\n }\n s2 = s3;\n if (s2 !== peg$FAILED) {\n s3 = peg$parse_();\n if (s3 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c40(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c35); }\n }\n\n return s0;\n }\n\n function peg$parsechars() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsechar();\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsechar();\n }\n } else {\n s1 = peg$c2;\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c41(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parsechar() {\n var s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n if (peg$c42.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c43); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c44(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c45) {\n s1 = peg$c45;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c46); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c47();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c48) {\n s1 = peg$c48;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c49); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c50();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c51) {\n s1 = peg$c51;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c52); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c53();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c54) {\n s1 = peg$c54;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c55); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c56();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c57) {\n s1 = peg$c57;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c58); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsehexDigit();\n if (s2 !== peg$FAILED) {\n s3 = peg$parsehexDigit();\n if (s3 !== peg$FAILED) {\n s4 = peg$parsehexDigit();\n if (s4 !== peg$FAILED) {\n s5 = peg$parsehexDigit();\n if (s5 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c59(s2, s3, s4, s5);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n }\n }\n }\n }\n }\n\n return s0;\n }\n\n function peg$parsedigits() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n if (peg$c60.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c61); }\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n if (peg$c60.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c61); }\n }\n }\n } else {\n s1 = peg$c2;\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c62(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parsehexDigit() {\n var s0;\n\n if (peg$c63.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c64); }\n }\n\n return s0;\n }\n\n function peg$parse_() {\n var s0, s1, s2;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsewhitespace();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsewhitespace();\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c66(s1);\n }\n s0 = s1;\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c65); }\n }\n\n return s0;\n }\n\n function peg$parsewhitespace() {\n var s0;\n\n if (peg$c67.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c68); }\n }\n\n return s0;\n }\n\n peg$result = peg$startRuleFunction();\n\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail({ type: \"end\", description: \"end of input\" });\n }\n\n throw peg$buildException(null, peg$maxFailExpected, peg$maxFailPos);\n }\n }\n\n return {\n SyntaxError: SyntaxError,\n parse: parse\n };\n}()).parse;\n\n\n/** @file messageformat.js - ICU PluralFormat + SelectFormat for JavaScript\n * @author Alex Sexton - @SlexAxton\n * @version 0.3.0-1\n * @copyright 2012-2015 Alex Sexton, Eemeli Aro, and Contributors\n * @license To use or fork, MIT. To contribute back, Dojo CLA */\n\n\n/** Utility function for quoting an Object's key value iff required\n * @private */\nfunction propname(key, obj) {\n if (/^[A-Z_$][0-9A-Z_$]*$/i.test(key)) {\n return obj ? obj + '.' + key : key;\n } else {\n var jkey = JSON.stringify(key);\n return obj ? obj + '[' + jkey + ']' : jkey;\n }\n};\n\n\n/** Create a new message formatter\n *\n * @class\n * @global\n * @param {string|string[]} [locale=\"en\"] - The locale to use, with fallbacks\n * @param {function} [pluralFunc] - Optional custom pluralization function\n * @param {function[]} [formatters] - Optional custom formatting functions */\nfunction MessageFormat(locale, pluralFunc, formatters) {\n this.lc = [locale]; \n this.runtime.pluralFuncs = {};\n this.runtime.pluralFuncs[this.lc[0]] = pluralFunc;\n this.runtime.fmt = {};\n if (formatters) for (var f in formatters) {\n this.runtime.fmt[f] = formatters[f];\n }\n}\n\n\n\n\n/** Parse an input string to its AST\n *\n * Precompiled from `lib/messageformat-parser.pegjs` by\n * {@link http://pegjs.org/ PEG.js}. Included in MessageFormat object\n * to enable testing.\n *\n * @private */\n\n\n\n/** Pluralization functions from\n * {@link http://github.com/eemeli/make-plural.js make-plural}\n *\n * @memberof MessageFormat\n * @type Object. */\nMessageFormat.plurals = {};\n\n\n/** Default number formatting functions in the style of ICU's\n * {@link http://icu-project.org/apiref/icu4j/com/ibm/icu/text/MessageFormat.html simpleArg syntax}\n * implemented using the\n * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl Intl}\n * object defined by ECMA-402.\n *\n * **Note**: Intl is not defined in default Node until 0.11.15 / 0.12.0, so\n * earlier versions require a {@link https://www.npmjs.com/package/intl polyfill}.\n * Therefore {@link MessageFormat.withIntlSupport} needs to be true for these\n * functions to be available for inclusion in the output.\n *\n * @see MessageFormat#setIntlSupport\n *\n * @namespace\n * @memberof MessageFormat\n * @property {function} number - Represent a number as an integer, percent or currency value\n * @property {function} date - Represent a date as a full/long/default/short string\n * @property {function} time - Represent a time as a full/long/default/short string\n *\n * @example\n * > var MessageFormat = require('messageformat');\n * > var mf = (new MessageFormat('en')).setIntlSupport(true);\n * > mf.currency = 'EUR';\n * > var mfunc = mf.compile(\"The total is {V,number,currency}.\");\n * > mfunc({V:5.5})\n * \"The total is €5.50.\"\n *\n * @example\n * > var MessageFormat = require('messageformat');\n * > var mf = new MessageFormat('en', null, {number: MessageFormat.number});\n * > mf.currency = 'EUR';\n * > var mfunc = mf.compile(\"The total is {V,number,currency}.\");\n * > mfunc({V:5.5})\n * \"The total is €5.50.\" */\nMessageFormat.formatters = {};\n\n/** Enable or disable support for the default formatters, which require the\n * `Intl` object. Note that this can't be autodetected, as the environment\n * in which the formatted text is compiled into Javascript functions is not\n * necessarily the same environment in which they will get executed.\n *\n * @see MessageFormat.formatters\n *\n * @memberof MessageFormat\n * @param {boolean} [enable=true]\n * @returns {Object} The MessageFormat instance, to allow for chaining\n * @example\n * > var Intl = require('intl');\n * > var MessageFormat = require('messageformat');\n * > var mf = (new MessageFormat('en')).setIntlSupport(true);\n * > mf.currency = 'EUR';\n * > mf.compile(\"The total is {V,number,currency}.\")({V:5.5});\n * \"The total is €5.50.\" */\n\n\n\n/** A set of utility functions that are called by the compiled Javascript\n * functions, these are included locally in the output of {@link\n * MessageFormat#compile compile()}.\n *\n * @namespace\n * @memberof MessageFormat */\nMessageFormat.prototype.runtime = {\n\n /** Utility function for `#` in plural rules\n *\n * @param {number} value - The value to operate on\n * @param {number} [offset=0] - An optional offset, set by the surrounding context */\n number: function(value, offset) {\n if (isNaN(value)) throw new Error(\"'\" + value + \"' isn't a number.\");\n return value - (offset || 0);\n },\n\n /** Utility function for `{N, plural|selectordinal, ...}`\n *\n * @param {number} value - The key to use to find a pluralization rule\n * @param {number} offset - An offset to apply to `value`\n * @param {function} lcfunc - A locale function from `pluralFuncs`\n * @param {Object.} data - The object from which results are looked up\n * @param {?boolean} isOrdinal - If true, use ordinal rather than cardinal rules\n * @returns {string} The result of the pluralization */\n plural: function(value, offset, lcfunc, data, isOrdinal) {\n if ({}.hasOwnProperty.call(data, value)) return data[value]();\n if (offset) value -= offset;\n var key = lcfunc(value, isOrdinal);\n if (key in data) return data[key]();\n return data.other();\n },\n\n /** Utility function for `{N, select, ...}`\n *\n * @param {number} value - The key to use to find a selection\n * @param {Object.} data - The object from which results are looked up\n * @returns {string} The result of the select statement */\n select: function(value, data) {\n if ({}.hasOwnProperty.call(data, value)) return data[value]();\n return data.other()\n },\n\n /** Pluralization functions included in compiled output\n * @instance\n * @type Object. */\n pluralFuncs: {},\n\n /** Custom formatting functions called by `{var, fn[, args]*}` syntax\n *\n * For examples, see {@link MessageFormat.formatters}\n *\n * @instance\n * @see MessageFormat.formatters\n * @type Object. */\n fmt: {},\n\n /** Custom stringifier to clean up browser inconsistencies\n * @instance */\n toString: function () {\n var _stringify = function(o, level) {\n if (typeof o != 'object') {\n var funcStr = o.toString().replace(/^(function )\\w*/, '$1');\n var indent = /([ \\t]*)\\S.*$/.exec(funcStr);\n return indent ? funcStr.replace(new RegExp('^' + indent[1], 'mg'), '') : funcStr;\n }\n var s = [];\n for (var i in o) if (i != 'toString') {\n if (level == 0) s.push('var ' + i + ' = ' + _stringify(o[i], level + 1) + ';\\n');\n else s.push(propname(i) + ': ' + _stringify(o[i], level + 1));\n }\n if (level == 0) return s.join('');\n if (s.length == 0) return '{}';\n var indent = ' '; while (--level) indent += ' ';\n return '{\\n' + s.join(',\\n').replace(/^/gm, indent) + '\\n}';\n };\n return _stringify(this, 0);\n }\n};\n\n\n/** Recursively map an AST to its resulting string\n *\n * @memberof MessageFormat\n *\n * @param ast - the Ast node for which the JS code should be generated\n *\n * @private */\nMessageFormat.prototype._precompile = function(ast, data) {\n data = data || { keys: {}, offset: {} };\n var r = [], i, tmp, args = [];\n\n switch ( ast.type ) {\n case 'messageFormatPattern':\n for ( i = 0; i < ast.statements.length; ++i ) {\n r.push(this._precompile( ast.statements[i], data ));\n }\n tmp = r.join(' + ') || '\"\"';\n return data.pf_count ? tmp : 'function(d) { return ' + tmp + '; }';\n\n case 'messageFormatElement':\n data.pf_count = data.pf_count || 0;\n if ( ast.output ) {\n return propname(ast.argumentIndex, 'd');\n }\n else {\n data.keys[data.pf_count] = ast.argumentIndex;\n return this._precompile( ast.elementFormat, data );\n }\n return '';\n\n case 'elementFormat':\n args = [ propname(data.keys[data.pf_count], 'd') ];\n switch (ast.key) {\n case 'select':\n args.push(this._precompile(ast.val, data));\n return 'select(' + args.join(', ') + ')';\n case 'selectordinal':\n args = args.concat([ 0, propname(this.lc[0], 'pluralFuncs'), this._precompile(ast.val, data), 1 ]);\n return 'plural(' + args.join(', ') + ')';\n case 'plural':\n data.offset[data.pf_count || 0] = ast.val.offset || 0;\n args = args.concat([ data.offset[data.pf_count] || 0, propname(this.lc[0], 'pluralFuncs'), this._precompile(ast.val, data) ]);\n return 'plural(' + args.join(', ') + ')';\n default:\n if (this.withIntlSupport && !(ast.key in this.runtime.fmt) && (ast.key in MessageFormat.formatters)) {\n tmp = MessageFormat.formatters[ast.key];\n this.runtime.fmt[ast.key] = (typeof tmp(this) == 'function') ? tmp(this) : tmp;\n }\n args.push(JSON.stringify(this.lc));\n if (ast.val && ast.val.length) args.push(JSON.stringify(ast.val.length == 1 ? ast.val[0] : ast.val));\n return 'fmt.' + ast.key + '(' + args.join(', ') + ')';\n }\n\n case 'pluralFormatPattern':\n case 'selectFormatPattern':\n data.pf_count = data.pf_count || 0;\n if (ast.type == 'selectFormatPattern') data.offset[data.pf_count] = 0;\n var needOther = true;\n for (i = 0; i < ast.pluralForms.length; ++i) {\n var key = ast.pluralForms[i].key;\n if (key === 'other') needOther = false;\n var data_copy = JSON.parse(JSON.stringify(data));\n data_copy.pf_count++;\n r.push(propname(key) + ': function() { return ' + this._precompile(ast.pluralForms[i].val, data_copy) + ';}');\n }\n if (needOther) throw new Error(\"No 'other' form found in \" + ast.type + \" \" + data.pf_count);\n return '{ ' + r.join(', ') + ' }';\n\n case 'string':\n return JSON.stringify(ast.val || \"\");\n\n case 'octothorpe':\n if (!data.pf_count) return '\"#\"';\n args = [ propname(data.keys[data.pf_count-1], 'd') ];\n if (data.offset[data.pf_count-1]) args.push(data.offset[data.pf_count-1]);\n return 'number(' + args.join(', ') + ')';\n\n default:\n throw new Error( 'Bad AST type: ' + ast.type );\n }\n};\n\n/** Compile messages into an executable function with clean string\n * representation.\n *\n * If `messages` is a single string including ICU MessageFormat declarations,\n * `opt` is ignored and the returned function takes a single Object parameter\n * `d` representing each of the input's defined variables. The returned\n * function will be defined in a local scope that includes all the required\n * runtime variables.\n *\n * If `messages` is a map of keys to strings, or a map of namespace keys to\n * such key/string maps, the returned function will fill the specified global\n * with javascript functions matching the structure of the input. In such use,\n * the output of `compile()` is expected to be serialized using `.toString()`,\n * and will include definitions of the runtime functions. If `opt.global` is\n * null, calling the output function will return the object itself.\n *\n * Together, the input parameters should match the following patterns:\n * ```js\n * messages = \"string\" || { key0: \"string0\", key1: \"string1\", ... } || {\n * ns0: { key0: \"string0\", key1: \"string1\", ... },\n * ns1: { key0: \"string0\", key1: \"string1\", ... },\n * ...\n * }\n *\n * opt = null || {\n * locale: null || {\n * ns0: \"lc0\" || [ \"lc0\", ... ],\n * ns1: \"lc1\" || [ \"lc1\", ... ],\n * ...\n * },\n * global: null || \"module.exports\" || \"exports\" || \"i18n\" || ...\n * }\n * ```\n *\n * @memberof MessageFormat\n * @param {string|Object}\n * messages - The input message(s) to be compiled, in ICU MessageFormat\n * @param {Object} [opt={}] - Options controlling output for non-simple intput\n * @param {Object} [opt.locale] - The locales to use for the messages, with a\n * structure matching that of `messages`\n * @param {string} [opt.global=\"\"] - The global variable that the output\n * function should use, or a null string for none. \"exports\" and\n * \"module.exports\" are recognised as special cases.\n * @returns {function} The first match found for the given locale(s)\n *\n * @example\n * > var MessageFormat = require('messageformat'),\n * ... mf = new MessageFormat('en'),\n * ... mfunc0 = mf.compile('A {TYPE} example.');\n * > mfunc0({TYPE:'simple'})\n * 'A simple example.'\n * > mfunc0.toString()\n * 'function (d) { return \"A \" + d.TYPE + \" example.\"; }'\n *\n * @example\n * > var msgSet = { a: 'A {TYPE} example.',\n * ... b: 'This has {COUNT, plural, one{one member} other{# members}}.' },\n * ... mfuncSet = mf.compile(msgSet);\n * > mfuncSet().a({TYPE:'more complex'})\n * 'A more complex example.'\n * > mfuncSet().b({COUNT:2})\n * 'This has 2 members.'\n *\n * > console.log(mfuncSet.toString())\n * function anonymous() {\n * var number = function (value, offset) {\n * if (isNaN(value)) throw new Error(\"'\" + value + \"' isn't a number.\");\n * return value - (offset || 0);\n * };\n * var plural = function (value, offset, lcfunc, data, isOrdinal) {\n * if ({}.hasOwnProperty.call(data, value)) return data[value]();\n * if (offset) value -= offset;\n * var key = lcfunc(value, isOrdinal);\n * if (key in data) return data[key]();\n * return data.other();\n * };\n * var select = function (value, data) {\n * if ({}.hasOwnProperty.call(data, value)) return data[value]();\n * return data.other()\n * };\n * var pluralFuncs = {\n * en: function (n, ord) {\n * var s = String(n).split('.'), v0 = !s[1], t0 = Number(s[0]) == n,\n * n10 = t0 && s[0].slice(-1), n100 = t0 && s[0].slice(-2);\n * if (ord) return (n10 == 1 && n100 != 11) ? 'one'\n * : (n10 == 2 && n100 != 12) ? 'two'\n * : (n10 == 3 && n100 != 13) ? 'few'\n * : 'other';\n * return (n == 1 && v0) ? 'one' : 'other';\n * }\n * };\n * var fmt = {};\n *\n * return {\n * a: function(d) { return \"A \" + d.TYPE + \" example.\"; },\n * b: function(d) { return \"This has \" + plural(d.COUNT, 0, pluralFuncs.en, { one: function() { return \"one member\";}, other: function() { return number(d.COUNT)+\" members\";} }) + \".\"; }\n * }\n * }\n *\n * @example\n * > mf.runtime.pluralFuncs.fi = MessageFormat.plurals.fi;\n * > var multiSet = { en: { a: 'A {TYPE} example.',\n * ... b: 'This is the {COUNT, selectordinal, one{#st} two{#nd} few{#rd} other{#th}} example.' },\n * ... fi: { a: '{TYPE} esimerkki.',\n * ... b: 'Tämä on {COUNT, selectordinal, other{#.}} esimerkki.' } },\n * ... multiSetLocales = { en: 'en', fi: 'fi' },\n * ... mfuncSet = mf.compile(multiSet, { locale: multiSetLocales, global: 'i18n' });\n * > mfuncSet(this);\n * > i18n.en.b({COUNT:3})\n * 'This is the 3rd example.'\n * > i18n.fi.b({COUNT:3})\n * 'Tämä on 3. esimerkki.' */\nMessageFormat.prototype.compile = function ( messages, opt ) {\n var r = {}, lc0 = this.lc,\n compileMsg = function(self, msg) {\n try {\n var ast = MessageFormat._parse(msg);\n return self._precompile(ast);\n } catch (e) {\n throw new Error((ast ? 'Precompiler' : 'Parser') + ' error: ' + e.toString());\n }\n },\n stringify = function(r, level) {\n if (!level) level = 0;\n if (typeof r != 'object') return r;\n var o = [], indent = '';\n for (var i = 0; i < level; ++i) indent += ' ';\n for (var k in r) o.push('\\n' + indent + ' ' + propname(k) + ': ' + stringify(r[k], level + 1));\n return '{' + o.join(',') + '\\n' + indent + '}';\n };\n\n if (typeof messages == 'string') {\n var f = new Function(\n 'number, plural, select, pluralFuncs, fmt',\n 'return ' + compileMsg(this, messages));\n return f(this.runtime.number, this.runtime.plural, this.runtime.select,\n this.runtime.pluralFuncs, this.runtime.fmt);\n }\n\n opt = opt || {};\n\n for (var ns in messages) {\n if (opt.locale) this.lc = opt.locale[ns] && [].concat(opt.locale[ns]) || lc0;\n if (typeof messages[ns] == 'string') {\n try { r[ns] = compileMsg(this, messages[ns]); }\n catch (e) { e.message = e.message.replace(':', ' with `' + ns + '`:'); throw e; }\n } else {\n r[ns] = {};\n for (var key in messages[ns]) {\n try { r[ns][key] = compileMsg(this, messages[ns][key]); }\n catch (e) { e.message = e.message.replace(':', ' with `' + key + '` in `' + ns + '`:'); throw e; }\n }\n }\n }\n\n this.lc = lc0;\n var s = this.runtime.toString() + '\\n';\n switch (opt.global || '') {\n case 'exports':\n var o = [];\n for (var k in r) o.push(propname(k, 'exports') + ' = ' + stringify(r[k]));\n return new Function(s + o.join(';\\n'));\n case 'module.exports':\n return new Function(s + 'module.exports = ' + stringify(r));\n case '':\n return new Function(s + 'return ' + stringify(r));\n default:\n return new Function('G', s + propname(opt.global, 'G') + ' = ' + stringify(r));\n }\n};\n\n\nreturn MessageFormat;\n}());\n/* eslint-enable */\n\n\nvar createErrorPluralModulePresence = function() {\n\treturn createError( \"E_MISSING_PLURAL_MODULE\", \"Plural module not loaded.\" );\n};\n\n\n\n\nvar validateMessageBundle = function( cldr ) {\n\tvalidate(\n\t\t\"E_MISSING_MESSAGE_BUNDLE\",\n\t\t\"Missing message bundle for locale `{locale}`.\",\n\t\tcldr.attributes.bundle && cldr.get( \"globalize-messages/{bundle}\" ) !== undefined,\n\t\t{\n\t\t\tlocale: cldr.locale\n\t\t}\n\t);\n};\n\n\n\n\nvar validateMessagePresence = function( path, value ) {\n\tpath = path.join( \"/\" );\n\tvalidate( \"E_MISSING_MESSAGE\", \"Missing required message content `{path}`.\",\n\t\tvalue !== undefined, { path: path } );\n};\n\n\n\n\nvar validateMessageType = function( path, value ) {\n\tpath = path.join( \"/\" );\n\tvalidate(\n\t\t\"E_INVALID_MESSAGE\",\n\t\t\"Invalid message content `{path}`. {expected} expected.\",\n\t\ttypeof value === \"string\",\n\t\t{\n\t\t\texpected: \"a string\",\n\t\t\tpath: path\n\t\t}\n\t);\n};\n\n\n\n\nvar validateParameterTypeMessageVariables = function( value, name ) {\n\tvalidateParameterType(\n\t\tvalue,\n\t\tname,\n\t\tvalue === undefined || isPlainObject( value ) || Array.isArray( value ),\n\t\t\"Array or Plain Object\"\n\t);\n};\n\n\n\n\nvar messageFormatterFn = function( formatter ) {\n\treturn function messageFormatter( variables ) {\n\t\tif ( typeof variables === \"number\" || typeof variables === \"string\" ) {\n\t\t\tvariables = [].slice.call( arguments, 0 );\n\t\t}\n\t\tvalidateParameterTypeMessageVariables( variables, \"variables\" );\n\t\treturn formatter( variables );\n\t};\n};\n\n\n\n\nvar messageFormatterRuntimeBind = function( cldr, messageformatter ) {\n\tvar locale = cldr.locale,\n\t\torigToString = messageformatter.toString;\n\n\tmessageformatter.toString = function() {\n\t\tvar argNames, argValues, output,\n\t\t\targs = {};\n\n\t\t// Properly adjust SlexAxton/messageformat.js compiled variables with Globalize variables:\n\t\toutput = origToString.call( messageformatter );\n\n\t\tif ( /number\\(/.test( output ) ) {\n\t\t\targs.number = \"messageFormat.number\";\n\t\t}\n\n\t\tif ( /plural\\(/.test( output ) ) {\n\t\t\targs.plural = \"messageFormat.plural\";\n\t\t}\n\n\t\tif ( /select\\(/.test( output ) ) {\n\t\t\targs.select = \"messageFormat.select\";\n\t\t}\n\n\t\toutput.replace( /pluralFuncs(\\[([^\\]]+)\\]|\\.([a-zA-Z]+))/, function( match ) {\n\t\t\targs.pluralFuncs = \"{\" +\n\t\t\t\t\"\\\"\" + locale + \"\\\": Globalize(\\\"\" + locale + \"\\\").pluralGenerator()\" +\n\t\t\t\t\"}\";\n\t\t\treturn match;\n\t\t});\n\n\t\targNames = Object.keys( args ).join( \", \" );\n\t\targValues = Object.keys( args ).map(function( key ) {\n\t\t\treturn args[ key ];\n\t\t}).join( \", \" );\n\n\t\treturn \"(function( \" + argNames + \" ) {\\n\" +\n\t\t\t\" return \" + output + \"\\n\" +\n\t\t\t\"})(\" + argValues + \")\";\n\t};\n\n\treturn messageformatter;\n};\n\n\n\n\nvar slice = [].slice;\n\n/**\n * .loadMessages( json )\n *\n * @json [JSON]\n *\n * Load translation data.\n */\nGlobalize.loadMessages = function( json ) {\n\tvar locale,\n\t\tcustomData = {\n\t\t\t\"globalize-messages\": json,\n\t\t\t\"main\": {}\n\t\t};\n\n\tvalidateParameterPresence( json, \"json\" );\n\tvalidateParameterTypePlainObject( json, \"json\" );\n\n\t// Set available bundles by populating customData main dataset.\n\tfor ( locale in json ) {\n\t\tif ( json.hasOwnProperty( locale ) ) {\n\t\t\tcustomData.main[ locale ] = {};\n\t\t}\n\t}\n\n\tCldr.load( customData );\n};\n\n/**\n * .messageFormatter( path )\n *\n * @path [String or Array]\n *\n * Format a message given its path.\n */\nGlobalize.messageFormatter =\nGlobalize.prototype.messageFormatter = function( path ) {\n\tvar cldr, formatter, message, pluralGenerator, returnFn,\n\t\targs = slice.call( arguments, 0 );\n\n\tvalidateParameterPresence( path, \"path\" );\n\tvalidateParameterType( path, \"path\", typeof path === \"string\" || Array.isArray( path ),\n\t\t\"a String nor an Array\" );\n\n\tpath = alwaysArray( path );\n\tcldr = this.cldr;\n\n\tvalidateDefaultLocale( cldr );\n\tvalidateMessageBundle( cldr );\n\n\tmessage = cldr.get( [ \"globalize-messages/{bundle}\" ].concat( path ) );\n\tvalidateMessagePresence( path, message );\n\n\t// If message is an Array, concatenate it.\n\tif ( Array.isArray( message ) ) {\n\t\tmessage = message.join( \" \" );\n\t}\n\tvalidateMessageType( path, message );\n\n\t// Is plural module present? Yes, use its generator. Nope, use an error generator.\n\tpluralGenerator = this.plural !== undefined ?\n\t\tthis.pluralGenerator() :\n\t\tcreateErrorPluralModulePresence;\n\n\tformatter = new MessageFormat( cldr.locale, pluralGenerator ).compile( message );\n\n\treturnFn = messageFormatterFn( formatter );\n\n\truntimeBind( args, cldr, returnFn,\n\t\t[ messageFormatterRuntimeBind( cldr, formatter ), pluralGenerator ] );\n\n\treturn returnFn;\n};\n\n/**\n * .formatMessage( path [, variables] )\n *\n * @path [String or Array]\n *\n * @variables [Number, String, Array or Object]\n *\n * Format a message given its path.\n */\nGlobalize.formatMessage =\nGlobalize.prototype.formatMessage = function( path /* , variables */ ) {\n\treturn this.messageFormatter( path ).apply( {}, slice.call( arguments, 1 ) );\n};\n\nreturn Globalize;\n\n\n\n\n}));\n","/**\n * Globalize v1.7.0\n *\n * https://github.com/globalizejs/globalize\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2021-08-02T11:53Z\n */\n/*!\n * Globalize v1.7.0 2021-08-02T11:53Z Released under the MIT license\n * http://git.io/TrdQbw\n */\n(function( root, factory ) {\n\n\t// UMD returnExports\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD\n\t\tdefine([\n\t\t\t\"cldr\",\n\t\t\t\"../globalize\",\n\t\t\t\"cldr/event\",\n\t\t\t\"cldr/supplemental\"\n\t\t], factory );\n\t} else if ( typeof exports === \"object\" ) {\n\n\t\t// Node, CommonJS\n\t\tmodule.exports = factory( require( \"cldrjs\" ), require( \"../globalize\" ) );\n\t} else {\n\n\t\t// Global\n\t\tfactory( root.Cldr, root.Globalize );\n\t}\n}(this, function( Cldr, Globalize ) {\n\nvar createError = Globalize._createError,\n\tpartsJoin = Globalize._partsJoin,\n\tpartsPush = Globalize._partsPush,\n\tregexpEscape = Globalize._regexpEscape,\n\truntimeBind = Globalize._runtimeBind,\n\tstringPad = Globalize._stringPad,\n\tvalidateCldr = Globalize._validateCldr,\n\tvalidateDefaultLocale = Globalize._validateDefaultLocale,\n\tvalidateParameterPresence = Globalize._validateParameterPresence,\n\tvalidateParameterRange = Globalize._validateParameterRange,\n\tvalidateParameterType = Globalize._validateParameterType,\n\tvalidateParameterTypePlainObject = Globalize._validateParameterTypePlainObject;\n\n\nvar createErrorUnsupportedFeature = function( feature ) {\n\treturn createError( \"E_UNSUPPORTED\", \"Unsupported {feature}.\", {\n\t\tfeature: feature\n\t});\n};\n\n\n\n\nvar validateParameterTypeNumber = function( value, name ) {\n\tvalidateParameterType(\n\t\tvalue,\n\t\tname,\n\t\tvalue === undefined || typeof value === \"number\",\n\t\t\"Number\"\n\t);\n};\n\n\n\n\nvar validateParameterTypeString = function( value, name ) {\n\tvalidateParameterType(\n\t\tvalue,\n\t\tname,\n\t\tvalue === undefined || typeof value === \"string\",\n\t\t\"a string\"\n\t);\n};\n\n\n\n\nvar numberFormatterFn = function( numberToPartsFormatter ) {\n\treturn function numberFormatter( value ) {\n\t\treturn partsJoin( numberToPartsFormatter( value ));\n\t};\n};\n\n\n\n\n/**\n * NumberingSystem( cldr )\n *\n * - http://www.unicode.org/reports/tr35/tr35-numbers.html#otherNumberingSystems\n * - http://cldr.unicode.org/index/bcp47-extension\n * - http://www.unicode.org/reports/tr35/#u_Extension\n */\nvar numberNumberingSystem = function( cldr ) {\n\tvar nu = cldr.attributes[ \"u-nu\" ];\n\n\tif ( nu ) {\n\t\tif ( nu === \"traditio\" ) {\n\t\t\tnu = \"traditional\";\n\t\t}\n\t\tif ( [ \"native\", \"traditional\", \"finance\" ].indexOf( nu ) !== -1 ) {\n\n\t\t\t// Unicode locale extension `u-nu` is set using either (native, traditional or\n\t\t\t// finance). So, lookup the respective locale's numberingSystem and return it.\n\t\t\treturn cldr.main([ \"numbers/otherNumberingSystems\", nu ]);\n\t\t}\n\n\t\t// Unicode locale extension `u-nu` is set with an explicit numberingSystem. Return it.\n\t\treturn nu;\n\t}\n\n\t// Return the default numberingSystem.\n\treturn cldr.main( \"numbers/defaultNumberingSystem\" );\n};\n\n\n\n\n/**\n * Compact( name, cldr )\n *\n * @compactType [String] Compact mode, `short` or `long`.\n *\n * @cldr [Cldr instance].\n *\n * Return the localized compact map for the given compact mode.\n */\nvar numberCompact = function( compactType, cldr ) {\n\tvar maxExponent = 0;\n\n\tvar object = cldr.main([\n\t\t\"numbers/decimalFormats-numberSystem-\" + numberNumberingSystem( cldr ),\n\t\tcompactType,\n\t\t\"decimalFormat\"\n\t]);\n\n\tobject = Object.keys( object ).reduce(function( newObject, compactKey ) {\n\t\tvar numberExponent = compactKey.split( \"0\" ).length - 1;\n\t\tvar pluralForm = compactKey.split( \"-\" )[ 2 ];\n\t\tnewObject[ numberExponent ] = newObject[ numberExponent ] || {};\n\t\tnewObject[ numberExponent ][ pluralForm ] = object[ compactKey ];\n\t\tmaxExponent = Math.max( numberExponent, maxExponent );\n\t\treturn newObject;\n\t}, {});\n\n\tobject.maxExponent = maxExponent;\n\n\treturn object;\n};\n\n\n\n\n/**\n * nuMap( cldr )\n *\n * @cldr [Cldr instance].\n *\n * Return digits map if numbering system is different than `latn`.\n */\nvar numberNumberingSystemDigitsMap = function( cldr ) {\n\tvar aux,\n\t\tnu = numberNumberingSystem( cldr );\n\n\tif ( nu === \"latn\" ) {\n\t\treturn;\n\t}\n\n\taux = cldr.supplemental([ \"numberingSystems\", nu ]);\n\n\tif ( aux._type !== \"numeric\" ) {\n\t\tthrow createErrorUnsupportedFeature( \"`\" + aux._type + \"` numbering system\" );\n\t}\n\n\treturn aux._digits;\n};\n\n\n\n\n/**\n * EBNF representation:\n *\n * number_pattern_re = prefix?\n * padding?\n * (integer_fraction_pattern | significant_pattern)\n * scientific_notation?\n * suffix?\n *\n * prefix = non_number_stuff\n *\n * padding = \"*\" regexp(.)\n *\n * integer_fraction_pattern = integer_pattern\n * fraction_pattern?\n *\n * integer_pattern = regexp([#,]*[0,]*0+)\n *\n * fraction_pattern = \".\" regexp(0*[0-9]*#*)\n *\n * significant_pattern = regexp([#,]*@+#*)\n *\n * scientific_notation = regexp(E\\+?0+)\n *\n * suffix = non_number_stuff\n *\n * non_number_stuff = regexp(('[^']+'|''|[^*#@0,.E])*)\n *\n *\n * Regexp groups:\n *\n * 0: number_pattern_re\n * 1: prefix\n * 2: -\n * 3: -\n * 4: padding\n * 5: (integer_fraction_pattern | significant_pattern)\n * 6: integer_fraction_pattern\n * 7: integer_pattern\n * 8: fraction_pattern\n * 9: significant_pattern\n * 10: scientific_notation\n * 11: suffix\n * 12: -\n */\nvar numberPatternRe = ( /^(('([^']|'')*'|[^*#@0,.E])*)(\\*.)?((([#,]*[0,]*0+)(\\.0*[0-9]*#*)?)|([#,]*@+#*))(E\\+?0+)?(('[^']+'|''|[^*#@0,.E])*)$/ );\n\n\n\n\n/**\n * format( number, pattern )\n *\n * @number [Number].\n *\n * @pattern [String] raw pattern for numbers.\n *\n * Return the formatted number.\n * ref: http://www.unicode.org/reports/tr35/tr35-numbers.html\n */\nvar numberPatternProperties = function( pattern ) {\n\tvar aux1, aux2, fractionPattern, integerFractionOrSignificantPattern, integerPattern,\n\t\tmaximumFractionDigits, maximumSignificantDigits, minimumFractionDigits,\n\t\tminimumIntegerDigits, minimumSignificantDigits, padding, prefix, primaryGroupingSize,\n\t\troundIncrement, scientificNotation, secondaryGroupingSize, significantPattern, suffix;\n\n\tpattern = pattern.match( numberPatternRe );\n\tif ( !pattern ) {\n\t\tthrow new Error( \"Invalid pattern: \" + pattern );\n\t}\n\n\tprefix = pattern[ 1 ];\n\tpadding = pattern[ 4 ];\n\tintegerFractionOrSignificantPattern = pattern[ 5 ];\n\tsignificantPattern = pattern[ 9 ];\n\tscientificNotation = pattern[ 10 ];\n\tsuffix = pattern[ 11 ];\n\n\t// Significant digit format\n\tif ( significantPattern ) {\n\t\tsignificantPattern.replace( /(@+)(#*)/, function( _match, minimumSignificantDigitsMatch, maximumSignificantDigitsMatch ) {\n\t\t\tminimumSignificantDigits = minimumSignificantDigitsMatch.length;\n\t\t\tmaximumSignificantDigits = minimumSignificantDigits +\n\t\t\t\tmaximumSignificantDigitsMatch.length;\n\t\t});\n\n\t// Integer and fractional format\n\t} else {\n\t\tfractionPattern = pattern[ 8 ];\n\t\tintegerPattern = pattern[ 7 ];\n\n\t\tif ( fractionPattern ) {\n\n\t\t\t// Minimum fraction digits, and rounding.\n\t\t\tfractionPattern.replace( /[0-9]+/, function( match ) {\n\t\t\t\tminimumFractionDigits = match;\n\t\t\t});\n\t\t\tif ( minimumFractionDigits ) {\n\t\t\t\troundIncrement = +( \"0.\" + minimumFractionDigits );\n\t\t\t\tminimumFractionDigits = minimumFractionDigits.length;\n\t\t\t} else {\n\t\t\t\tminimumFractionDigits = 0;\n\t\t\t}\n\n\t\t\t// Maximum fraction digits\n\t\t\t// 1: ignore decimal character\n\t\t\tmaximumFractionDigits = fractionPattern.length - 1; /* 1 */\n\t\t} else {\n\t\t\tminimumFractionDigits = 0;\n\t\t\tmaximumFractionDigits = 0;\n\t\t}\n\n\t\t// Minimum integer digits\n\t\tintegerPattern.replace( /0+$/, function( match ) {\n\t\t\tminimumIntegerDigits = match.length;\n\t\t});\n\t}\n\n\t// Scientific notation\n\tif ( scientificNotation ) {\n\t\tthrow createErrorUnsupportedFeature({\n\t\t\tfeature: \"scientific notation (not implemented)\"\n\t\t});\n\t}\n\n\t// Padding\n\tif ( padding ) {\n\t\tthrow createErrorUnsupportedFeature({\n\t\t\tfeature: \"padding (not implemented)\"\n\t\t});\n\t}\n\n\t// Grouping\n\tif ( ( aux1 = integerFractionOrSignificantPattern.lastIndexOf( \",\" ) ) !== -1 ) {\n\n\t\t// Primary grouping size is the interval between the last group separator and the end of\n\t\t// the integer (or the end of the significant pattern).\n\t\taux2 = integerFractionOrSignificantPattern.split( \".\" )[ 0 ];\n\t\tprimaryGroupingSize = aux2.length - aux1 - 1;\n\n\t\t// Secondary grouping size is the interval between the last two group separators.\n\t\tif ( ( aux2 = integerFractionOrSignificantPattern.lastIndexOf( \",\", aux1 - 1 ) ) !== -1 ) {\n\t\t\tsecondaryGroupingSize = aux1 - 1 - aux2;\n\t\t}\n\t}\n\n\t// Return:\n\t// 0: @prefix String\n\t// 1: @padding Array [ , ] TODO\n\t// 2: @minimumIntegerDigits non-negative integer Number value indicating the minimum integer\n\t// digits to be used. Numbers will be padded with leading zeroes if necessary.\n\t// 3: @minimumFractionDigits and\n\t// 4: @maximumFractionDigits are non-negative integer Number values indicating the minimum and\n\t// maximum fraction digits to be used. Numbers will be rounded or padded with trailing\n\t// zeroes if necessary.\n\t// 5: @minimumSignificantDigits and\n\t// 6: @maximumSignificantDigits are positive integer Number values indicating the minimum and\n\t// maximum fraction digits to be shown. Either none or both of these properties are\n\t// present; if they are, they override minimum and maximum integer and fraction digits\n\t// – the formatter uses however many integer and fraction digits are required to display\n\t// the specified number of significant digits.\n\t// 7: @roundIncrement Decimal round increment or null\n\t// 8: @primaryGroupingSize\n\t// 9: @secondaryGroupingSize\n\t// 10: @suffix String\n\treturn [\n\t\tprefix,\n\t\tpadding,\n\t\tminimumIntegerDigits,\n\t\tminimumFractionDigits,\n\t\tmaximumFractionDigits,\n\t\tminimumSignificantDigits,\n\t\tmaximumSignificantDigits,\n\t\troundIncrement,\n\t\tprimaryGroupingSize,\n\t\tsecondaryGroupingSize,\n\t\tsuffix\n\t];\n};\n\n\n\n\n/**\n * Symbol( name, cldr )\n *\n * @name [String] Symbol name.\n *\n * @cldr [Cldr instance].\n *\n * Return the localized symbol given its name.\n */\nvar numberSymbol = function( name, cldr ) {\n\treturn cldr.main([\n\t\t\"numbers/symbols-numberSystem-\" + numberNumberingSystem( cldr ),\n\t\tname\n\t]);\n};\n\n\n\n\nvar numberSymbolName = {\n\t\".\": \"decimal\",\n\t\",\": \"group\",\n\t\"%\": \"percentSign\",\n\t\"+\": \"plusSign\",\n\t\"-\": \"minusSign\",\n\t\"E\": \"exponential\",\n\t\"\\u2030\": \"perMille\"\n};\n\n\n\n\n/**\n * symbolMap( cldr )\n *\n * @cldr [Cldr instance].\n *\n * Return the (localized symbol, pattern symbol) key value pair, eg. {\n * \".\": \"٫\",\n * \",\": \"٬\",\n * \"%\": \"٪\",\n * ...\n * };\n */\nvar numberSymbolMap = function( cldr ) {\n\tvar symbol,\n\t\tsymbolMap = {};\n\n\tfor ( symbol in numberSymbolName ) {\n\t\tsymbolMap[ symbol ] = numberSymbol( numberSymbolName[ symbol ], cldr );\n\t}\n\n\treturn symbolMap;\n};\n\n\n\n\nvar numberTruncate = function( value ) {\n\tif ( isNaN( value ) ) {\n\t\treturn NaN;\n\t}\n\treturn Math[ value < 0 ? \"ceil\" : \"floor\" ]( value );\n};\n\n\n\n\n/**\n * round( method )\n *\n * @method [String] with either \"round\", \"ceil\", \"floor\", or \"truncate\".\n *\n * Return function( value, incrementOrExp ):\n *\n * @value [Number] eg. 123.45.\n *\n * @incrementOrExp [Number] optional, eg. 0.1; or\n * [Object] Either { increment: } or { exponent: }\n *\n * Return the rounded number, eg:\n * - round( \"round\" )( 123.45 ): 123;\n * - round( \"ceil\" )( 123.45 ): 124;\n * - round( \"floor\" )( 123.45 ): 123;\n * - round( \"truncate\" )( 123.45 ): 123;\n * - round( \"round\" )( 123.45, 0.1 ): 123.5;\n * - round( \"round\" )( 123.45, 10 ): 120;\n *\n * Based on https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/round\n * Ref: #376\n */\nvar numberRound = function( method ) {\n\tmethod = method || \"round\";\n\tmethod = method === \"truncate\" ? numberTruncate : Math[ method ];\n\n\treturn function( value, incrementOrExp ) {\n\t\tvar exp, increment;\n\n\t\tvalue = +value;\n\n\t\t// If the value is not a number, return NaN.\n\t\tif ( isNaN( value ) ) {\n\t\t\treturn NaN;\n\t\t}\n\n\t\t// Exponent given.\n\t\tif ( typeof incrementOrExp === \"object\" && incrementOrExp.exponent ) {\n\t\t\texp = +incrementOrExp.exponent;\n\t\t\tincrement = 1;\n\n\t\t\tif ( exp === 0 ) {\n\t\t\t\treturn method( value );\n\t\t\t}\n\n\t\t\t// If the exp is not an integer, return NaN.\n\t\t\tif ( !( typeof exp === \"number\" && exp % 1 === 0 ) ) {\n\t\t\t\treturn NaN;\n\t\t\t}\n\n\t\t// Increment given.\n\t\t} else {\n\t\t\tincrement = +incrementOrExp || 1;\n\n\t\t\tif ( increment === 1 ) {\n\t\t\t\treturn method( value );\n\t\t\t}\n\n\t\t\t// If the increment is not a number, return NaN.\n\t\t\tif ( isNaN( increment ) ) {\n\t\t\t\treturn NaN;\n\t\t\t}\n\n\t\t\tincrement = increment.toExponential().split( \"e\" );\n\t\t\texp = +increment[ 1 ];\n\t\t\tincrement = +increment[ 0 ];\n\t\t}\n\n\t\t// Shift & Round\n\t\tvalue = value.toString().split( \"e\" );\n\t\tvalue[ 0 ] = +value[ 0 ] / increment;\n\t\tvalue[ 1 ] = value[ 1 ] ? ( +value[ 1 ] - exp ) : -exp;\n\t\tvalue = method( +( value[ 0 ] + \"e\" + value[ 1 ] ) );\n\n\t\t// Shift back\n\t\tvalue = value.toString().split( \"e\" );\n\t\tvalue[ 0 ] = +value[ 0 ] * increment;\n\t\tvalue[ 1 ] = value[ 1 ] ? ( +value[ 1 ] + exp ) : exp;\n\t\treturn +( value[ 0 ] + \"e\" + value[ 1 ] );\n\t};\n};\n\n\n\n\n/**\n * formatProperties( pattern, cldr [, options] )\n *\n * @pattern [String] raw pattern for numbers.\n *\n * @cldr [Cldr instance].\n *\n * @options [Object]:\n * - minimumIntegerDigits [Number]\n * - minimumFractionDigits, maximumFractionDigits [Number]\n * - minimumSignificantDigits, maximumSignificantDigits [Number]\n * - round [String] \"ceil\", \"floor\", \"round\" (default), or \"truncate\".\n * - useGrouping [Boolean] default true.\n *\n * Return the processed properties that will be used in number/format.\n * ref: http://www.unicode.org/reports/tr35/tr35-numbers.html\n */\nvar numberFormatProperties = function( pattern, cldr, options ) {\n\tvar negativePattern, negativePrefix, negativeProperties, negativeSuffix, positivePattern,\n\t\troundFn, properties;\n\n\tfunction getOptions( attribute, propertyIndex ) {\n\t\tif ( attribute in options ) {\n\t\t\tproperties[ propertyIndex ] = options[ attribute ];\n\t\t}\n\t}\n\n\toptions = options || {};\n\tpattern = pattern.split( \";\" );\n\n\tpositivePattern = pattern[ 0 ];\n\n\tnegativePattern = pattern[ 1 ] || \"-\" + positivePattern;\n\tnegativeProperties = numberPatternProperties( negativePattern );\n\tnegativePrefix = negativeProperties[ 0 ];\n\tnegativeSuffix = negativeProperties[ 10 ];\n\n\t// Have runtime code to refer to numberRound() instead of including it explicitly.\n\troundFn = numberRound( options.round );\n\troundFn.generatorString = function() {\n\t\treturn \"numberRound(\" + ( options.round ? \"\\\"\" + options.round + \"\\\"\" : \"\" ) + \")\";\n\t};\n\n\tproperties = numberPatternProperties( positivePattern ).concat([\n\t\tpositivePattern,\n\t\tnegativePrefix + positivePattern + negativeSuffix,\n\t\tnegativePrefix,\n\t\tnegativeSuffix,\n\t\troundFn,\n\t\tnumberSymbol( \"infinity\", cldr ),\n\t\tnumberSymbol( \"nan\", cldr ),\n\t\tnumberSymbolMap( cldr ),\n\t\tnumberNumberingSystemDigitsMap( cldr )\n\t]);\n\n\tif ( options.compact ) {\n\n\t\t// The compact digits number pattern is always `0+`, so override the following properties.\n\t\t// Note: minimumIntegerDigits would actually range from `0` to `000` based on the scale of\n\t\t// the value to be formatted, though we're always using 1 as a simplification, because the\n\t\t// number won't be zero-padded since we chose the right format based on the scale, i.e.,\n\t\t// we'd never see something like `003M` anyway.\n\t\tproperties[ 2 ] = 1; // minimumIntegerDigits\n\t\tproperties[ 3 ] = 0; // minimumFractionDigits\n\t\tproperties[ 4 ] = 0; // maximumFractionDigits\n\t\tproperties[ 5 ] = // minimumSignificantDigits &\n\t\t\tproperties[ 6 ] = undefined; // maximumSignificantDigits\n\n\t\tproperties[ 20 ] = numberCompact( options.compact, cldr );\n\t}\n\n\tgetOptions( \"minimumIntegerDigits\", 2 );\n\tgetOptions( \"minimumFractionDigits\", 3 );\n\tgetOptions( \"maximumFractionDigits\", 4 );\n\tgetOptions( \"minimumSignificantDigits\", 5 );\n\tgetOptions( \"maximumSignificantDigits\", 6 );\n\n\t// Grouping separators\n\tif ( options.useGrouping === false ) {\n\t\tproperties[ 8 ] = null;\n\t}\n\n\t// Normalize number of digits if only one of either minimumFractionDigits or\n\t// maximumFractionDigits is passed in as an option\n\tif ( \"minimumFractionDigits\" in options && !( \"maximumFractionDigits\" in options ) ) {\n\n\t\t// maximumFractionDigits = Math.max( minimumFractionDigits, maximumFractionDigits );\n\t\tproperties[ 4 ] = Math.max( properties[ 3 ], properties[ 4 ] );\n\t} else if ( !( \"minimumFractionDigits\" in options ) &&\n\t\t\t\"maximumFractionDigits\" in options ) {\n\n\t\t// minimumFractionDigits = Math.min( minimumFractionDigits, maximumFractionDigits );\n\t\tproperties[ 3 ] = Math.min( properties[ 3 ], properties[ 4 ] );\n\t}\n\n\t// Return:\n\t// 0-10: see number/pattern-properties.\n\t// 11: @positivePattern [String] Positive pattern.\n\t// 12: @negativePattern [String] Negative pattern.\n\t// 13: @negativePrefix [String] Negative prefix.\n\t// 14: @negativeSuffix [String] Negative suffix.\n\t// 15: @round [Function] Round function.\n\t// 16: @infinitySymbol [String] Infinity symbol.\n\t// 17: @nanSymbol [String] NaN symbol.\n\t// 18: @symbolMap [Object] A bunch of other symbols.\n\t// 19: @nuDigitsMap [Array] Digits map if numbering system is different than `latn`.\n\t// 20: @compactMap [Object] Map of per-digit-count format patterns for specified compact mode.\n\treturn properties;\n};\n\n\n\n\n/**\n * Generated by:\n *\n * var regenerate = require( \"regenerate\" );\n * var formatSymbols = require( \"@unicode/unicode-13.0.0/General_Category/Format/symbols\" );\n * regenerate().add( formatSymbols ).toString();\n *\n * https://github.com/mathiasbynens/regenerate\n * https://github.com/node-unicode/unicode-13.0.0\n */\nvar regexpCfG = /[\\xAD\\u0600-\\u0605\\u061C\\u06DD\\u070F\\u08E2\\u180E\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\uFEFF\\uFFF9-\\uFFFB]|\\uD804[\\uDCBD\\uDCCD]|\\uD80D[\\uDC30-\\uDC38]|\\uD82F[\\uDCA0-\\uDCA3]|\\uD834[\\uDD73-\\uDD7A]|\\uDB40[\\uDC01\\uDC20-\\uDC7F]/g;\n\n\n\n\n/**\n * Generated by:\n *\n * var regenerate = require( \"regenerate\" );\n * var dashSymbols = require( \"https://github.com/node-unicode/unicode-13.0.0/General_Category/Dash_Punctuation/symbols\" );\n * regenerate().add( dashSymbols ).toString();\n *\n * https://github.com/mathiasbynens/regenerate\n * https://github.com/node-unicode/unicode-13.0.0\n *\n * NOTE: In addition to [:dash:], the below includes MINUS SIGN U+2212.\n */\nvar regexpDashG = /[\\x2D\\u058A\\u05BE\\u1400\\u1806\\u2010-\\u2015\\u2E17\\u2E1A\\u2E3A\\u2E3B\\u2E40\\u301C\\u3030\\u30A0\\uFE31\\uFE32\\uFE58\\uFE63\\uFF0D\\u2212]|\\uD803\\uDEAD/g;\n\n\n\n\n/**\n * Generated by:\n *\n * var regenerate = require( \"regenerate\" );\n * var spaceSeparatorSymbols = require( \"@unicode/unicode-13.0.0/General_Category/Space_Separator/symbols\" );\n * regenerate().add( spaceSeparatorSymbols ).toString();\n *\n * https://github.com/mathiasbynens/regenerate\n * https://github.com/node-unicode/unicode-13.0.0\n */\nvar regexpZsG = /[ \\xA0\\u1680\\u2000-\\u200A\\u202F\\u205F\\u3000]/g;\n\n\n\n\n/**\n * Loose Matching:\n * - Ignore all format characters, which includes RLM, LRM or ALM used to control BIDI\n * formatting.\n * - Map all characters in [:Zs:] to U+0020 SPACE;\n * - Map all characters in [:Dash:] to U+002D HYPHEN-MINUS;\n */\nvar looseMatching = function( value ) {\n\treturn value\n\t\t.replace( regexpCfG, \"\" )\n\t\t.replace( regexpDashG, \"-\" )\n\t\t.replace( regexpZsG, \" \" );\n};\n\n\n\n\n/**\n * parse( value, properties )\n *\n * @value [String].\n *\n * @properties [Object] Parser properties is a reduced pre-processed cldr\n * data set returned by numberParserProperties().\n *\n * Return the parsed Number (including Infinity) or NaN when value is invalid.\n * ref: http://www.unicode.org/reports/tr35/tr35-numbers.html\n */\nvar numberParse = function( value, properties ) {\n\tvar grammar, invertedNuDigitsMap, invertedSymbolMap, negative, number, prefix, prefixNSuffix,\n\t\tsuffix, tokenizer, valid;\n\n\t// Grammar:\n\t// - Value <= NaN | PositiveNumber | NegativeNumber\n\t// - PositiveNumber <= PositivePrefix NumberOrInf PositiveSufix\n\t// - NegativeNumber <= NegativePrefix NumberOrInf\n\t// - NumberOrInf <= Number | Inf\n\tgrammar = [\n\t\t[ \"nan\" ],\n\t\t[ \"prefix\", \"infinity\", \"suffix\" ],\n\t\t[ \"prefix\", \"number\", \"suffix\" ],\n\t\t[ \"negativePrefix\", \"infinity\", \"negativeSuffix\" ],\n\t\t[ \"negativePrefix\", \"number\", \"negativeSuffix\" ]\n\t];\n\n\tinvertedSymbolMap = properties[ 0 ];\n\tinvertedNuDigitsMap = properties[ 1 ] || {};\n\ttokenizer = properties[ 2 ];\n\n\tvalue = looseMatching( value );\n\n\tfunction parse( type ) {\n\t\treturn function( lexeme ) {\n\n\t\t\t// Reverse localized symbols and numbering system.\n\t\t\tlexeme = lexeme.split( \"\" ).map(function( character ) {\n\t\t\t\treturn invertedSymbolMap[ character ] ||\n\t\t\t\t\tinvertedNuDigitsMap[ character ] ||\n\t\t\t\t\tcharacter;\n\t\t\t}).join( \"\" );\n\n\t\t\tswitch ( type ) {\n\t\t\t\tcase \"infinity\":\n\t\t\t\t\tnumber = Infinity;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"nan\":\n\t\t\t\t\tnumber = NaN;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"number\":\n\n\t\t\t\t\t// Remove grouping separators.\n\t\t\t\t\tlexeme = lexeme.replace( /,/g, \"\" );\n\n\t\t\t\t\tnumber = +lexeme;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"prefix\":\n\t\t\t\tcase \"negativePrefix\":\n\t\t\t\t\tprefix = lexeme;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"suffix\":\n\t\t\t\t\tsuffix = lexeme;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"negativeSuffix\":\n\t\t\t\t\tsuffix = lexeme;\n\t\t\t\t\tnegative = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\t// This should never be reached.\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error( \"Internal error\" );\n\t\t\t}\n\t\t\treturn \"\";\n\t\t};\n\t}\n\n\tfunction tokenizeNParse( _value, grammar ) {\n\t\treturn grammar.some(function( statement ) {\n\t\t\tvar value = _value;\n\n\t\t\t// The whole grammar statement should be used (i.e., .every() return true) and value be\n\t\t\t// entirely consumed (i.e., !value.length).\n\t\t\treturn statement.every(function( type ) {\n\t\t\t\tif ( value.match( tokenizer[ type ] ) === null ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\t// Consume and parse it.\n\t\t\t\tvalue = value.replace( tokenizer[ type ], parse( type ) );\n\t\t\t\treturn true;\n\t\t\t}) && !value.length;\n\t\t});\n\t}\n\n\tvalid = tokenizeNParse( value, grammar );\n\n\t// NaN\n\tif ( !valid || isNaN( number ) ) {\n\t\treturn NaN;\n\t}\n\n\tprefixNSuffix = \"\" + prefix + suffix;\n\n\t// Percent\n\tif ( prefixNSuffix.indexOf( \"%\" ) !== -1 ) {\n\t\tnumber /= 100;\n\n\t// Per mille\n\t} else if ( prefixNSuffix.indexOf( \"\\u2030\" ) !== -1 ) {\n\t\tnumber /= 1000;\n\t}\n\n\t// Negative number\n\tif ( negative ) {\n\t\tnumber *= -1;\n\t}\n\n\treturn number;\n};\n\n\n\n\nvar numberParserFn = function( properties ) {\n\treturn function numberParser( value ) {\n\t\tvalidateParameterPresence( value, \"value\" );\n\t\tvalidateParameterTypeString( value, \"value\" );\n\n\t\treturn numberParse( value, properties );\n\t};\n\n};\n\n\n\n\n/**\n * symbolMap( cldr )\n *\n * @cldr [Cldr instance].\n *\n * Return the (localized symbol, pattern symbol) key value pair, eg. {\n * \"٫\": \".\",\n * \"٬\": \",\",\n * \"٪\": \"%\",\n * ...\n * };\n */\nvar numberSymbolInvertedMap = function( cldr ) {\n\tvar symbol,\n\t\tsymbolMap = {};\n\n\tfor ( symbol in numberSymbolName ) {\n\t\tsymbolMap[ numberSymbol( numberSymbolName[ symbol ], cldr ) ] = symbol;\n\t}\n\n\treturn symbolMap;\n};\n\n\n\n\n/**\n * objectMap( object, fn)\n *\n * - object\n *\n * - fn( pair ) => pair\n */\nvar objectMap = function( object, fn ) {\n\treturn Object.keys( object ).map(function( key ) {\n\t\treturn fn([ key, object[ key ] ]);\n\t}).reduce(function( object, pair ) {\n\t\tobject[ pair[ 0 ] ] = pair[ 1 ];\n\t\treturn object;\n\t}, {});\n};\n\n\n\n\n/**\n * removeLiteralQuotes( string )\n *\n * Return:\n * - `'` if input string is `''`.\n * - `o'clock` if input string is `'o''clock'`.\n * - `foo` if input string is `foo`, i.e., return the same value in case it isn't a single-quoted\n * string.\n */\nvar removeLiteralQuotes = function( string ) {\n\tif ( string[ 0 ] + string[ string.length - 1 ] !== \"''\" ) {\n\t\treturn string;\n\t}\n\tif ( string === \"''\" ) {\n\t\treturn \"'\";\n\t}\n\treturn string.replace( /''/g, \"'\" ).slice( 1, -1 );\n};\n\n\n\n\n/**\n * parseProperties( pattern, cldr )\n *\n * @pattern [String] raw pattern for numbers.\n *\n * @cldr [Cldr instance].\n *\n * Return parser properties, used to feed parser function.\n *\n * TODO:\n * - Scientific_notation;\n * - Padding;\n */\nvar numberParseProperties = function( pattern, cldr, options ) {\n\tvar aux, decimalSymbolRe, digitsRe, groupingSeparatorRe, infinitySymbol, invertedNuDigitsMap,\n\t\tinvertedSymbolMap, maximumFractionDigits, maximumSignificantDigits,\n\t\tminimumSignificantDigits, nanSymbol, negativePrefix, negativeSuffix, nuDigitsMap,\n\t\tnumberTokenizer, prefix, primaryGroupingSize, secondaryGroupingSize, suffix, symbolMap,\n\t\tformatProperties = numberFormatProperties( pattern, cldr, options );\n\n\tprefix = looseMatching( formatProperties[ 0 ] );\n\tmaximumFractionDigits = formatProperties[ 4 ];\n\tminimumSignificantDigits = formatProperties[ 5 ];\n\tmaximumSignificantDigits = formatProperties[ 6 ];\n\tprimaryGroupingSize = formatProperties[ 8 ];\n\tsecondaryGroupingSize = formatProperties[ 9 ];\n\tsuffix = looseMatching( formatProperties[ 10 ] );\n\tnegativePrefix = looseMatching( formatProperties[ 13 ] );\n\tnegativeSuffix = looseMatching( formatProperties[ 14 ] );\n\tinfinitySymbol = looseMatching( formatProperties[ 16 ] );\n\tnanSymbol = looseMatching( formatProperties[ 17 ] );\n\tsymbolMap = objectMap( formatProperties[ 18 ], function( pair ) {\n\t\treturn [ pair[ 0 ], looseMatching( pair[ 1 ] ) ];\n\t});\n\tnuDigitsMap = formatProperties[ 19 ];\n\n\tinvertedSymbolMap = objectMap( numberSymbolInvertedMap( cldr ), function( pair ) {\n\t\treturn [ looseMatching( pair[ 0 ] ), pair[ 1 ] ];\n\t});\n\n\tdigitsRe = nuDigitsMap ? \"[\" + nuDigitsMap + \"]\" : \"\\\\d\";\n\tgroupingSeparatorRe = regexpEscape( symbolMap[ \",\" ] );\n\tdecimalSymbolRe = regexpEscape( symbolMap[ \".\" ] );\n\n\tif ( nuDigitsMap ) {\n\t\tinvertedNuDigitsMap = nuDigitsMap.split( \"\" ).reduce(function( object, localizedDigit, i ) {\n\t\t\tobject[ localizedDigit ] = String( i );\n\t\t\treturn object;\n\t\t}, {} );\n\t}\n\n\taux = [ prefix, suffix, negativePrefix, negativeSuffix ].map(function( value ) {\n\t\treturn value.replace( /('([^']|'')+'|'')|./g, function( character, literal ) {\n\n\t\t\t// Literals\n\t\t\tif ( literal ) {\n\t\t\t\treturn removeLiteralQuotes( literal );\n\t\t\t}\n\n\t\t\t// Symbols\n\t\t\tcharacter = character.replace( /[\\-+E%\\u2030]/, function( symbol ) {\n\t\t\t\treturn symbolMap[ symbol ];\n\t\t\t});\n\n\t\t\treturn character;\n\t\t});\n\t});\n\n\tprefix = aux[ 0 ];\n\tsuffix = aux[ 1 ];\n\tnegativePrefix = aux[ 2 ];\n\tnegativeSuffix = aux[ 3 ];\n\n\t// Number\n\t//\n\t// number_re = integer fraction?\n\t//\n\t// integer = digits | digits_using_grouping_separators\n\t//\n\t// fraction = regexp((.\\d+)?)\n\t//\n\t// digits = regexp(\\d+)\n\t//\n\t// digits_w_grouping_separators = digits_w_1_grouping_separators |\n\t// digits_w_2_grouping_separators\n\t//\n\t// digits_w_1_grouping_separators = regexp(\\d{1,3}(,\\d{3})+)\n\t//\n\t// digits_w_2_grouping_separators = regexp(\\d{1,2}((,\\d{2})*(,\\d{3})))\n\n\t// Integer part\n\tnumberTokenizer = digitsRe + \"+\";\n\n\t// Grouping separators\n\tif ( primaryGroupingSize ) {\n\t\tif ( secondaryGroupingSize ) {\n\t\t\taux = digitsRe + \"{1,\" + secondaryGroupingSize + \"}((\" + groupingSeparatorRe +\n\t\t\t\tdigitsRe + \"{\" + secondaryGroupingSize + \"})*(\" + groupingSeparatorRe +\n\t\t\t\tdigitsRe + \"{\" + primaryGroupingSize + \"}))\";\n\t\t} else {\n\t\t\taux = digitsRe + \"{1,\" + primaryGroupingSize + \"}(\" + groupingSeparatorRe +\n\t\t\t\tdigitsRe + \"{\" + primaryGroupingSize + \"})+\";\n\t\t}\n\t\tnumberTokenizer = \"(\" + aux + \"|\" + numberTokenizer + \")\";\n\t}\n\n\t// Fraction part? Only included if 1 or 2.\n\t// 1: Using significant digit format.\n\t// 2: Using integer and fractional format && it has a maximumFractionDigits.\n\tif ( !isNaN( minimumSignificantDigits * maximumSignificantDigits ) || /* 1 */\n\t\t\t\tmaximumFractionDigits /* 2 */ ) {\n\n\t\t// 1: Handle trailing decimal separator, e.g., `\"1.\" => `1``.\n\t\taux = decimalSymbolRe + digitsRe + \"+\";\n\t\tnumberTokenizer = numberTokenizer + \"(\" + aux + \"|\" + decimalSymbolRe /* 1 */ + \")?\" +\n\n\t\t\t// Handle non-padded decimals, e.g., `\".12\"` => `0.12` by making the integer part\n\t\t\t// optional.\n\t\t\t\"|(\" + numberTokenizer + \")?\" + aux;\n\n\t\tnumberTokenizer = \"(\" + numberTokenizer + \")\";\n\t}\n\n\t// 0: @invertedSymbolMap [Object] Inverted symbol map.\n\t// 1: @invertedNuDigitsMap [Object] Inverted digits map if numbering system is different than\n\t// `latn`.\n\t// 2: @tokenizer [Object] Tokenizer map, used by parser to consume input.\n\treturn [\n\t\tinvertedSymbolMap,\n\t\tinvertedNuDigitsMap,\n\t\t{\n\t\t\tinfinity: new RegExp( \"^\" + regexpEscape( infinitySymbol ) ),\n\t\t\tnan: new RegExp( \"^\" + regexpEscape( nanSymbol ) ),\n\t\t\tnegativePrefix: new RegExp( \"^\" + regexpEscape( negativePrefix ) ),\n\t\t\tnegativeSuffix: new RegExp( \"^\" + regexpEscape( negativeSuffix ) ),\n\t\t\tnumber: new RegExp( \"^\" + numberTokenizer ),\n\t\t\tprefix: new RegExp( \"^\" + regexpEscape( prefix ) ),\n\t\t\tsuffix: new RegExp( \"^\" + regexpEscape( suffix ) )\n\t\t}\n\t];\n\n};\n\n\n\n\n/**\n * Pattern( style )\n *\n * @style [String] \"decimal\" (default) or \"percent\".\n *\n * @cldr [Cldr instance].\n */\nvar numberPattern = function( style, cldr ) {\n\tif ( style !== \"decimal\" && style !== \"percent\" ) {\n\t\tthrow new Error( \"Invalid style\" );\n\t}\n\n\treturn cldr.main([\n\t\t\"numbers\",\n\t\tstyle + \"Formats-numberSystem-\" + numberNumberingSystem( cldr ),\n\t\t\"standard\"\n\t]);\n};\n\n\n\n\n/**\n * EBNF representation:\n *\n * compact_pattern_re = prefix?\n * number_pattern_re\n * suffix?\n *\n * number_pattern_re = 0+\n *\n * Regexp groups:\n *\n * 0: compact_pattern_re\n * 1: prefix\n * 2: number_pattern_re (the number pattern to use in compact mode)\n * 3: suffix\n */\nvar numberCompactPatternRe = ( /^([^0]*)(0+)([^0]*)$/ );\n\n\n\n\n/**\n * goupingSeparator( number, primaryGroupingSize, secondaryGroupingSize )\n *\n * @number [Number].\n *\n * @primaryGroupingSize [Number]\n *\n * @secondaryGroupingSize [Number]\n *\n * Return the formatted number with group separator.\n */\nvar numberFormatGroupingSeparator = function( number, primaryGroupingSize, secondaryGroupingSize ) {\n\tvar index,\n\t\tcurrentGroupingSize = primaryGroupingSize,\n\t\tret = \"\",\n\t\tsep = \",\",\n\t\tswitchToSecondary = secondaryGroupingSize ? true : false;\n\n\tnumber = String( number ).split( \".\" );\n\tindex = number[ 0 ].length;\n\n\twhile ( index > currentGroupingSize ) {\n\t\tret = number[ 0 ].slice( index - currentGroupingSize, index ) +\n\t\t\t( ret.length ? sep : \"\" ) + ret;\n\t\tindex -= currentGroupingSize;\n\t\tif ( switchToSecondary ) {\n\t\t\tcurrentGroupingSize = secondaryGroupingSize;\n\t\t\tswitchToSecondary = false;\n\t\t}\n\t}\n\n\tnumber[ 0 ] = number[ 0 ].slice( 0, index ) + ( ret.length ? sep : \"\" ) + ret;\n\treturn number.join( \".\" );\n};\n\n\n\n\n/**\n * integerFractionDigits( number, minimumIntegerDigits, minimumFractionDigits,\n * maximumFractionDigits, round, roundIncrement )\n *\n * @number [Number]\n *\n * @minimumIntegerDigits [Number]\n *\n * @minimumFractionDigits [Number]\n *\n * @maximumFractionDigits [Number]\n *\n * @round [Function]\n *\n * @roundIncrement [Function]\n *\n * Return the formatted integer and fraction digits.\n */\nvar numberFormatIntegerFractionDigits = function( number, minimumIntegerDigits, minimumFractionDigits, maximumFractionDigits, round,\n\troundIncrement ) {\n\n\t// Fraction\n\tif ( maximumFractionDigits ) {\n\n\t\t// Rounding\n\t\tif ( roundIncrement ) {\n\t\t\tnumber = round( number, roundIncrement );\n\n\t\t// Maximum fraction digits\n\t\t} else {\n\t\t\tnumber = round( number, { exponent: -maximumFractionDigits } );\n\t\t}\n\n\t} else {\n\t\tnumber = round( number );\n\t}\n\n\tnumber = String( number );\n\n\t// Maximum integer digits (post string phase)\n\tif ( maximumFractionDigits && /e-/.test( number ) ) {\n\n\t\t// Use toFixed( maximumFractionDigits ) to make sure small numbers like 1e-7 are\n\t\t// displayed using plain digits instead of scientific notation.\n\t\t// 1: Remove leading decimal zeros.\n\t\t// 2: Remove leading decimal separator.\n\t\t// Note: String() is still preferred so it doesn't mess up with a number precision\n\t\t// unnecessarily, e.g., (123456789.123).toFixed(10) === \"123456789.1229999959\",\n\t\t// String(123456789.123) === \"123456789.123\".\n\t\tnumber = ( +number ).toFixed( maximumFractionDigits )\n\t\t\t.replace( /0+$/, \"\" ) /* 1 */\n\t\t\t.replace( /\\.$/, \"\" ); /* 2 */\n\t}\n\n\t// Minimum fraction digits (post string phase)\n\tif ( minimumFractionDigits ) {\n\t\tnumber = number.split( \".\" );\n\t\tnumber[ 1 ] = stringPad( number[ 1 ] || \"\", minimumFractionDigits, true );\n\t\tnumber = number.join( \".\" );\n\t}\n\n\t// Minimum integer digits\n\tif ( minimumIntegerDigits ) {\n\t\tnumber = number.split( \".\" );\n\t\tnumber[ 0 ] = stringPad( number[ 0 ], minimumIntegerDigits );\n\t\tnumber = number.join( \".\" );\n\t}\n\n\treturn number;\n};\n\n\n\n\n/**\n * toPrecision( number, precision, round )\n *\n * @number (Number)\n *\n * @precision (Number) significant figures precision (not decimal precision).\n *\n * @round (Function)\n *\n * Return number.toPrecision( precision ) using the given round function.\n */\nvar numberToPrecision = function( number, precision, round ) {\n\tvar roundOrder;\n\n\tif ( number === 0 ) { // Fix #706\n\t\treturn number;\n\t}\n\n\troundOrder = Math.ceil( Math.log( Math.abs( number ) ) / Math.log( 10 ) );\n\troundOrder -= precision;\n\n\treturn round( number, { exponent: roundOrder } );\n};\n\n\n\n\n/**\n * toPrecision( number, minimumSignificantDigits, maximumSignificantDigits, round )\n *\n * @number [Number]\n *\n * @minimumSignificantDigits [Number]\n *\n * @maximumSignificantDigits [Number]\n *\n * @round [Function]\n *\n * Return the formatted significant digits number.\n */\nvar numberFormatSignificantDigits = function( number, minimumSignificantDigits, maximumSignificantDigits, round ) {\n\tvar atMinimum, atMaximum;\n\n\t// Sanity check.\n\tif ( minimumSignificantDigits > maximumSignificantDigits ) {\n\t\tmaximumSignificantDigits = minimumSignificantDigits;\n\t}\n\n\tatMinimum = numberToPrecision( number, minimumSignificantDigits, round );\n\tatMaximum = numberToPrecision( number, maximumSignificantDigits, round );\n\n\t// Use atMaximum only if it has more significant digits than atMinimum.\n\tnumber = +atMinimum === +atMaximum ? atMinimum : atMaximum;\n\n\t// Expand integer numbers, eg. 123e5 to 12300.\n\tnumber = ( +number ).toString( 10 );\n\n\tif ( ( /e/ ).test( number ) ) {\n\t\tthrow createErrorUnsupportedFeature({\n\t\t\tfeature: \"integers out of (1e21, 1e-7)\"\n\t\t});\n\t}\n\n\t// Add trailing zeros if necessary.\n\tif ( minimumSignificantDigits - number.replace( /^0+|\\./g, \"\" ).length > 0 ) {\n\t\tnumber = number.split( \".\" );\n\t\tnumber[ 1 ] = stringPad( number[ 1 ] || \"\", minimumSignificantDigits - number[ 0 ].replace( /^0+/, \"\" ).length, true );\n\t\tnumber = number.join( \".\" );\n\t}\n\n\treturn number;\n};\n\n\n\n\n/**\n * format( number, properties )\n *\n * @number [Number].\n *\n * @properties [Object] Output of number/format-properties.\n *\n * Return the formatted number.\n * ref: http://www.unicode.org/reports/tr35/tr35-numbers.html\n */\nvar numberFormat = function( number, properties, pluralGenerator ) {\n\tvar aux, compactMap, infinitySymbol, maximumFractionDigits, maximumSignificantDigits,\n\t\tminimumFractionDigits, minimumIntegerDigits, minimumSignificantDigits, nanSymbol,\n\t\tnuDigitsMap, prefix, primaryGroupingSize, pattern, round, roundIncrement,\n\t\tsecondaryGroupingSize, stringToParts, suffix, symbolMap;\n\n\tminimumIntegerDigits = properties[ 2 ];\n\tminimumFractionDigits = properties[ 3 ];\n\tmaximumFractionDigits = properties[ 4 ];\n\tminimumSignificantDigits = properties[ 5 ];\n\tmaximumSignificantDigits = properties[ 6 ];\n\troundIncrement = properties[ 7 ];\n\tprimaryGroupingSize = properties[ 8 ];\n\tsecondaryGroupingSize = properties[ 9 ];\n\tround = properties[ 15 ];\n\tinfinitySymbol = properties[ 16 ];\n\tnanSymbol = properties[ 17 ];\n\tsymbolMap = properties[ 18 ];\n\tnuDigitsMap = properties[ 19 ];\n\tcompactMap = properties[ 20 ];\n\n\t// NaN\n\tif ( isNaN( number ) ) {\n\t\treturn [ { type: \"nan\", value: nanSymbol } ];\n\t}\n\n\tif ( number < 0 ) {\n\t\tpattern = properties[ 12 ];\n\t\tprefix = properties[ 13 ];\n\t\tsuffix = properties[ 14 ];\n\t} else {\n\t\tpattern = properties[ 11 ];\n\t\tprefix = properties[ 0 ];\n\t\tsuffix = properties[ 10 ];\n\t}\n\n\t// For prefix, suffix, and number parts.\n\tstringToParts = function( string ) {\n\t\tvar numberType = \"integer\",\n\t\t\tparts = [];\n\n\t\t// TODO Move the tokenization of all parts that don't depend on number into\n\t\t// format-properties.\n\t\tstring.replace( /('([^']|'')+'|'')|./g, function( character, literal ) {\n\n\t\t\t// Literals\n\t\t\tif ( literal ) {\n\t\t\t\tpartsPush( parts, \"literal\", removeLiteralQuotes( literal ) );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Currency symbol\n\t\t\tif ( character === \"\\u00A4\" ) {\n\t\t\t\tpartsPush( parts, \"currency\", character );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Symbols\n\t\t\tcharacter = character.replace( /[.,\\-+E%\\u2030]/, function( symbol ) {\n\t\t\t\tif ( symbol === \".\" ) {\n\t\t\t\t\tnumberType = \"fraction\";\n\t\t\t\t}\n\t\t\t\tpartsPush( parts, numberSymbolName[ symbol ], symbolMap[ symbol ] );\n\n\t\t\t\t// \"Erase\" handled character.\n\t\t\t\treturn \"\";\n\t\t\t});\n\n\t\t\t// Number\n\t\t\tcharacter = character.replace( /[0-9]/, function( digit ) {\n\n\t\t\t\t// Numbering system\n\t\t\t\tif ( nuDigitsMap ) {\n\t\t\t\t\tdigit = nuDigitsMap[ +digit ];\n\t\t\t\t}\n\t\t\t\tpartsPush( parts, numberType, digit );\n\n\t\t\t\t// \"Erase\" handled character.\n\t\t\t\treturn \"\";\n\t\t\t});\n\n\t\t\t// Etc\n\t\t\tcharacter.replace( /./, function( etc ) {\n\t\t\t\tpartsPush( parts, \"literal\", etc );\n\t\t\t});\n\t\t});\n\t\treturn parts;\n\t};\n\n\tprefix = stringToParts( prefix );\n\tsuffix = stringToParts( suffix );\n\n\t// Infinity\n\tif ( !isFinite( number ) ) {\n\t\treturn prefix.concat(\n\t\t\t{ type: \"infinity\", value: infinitySymbol },\n\t\t\tsuffix\n\t\t);\n\t}\n\n\t// Percent\n\tif ( pattern.indexOf( \"%\" ) !== -1 ) {\n\t\tnumber *= 100;\n\n\t// Per mille\n\t} else if ( pattern.indexOf( \"\\u2030\" ) !== -1 ) {\n\t\tnumber *= 1000;\n\t}\n\n\tvar compactPattern, compactDigits, compactProperties, divisor, numberExponent, pluralForm;\n\n\t// Compact mode: initial number digit processing\n\tif ( compactMap ) {\n\t\tnumberExponent = Math.abs( Math.floor( number ) ).toString().length - 1;\n\t\tnumberExponent = Math.min( numberExponent, compactMap.maxExponent );\n\n\t\t// Use default plural form to perform initial decimal shift\n\t\tif ( numberExponent >= 3 ) {\n\t\t\tcompactPattern = compactMap[ numberExponent ] && compactMap[ numberExponent ].other;\n\t\t}\n\n\t\tif ( compactPattern === \"0\" ) {\n\t\t\tcompactPattern = null;\n\t\t} else if ( compactPattern ) {\n\t\t\tcompactDigits = compactPattern.split( \"0\" ).length - 1;\n\t\t\tdivisor = numberExponent - ( compactDigits - 1 );\n\t\t\tnumber = number / Math.pow( 10, divisor );\n\t\t}\n\t}\n\n\t// Significant digit format\n\tif ( !isNaN( minimumSignificantDigits * maximumSignificantDigits ) ) {\n\t\tnumber = numberFormatSignificantDigits( number, minimumSignificantDigits,\n\t\t\tmaximumSignificantDigits, round );\n\n\t// Integer and fractional format\n\t} else {\n\t\tnumber = numberFormatIntegerFractionDigits( number, minimumIntegerDigits,\n\t\t\tminimumFractionDigits, maximumFractionDigits, round, roundIncrement );\n\t}\n\n\t// Compact mode: apply formatting\n\tif ( compactMap && compactPattern ) {\n\n\t\t// Get plural form after possible roundings\n\t\tpluralForm = pluralGenerator ? pluralGenerator( +number ) : \"other\";\n\n\t\tcompactPattern = compactMap[ numberExponent ][ pluralForm ] || compactPattern;\n\t\tcompactProperties = compactPattern.match( numberCompactPatternRe );\n\n\t\t// TODO Move the tokenization of all parts that don't depend on number into\n\t\t// format-properties.\n\t\taux = function( string ) {\n\t\t\tvar parts = [];\n\t\t\tstring.replace( /(\\s+)|([^\\s0]+)/g, function( _garbage, space, compact ) {\n\n\t\t\t\t// Literals\n\t\t\t\tif ( space ) {\n\t\t\t\t\tpartsPush( parts, \"literal\", space );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Compact value\n\t\t\t\tif ( compact ) {\n\t\t\t\t\tpartsPush( parts, \"compact\", compact );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn parts;\n\t\t};\n\n\t\t// update prefix/suffix with compact prefix/suffix\n\t\tprefix = prefix.concat( aux( compactProperties[ 1 ] ) );\n\t\tsuffix = aux( compactProperties[ 3 ] ).concat( suffix );\n\t}\n\n\t// Remove the possible number minus sign\n\tnumber = number.replace( /^-/, \"\" );\n\n\t// Grouping separators\n\tif ( primaryGroupingSize ) {\n\t\tnumber = numberFormatGroupingSeparator( number, primaryGroupingSize,\n\t\t\tsecondaryGroupingSize );\n\t}\n\n\t// Scientific notation\n\t// TODO implement here\n\n\t// Padding/'([^']|'')+'|''|[.,\\-+E%\\u2030]/g\n\t// TODO implement here\n\n\treturn prefix.concat(\n\t\tstringToParts( number ),\n\t\tsuffix\n\t);\n};\n\n\n\n\nvar numberToPartsFormatterFn = function( properties, pluralGenerator ) {\n\treturn function numberToPartsFormatter( value ) {\n\t\tvalidateParameterPresence( value, \"value\" );\n\t\tvalidateParameterTypeNumber( value, \"value\" );\n\n\t\treturn numberFormat( value, properties, pluralGenerator );\n\t};\n};\n\n\n\n\nfunction validateDigits( properties ) {\n\tvar minimumIntegerDigits = properties[ 2 ],\n\t\tminimumFractionDigits = properties[ 3 ],\n\t\tmaximumFractionDigits = properties[ 4 ],\n\t\tminimumSignificantDigits = properties[ 5 ],\n\t\tmaximumSignificantDigits = properties[ 6 ];\n\n\t// Validate significant digit format properties\n\tif ( !isNaN( minimumSignificantDigits * maximumSignificantDigits ) ) {\n\t\tvalidateParameterRange( minimumSignificantDigits, \"minimumSignificantDigits\", 1, 21 );\n\t\tvalidateParameterRange( maximumSignificantDigits, \"maximumSignificantDigits\",\n\t\t\tminimumSignificantDigits, 21 );\n\n\t} else if ( !isNaN( minimumSignificantDigits ) || !isNaN( maximumSignificantDigits ) ) {\n\t\tthrow new Error( \"Neither or both the minimum and maximum significant digits must be \" +\n\t\t\t\"present\" );\n\n\t// Validate integer and fractional format\n\t} else {\n\t\tvalidateParameterRange( minimumIntegerDigits, \"minimumIntegerDigits\", 1, 21 );\n\t\tvalidateParameterRange( minimumFractionDigits, \"minimumFractionDigits\", 0, 20 );\n\t\tvalidateParameterRange( maximumFractionDigits, \"maximumFractionDigits\",\n\t\t\tminimumFractionDigits, 20 );\n\t}\n}\n\n/**\n * .numberFormatter( [options] )\n *\n * @options [Object]:\n * - style: [String] \"decimal\" (default) or \"percent\".\n * - see also number/format options.\n *\n * Return a function that formats a number according to the given options and default/instance\n * locale.\n */\nGlobalize.numberFormatter =\nGlobalize.prototype.numberFormatter = function( options ) {\n\tvar args, numberToPartsFormatter, returnFn;\n\n\tvalidateParameterTypePlainObject( options, \"options\" );\n\n\toptions = options || {};\n\targs = [ options ];\n\n\tnumberToPartsFormatter = this.numberToPartsFormatter( options );\n\treturnFn = numberFormatterFn( numberToPartsFormatter );\n\truntimeBind( args, this.cldr, returnFn, [ numberToPartsFormatter ] );\n\n\treturn returnFn;\n};\n\n/**\n * .numberToPartsFormatter( [options] )\n *\n * @options [Object]:\n * - style: [String] \"symbol\" (default), \"accounting\", \"code\" or \"name\".\n * - see also number/format options.\n *\n * Return a function that formats a number to parts according to the given options and\n * default/instance locale.\n */\nGlobalize.numberToPartsFormatter =\nGlobalize.prototype.numberToPartsFormatter = function( options ) {\n\tvar args, cldr, fnArgs, pattern, properties, returnFn;\n\n\tvalidateParameterTypePlainObject( options, \"options\" );\n\n\toptions = options || {};\n\tcldr = this.cldr;\n\n\targs = [ options ];\n\n\tvalidateDefaultLocale( cldr );\n\n\tcldr.on( \"get\", validateCldr );\n\ttry {\n\t\tif ( options.raw ) {\n\t\t\tpattern = options.raw;\n\t\t} else {\n\t\t\tpattern = numberPattern( options.style || \"decimal\", cldr );\n\t\t}\n\n\t\tproperties = numberFormatProperties( pattern, cldr, options );\n\t\tfnArgs = [ properties ];\n\t} finally {\n\t\tcldr.off( \"get\", validateCldr );\n\t}\n\n\tvalidateDigits( properties );\n\n\tif ( options.compact ) {\n\t\tfnArgs.push( this.pluralGenerator() );\n\t}\n\treturnFn = numberToPartsFormatterFn.apply( null, fnArgs );\n\truntimeBind( args, cldr, returnFn, fnArgs );\n\n\treturn returnFn;\n};\n\n/**\n * .numberParser( [options] )\n *\n * @options [Object]:\n * - style: [String] \"decimal\" (default) or \"percent\".\n *\n * Return the number parser according to the default/instance locale.\n */\nGlobalize.numberParser =\nGlobalize.prototype.numberParser = function( options ) {\n\tvar args, cldr, pattern, properties, returnFn;\n\n\tvalidateParameterTypePlainObject( options, \"options\" );\n\n\toptions = options || {};\n\tcldr = this.cldr;\n\n\targs = [ options ];\n\n\tvalidateDefaultLocale( cldr );\n\tif ( options.compact ) {\n\t\tthrow createErrorUnsupportedFeature({\n\t\t\tfeature: \"compact number parsing (not implemented)\"\n\t\t});\n\t}\n\n\tcldr.on( \"get\", validateCldr );\n\n\tif ( options.raw ) {\n\t\tpattern = options.raw;\n\t} else {\n\t\tpattern = numberPattern( options.style || \"decimal\", cldr );\n\t}\n\n\tproperties = numberParseProperties( pattern, cldr, options );\n\n\tcldr.off( \"get\", validateCldr );\n\n\treturnFn = numberParserFn( properties );\n\n\truntimeBind( args, cldr, returnFn, [ properties ] );\n\n\treturn returnFn;\n};\n\n/**\n * .formatNumber( value [, options] )\n *\n * @value [Number] number to be formatted.\n *\n * @options [Object]: see number/format-properties.\n *\n * Format a number according to the given options and default/instance locale.\n */\nGlobalize.formatNumber =\nGlobalize.prototype.formatNumber = function( value, options ) {\n\tvalidateParameterPresence( value, \"value\" );\n\tvalidateParameterTypeNumber( value, \"value\" );\n\n\treturn this.numberFormatter( options )( value );\n};\n\n/**\n * .formatNumberToParts( value [, options] )\n *\n * @value [Number] number to be formatted.\n *\n * @options [Object]: see number/format-properties.\n *\n * Format a number to pars according to the given options and default/instance locale.\n */\nGlobalize.formatNumberToParts =\nGlobalize.prototype.formatNumberToParts = function( value, options ) {\n\tvalidateParameterPresence( value, \"value\" );\n\tvalidateParameterTypeNumber( value, \"value\" );\n\n\treturn this.numberToPartsFormatter( options )( value );\n};\n\n/**\n * .parseNumber( value [, options] )\n *\n * @value [String]\n *\n * @options [Object]: See numberParser().\n *\n * Return the parsed Number (including Infinity) or NaN when value is invalid.\n */\nGlobalize.parseNumber =\nGlobalize.prototype.parseNumber = function( value, options ) {\n\tvalidateParameterPresence( value, \"value\" );\n\tvalidateParameterTypeString( value, \"value\" );\n\n\treturn this.numberParser( options )( value );\n};\n\n/**\n * Optimization to avoid duplicating some internal functions across modules.\n */\nGlobalize._createErrorUnsupportedFeature = createErrorUnsupportedFeature;\nGlobalize._numberNumberingSystem = numberNumberingSystem;\nGlobalize._numberNumberingSystemDigitsMap = numberNumberingSystemDigitsMap;\nGlobalize._numberPattern = numberPattern;\nGlobalize._numberSymbol = numberSymbol;\nGlobalize._looseMatching = looseMatching;\nGlobalize._removeLiteralQuotes = removeLiteralQuotes;\nGlobalize._stringPad = stringPad;\nGlobalize._validateParameterTypeNumber = validateParameterTypeNumber;\nGlobalize._validateParameterTypeString = validateParameterTypeString;\n\nreturn Globalize;\n\n\n\n\n}));\n","/**\n * Globalize v1.7.0\n *\n * https://github.com/globalizejs/globalize\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2021-08-02T11:53Z\n */\n/*!\n * Globalize v1.7.0 2021-08-02T11:53Z Released under the MIT license\n * http://git.io/TrdQbw\n */\n(function( root, factory ) {\n\n\t// UMD returnExports\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD\n\t\tdefine([\n\t\t\t\"cldr\",\n\t\t\t\"../globalize\",\n\t\t\t\"cldr/event\",\n\t\t\t\"cldr/supplemental\"\n\t\t], factory );\n\t} else if ( typeof exports === \"object\" ) {\n\n\t\t// Node, CommonJS\n\t\tmodule.exports = factory( require( \"cldrjs\" ), require( \"../globalize\" ) );\n\t} else {\n\n\t\t// Global\n\t\tfactory( root.Cldr, root.Globalize );\n\t}\n}(this, function( Cldr, Globalize ) {\n\nvar runtimeBind = Globalize._runtimeBind,\n\tvalidateCldr = Globalize._validateCldr,\n\tvalidateDefaultLocale = Globalize._validateDefaultLocale,\n\tvalidateParameterPresence = Globalize._validateParameterPresence,\n\tvalidateParameterType = Globalize._validateParameterType,\n\tvalidateParameterTypePlainObject = Globalize._validateParameterTypePlainObject;\nvar MakePlural;\n/* eslint-disable */\nMakePlural = (function() {\n'use strict';\n\nvar _toArray = function (arr) { return Array.isArray(arr) ? arr : Array.from(arr); };\n\nvar _toConsumableArray = function (arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; return arr2; } else { return Array.from(arr); } };\n\nvar _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } };\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n\n/**\n * make-plural.js -- https://github.com/eemeli/make-plural.js/\n * Copyright (c) 2014-2015 by Eemeli Aro \n *\n * Permission to use, copy, modify, and/or distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * The software is provided \"as is\" and the author disclaims all warranties\n * with regard to this software including all implied warranties of\n * merchantability and fitness. In no event shall the author be liable for\n * any special, direct, indirect, or consequential damages or any damages\n * whatsoever resulting from loss of use, data or profits, whether in an\n * action of contract, negligence or other tortious action, arising out of\n * or in connection with the use or performance of this software.\n */\n\nvar Parser = (function () {\n function Parser() {\n _classCallCheck(this, Parser);\n }\n\n _createClass(Parser, [{\n key: 'parse',\n value: function parse(cond) {\n var _this = this;\n\n if (cond === 'i = 0 or n = 1') {\n return 'n >= 0 && n <= 1';\n }if (cond === 'i = 0,1') {\n return 'n >= 0 && n < 2';\n }if (cond === 'i = 1 and v = 0') {\n this.v0 = 1;\n return 'n == 1 && v0';\n }\n return cond.replace(/([tv]) (!?)= 0/g, function (m, sym, noteq) {\n var sn = sym + '0';\n _this[sn] = 1;\n return noteq ? '!' + sn : sn;\n }).replace(/\\b[fintv]\\b/g, function (m) {\n _this[m] = 1;\n return m;\n }).replace(/([fin]) % (10+)/g, function (m, sym, num) {\n var sn = sym + num;\n _this[sn] = 1;\n return sn;\n }).replace(/n10+ = 0/g, 't0 && $&').replace(/(\\w+ (!?)= )([0-9.]+,[0-9.,]+)/g, function (m, se, noteq, x) {\n if (m === 'n = 0,1') return '(n == 0 || n == 1)';\n if (noteq) return se + x.split(',').join(' && ' + se);\n return '(' + se + x.split(',').join(' || ' + se) + ')';\n }).replace(/(\\w+) (!?)= ([0-9]+)\\.\\.([0-9]+)/g, function (m, sym, noteq, x0, x1) {\n if (Number(x0) + 1 === Number(x1)) {\n if (noteq) return '' + sym + ' != ' + x0 + ' && ' + sym + ' != ' + x1;\n return '(' + sym + ' == ' + x0 + ' || ' + sym + ' == ' + x1 + ')';\n }\n if (noteq) return '(' + sym + ' < ' + x0 + ' || ' + sym + ' > ' + x1 + ')';\n if (sym === 'n') {\n _this.t0 = 1;return '(t0 && n >= ' + x0 + ' && n <= ' + x1 + ')';\n }\n return '(' + sym + ' >= ' + x0 + ' && ' + sym + ' <= ' + x1 + ')';\n }).replace(/ and /g, ' && ').replace(/ or /g, ' || ').replace(/ = /g, ' == ');\n }\n }, {\n key: 'vars',\n value: (function (_vars) {\n function vars() {\n return _vars.apply(this, arguments);\n }\n\n vars.toString = function () {\n return _vars.toString();\n };\n\n return vars;\n })(function () {\n var vars = [];\n if (this.i) vars.push('i = s[0]');\n if (this.f || this.v) vars.push('f = s[1] || \\'\\'');\n if (this.t) vars.push('t = (s[1] || \\'\\').replace(/0+$/, \\'\\')');\n if (this.v) vars.push('v = f.length');\n if (this.v0) vars.push('v0 = !s[1]');\n if (this.t0 || this.n10 || this.n100) vars.push('t0 = Number(s[0]) == n');\n for (var k in this) {\n if (/^.10+$/.test(k)) {\n var k0 = k[0] === 'n' ? 't0 && s[0]' : k[0];\n vars.push('' + k + ' = ' + k0 + '.slice(-' + k.substr(2).length + ')');\n }\n }if (!vars.length) return '';\n return 'var ' + ['s = String(n).split(\\'.\\')'].concat(vars).join(', ');\n })\n }]);\n\n return Parser;\n})();\n\n\n\nvar MakePlural = (function () {\n function MakePlural(lc) {\n var _ref = arguments[1] === undefined ? MakePlural : arguments[1];\n\n var cardinals = _ref.cardinals;\n var ordinals = _ref.ordinals;\n\n _classCallCheck(this, MakePlural);\n\n if (!cardinals && !ordinals) throw new Error('At least one type of plural is required');\n this.lc = lc;\n this.categories = { cardinal: [], ordinal: [] };\n this.parser = new Parser();\n \n this.fn = this.buildFunction(cardinals, ordinals);\n this.fn._obj = this;\n this.fn.categories = this.categories;\n \n this.fn.toString = this.fnToString.bind(this);\n return this.fn;\n }\n\n _createClass(MakePlural, [{\n key: 'compile',\n value: function compile(type, req) {\n var cases = [];\n var rules = MakePlural.rules[type][this.lc];\n if (!rules) {\n if (req) throw new Error('Locale \"' + this.lc + '\" ' + type + ' rules not found');\n this.categories[type] = ['other'];\n return '\\'other\\'';\n }\n for (var r in rules) {\n var _rules$r$trim$split = rules[r].trim().split(/\\s*@\\w*/);\n\n var _rules$r$trim$split2 = _toArray(_rules$r$trim$split);\n\n var cond = _rules$r$trim$split2[0];\n var examples = _rules$r$trim$split2.slice(1);\n var cat = r.replace('pluralRule-count-', '');\n if (cond) cases.push([this.parser.parse(cond), cat]);\n \n }\n this.categories[type] = cases.map(function (c) {\n return c[1];\n }).concat('other');\n if (cases.length === 1) {\n return '(' + cases[0][0] + ') ? \\'' + cases[0][1] + '\\' : \\'other\\'';\n } else {\n return [].concat(_toConsumableArray(cases.map(function (c) {\n return '(' + c[0] + ') ? \\'' + c[1] + '\\'';\n })), ['\\'other\\'']).join('\\n : ');\n }\n }\n }, {\n key: 'buildFunction',\n value: function buildFunction(cardinals, ordinals) {\n var _this3 = this;\n\n var compile = function compile(c) {\n return c ? (c[1] ? 'return ' : 'if (ord) return ') + _this3.compile.apply(_this3, _toConsumableArray(c)) : '';\n },\n fold = { vars: function vars(str) {\n return (' ' + str + ';').replace(/(.{1,78})(,|$) ?/g, '$1$2\\n ');\n },\n cond: function cond(str) {\n return (' ' + str + ';').replace(/(.{1,78}) (\\|\\| |$) ?/gm, '$1\\n $2');\n } },\n cond = [ordinals && ['ordinal', !cardinals], cardinals && ['cardinal', true]].map(compile).map(fold.cond),\n body = [fold.vars(this.parser.vars())].concat(_toConsumableArray(cond)).join('\\n').replace(/\\s+$/gm, '').replace(/^[\\s;]*[\\r\\n]+/gm, ''),\n args = ordinals && cardinals ? 'n, ord' : 'n';\n return new Function(args, body);\n }\n }, {\n key: 'fnToString',\n value: function fnToString(name) {\n return Function.prototype.toString.call(this.fn).replace(/^function( \\w+)?/, name ? 'function ' + name : 'function').replace('\\n/**/', '');\n }\n }], [{\n key: 'load',\n value: function load() {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n args.forEach(function (cldr) {\n var data = cldr && cldr.supplemental || null;\n if (!data) throw new Error('Data does not appear to be CLDR data');\n MakePlural.rules = {\n cardinal: data['plurals-type-cardinal'] || MakePlural.rules.cardinal,\n ordinal: data['plurals-type-ordinal'] || MakePlural.rules.ordinal\n };\n });\n return MakePlural;\n }\n }]);\n\n return MakePlural;\n})();\n\n\n\nMakePlural.cardinals = true;\nMakePlural.ordinals = false;\nMakePlural.rules = { cardinal: {}, ordinal: {} };\n\n\nreturn MakePlural;\n}());\n/* eslint-enable */\n\n\nvar validateParameterTypeNumber = function( value, name ) {\n\tvalidateParameterType(\n\t\tvalue,\n\t\tname,\n\t\tvalue === undefined || typeof value === \"number\",\n\t\t\"Number\"\n\t);\n};\n\n\n\n\nvar validateParameterTypePluralType = function( value, name ) {\n\tvalidateParameterType(\n\t\tvalue,\n\t\tname,\n\t\tvalue === undefined || value === \"cardinal\" || value === \"ordinal\",\n\t\t\"String \\\"cardinal\\\" or \\\"ordinal\\\"\"\n\t);\n};\n\n\n\n\nvar pluralGeneratorFn = function( plural ) {\n\treturn function pluralGenerator( value ) {\n\t\tvalidateParameterPresence( value, \"value\" );\n\t\tvalidateParameterTypeNumber( value, \"value\" );\n\n\t\treturn plural( value );\n\t};\n};\n\n\n\n\n/**\n * .plural( value )\n *\n * @value [Number]\n *\n * Return the corresponding form (zero | one | two | few | many | other) of a\n * value given locale.\n */\nGlobalize.plural =\nGlobalize.prototype.plural = function( value, options ) {\n\tvalidateParameterPresence( value, \"value\" );\n\tvalidateParameterTypeNumber( value, \"value\" );\n\treturn this.pluralGenerator( options )( value );\n};\n\n/**\n * .pluralGenerator( [options] )\n *\n * Return a plural function (of the form below).\n *\n * fn( value )\n *\n * @value [Number]\n *\n * Return the corresponding form (zero | one | two | few | many | other) of a value given the\n * default/instance locale.\n */\nGlobalize.pluralGenerator =\nGlobalize.prototype.pluralGenerator = function( options ) {\n\tvar args, cldr, isOrdinal, plural, returnFn, type;\n\n\tvalidateParameterTypePlainObject( options, \"options\" );\n\n\toptions = options || {};\n\tcldr = this.cldr;\n\n\targs = [ options ];\n\ttype = options.type || \"cardinal\";\n\n\tvalidateParameterTypePluralType( options.type, \"options.type\" );\n\n\tvalidateDefaultLocale( cldr );\n\n\tisOrdinal = type === \"ordinal\";\n\n\tcldr.on( \"get\", validateCldr );\n\ttry {\n\t\tcldr.supplemental([ \"plurals-type-\" + type, \"{language}\" ]);\n\t} finally {\n\t\tcldr.off( \"get\", validateCldr );\n\t}\n\n\tMakePlural.rules = {};\n\tMakePlural.rules[ type ] = cldr.supplemental( \"plurals-type-\" + type );\n\n\tplural = new MakePlural( cldr.attributes.language, {\n\t\t\"ordinals\": isOrdinal,\n\t\t\"cardinals\": !isOrdinal\n\t});\n\n\treturnFn = pluralGeneratorFn( plural );\n\n\truntimeBind( args, cldr, returnFn, [ plural ] );\n\n\treturn returnFn;\n};\n\nreturn Globalize;\n\n\n\n\n}));\n","/**\n * Globalize v1.7.0\n *\n * https://github.com/globalizejs/globalize\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2021-08-02T11:53Z\n */\n/*!\n * Globalize v1.7.0 2021-08-02T11:53Z Released under the MIT license\n * http://git.io/TrdQbw\n */\n(function( root, factory ) {\n\n\t// UMD returnExports\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD\n\t\tdefine([\n\t\t\t\"cldr\",\n\t\t\t\"../globalize\",\n\t\t\t\"./number\",\n\t\t\t\"./plural\",\n\t\t\t\"cldr/event\",\n\t\t\t\"cldr/supplemental\"\n\t\t], factory );\n\t} else if ( typeof exports === \"object\" ) {\n\n\t\t// Node, CommonJS\n\t\tmodule.exports = factory( require( \"cldrjs\" ), require( \"../globalize\" ) );\n\t} else {\n\n\t\t// Extend global\n\t\tfactory( root.Cldr, root.Globalize );\n\t}\n}(this, function( Cldr, Globalize ) {\n\nvar formatMessage = Globalize._formatMessage,\n\truntimeBind = Globalize._runtimeBind,\n\tvalidateCldr = Globalize._validateCldr,\n\tvalidateDefaultLocale = Globalize._validateDefaultLocale,\n\tvalidateParameterPresence = Globalize._validateParameterPresence,\n\tvalidateParameterTypeString = Globalize._validateParameterTypeString,\n\tvalidateParameterTypeNumber = Globalize._validateParameterTypeNumber;\n\n\n/**\n * format( value, numberFormatter, pluralGenerator, properties )\n *\n * @value [Number] The number to format\n *\n * @numberFormatter [String] A numberFormatter from Globalize.numberFormatter\n *\n * @pluralGenerator [String] A pluralGenerator from Globalize.pluralGenerator\n *\n * @properties [Object] containing relative time plural message.\n *\n * Format relative time.\n */\nvar relativeTimeFormat = function( value, numberFormatter, pluralGenerator, properties ) {\n\n\tvar relativeTime,\n\t\tmessage = properties[ \"relative-type-\" + value ];\n\n\tif ( message ) {\n\t\treturn message;\n\t}\n\n\trelativeTime = value <= 0 ? properties[ \"relativeTime-type-past\" ] :\n\t\tproperties[ \"relativeTime-type-future\" ];\n\n\tvalue = Math.abs( value );\n\n\tmessage = relativeTime[ \"relativeTimePattern-count-\" + pluralGenerator( value ) ];\n\treturn formatMessage( message, [ numberFormatter( value ) ] );\n};\n\n\n\n\nvar relativeTimeFormatterFn = function( numberFormatter, pluralGenerator, properties ) {\n\treturn function relativeTimeFormatter( value ) {\n\t\tvalidateParameterPresence( value, \"value\" );\n\t\tvalidateParameterTypeNumber( value, \"value\" );\n\n\t\treturn relativeTimeFormat( value, numberFormatter, pluralGenerator, properties );\n\t};\n\n};\n\n\n\n\n/**\n * properties( unit, cldr, options )\n *\n * @unit [String] eg. \"day\", \"week\", \"month\", etc.\n *\n * @cldr [Cldr instance].\n *\n * @options [Object]\n * - form: [String] eg. \"short\" or \"narrow\". Or falsy for default long form.\n *\n * Return relative time properties.\n */\nvar relativeTimeProperties = function( unit, cldr, options ) {\n\n\tvar form = options.form,\n\t\traw, properties, key, match;\n\n\tif ( form ) {\n\t\tunit = unit + \"-\" + form;\n\t}\n\n\traw = cldr.main( [ \"dates\", \"fields\", unit ] );\n\tproperties = {\n\t\t\"relativeTime-type-future\": raw[ \"relativeTime-type-future\" ],\n\t\t\"relativeTime-type-past\": raw[ \"relativeTime-type-past\" ]\n\t};\n\tfor ( key in raw ) {\n\t\tif ( raw.hasOwnProperty( key ) ) {\n\t\t\tmatch = /relative-type-(-?[0-9]+)/.exec( key );\n\t\t\tif ( match ) {\n\t\t\t\tproperties[ key ] = raw[ key ];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn properties;\n};\n\n\n\n\n/**\n * .formatRelativeTime( value, unit [, options] )\n *\n * @value [Number] The number of unit to format.\n *\n * @unit [String] see .relativeTimeFormatter() for details.\n *\n * @options [Object] see .relativeTimeFormatter() for details.\n *\n * Formats a relative time according to the given unit, options, and the default/instance locale.\n */\nGlobalize.formatRelativeTime =\nGlobalize.prototype.formatRelativeTime = function( value, unit, options ) {\n\tvalidateParameterPresence( value, \"value\" );\n\tvalidateParameterTypeNumber( value, \"value\" );\n\n\treturn this.relativeTimeFormatter( unit, options )( value );\n};\n\n/**\n * .relativeTimeFormatter( unit [, options ])\n *\n * @unit [String] String value indicating the unit to be formatted. eg. \"day\", \"week\", \"month\", etc.\n *\n * @options [Object]\n * - form: [String] eg. \"short\" or \"narrow\". Or falsy for default long form.\n *\n * Returns a function that formats a relative time according to the given unit, options, and the\n * default/instance locale.\n */\nGlobalize.relativeTimeFormatter =\nGlobalize.prototype.relativeTimeFormatter = function( unit, options ) {\n\tvar args, cldr, numberFormatter, pluralGenerator, properties, returnFn;\n\n\tvalidateParameterPresence( unit, \"unit\" );\n\tvalidateParameterTypeString( unit, \"unit\" );\n\n\tcldr = this.cldr;\n\toptions = options || {};\n\n\targs = [ unit, options ];\n\n\tvalidateDefaultLocale( cldr );\n\n\tcldr.on( \"get\", validateCldr );\n\ttry {\n\t\tproperties = relativeTimeProperties( unit, cldr, options );\n\t} finally {\n\t\tcldr.off( \"get\", validateCldr );\n\t}\n\tnumberFormatter = this.numberFormatter( options );\n\tpluralGenerator = this.pluralGenerator();\n\n\treturnFn = relativeTimeFormatterFn( numberFormatter, pluralGenerator, properties );\n\n\truntimeBind( args, cldr, returnFn, [ numberFormatter, pluralGenerator, properties ] );\n\n\treturn returnFn;\n};\n\nreturn Globalize;\n\n\n\n\n}));\n","/**\n * Globalize v1.7.0\n *\n * https://github.com/globalizejs/globalize\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2021-08-02T11:53Z\n */\n/*!\n * Globalize v1.7.0 2021-08-02T11:53Z Released under the MIT license\n * http://git.io/TrdQbw\n */\n(function( root, factory ) {\n\n\t// UMD returnExports\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD\n\t\tdefine([\n\t\t\t\"cldr\",\n\t\t\t\"../globalize\",\n\t\t\t\"./number\",\n\t\t\t\"./plural\"\n\t\t], factory );\n\t} else if ( typeof exports === \"object\" ) {\n\n\t\t// Node, CommonJS\n\t\tmodule.exports = factory( require( \"cldrjs\" ), require( \"../globalize\" ) );\n\t} else {\n\n\t\t// Extend global\n\t\tfactory( root.Cldr, root.Globalize );\n\t}\n}(this, function( Cldr, Globalize ) {\n\nvar formatMessage = Globalize._formatMessage,\n\truntimeBind = Globalize._runtimeBind,\n\tvalidateParameterPresence = Globalize._validateParameterPresence,\n\tvalidateParameterTypePlainObject = Globalize._validateParameterTypePlainObject,\n\tvalidateParameterTypeNumber = Globalize._validateParameterTypeNumber,\n\tvalidateParameterTypeString = Globalize._validateParameterTypeString;\n\n\n/**\n * format( value, numberFormatter, pluralGenerator, unitProperies )\n *\n * @value [Number]\n *\n * @numberFormatter [Object]: A numberFormatter from Globalize.numberFormatter.\n *\n * @pluralGenerator [Object]: A pluralGenerator from Globalize.pluralGenerator.\n *\n * @unitProperies [Object]: localized unit data from cldr.\n *\n * Format units such as seconds, minutes, days, weeks, etc.\n *\n * OBS:\n *\n * Unit Sequences are not implemented.\n * http://www.unicode.org/reports/tr35/tr35-35/tr35-general.html#Unit_Sequences\n *\n * Duration Unit (for composed time unit durations) is not implemented.\n * http://www.unicode.org/reports/tr35/tr35-35/tr35-general.html#durationUnit\n */\nvar unitFormat = function( value, numberFormatter, pluralGenerator, unitProperties ) {\n\tvar compoundUnitPattern = unitProperties.compoundUnitPattern, dividend, dividendProperties,\n\t\tformattedValue, divisor, divisorProperties, message, pluralValue, oneProperty;\n\n\tunitProperties = unitProperties.unitProperties;\n\tformattedValue = numberFormatter( value );\n\tpluralValue = pluralGenerator( value );\n\n\t// computed compound unit, eg. \"megabyte-per-second\".\n\tif ( unitProperties instanceof Array ) {\n\t\tdividendProperties = unitProperties[ 0 ];\n\t\tdivisorProperties = unitProperties[ 1 ];\n\t\toneProperty = divisorProperties.hasOwnProperty( \"one\" ) ? \"one\" : \"other\";\n\n\t\tdividend = formatMessage( dividendProperties[ pluralValue ], [ formattedValue ] );\n\t\tdivisor = formatMessage( divisorProperties[ oneProperty ], [ \"\" ] ).trim();\n\n\t\treturn formatMessage( compoundUnitPattern, [ dividend, divisor ] );\n\t}\n\n\tmessage = unitProperties[ pluralValue ];\n\n\treturn formatMessage( message, [ formattedValue ] );\n};\n\n\n\n\nvar unitFormatterFn = function( numberFormatter, pluralGenerator, unitProperties ) {\n\treturn function unitFormatter( value ) {\n\t\tvalidateParameterPresence( value, \"value\" );\n\t\tvalidateParameterTypeNumber( value, \"value\" );\n\n\t\treturn unitFormat( value, numberFormatter, pluralGenerator, unitProperties );\n\t};\n\n};\n\n\n\n\n/**\n * categories()\n *\n * Return all unit categories.\n */\nvar unitCategories = [ \"acceleration\", \"angle\", \"area\", \"digital\", \"duration\", \"length\", \"mass\", \"power\",\n\"pressure\", \"speed\", \"temperature\", \"volume\" ];\n\n\n\n\nfunction stripPluralGarbage( data ) {\n\tvar aux, pluralCount;\n\n\tif ( data ) {\n\t\taux = {};\n\t\tfor ( pluralCount in data ) {\n\t\t\taux[ pluralCount.replace( /unitPattern-count-/, \"\" ) ] = data[ pluralCount ];\n\t\t}\n\t}\n\n\treturn aux;\n}\n\n/**\n * get( unit, form, cldr )\n *\n * @unit [String] The full type-unit name (eg. duration-second), or the short unit name\n * (eg. second).\n *\n * @form [String] A string describing the form of the unit representation (eg. long,\n * short, narrow).\n *\n * @cldr [Cldr instance].\n *\n * Return the plural map of a unit, eg: \"second\"\n * { \"one\": \"{0} second\",\n * \"other\": \"{0} seconds\" }\n * }\n *\n * Or the Array of plural maps of a compound-unit, eg: \"foot-per-second\"\n * [ { \"one\": \"{0} foot\",\n * \"other\": \"{0} feet\" },\n * { \"one\": \"{0} second\",\n * \"other\": \"{0} seconds\" } ]\n *\n * Uses the precomputed form of a compound-unit if available, eg: \"mile-per-hour\"\n * { \"displayName\": \"miles per hour\",\n * \"unitPattern-count-one\": \"{0} mile per hour\",\n * \"unitPattern-count-other\": \"{0} miles per hour\"\n * },\n *\n * Also supports \"/\" instead of \"-per-\", eg. \"foot/second\", using the precomputed form if\n * available.\n *\n * Or the Array of plural maps of a compound-unit, eg: \"foot-per-second\"\n * [ { \"one\": \"{0} foot\",\n * \"other\": \"{0} feet\" },\n * { \"one\": \"{0} second\",\n * \"other\": \"{0} seconds\" } ]\n *\n * Or undefined in case the unit (or a unit of the compound-unit) doesn't exist.\n */\nvar get = function( unit, form, cldr ) {\n\tvar ret;\n\n\t// Ensure that we get the 'precomputed' form, if present.\n\tunit = unit.replace( /\\//, \"-per-\" );\n\n\t// Get unit or -unit (eg. \"duration-second\").\n\t[ \"\" ].concat( unitCategories ).some(function( category ) {\n\t\treturn ret = cldr.main([\n\t\t\t\"units\",\n\t\t\tform,\n\t\t\tcategory.length ? category + \"-\" + unit : unit\n\t\t]);\n\t});\n\n\t// Rename keys s/unitPattern-count-//g.\n\tret = stripPluralGarbage( ret );\n\n\t// Compound Unit, eg. \"foot-per-second\" or \"foot/second\".\n\tif ( !ret && ( /-per-/ ).test( unit ) ) {\n\n\t\t// \"Some units already have 'precomputed' forms, such as kilometer-per-hour;\n\t\t// where such units exist, they should be used in preference\" UTS#35.\n\t\t// Note that precomputed form has already been handled above (!ret).\n\n\t\t// Get both recursively.\n\t\tunit = unit.split( \"-per-\" );\n\t\tret = unit.map(function( unit ) {\n\t\t\treturn get( unit, form, cldr );\n\t\t});\n\t\tif ( !ret[ 0 ] || !ret[ 1 ] ) {\n\t\t\treturn;\n\t\t}\n\t}\n\n\treturn ret;\n};\n\nvar unitGet = get;\n\n\n\n\n/**\n * properties( unit, form, cldr )\n *\n * @unit [String] The full type-unit name (eg. duration-second), or the short unit name\n * (eg. second).\n *\n * @form [String] A string describing the form of the unit representation (eg. long,\n * short, narrow).\n *\n * @cldr [Cldr instance].\n */\nvar unitProperties = function( unit, form, cldr ) {\n\tvar compoundUnitPattern, unitProperties;\n\n\tcompoundUnitPattern = cldr.main( [ \"units\", form, \"per/compoundUnitPattern\" ] );\n\tunitProperties = unitGet( unit, form, cldr );\n\n\treturn {\n\t\tcompoundUnitPattern: compoundUnitPattern,\n\t\tunitProperties: unitProperties\n\t};\n};\n\n\n\n\n/**\n * Globalize.formatUnit( value, unit, options )\n *\n * @value [Number]\n *\n * @unit [String]: The unit (e.g \"second\", \"day\", \"year\")\n *\n * @options [Object]\n * - form: [String] \"long\", \"short\" (default), or \"narrow\".\n *\n * Format units such as seconds, minutes, days, weeks, etc.\n */\nGlobalize.formatUnit =\nGlobalize.prototype.formatUnit = function( value, unit, options ) {\n\tvalidateParameterPresence( value, \"value\" );\n\tvalidateParameterTypeNumber( value, \"value\" );\n\n\treturn this.unitFormatter( unit, options )( value );\n};\n\n/**\n * Globalize.unitFormatter( unit, options )\n *\n * @unit [String]: The unit (e.g \"second\", \"day\", \"year\")\n *\n * @options [Object]\n * - form: [String] \"long\", \"short\" (default), or \"narrow\".\n *\n * - numberFormatter: [Function] a number formatter function. Defaults to Globalize\n * `.numberFormatter()` for the current locale using the default options.\n */\nGlobalize.unitFormatter =\nGlobalize.prototype.unitFormatter = function( unit, options ) {\n\tvar args, form, numberFormatter, pluralGenerator, returnFn, properties;\n\n\tvalidateParameterPresence( unit, \"unit\" );\n\tvalidateParameterTypeString( unit, \"unit\" );\n\n\tvalidateParameterTypePlainObject( options, \"options\" );\n\n\toptions = options || {};\n\n\targs = [ unit, options ];\n\tform = options.form || \"long\";\n\tproperties = unitProperties( unit, form, this.cldr );\n\n\tnumberFormatter = options.numberFormatter || this.numberFormatter();\n\tpluralGenerator = this.pluralGenerator();\n\treturnFn = unitFormatterFn( numberFormatter, pluralGenerator, properties );\n\n\truntimeBind( args, this.cldr, returnFn, [ numberFormatter, pluralGenerator, properties ] );\n\n\treturn returnFn;\n};\n\nreturn Globalize;\n\n\n\n\n}));\n","/*!\n * Globalize v1.7.0\n *\n * https://github.com/globalizejs/globalize\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2021-08-02T11:53Z\n */\n\n// Core\nmodule.exports = require( \"./globalize\" );\n\n// Extent core with the following modules\nrequire( \"./globalize/message\" );\nrequire( \"./globalize/number\" );\nrequire( \"./globalize/plural\" );\n\n// Load after globalize/number\nrequire( \"./globalize/currency\" );\nrequire( \"./globalize/date\" );\n\n// Load after globalize/number and globalize/plural\nrequire( \"./globalize/relative-time\" );\nrequire( \"./globalize/unit\" );\n","// Unobtrusive validation support library for jQuery and jQuery Validate\r\n// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\n// @version v3.2.12\r\n!function(a){\"function\"==typeof define&&define.amd?define(\"jquery.validate.unobtrusive\",[\"jquery-validation\"],a):\"object\"==typeof module&&module.exports?module.exports=a(require(\"jquery-validation\")):jQuery.validator.unobtrusive=a(jQuery)}(function(a){function e(a,e,n){a.rules[e]=n,a.message&&(a.messages[e]=a.message)}function n(a){return a.replace(/^\\s+|\\s+$/g,\"\").split(/\\s*,\\s*/g)}function t(a){return a.replace(/([!\"#$%&'()*+,.\\/:;<=>?@\\[\\\\\\]^`{|}~])/g,\"\\\\$1\")}function r(a){return a.substr(0,a.lastIndexOf(\".\")+1)}function i(a,e){return 0===a.indexOf(\"*.\")&&(a=a.replace(\"*.\",e)),a}function o(e,n){var r=a(this).find(\"[data-valmsg-for='\"+t(n[0].name)+\"']\"),i=r.attr(\"data-valmsg-replace\"),o=i?a.parseJSON(i)!==!1:null;r.removeClass(\"field-validation-valid\").addClass(\"field-validation-error\"),e.data(\"unobtrusiveContainer\",r),o?(r.empty(),e.removeClass(\"input-validation-error\").appendTo(r)):e.hide()}function d(e,n){var t=a(this).find(\"[data-valmsg-summary=true]\"),r=t.find(\"ul\");r&&r.length&&n.errorList.length&&(r.empty(),t.addClass(\"validation-summary-errors\").removeClass(\"validation-summary-valid\"),a.each(n.errorList,function(){a(\"
  • \").html(this.message).appendTo(r)}))}function s(e){var n=e.data(\"unobtrusiveContainer\");if(n){var t=n.attr(\"data-valmsg-replace\"),r=t?a.parseJSON(t):null;n.addClass(\"field-validation-valid\").removeClass(\"field-validation-error\"),e.removeData(\"unobtrusiveContainer\"),r&&n.empty()}}function l(e){var n=a(this),t=\"__jquery_unobtrusive_validation_form_reset\";if(!n.data(t)){n.data(t,!0);try{n.data(\"validator\").resetForm()}finally{n.removeData(t)}n.find(\".validation-summary-errors\").addClass(\"validation-summary-valid\").removeClass(\"validation-summary-errors\"),n.find(\".field-validation-error\").addClass(\"field-validation-valid\").removeClass(\"field-validation-error\").removeData(\"unobtrusiveContainer\").find(\">*\").removeData(\"unobtrusiveContainer\")}}function u(e){var n=a(e),t=n.data(v),r=a.proxy(l,e),i=f.unobtrusive.options||{},u=function(n,t){var r=i[n];r&&a.isFunction(r)&&r.apply(e,t)};return t||(t={options:{errorClass:i.errorClass||\"input-validation-error\",errorElement:i.errorElement||\"span\",errorPlacement:function(){o.apply(e,arguments),u(\"errorPlacement\",arguments)},invalidHandler:function(){d.apply(e,arguments),u(\"invalidHandler\",arguments)},messages:{},rules:{},success:function(){s.apply(e,arguments),u(\"success\",arguments)}},attachValidation:function(){n.off(\"reset.\"+v,r).on(\"reset.\"+v,r).validate(this.options)},validate:function(){return n.validate(),n.valid()}},n.data(v,t)),t}var m,f=a.validator,v=\"unobtrusiveValidation\";return f.unobtrusive={adapters:[],parseElement:function(e,n){var t,r,i,o=a(e),d=o.parents(\"form\")[0];d&&(t=u(d),t.options.rules[e.name]=r={},t.options.messages[e.name]=i={},a.each(this.adapters,function(){var n=\"data-val-\"+this.name,t=o.attr(n),s={};void 0!==t&&(n+=\"-\",a.each(this.params,function(){s[this]=o.attr(n+this)}),this.adapt({element:e,form:d,message:t,params:s,rules:r,messages:i}))}),a.extend(r,{__dummy__:!0}),n||t.attachValidation())},parse:function(e){var n=a(e),t=n.parents().addBack().filter(\"form\").add(n.find(\"form\")).has(\"[data-val=true]\");n.find(\"[data-val=true]\").each(function(){f.unobtrusive.parseElement(this,!0)}),t.each(function(){var a=u(this);a&&a.attachValidation()})}},m=f.unobtrusive.adapters,m.add=function(a,e,n){return n||(n=e,e=[]),this.push({name:a,params:e,adapt:n}),this},m.addBool=function(a,n){return this.add(a,function(t){e(t,n||a,!0)})},m.addMinMax=function(a,n,t,r,i,o){return this.add(a,[i||\"min\",o||\"max\"],function(a){var i=a.params.min,o=a.params.max;i&&o?e(a,r,[i,o]):i?e(a,n,i):o&&e(a,t,o)})},m.addSingleVal=function(a,n,t){return this.add(a,[n||\"val\"],function(r){e(r,t||a,r.params[n])})},f.addMethod(\"__dummy__\",function(a,e,n){return!0}),f.addMethod(\"regex\",function(a,e,n){var t;return!!this.optional(e)||(t=new RegExp(n).exec(a),t&&0===t.index&&t[0].length===a.length)}),f.addMethod(\"nonalphamin\",function(a,e,n){var t;return n&&(t=a.match(/\\W/g),t=t&&t.length>=n),t}),f.methods.extension?(m.addSingleVal(\"accept\",\"mimtype\"),m.addSingleVal(\"extension\",\"extension\")):m.addSingleVal(\"extension\",\"extension\",\"accept\"),m.addSingleVal(\"regex\",\"pattern\"),m.addBool(\"creditcard\").addBool(\"date\").addBool(\"digits\").addBool(\"email\").addBool(\"number\").addBool(\"url\"),m.addMinMax(\"length\",\"minlength\",\"maxlength\",\"rangelength\").addMinMax(\"range\",\"min\",\"max\",\"range\"),m.addMinMax(\"minlength\",\"minlength\").addMinMax(\"maxlength\",\"minlength\",\"maxlength\"),m.add(\"equalto\",[\"other\"],function(n){var o=r(n.element.name),d=n.params.other,s=i(d,o),l=a(n.form).find(\":input\").filter(\"[name='\"+t(s)+\"']\")[0];e(n,\"equalTo\",l)}),m.add(\"required\",function(a){\"INPUT\"===a.element.tagName.toUpperCase()&&\"CHECKBOX\"===a.element.type.toUpperCase()||e(a,\"required\",!0)}),m.add(\"remote\",[\"url\",\"type\",\"additionalfields\"],function(o){var d={url:o.params.url,type:o.params.type||\"GET\",data:{}},s=r(o.element.name);a.each(n(o.params.additionalfields||o.element.name),function(e,n){var r=i(n,s);d.data[r]=function(){var e=a(o.form).find(\":input\").filter(\"[name='\"+t(r)+\"']\");return e.is(\":checkbox\")?e.filter(\":checked\").val()||e.filter(\":hidden\").val()||\"\":e.is(\":radio\")?e.filter(\":checked\").val()||\"\":e.val()}}),e(o,\"remote\",d)}),m.add(\"password\",[\"min\",\"nonalphamin\",\"regex\"],function(a){a.params.min&&e(a,\"minlength\",a.params.min),a.params.nonalphamin&&e(a,\"nonalphamin\",a.params.nonalphamin),a.params.regex&&e(a,\"regex\",a.params.regex)}),m.add(\"fileextensions\",[\"extensions\"],function(a){e(a,\"extension\",a.params.extensions)}),a(function(){f.unobtrusive.parse(document)}),f.unobtrusive});","/*!\n * jQuery Validation Plugin v1.21.0\n *\n * https://jqueryvalidation.org/\n *\n * Copyright (c) 2024 Jörn Zaefferer\n * Released under the MIT license\n */\n(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n$.extend( $.fn, {\n\n\t// https://jqueryvalidation.org/validate/\n\tvalidate: function( options ) {\n\n\t\t// If nothing is selected, return nothing; can't chain anyway\n\t\tif ( !this.length ) {\n\t\t\tif ( options && options.debug && window.console ) {\n\t\t\t\tconsole.warn( \"Nothing selected, can't validate, returning nothing.\" );\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Check if a validator for this form was already created\n\t\tvar validator = $.data( this[ 0 ], \"validator\" );\n\t\tif ( validator ) {\n\t\t\treturn validator;\n\t\t}\n\n\t\t// Add novalidate tag if HTML5.\n\t\tthis.attr( \"novalidate\", \"novalidate\" );\n\n\t\tvalidator = new $.validator( options, this[ 0 ] );\n\t\t$.data( this[ 0 ], \"validator\", validator );\n\n\t\tif ( validator.settings.onsubmit ) {\n\n\t\t\tthis.on( \"click.validate\", \":submit\", function( event ) {\n\n\t\t\t\t// Track the used submit button to properly handle scripted\n\t\t\t\t// submits later.\n\t\t\t\tvalidator.submitButton = event.currentTarget;\n\n\t\t\t\t// Allow suppressing validation by adding a cancel class to the submit button\n\t\t\t\tif ( $( this ).hasClass( \"cancel\" ) ) {\n\t\t\t\t\tvalidator.cancelSubmit = true;\n\t\t\t\t}\n\n\t\t\t\t// Allow suppressing validation by adding the html5 formnovalidate attribute to the submit button\n\t\t\t\tif ( $( this ).attr( \"formnovalidate\" ) !== undefined ) {\n\t\t\t\t\tvalidator.cancelSubmit = true;\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// Validate the form on submit\n\t\t\tthis.on( \"submit.validate\", function( event ) {\n\t\t\t\tif ( validator.settings.debug ) {\n\n\t\t\t\t\t// Prevent form submit to be able to see console output\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\n\t\t\t\tfunction handle() {\n\t\t\t\t\tvar hidden, result;\n\n\t\t\t\t\t// Insert a hidden input as a replacement for the missing submit button\n\t\t\t\t\t// The hidden input is inserted in two cases:\n\t\t\t\t\t// - A user defined a `submitHandler`\n\t\t\t\t\t// - There was a pending request due to `remote` method and `stopRequest()`\n\t\t\t\t\t// was called to submit the form in case it's valid\n\t\t\t\t\tif ( validator.submitButton && ( validator.settings.submitHandler || validator.formSubmitted ) ) {\n\t\t\t\t\t\thidden = $( \"\" )\n\t\t\t\t\t\t\t.attr( \"name\", validator.submitButton.name )\n\t\t\t\t\t\t\t.val( $( validator.submitButton ).val() )\n\t\t\t\t\t\t\t.appendTo( validator.currentForm );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( validator.settings.submitHandler && !validator.settings.debug ) {\n\t\t\t\t\t\tresult = validator.settings.submitHandler.call( validator, validator.currentForm, event );\n\t\t\t\t\t\tif ( hidden ) {\n\n\t\t\t\t\t\t\t// And clean up afterwards; thanks to no-block-scope, hidden can be referenced\n\t\t\t\t\t\t\thidden.remove();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( result !== undefined ) {\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\t// Prevent submit for invalid forms or custom submit handlers\n\t\t\t\tif ( validator.cancelSubmit ) {\n\t\t\t\t\tvalidator.cancelSubmit = false;\n\t\t\t\t\treturn handle();\n\t\t\t\t}\n\t\t\t\tif ( validator.form() ) {\n\t\t\t\t\tif ( validator.pendingRequest ) {\n\t\t\t\t\t\tvalidator.formSubmitted = true;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn handle();\n\t\t\t\t} else {\n\t\t\t\t\tvalidator.focusInvalid();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn validator;\n\t},\n\n\t// https://jqueryvalidation.org/valid/\n\tvalid: function() {\n\t\tvar valid, validator, errorList;\n\n\t\tif ( $( this[ 0 ] ).is( \"form\" ) ) {\n\t\t\tvalid = this.validate().form();\n\t\t} else {\n\t\t\terrorList = [];\n\t\t\tvalid = true;\n\t\t\tvalidator = $( this[ 0 ].form ).validate();\n\t\t\tthis.each( function() {\n\t\t\t\tvalid = validator.element( this ) && valid;\n\t\t\t\tif ( !valid ) {\n\t\t\t\t\terrorList = errorList.concat( validator.errorList );\n\t\t\t\t}\n\t\t\t} );\n\t\t\tvalidator.errorList = errorList;\n\t\t}\n\t\treturn valid;\n\t},\n\n\t// https://jqueryvalidation.org/rules/\n\trules: function( command, argument ) {\n\t\tvar element = this[ 0 ],\n\t\t\tisContentEditable = typeof this.attr( \"contenteditable\" ) !== \"undefined\" && this.attr( \"contenteditable\" ) !== \"false\",\n\t\t\tsettings, staticRules, existingRules, data, param, filtered;\n\n\t\t// If nothing is selected, return empty object; can't chain anyway\n\t\tif ( element == null ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( !element.form && isContentEditable ) {\n\t\t\telement.form = this.closest( \"form\" )[ 0 ];\n\t\t\telement.name = this.attr( \"name\" );\n\t\t}\n\n\t\tif ( element.form == null ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( command ) {\n\t\t\tsettings = $.data( element.form, \"validator\" ).settings;\n\t\t\tstaticRules = settings.rules;\n\t\t\texistingRules = $.validator.staticRules( element );\n\t\t\tswitch ( command ) {\n\t\t\tcase \"add\":\n\t\t\t\t$.extend( existingRules, $.validator.normalizeRule( argument ) );\n\n\t\t\t\t// Remove messages from rules, but allow them to be set separately\n\t\t\t\tdelete existingRules.messages;\n\t\t\t\tstaticRules[ element.name ] = existingRules;\n\t\t\t\tif ( argument.messages ) {\n\t\t\t\t\tsettings.messages[ element.name ] = $.extend( settings.messages[ element.name ], argument.messages );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"remove\":\n\t\t\t\tif ( !argument ) {\n\t\t\t\t\tdelete staticRules[ element.name ];\n\t\t\t\t\treturn existingRules;\n\t\t\t\t}\n\t\t\t\tfiltered = {};\n\t\t\t\t$.each( argument.split( /\\s/ ), function( index, method ) {\n\t\t\t\t\tfiltered[ method ] = existingRules[ method ];\n\t\t\t\t\tdelete existingRules[ method ];\n\t\t\t\t} );\n\t\t\t\treturn filtered;\n\t\t\t}\n\t\t}\n\n\t\tdata = $.validator.normalizeRules(\n\t\t$.extend(\n\t\t\t{},\n\t\t\t$.validator.classRules( element ),\n\t\t\t$.validator.attributeRules( element ),\n\t\t\t$.validator.dataRules( element ),\n\t\t\t$.validator.staticRules( element )\n\t\t), element );\n\n\t\t// Make sure required is at front\n\t\tif ( data.required ) {\n\t\t\tparam = data.required;\n\t\t\tdelete data.required;\n\t\t\tdata = $.extend( { required: param }, data );\n\t\t}\n\n\t\t// Make sure remote is at back\n\t\tif ( data.remote ) {\n\t\t\tparam = data.remote;\n\t\t\tdelete data.remote;\n\t\t\tdata = $.extend( data, { remote: param } );\n\t\t}\n\n\t\treturn data;\n\t}\n} );\n\n// JQuery trim is deprecated, provide a trim method based on String.prototype.trim\nvar trim = function( str ) {\n\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/trim#Polyfill\n\treturn str.replace( /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, \"\" );\n};\n\n// Custom selectors\n$.extend( $.expr.pseudos || $.expr[ \":\" ], {\t\t// '|| $.expr[ \":\" ]' here enables backwards compatibility to jQuery 1.7. Can be removed when dropping jQ 1.7.x support\n\n\t// https://jqueryvalidation.org/blank-selector/\n\tblank: function( a ) {\n\t\treturn !trim( \"\" + $( a ).val() );\n\t},\n\n\t// https://jqueryvalidation.org/filled-selector/\n\tfilled: function( a ) {\n\t\tvar val = $( a ).val();\n\t\treturn val !== null && !!trim( \"\" + val );\n\t},\n\n\t// https://jqueryvalidation.org/unchecked-selector/\n\tunchecked: function( a ) {\n\t\treturn !$( a ).prop( \"checked\" );\n\t}\n} );\n\n// Constructor for validator\n$.validator = function( options, form ) {\n\tthis.settings = $.extend( true, {}, $.validator.defaults, options );\n\tthis.currentForm = form;\n\tthis.init();\n};\n\n// https://jqueryvalidation.org/jQuery.validator.format/\n$.validator.format = function( source, params ) {\n\tif ( arguments.length === 1 ) {\n\t\treturn function() {\n\t\t\tvar args = $.makeArray( arguments );\n\t\t\targs.unshift( source );\n\t\t\treturn $.validator.format.apply( this, args );\n\t\t};\n\t}\n\tif ( params === undefined ) {\n\t\treturn source;\n\t}\n\tif ( arguments.length > 2 && params.constructor !== Array ) {\n\t\tparams = $.makeArray( arguments ).slice( 1 );\n\t}\n\tif ( params.constructor !== Array ) {\n\t\tparams = [ params ];\n\t}\n\t$.each( params, function( i, n ) {\n\t\tsource = source.replace( new RegExp( \"\\\\{\" + i + \"\\\\}\", \"g\" ), function() {\n\t\t\treturn n;\n\t\t} );\n\t} );\n\treturn source;\n};\n\n$.extend( $.validator, {\n\n\tdefaults: {\n\t\tmessages: {},\n\t\tgroups: {},\n\t\trules: {},\n\t\terrorClass: \"error\",\n\t\tpendingClass: \"pending\",\n\t\tvalidClass: \"valid\",\n\t\terrorElement: \"label\",\n\t\tfocusCleanup: false,\n\t\tfocusInvalid: true,\n\t\terrorContainer: $( [] ),\n\t\terrorLabelContainer: $( [] ),\n\t\tonsubmit: true,\n\t\tignore: \":hidden\",\n\t\tignoreTitle: false,\n\t\tcustomElements: [],\n\t\tonfocusin: function( element ) {\n\t\t\tthis.lastActive = element;\n\n\t\t\t// Hide error label and remove error class on focus if enabled\n\t\t\tif ( this.settings.focusCleanup ) {\n\t\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t\tthis.hideThese( this.errorsFor( element ) );\n\t\t\t}\n\t\t},\n\t\tonfocusout: function( element ) {\n\t\t\tif ( !this.checkable( element ) && ( element.name in this.submitted || !this.optional( element ) ) ) {\n\t\t\t\tthis.element( element );\n\t\t\t}\n\t\t},\n\t\tonkeyup: function( element, event ) {\n\n\t\t\t// Avoid revalidate the field when pressing one of the following keys\n\t\t\t// Shift => 16\n\t\t\t// Ctrl => 17\n\t\t\t// Alt => 18\n\t\t\t// Caps lock => 20\n\t\t\t// End => 35\n\t\t\t// Home => 36\n\t\t\t// Left arrow => 37\n\t\t\t// Up arrow => 38\n\t\t\t// Right arrow => 39\n\t\t\t// Down arrow => 40\n\t\t\t// Insert => 45\n\t\t\t// Num lock => 144\n\t\t\t// AltGr key => 225\n\t\t\tvar excludedKeys = [\n\t\t\t\t16, 17, 18, 20, 35, 36, 37,\n\t\t\t\t38, 39, 40, 45, 144, 225\n\t\t\t];\n\n\t\t\tif ( event.which === 9 && this.elementValue( element ) === \"\" || $.inArray( event.keyCode, excludedKeys ) !== -1 ) {\n\t\t\t\treturn;\n\t\t\t} else if ( element.name in this.submitted || element.name in this.invalid ) {\n\t\t\t\tthis.element( element );\n\t\t\t}\n\t\t},\n\t\tonclick: function( element ) {\n\n\t\t\t// Click on selects, radiobuttons and checkboxes\n\t\t\tif ( element.name in this.submitted ) {\n\t\t\t\tthis.element( element );\n\n\t\t\t// Or option elements, check parent select in that case\n\t\t\t} else if ( element.parentNode.name in this.submitted ) {\n\t\t\t\tthis.element( element.parentNode );\n\t\t\t}\n\t\t},\n\t\thighlight: function( element, errorClass, validClass ) {\n\t\t\tif ( element.type === \"radio\" ) {\n\t\t\t\tthis.findByName( element.name ).addClass( errorClass ).removeClass( validClass );\n\t\t\t} else {\n\t\t\t\t$( element ).addClass( errorClass ).removeClass( validClass );\n\t\t\t}\n\t\t},\n\t\tunhighlight: function( element, errorClass, validClass ) {\n\t\t\tif ( element.type === \"radio\" ) {\n\t\t\t\tthis.findByName( element.name ).removeClass( errorClass ).addClass( validClass );\n\t\t\t} else {\n\t\t\t\t$( element ).removeClass( errorClass ).addClass( validClass );\n\t\t\t}\n\t\t}\n\t},\n\n\t// https://jqueryvalidation.org/jQuery.validator.setDefaults/\n\tsetDefaults: function( settings ) {\n\t\t$.extend( $.validator.defaults, settings );\n\t},\n\n\tmessages: {\n\t\trequired: \"This field is required.\",\n\t\tremote: \"Please fix this field.\",\n\t\temail: \"Please enter a valid email address.\",\n\t\turl: \"Please enter a valid URL.\",\n\t\tdate: \"Please enter a valid date.\",\n\t\tdateISO: \"Please enter a valid date (ISO).\",\n\t\tnumber: \"Please enter a valid number.\",\n\t\tdigits: \"Please enter only digits.\",\n\t\tequalTo: \"Please enter the same value again.\",\n\t\tmaxlength: $.validator.format( \"Please enter no more than {0} characters.\" ),\n\t\tminlength: $.validator.format( \"Please enter at least {0} characters.\" ),\n\t\trangelength: $.validator.format( \"Please enter a value between {0} and {1} characters long.\" ),\n\t\trange: $.validator.format( \"Please enter a value between {0} and {1}.\" ),\n\t\tmax: $.validator.format( \"Please enter a value less than or equal to {0}.\" ),\n\t\tmin: $.validator.format( \"Please enter a value greater than or equal to {0}.\" ),\n\t\tstep: $.validator.format( \"Please enter a multiple of {0}.\" )\n\t},\n\n\tautoCreateRanges: false,\n\n\tprototype: {\n\n\t\tinit: function() {\n\t\t\tthis.labelContainer = $( this.settings.errorLabelContainer );\n\t\t\tthis.errorContext = this.labelContainer.length && this.labelContainer || $( this.currentForm );\n\t\t\tthis.containers = $( this.settings.errorContainer ).add( this.settings.errorLabelContainer );\n\t\t\tthis.submitted = {};\n\t\t\tthis.valueCache = {};\n\t\t\tthis.pendingRequest = 0;\n\t\t\tthis.pending = {};\n\t\t\tthis.invalid = {};\n\t\t\tthis.reset();\n\n\t\t\tvar currentForm = this.currentForm,\n\t\t\t\tgroups = ( this.groups = {} ),\n\t\t\t\trules;\n\t\t\t$.each( this.settings.groups, function( key, value ) {\n\t\t\t\tif ( typeof value === \"string\" ) {\n\t\t\t\t\tvalue = value.split( /\\s/ );\n\t\t\t\t}\n\t\t\t\t$.each( value, function( index, name ) {\n\t\t\t\t\tgroups[ name ] = key;\n\t\t\t\t} );\n\t\t\t} );\n\t\t\trules = this.settings.rules;\n\t\t\t$.each( rules, function( key, value ) {\n\t\t\t\trules[ key ] = $.validator.normalizeRule( value );\n\t\t\t} );\n\n\t\t\tfunction delegate( event ) {\n\t\t\t\tvar isContentEditable = typeof $( this ).attr( \"contenteditable\" ) !== \"undefined\" && $( this ).attr( \"contenteditable\" ) !== \"false\";\n\n\t\t\t\t// Set form expando on contenteditable\n\t\t\t\tif ( !this.form && isContentEditable ) {\n\t\t\t\t\tthis.form = $( this ).closest( \"form\" )[ 0 ];\n\t\t\t\t\tthis.name = $( this ).attr( \"name\" );\n\t\t\t\t}\n\n\t\t\t\t// Ignore the element if it belongs to another form. This will happen mainly\n\t\t\t\t// when setting the `form` attribute of an input to the id of another form.\n\t\t\t\tif ( currentForm !== this.form ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar validator = $.data( this.form, \"validator\" ),\n\t\t\t\t\teventType = \"on\" + event.type.replace( /^validate/, \"\" ),\n\t\t\t\t\tsettings = validator.settings;\n\t\t\t\tif ( settings[ eventType ] && !$( this ).is( settings.ignore ) ) {\n\t\t\t\t\tsettings[ eventType ].call( validator, this, event );\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar focusListeners = [ \":text\", \"[type='password']\", \"[type='file']\", \"select\", \"textarea\", \"[type='number']\", \"[type='search']\",\n\t\t\t\t\t\t\t\t\"[type='tel']\", \"[type='url']\", \"[type='email']\", \"[type='datetime']\", \"[type='date']\", \"[type='month']\",\n\t\t\t\t\t\t\t\t\"[type='week']\", \"[type='time']\", \"[type='datetime-local']\", \"[type='range']\", \"[type='color']\",\n\t\t\t\t\t\t\t\t\"[type='radio']\", \"[type='checkbox']\", \"[contenteditable]\", \"[type='button']\" ];\n\t\t\tvar clickListeners = [ \"select\", \"option\", \"[type='radio']\", \"[type='checkbox']\" ];\n\t\t\t$( this.currentForm )\n\t\t\t\t.on( \"focusin.validate focusout.validate keyup.validate\", focusListeners.concat( this.settings.customElements ).join( \", \" ), delegate )\n\n\t\t\t\t// Support: Chrome, oldIE\n\t\t\t\t// \"select\" is provided as event.target when clicking a option\n\t\t\t\t.on( \"click.validate\", clickListeners.concat( this.settings.customElements ).join( \", \" ), delegate );\n\n\t\t\tif ( this.settings.invalidHandler ) {\n\t\t\t\t$( this.currentForm ).on( \"invalid-form.validate\", this.settings.invalidHandler );\n\t\t\t}\n\t\t},\n\n\t\t// https://jqueryvalidation.org/Validator.form/\n\t\tform: function() {\n\t\t\tthis.checkForm();\n\t\t\t$.extend( this.submitted, this.errorMap );\n\t\t\tthis.invalid = $.extend( {}, this.errorMap );\n\t\t\tif ( !this.valid() ) {\n\t\t\t\t$( this.currentForm ).triggerHandler( \"invalid-form\", [ this ] );\n\t\t\t}\n\t\t\tthis.showErrors();\n\t\t\treturn this.valid();\n\t\t},\n\n\t\tcheckForm: function() {\n\t\t\tthis.prepareForm();\n\t\t\tfor ( var i = 0, elements = ( this.currentElements = this.elements() ); elements[ i ]; i++ ) {\n\t\t\t\tthis.check( elements[ i ] );\n\t\t\t}\n\t\t\treturn this.valid();\n\t\t},\n\n\t\t// https://jqueryvalidation.org/Validator.element/\n\t\telement: function( element ) {\n\t\t\tvar cleanElement = this.clean( element ),\n\t\t\t\tcheckElement = this.validationTargetFor( cleanElement ),\n\t\t\t\tv = this,\n\t\t\t\tresult = true,\n\t\t\t\trs, group;\n\n\t\t\tif ( checkElement === undefined ) {\n\t\t\t\tdelete this.invalid[ cleanElement.name ];\n\t\t\t} else {\n\t\t\t\tthis.prepareElement( checkElement );\n\t\t\t\tthis.currentElements = $( checkElement );\n\n\t\t\t\t// If this element is grouped, then validate all group elements already\n\t\t\t\t// containing a value\n\t\t\t\tgroup = this.groups[ checkElement.name ];\n\t\t\t\tif ( group ) {\n\t\t\t\t\t$.each( this.groups, function( name, testgroup ) {\n\t\t\t\t\t\tif ( testgroup === group && name !== checkElement.name ) {\n\t\t\t\t\t\t\tcleanElement = v.validationTargetFor( v.clean( v.findByName( name ) ) );\n\t\t\t\t\t\t\tif ( cleanElement && cleanElement.name in v.invalid ) {\n\t\t\t\t\t\t\t\tv.currentElements.push( cleanElement );\n\t\t\t\t\t\t\t\tresult = v.check( cleanElement ) && result;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\t\t\t\trs = this.check( checkElement ) !== false;\n\t\t\t\tresult = result && rs;\n\t\t\t\tif ( rs ) {\n\t\t\t\t\tthis.invalid[ checkElement.name ] = false;\n\t\t\t\t} else {\n\t\t\t\t\tthis.invalid[ checkElement.name ] = true;\n\t\t\t\t}\n\n\t\t\t\tif ( !this.numberOfInvalids() ) {\n\n\t\t\t\t\t// Hide error containers on last error\n\t\t\t\t\tthis.toHide = this.toHide.add( this.containers );\n\t\t\t\t}\n\t\t\t\tthis.showErrors();\n\n\t\t\t\t// Add aria-invalid status for screen readers\n\t\t\t\t$( element ).attr( \"aria-invalid\", !rs );\n\t\t\t}\n\n\t\t\treturn result;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/Validator.showErrors/\n\t\tshowErrors: function( errors ) {\n\t\t\tif ( errors ) {\n\t\t\t\tvar validator = this;\n\n\t\t\t\t// Add items to error list and map\n\t\t\t\t$.extend( this.errorMap, errors );\n\t\t\t\tthis.errorList = $.map( this.errorMap, function( message, name ) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tmessage: message,\n\t\t\t\t\t\telement: validator.findByName( name )[ 0 ]\n\t\t\t\t\t};\n\t\t\t\t} );\n\n\t\t\t\t// Remove items from success list\n\t\t\t\tthis.successList = $.grep( this.successList, function( element ) {\n\t\t\t\t\treturn !( element.name in errors );\n\t\t\t\t} );\n\t\t\t}\n\t\t\tif ( this.settings.showErrors ) {\n\t\t\t\tthis.settings.showErrors.call( this, this.errorMap, this.errorList );\n\t\t\t} else {\n\t\t\t\tthis.defaultShowErrors();\n\t\t\t}\n\t\t},\n\n\t\t// https://jqueryvalidation.org/Validator.resetForm/\n\t\tresetForm: function() {\n\t\t\tif ( $.fn.resetForm ) {\n\t\t\t\t$( this.currentForm ).resetForm();\n\t\t\t}\n\t\t\tthis.invalid = {};\n\t\t\tthis.submitted = {};\n\t\t\tthis.prepareForm();\n\t\t\tthis.hideErrors();\n\t\t\tvar elements = this.elements()\n\t\t\t\t.removeData( \"previousValue\" )\n\t\t\t\t.removeAttr( \"aria-invalid\" );\n\n\t\t\tthis.resetElements( elements );\n\t\t},\n\n\t\tresetElements: function( elements ) {\n\t\t\tvar i;\n\n\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\tfor ( i = 0; elements[ i ]; i++ ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, elements[ i ],\n\t\t\t\t\t\tthis.settings.errorClass, \"\" );\n\t\t\t\t\tthis.findByName( elements[ i ].name ).removeClass( this.settings.validClass );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\telements\n\t\t\t\t\t.removeClass( this.settings.errorClass )\n\t\t\t\t\t.removeClass( this.settings.validClass );\n\t\t\t}\n\t\t},\n\n\t\tnumberOfInvalids: function() {\n\t\t\treturn this.objectLength( this.invalid );\n\t\t},\n\n\t\tobjectLength: function( obj ) {\n\t\t\t/* jshint unused: false */\n\t\t\tvar count = 0,\n\t\t\t\ti;\n\t\t\tfor ( i in obj ) {\n\n\t\t\t\t// This check allows counting elements with empty error\n\t\t\t\t// message as invalid elements\n\t\t\t\tif ( obj[ i ] !== undefined && obj[ i ] !== null && obj[ i ] !== false ) {\n\t\t\t\t\tcount++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn count;\n\t\t},\n\n\t\thideErrors: function() {\n\t\t\tthis.hideThese( this.toHide );\n\t\t},\n\n\t\thideThese: function( errors ) {\n\t\t\terrors.not( this.containers ).text( \"\" );\n\t\t\tthis.addWrapper( errors ).hide();\n\t\t},\n\n\t\tvalid: function() {\n\t\t\treturn this.size() === 0;\n\t\t},\n\n\t\tsize: function() {\n\t\t\treturn this.errorList.length;\n\t\t},\n\n\t\tfocusInvalid: function() {\n\t\t\tif ( this.settings.focusInvalid ) {\n\t\t\t\ttry {\n\t\t\t\t\t$( this.findLastActive() || this.errorList.length && this.errorList[ 0 ].element || [] )\n\t\t\t\t\t.filter( \":visible\" )\n\t\t\t\t\t.trigger( \"focus\" )\n\n\t\t\t\t\t// Manually trigger focusin event; without it, focusin handler isn't called, findLastActive won't have anything to find\n\t\t\t\t\t.trigger( \"focusin\" );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// Ignore IE throwing errors when focusing hidden elements\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tfindLastActive: function() {\n\t\t\tvar lastActive = this.lastActive;\n\t\t\treturn lastActive && $.grep( this.errorList, function( n ) {\n\t\t\t\treturn n.element.name === lastActive.name;\n\t\t\t} ).length === 1 && lastActive;\n\t\t},\n\n\t\telements: function() {\n\t\t\tvar validator = this,\n\t\t\t\trulesCache = {},\n\t\t\t\tselectors = [ \"input\", \"select\", \"textarea\", \"[contenteditable]\" ];\n\n\t\t\t// Select all valid inputs inside the form (no submit or reset buttons)\n\t\t\treturn $( this.currentForm )\n\t\t\t.find( selectors.concat( this.settings.customElements ).join( \", \" ) )\n\t\t\t.not( \":submit, :reset, :image, :disabled\" )\n\t\t\t.not( this.settings.ignore )\n\t\t\t.filter( function() {\n\t\t\t\tvar name = this.name || $( this ).attr( \"name\" ); // For contenteditable\n\t\t\t\tvar isContentEditable = typeof $( this ).attr( \"contenteditable\" ) !== \"undefined\" && $( this ).attr( \"contenteditable\" ) !== \"false\";\n\n\t\t\t\tif ( !name && validator.settings.debug && window.console ) {\n\t\t\t\t\tconsole.error( \"%o has no name assigned\", this );\n\t\t\t\t}\n\n\t\t\t\t// Set form expando on contenteditable\n\t\t\t\tif ( isContentEditable ) {\n\t\t\t\t\tthis.form = $( this ).closest( \"form\" )[ 0 ];\n\t\t\t\t\tthis.name = name;\n\t\t\t\t}\n\n\t\t\t\t// Ignore elements that belong to other/nested forms\n\t\t\t\tif ( this.form !== validator.currentForm ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\t// Select only the first element for each name, and only those with rules specified\n\t\t\t\tif ( name in rulesCache || !validator.objectLength( $( this ).rules() ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\trulesCache[ name ] = true;\n\t\t\t\treturn true;\n\t\t\t} );\n\t\t},\n\n\t\tclean: function( selector ) {\n\t\t\treturn $( selector )[ 0 ];\n\t\t},\n\n\t\terrors: function() {\n\t\t\tvar errorClass = this.settings.errorClass.split( \" \" ).join( \".\" );\n\t\t\treturn $( this.settings.errorElement + \".\" + errorClass, this.errorContext );\n\t\t},\n\n\t\tresetInternals: function() {\n\t\t\tthis.successList = [];\n\t\t\tthis.errorList = [];\n\t\t\tthis.errorMap = {};\n\t\t\tthis.toShow = $( [] );\n\t\t\tthis.toHide = $( [] );\n\t\t},\n\n\t\treset: function() {\n\t\t\tthis.resetInternals();\n\t\t\tthis.currentElements = $( [] );\n\t\t},\n\n\t\tprepareForm: function() {\n\t\t\tthis.reset();\n\t\t\tthis.toHide = this.errors().add( this.containers );\n\t\t},\n\n\t\tprepareElement: function( element ) {\n\t\t\tthis.reset();\n\t\t\tthis.toHide = this.errorsFor( element );\n\t\t},\n\n\t\telementValue: function( element ) {\n\t\t\tvar $element = $( element ),\n\t\t\t\ttype = element.type,\n\t\t\t\tisContentEditable = typeof $element.attr( \"contenteditable\" ) !== \"undefined\" && $element.attr( \"contenteditable\" ) !== \"false\",\n\t\t\t\tval, idx;\n\n\t\t\tif ( type === \"radio\" || type === \"checkbox\" ) {\n\t\t\t\treturn this.findByName( element.name ).filter( \":checked\" ).val();\n\t\t\t} else if ( type === \"number\" && typeof element.validity !== \"undefined\" ) {\n\t\t\t\treturn element.validity.badInput ? \"NaN\" : $element.val();\n\t\t\t}\n\n\t\t\tif ( isContentEditable ) {\n\t\t\t\tval = $element.text();\n\t\t\t} else {\n\t\t\t\tval = $element.val();\n\t\t\t}\n\n\t\t\tif ( type === \"file\" ) {\n\n\t\t\t\t// Modern browser (chrome & safari)\n\t\t\t\tif ( val.substr( 0, 12 ) === \"C:\\\\fakepath\\\\\" ) {\n\t\t\t\t\treturn val.substr( 12 );\n\t\t\t\t}\n\n\t\t\t\t// Legacy browsers\n\t\t\t\t// Unix-based path\n\t\t\t\tidx = val.lastIndexOf( \"/\" );\n\t\t\t\tif ( idx >= 0 ) {\n\t\t\t\t\treturn val.substr( idx + 1 );\n\t\t\t\t}\n\n\t\t\t\t// Windows-based path\n\t\t\t\tidx = val.lastIndexOf( \"\\\\\" );\n\t\t\t\tif ( idx >= 0 ) {\n\t\t\t\t\treturn val.substr( idx + 1 );\n\t\t\t\t}\n\n\t\t\t\t// Just the file name\n\t\t\t\treturn val;\n\t\t\t}\n\n\t\t\tif ( typeof val === \"string\" ) {\n\t\t\t\treturn val.replace( /\\r/g, \"\" );\n\t\t\t}\n\t\t\treturn val;\n\t\t},\n\n\t\tcheck: function( element ) {\n\t\t\telement = this.validationTargetFor( this.clean( element ) );\n\n\t\t\tvar rules = $( element ).rules(),\n\t\t\t\trulesCount = $.map( rules, function( n, i ) {\n\t\t\t\t\treturn i;\n\t\t\t\t} ).length,\n\t\t\t\tdependencyMismatch = false,\n\t\t\t\tval = this.elementValue( element ),\n\t\t\t\tresult, method, rule, normalizer;\n\n\t\t\t// Abort any pending Ajax request from a previous call to this method.\n\t\t\tthis.abortRequest( element );\n\n\t\t\t// Prioritize the local normalizer defined for this element over the global one\n\t\t\t// if the former exists, otherwise user the global one in case it exists.\n\t\t\tif ( typeof rules.normalizer === \"function\" ) {\n\t\t\t\tnormalizer = rules.normalizer;\n\t\t\t} else if (\ttypeof this.settings.normalizer === \"function\" ) {\n\t\t\t\tnormalizer = this.settings.normalizer;\n\t\t\t}\n\n\t\t\t// If normalizer is defined, then call it to retreive the changed value instead\n\t\t\t// of using the real one.\n\t\t\t// Note that `this` in the normalizer is `element`.\n\t\t\tif ( normalizer ) {\n\t\t\t\tval = normalizer.call( element, val );\n\n\t\t\t\t// Delete the normalizer from rules to avoid treating it as a pre-defined method.\n\t\t\t\tdelete rules.normalizer;\n\t\t\t}\n\n\t\t\tfor ( method in rules ) {\n\t\t\t\trule = { method: method, parameters: rules[ method ] };\n\t\t\t\ttry {\n\t\t\t\t\tresult = $.validator.methods[ method ].call( this, val, element, rule.parameters );\n\n\t\t\t\t\t// If a method indicates that the field is optional and therefore valid,\n\t\t\t\t\t// don't mark it as valid when there are no other rules\n\t\t\t\t\tif ( result === \"dependency-mismatch\" && rulesCount === 1 ) {\n\t\t\t\t\t\tdependencyMismatch = true;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tdependencyMismatch = false;\n\n\t\t\t\t\tif ( result === \"pending\" ) {\n\t\t\t\t\t\tthis.toHide = this.toHide.not( this.errorsFor( element ) );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !result ) {\n\t\t\t\t\t\tthis.formatAndAdd( element, rule );\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} catch ( e ) {\n\t\t\t\t\tif ( this.settings.debug && window.console ) {\n\t\t\t\t\t\tconsole.log( \"Exception occurred when checking element \" + element.id + \", check the '\" + rule.method + \"' method.\", e );\n\t\t\t\t\t}\n\t\t\t\t\tif ( e instanceof TypeError ) {\n\t\t\t\t\t\te.message += \". Exception occurred when checking element \" + element.id + \", check the '\" + rule.method + \"' method.\";\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( dependencyMismatch ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( this.objectLength( rules ) ) {\n\t\t\t\tthis.successList.push( element );\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t// Return the custom message for the given element and validation method\n\t\t// specified in the element's HTML5 data attribute\n\t\t// return the generic message if present and no method specific message is present\n\t\tcustomDataMessage: function( element, method ) {\n\t\t\treturn $( element ).data( \"msg\" + method.charAt( 0 ).toUpperCase() +\n\t\t\t\tmethod.substring( 1 ).toLowerCase() ) || $( element ).data( \"msg\" );\n\t\t},\n\n\t\t// Return the custom message for the given element name and validation method\n\t\tcustomMessage: function( name, method ) {\n\t\t\tvar m = this.settings.messages[ name ];\n\t\t\treturn m && ( m.constructor === String ? m : m[ method ] );\n\t\t},\n\n\t\t// Return the first defined argument, allowing empty strings\n\t\tfindDefined: function() {\n\t\t\tfor ( var i = 0; i < arguments.length; i++ ) {\n\t\t\t\tif ( arguments[ i ] !== undefined ) {\n\t\t\t\t\treturn arguments[ i ];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn undefined;\n\t\t},\n\n\t\t// The second parameter 'rule' used to be a string, and extended to an object literal\n\t\t// of the following form:\n\t\t// rule = {\n\t\t// method: \"method name\",\n\t\t// parameters: \"the given method parameters\"\n\t\t// }\n\t\t//\n\t\t// The old behavior still supported, kept to maintain backward compatibility with\n\t\t// old code, and will be removed in the next major release.\n\t\tdefaultMessage: function( element, rule ) {\n\t\t\tif ( typeof rule === \"string\" ) {\n\t\t\t\trule = { method: rule };\n\t\t\t}\n\n\t\t\tvar message = this.findDefined(\n\t\t\t\t\tthis.customMessage( element.name, rule.method ),\n\t\t\t\t\tthis.customDataMessage( element, rule.method ),\n\n\t\t\t\t\t// 'title' is never undefined, so handle empty string as undefined\n\t\t\t\t\t!this.settings.ignoreTitle && element.title || undefined,\n\t\t\t\t\t$.validator.messages[ rule.method ],\n\t\t\t\t\t\"Warning: No message defined for \" + element.name + \"\"\n\t\t\t\t),\n\t\t\t\ttheregex = /\\$?\\{(\\d+)\\}/g;\n\t\t\tif ( typeof message === \"function\" ) {\n\t\t\t\tmessage = message.call( this, rule.parameters, element );\n\t\t\t} else if ( theregex.test( message ) ) {\n\t\t\t\tmessage = $.validator.format( message.replace( theregex, \"{$1}\" ), rule.parameters );\n\t\t\t}\n\n\t\t\treturn message;\n\t\t},\n\n\t\tformatAndAdd: function( element, rule ) {\n\t\t\tvar message = this.defaultMessage( element, rule );\n\n\t\t\tthis.errorList.push( {\n\t\t\t\tmessage: message,\n\t\t\t\telement: element,\n\t\t\t\tmethod: rule.method\n\t\t\t} );\n\n\t\t\tthis.errorMap[ element.name ] = message;\n\t\t\tthis.submitted[ element.name ] = message;\n\t\t},\n\n\t\taddWrapper: function( toToggle ) {\n\t\t\tif ( this.settings.wrapper ) {\n\t\t\t\ttoToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) );\n\t\t\t}\n\t\t\treturn toToggle;\n\t\t},\n\n\t\tdefaultShowErrors: function() {\n\t\t\tvar i, elements, error;\n\t\t\tfor ( i = 0; this.errorList[ i ]; i++ ) {\n\t\t\t\terror = this.errorList[ i ];\n\t\t\t\tif ( this.settings.highlight ) {\n\t\t\t\t\tthis.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t\tthis.showLabel( error.element, error.message );\n\t\t\t}\n\t\t\tif ( this.errorList.length ) {\n\t\t\t\tthis.toShow = this.toShow.add( this.containers );\n\t\t\t}\n\t\t\tif ( this.settings.success ) {\n\t\t\t\tfor ( i = 0; this.successList[ i ]; i++ ) {\n\t\t\t\t\tthis.showLabel( this.successList[ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\tfor ( i = 0, elements = this.validElements(); elements[ i ]; i++ ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, elements[ i ], this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.toHide = this.toHide.not( this.toShow );\n\t\t\tthis.hideErrors();\n\t\t\tthis.addWrapper( this.toShow ).show();\n\t\t},\n\n\t\tvalidElements: function() {\n\t\t\treturn this.currentElements.not( this.invalidElements() );\n\t\t},\n\n\t\tinvalidElements: function() {\n\t\t\treturn $( this.errorList ).map( function() {\n\t\t\t\treturn this.element;\n\t\t\t} );\n\t\t},\n\n\t\tshowLabel: function( element, message ) {\n\t\t\tvar place, group, errorID, v,\n\t\t\t\terror = this.errorsFor( element ),\n\t\t\t\telementID = this.idOrName( element ),\n\t\t\t\tdescribedBy = $( element ).attr( \"aria-describedby\" );\n\n\t\t\tif ( error.length ) {\n\n\t\t\t\t// Refresh error/success class\n\t\t\t\terror.removeClass( this.settings.validClass ).addClass( this.settings.errorClass );\n\n\t\t\t\t// Replace message on existing label\n\t\t\t\tif ( this.settings && this.settings.escapeHtml ) {\n\t\t\t\t\terror.text( message || \"\" );\n\t\t\t\t} else {\n\t\t\t\t\terror.html( message || \"\" );\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Create error element\n\t\t\t\terror = $( \"<\" + this.settings.errorElement + \">\" )\n\t\t\t\t\t.attr( \"id\", elementID + \"-error\" )\n\t\t\t\t\t.addClass( this.settings.errorClass );\n\n\t\t\t\tif ( this.settings && this.settings.escapeHtml ) {\n\t\t\t\t\terror.text( message || \"\" );\n\t\t\t\t} else {\n\t\t\t\t\terror.html( message || \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Maintain reference to the element to be placed into the DOM\n\t\t\t\tplace = error;\n\t\t\t\tif ( this.settings.wrapper ) {\n\n\t\t\t\t\t// Make sure the element is visible, even in IE\n\t\t\t\t\t// actually showing the wrapped element is handled elsewhere\n\t\t\t\t\tplace = error.hide().show().wrap( \"<\" + this.settings.wrapper + \"/>\" ).parent();\n\t\t\t\t}\n\t\t\t\tif ( this.labelContainer.length ) {\n\t\t\t\t\tthis.labelContainer.append( place );\n\t\t\t\t} else if ( this.settings.errorPlacement ) {\n\t\t\t\t\tthis.settings.errorPlacement.call( this, place, $( element ) );\n\t\t\t\t} else {\n\t\t\t\t\tplace.insertAfter( element );\n\t\t\t\t}\n\n\t\t\t\t// Link error back to the element\n\t\t\t\tif ( error.is( \"label\" ) ) {\n\n\t\t\t\t\t// If the error is a label, then associate using 'for'\n\t\t\t\t\terror.attr( \"for\", elementID );\n\n\t\t\t\t\t// If the element is not a child of an associated label, then it's necessary\n\t\t\t\t\t// to explicitly apply aria-describedby\n\t\t\t\t} else if ( error.parents( \"label[for='\" + this.escapeCssMeta( elementID ) + \"']\" ).length === 0 ) {\n\t\t\t\t\terrorID = error.attr( \"id\" );\n\n\t\t\t\t\t// Respect existing non-error aria-describedby\n\t\t\t\t\tif ( !describedBy ) {\n\t\t\t\t\t\tdescribedBy = errorID;\n\t\t\t\t\t} else if ( !describedBy.match( new RegExp( \"\\\\b\" + this.escapeCssMeta( errorID ) + \"\\\\b\" ) ) ) {\n\n\t\t\t\t\t\t// Add to end of list if not already present\n\t\t\t\t\t\tdescribedBy += \" \" + errorID;\n\t\t\t\t\t}\n\t\t\t\t\t$( element ).attr( \"aria-describedby\", describedBy );\n\n\t\t\t\t\t// If this element is grouped, then assign to all elements in the same group\n\t\t\t\t\tgroup = this.groups[ element.name ];\n\t\t\t\t\tif ( group ) {\n\t\t\t\t\t\tv = this;\n\t\t\t\t\t\t$.each( v.groups, function( name, testgroup ) {\n\t\t\t\t\t\t\tif ( testgroup === group ) {\n\t\t\t\t\t\t\t\t$( \"[name='\" + v.escapeCssMeta( name ) + \"']\", v.currentForm )\n\t\t\t\t\t\t\t\t\t.attr( \"aria-describedby\", error.attr( \"id\" ) );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( !message && this.settings.success ) {\n\t\t\t\terror.text( \"\" );\n\t\t\t\tif ( typeof this.settings.success === \"string\" ) {\n\t\t\t\t\terror.addClass( this.settings.success );\n\t\t\t\t} else {\n\t\t\t\t\tthis.settings.success( error, element );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.toShow = this.toShow.add( error );\n\t\t},\n\n\t\terrorsFor: function( element ) {\n\t\t\tvar name = this.escapeCssMeta( this.idOrName( element ) ),\n\t\t\t\tdescriber = $( element ).attr( \"aria-describedby\" ),\n\t\t\t\tselector = \"label[for='\" + name + \"'], label[for='\" + name + \"'] *\";\n\n\t\t\t// 'aria-describedby' should directly reference the error element\n\t\t\tif ( describer ) {\n\t\t\t\tselector = selector + \", #\" + this.escapeCssMeta( describer )\n\t\t\t\t\t.replace( /\\s+/g, \", #\" );\n\t\t\t}\n\n\t\t\treturn this\n\t\t\t\t.errors()\n\t\t\t\t.filter( selector );\n\t\t},\n\n\t\t// See https://api.jquery.com/category/selectors/, for CSS\n\t\t// meta-characters that should be escaped in order to be used with JQuery\n\t\t// as a literal part of a name/id or any selector.\n\t\tescapeCssMeta: function( string ) {\n\t\t\tif ( string === undefined ) {\n\t\t\t\treturn \"\";\n\t\t\t}\n\n\t\t\treturn string.replace( /([\\\\!\"#$%&'()*+,./:;<=>?@\\[\\]^`{|}~])/g, \"\\\\$1\" );\n\t\t},\n\n\t\tidOrName: function( element ) {\n\t\t\treturn this.groups[ element.name ] || ( this.checkable( element ) ? element.name : element.id || element.name );\n\t\t},\n\n\t\tvalidationTargetFor: function( element ) {\n\n\t\t\t// If radio/checkbox, validate first element in group instead\n\t\t\tif ( this.checkable( element ) ) {\n\t\t\t\telement = this.findByName( element.name );\n\t\t\t}\n\n\t\t\t// Always apply ignore filter\n\t\t\treturn $( element ).not( this.settings.ignore )[ 0 ];\n\t\t},\n\n\t\tcheckable: function( element ) {\n\t\t\treturn ( /radio|checkbox/i ).test( element.type );\n\t\t},\n\n\t\tfindByName: function( name ) {\n\t\t\treturn $( this.currentForm ).find( \"[name='\" + this.escapeCssMeta( name ) + \"']\" );\n\t\t},\n\n\t\tgetLength: function( value, element ) {\n\t\t\tswitch ( element.nodeName.toLowerCase() ) {\n\t\t\tcase \"select\":\n\t\t\t\treturn $( \"option:selected\", element ).length;\n\t\t\tcase \"input\":\n\t\t\t\tif ( this.checkable( element ) ) {\n\t\t\t\t\treturn this.findByName( element.name ).filter( \":checked\" ).length;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn value.length;\n\t\t},\n\n\t\tdepend: function( param, element ) {\n\t\t\treturn this.dependTypes[ typeof param ] ? this.dependTypes[ typeof param ]( param, element ) : true;\n\t\t},\n\n\t\tdependTypes: {\n\t\t\t\"boolean\": function( param ) {\n\t\t\t\treturn param;\n\t\t\t},\n\t\t\t\"string\": function( param, element ) {\n\t\t\t\treturn !!$( param, element.form ).length;\n\t\t\t},\n\t\t\t\"function\": function( param, element ) {\n\t\t\t\treturn param( element );\n\t\t\t}\n\t\t},\n\n\t\toptional: function( element ) {\n\t\t\tvar val = this.elementValue( element );\n\t\t\treturn !$.validator.methods.required.call( this, val, element ) && \"dependency-mismatch\";\n\t\t},\n\n\t\telementAjaxPort: function( element ) {\n\t\t\treturn \"validate\" + element.name;\n\t\t},\n\n\t\tstartRequest: function( element ) {\n\t\t\tif ( !this.pending[ element.name ] ) {\n\t\t\t\tthis.pendingRequest++;\n\t\t\t\t$( element ).addClass( this.settings.pendingClass );\n\t\t\t\tthis.pending[ element.name ] = true;\n\t\t\t}\n\t\t},\n\n\t\tstopRequest: function( element, valid ) {\n\t\t\tthis.pendingRequest--;\n\n\t\t\t// Sometimes synchronization fails, make sure pendingRequest is never < 0\n\t\t\tif ( this.pendingRequest < 0 ) {\n\t\t\t\tthis.pendingRequest = 0;\n\t\t\t}\n\t\t\tdelete this.pending[ element.name ];\n\t\t\t$( element ).removeClass( this.settings.pendingClass );\n\t\t\tif ( valid && this.pendingRequest === 0 && this.formSubmitted && this.form() && this.pendingRequest === 0 ) {\n\t\t\t\t$( this.currentForm ).trigger( \"submit\" );\n\n\t\t\t\t// Remove the hidden input that was used as a replacement for the\n\t\t\t\t// missing submit button. The hidden input is added by `handle()`\n\t\t\t\t// to ensure that the value of the used submit button is passed on\n\t\t\t\t// for scripted submits triggered by this method\n\t\t\t\tif ( this.submitButton ) {\n\t\t\t\t\t$( \"input:hidden[name='\" + this.submitButton.name + \"']\", this.currentForm ).remove();\n\t\t\t\t}\n\n\t\t\t\tthis.formSubmitted = false;\n\t\t\t} else if ( !valid && this.pendingRequest === 0 && this.formSubmitted ) {\n\t\t\t\t$( this.currentForm ).triggerHandler( \"invalid-form\", [ this ] );\n\t\t\t\tthis.formSubmitted = false;\n\t\t\t}\n\t\t},\n\n\t\tabortRequest: function( element ) {\n\t\t\tvar port;\n\n\t\t\tif ( this.pending[ element.name ] ) {\n\t\t\t\tport = this.elementAjaxPort( element );\n\t\t\t\t$.ajaxAbort( port );\n\n\t\t\t\tthis.pendingRequest--;\n\n\t\t\t\t// Sometimes synchronization fails, make sure pendingRequest is never < 0\n\t\t\t\tif ( this.pendingRequest < 0 ) {\n\t\t\t\t\tthis.pendingRequest = 0;\n\t\t\t\t}\n\n\t\t\t\tdelete this.pending[ element.name ];\n\t\t\t\t$( element ).removeClass( this.settings.pendingClass );\n\t\t\t}\n\t\t},\n\n\t\tpreviousValue: function( element, method ) {\n\t\t\tmethod = typeof method === \"string\" && method || \"remote\";\n\n\t\t\treturn $.data( element, \"previousValue\" ) || $.data( element, \"previousValue\", {\n\t\t\t\told: null,\n\t\t\t\tvalid: true,\n\t\t\t\tmessage: this.defaultMessage( element, { method: method } )\n\t\t\t} );\n\t\t},\n\n\t\t// Cleans up all forms and elements, removes validator-specific events\n\t\tdestroy: function() {\n\t\t\tthis.resetForm();\n\n\t\t\t$( this.currentForm )\n\t\t\t\t.off( \".validate\" )\n\t\t\t\t.removeData( \"validator\" )\n\t\t\t\t.find( \".validate-equalTo-blur\" )\n\t\t\t\t\t.off( \".validate-equalTo\" )\n\t\t\t\t\t.removeClass( \"validate-equalTo-blur\" )\n\t\t\t\t.find( \".validate-lessThan-blur\" )\n\t\t\t\t\t.off( \".validate-lessThan\" )\n\t\t\t\t\t.removeClass( \"validate-lessThan-blur\" )\n\t\t\t\t.find( \".validate-lessThanEqual-blur\" )\n\t\t\t\t\t.off( \".validate-lessThanEqual\" )\n\t\t\t\t\t.removeClass( \"validate-lessThanEqual-blur\" )\n\t\t\t\t.find( \".validate-greaterThanEqual-blur\" )\n\t\t\t\t\t.off( \".validate-greaterThanEqual\" )\n\t\t\t\t\t.removeClass( \"validate-greaterThanEqual-blur\" )\n\t\t\t\t.find( \".validate-greaterThan-blur\" )\n\t\t\t\t\t.off( \".validate-greaterThan\" )\n\t\t\t\t\t.removeClass( \"validate-greaterThan-blur\" );\n\t\t}\n\n\t},\n\n\tclassRuleSettings: {\n\t\trequired: { required: true },\n\t\temail: { email: true },\n\t\turl: { url: true },\n\t\tdate: { date: true },\n\t\tdateISO: { dateISO: true },\n\t\tnumber: { number: true },\n\t\tdigits: { digits: true },\n\t\tcreditcard: { creditcard: true }\n\t},\n\n\taddClassRules: function( className, rules ) {\n\t\tif ( className.constructor === String ) {\n\t\t\tthis.classRuleSettings[ className ] = rules;\n\t\t} else {\n\t\t\t$.extend( this.classRuleSettings, className );\n\t\t}\n\t},\n\n\tclassRules: function( element ) {\n\t\tvar rules = {},\n\t\t\tclasses = $( element ).attr( \"class\" );\n\n\t\tif ( classes ) {\n\t\t\t$.each( classes.split( \" \" ), function() {\n\t\t\t\tif ( this in $.validator.classRuleSettings ) {\n\t\t\t\t\t$.extend( rules, $.validator.classRuleSettings[ this ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t\treturn rules;\n\t},\n\n\tnormalizeAttributeRule: function( rules, type, method, value ) {\n\n\t\t// Convert the value to a number for number inputs, and for text for backwards compability\n\t\t// allows type=\"date\" and others to be compared as strings\n\t\tif ( /min|max|step/.test( method ) && ( type === null || /number|range|text/.test( type ) ) ) {\n\t\t\tvalue = Number( value );\n\n\t\t\t// Support Opera Mini, which returns NaN for undefined minlength\n\t\t\tif ( isNaN( value ) ) {\n\t\t\t\tvalue = undefined;\n\t\t\t}\n\t\t}\n\n\t\tif ( value || value === 0 ) {\n\t\t\trules[ method ] = value;\n\t\t} else if ( type === method && type !== \"range\" ) {\n\n\t\t\t// Exception: the jquery validate 'range' method\n\t\t\t// does not test for the html5 'range' type\n\t\t\trules[ type === \"date\" ? \"dateISO\" : method ] = true;\n\t\t}\n\t},\n\n\tattributeRules: function( element ) {\n\t\tvar rules = {},\n\t\t\t$element = $( element ),\n\t\t\ttype = element.getAttribute( \"type\" ),\n\t\t\tmethod, value;\n\n\t\tfor ( method in $.validator.methods ) {\n\n\t\t\t// Support for in both html5 and older browsers\n\t\t\tif ( method === \"required\" ) {\n\t\t\t\tvalue = element.getAttribute( method );\n\n\t\t\t\t// Some browsers return an empty string for the required attribute\n\t\t\t\t// and non-HTML5 browsers might have required=\"\" markup\n\t\t\t\tif ( value === \"\" ) {\n\t\t\t\t\tvalue = true;\n\t\t\t\t}\n\n\t\t\t\t// Force non-HTML5 browsers to return bool\n\t\t\t\tvalue = !!value;\n\t\t\t} else {\n\t\t\t\tvalue = $element.attr( method );\n\t\t\t}\n\n\t\t\tthis.normalizeAttributeRule( rules, type, method, value );\n\t\t}\n\n\t\t// 'maxlength' may be returned as -1, 2147483647 ( IE ) and 524288 ( safari ) for text inputs\n\t\tif ( rules.maxlength && /-1|2147483647|524288/.test( rules.maxlength ) ) {\n\t\t\tdelete rules.maxlength;\n\t\t}\n\n\t\treturn rules;\n\t},\n\n\tdataRules: function( element ) {\n\t\tvar rules = {},\n\t\t\t$element = $( element ),\n\t\t\ttype = element.getAttribute( \"type\" ),\n\t\t\tmethod, value;\n\n\t\tfor ( method in $.validator.methods ) {\n\t\t\tvalue = $element.data( \"rule\" + method.charAt( 0 ).toUpperCase() + method.substring( 1 ).toLowerCase() );\n\n\t\t\t// Cast empty attributes like `data-rule-required` to `true`\n\t\t\tif ( value === \"\" ) {\n\t\t\t\tvalue = true;\n\t\t\t}\n\n\t\t\tthis.normalizeAttributeRule( rules, type, method, value );\n\t\t}\n\t\treturn rules;\n\t},\n\n\tstaticRules: function( element ) {\n\t\tvar rules = {},\n\t\t\tvalidator = $.data( element.form, \"validator\" );\n\n\t\tif ( validator.settings.rules ) {\n\t\t\trules = $.validator.normalizeRule( validator.settings.rules[ element.name ] ) || {};\n\t\t}\n\t\treturn rules;\n\t},\n\n\tnormalizeRules: function( rules, element ) {\n\n\t\t// Handle dependency check\n\t\t$.each( rules, function( prop, val ) {\n\n\t\t\t// Ignore rule when param is explicitly false, eg. required:false\n\t\t\tif ( val === false ) {\n\t\t\t\tdelete rules[ prop ];\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( val.param || val.depends ) {\n\t\t\t\tvar keepRule = true;\n\t\t\t\tswitch ( typeof val.depends ) {\n\t\t\t\tcase \"string\":\n\t\t\t\t\tkeepRule = !!$( val.depends, element.form ).length;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"function\":\n\t\t\t\t\tkeepRule = val.depends.call( element, element );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif ( keepRule ) {\n\t\t\t\t\trules[ prop ] = val.param !== undefined ? val.param : true;\n\t\t\t\t} else {\n\t\t\t\t\t$.data( element.form, \"validator\" ).resetElements( $( element ) );\n\t\t\t\t\tdelete rules[ prop ];\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\t// Evaluate parameters\n\t\t$.each( rules, function( rule, parameter ) {\n\t\t\trules[ rule ] = typeof parameter === \"function\" && rule !== \"normalizer\" ? parameter( element ) : parameter;\n\t\t} );\n\n\t\t// Clean number parameters\n\t\t$.each( [ \"minlength\", \"maxlength\" ], function() {\n\t\t\tif ( rules[ this ] ) {\n\t\t\t\trules[ this ] = Number( rules[ this ] );\n\t\t\t}\n\t\t} );\n\t\t$.each( [ \"rangelength\", \"range\" ], function() {\n\t\t\tvar parts;\n\t\t\tif ( rules[ this ] ) {\n\t\t\t\tif ( Array.isArray( rules[ this ] ) ) {\n\t\t\t\t\trules[ this ] = [ Number( rules[ this ][ 0 ] ), Number( rules[ this ][ 1 ] ) ];\n\t\t\t\t} else if ( typeof rules[ this ] === \"string\" ) {\n\t\t\t\t\tparts = rules[ this ].replace( /[\\[\\]]/g, \"\" ).split( /[\\s,]+/ );\n\t\t\t\t\trules[ this ] = [ Number( parts[ 0 ] ), Number( parts[ 1 ] ) ];\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\tif ( $.validator.autoCreateRanges ) {\n\n\t\t\t// Auto-create ranges\n\t\t\tif ( rules.min != null && rules.max != null ) {\n\t\t\t\trules.range = [ rules.min, rules.max ];\n\t\t\t\tdelete rules.min;\n\t\t\t\tdelete rules.max;\n\t\t\t}\n\t\t\tif ( rules.minlength != null && rules.maxlength != null ) {\n\t\t\t\trules.rangelength = [ rules.minlength, rules.maxlength ];\n\t\t\t\tdelete rules.minlength;\n\t\t\t\tdelete rules.maxlength;\n\t\t\t}\n\t\t}\n\n\t\treturn rules;\n\t},\n\n\t// Converts a simple string to a {string: true} rule, e.g., \"required\" to {required:true}\n\tnormalizeRule: function( data ) {\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tvar transformed = {};\n\t\t\t$.each( data.split( /\\s/ ), function() {\n\t\t\t\ttransformed[ this ] = true;\n\t\t\t} );\n\t\t\tdata = transformed;\n\t\t}\n\t\treturn data;\n\t},\n\n\t// https://jqueryvalidation.org/jQuery.validator.addMethod/\n\taddMethod: function( name, method, message ) {\n\t\t$.validator.methods[ name ] = method;\n\t\t$.validator.messages[ name ] = message !== undefined ? message : $.validator.messages[ name ];\n\t\tif ( method.length < 3 ) {\n\t\t\t$.validator.addClassRules( name, $.validator.normalizeRule( name ) );\n\t\t}\n\t},\n\n\t// https://jqueryvalidation.org/jQuery.validator.methods/\n\tmethods: {\n\n\t\t// https://jqueryvalidation.org/required-method/\n\t\trequired: function( value, element, param ) {\n\n\t\t\t// Check if dependency is met\n\t\t\tif ( !this.depend( param, element ) ) {\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t}\n\t\t\tif ( element.nodeName.toLowerCase() === \"select\" ) {\n\n\t\t\t\t// Could be an array for select-multiple or a string, both are fine this way\n\t\t\t\tvar val = $( element ).val();\n\t\t\t\treturn val && val.length > 0;\n\t\t\t}\n\t\t\tif ( this.checkable( element ) ) {\n\t\t\t\treturn this.getLength( value, element ) > 0;\n\t\t\t}\n\t\t\treturn value !== undefined && value !== null && value.length > 0;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/email-method/\n\t\temail: function( value, element ) {\n\n\t\t\t// From https://html.spec.whatwg.org/multipage/forms.html#valid-e-mail-address\n\t\t\t// Retrieved 2014-01-14\n\t\t\t// If you have a problem with this implementation, report a bug against the above spec\n\t\t\t// Or use custom methods to implement your own email validation\n\t\t\treturn this.optional( element ) || /^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/url-method/\n\t\turl: function( value, element ) {\n\n\t\t\t// Copyright (c) 2010-2013 Diego Perini, MIT licensed\n\t\t\t// https://gist.github.com/dperini/729294\n\t\t\t// see also https://mathiasbynens.be/demo/url-regex\n\t\t\t// modified to allow protocol-relative URLs\n\t\t\treturn this.optional( element ) || /^(?:(?:(?:https?|ftp):)?\\/\\/)(?:(?:[^\\]\\[?\\/<~#`!@$^&*()+=}|:\";',>{ ]|%[0-9A-Fa-f]{2})+(?::(?:[^\\]\\[?\\/<~#`!@$^&*()+=}|:\";',>{ ]|%[0-9A-Fa-f]{2})*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z0-9\\u00a1-\\uffff][a-z0-9\\u00a1-\\uffff_-]{0,62})?[a-z0-9\\u00a1-\\uffff]\\.)+(?:[a-z\\u00a1-\\uffff]{2,}\\.?))(?::\\d{2,5})?(?:[/?#]\\S*)?$/i.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/date-method/\n\t\tdate: ( function() {\n\t\t\tvar called = false;\n\n\t\t\treturn function( value, element ) {\n\t\t\t\tif ( !called ) {\n\t\t\t\t\tcalled = true;\n\t\t\t\t\tif ( this.settings.debug && window.console ) {\n\t\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t\t\"The `date` method is deprecated and will be removed in version '2.0.0'.\\n\" +\n\t\t\t\t\t\t\t\"Please don't use it, since it relies on the Date constructor, which\\n\" +\n\t\t\t\t\t\t\t\"behaves very differently across browsers and locales. Use `dateISO`\\n\" +\n\t\t\t\t\t\t\t\"instead or one of the locale specific methods in `localizations/`\\n\" +\n\t\t\t\t\t\t\t\"and `additional-methods.js`.\"\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn this.optional( element ) || !/Invalid|NaN/.test( new Date( value ).toString() );\n\t\t\t};\n\t\t}() ),\n\n\t\t// https://jqueryvalidation.org/dateISO-method/\n\t\tdateISO: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^\\d{4}[\\/\\-](0?[1-9]|1[012])[\\/\\-](0?[1-9]|[12][0-9]|3[01])$/.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/number-method/\n\t\tnumber: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^(?:-?\\d+|-?\\d{1,3}(?:,\\d{3})+)?(?:-?\\.\\d+)?$/.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/digits-method/\n\t\tdigits: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^\\d+$/.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/minlength-method/\n\t\tminlength: function( value, element, param ) {\n\t\t\tvar length = Array.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || length >= param;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/maxlength-method/\n\t\tmaxlength: function( value, element, param ) {\n\t\t\tvar length = Array.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || length <= param;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/rangelength-method/\n\t\trangelength: function( value, element, param ) {\n\t\t\tvar length = Array.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || ( length >= param[ 0 ] && length <= param[ 1 ] );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/min-method/\n\t\tmin: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || value >= param;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/max-method/\n\t\tmax: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || value <= param;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/range-method/\n\t\trange: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || ( value >= param[ 0 ] && value <= param[ 1 ] );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/step-method/\n\t\tstep: function( value, element, param ) {\n\t\t\tvar type = $( element ).attr( \"type\" ),\n\t\t\t\terrorMessage = \"Step attribute on input type \" + type + \" is not supported.\",\n\t\t\t\tsupportedTypes = [ \"text\", \"number\", \"range\" ],\n\t\t\t\tre = new RegExp( \"\\\\b\" + type + \"\\\\b\" ),\n\t\t\t\tnotSupported = type && !re.test( supportedTypes.join() ),\n\t\t\t\tdecimalPlaces = function( num ) {\n\t\t\t\t\tvar match = ( \"\" + num ).match( /(?:\\.(\\d+))?$/ );\n\t\t\t\t\tif ( !match ) {\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Number of digits right of decimal point.\n\t\t\t\t\treturn match[ 1 ] ? match[ 1 ].length : 0;\n\t\t\t\t},\n\t\t\t\ttoInt = function( num ) {\n\t\t\t\t\treturn Math.round( num * Math.pow( 10, decimals ) );\n\t\t\t\t},\n\t\t\t\tvalid = true,\n\t\t\t\tdecimals;\n\n\t\t\t// Works only for text, number and range input types\n\t\t\t// TODO find a way to support input types date, datetime, datetime-local, month, time and week\n\t\t\tif ( notSupported ) {\n\t\t\t\tthrow new Error( errorMessage );\n\t\t\t}\n\n\t\t\tdecimals = decimalPlaces( param );\n\n\t\t\t// Value can't have too many decimals\n\t\t\tif ( decimalPlaces( value ) > decimals || toInt( value ) % toInt( param ) !== 0 ) {\n\t\t\t\tvalid = false;\n\t\t\t}\n\n\t\t\treturn this.optional( element ) || valid;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/equalTo-method/\n\t\tequalTo: function( value, element, param ) {\n\n\t\t\t// Bind to the blur event of the target in order to revalidate whenever the target field is updated\n\t\t\tvar target = $( param );\n\t\t\tif ( this.settings.onfocusout && target.not( \".validate-equalTo-blur\" ).length ) {\n\t\t\t\ttarget.addClass( \"validate-equalTo-blur\" ).on( \"blur.validate-equalTo\", function() {\n\t\t\t\t\t$( element ).valid();\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn value === target.val();\n\t\t},\n\n\t\t// https://jqueryvalidation.org/remote-method/\n\t\tremote: function( value, element, param, method ) {\n\t\t\tif ( this.optional( element ) ) {\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t}\n\n\t\t\tmethod = typeof method === \"string\" && method || \"remote\";\n\n\t\t\tvar previous = this.previousValue( element, method ),\n\t\t\t\tvalidator, data, optionDataString;\n\n\t\t\tif ( !this.settings.messages[ element.name ] ) {\n\t\t\t\tthis.settings.messages[ element.name ] = {};\n\t\t\t}\n\t\t\tprevious.originalMessage = previous.originalMessage || this.settings.messages[ element.name ][ method ];\n\t\t\tthis.settings.messages[ element.name ][ method ] = previous.message;\n\n\t\t\tparam = typeof param === \"string\" && { url: param } || param;\n\t\t\toptionDataString = $.param( $.extend( { data: value }, param.data ) );\n\t\t\tif ( previous.valid !== null && previous.old === optionDataString ) {\n\t\t\t\treturn previous.valid;\n\t\t\t}\n\n\t\t\tprevious.old = optionDataString;\n\t\t\tprevious.valid = null;\n\t\t\tvalidator = this;\n\t\t\tthis.startRequest( element );\n\t\t\tdata = {};\n\t\t\tdata[ element.name ] = value;\n\t\t\t$.ajax( $.extend( true, {\n\t\t\t\tmode: \"abort\",\n\t\t\t\tport: this.elementAjaxPort( element ),\n\t\t\t\tdataType: \"json\",\n\t\t\t\tdata: data,\n\t\t\t\tcontext: validator.currentForm,\n\t\t\t\tsuccess: function( response ) {\n\t\t\t\t\tvar valid = response === true || response === \"true\",\n\t\t\t\t\t\terrors, message, submitted;\n\n\t\t\t\t\tvalidator.settings.messages[ element.name ][ method ] = previous.originalMessage;\n\t\t\t\t\tif ( valid ) {\n\t\t\t\t\t\tsubmitted = validator.formSubmitted;\n\t\t\t\t\t\tvalidator.toHide = validator.errorsFor( element );\n\t\t\t\t\t\tvalidator.formSubmitted = submitted;\n\t\t\t\t\t\tvalidator.successList.push( element );\n\t\t\t\t\t\tvalidator.invalid[ element.name ] = false;\n\t\t\t\t\t\tvalidator.showErrors();\n\t\t\t\t\t} else {\n\t\t\t\t\t\terrors = {};\n\t\t\t\t\t\tmessage = response || validator.defaultMessage( element, { method: method, parameters: value } );\n\t\t\t\t\t\terrors[ element.name ] = previous.message = message;\n\t\t\t\t\t\tvalidator.invalid[ element.name ] = true;\n\t\t\t\t\t\tvalidator.showErrors( errors );\n\t\t\t\t\t}\n\t\t\t\t\tprevious.valid = valid;\n\t\t\t\t\tvalidator.stopRequest( element, valid );\n\t\t\t\t}\n\t\t\t}, param ) );\n\t\t\treturn \"pending\";\n\t\t}\n\t}\n\n} );\n\n// Ajax mode: abort\n// usage: $.ajax({ mode: \"abort\"[, port: \"uniqueport\"]});\n// $.ajaxAbort( port );\n// if mode:\"abort\" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort()\n\nvar pendingRequests = {},\n\tajax;\n\n// Use a prefilter if available (1.5+)\nif ( $.ajaxPrefilter ) {\n\t$.ajaxPrefilter( function( settings, _, xhr ) {\n\t\tvar port = settings.port;\n\t\tif ( settings.mode === \"abort\" ) {\n\t\t\t$.ajaxAbort( port );\n\t\t\tpendingRequests[ port ] = xhr;\n\t\t}\n\t} );\n} else {\n\n\t// Proxy ajax\n\tajax = $.ajax;\n\t$.ajax = function( settings ) {\n\t\tvar mode = ( \"mode\" in settings ? settings : $.ajaxSettings ).mode,\n\t\t\tport = ( \"port\" in settings ? settings : $.ajaxSettings ).port;\n\t\tif ( mode === \"abort\" ) {\n\t\t\t$.ajaxAbort( port );\n\t\t\tpendingRequests[ port ] = ajax.apply( this, arguments );\n\t\t\treturn pendingRequests[ port ];\n\t\t}\n\t\treturn ajax.apply( this, arguments );\n\t};\n}\n\n// Abort the previous request without sending a new one\n$.ajaxAbort = function( port ) {\n\tif ( pendingRequests[ port ] ) {\n\t\tpendingRequests[ port ].abort();\n\t\tdelete pendingRequests[ port ];\n\t}\n};\nreturn $;\n}));","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t\"formValidWaitManager\": 0,\n\t\"globalize\": 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkecommerce\"] = self[\"webpackChunkecommerce\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\n__webpack_require__.O(undefined, [\"jquery\"], function() { return __webpack_require__(41063); })\nvar __webpack_exports__ = __webpack_require__.O(undefined, [\"jquery\"], function() { return __webpack_require__(53114); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","Globalize","require","getLangMapping","document","getElementsByTagName","getAttribute","toLowerCase","Globalizer","init","langMapped","load","locale","parseDate","value","skeleton","formatDateShort","date","formatDate","Date","formatDateLong","formatDateFull","numberFormatterPercent","number","maximumFractionDigits","arguments","length","undefined","round","numberFormatter","style","formatNumber","fractionDigits","minimumFractionDigits","$","methods","element","parsedDate","this","optional","unobtrusive","adapters","add","options","tagName","toUpperCase","type","rules","required","message","messages","country","params","valuetocheck","maxlength","addMethod","val","addEventListener","event","querySelectorAll","Array","prototype","forEach","call","buttonWait","onclick","e","currentTarget","classList","submit","valid","removeClass","merge","arrayIsArray","isArray","obj","Object","toString","pathNormalize","path","attributes","join","Error","replace","name","split","arraySome","array","callback","i","some","coreLikelySubtags","Cldr","cldr","subtags","match","language","script","sep","localeSep","territory","variants","slice","concat","get","test","force","coreRemoveLikelySubtags","maxLanguageId","result","push","coreSubtags","aux","arrayForEach","bundleLookup","minLanguageId","availableBundleMap","_availableBundleMap","availableBundleMapQueue","_availableBundleMapQueue","bundle","existing","maxBundle","minBundle","splice","objectKeys","object","keys","createError","code","error","JSON","stringify","attribute","validate","check","validatePresence","validateType","expected","validateTypePath","isPlainObject","validateTypePlainObject","validateTypeString","resourceGet","data","node","coreSetAvailableBundles","json","main","hasOwnProperty","indexOf","alwaysArray","somethingOrArray","jsonMerge","destination","sources","source","prop","coreLoad","jsons","j","itemGetResolved","normalizedPath","_resolved","_alwaysArray","_coreLoad","_createError","_itemGetResolved","_jsonMerge","_pathNormalize","_resourceGet","_validatePresence","_validateType","_validateTypePath","_validateTypePlainObject","unicodeLocaleExtensions","variant","unicodeLocaleExtensionsRaw","pop","region","key","EventEmitter","proto","exports","indexOfListener","listeners","listener","alias","apply","getListeners","evt","response","events","_getEvents","RegExp","flattenListeners","flatListeners","getListenersAsObject","addListener","listenerIsWrapped","once","on","addOnceListener","defineEvent","defineEvents","evts","removeListener","index","off","addListeners","manipulateListeners","removeListeners","remove","single","multiple","removeEvent","_events","removeAllListeners","emitEvent","args","_getOnceReturnValue","trigger","emit","setOnceReturnValue","_onceReturnValue","noConflict","originalGlobalValue","superGet","superInit","validateTypeFunction","globalEe","validateTypeEvent","validateThenCall","method","self","getOverload","ee","_eventInit","supplementalMain","prepend","supplemental","weekData","firstDay","minDays","parseInt","timeData","allowed","preferred","initSuper","variable","formatMessage","objectExtend","partsPush","parts","formatMessageToParts","lastOffset","nameIncludingBrackets","offset","filter","part","partsJoin","map","runtimeStringify","_key","runtimeKey","stringHash","str","reduce","hash","charCodeAt","fnName","argsStr","Math","abs","functionName","fn","matches","exec","runtimeBind","runtimeArgs","generatorString","stringOrArray","validateCldr","skipBoolean","skip","pathRe","validateDefaultLocale","validateParameterPresence","validateParameterRange","minimum","maximum","validateParameterType","validateParameterTypeLocale","validateParameterTypePlainObject","alwaysCldr","localeOrCldr","regexpEscape","string","stringPad","count","right","String","validateLikelySubtags","_formatMessage","_formatMessageToParts","_isPlainObject","_objectExtend","_partsJoin","_partsPush","_regexpEscape","_runtimeBind","_stringPad","_validate","_validateCldr","_validateDefaultLocale","_validateParameterPresence","_validateParameterRange","_validateParameterTypePlainObject","_validateParameterType","numberNumberingSystem","_numberNumberingSystem","numberPattern","_numberPattern","validateParameterTypeNumber","_validateParameterTypeNumber","createErrorPluralModulePresence","validateParameterTypeCurrency","currencyFormatterFn","currencyToPartsFormatter","currencySupplementalOverride","currency","pattern","digits","fraction","fractionData","_digits","_rounding","objectFilter","testRe","copy","currencyUnitPatterns","currencyNameProperties","displayNames","unitPatterns","regexpNotS","regexpNotSAndZ","currencySymbolProperties","currencySpacing","symbol","symbolEntries","regexp","symbolForm","unshift","symbolEntry","position","currencyMatch","surroundingMatch","insertBetween","charAt","currencyNameFormat","formattedNumber","pluralForm","properties","displayName","unitPattern","currencySymbolFormat","currencyToPartsFormatterFn","numberToPartsFormatter","pluralGenerator","objectOmit","validateRequiredCldr","currencyFormatter","returnFn","accounting","raw","plural","currencyParser","formatCurrency","formatCurrencyToParts","parseCurrency","createErrorUnsupportedFeature","_createErrorUnsupportedFeature","looseMatching","_looseMatching","numberNumberingSystemDigitsMap","_numberNumberingSystemDigitsMap","numberSymbol","_numberSymbol","removeLiteralQuotes","_removeLiteralQuotes","validateParameterTypeString","_validateParameterTypeString","validateParameterTypeDate","createErrorInvalidParameterValue","validateSkeletonFieldsPosMap","memo","item","validateSkeleton","last","fieldsPosMap","field","invalidField","every","objectInvert","newObject","dateExpandPatternSimilarFieldsMap","dateExpandPatternNormalizePatternType","character","datePatternRe","stringRepeat","expandBestMatchFormat","skeletonWithoutFractionalSeconds","bestMatchFormat","bestMatchFormatParts","matchedType","matchedLength","requestedType","requestedLength","requestedSkeletonParts","normalizePatternType","dateExpandPatternAugmentFormat","requestedSkeleton","decimalSeparator","countOfFractionalSeconds","fractionalSecondMatch","lastSecondIdx","lastIndexOf","dateExpandPatternCompareFormats","formatA","formatB","a","b","distance","lenA","lenB","typeA","typeB","dateExpandPatternGetBestMatchPattern","askedSkeleton","availableFormats","ratedFormats","augmentFormat","compareFormats","rate","format","sort","dateExpandPattern","dateSkeleton","timeSkeleton","getBestMatchPattern","combineDateTime","datePattern","timePattern","time","datetime","dateWeekDays","dateFirstDayOfWeek","dateGetTimeZoneName","timeZone","metaZone","dateTimezoneHourFormatH","hourFormat","dateTimezoneHourFormatHm","hFormat","runtimeCacheDataBind","dataCacheKey","dateFormatProperties","numberFormatters","timeSeparator","widths","setNumberFormatterPattern","pad","timeZoneData","offsets","untils","isdsts","current","chr","daylightTzName","genericTzName","standardTzName","preferredTime","eras","feature","quarters","months","days","dayPeriods","am","pm","timeZoneName","exemplarCity","gmtFormat","gmtZeroFormat","dateFormatterFn","dateToPartsFormatter","dateParseProperties","preferredTimeData","ZonedDateTime","definePrivateProperty","property","defineProperty","getUntilsIndex","original","originalTime","getTime","setWrap","offset1","getTimezoneOffset","ret","setTime","offset2","setMinutes","getMinutes","local","clone","utcMethod","substr","valueOf","isDST","Boolean","inspect","abbrs","toISOString","toDate","dateIsLeapYear","year","getMonth","dateLastDayOfMonth","getFullYear","getDate","dateStartOf","unit","setMonth","setDate","setHours","setSeconds","setMilliseconds","dateSetDate","day","lastDay","dateSetMonth","month","originalDate","outOfRange","low","high","dateParse","_value","tokens","amPm","daysOfYear","era","hour","hour12","timezoneOffset","YEAR","MONTH","DAY","HOUR","MINUTE","SECOND","MILLISECONDS","truncateAt","units","token","floor","setFullYear","pow","getHours","max","dateTokenizer","numberParser","digitsRe","numeric","tokenRe","hourFormatParse","isPositive","oneDigitIfLengthOne","oneOrTwoDigitsIfLengthOne","oneOrTwoDigitsIfLengthOneOrTwo","twoDigitsIfLengthTwo","lookup","standardOrDaylightTzName","timeZoneNameRe","hourFormatRe","x","lexeme","isNaN","dateParserFn","parseProperties","tokenizerProperties","dateTokenizerProperties","digitsReSource","re","populateProperties","regexpSourceSomeTerm","terms","dateDayOfWeek","getDay","dateDistanceInDays","from","to","inDays","dateDayOfYear","dateFieldsMap","dateMillisecondsInDay","dateTimezoneHourFormat","absOffset","dateFormat","dateField","ceil","getSeconds","getMilliseconds","dateToPartsFormatterFn","optionsHasStyle","validateOptionsPreset","validateOptionsPresetEach","validateOptionsSkeleton","validateRequiredIana","loadTimeZone","customData","dateFormatter","ianaListener","dateParser","formatDateToParts","MessageFormat","propname","jkey","pluralFunc","formatters","lc","runtime","pluralFuncs","fmt","f","_parse","peg$subclass","child","parent","ctor","constructor","SyntaxError","found","line","column","parse","input","peg$result","peg$FAILED","peg$startRuleFunctions","start","peg$parsestart","peg$startRuleFunction","peg$c1","st","statements","peg$c2","peg$c3","peg$c4","description","peg$c5","peg$c6","peg$c7","peg$c8","peg$c9","peg$c10","argIdx","efmt","res","argumentIndex","elementFormat","output","peg$c11","peg$c12","peg$c13","t","s","peg$c14","peg$c15","peg$c16","peg$c17","peg$c18","p","peg$c19","op","pf","pluralForms","peg$c20","peg$c21","peg$c22","peg$c23","peg$c24","d","peg$c25","k","mfp","peg$c26","peg$c27","peg$c28","peg$c29","peg$c30","peg$c31","peg$c32","peg$c33","peg$c34","peg$c35","peg$c36","peg$c37","peg$c38","peg$c39","peg$c40","peg$c41","chars","peg$c42","peg$c43","peg$c44","peg$c45","peg$c46","peg$c47","peg$c48","peg$c49","peg$c50","peg$c51","peg$c52","peg$c53","peg$c54","peg$c55","peg$c56","peg$c57","peg$c58","peg$c59","h1","h2","h3","h4","fromCharCode","peg$c60","peg$c61","peg$c62","ds","peg$c63","peg$c64","peg$c65","peg$c66","w","peg$c67","peg$c68","peg$currPos","peg$cachedPos","peg$cachedPosDetails","seenCR","peg$maxFailPos","peg$maxFailExpected","peg$silentFails","startRule","peg$computePosDetails","pos","advance","details","startPos","endPos","ch","peg$fail","peg$buildException","cleanupExpected","buildMessage","stringEscape","hex","expectedDescs","posDetails","peg$parsemessageFormatPattern","s1","s2","peg$parsemessageFormatElement","peg$parsestring","peg$parseoctothorpe","s0","s3","s4","s5","s6","peg$parse_","peg$parseid","peg$parseelementFormat","peg$parsepluralFormatPattern","peg$parseselectFormatPattern","peg$parseargStylePattern","peg$parseoffsetPattern","peg$parsepluralForm","peg$parsedigits","s8","peg$parsepluralKey","peg$parseselectForm","peg$parsechars","peg$parsewhitespace","substring","peg$parsechar","peg$parsehexDigit","plurals","lcfunc","isOrdinal","other","select","_stringify","o","level","funcStr","indent","_precompile","ast","tmp","r","pf_count","withIntlSupport","needOther","data_copy","compile","opt","lc0","compileMsg","msg","Function","ns","global","validateMessageBundle","validateMessagePresence","validateMessageType","validateParameterTypeMessageVariables","messageFormatterFn","formatter","variables","messageFormatterRuntimeBind","messageformatter","origToString","loadMessages","messageFormatter","numberFormatterFn","nu","numberCompact","compactType","maxExponent","compactKey","numberExponent","_type","numberPatternRe","numberPatternProperties","aux1","aux2","fractionPattern","integerFractionOrSignificantPattern","integerPattern","maximumSignificantDigits","minimumIntegerDigits","minimumSignificantDigits","padding","prefix","primaryGroupingSize","roundIncrement","scientificNotation","secondaryGroupingSize","significantPattern","suffix","_match","minimumSignificantDigitsMatch","maximumSignificantDigitsMatch","numberSymbolName","numberSymbolMap","symbolMap","numberTruncate","NaN","numberRound","incrementOrExp","exp","increment","exponent","toExponential","numberFormatProperties","negativePattern","negativePrefix","negativeProperties","negativeSuffix","positivePattern","roundFn","getOptions","propertyIndex","compact","useGrouping","min","regexpCfG","regexpDashG","regexpZsG","numberParse","grammar","invertedNuDigitsMap","invertedSymbolMap","negative","prefixNSuffix","tokenizer","Infinity","tokenizeNParse","statement","numberParserFn","numberSymbolInvertedMap","objectMap","pair","numberParseProperties","decimalSymbolRe","groupingSeparatorRe","infinitySymbol","nanSymbol","nuDigitsMap","numberTokenizer","formatProperties","localizedDigit","literal","infinity","nan","numberCompactPatternRe","numberFormatGroupingSeparator","currentGroupingSize","switchToSecondary","numberFormatIntegerFractionDigits","toFixed","numberToPrecision","precision","roundOrder","log","numberFormatSignificantDigits","atMinimum","atMaximum","numberFormat","compactMap","stringToParts","compactPattern","compactProperties","divisor","numberType","digit","etc","isFinite","_garbage","space","numberToPartsFormatterFn","validateDigits","fnArgs","formatNumberToParts","parseNumber","MakePlural","_toArray","arr","_toConsumableArray","arr2","_classCallCheck","instance","Constructor","TypeError","_createClass","defineProperties","target","props","descriptor","enumerable","configurable","writable","protoProps","staticProps","Parser","cond","_this","v0","m","sym","noteq","sn","num","se","x0","x1","Number","t0","_vars","vars","v","n10","n100","k0","_ref","cardinals","ordinals","categories","cardinal","ordinal","parser","buildFunction","_obj","fnToString","bind","req","cases","_rules$r$trim$split","trim","_rules$r$trim$split2","cat","c","_this3","fold","body","_len","validateParameterTypePluralType","pluralGeneratorFn","relativeTimeFormat","relativeTimeFormatterFn","relativeTimeProperties","form","formatRelativeTime","relativeTimeFormatter","unitFormat","unitProperties","dividend","dividendProperties","formattedValue","divisorProperties","pluralValue","oneProperty","compoundUnitPattern","unitFormatterFn","unitCategories","stripPluralGarbage","pluralCount","category","unitGet","formatUnit","unitFormatter","module","n","find","attr","parseJSON","addClass","empty","appendTo","hide","errorList","each","html","removeData","l","resetForm","u","proxy","isFunction","errorClass","errorElement","errorPlacement","invalidHandler","success","attachValidation","validator","parseElement","parents","adapt","extend","__dummy__","addBack","has","addBool","addMinMax","addSingleVal","extension","url","additionalfields","is","nonalphamin","regex","extensions","settings","onsubmit","submitButton","hasClass","cancelSubmit","handle","hidden","submitHandler","formSubmitted","currentForm","debug","preventDefault","pendingRequest","focusInvalid","window","console","warn","command","argument","staticRules","existingRules","param","filtered","isContentEditable","closest","normalizeRule","normalizeRules","classRules","attributeRules","dataRules","remote","called","expr","pseudos","blank","filled","unchecked","defaults","makeArray","groups","pendingClass","validClass","focusCleanup","errorContainer","errorLabelContainer","ignore","ignoreTitle","customElements","onfocusin","lastActive","unhighlight","hideThese","errorsFor","onfocusout","checkable","submitted","onkeyup","excludedKeys","which","elementValue","inArray","keyCode","invalid","parentNode","highlight","findByName","setDefaults","email","dateISO","equalTo","minlength","rangelength","range","step","autoCreateRanges","labelContainer","errorContext","containers","valueCache","pending","reset","delegate","eventType","focusListeners","clickListeners","checkForm","errorMap","triggerHandler","showErrors","prepareForm","elements","currentElements","rs","group","cleanElement","clean","checkElement","validationTargetFor","prepareElement","testgroup","numberOfInvalids","toHide","errors","successList","grep","defaultShowErrors","hideErrors","removeAttr","resetElements","objectLength","not","text","addWrapper","size","findLastActive","rulesCache","selectors","selector","resetInternals","toShow","idx","$element","validity","badInput","rule","normalizer","rulesCount","dependencyMismatch","abortRequest","parameters","formatAndAdd","id","customDataMessage","customMessage","findDefined","defaultMessage","title","theregex","toToggle","wrapper","showLabel","validElements","show","invalidElements","place","errorID","elementID","idOrName","describedBy","escapeHtml","wrap","append","insertAfter","escapeCssMeta","describer","getLength","nodeName","depend","dependTypes","elementAjaxPort","startRequest","stopRequest","port","ajaxAbort","previousValue","old","destroy","classRuleSettings","creditcard","addClassRules","className","classes","normalizeAttributeRule","depends","keepRule","parameter","transformed","decimals","errorMessage","supportedTypes","decimalPlaces","toInt","optionDataString","previous","originalMessage","ajax","mode","dataType","context","pendingRequests","ajaxPrefilter","_","xhr","ajaxSettings","abort","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","O","chunkIds","priority","notFulfilled","fulfilled","getter","__esModule","definition","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""}