{"version":3,"sources":["../node_modules/gl-matrix/esm/mat4.js","../node_modules/gl-matrix/esm/vec2.js","../node_modules/date-fns/esm/_lib/startOfUTCWeek/index.js","../node_modules/date-fns/esm/parseISO/index.js","../node_modules/date-fns/esm/_lib/requiredArgs/index.js","../node_modules/date-fns/esm/_lib/startOfUTCISOWeek/index.js","../node_modules/date-fns/esm/_lib/protectedTokens/index.js","../node_modules/history/esm/history.js","../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","../node_modules/date-fns/esm/toDate/index.js","../node_modules/date-fns-tz/esm/toDate/index.js","../node_modules/date-fns-tz/esm/_lib/tzTokenizeDate/index.js","../node_modules/date-fns-tz/esm/_lib/tzParseTimezone/index.js","../node_modules/i18next-http-backend/esm/utils.js","../node_modules/date-fns/esm/_lib/getTimezoneOffsetInMilliseconds/index.js","../node_modules/date-fns-tz/esm/_lib/tzIntlTimeZoneName/index.js","../node_modules/date-fns-tz/esm/format/formatters/index.js","../node_modules/date-fns-tz/esm/format/index.js","../node_modules/date-fns/esm/locale/_lib/buildLocalizeFn/index.js","../node_modules/date-fns/esm/locale/_lib/buildMatchFn/index.js","../node_modules/date-fns/esm/startOfDay/index.js","../node_modules/date-fns/esm/differenceInMilliseconds/index.js","../node_modules/date-fns/esm/_lib/getUTCWeekYear/index.js","../node_modules/date-fns/esm/isBefore/index.js","../node_modules/date-fns-tz/esm/utcToZonedTime/index.js","../node_modules/gl-matrix/esm/vec3.js","../node_modules/date-fns/esm/isValid/index.js","../node_modules/date-fns/esm/addMonths/index.js","../node_modules/hammerjs/hammer.js","../node_modules/css-vendor/dist/css-vendor.esm.js","../node_modules/date-fns/esm/_lib/toInteger/index.js","../node_modules/date-fns/esm/locale/_lib/buildFormatLongFn/index.js","../node_modules/date-fns/esm/locale/en-US/_lib/formatDistance/index.js","../node_modules/date-fns/esm/locale/en-US/_lib/formatLong/index.js","../node_modules/date-fns/esm/locale/en-US/_lib/formatRelative/index.js","../node_modules/date-fns/esm/locale/en-US/_lib/localize/index.js","../node_modules/date-fns/esm/locale/en-US/index.js","../node_modules/date-fns/esm/locale/en-US/_lib/match/index.js","../node_modules/date-fns/esm/startOfYear/index.js","../node_modules/gl-matrix/esm/common.js","../node_modules/date-fns/esm/_lib/format/longFormatters/index.js","../node_modules/date-fns/esm/_lib/getUTCISOWeekYear/index.js","../node_modules/date-fns/esm/subMilliseconds/index.js","../node_modules/date-fns/esm/addMilliseconds/index.js","../node_modules/date-fns/esm/_lib/assign/index.js","../node_modules/date-fns/esm/_lib/startOfUTCWeekYear/index.js","../node_modules/date-fns/esm/_lib/getUTCWeek/index.js","../node_modules/date-fns/esm/_lib/startOfUTCISOWeekYear/index.js","../node_modules/date-fns/esm/_lib/getUTCISOWeek/index.js","../node_modules/date-fns/esm/isAfter/index.js","../node_modules/i18next-http-backend/esm/getFetch.cjs","../node_modules/gl-matrix/esm/vec4.js","../node_modules/classnames/index.js","../node_modules/date-fns/esm/addDays/index.js","../node_modules/date-fns/esm/endOfDay/index.js","../node_modules/date-fns/esm/startOfMonth/index.js","../node_modules/date-fns/esm/endOfMonth/index.js","../node_modules/date-fns/esm/endOfYear/index.js","../node_modules/date-fns/esm/startOfWeek/index.js","../node_modules/date-fns/esm/endOfWeek/index.js","../node_modules/hyphenate-style-name/index.js","../node_modules/i18next/node_modules/@babel/runtime/helpers/esm/typeof.js","../node_modules/i18next/node_modules/@babel/runtime/helpers/esm/classCallCheck.js","../node_modules/i18next/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","../node_modules/i18next/node_modules/@babel/runtime/helpers/esm/toPrimitive.js","../node_modules/i18next/node_modules/@babel/runtime/helpers/esm/createClass.js","../node_modules/i18next/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../node_modules/i18next/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../node_modules/i18next/node_modules/@babel/runtime/helpers/esm/inherits.js","../node_modules/i18next/node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","../node_modules/i18next/node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","../node_modules/i18next/node_modules/@babel/runtime/helpers/esm/defineProperty.js","../node_modules/i18next/node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","../node_modules/i18next/node_modules/@babel/runtime/helpers/esm/toArray.js","../node_modules/i18next/node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","../node_modules/i18next/node_modules/@babel/runtime/helpers/esm/iterableToArray.js","../node_modules/i18next/node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","../node_modules/i18next/node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","../node_modules/i18next/dist/esm/i18next.js","../node_modules/date-fns/esm/locale/_lib/buildMatchPatternFn/index.js","../node_modules/fast-deep-equal/index.js","../node_modules/date-fns/esm/getHours/index.js","../node_modules/date-fns/esm/setHours/index.js","../node_modules/date-fns/esm/setMinutes/index.js","../node_modules/date-fns/esm/getSeconds/index.js","../node_modules/date-fns/esm/setSeconds/index.js","../node_modules/date-fns/esm/isSameDay/index.js","../node_modules/date-fns/esm/isSameMonth/index.js","../node_modules/date-fns/esm/isSameYear/index.js","../node_modules/date-fns/esm/getYear/index.js","../node_modules/date-fns/esm/setYear/index.js","../node_modules/date-fns/esm/isEqual/index.js","../node_modules/date-fns/esm/eachDayOfInterval/index.js","../node_modules/date-fns/esm/addYears/index.js","../../src/parse-tag.js","../../src/parse.js","../../src/stringify.js","../../src/index.js","../node_modules/dom-helpers/esm/removeClass.js","../node_modules/i18next-resources-to-backend/dist/umd/i18nextResourcesToBackend.js","../node_modules/i18next-http-backend/esm/index.js","../node_modules/i18next-http-backend/esm/request.js","../node_modules/date-fns/esm/_lib/setUTCDay/index.js","../node_modules/date-fns/esm/parse/_lib/parsers/index.js","../node_modules/date-fns/esm/_lib/setUTCWeek/index.js","../node_modules/date-fns/esm/_lib/setUTCISOWeek/index.js","../node_modules/date-fns/esm/_lib/setUTCISODay/index.js","../node_modules/date-fns/esm/parse/index.js","../node_modules/i18next-chained-backend/node_modules/@babel/runtime/helpers/esm/classCallCheck.js","../node_modules/i18next-chained-backend/node_modules/@babel/runtime/helpers/esm/typeof.js","../node_modules/i18next-chained-backend/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","../node_modules/i18next-chained-backend/node_modules/@babel/runtime/helpers/esm/toPrimitive.js","../node_modules/i18next-chained-backend/node_modules/@babel/runtime/helpers/esm/createClass.js","../node_modules/i18next-chained-backend/dist/esm/i18nextChainedBackend.js","../node_modules/i18next-browser-languagedetector/node_modules/@babel/runtime/helpers/esm/classCallCheck.js","../node_modules/i18next-browser-languagedetector/node_modules/@babel/runtime/helpers/esm/typeof.js","../node_modules/i18next-browser-languagedetector/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","../node_modules/i18next-browser-languagedetector/node_modules/@babel/runtime/helpers/esm/toPrimitive.js","../node_modules/i18next-browser-languagedetector/node_modules/@babel/runtime/helpers/esm/createClass.js","../node_modules/i18next-browser-languagedetector/dist/esm/i18nextBrowserLanguageDetector.js","../node_modules/date-fns/esm/startOfHour/index.js","../node_modules/date-fns/esm/isSameHour/index.js","../node_modules/date-fns/esm/getDaysInMonth/index.js","../node_modules/date-fns/esm/setMonth/index.js","../node_modules/dom-helpers/esm/addClass.js","../node_modules/dom-helpers/esm/hasClass.js","../node_modules/date-fns/esm/differenceInMinutes/index.js","../node_modules/ieee754/index.js","../node_modules/hoist-non-react-statics/node_modules/react-is/index.js","../node_modules/hoist-non-react-statics/node_modules/react-is/cjs/react-is.production.min.js","../node_modules/clsx/dist/clsx.m.js","../node_modules/date-fns/esm/_lib/addLeadingZeros/index.js","../node_modules/date-fns/esm/_lib/format/lightFormatters/index.js","../node_modules/date-fns/esm/_lib/getUTCDayOfYear/index.js","../node_modules/date-fns/esm/_lib/format/formatters/index.js","../node_modules/date-fns/esm/format/index.js","../node_modules/date-fns/esm/addHours/index.js","../node_modules/date-fns/esm/differenceInSeconds/index.js","../node_modules/date-fns-tz/esm/zonedTimeToUtc/index.js","../node_modules/date-fns/esm/_lib/cloneObject/index.js"],"names":["transpose","out","a","a01","a02","a03","a12","a13","a23","invert","a00","a10","a11","a20","a21","a22","a30","a31","a32","a33","b00","b01","b02","b03","b04","b05","b06","b07","b08","b09","b10","b11","det","determinant","multiply","b","b0","b1","b2","b3","translate","v","x","y","z","scale","rotate","rad","axis","s","c","t","b12","b20","b21","b22","len","Math","hypot","glMatrix","sin","cos","rotateX","rotateY","rotateZ","getScaling","mat","m11","m12","m13","m21","m22","m23","m31","m32","m33","fromQuat","q","w","x2","y2","z2","xx","yx","yy","zx","zy","zz","wx","wy","wz","frustum","left","right","bottom","top","near","far","rl","tb","nf","perspective","fovy","aspect","f","tan","Infinity","ortho","lr","bt","lookAt","eye","center","up","x0","x1","y0","y1","z0","z1","eyex","eyey","eyez","upx","upy","upz","centerx","centery","centerz","abs","identity","equals","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","a14","a15","b4","b5","b6","b7","b8","b9","b13","b14","b15","max","add","length","negate","lerp","ax","ay","transformMat2","m","transformMat2d","transformMat3","transformMat4","sub","vec","Float32Array","create","startOfUTCWeek","dirtyDate","dirtyOptions","requiredArgs","arguments","options","locale","localeWeekStartsOn","weekStartsOn","defaultWeekStartsOn","toInteger","RangeError","date","toDate","day","getUTCDay","diff","setUTCDate","getUTCDate","setUTCHours","MILLISECONDS_IN_HOUR","patterns","dateTimeDelimiter","timeZoneDelimiter","timezone","dateRegex","timeRegex","timezoneRegex","parseISO","argument","additionalDigits","Object","prototype","toString","call","Date","NaN","dateStrings","splitDateString","parseYearResult","parseYear","parseDate","restDateString","year","isNaN","offset","timestamp","getTime","time","parseTime","result","setFullYear","getUTCFullYear","getUTCMonth","setHours","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","parseTimezone","dateString","timeString","array","split","test","substr","token","exec","replace","regex","RegExp","captures","match","parseInt","century","slice","isWeekDate","dayOfYear","parseDateUnit","month","week","dayOfWeek","_year","validateWeekDate","isoWeekYear","setUTCFullYear","fourthOfJanuaryDay","dayOfISOWeekYear","daysInMonths","isLeapYearIndex","validateDate","validateDayOfYearDate","value","hours","parseTimeUnit","minutes","seconds","validateTime","parseFloat","timezoneString","sign","_hours","validateTimezone","required","args","TypeError","startOfUTCISOWeek","protectedDayOfYearTokens","protectedWeekYearTokens","isProtectedDayOfYearToken","indexOf","isProtectedWeekYearToken","throwProtectedError","format","input","concat","addLeadingSlash","path","charAt","stripBasename","prefix","toLowerCase","hasBasename","stripTrailingSlash","createPath","location","pathname","search","hash","createLocation","state","key","currentLocation","hashIndex","searchIndex","parsePath","undefined","_extends","decodeURI","e","URIError","resolvePathname","locationsAreEqual","valueEqual","createTransitionManager","prompt","listeners","setPrompt","nextPrompt","confirmTransitionTo","action","getUserConfirmation","callback","appendListener","fn","isActive","listener","apply","push","filter","item","notifyListeners","_len","Array","_key","forEach","canUseDOM","window","document","createElement","getConfirmation","message","confirm","PopStateEvent","HashChangeEvent","getHistoryState","history","createBrowserHistory","props","invariant","globalHistory","canUseHistory","ua","navigator","userAgent","supportsHistory","needsHashChangeListener","_props","_props$forceRefresh","forceRefresh","_props$getUserConfirm","_props$keyLength","keyLength","basename","getDOMLocation","historyState","_ref","_window$location","createKey","random","transitionManager","setState","nextState","handlePopState","event","isExtraneousPopstateEvent","handlePop","handleHashChange","forceNextPop","ok","fromLocation","toLocation","toIndex","allKeys","fromIndex","delta","go","revertPop","initialLocation","createHref","n","listenerCount","checkDOMListeners","addEventListener","removeEventListener","isBlocked","href","pushState","prevIndex","nextKeys","replaceState","goBack","goForward","block","unblock","listen","unlisten","clamp","lowerBound","upperBound","min","createMemoryHistory","_props$initialEntries","initialEntries","_props$initialIndex","initialIndex","entries","index","map","entry","nextIndex","nextEntries","splice","canGo","reactIs","require","REACT_STATICS","childContextTypes","contextType","contextTypes","defaultProps","displayName","getDefaultProps","getDerivedStateFromError","getDerivedStateFromProps","mixins","propTypes","type","KNOWN_STATICS","name","caller","callee","arity","MEMO_STATICS","compare","TYPE_STATICS","getStatics","component","isMemo","ForwardRef","render","Memo","defineProperty","getOwnPropertyNames","getOwnPropertySymbols","getOwnPropertyDescriptor","getPrototypeOf","objectPrototype","module","exports","hoistNonReactStatics","targetComponent","sourceComponent","blacklist","inheritedComponent","keys","targetStatics","sourceStatics","i","descriptor","argStr","console","warn","Error","stack","dateTimeDelimeter","plainTime","timeZoneDelimeter","YY","YYY","YYYY","YYYYY","MM","DDD","MMDD","Www","WwwD","HH","HHMM","HHMMSS","timeZone","tzParseTimezone","getTimezoneOffsetInMilliseconds","patternYYY","patternYYYYY","yearString","centuryString","isLeapYear","DAYS_IN_MONTH","DAYS_IN_MONTH_LEAP_YEAR","tzTokenizeDate","dtf","dtfCache","testDateFormatted","Intl","DateTimeFormat","hour12","hour","minute","second","hourCycleSupported","hourCycle","getDateTimeFormat","formatToParts","formatted","filled","pos","typeToPos","partsOffset","parsed","hackyOffset","timezoneZ","timezoneHH","timezoneHHMM","isUtcDate","absoluteOffset","timeZoneString","error","isValidTimezoneIANAString","now","utcDate","UTC","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","getMilliseconds","toUtcDate","calcOffset","fixedOffset","utcGuess","o2","o3","fixOffset","tokens","asUTC","asTS","over","_typeof","obj","Symbol","iterator","constructor","arr","each","defaults","source","prop","hasXMLHttpRequest","XMLHttpRequest","makePromise","maybePromise","then","isPromise","Promise","resolve","tzIntlTimeZoneName","code","timeZoneName","getDTF","partsTimeZone","tzNameMatch","hackyTimeZone","MILLISECONDS_IN_MINUTE","addLeadingZeros","number","targetLength","output","formatTimezone","dirtyDelimeter","delimeter","absOffset","floor","formatTimezoneWithOptionalMinutes","formatters","X","localize","originalDate","_originalDate","timezoneOffset","getTimezoneOffset","O","String","formatTimezoneShort","tzFormattingTokensRegExp","dirtyFormatStr","formatStr","matches","reduce","dateFnsFormat","buildLocalizeFn","dirtyIndex","valuesArray","context","formattingValues","defaultWidth","defaultFormattingWidth","width","_defaultWidth","_width","values","argumentCallback","buildMatchFn","string","matchPattern","matchPatterns","defaultMatchWidth","matchResult","matchedString","parsePatterns","defaultParseWidth","isArray","findIndex","pattern","findKey","valueCallback","rest","object","predicate","hasOwnProperty","startOfDay","differenceInMilliseconds","dirtyDateLeft","dirtyDateRight","dateLeft","dateRight","getUTCWeekYear","localeFirstWeekContainsDate","firstWeekContainsDate","defaultFirstWeekContainsDate","firstWeekOfNextYear","startOfNextYear","firstWeekOfThisYear","startOfThisYear","isBefore","dirtyDateToCompare","dateToCompare","utcToZonedTime","offsetMilliseconds","d","fromValues","normalize","sqrt","dot","cross","az","bx","by","bz","transformQuat","qx","qy","qz","qw","uvx","uvy","uvz","uuvx","uuvy","uuvz","w2","p","r","angle","mag","cosine","acos","mul","sqrLen","isValid","addMonths","dirtyAmount","amount","dayOfMonth","endOfDesiredMonth","setMonth","daysInMonth","exportName","assign","VENDOR_PREFIXES","TEST_ELEMENT","round","setTimeoutContext","timeout","setTimeout","bindFn","invokeArrayArg","arg","deprecate","method","deprecationMessage","log","this","target","nextKey","extend","dest","src","merge","inherit","child","base","properties","childP","baseP","_super","boolOrFn","val","ifUndefined","val1","val2","addEventListeners","types","handler","splitStr","removeEventListeners","hasParent","node","parent","parentNode","inStr","str","find","trim","inArray","findByKey","toArray","uniqueArray","sort","results","prefixed","property","camelProp","toUpperCase","_uniqueId","getWindowForElement","element","doc","ownerDocument","defaultView","parentWindow","SUPPORT_TOUCH","SUPPORT_POINTER_EVENTS","SUPPORT_ONLY_TOUCH","INPUT_TYPE_TOUCH","INPUT_TYPE_MOUSE","DIRECTION_VERTICAL","DIRECTION_UP","PROPS_XY","PROPS_CLIENT_XY","Input","manager","self","inputTarget","domHandler","ev","enable","init","inputHandler","eventType","pointersLen","pointers","changedPointersLen","changedPointers","isFirst","isFinal","session","pointersLength","firstInput","simpleCloneInputData","firstMultiple","offsetCenter","getCenter","timeStamp","deltaTime","getAngle","distance","getDistance","offsetDelta","prevDelta","prevInput","deltaX","deltaY","computeDeltaXY","offsetDirection","getDirection","overallVelocity","getVelocity","overallVelocityX","overallVelocityY","start","end","rotation","getRotation","maxPointers","velocity","velocityX","velocityY","direction","last","lastInterval","computeIntervalInputData","srcEvent","computeInputData","emit","recognize","clientX","clientY","p1","p2","atan2","PI","evEl","evTarget","evWin","destroy","MOUSE_INPUT_MAP","mousedown","mousemove","mouseup","MOUSE_ELEMENT_EVENTS","MOUSE_WINDOW_EVENTS","MouseInput","pressed","button","which","pointerType","POINTER_INPUT_MAP","pointerdown","pointermove","pointerup","pointercancel","pointerout","IE10_POINTER_TYPE_ENUM","POINTER_ELEMENT_EVENTS","POINTER_WINDOW_EVENTS","PointerEventInput","store","pointerEvents","MSPointerEvent","PointerEvent","removePointer","eventTypeNormalized","isTouch","storeIndex","pointerId","SINGLE_TOUCH_INPUT_MAP","touchstart","touchmove","touchend","touchcancel","SINGLE_TOUCH_TARGET_EVENTS","SINGLE_TOUCH_WINDOW_EVENTS","SingleTouchInput","started","normalizeSingleTouches","all","touches","changed","changedTouches","TOUCH_INPUT_MAP","TOUCH_TARGET_EVENTS","TouchInput","targetIds","getTouches","allTouches","identifier","targetTouches","changedTargetTouches","touch","TouchMouseInput","mouse","primaryTouch","lastTouches","recordTouches","eventData","setLastTouch","lastTouch","lts","isSyntheticEvent","dx","dy","inputEvent","inputData","isMouse","sourceCapabilities","firesTouchEvents","PREFIXED_TOUCH_ACTION","style","NATIVE_TOUCH_ACTION","TOUCH_ACTION_COMPUTE","TOUCH_ACTION_AUTO","TOUCH_ACTION_MANIPULATION","TOUCH_ACTION_NONE","TOUCH_ACTION_PAN_X","TOUCH_ACTION_PAN_Y","TOUCH_ACTION_MAP","touchMap","cssSupports","CSS","supports","getTouchActionProps","TouchAction","set","compute","actions","update","touchAction","recognizers","recognizer","getTouchAction","hasPanX","hasPanY","cleanTouchActions","join","preventDefaults","prevented","preventDefault","hasNone","isTapPointer","isTapMovement","isTapTouchTime","DIRECTION_LEFT","preventSrc","STATE_FAILED","Recognizer","id","simultaneous","requireFail","stateStr","directionStr","getRecognizerByNameIfManager","otherRecognizer","get","AttrRecognizer","PanRecognizer","pX","pY","PinchRecognizer","PressRecognizer","_timer","_input","RotateRecognizer","SwipeRecognizer","TapRecognizer","pTime","pCenter","count","Hammer","preset","Manager","recognizeWith","dropRecognizeWith","requireFailure","dropRequireFailure","hasRequireFailures","canRecognizeWith","additionalEvent","tryEmit","canEmit","inputDataClone","reset","process","attrTest","optionPointers","isRecognized","threshold","DIRECTION_HORIZONTAL","directionTest","hasMoved","inOut","validPointers","validMovement","validTime","clearTimeout","taps","interval","posThreshold","validTouchTime","failTimeout","validInterval","validMultiTap","tapCount","VERSION","domEvents","inputClass","cssProps","userSelect","touchSelect","touchCallout","contentZooming","userDrag","tapHighlightColor","handlers","oldCssProps","toggleCssProps","stop","force","stopped","curRecognizer","existing","remove","on","events","off","data","gestureEvent","createEvent","initEvent","gesture","dispatchEvent","triggerDomEvent","INPUT_START","INPUT_MOVE","INPUT_END","INPUT_CANCEL","STATE_POSSIBLE","STATE_BEGAN","STATE_CHANGED","STATE_ENDED","STATE_RECOGNIZED","STATE_CANCELLED","DIRECTION_NONE","DIRECTION_RIGHT","DIRECTION_DOWN","DIRECTION_ALL","Tap","Pan","Swipe","Pinch","Rotate","Press","define","js","css","vendor","browser","isInBrowser","documentElement","jsCssMap","Moz","ms","Webkit","supportedKeyframes","appearence","noPrefill","supportedProperty","colorAdjust","regExp","toUpper","camelize","pascalize","el","mask","longhand","textOrientation","transform","transition","writingMode","breakPropsOld","inlineLogicalOld","newProp","unprefixed","pascalized","scrollSnap","substring","overscrollBehavior","propMap","order","flex2012","propMap$1","flex","propKeys","prefixCss","flex2009","multiple","plugins","propertyDetectors","_toConsumableArray","cache","computed","getComputedStyle","key$1","err","el$1","cache$1","transitionProperties","transPropsRegExp","prefixTransitionCallback","prefixedValue","supportedValue","cacheKey","dirtyNumber","Number","ceil","buildFormatLongFn","formats","formatDistanceLocale","lessThanXSeconds","one","other","xSeconds","halfAMinute","lessThanXMinutes","xMinutes","aboutXHours","xHours","xDays","aboutXWeeks","xWeeks","aboutXMonths","xMonths","aboutXYears","xYears","overXYears","almostXYears","formatLong","full","long","medium","short","dateTime","formatRelativeLocale","lastWeek","yesterday","today","tomorrow","nextWeek","ordinalNumber","_dirtyOptions","rem100","era","narrow","abbreviated","wide","quarter","dayPeriod","am","pm","midnight","noon","morning","afternoon","evening","night","formatDistance","addSuffix","comparison","formatRelative","_date","_baseDate","_options","buildMatchPatternFn","parsePattern","any","startOfYear","cleanDate","EPSILON","ARRAY_TYPE","RANDOM","dateLongFormatter","timeLongFormatter","longFormatters","P","dateTimeFormat","datePattern","timePattern","getUTCISOWeekYear","fourthOfJanuaryOfNextYear","fourthOfJanuaryOfThisYear","subMilliseconds","addMilliseconds","dirtyObject","startOfUTCWeekYear","firstWeek","MILLISECONDS_IN_WEEK","getUTCWeek","startOfUTCISOWeekYear","fourthOfJanuary","getUTCISOWeek","isAfter","clone","copy","squaredLength","aw","ix","iy","iz","iw","exactEquals","hasOwn","classNames","classes","argType","inner","default","addDays","setDate","endOfDay","startOfMonth","endOfMonth","endOfYear","startOfWeek","getDay","endOfWeek","uppercasePattern","msPattern","toHyphenLower","hyphenateStyleName","hName","_classCallCheck","instance","Constructor","_toPropertyKey","hint","prim","toPrimitive","res","_defineProperties","enumerable","configurable","writable","_createClass","protoProps","staticProps","_assertThisInitialized","ReferenceError","_setPrototypeOf","o","setPrototypeOf","bind","__proto__","_inherits","subClass","superClass","_possibleConstructorReturn","_getPrototypeOf","_defineProperty","_arrayLikeToArray","arr2","_toArray","iter","from","minLen","ownKeys$6","enumerableOnly","symbols","sym","_objectSpread$6","getOwnPropertyDescriptors","defineProperties","consoleLogger","Logger","concreteLogger","logger","debug","bool","forward","_len2","_key2","_len3","_key3","_len4","_key4","lvl","debugOnly","moduleName","baseLogger","EventEmitter","observers","_this","l","cloned","observer","_cloned","defer","rej","promise","reject","makeString","getLastOfPath","Empty","cleanKey","canNotTraverseDeeper","shift","k","setPath","newValue","_getLastOfPath","getPath","_getLastOfPath3","getPathWithDefaults","defaultData","deepExtend","overwrite","regexEscape","_entityMap","escape","isIE10","userAgentData","chars","ownKeys$5","_objectSpread$5","_createSuper$3","Derived","hasNativeReflectConstruct","Reflect","construct","sham","Proxy","Boolean","valueOf","_isNativeReflectConstruct$3","Super","NewTarget","deepFind","keySeparator","paths","current","j","mix","endsWith","joinedPath","ResourceStore","_EventEmitter","ns","defaultNS","ignoreJSONStructure","lng","silent","addNamespaces","resources","addResource","deep","pack","hasResourceBundle","removeNamespaces","getResource","compatibilityAPI","getDataByLanguage","postProcessor","processors","addPostProcessor","handle","translator","processor","ownKeys$4","_objectSpread$4","_createSuper$2","_isNativeReflectConstruct$2","checkedLoadedFor","Translator","services","language","interpolation","resolved","nsSeparator","namespaces","wouldCheckForNsInKey","seemsNaturalLanguage","userDefinedKeySeparator","userDefinedNsSeparator","possibleChars","matched","ki","looksLikeObjectPath","interpolator","nestingRegexp","parts","lastKey","_this2","overloadTranslationOptionHandler","returnDetails","_this$extractFromKey","extractFromKey","namespace","appendNamespaceToCIMode","usedKey","exactUsedKey","usedLng","usedNS","resUsedKey","resExactUsedKey","resType","noObject","joinArrays","handleAsObjectInI18nFormat","i18nFormat","handleAsObject","returnObjects","returnedObjectHandler","resTypeIsArray","newKeyToUse","deepKey","extendTranslation","usedDefault","needsPluralHandling","hasDefaultValue","defaultValueSuffix","pluralResolver","getSuffix","defaultValue","isValidLookup","missingKeyNoValueFallbackToKey","resForMissing","updateMissing","fk","lngs","fallbackLngs","languageUtils","getFallbackCodes","fallbackLng","saveMissingTo","toResolveHierarchy","send","specificDefaultValue","defaultForMissing","missingKeyHandler","backendConnector","saveMissing","saveMissingPlurals","getSuffixes","suffix","appendNamespaceToMissingKey","parseMissingKeyHandler","_this3","parse","defaultVariables","skipInterpolation","nestBef","skipOnVariables","nb","interpolate","na","nest","postProcess","postProcessorNames","applyPostProcessor","postProcessPassResolved","i18nResolved","found","_this4","extracted","fallbackNS","needsZeroSuffixLookup","ordinal","shouldUseIntlApi","needsContextHandling","codes","utils","hasLoadedNamespace","possibleKey","finalKeys","addLookupKeys","pluralSuffix","zeroSuffix","pluralSeparator","contextKey","contextSeparator","pop","returnNull","returnEmptyString","resourceStore","option","capitalize","LanguageUtil","supportedLngs","formatLanguageCode","specialCases","lowerCaseLng","part","cleanCode","load","nonExplicitSupportedLngs","getLanguagePartFromCode","cleanedLng","isSupportedCode","lngOnly","supportedLng","fallbacks","getScriptPartFromCode","fallbackCode","fallbackCodes","addCode","fc","sets","nr","_rulesPluralsTypes","deprecatedJsonVersions","suffixesOrder","zero","two","few","many","createRules","rules","numbers","plurals","PluralResolver","compatibilityJSON","PluralRules","_unused","rule","getRule","resolvedOptions","pluralCategories","pluralCategory1","pluralCategory2","pluralCategory","prepend","select","getSuffixRetroCompatible","idx","noAbs","simplifyPluralSuffix","returnSuffix","includes","ownKeys$3","_objectSpread$3","Interpolator","escapeValue","iOpts","useRawValueToEscape","prefixEscaped","suffixEscaped","formatSeparator","unescapePrefix","unescapeSuffix","nestingPrefix","nestingPrefixEscaped","nestingSuffix","nestingSuffixEscaped","nestingOptionsSeparator","maxReplaces","alwaysFormat","resetRegExp","regexpStr","regexp","regexpUnescapeStr","regexpUnescape","nestingRegexpStr","replaces","regexSafe","handleFormat","interpolationkey","missingInterpolationHandler","safeValue","todo","matchedVar","temp","lastIndex","clonedOptions","handleHasOptions","inheritedOptions","sep","optionsString","matchedSingleQuotes","matchedDoubleQuotes","JSON","doReduce","elem","ownKeys$2","_objectSpread$2","parseFormatStr","formatName","formatOptions","optStr","currency","range","opt","_opt$split2","createCachedFormatter","stringify","formatter","Formatter","NumberFormat","datetime","relativetime","RelativeTimeFormat","list","ListFormat","_format","mem","_parseFormatStr","valOptions","formatParams","ownKeys$1","_objectSpread$1","_createSuper$1","_isNativeReflectConstruct$1","Connector","backend","waitingReads","maxParallelReads","readingCalls","maxRetries","retryTimeout","queue","languages","toLoad","pending","toLoadLanguages","toLoadNamespaces","hasAllNamespaces","reload","pendingCount","loaded","errors","addResourceBundle","_getLastOfPath2","pushPath","removePending","done","loadedKeys","fcName","tried","wait","resolver","next","read","queueLoad","loadOne","prepareLoading","_this5","fallbackValue","isUpdate","clb","opts","initImmediate","preload","partialBundledLanguages","ret","tDescription","transformOptions","ownKeys","_objectSpread","_createSuper","_isNativeReflectConstruct","noop","bindMemberFunctions","inst","I18n","modules","external","isInitialized","isClone","defOpts","createClassOnDemand","ClassOrObject","lu","languageDetector","detection","storeApi","_this2$store","storeApiChained","_this2$store2","deferred","finish","initializedStoreOnce","changeLanguage","usedCallback","append","resolvedLanguage","setResolvedLanguage","li","lngInLngs","hasLanguageSomeTranslations","isLanguageChangingTo","setLngProps","setLng","getBestMatchFromCodes","cacheUserLanguage","loadResources","async","detect","keyPrefix","fixedT","resultKey","_this$translator","_this$translator2","exists","_this6","lastLng","loadNotPending","loadState","precheck","preResult","_this7","preloaded","newLngs","_this8","mergedOptions","membersToCopy","createInstance","dir","reloadResources","use","getFixedT","setDefaultNamespace","loadNamespaces","loadLanguages","parseResult","equal","flags","dirtyHours","setMinutes","dirtyMinutes","setSeconds","dirtySeconds","isSameDay","dateLeftStartOfDay","dateRightStartOfDay","isSameMonth","isSameYear","getYear","setYear","dirtyYear","isEqual","dirtyLeftDate","dirtyRightDate","eachDayOfInterval","dirtyInterval","startDate","endDate","endTime","dates","currentDate","step","addYears","attrRE","tag","voidElement","attrs","children","tagMatch","lookup","startsWith","endIndex","comment","reg","attr","tagRE","whitespaceRE","empty","buff","content","html","components","level","inComponent","isOpen","isComment","nextChar","parseTag","rootEl","replaceClassName","origClass","classToRemove","removeClass","className","classList","setAttribute","baseVal","backendOptions","i18nextOptions","__esModule","catch","factory","_toPrimitive","getDefaults","loadPath","addPath","allowMultiLoading","parsePayload","request","reloadInterval","customHeaders","queryStringParams","crossDomain","withCredentials","overrideMimeType","requestOptions","mode","credentials","Backend","allOptions","setInterval","_readAny","loadUrlLanguages","loadUrlNamespaces","resolvedLoadPath","url","loadUrl","status","parseErr","payload","finished","dataArray","resArray","_this$services","currentLanguage","fetchApi","XmlHttpRequestApi","ActiveXObjectApi","fetch","global","ActiveXObject","fetchNode","addQueryString","params","queryString","paramName","encodeURIComponent","fetchIt","fetchOptions","response","statusText","text","omitFetchOptions","headers","reqOptions","body","requestWithFetch","open","setRequestHeader","h","onreadystatechange","readyState","responseText","requestWithXmlHttpRequest","setUTCDay","dirtyDay","currentDay","remainder","dayIndex","numericPatterns","timezonePatterns","parseNumericPattern","parseTimezonePattern","parseAnyDigitsSigned","parseNDigits","parseNDigitsSigned","dayPeriodEnumToHours","enumValue","normalizeTwoDigitYear","twoDigitYear","currentYear","isCommonEra","absCurrentYear","rangeEnd","parsers","G","priority","incompatibleTokens","isTwoDigitYear","unit","validate","normalizedTwoDigitYear","Y","R","_match","_flags","firstWeekOfYear","u","Q","setUTCMonth","M","L","dirtyWeek","setUTCWeek","I","dirtyISOWeek","isoWeek","setUTCISOWeek","subPriority","D","E","wholeWeekDays","setUTCISODay","B","isPM","H","K","setUTCMinutes","setUTCSeconds","S","pow","setUTCMilliseconds","timestampIsSet","_token","T","formattingTokensRegExp","longFormattingTokensRegExp","escapedStringRegExp","doubleQuoteRegExp","notWhitespaceRegExp","unescapedLatinCharacterRegExp","dirtyDateString","dirtyFormatString","dirtyReferenceDate","formatString","defaultLocale","subFnOptions","setters","dateToSystemTimezone","firstCharacter","longFormatter","usedTokens","useAdditionalWeekYearTokens","useAdditionalDayOfYearTokens","parser","incompatibleToken","_i","usedToken","fullToken","cleanEscapedString","uniquePrioritySetters","setter","setterArray","convertedDate","backends","handleEmptyResourcesAsFailed","bLen","savePosition","save","loadPosition","isLastBackend","lengthCheckAmount","fieldContentRegExp","serializeCookie","maxAge","domain","expires","toUTCString","httpOnly","secure","sameSite","cookie","cookieOptions","setTime","nameEQ","ca","cookie$1","lookupCookie","cookieMinutes","cookieDomain","querystring","lookupQuerystring","hasLocalStorageSupport","localStorageAvailable","localStorage","testKey","setItem","removeItem","lookupLocalStorage","getItem","hasSessionStorageSupport","sessionStorageAvailable","sessionStorage","lookupSessionStorage","navigator$1","userLanguage","htmlTag","getAttribute","lookupFromPathIndex","subdomain","lookupFromSubdomainIndex","hostname","Browser","detectors","i18nOptions","caches","excludeCacheFor","lookupFromUrlIndex","addDetector","detector","detectionOrder","detected","detectorName","cacheName","startOfHour","isSameHour","dateLeftStartOfHour","dateRightStartOfHour","getDaysInMonth","monthIndex","lastDayOfMonth","dirtyMonth","dateWithDesiredMonth","addClass","contains","hasClass","differenceInMinutes","buffer","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","write","rt","LN2","for","g","$$typeof","A","AsyncMode","ConcurrentMode","ContextConsumer","ContextProvider","Element","Fragment","Lazy","Portal","Profiler","StrictMode","Suspense","isAsyncMode","isConcurrentMode","isContextConsumer","isContextProvider","isElement","isForwardRef","isFragment","isLazy","isPortal","isProfiler","isStrictMode","isSuspense","isValidElementType","typeOf","toVal","tmp","signedYear","dayPeriodEnumValue","numberOfDigits","milliseconds","MILLISECONDS_IN_DAY","dayPeriodEnum","lightFormatters","signedWeekYear","weekYear","startOfYearTimestamp","difference","getUTCDayOfYear","localDayOfWeek","isoDayOfWeek","_localize","dirtyDelimiter","delimiter","formatterOptions","addHours","differenceInSeconds","zonedTimeToUtc","extendedOptions"],"mappings":"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","file":"static/js/26.72137af3.chunk.js","sourcesContent":["import * as glMatrix from \"./common.js\";\n/**\r\n * 4x4 Matrix
Format: column-major, when typed out it looks like row-major
The matrices are being post multiplied.\r\n * @module mat4\r\n */\n\n/**\r\n * Creates a new identity mat4\r\n *\r\n * @returns {mat4} a new 4x4 matrix\r\n */\n\nexport function create() {\n var out = new glMatrix.ARRAY_TYPE(16);\n\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n }\n\n out[0] = 1;\n out[5] = 1;\n out[10] = 1;\n out[15] = 1;\n return out;\n}\n/**\r\n * Creates a new mat4 initialized with values from an existing matrix\r\n *\r\n * @param {ReadonlyMat4} a matrix to clone\r\n * @returns {mat4} a new 4x4 matrix\r\n */\n\nexport function clone(a) {\n var out = new glMatrix.ARRAY_TYPE(16);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n out[9] = a[9];\n out[10] = a[10];\n out[11] = a[11];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n return out;\n}\n/**\r\n * Copy the values from one mat4 to another\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {ReadonlyMat4} a the source matrix\r\n * @returns {mat4} out\r\n */\n\nexport function copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n out[9] = a[9];\n out[10] = a[10];\n out[11] = a[11];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n return out;\n}\n/**\r\n * Create a new mat4 with the given values\r\n *\r\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\r\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\r\n * @param {Number} m02 Component in column 0, row 2 position (index 2)\r\n * @param {Number} m03 Component in column 0, row 3 position (index 3)\r\n * @param {Number} m10 Component in column 1, row 0 position (index 4)\r\n * @param {Number} m11 Component in column 1, row 1 position (index 5)\r\n * @param {Number} m12 Component in column 1, row 2 position (index 6)\r\n * @param {Number} m13 Component in column 1, row 3 position (index 7)\r\n * @param {Number} m20 Component in column 2, row 0 position (index 8)\r\n * @param {Number} m21 Component in column 2, row 1 position (index 9)\r\n * @param {Number} m22 Component in column 2, row 2 position (index 10)\r\n * @param {Number} m23 Component in column 2, row 3 position (index 11)\r\n * @param {Number} m30 Component in column 3, row 0 position (index 12)\r\n * @param {Number} m31 Component in column 3, row 1 position (index 13)\r\n * @param {Number} m32 Component in column 3, row 2 position (index 14)\r\n * @param {Number} m33 Component in column 3, row 3 position (index 15)\r\n * @returns {mat4} A new mat4\r\n */\n\nexport function fromValues(m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) {\n var out = new glMatrix.ARRAY_TYPE(16);\n out[0] = m00;\n out[1] = m01;\n out[2] = m02;\n out[3] = m03;\n out[4] = m10;\n out[5] = m11;\n out[6] = m12;\n out[7] = m13;\n out[8] = m20;\n out[9] = m21;\n out[10] = m22;\n out[11] = m23;\n out[12] = m30;\n out[13] = m31;\n out[14] = m32;\n out[15] = m33;\n return out;\n}\n/**\r\n * Set the components of a mat4 to the given values\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\r\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\r\n * @param {Number} m02 Component in column 0, row 2 position (index 2)\r\n * @param {Number} m03 Component in column 0, row 3 position (index 3)\r\n * @param {Number} m10 Component in column 1, row 0 position (index 4)\r\n * @param {Number} m11 Component in column 1, row 1 position (index 5)\r\n * @param {Number} m12 Component in column 1, row 2 position (index 6)\r\n * @param {Number} m13 Component in column 1, row 3 position (index 7)\r\n * @param {Number} m20 Component in column 2, row 0 position (index 8)\r\n * @param {Number} m21 Component in column 2, row 1 position (index 9)\r\n * @param {Number} m22 Component in column 2, row 2 position (index 10)\r\n * @param {Number} m23 Component in column 2, row 3 position (index 11)\r\n * @param {Number} m30 Component in column 3, row 0 position (index 12)\r\n * @param {Number} m31 Component in column 3, row 1 position (index 13)\r\n * @param {Number} m32 Component in column 3, row 2 position (index 14)\r\n * @param {Number} m33 Component in column 3, row 3 position (index 15)\r\n * @returns {mat4} out\r\n */\n\nexport function set(out, m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) {\n out[0] = m00;\n out[1] = m01;\n out[2] = m02;\n out[3] = m03;\n out[4] = m10;\n out[5] = m11;\n out[6] = m12;\n out[7] = m13;\n out[8] = m20;\n out[9] = m21;\n out[10] = m22;\n out[11] = m23;\n out[12] = m30;\n out[13] = m31;\n out[14] = m32;\n out[15] = m33;\n return out;\n}\n/**\r\n * Set a mat4 to the identity matrix\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @returns {mat4} out\r\n */\n\nexport function identity(out) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = 1;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\r\n * Transpose the values of a mat4\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {ReadonlyMat4} a the source matrix\r\n * @returns {mat4} out\r\n */\n\nexport function transpose(out, a) {\n // If we are transposing ourselves we can skip a few steps but have to cache some values\n if (out === a) {\n var a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a12 = a[6],\n a13 = a[7];\n var a23 = a[11];\n out[1] = a[4];\n out[2] = a[8];\n out[3] = a[12];\n out[4] = a01;\n out[6] = a[9];\n out[7] = a[13];\n out[8] = a02;\n out[9] = a12;\n out[11] = a[14];\n out[12] = a03;\n out[13] = a13;\n out[14] = a23;\n } else {\n out[0] = a[0];\n out[1] = a[4];\n out[2] = a[8];\n out[3] = a[12];\n out[4] = a[1];\n out[5] = a[5];\n out[6] = a[9];\n out[7] = a[13];\n out[8] = a[2];\n out[9] = a[6];\n out[10] = a[10];\n out[11] = a[14];\n out[12] = a[3];\n out[13] = a[7];\n out[14] = a[11];\n out[15] = a[15];\n }\n\n return out;\n}\n/**\r\n * Inverts a mat4\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {ReadonlyMat4} a the source matrix\r\n * @returns {mat4} out\r\n */\n\nexport function invert(out, a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n var a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n var a30 = a[12],\n a31 = a[13],\n a32 = a[14],\n a33 = a[15];\n var b00 = a00 * a11 - a01 * a10;\n var b01 = a00 * a12 - a02 * a10;\n var b02 = a00 * a13 - a03 * a10;\n var b03 = a01 * a12 - a02 * a11;\n var b04 = a01 * a13 - a03 * a11;\n var b05 = a02 * a13 - a03 * a12;\n var b06 = a20 * a31 - a21 * a30;\n var b07 = a20 * a32 - a22 * a30;\n var b08 = a20 * a33 - a23 * a30;\n var b09 = a21 * a32 - a22 * a31;\n var b10 = a21 * a33 - a23 * a31;\n var b11 = a22 * a33 - a23 * a32; // Calculate the determinant\n\n var det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n\n if (!det) {\n return null;\n }\n\n det = 1.0 / det;\n out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;\n out[1] = (a02 * b10 - a01 * b11 - a03 * b09) * det;\n out[2] = (a31 * b05 - a32 * b04 + a33 * b03) * det;\n out[3] = (a22 * b04 - a21 * b05 - a23 * b03) * det;\n out[4] = (a12 * b08 - a10 * b11 - a13 * b07) * det;\n out[5] = (a00 * b11 - a02 * b08 + a03 * b07) * det;\n out[6] = (a32 * b02 - a30 * b05 - a33 * b01) * det;\n out[7] = (a20 * b05 - a22 * b02 + a23 * b01) * det;\n out[8] = (a10 * b10 - a11 * b08 + a13 * b06) * det;\n out[9] = (a01 * b08 - a00 * b10 - a03 * b06) * det;\n out[10] = (a30 * b04 - a31 * b02 + a33 * b00) * det;\n out[11] = (a21 * b02 - a20 * b04 - a23 * b00) * det;\n out[12] = (a11 * b07 - a10 * b09 - a12 * b06) * det;\n out[13] = (a00 * b09 - a01 * b07 + a02 * b06) * det;\n out[14] = (a31 * b01 - a30 * b03 - a32 * b00) * det;\n out[15] = (a20 * b03 - a21 * b01 + a22 * b00) * det;\n return out;\n}\n/**\r\n * Calculates the adjugate of a mat4\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {ReadonlyMat4} a the source matrix\r\n * @returns {mat4} out\r\n */\n\nexport function adjoint(out, a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n var a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n var a30 = a[12],\n a31 = a[13],\n a32 = a[14],\n a33 = a[15];\n out[0] = a11 * (a22 * a33 - a23 * a32) - a21 * (a12 * a33 - a13 * a32) + a31 * (a12 * a23 - a13 * a22);\n out[1] = -(a01 * (a22 * a33 - a23 * a32) - a21 * (a02 * a33 - a03 * a32) + a31 * (a02 * a23 - a03 * a22));\n out[2] = a01 * (a12 * a33 - a13 * a32) - a11 * (a02 * a33 - a03 * a32) + a31 * (a02 * a13 - a03 * a12);\n out[3] = -(a01 * (a12 * a23 - a13 * a22) - a11 * (a02 * a23 - a03 * a22) + a21 * (a02 * a13 - a03 * a12));\n out[4] = -(a10 * (a22 * a33 - a23 * a32) - a20 * (a12 * a33 - a13 * a32) + a30 * (a12 * a23 - a13 * a22));\n out[5] = a00 * (a22 * a33 - a23 * a32) - a20 * (a02 * a33 - a03 * a32) + a30 * (a02 * a23 - a03 * a22);\n out[6] = -(a00 * (a12 * a33 - a13 * a32) - a10 * (a02 * a33 - a03 * a32) + a30 * (a02 * a13 - a03 * a12));\n out[7] = a00 * (a12 * a23 - a13 * a22) - a10 * (a02 * a23 - a03 * a22) + a20 * (a02 * a13 - a03 * a12);\n out[8] = a10 * (a21 * a33 - a23 * a31) - a20 * (a11 * a33 - a13 * a31) + a30 * (a11 * a23 - a13 * a21);\n out[9] = -(a00 * (a21 * a33 - a23 * a31) - a20 * (a01 * a33 - a03 * a31) + a30 * (a01 * a23 - a03 * a21));\n out[10] = a00 * (a11 * a33 - a13 * a31) - a10 * (a01 * a33 - a03 * a31) + a30 * (a01 * a13 - a03 * a11);\n out[11] = -(a00 * (a11 * a23 - a13 * a21) - a10 * (a01 * a23 - a03 * a21) + a20 * (a01 * a13 - a03 * a11));\n out[12] = -(a10 * (a21 * a32 - a22 * a31) - a20 * (a11 * a32 - a12 * a31) + a30 * (a11 * a22 - a12 * a21));\n out[13] = a00 * (a21 * a32 - a22 * a31) - a20 * (a01 * a32 - a02 * a31) + a30 * (a01 * a22 - a02 * a21);\n out[14] = -(a00 * (a11 * a32 - a12 * a31) - a10 * (a01 * a32 - a02 * a31) + a30 * (a01 * a12 - a02 * a11));\n out[15] = a00 * (a11 * a22 - a12 * a21) - a10 * (a01 * a22 - a02 * a21) + a20 * (a01 * a12 - a02 * a11);\n return out;\n}\n/**\r\n * Calculates the determinant of a mat4\r\n *\r\n * @param {ReadonlyMat4} a the source matrix\r\n * @returns {Number} determinant of a\r\n */\n\nexport function determinant(a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n var a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n var a30 = a[12],\n a31 = a[13],\n a32 = a[14],\n a33 = a[15];\n var b00 = a00 * a11 - a01 * a10;\n var b01 = a00 * a12 - a02 * a10;\n var b02 = a00 * a13 - a03 * a10;\n var b03 = a01 * a12 - a02 * a11;\n var b04 = a01 * a13 - a03 * a11;\n var b05 = a02 * a13 - a03 * a12;\n var b06 = a20 * a31 - a21 * a30;\n var b07 = a20 * a32 - a22 * a30;\n var b08 = a20 * a33 - a23 * a30;\n var b09 = a21 * a32 - a22 * a31;\n var b10 = a21 * a33 - a23 * a31;\n var b11 = a22 * a33 - a23 * a32; // Calculate the determinant\n\n return b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n}\n/**\r\n * Multiplies two mat4s\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {ReadonlyMat4} a the first operand\r\n * @param {ReadonlyMat4} b the second operand\r\n * @returns {mat4} out\r\n */\n\nexport function multiply(out, a, b) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n var a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n var a30 = a[12],\n a31 = a[13],\n a32 = a[14],\n a33 = a[15]; // Cache only the current line of the second matrix\n\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3];\n out[0] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[1] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[2] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[3] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n b0 = b[4];\n b1 = b[5];\n b2 = b[6];\n b3 = b[7];\n out[4] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[5] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[6] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[7] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n b0 = b[8];\n b1 = b[9];\n b2 = b[10];\n b3 = b[11];\n out[8] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[9] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[10] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[11] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n b0 = b[12];\n b1 = b[13];\n b2 = b[14];\n b3 = b[15];\n out[12] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[13] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[14] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[15] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n return out;\n}\n/**\r\n * Translate a mat4 by the given vector\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {ReadonlyMat4} a the matrix to translate\r\n * @param {ReadonlyVec3} v vector to translate by\r\n * @returns {mat4} out\r\n */\n\nexport function translate(out, a, v) {\n var x = v[0],\n y = v[1],\n z = v[2];\n var a00, a01, a02, a03;\n var a10, a11, a12, a13;\n var a20, a21, a22, a23;\n\n if (a === out) {\n out[12] = a[0] * x + a[4] * y + a[8] * z + a[12];\n out[13] = a[1] * x + a[5] * y + a[9] * z + a[13];\n out[14] = a[2] * x + a[6] * y + a[10] * z + a[14];\n out[15] = a[3] * x + a[7] * y + a[11] * z + a[15];\n } else {\n a00 = a[0];\n a01 = a[1];\n a02 = a[2];\n a03 = a[3];\n a10 = a[4];\n a11 = a[5];\n a12 = a[6];\n a13 = a[7];\n a20 = a[8];\n a21 = a[9];\n a22 = a[10];\n a23 = a[11];\n out[0] = a00;\n out[1] = a01;\n out[2] = a02;\n out[3] = a03;\n out[4] = a10;\n out[5] = a11;\n out[6] = a12;\n out[7] = a13;\n out[8] = a20;\n out[9] = a21;\n out[10] = a22;\n out[11] = a23;\n out[12] = a00 * x + a10 * y + a20 * z + a[12];\n out[13] = a01 * x + a11 * y + a21 * z + a[13];\n out[14] = a02 * x + a12 * y + a22 * z + a[14];\n out[15] = a03 * x + a13 * y + a23 * z + a[15];\n }\n\n return out;\n}\n/**\r\n * Scales the mat4 by the dimensions in the given vec3 not using vectorization\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {ReadonlyMat4} a the matrix to scale\r\n * @param {ReadonlyVec3} v the vec3 to scale the matrix by\r\n * @returns {mat4} out\r\n **/\n\nexport function scale(out, a, v) {\n var x = v[0],\n y = v[1],\n z = v[2];\n out[0] = a[0] * x;\n out[1] = a[1] * x;\n out[2] = a[2] * x;\n out[3] = a[3] * x;\n out[4] = a[4] * y;\n out[5] = a[5] * y;\n out[6] = a[6] * y;\n out[7] = a[7] * y;\n out[8] = a[8] * z;\n out[9] = a[9] * z;\n out[10] = a[10] * z;\n out[11] = a[11] * z;\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n return out;\n}\n/**\r\n * Rotates a mat4 by the given angle around the given axis\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {ReadonlyMat4} a the matrix to rotate\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @param {ReadonlyVec3} axis the axis to rotate around\r\n * @returns {mat4} out\r\n */\n\nexport function rotate(out, a, rad, axis) {\n var x = axis[0],\n y = axis[1],\n z = axis[2];\n var len = Math.hypot(x, y, z);\n var s, c, t;\n var a00, a01, a02, a03;\n var a10, a11, a12, a13;\n var a20, a21, a22, a23;\n var b00, b01, b02;\n var b10, b11, b12;\n var b20, b21, b22;\n\n if (len < glMatrix.EPSILON) {\n return null;\n }\n\n len = 1 / len;\n x *= len;\n y *= len;\n z *= len;\n s = Math.sin(rad);\n c = Math.cos(rad);\n t = 1 - c;\n a00 = a[0];\n a01 = a[1];\n a02 = a[2];\n a03 = a[3];\n a10 = a[4];\n a11 = a[5];\n a12 = a[6];\n a13 = a[7];\n a20 = a[8];\n a21 = a[9];\n a22 = a[10];\n a23 = a[11]; // Construct the elements of the rotation matrix\n\n b00 = x * x * t + c;\n b01 = y * x * t + z * s;\n b02 = z * x * t - y * s;\n b10 = x * y * t - z * s;\n b11 = y * y * t + c;\n b12 = z * y * t + x * s;\n b20 = x * z * t + y * s;\n b21 = y * z * t - x * s;\n b22 = z * z * t + c; // Perform rotation-specific matrix multiplication\n\n out[0] = a00 * b00 + a10 * b01 + a20 * b02;\n out[1] = a01 * b00 + a11 * b01 + a21 * b02;\n out[2] = a02 * b00 + a12 * b01 + a22 * b02;\n out[3] = a03 * b00 + a13 * b01 + a23 * b02;\n out[4] = a00 * b10 + a10 * b11 + a20 * b12;\n out[5] = a01 * b10 + a11 * b11 + a21 * b12;\n out[6] = a02 * b10 + a12 * b11 + a22 * b12;\n out[7] = a03 * b10 + a13 * b11 + a23 * b12;\n out[8] = a00 * b20 + a10 * b21 + a20 * b22;\n out[9] = a01 * b20 + a11 * b21 + a21 * b22;\n out[10] = a02 * b20 + a12 * b21 + a22 * b22;\n out[11] = a03 * b20 + a13 * b21 + a23 * b22;\n\n if (a !== out) {\n // If the source and destination differ, copy the unchanged last row\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n }\n\n return out;\n}\n/**\r\n * Rotates a matrix by the given angle around the X axis\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {ReadonlyMat4} a the matrix to rotate\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @returns {mat4} out\r\n */\n\nexport function rotateX(out, a, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad);\n var a10 = a[4];\n var a11 = a[5];\n var a12 = a[6];\n var a13 = a[7];\n var a20 = a[8];\n var a21 = a[9];\n var a22 = a[10];\n var a23 = a[11];\n\n if (a !== out) {\n // If the source and destination differ, copy the unchanged rows\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n } // Perform axis-specific matrix multiplication\n\n\n out[4] = a10 * c + a20 * s;\n out[5] = a11 * c + a21 * s;\n out[6] = a12 * c + a22 * s;\n out[7] = a13 * c + a23 * s;\n out[8] = a20 * c - a10 * s;\n out[9] = a21 * c - a11 * s;\n out[10] = a22 * c - a12 * s;\n out[11] = a23 * c - a13 * s;\n return out;\n}\n/**\r\n * Rotates a matrix by the given angle around the Y axis\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {ReadonlyMat4} a the matrix to rotate\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @returns {mat4} out\r\n */\n\nexport function rotateY(out, a, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad);\n var a00 = a[0];\n var a01 = a[1];\n var a02 = a[2];\n var a03 = a[3];\n var a20 = a[8];\n var a21 = a[9];\n var a22 = a[10];\n var a23 = a[11];\n\n if (a !== out) {\n // If the source and destination differ, copy the unchanged rows\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n } // Perform axis-specific matrix multiplication\n\n\n out[0] = a00 * c - a20 * s;\n out[1] = a01 * c - a21 * s;\n out[2] = a02 * c - a22 * s;\n out[3] = a03 * c - a23 * s;\n out[8] = a00 * s + a20 * c;\n out[9] = a01 * s + a21 * c;\n out[10] = a02 * s + a22 * c;\n out[11] = a03 * s + a23 * c;\n return out;\n}\n/**\r\n * Rotates a matrix by the given angle around the Z axis\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {ReadonlyMat4} a the matrix to rotate\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @returns {mat4} out\r\n */\n\nexport function rotateZ(out, a, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad);\n var a00 = a[0];\n var a01 = a[1];\n var a02 = a[2];\n var a03 = a[3];\n var a10 = a[4];\n var a11 = a[5];\n var a12 = a[6];\n var a13 = a[7];\n\n if (a !== out) {\n // If the source and destination differ, copy the unchanged last row\n out[8] = a[8];\n out[9] = a[9];\n out[10] = a[10];\n out[11] = a[11];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n } // Perform axis-specific matrix multiplication\n\n\n out[0] = a00 * c + a10 * s;\n out[1] = a01 * c + a11 * s;\n out[2] = a02 * c + a12 * s;\n out[3] = a03 * c + a13 * s;\n out[4] = a10 * c - a00 * s;\n out[5] = a11 * c - a01 * s;\n out[6] = a12 * c - a02 * s;\n out[7] = a13 * c - a03 * s;\n return out;\n}\n/**\r\n * Creates a matrix from a vector translation\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat4.identity(dest);\r\n * mat4.translate(dest, dest, vec);\r\n *\r\n * @param {mat4} out mat4 receiving operation result\r\n * @param {ReadonlyVec3} v Translation vector\r\n * @returns {mat4} out\r\n */\n\nexport function fromTranslation(out, v) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = 1;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = v[0];\n out[13] = v[1];\n out[14] = v[2];\n out[15] = 1;\n return out;\n}\n/**\r\n * Creates a matrix from a vector scaling\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat4.identity(dest);\r\n * mat4.scale(dest, dest, vec);\r\n *\r\n * @param {mat4} out mat4 receiving operation result\r\n * @param {ReadonlyVec3} v Scaling vector\r\n * @returns {mat4} out\r\n */\n\nexport function fromScaling(out, v) {\n out[0] = v[0];\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = v[1];\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = v[2];\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\r\n * Creates a matrix from a given angle around a given axis\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat4.identity(dest);\r\n * mat4.rotate(dest, dest, rad, axis);\r\n *\r\n * @param {mat4} out mat4 receiving operation result\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @param {ReadonlyVec3} axis the axis to rotate around\r\n * @returns {mat4} out\r\n */\n\nexport function fromRotation(out, rad, axis) {\n var x = axis[0],\n y = axis[1],\n z = axis[2];\n var len = Math.hypot(x, y, z);\n var s, c, t;\n\n if (len < glMatrix.EPSILON) {\n return null;\n }\n\n len = 1 / len;\n x *= len;\n y *= len;\n z *= len;\n s = Math.sin(rad);\n c = Math.cos(rad);\n t = 1 - c; // Perform rotation-specific matrix multiplication\n\n out[0] = x * x * t + c;\n out[1] = y * x * t + z * s;\n out[2] = z * x * t - y * s;\n out[3] = 0;\n out[4] = x * y * t - z * s;\n out[5] = y * y * t + c;\n out[6] = z * y * t + x * s;\n out[7] = 0;\n out[8] = x * z * t + y * s;\n out[9] = y * z * t - x * s;\n out[10] = z * z * t + c;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\r\n * Creates a matrix from the given angle around the X axis\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat4.identity(dest);\r\n * mat4.rotateX(dest, dest, rad);\r\n *\r\n * @param {mat4} out mat4 receiving operation result\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @returns {mat4} out\r\n */\n\nexport function fromXRotation(out, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad); // Perform axis-specific matrix multiplication\n\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = c;\n out[6] = s;\n out[7] = 0;\n out[8] = 0;\n out[9] = -s;\n out[10] = c;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\r\n * Creates a matrix from the given angle around the Y axis\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat4.identity(dest);\r\n * mat4.rotateY(dest, dest, rad);\r\n *\r\n * @param {mat4} out mat4 receiving operation result\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @returns {mat4} out\r\n */\n\nexport function fromYRotation(out, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad); // Perform axis-specific matrix multiplication\n\n out[0] = c;\n out[1] = 0;\n out[2] = -s;\n out[3] = 0;\n out[4] = 0;\n out[5] = 1;\n out[6] = 0;\n out[7] = 0;\n out[8] = s;\n out[9] = 0;\n out[10] = c;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\r\n * Creates a matrix from the given angle around the Z axis\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat4.identity(dest);\r\n * mat4.rotateZ(dest, dest, rad);\r\n *\r\n * @param {mat4} out mat4 receiving operation result\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @returns {mat4} out\r\n */\n\nexport function fromZRotation(out, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad); // Perform axis-specific matrix multiplication\n\n out[0] = c;\n out[1] = s;\n out[2] = 0;\n out[3] = 0;\n out[4] = -s;\n out[5] = c;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\r\n * Creates a matrix from a quaternion rotation and vector translation\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat4.identity(dest);\r\n * mat4.translate(dest, vec);\r\n * let quatMat = mat4.create();\r\n * quat4.toMat4(quat, quatMat);\r\n * mat4.multiply(dest, quatMat);\r\n *\r\n * @param {mat4} out mat4 receiving operation result\r\n * @param {quat4} q Rotation quaternion\r\n * @param {ReadonlyVec3} v Translation vector\r\n * @returns {mat4} out\r\n */\n\nexport function fromRotationTranslation(out, q, v) {\n // Quaternion math\n var x = q[0],\n y = q[1],\n z = q[2],\n w = q[3];\n var x2 = x + x;\n var y2 = y + y;\n var z2 = z + z;\n var xx = x * x2;\n var xy = x * y2;\n var xz = x * z2;\n var yy = y * y2;\n var yz = y * z2;\n var zz = z * z2;\n var wx = w * x2;\n var wy = w * y2;\n var wz = w * z2;\n out[0] = 1 - (yy + zz);\n out[1] = xy + wz;\n out[2] = xz - wy;\n out[3] = 0;\n out[4] = xy - wz;\n out[5] = 1 - (xx + zz);\n out[6] = yz + wx;\n out[7] = 0;\n out[8] = xz + wy;\n out[9] = yz - wx;\n out[10] = 1 - (xx + yy);\n out[11] = 0;\n out[12] = v[0];\n out[13] = v[1];\n out[14] = v[2];\n out[15] = 1;\n return out;\n}\n/**\r\n * Creates a new mat4 from a dual quat.\r\n *\r\n * @param {mat4} out Matrix\r\n * @param {ReadonlyQuat2} a Dual Quaternion\r\n * @returns {mat4} mat4 receiving operation result\r\n */\n\nexport function fromQuat2(out, a) {\n var translation = new glMatrix.ARRAY_TYPE(3);\n var bx = -a[0],\n by = -a[1],\n bz = -a[2],\n bw = a[3],\n ax = a[4],\n ay = a[5],\n az = a[6],\n aw = a[7];\n var magnitude = bx * bx + by * by + bz * bz + bw * bw; //Only scale if it makes sense\n\n if (magnitude > 0) {\n translation[0] = (ax * bw + aw * bx + ay * bz - az * by) * 2 / magnitude;\n translation[1] = (ay * bw + aw * by + az * bx - ax * bz) * 2 / magnitude;\n translation[2] = (az * bw + aw * bz + ax * by - ay * bx) * 2 / magnitude;\n } else {\n translation[0] = (ax * bw + aw * bx + ay * bz - az * by) * 2;\n translation[1] = (ay * bw + aw * by + az * bx - ax * bz) * 2;\n translation[2] = (az * bw + aw * bz + ax * by - ay * bx) * 2;\n }\n\n fromRotationTranslation(out, a, translation);\n return out;\n}\n/**\r\n * Returns the translation vector component of a transformation\r\n * matrix. If a matrix is built with fromRotationTranslation,\r\n * the returned vector will be the same as the translation vector\r\n * originally supplied.\r\n * @param {vec3} out Vector to receive translation component\r\n * @param {ReadonlyMat4} mat Matrix to be decomposed (input)\r\n * @return {vec3} out\r\n */\n\nexport function getTranslation(out, mat) {\n out[0] = mat[12];\n out[1] = mat[13];\n out[2] = mat[14];\n return out;\n}\n/**\r\n * Returns the scaling factor component of a transformation\r\n * matrix. If a matrix is built with fromRotationTranslationScale\r\n * with a normalized Quaternion paramter, the returned vector will be\r\n * the same as the scaling vector\r\n * originally supplied.\r\n * @param {vec3} out Vector to receive scaling factor component\r\n * @param {ReadonlyMat4} mat Matrix to be decomposed (input)\r\n * @return {vec3} out\r\n */\n\nexport function getScaling(out, mat) {\n var m11 = mat[0];\n var m12 = mat[1];\n var m13 = mat[2];\n var m21 = mat[4];\n var m22 = mat[5];\n var m23 = mat[6];\n var m31 = mat[8];\n var m32 = mat[9];\n var m33 = mat[10];\n out[0] = Math.hypot(m11, m12, m13);\n out[1] = Math.hypot(m21, m22, m23);\n out[2] = Math.hypot(m31, m32, m33);\n return out;\n}\n/**\r\n * Returns a quaternion representing the rotational component\r\n * of a transformation matrix. If a matrix is built with\r\n * fromRotationTranslation, the returned quaternion will be the\r\n * same as the quaternion originally supplied.\r\n * @param {quat} out Quaternion to receive the rotation component\r\n * @param {ReadonlyMat4} mat Matrix to be decomposed (input)\r\n * @return {quat} out\r\n */\n\nexport function getRotation(out, mat) {\n var scaling = new glMatrix.ARRAY_TYPE(3);\n getScaling(scaling, mat);\n var is1 = 1 / scaling[0];\n var is2 = 1 / scaling[1];\n var is3 = 1 / scaling[2];\n var sm11 = mat[0] * is1;\n var sm12 = mat[1] * is2;\n var sm13 = mat[2] * is3;\n var sm21 = mat[4] * is1;\n var sm22 = mat[5] * is2;\n var sm23 = mat[6] * is3;\n var sm31 = mat[8] * is1;\n var sm32 = mat[9] * is2;\n var sm33 = mat[10] * is3;\n var trace = sm11 + sm22 + sm33;\n var S = 0;\n\n if (trace > 0) {\n S = Math.sqrt(trace + 1.0) * 2;\n out[3] = 0.25 * S;\n out[0] = (sm23 - sm32) / S;\n out[1] = (sm31 - sm13) / S;\n out[2] = (sm12 - sm21) / S;\n } else if (sm11 > sm22 && sm11 > sm33) {\n S = Math.sqrt(1.0 + sm11 - sm22 - sm33) * 2;\n out[3] = (sm23 - sm32) / S;\n out[0] = 0.25 * S;\n out[1] = (sm12 + sm21) / S;\n out[2] = (sm31 + sm13) / S;\n } else if (sm22 > sm33) {\n S = Math.sqrt(1.0 + sm22 - sm11 - sm33) * 2;\n out[3] = (sm31 - sm13) / S;\n out[0] = (sm12 + sm21) / S;\n out[1] = 0.25 * S;\n out[2] = (sm23 + sm32) / S;\n } else {\n S = Math.sqrt(1.0 + sm33 - sm11 - sm22) * 2;\n out[3] = (sm12 - sm21) / S;\n out[0] = (sm31 + sm13) / S;\n out[1] = (sm23 + sm32) / S;\n out[2] = 0.25 * S;\n }\n\n return out;\n}\n/**\r\n * Creates a matrix from a quaternion rotation, vector translation and vector scale\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat4.identity(dest);\r\n * mat4.translate(dest, vec);\r\n * let quatMat = mat4.create();\r\n * quat4.toMat4(quat, quatMat);\r\n * mat4.multiply(dest, quatMat);\r\n * mat4.scale(dest, scale)\r\n *\r\n * @param {mat4} out mat4 receiving operation result\r\n * @param {quat4} q Rotation quaternion\r\n * @param {ReadonlyVec3} v Translation vector\r\n * @param {ReadonlyVec3} s Scaling vector\r\n * @returns {mat4} out\r\n */\n\nexport function fromRotationTranslationScale(out, q, v, s) {\n // Quaternion math\n var x = q[0],\n y = q[1],\n z = q[2],\n w = q[3];\n var x2 = x + x;\n var y2 = y + y;\n var z2 = z + z;\n var xx = x * x2;\n var xy = x * y2;\n var xz = x * z2;\n var yy = y * y2;\n var yz = y * z2;\n var zz = z * z2;\n var wx = w * x2;\n var wy = w * y2;\n var wz = w * z2;\n var sx = s[0];\n var sy = s[1];\n var sz = s[2];\n out[0] = (1 - (yy + zz)) * sx;\n out[1] = (xy + wz) * sx;\n out[2] = (xz - wy) * sx;\n out[3] = 0;\n out[4] = (xy - wz) * sy;\n out[5] = (1 - (xx + zz)) * sy;\n out[6] = (yz + wx) * sy;\n out[7] = 0;\n out[8] = (xz + wy) * sz;\n out[9] = (yz - wx) * sz;\n out[10] = (1 - (xx + yy)) * sz;\n out[11] = 0;\n out[12] = v[0];\n out[13] = v[1];\n out[14] = v[2];\n out[15] = 1;\n return out;\n}\n/**\r\n * Creates a matrix from a quaternion rotation, vector translation and vector scale, rotating and scaling around the given origin\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat4.identity(dest);\r\n * mat4.translate(dest, vec);\r\n * mat4.translate(dest, origin);\r\n * let quatMat = mat4.create();\r\n * quat4.toMat4(quat, quatMat);\r\n * mat4.multiply(dest, quatMat);\r\n * mat4.scale(dest, scale)\r\n * mat4.translate(dest, negativeOrigin);\r\n *\r\n * @param {mat4} out mat4 receiving operation result\r\n * @param {quat4} q Rotation quaternion\r\n * @param {ReadonlyVec3} v Translation vector\r\n * @param {ReadonlyVec3} s Scaling vector\r\n * @param {ReadonlyVec3} o The origin vector around which to scale and rotate\r\n * @returns {mat4} out\r\n */\n\nexport function fromRotationTranslationScaleOrigin(out, q, v, s, o) {\n // Quaternion math\n var x = q[0],\n y = q[1],\n z = q[2],\n w = q[3];\n var x2 = x + x;\n var y2 = y + y;\n var z2 = z + z;\n var xx = x * x2;\n var xy = x * y2;\n var xz = x * z2;\n var yy = y * y2;\n var yz = y * z2;\n var zz = z * z2;\n var wx = w * x2;\n var wy = w * y2;\n var wz = w * z2;\n var sx = s[0];\n var sy = s[1];\n var sz = s[2];\n var ox = o[0];\n var oy = o[1];\n var oz = o[2];\n var out0 = (1 - (yy + zz)) * sx;\n var out1 = (xy + wz) * sx;\n var out2 = (xz - wy) * sx;\n var out4 = (xy - wz) * sy;\n var out5 = (1 - (xx + zz)) * sy;\n var out6 = (yz + wx) * sy;\n var out8 = (xz + wy) * sz;\n var out9 = (yz - wx) * sz;\n var out10 = (1 - (xx + yy)) * sz;\n out[0] = out0;\n out[1] = out1;\n out[2] = out2;\n out[3] = 0;\n out[4] = out4;\n out[5] = out5;\n out[6] = out6;\n out[7] = 0;\n out[8] = out8;\n out[9] = out9;\n out[10] = out10;\n out[11] = 0;\n out[12] = v[0] + ox - (out0 * ox + out4 * oy + out8 * oz);\n out[13] = v[1] + oy - (out1 * ox + out5 * oy + out9 * oz);\n out[14] = v[2] + oz - (out2 * ox + out6 * oy + out10 * oz);\n out[15] = 1;\n return out;\n}\n/**\r\n * Calculates a 4x4 matrix from the given quaternion\r\n *\r\n * @param {mat4} out mat4 receiving operation result\r\n * @param {ReadonlyQuat} q Quaternion to create matrix from\r\n *\r\n * @returns {mat4} out\r\n */\n\nexport function fromQuat(out, q) {\n var x = q[0],\n y = q[1],\n z = q[2],\n w = q[3];\n var x2 = x + x;\n var y2 = y + y;\n var z2 = z + z;\n var xx = x * x2;\n var yx = y * x2;\n var yy = y * y2;\n var zx = z * x2;\n var zy = z * y2;\n var zz = z * z2;\n var wx = w * x2;\n var wy = w * y2;\n var wz = w * z2;\n out[0] = 1 - yy - zz;\n out[1] = yx + wz;\n out[2] = zx - wy;\n out[3] = 0;\n out[4] = yx - wz;\n out[5] = 1 - xx - zz;\n out[6] = zy + wx;\n out[7] = 0;\n out[8] = zx + wy;\n out[9] = zy - wx;\n out[10] = 1 - xx - yy;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\r\n * Generates a frustum matrix with the given bounds\r\n *\r\n * @param {mat4} out mat4 frustum matrix will be written into\r\n * @param {Number} left Left bound of the frustum\r\n * @param {Number} right Right bound of the frustum\r\n * @param {Number} bottom Bottom bound of the frustum\r\n * @param {Number} top Top bound of the frustum\r\n * @param {Number} near Near bound of the frustum\r\n * @param {Number} far Far bound of the frustum\r\n * @returns {mat4} out\r\n */\n\nexport function frustum(out, left, right, bottom, top, near, far) {\n var rl = 1 / (right - left);\n var tb = 1 / (top - bottom);\n var nf = 1 / (near - far);\n out[0] = near * 2 * rl;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = near * 2 * tb;\n out[6] = 0;\n out[7] = 0;\n out[8] = (right + left) * rl;\n out[9] = (top + bottom) * tb;\n out[10] = (far + near) * nf;\n out[11] = -1;\n out[12] = 0;\n out[13] = 0;\n out[14] = far * near * 2 * nf;\n out[15] = 0;\n return out;\n}\n/**\r\n * Generates a perspective projection matrix with the given bounds.\r\n * Passing null/undefined/no value for far will generate infinite projection matrix.\r\n *\r\n * @param {mat4} out mat4 frustum matrix will be written into\r\n * @param {number} fovy Vertical field of view in radians\r\n * @param {number} aspect Aspect ratio. typically viewport width/height\r\n * @param {number} near Near bound of the frustum\r\n * @param {number} far Far bound of the frustum, can be null or Infinity\r\n * @returns {mat4} out\r\n */\n\nexport function perspective(out, fovy, aspect, near, far) {\n var f = 1.0 / Math.tan(fovy / 2),\n nf;\n out[0] = f / aspect;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = f;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[11] = -1;\n out[12] = 0;\n out[13] = 0;\n out[15] = 0;\n\n if (far != null && far !== Infinity) {\n nf = 1 / (near - far);\n out[10] = (far + near) * nf;\n out[14] = 2 * far * near * nf;\n } else {\n out[10] = -1;\n out[14] = -2 * near;\n }\n\n return out;\n}\n/**\r\n * Generates a perspective projection matrix with the given field of view.\r\n * This is primarily useful for generating projection matrices to be used\r\n * with the still experiemental WebVR API.\r\n *\r\n * @param {mat4} out mat4 frustum matrix will be written into\r\n * @param {Object} fov Object containing the following values: upDegrees, downDegrees, leftDegrees, rightDegrees\r\n * @param {number} near Near bound of the frustum\r\n * @param {number} far Far bound of the frustum\r\n * @returns {mat4} out\r\n */\n\nexport function perspectiveFromFieldOfView(out, fov, near, far) {\n var upTan = Math.tan(fov.upDegrees * Math.PI / 180.0);\n var downTan = Math.tan(fov.downDegrees * Math.PI / 180.0);\n var leftTan = Math.tan(fov.leftDegrees * Math.PI / 180.0);\n var rightTan = Math.tan(fov.rightDegrees * Math.PI / 180.0);\n var xScale = 2.0 / (leftTan + rightTan);\n var yScale = 2.0 / (upTan + downTan);\n out[0] = xScale;\n out[1] = 0.0;\n out[2] = 0.0;\n out[3] = 0.0;\n out[4] = 0.0;\n out[5] = yScale;\n out[6] = 0.0;\n out[7] = 0.0;\n out[8] = -((leftTan - rightTan) * xScale * 0.5);\n out[9] = (upTan - downTan) * yScale * 0.5;\n out[10] = far / (near - far);\n out[11] = -1.0;\n out[12] = 0.0;\n out[13] = 0.0;\n out[14] = far * near / (near - far);\n out[15] = 0.0;\n return out;\n}\n/**\r\n * Generates a orthogonal projection matrix with the given bounds\r\n *\r\n * @param {mat4} out mat4 frustum matrix will be written into\r\n * @param {number} left Left bound of the frustum\r\n * @param {number} right Right bound of the frustum\r\n * @param {number} bottom Bottom bound of the frustum\r\n * @param {number} top Top bound of the frustum\r\n * @param {number} near Near bound of the frustum\r\n * @param {number} far Far bound of the frustum\r\n * @returns {mat4} out\r\n */\n\nexport function ortho(out, left, right, bottom, top, near, far) {\n var lr = 1 / (left - right);\n var bt = 1 / (bottom - top);\n var nf = 1 / (near - far);\n out[0] = -2 * lr;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = -2 * bt;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 2 * nf;\n out[11] = 0;\n out[12] = (left + right) * lr;\n out[13] = (top + bottom) * bt;\n out[14] = (far + near) * nf;\n out[15] = 1;\n return out;\n}\n/**\r\n * Generates a look-at matrix with the given eye position, focal point, and up axis.\r\n * If you want a matrix that actually makes an object look at another object, you should use targetTo instead.\r\n *\r\n * @param {mat4} out mat4 frustum matrix will be written into\r\n * @param {ReadonlyVec3} eye Position of the viewer\r\n * @param {ReadonlyVec3} center Point the viewer is looking at\r\n * @param {ReadonlyVec3} up vec3 pointing up\r\n * @returns {mat4} out\r\n */\n\nexport function lookAt(out, eye, center, up) {\n var x0, x1, x2, y0, y1, y2, z0, z1, z2, len;\n var eyex = eye[0];\n var eyey = eye[1];\n var eyez = eye[2];\n var upx = up[0];\n var upy = up[1];\n var upz = up[2];\n var centerx = center[0];\n var centery = center[1];\n var centerz = center[2];\n\n if (Math.abs(eyex - centerx) < glMatrix.EPSILON && Math.abs(eyey - centery) < glMatrix.EPSILON && Math.abs(eyez - centerz) < glMatrix.EPSILON) {\n return identity(out);\n }\n\n z0 = eyex - centerx;\n z1 = eyey - centery;\n z2 = eyez - centerz;\n len = 1 / Math.hypot(z0, z1, z2);\n z0 *= len;\n z1 *= len;\n z2 *= len;\n x0 = upy * z2 - upz * z1;\n x1 = upz * z0 - upx * z2;\n x2 = upx * z1 - upy * z0;\n len = Math.hypot(x0, x1, x2);\n\n if (!len) {\n x0 = 0;\n x1 = 0;\n x2 = 0;\n } else {\n len = 1 / len;\n x0 *= len;\n x1 *= len;\n x2 *= len;\n }\n\n y0 = z1 * x2 - z2 * x1;\n y1 = z2 * x0 - z0 * x2;\n y2 = z0 * x1 - z1 * x0;\n len = Math.hypot(y0, y1, y2);\n\n if (!len) {\n y0 = 0;\n y1 = 0;\n y2 = 0;\n } else {\n len = 1 / len;\n y0 *= len;\n y1 *= len;\n y2 *= len;\n }\n\n out[0] = x0;\n out[1] = y0;\n out[2] = z0;\n out[3] = 0;\n out[4] = x1;\n out[5] = y1;\n out[6] = z1;\n out[7] = 0;\n out[8] = x2;\n out[9] = y2;\n out[10] = z2;\n out[11] = 0;\n out[12] = -(x0 * eyex + x1 * eyey + x2 * eyez);\n out[13] = -(y0 * eyex + y1 * eyey + y2 * eyez);\n out[14] = -(z0 * eyex + z1 * eyey + z2 * eyez);\n out[15] = 1;\n return out;\n}\n/**\r\n * Generates a matrix that makes something look at something else.\r\n *\r\n * @param {mat4} out mat4 frustum matrix will be written into\r\n * @param {ReadonlyVec3} eye Position of the viewer\r\n * @param {ReadonlyVec3} center Point the viewer is looking at\r\n * @param {ReadonlyVec3} up vec3 pointing up\r\n * @returns {mat4} out\r\n */\n\nexport function targetTo(out, eye, target, up) {\n var eyex = eye[0],\n eyey = eye[1],\n eyez = eye[2],\n upx = up[0],\n upy = up[1],\n upz = up[2];\n var z0 = eyex - target[0],\n z1 = eyey - target[1],\n z2 = eyez - target[2];\n var len = z0 * z0 + z1 * z1 + z2 * z2;\n\n if (len > 0) {\n len = 1 / Math.sqrt(len);\n z0 *= len;\n z1 *= len;\n z2 *= len;\n }\n\n var x0 = upy * z2 - upz * z1,\n x1 = upz * z0 - upx * z2,\n x2 = upx * z1 - upy * z0;\n len = x0 * x0 + x1 * x1 + x2 * x2;\n\n if (len > 0) {\n len = 1 / Math.sqrt(len);\n x0 *= len;\n x1 *= len;\n x2 *= len;\n }\n\n out[0] = x0;\n out[1] = x1;\n out[2] = x2;\n out[3] = 0;\n out[4] = z1 * x2 - z2 * x1;\n out[5] = z2 * x0 - z0 * x2;\n out[6] = z0 * x1 - z1 * x0;\n out[7] = 0;\n out[8] = z0;\n out[9] = z1;\n out[10] = z2;\n out[11] = 0;\n out[12] = eyex;\n out[13] = eyey;\n out[14] = eyez;\n out[15] = 1;\n return out;\n}\n/**\r\n * Returns a string representation of a mat4\r\n *\r\n * @param {ReadonlyMat4} a matrix to represent as a string\r\n * @returns {String} string representation of the matrix\r\n */\n\nexport function str(a) {\n return \"mat4(\" + a[0] + \", \" + a[1] + \", \" + a[2] + \", \" + a[3] + \", \" + a[4] + \", \" + a[5] + \", \" + a[6] + \", \" + a[7] + \", \" + a[8] + \", \" + a[9] + \", \" + a[10] + \", \" + a[11] + \", \" + a[12] + \", \" + a[13] + \", \" + a[14] + \", \" + a[15] + \")\";\n}\n/**\r\n * Returns Frobenius norm of a mat4\r\n *\r\n * @param {ReadonlyMat4} a the matrix to calculate Frobenius norm of\r\n * @returns {Number} Frobenius norm\r\n */\n\nexport function frob(a) {\n return Math.hypot(a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14], a[15]);\n}\n/**\r\n * Adds two mat4's\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {ReadonlyMat4} a the first operand\r\n * @param {ReadonlyMat4} b the second operand\r\n * @returns {mat4} out\r\n */\n\nexport function add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n out[3] = a[3] + b[3];\n out[4] = a[4] + b[4];\n out[5] = a[5] + b[5];\n out[6] = a[6] + b[6];\n out[7] = a[7] + b[7];\n out[8] = a[8] + b[8];\n out[9] = a[9] + b[9];\n out[10] = a[10] + b[10];\n out[11] = a[11] + b[11];\n out[12] = a[12] + b[12];\n out[13] = a[13] + b[13];\n out[14] = a[14] + b[14];\n out[15] = a[15] + b[15];\n return out;\n}\n/**\r\n * Subtracts matrix b from matrix a\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {ReadonlyMat4} a the first operand\r\n * @param {ReadonlyMat4} b the second operand\r\n * @returns {mat4} out\r\n */\n\nexport function subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n out[3] = a[3] - b[3];\n out[4] = a[4] - b[4];\n out[5] = a[5] - b[5];\n out[6] = a[6] - b[6];\n out[7] = a[7] - b[7];\n out[8] = a[8] - b[8];\n out[9] = a[9] - b[9];\n out[10] = a[10] - b[10];\n out[11] = a[11] - b[11];\n out[12] = a[12] - b[12];\n out[13] = a[13] - b[13];\n out[14] = a[14] - b[14];\n out[15] = a[15] - b[15];\n return out;\n}\n/**\r\n * Multiply each element of the matrix by a scalar.\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {ReadonlyMat4} a the matrix to scale\r\n * @param {Number} b amount to scale the matrix's elements by\r\n * @returns {mat4} out\r\n */\n\nexport function multiplyScalar(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n out[2] = a[2] * b;\n out[3] = a[3] * b;\n out[4] = a[4] * b;\n out[5] = a[5] * b;\n out[6] = a[6] * b;\n out[7] = a[7] * b;\n out[8] = a[8] * b;\n out[9] = a[9] * b;\n out[10] = a[10] * b;\n out[11] = a[11] * b;\n out[12] = a[12] * b;\n out[13] = a[13] * b;\n out[14] = a[14] * b;\n out[15] = a[15] * b;\n return out;\n}\n/**\r\n * Adds two mat4's after multiplying each element of the second operand by a scalar value.\r\n *\r\n * @param {mat4} out the receiving vector\r\n * @param {ReadonlyMat4} a the first operand\r\n * @param {ReadonlyMat4} b the second operand\r\n * @param {Number} scale the amount to scale b's elements by before adding\r\n * @returns {mat4} out\r\n */\n\nexport function multiplyScalarAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n out[2] = a[2] + b[2] * scale;\n out[3] = a[3] + b[3] * scale;\n out[4] = a[4] + b[4] * scale;\n out[5] = a[5] + b[5] * scale;\n out[6] = a[6] + b[6] * scale;\n out[7] = a[7] + b[7] * scale;\n out[8] = a[8] + b[8] * scale;\n out[9] = a[9] + b[9] * scale;\n out[10] = a[10] + b[10] * scale;\n out[11] = a[11] + b[11] * scale;\n out[12] = a[12] + b[12] * scale;\n out[13] = a[13] + b[13] * scale;\n out[14] = a[14] + b[14] * scale;\n out[15] = a[15] + b[15] * scale;\n return out;\n}\n/**\r\n * Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)\r\n *\r\n * @param {ReadonlyMat4} a The first matrix.\r\n * @param {ReadonlyMat4} b The second matrix.\r\n * @returns {Boolean} True if the matrices are equal, false otherwise.\r\n */\n\nexport function exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3] && a[4] === b[4] && a[5] === b[5] && a[6] === b[6] && a[7] === b[7] && a[8] === b[8] && a[9] === b[9] && a[10] === b[10] && a[11] === b[11] && a[12] === b[12] && a[13] === b[13] && a[14] === b[14] && a[15] === b[15];\n}\n/**\r\n * Returns whether or not the matrices have approximately the same elements in the same position.\r\n *\r\n * @param {ReadonlyMat4} a The first matrix.\r\n * @param {ReadonlyMat4} b The second matrix.\r\n * @returns {Boolean} True if the matrices are equal, false otherwise.\r\n */\n\nexport function equals(a, b) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2],\n a3 = a[3];\n var a4 = a[4],\n a5 = a[5],\n a6 = a[6],\n a7 = a[7];\n var a8 = a[8],\n a9 = a[9],\n a10 = a[10],\n a11 = a[11];\n var a12 = a[12],\n a13 = a[13],\n a14 = a[14],\n a15 = a[15];\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3];\n var b4 = b[4],\n b5 = b[5],\n b6 = b[6],\n b7 = b[7];\n var b8 = b[8],\n b9 = b[9],\n b10 = b[10],\n b11 = b[11];\n var b12 = b[12],\n b13 = b[13],\n b14 = b[14],\n b15 = b[15];\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3)) && Math.abs(a4 - b4) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a4), Math.abs(b4)) && Math.abs(a5 - b5) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a5), Math.abs(b5)) && Math.abs(a6 - b6) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a6), Math.abs(b6)) && Math.abs(a7 - b7) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a7), Math.abs(b7)) && Math.abs(a8 - b8) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a8), Math.abs(b8)) && Math.abs(a9 - b9) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a9), Math.abs(b9)) && Math.abs(a10 - b10) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a10), Math.abs(b10)) && Math.abs(a11 - b11) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a11), Math.abs(b11)) && Math.abs(a12 - b12) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a12), Math.abs(b12)) && Math.abs(a13 - b13) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a13), Math.abs(b13)) && Math.abs(a14 - b14) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a14), Math.abs(b14)) && Math.abs(a15 - b15) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a15), Math.abs(b15));\n}\n/**\r\n * Alias for {@link mat4.multiply}\r\n * @function\r\n */\n\nexport var mul = multiply;\n/**\r\n * Alias for {@link mat4.subtract}\r\n * @function\r\n */\n\nexport var sub = subtract;","import * as glMatrix from \"./common.js\";\n/**\r\n * 2 Dimensional Vector\r\n * @module vec2\r\n */\n\n/**\r\n * Creates a new, empty vec2\r\n *\r\n * @returns {vec2} a new 2D vector\r\n */\n\nexport function create() {\n var out = new glMatrix.ARRAY_TYPE(2);\n\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[0] = 0;\n out[1] = 0;\n }\n\n return out;\n}\n/**\r\n * Creates a new vec2 initialized with values from an existing vector\r\n *\r\n * @param {ReadonlyVec2} a vector to clone\r\n * @returns {vec2} a new 2D vector\r\n */\n\nexport function clone(a) {\n var out = new glMatrix.ARRAY_TYPE(2);\n out[0] = a[0];\n out[1] = a[1];\n return out;\n}\n/**\r\n * Creates a new vec2 initialized with the given values\r\n *\r\n * @param {Number} x X component\r\n * @param {Number} y Y component\r\n * @returns {vec2} a new 2D vector\r\n */\n\nexport function fromValues(x, y) {\n var out = new glMatrix.ARRAY_TYPE(2);\n out[0] = x;\n out[1] = y;\n return out;\n}\n/**\r\n * Copy the values from one vec2 to another\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the source vector\r\n * @returns {vec2} out\r\n */\n\nexport function copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n return out;\n}\n/**\r\n * Set the components of a vec2 to the given values\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {Number} x X component\r\n * @param {Number} y Y component\r\n * @returns {vec2} out\r\n */\n\nexport function set(out, x, y) {\n out[0] = x;\n out[1] = y;\n return out;\n}\n/**\r\n * Adds two vec2's\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {vec2} out\r\n */\n\nexport function add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n return out;\n}\n/**\r\n * Subtracts vector b from vector a\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {vec2} out\r\n */\n\nexport function subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n return out;\n}\n/**\r\n * Multiplies two vec2's\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {vec2} out\r\n */\n\nexport function multiply(out, a, b) {\n out[0] = a[0] * b[0];\n out[1] = a[1] * b[1];\n return out;\n}\n/**\r\n * Divides two vec2's\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {vec2} out\r\n */\n\nexport function divide(out, a, b) {\n out[0] = a[0] / b[0];\n out[1] = a[1] / b[1];\n return out;\n}\n/**\r\n * Math.ceil the components of a vec2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a vector to ceil\r\n * @returns {vec2} out\r\n */\n\nexport function ceil(out, a) {\n out[0] = Math.ceil(a[0]);\n out[1] = Math.ceil(a[1]);\n return out;\n}\n/**\r\n * Math.floor the components of a vec2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a vector to floor\r\n * @returns {vec2} out\r\n */\n\nexport function floor(out, a) {\n out[0] = Math.floor(a[0]);\n out[1] = Math.floor(a[1]);\n return out;\n}\n/**\r\n * Returns the minimum of two vec2's\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {vec2} out\r\n */\n\nexport function min(out, a, b) {\n out[0] = Math.min(a[0], b[0]);\n out[1] = Math.min(a[1], b[1]);\n return out;\n}\n/**\r\n * Returns the maximum of two vec2's\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {vec2} out\r\n */\n\nexport function max(out, a, b) {\n out[0] = Math.max(a[0], b[0]);\n out[1] = Math.max(a[1], b[1]);\n return out;\n}\n/**\r\n * Math.round the components of a vec2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a vector to round\r\n * @returns {vec2} out\r\n */\n\nexport function round(out, a) {\n out[0] = Math.round(a[0]);\n out[1] = Math.round(a[1]);\n return out;\n}\n/**\r\n * Scales a vec2 by a scalar number\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the vector to scale\r\n * @param {Number} b amount to scale the vector by\r\n * @returns {vec2} out\r\n */\n\nexport function scale(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n return out;\n}\n/**\r\n * Adds two vec2's after scaling the second operand by a scalar value\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @param {Number} scale the amount to scale b by before adding\r\n * @returns {vec2} out\r\n */\n\nexport function scaleAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n return out;\n}\n/**\r\n * Calculates the euclidian distance between two vec2's\r\n *\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {Number} distance between a and b\r\n */\n\nexport function distance(a, b) {\n var x = b[0] - a[0],\n y = b[1] - a[1];\n return Math.hypot(x, y);\n}\n/**\r\n * Calculates the squared euclidian distance between two vec2's\r\n *\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {Number} squared distance between a and b\r\n */\n\nexport function squaredDistance(a, b) {\n var x = b[0] - a[0],\n y = b[1] - a[1];\n return x * x + y * y;\n}\n/**\r\n * Calculates the length of a vec2\r\n *\r\n * @param {ReadonlyVec2} a vector to calculate length of\r\n * @returns {Number} length of a\r\n */\n\nexport function length(a) {\n var x = a[0],\n y = a[1];\n return Math.hypot(x, y);\n}\n/**\r\n * Calculates the squared length of a vec2\r\n *\r\n * @param {ReadonlyVec2} a vector to calculate squared length of\r\n * @returns {Number} squared length of a\r\n */\n\nexport function squaredLength(a) {\n var x = a[0],\n y = a[1];\n return x * x + y * y;\n}\n/**\r\n * Negates the components of a vec2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a vector to negate\r\n * @returns {vec2} out\r\n */\n\nexport function negate(out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n return out;\n}\n/**\r\n * Returns the inverse of the components of a vec2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a vector to invert\r\n * @returns {vec2} out\r\n */\n\nexport function inverse(out, a) {\n out[0] = 1.0 / a[0];\n out[1] = 1.0 / a[1];\n return out;\n}\n/**\r\n * Normalize a vec2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a vector to normalize\r\n * @returns {vec2} out\r\n */\n\nexport function normalize(out, a) {\n var x = a[0],\n y = a[1];\n var len = x * x + y * y;\n\n if (len > 0) {\n //TODO: evaluate use of glm_invsqrt here?\n len = 1 / Math.sqrt(len);\n }\n\n out[0] = a[0] * len;\n out[1] = a[1] * len;\n return out;\n}\n/**\r\n * Calculates the dot product of two vec2's\r\n *\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {Number} dot product of a and b\r\n */\n\nexport function dot(a, b) {\n return a[0] * b[0] + a[1] * b[1];\n}\n/**\r\n * Computes the cross product of two vec2's\r\n * Note that the cross product must by definition produce a 3D vector\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {vec3} out\r\n */\n\nexport function cross(out, a, b) {\n var z = a[0] * b[1] - a[1] * b[0];\n out[0] = out[1] = 0;\n out[2] = z;\n return out;\n}\n/**\r\n * Performs a linear interpolation between two vec2's\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\r\n * @returns {vec2} out\r\n */\n\nexport function lerp(out, a, b, t) {\n var ax = a[0],\n ay = a[1];\n out[0] = ax + t * (b[0] - ax);\n out[1] = ay + t * (b[1] - ay);\n return out;\n}\n/**\r\n * Generates a random vector with the given scale\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned\r\n * @returns {vec2} out\r\n */\n\nexport function random(out, scale) {\n scale = scale || 1.0;\n var r = glMatrix.RANDOM() * 2.0 * Math.PI;\n out[0] = Math.cos(r) * scale;\n out[1] = Math.sin(r) * scale;\n return out;\n}\n/**\r\n * Transforms the vec2 with a mat2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the vector to transform\r\n * @param {ReadonlyMat2} m matrix to transform with\r\n * @returns {vec2} out\r\n */\n\nexport function transformMat2(out, a, m) {\n var x = a[0],\n y = a[1];\n out[0] = m[0] * x + m[2] * y;\n out[1] = m[1] * x + m[3] * y;\n return out;\n}\n/**\r\n * Transforms the vec2 with a mat2d\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the vector to transform\r\n * @param {ReadonlyMat2d} m matrix to transform with\r\n * @returns {vec2} out\r\n */\n\nexport function transformMat2d(out, a, m) {\n var x = a[0],\n y = a[1];\n out[0] = m[0] * x + m[2] * y + m[4];\n out[1] = m[1] * x + m[3] * y + m[5];\n return out;\n}\n/**\r\n * Transforms the vec2 with a mat3\r\n * 3rd vector component is implicitly '1'\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the vector to transform\r\n * @param {ReadonlyMat3} m matrix to transform with\r\n * @returns {vec2} out\r\n */\n\nexport function transformMat3(out, a, m) {\n var x = a[0],\n y = a[1];\n out[0] = m[0] * x + m[3] * y + m[6];\n out[1] = m[1] * x + m[4] * y + m[7];\n return out;\n}\n/**\r\n * Transforms the vec2 with a mat4\r\n * 3rd vector component is implicitly '0'\r\n * 4th vector component is implicitly '1'\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the vector to transform\r\n * @param {ReadonlyMat4} m matrix to transform with\r\n * @returns {vec2} out\r\n */\n\nexport function transformMat4(out, a, m) {\n var x = a[0];\n var y = a[1];\n out[0] = m[0] * x + m[4] * y + m[12];\n out[1] = m[1] * x + m[5] * y + m[13];\n return out;\n}\n/**\r\n * Rotate a 2D vector\r\n * @param {vec2} out The receiving vec2\r\n * @param {ReadonlyVec2} a The vec2 point to rotate\r\n * @param {ReadonlyVec2} b The origin of the rotation\r\n * @param {Number} rad The angle of rotation in radians\r\n * @returns {vec2} out\r\n */\n\nexport function rotate(out, a, b, rad) {\n //Translate point to the origin\n var p0 = a[0] - b[0],\n p1 = a[1] - b[1],\n sinC = Math.sin(rad),\n cosC = Math.cos(rad); //perform rotation and translate to correct position\n\n out[0] = p0 * cosC - p1 * sinC + b[0];\n out[1] = p0 * sinC + p1 * cosC + b[1];\n return out;\n}\n/**\r\n * Get the angle between two 2D vectors\r\n * @param {ReadonlyVec2} a The first operand\r\n * @param {ReadonlyVec2} b The second operand\r\n * @returns {Number} The angle in radians\r\n */\n\nexport function angle(a, b) {\n var x1 = a[0],\n y1 = a[1],\n x2 = b[0],\n y2 = b[1],\n // mag is the product of the magnitudes of a and b\n mag = Math.sqrt(x1 * x1 + y1 * y1) * Math.sqrt(x2 * x2 + y2 * y2),\n // mag &&.. short circuits if mag == 0\n cosine = mag && (x1 * x2 + y1 * y2) / mag; // Math.min(Math.max(cosine, -1), 1) clamps the cosine between -1 and 1\n\n return Math.acos(Math.min(Math.max(cosine, -1), 1));\n}\n/**\r\n * Set the components of a vec2 to zero\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @returns {vec2} out\r\n */\n\nexport function zero(out) {\n out[0] = 0.0;\n out[1] = 0.0;\n return out;\n}\n/**\r\n * Returns a string representation of a vector\r\n *\r\n * @param {ReadonlyVec2} a vector to represent as a string\r\n * @returns {String} string representation of the vector\r\n */\n\nexport function str(a) {\n return \"vec2(\" + a[0] + \", \" + a[1] + \")\";\n}\n/**\r\n * Returns whether or not the vectors exactly have the same elements in the same position (when compared with ===)\r\n *\r\n * @param {ReadonlyVec2} a The first vector.\r\n * @param {ReadonlyVec2} b The second vector.\r\n * @returns {Boolean} True if the vectors are equal, false otherwise.\r\n */\n\nexport function exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1];\n}\n/**\r\n * Returns whether or not the vectors have approximately the same elements in the same position.\r\n *\r\n * @param {ReadonlyVec2} a The first vector.\r\n * @param {ReadonlyVec2} b The second vector.\r\n * @returns {Boolean} True if the vectors are equal, false otherwise.\r\n */\n\nexport function equals(a, b) {\n var a0 = a[0],\n a1 = a[1];\n var b0 = b[0],\n b1 = b[1];\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1));\n}\n/**\r\n * Alias for {@link vec2.length}\r\n * @function\r\n */\n\nexport var len = length;\n/**\r\n * Alias for {@link vec2.subtract}\r\n * @function\r\n */\n\nexport var sub = subtract;\n/**\r\n * Alias for {@link vec2.multiply}\r\n * @function\r\n */\n\nexport var mul = multiply;\n/**\r\n * Alias for {@link vec2.divide}\r\n * @function\r\n */\n\nexport var div = divide;\n/**\r\n * Alias for {@link vec2.distance}\r\n * @function\r\n */\n\nexport var dist = distance;\n/**\r\n * Alias for {@link vec2.squaredDistance}\r\n * @function\r\n */\n\nexport var sqrDist = squaredDistance;\n/**\r\n * Alias for {@link vec2.squaredLength}\r\n * @function\r\n */\n\nexport var sqrLen = squaredLength;\n/**\r\n * Perform some operation over an array of vec2s.\r\n *\r\n * @param {Array} a the array of vectors to iterate over\r\n * @param {Number} stride Number of elements between the start of each vec2. If 0 assumes tightly packed\r\n * @param {Number} offset Number of elements to skip at the beginning of the array\r\n * @param {Number} count Number of vec2s to iterate over. If 0 iterates over entire array\r\n * @param {Function} fn Function to call for each vector in the array\r\n * @param {Object} [arg] additional argument to pass to fn\r\n * @returns {Array} a\r\n * @function\r\n */\n\nexport var forEach = function () {\n var vec = create();\n return function (a, stride, offset, count, fn, arg) {\n var i, l;\n\n if (!stride) {\n stride = 2;\n }\n\n if (!offset) {\n offset = 0;\n }\n\n if (count) {\n l = Math.min(count * stride + offset, a.length);\n } else {\n l = a.length;\n }\n\n for (i = offset; i < l; i += stride) {\n vec[0] = a[i];\n vec[1] = a[i + 1];\n fn(vec, vec, arg);\n a[i] = vec[0];\n a[i + 1] = vec[1];\n }\n\n return a;\n };\n}();","import toInteger from \"../toInteger/index.js\";\nimport toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function startOfUTCWeek(dirtyDate, dirtyOptions) {\n requiredArgs(1, arguments);\n var options = dirtyOptions || {};\n var locale = options.locale;\n var localeWeekStartsOn = locale && locale.options && locale.options.weekStartsOn;\n var defaultWeekStartsOn = localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn);\n var weekStartsOn = options.weekStartsOn == null ? defaultWeekStartsOn : toInteger(options.weekStartsOn); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n }\n\n var date = toDate(dirtyDate);\n var day = date.getUTCDay();\n var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n date.setUTCDate(date.getUTCDate() - diff);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nvar MILLISECONDS_IN_HOUR = 3600000;\nvar MILLISECONDS_IN_MINUTE = 60000;\nvar DEFAULT_ADDITIONAL_DIGITS = 2;\nvar patterns = {\n dateTimeDelimiter: /[T ]/,\n timeZoneDelimiter: /[Z ]/i,\n timezone: /([Z+-].*)$/\n};\nvar dateRegex = /^-?(?:(\\d{3})|(\\d{2})(?:-?(\\d{2}))?|W(\\d{2})(?:-?(\\d{1}))?|)$/;\nvar timeRegex = /^(\\d{2}(?:[.,]\\d*)?)(?::?(\\d{2}(?:[.,]\\d*)?))?(?::?(\\d{2}(?:[.,]\\d*)?))?$/;\nvar timezoneRegex = /^([+-])(\\d{2})(?::?(\\d{2}))?$/;\n/**\n * @name parseISO\n * @category Common Helpers\n * @summary Parse ISO string\n *\n * @description\n * Parse the given string in ISO 8601 format and return an instance of Date.\n *\n * Function accepts complete ISO 8601 formats as well as partial implementations.\n * ISO 8601: http://en.wikipedia.org/wiki/ISO_8601\n *\n * If the argument isn't a string, the function cannot parse the string or\n * the values are invalid, it returns Invalid Date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The previous `parse` implementation was renamed to `parseISO`.\n *\n * ```javascript\n * // Before v2.0.0\n * parse('2016-01-01')\n *\n * // v2.0.0 onward\n * parseISO('2016-01-01')\n * ```\n *\n * - `parseISO` now validates separate date and time values in ISO-8601 strings\n * and returns `Invalid Date` if the date is invalid.\n *\n * ```javascript\n * parseISO('2018-13-32')\n * //=> Invalid Date\n * ```\n *\n * - `parseISO` now doesn't fall back to `new Date` constructor\n * if it fails to parse a string argument. Instead, it returns `Invalid Date`.\n *\n * @param {String} argument - the value to convert\n * @param {Object} [options] - an object with options.\n * @param {0|1|2} [options.additionalDigits=2] - the additional number of digits in the extended year format\n * @returns {Date} the parsed date in the local time zone\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.additionalDigits` must be 0, 1 or 2\n *\n * @example\n * // Convert string '2014-02-11T11:30:30' to date:\n * var result = parseISO('2014-02-11T11:30:30')\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert string '+02014101' to date,\n * // if the additional number of digits in the extended year format is 1:\n * var result = parseISO('+02014101', { additionalDigits: 1 })\n * //=> Fri Apr 11 2014 00:00:00\n */\n\nexport default function parseISO(argument, dirtyOptions) {\n requiredArgs(1, arguments);\n var options = dirtyOptions || {};\n var additionalDigits = options.additionalDigits == null ? DEFAULT_ADDITIONAL_DIGITS : toInteger(options.additionalDigits);\n\n if (additionalDigits !== 2 && additionalDigits !== 1 && additionalDigits !== 0) {\n throw new RangeError('additionalDigits must be 0, 1 or 2');\n }\n\n if (!(typeof argument === 'string' || Object.prototype.toString.call(argument) === '[object String]')) {\n return new Date(NaN);\n }\n\n var dateStrings = splitDateString(argument);\n var date;\n\n if (dateStrings.date) {\n var parseYearResult = parseYear(dateStrings.date, additionalDigits);\n date = parseDate(parseYearResult.restDateString, parseYearResult.year);\n }\n\n if (isNaN(date) || !date) {\n return new Date(NaN);\n }\n\n var timestamp = date.getTime();\n var time = 0;\n var offset;\n\n if (dateStrings.time) {\n time = parseTime(dateStrings.time);\n\n if (isNaN(time) || time === null) {\n return new Date(NaN);\n }\n }\n\n if (dateStrings.timezone) {\n offset = parseTimezone(dateStrings.timezone);\n\n if (isNaN(offset)) {\n return new Date(NaN);\n }\n } else {\n var dirtyDate = new Date(timestamp + time); // js parsed string assuming it's in UTC timezone\n // but we need it to be parsed in our timezone\n // so we use utc values to build date in our timezone.\n // Year values from 0 to 99 map to the years 1900 to 1999\n // so set year explicitly with setFullYear.\n\n var result = new Date(0);\n result.setFullYear(dirtyDate.getUTCFullYear(), dirtyDate.getUTCMonth(), dirtyDate.getUTCDate());\n result.setHours(dirtyDate.getUTCHours(), dirtyDate.getUTCMinutes(), dirtyDate.getUTCSeconds(), dirtyDate.getUTCMilliseconds());\n return result;\n }\n\n return new Date(timestamp + time + offset);\n}\n\nfunction splitDateString(dateString) {\n var dateStrings = {};\n var array = dateString.split(patterns.dateTimeDelimiter);\n var timeString; // The regex match should only return at maximum two array elements.\n // [date], [time], or [date, time].\n\n if (array.length > 2) {\n return dateStrings;\n }\n\n if (/:/.test(array[0])) {\n dateStrings.date = null;\n timeString = array[0];\n } else {\n dateStrings.date = array[0];\n timeString = array[1];\n\n if (patterns.timeZoneDelimiter.test(dateStrings.date)) {\n dateStrings.date = dateString.split(patterns.timeZoneDelimiter)[0];\n timeString = dateString.substr(dateStrings.date.length, dateString.length);\n }\n }\n\n if (timeString) {\n var token = patterns.timezone.exec(timeString);\n\n if (token) {\n dateStrings.time = timeString.replace(token[1], '');\n dateStrings.timezone = token[1];\n } else {\n dateStrings.time = timeString;\n }\n }\n\n return dateStrings;\n}\n\nfunction parseYear(dateString, additionalDigits) {\n var regex = new RegExp('^(?:(\\\\d{4}|[+-]\\\\d{' + (4 + additionalDigits) + '})|(\\\\d{2}|[+-]\\\\d{' + (2 + additionalDigits) + '})$)');\n var captures = dateString.match(regex); // Invalid ISO-formatted year\n\n if (!captures) return {\n year: null\n };\n var year = captures[1] && parseInt(captures[1]);\n var century = captures[2] && parseInt(captures[2]);\n return {\n year: century == null ? year : century * 100,\n restDateString: dateString.slice((captures[1] || captures[2]).length)\n };\n}\n\nfunction parseDate(dateString, year) {\n // Invalid ISO-formatted year\n if (year === null) return null;\n var captures = dateString.match(dateRegex); // Invalid ISO-formatted string\n\n if (!captures) return null;\n var isWeekDate = !!captures[4];\n var dayOfYear = parseDateUnit(captures[1]);\n var month = parseDateUnit(captures[2]) - 1;\n var day = parseDateUnit(captures[3]);\n var week = parseDateUnit(captures[4]);\n var dayOfWeek = parseDateUnit(captures[5]) - 1;\n\n if (isWeekDate) {\n if (!validateWeekDate(year, week, dayOfWeek)) {\n return new Date(NaN);\n }\n\n return dayOfISOWeekYear(year, week, dayOfWeek);\n } else {\n var date = new Date(0);\n\n if (!validateDate(year, month, day) || !validateDayOfYearDate(year, dayOfYear)) {\n return new Date(NaN);\n }\n\n date.setUTCFullYear(year, month, Math.max(dayOfYear, day));\n return date;\n }\n}\n\nfunction parseDateUnit(value) {\n return value ? parseInt(value) : 1;\n}\n\nfunction parseTime(timeString) {\n var captures = timeString.match(timeRegex);\n if (!captures) return null; // Invalid ISO-formatted time\n\n var hours = parseTimeUnit(captures[1]);\n var minutes = parseTimeUnit(captures[2]);\n var seconds = parseTimeUnit(captures[3]);\n\n if (!validateTime(hours, minutes, seconds)) {\n return NaN;\n }\n\n return hours * MILLISECONDS_IN_HOUR + minutes * MILLISECONDS_IN_MINUTE + seconds * 1000;\n}\n\nfunction parseTimeUnit(value) {\n return value && parseFloat(value.replace(',', '.')) || 0;\n}\n\nfunction parseTimezone(timezoneString) {\n if (timezoneString === 'Z') return 0;\n var captures = timezoneString.match(timezoneRegex);\n if (!captures) return 0;\n var sign = captures[1] === '+' ? -1 : 1;\n var hours = parseInt(captures[2]);\n var minutes = captures[3] && parseInt(captures[3]) || 0;\n\n if (!validateTimezone(hours, minutes)) {\n return NaN;\n }\n\n return sign * (hours * MILLISECONDS_IN_HOUR + minutes * MILLISECONDS_IN_MINUTE);\n}\n\nfunction dayOfISOWeekYear(isoWeekYear, week, day) {\n var date = new Date(0);\n date.setUTCFullYear(isoWeekYear, 0, 4);\n var fourthOfJanuaryDay = date.getUTCDay() || 7;\n var diff = (week - 1) * 7 + day + 1 - fourthOfJanuaryDay;\n date.setUTCDate(date.getUTCDate() + diff);\n return date;\n} // Validation functions\n// February is null to handle the leap year (using ||)\n\n\nvar daysInMonths = [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n\nfunction isLeapYearIndex(year) {\n return year % 400 === 0 || year % 4 === 0 && year % 100;\n}\n\nfunction validateDate(year, month, date) {\n return month >= 0 && month <= 11 && date >= 1 && date <= (daysInMonths[month] || (isLeapYearIndex(year) ? 29 : 28));\n}\n\nfunction validateDayOfYearDate(year, dayOfYear) {\n return dayOfYear >= 1 && dayOfYear <= (isLeapYearIndex(year) ? 366 : 365);\n}\n\nfunction validateWeekDate(_year, week, day) {\n return week >= 1 && week <= 53 && day >= 0 && day <= 6;\n}\n\nfunction validateTime(hours, minutes, seconds) {\n if (hours === 24) {\n return minutes === 0 && seconds === 0;\n }\n\n return seconds >= 0 && seconds < 60 && minutes >= 0 && minutes < 60 && hours >= 0 && hours < 25;\n}\n\nfunction validateTimezone(_hours, minutes) {\n return minutes >= 0 && minutes <= 59;\n}","export default function requiredArgs(required, args) {\n if (args.length < required) {\n throw new TypeError(required + ' argument' + (required > 1 ? 's' : '') + ' required, but only ' + args.length + ' present');\n }\n}","import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function startOfUTCISOWeek(dirtyDate) {\n requiredArgs(1, arguments);\n var weekStartsOn = 1;\n var date = toDate(dirtyDate);\n var day = date.getUTCDay();\n var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n date.setUTCDate(date.getUTCDate() - diff);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n}","var protectedDayOfYearTokens = ['D', 'DD'];\nvar protectedWeekYearTokens = ['YY', 'YYYY'];\nexport function isProtectedDayOfYearToken(token) {\n return protectedDayOfYearTokens.indexOf(token) !== -1;\n}\nexport function isProtectedWeekYearToken(token) {\n return protectedWeekYearTokens.indexOf(token) !== -1;\n}\nexport function throwProtectedError(token, format, input) {\n if (token === 'YYYY') {\n throw new RangeError(\"Use `yyyy` instead of `YYYY` (in `\".concat(format, \"`) for formatting years to the input `\").concat(input, \"`; see: https://git.io/fxCyr\"));\n } else if (token === 'YY') {\n throw new RangeError(\"Use `yy` instead of `YY` (in `\".concat(format, \"`) for formatting years to the input `\").concat(input, \"`; see: https://git.io/fxCyr\"));\n } else if (token === 'D') {\n throw new RangeError(\"Use `d` instead of `D` (in `\".concat(format, \"`) for formatting days of the month to the input `\").concat(input, \"`; see: https://git.io/fxCyr\"));\n } else if (token === 'DD') {\n throw new RangeError(\"Use `dd` instead of `DD` (in `\".concat(format, \"`) for formatting days of the month to the input `\").concat(input, \"`; see: https://git.io/fxCyr\"));\n }\n}","import _extends from '@babel/runtime/helpers/esm/extends';\nimport resolvePathname from 'resolve-pathname';\nimport valueEqual from 'value-equal';\nimport warning from 'tiny-warning';\nimport invariant from 'tiny-invariant';\n\nfunction addLeadingSlash(path) {\n return path.charAt(0) === '/' ? path : '/' + path;\n}\nfunction stripLeadingSlash(path) {\n return path.charAt(0) === '/' ? path.substr(1) : path;\n}\nfunction hasBasename(path, prefix) {\n return path.toLowerCase().indexOf(prefix.toLowerCase()) === 0 && '/?#'.indexOf(path.charAt(prefix.length)) !== -1;\n}\nfunction stripBasename(path, prefix) {\n return hasBasename(path, prefix) ? path.substr(prefix.length) : path;\n}\nfunction stripTrailingSlash(path) {\n return path.charAt(path.length - 1) === '/' ? path.slice(0, -1) : path;\n}\nfunction parsePath(path) {\n var pathname = path || '/';\n var search = '';\n var hash = '';\n var hashIndex = pathname.indexOf('#');\n\n if (hashIndex !== -1) {\n hash = pathname.substr(hashIndex);\n pathname = pathname.substr(0, hashIndex);\n }\n\n var searchIndex = pathname.indexOf('?');\n\n if (searchIndex !== -1) {\n search = pathname.substr(searchIndex);\n pathname = pathname.substr(0, searchIndex);\n }\n\n return {\n pathname: pathname,\n search: search === '?' ? '' : search,\n hash: hash === '#' ? '' : hash\n };\n}\nfunction createPath(location) {\n var pathname = location.pathname,\n search = location.search,\n hash = location.hash;\n var path = pathname || '/';\n if (search && search !== '?') path += search.charAt(0) === '?' ? search : \"?\" + search;\n if (hash && hash !== '#') path += hash.charAt(0) === '#' ? hash : \"#\" + hash;\n return path;\n}\n\nfunction createLocation(path, state, key, currentLocation) {\n var location;\n\n if (typeof path === 'string') {\n // Two-arg form: push(path, state)\n location = parsePath(path);\n location.state = state;\n } else {\n // One-arg form: push(location)\n location = _extends({}, path);\n if (location.pathname === undefined) location.pathname = '';\n\n if (location.search) {\n if (location.search.charAt(0) !== '?') location.search = '?' + location.search;\n } else {\n location.search = '';\n }\n\n if (location.hash) {\n if (location.hash.charAt(0) !== '#') location.hash = '#' + location.hash;\n } else {\n location.hash = '';\n }\n\n if (state !== undefined && location.state === undefined) location.state = state;\n }\n\n try {\n location.pathname = decodeURI(location.pathname);\n } catch (e) {\n if (e instanceof URIError) {\n throw new URIError('Pathname \"' + location.pathname + '\" could not be decoded. ' + 'This is likely caused by an invalid percent-encoding.');\n } else {\n throw e;\n }\n }\n\n if (key) location.key = key;\n\n if (currentLocation) {\n // Resolve incomplete/relative pathname relative to current location.\n if (!location.pathname) {\n location.pathname = currentLocation.pathname;\n } else if (location.pathname.charAt(0) !== '/') {\n location.pathname = resolvePathname(location.pathname, currentLocation.pathname);\n }\n } else {\n // When there is no prior location and pathname is empty, set it to /\n if (!location.pathname) {\n location.pathname = '/';\n }\n }\n\n return location;\n}\nfunction locationsAreEqual(a, b) {\n return a.pathname === b.pathname && a.search === b.search && a.hash === b.hash && a.key === b.key && valueEqual(a.state, b.state);\n}\n\nfunction createTransitionManager() {\n var prompt = null;\n\n function setPrompt(nextPrompt) {\n process.env.NODE_ENV !== \"production\" ? warning(prompt == null, 'A history supports only one prompt at a time') : void 0;\n prompt = nextPrompt;\n return function () {\n if (prompt === nextPrompt) prompt = null;\n };\n }\n\n function confirmTransitionTo(location, action, getUserConfirmation, callback) {\n // TODO: If another transition starts while we're still confirming\n // the previous one, we may end up in a weird state. Figure out the\n // best way to handle this.\n if (prompt != null) {\n var result = typeof prompt === 'function' ? prompt(location, action) : prompt;\n\n if (typeof result === 'string') {\n if (typeof getUserConfirmation === 'function') {\n getUserConfirmation(result, callback);\n } else {\n process.env.NODE_ENV !== \"production\" ? warning(false, 'A history needs a getUserConfirmation function in order to use a prompt message') : void 0;\n callback(true);\n }\n } else {\n // Return false from a transition hook to cancel the transition.\n callback(result !== false);\n }\n } else {\n callback(true);\n }\n }\n\n var listeners = [];\n\n function appendListener(fn) {\n var isActive = true;\n\n function listener() {\n if (isActive) fn.apply(void 0, arguments);\n }\n\n listeners.push(listener);\n return function () {\n isActive = false;\n listeners = listeners.filter(function (item) {\n return item !== listener;\n });\n };\n }\n\n function notifyListeners() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n listeners.forEach(function (listener) {\n return listener.apply(void 0, args);\n });\n }\n\n return {\n setPrompt: setPrompt,\n confirmTransitionTo: confirmTransitionTo,\n appendListener: appendListener,\n notifyListeners: notifyListeners\n };\n}\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\nfunction getConfirmation(message, callback) {\n callback(window.confirm(message)); // eslint-disable-line no-alert\n}\n/**\n * Returns true if the HTML5 history API is supported. Taken from Modernizr.\n *\n * https://github.com/Modernizr/Modernizr/blob/master/LICENSE\n * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/history.js\n * changed to avoid false negatives for Windows Phones: https://github.com/reactjs/react-router/issues/586\n */\n\nfunction supportsHistory() {\n var ua = window.navigator.userAgent;\n if ((ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) && ua.indexOf('Mobile Safari') !== -1 && ua.indexOf('Chrome') === -1 && ua.indexOf('Windows Phone') === -1) return false;\n return window.history && 'pushState' in window.history;\n}\n/**\n * Returns true if browser fires popstate on hash change.\n * IE10 and IE11 do not.\n */\n\nfunction supportsPopStateOnHashChange() {\n return window.navigator.userAgent.indexOf('Trident') === -1;\n}\n/**\n * Returns false if using go(n) with hash history causes a full page reload.\n */\n\nfunction supportsGoWithoutReloadUsingHash() {\n return window.navigator.userAgent.indexOf('Firefox') === -1;\n}\n/**\n * Returns true if a given popstate event is an extraneous WebKit event.\n * Accounts for the fact that Chrome on iOS fires real popstate events\n * containing undefined state when pressing the back button.\n */\n\nfunction isExtraneousPopstateEvent(event) {\n return event.state === undefined && navigator.userAgent.indexOf('CriOS') === -1;\n}\n\nvar PopStateEvent = 'popstate';\nvar HashChangeEvent = 'hashchange';\n\nfunction getHistoryState() {\n try {\n return window.history.state || {};\n } catch (e) {\n // IE 11 sometimes throws when accessing window.history.state\n // See https://github.com/ReactTraining/history/pull/289\n return {};\n }\n}\n/**\n * Creates a history object that uses the HTML5 history API including\n * pushState, replaceState, and the popstate event.\n */\n\n\nfunction createBrowserHistory(props) {\n if (props === void 0) {\n props = {};\n }\n\n !canUseDOM ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Browser history needs a DOM') : invariant(false) : void 0;\n var globalHistory = window.history;\n var canUseHistory = supportsHistory();\n var needsHashChangeListener = !supportsPopStateOnHashChange();\n var _props = props,\n _props$forceRefresh = _props.forceRefresh,\n forceRefresh = _props$forceRefresh === void 0 ? false : _props$forceRefresh,\n _props$getUserConfirm = _props.getUserConfirmation,\n getUserConfirmation = _props$getUserConfirm === void 0 ? getConfirmation : _props$getUserConfirm,\n _props$keyLength = _props.keyLength,\n keyLength = _props$keyLength === void 0 ? 6 : _props$keyLength;\n var basename = props.basename ? stripTrailingSlash(addLeadingSlash(props.basename)) : '';\n\n function getDOMLocation(historyState) {\n var _ref = historyState || {},\n key = _ref.key,\n state = _ref.state;\n\n var _window$location = window.location,\n pathname = _window$location.pathname,\n search = _window$location.search,\n hash = _window$location.hash;\n var path = pathname + search + hash;\n process.env.NODE_ENV !== \"production\" ? warning(!basename || hasBasename(path, basename), 'You are attempting to use a basename on a page whose URL path does not begin ' + 'with the basename. Expected path \"' + path + '\" to begin with \"' + basename + '\".') : void 0;\n if (basename) path = stripBasename(path, basename);\n return createLocation(path, state, key);\n }\n\n function createKey() {\n return Math.random().toString(36).substr(2, keyLength);\n }\n\n var transitionManager = createTransitionManager();\n\n function setState(nextState) {\n _extends(history, nextState);\n\n history.length = globalHistory.length;\n transitionManager.notifyListeners(history.location, history.action);\n }\n\n function handlePopState(event) {\n // Ignore extraneous popstate events in WebKit.\n if (isExtraneousPopstateEvent(event)) return;\n handlePop(getDOMLocation(event.state));\n }\n\n function handleHashChange() {\n handlePop(getDOMLocation(getHistoryState()));\n }\n\n var forceNextPop = false;\n\n function handlePop(location) {\n if (forceNextPop) {\n forceNextPop = false;\n setState();\n } else {\n var action = 'POP';\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (ok) {\n setState({\n action: action,\n location: location\n });\n } else {\n revertPop(location);\n }\n });\n }\n }\n\n function revertPop(fromLocation) {\n var toLocation = history.location; // TODO: We could probably make this more reliable by\n // keeping a list of keys we've seen in sessionStorage.\n // Instead, we just default to 0 for keys we don't know.\n\n var toIndex = allKeys.indexOf(toLocation.key);\n if (toIndex === -1) toIndex = 0;\n var fromIndex = allKeys.indexOf(fromLocation.key);\n if (fromIndex === -1) fromIndex = 0;\n var delta = toIndex - fromIndex;\n\n if (delta) {\n forceNextPop = true;\n go(delta);\n }\n }\n\n var initialLocation = getDOMLocation(getHistoryState());\n var allKeys = [initialLocation.key]; // Public interface\n\n function createHref(location) {\n return basename + createPath(location);\n }\n\n function push(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to push when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n var action = 'PUSH';\n var location = createLocation(path, state, createKey(), history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var href = createHref(location);\n var key = location.key,\n state = location.state;\n\n if (canUseHistory) {\n globalHistory.pushState({\n key: key,\n state: state\n }, null, href);\n\n if (forceRefresh) {\n window.location.href = href;\n } else {\n var prevIndex = allKeys.indexOf(history.location.key);\n var nextKeys = allKeys.slice(0, prevIndex + 1);\n nextKeys.push(location.key);\n allKeys = nextKeys;\n setState({\n action: action,\n location: location\n });\n }\n } else {\n process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Browser history cannot push state in browsers that do not support HTML5 history') : void 0;\n window.location.href = href;\n }\n });\n }\n\n function replace(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to replace when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n var action = 'REPLACE';\n var location = createLocation(path, state, createKey(), history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var href = createHref(location);\n var key = location.key,\n state = location.state;\n\n if (canUseHistory) {\n globalHistory.replaceState({\n key: key,\n state: state\n }, null, href);\n\n if (forceRefresh) {\n window.location.replace(href);\n } else {\n var prevIndex = allKeys.indexOf(history.location.key);\n if (prevIndex !== -1) allKeys[prevIndex] = location.key;\n setState({\n action: action,\n location: location\n });\n }\n } else {\n process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Browser history cannot replace state in browsers that do not support HTML5 history') : void 0;\n window.location.replace(href);\n }\n });\n }\n\n function go(n) {\n globalHistory.go(n);\n }\n\n function goBack() {\n go(-1);\n }\n\n function goForward() {\n go(1);\n }\n\n var listenerCount = 0;\n\n function checkDOMListeners(delta) {\n listenerCount += delta;\n\n if (listenerCount === 1 && delta === 1) {\n window.addEventListener(PopStateEvent, handlePopState);\n if (needsHashChangeListener) window.addEventListener(HashChangeEvent, handleHashChange);\n } else if (listenerCount === 0) {\n window.removeEventListener(PopStateEvent, handlePopState);\n if (needsHashChangeListener) window.removeEventListener(HashChangeEvent, handleHashChange);\n }\n }\n\n var isBlocked = false;\n\n function block(prompt) {\n if (prompt === void 0) {\n prompt = false;\n }\n\n var unblock = transitionManager.setPrompt(prompt);\n\n if (!isBlocked) {\n checkDOMListeners(1);\n isBlocked = true;\n }\n\n return function () {\n if (isBlocked) {\n isBlocked = false;\n checkDOMListeners(-1);\n }\n\n return unblock();\n };\n }\n\n function listen(listener) {\n var unlisten = transitionManager.appendListener(listener);\n checkDOMListeners(1);\n return function () {\n checkDOMListeners(-1);\n unlisten();\n };\n }\n\n var history = {\n length: globalHistory.length,\n action: 'POP',\n location: initialLocation,\n createHref: createHref,\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward,\n block: block,\n listen: listen\n };\n return history;\n}\n\nvar HashChangeEvent$1 = 'hashchange';\nvar HashPathCoders = {\n hashbang: {\n encodePath: function encodePath(path) {\n return path.charAt(0) === '!' ? path : '!/' + stripLeadingSlash(path);\n },\n decodePath: function decodePath(path) {\n return path.charAt(0) === '!' ? path.substr(1) : path;\n }\n },\n noslash: {\n encodePath: stripLeadingSlash,\n decodePath: addLeadingSlash\n },\n slash: {\n encodePath: addLeadingSlash,\n decodePath: addLeadingSlash\n }\n};\n\nfunction stripHash(url) {\n var hashIndex = url.indexOf('#');\n return hashIndex === -1 ? url : url.slice(0, hashIndex);\n}\n\nfunction getHashPath() {\n // We can't use window.location.hash here because it's not\n // consistent across browsers - Firefox will pre-decode it!\n var href = window.location.href;\n var hashIndex = href.indexOf('#');\n return hashIndex === -1 ? '' : href.substring(hashIndex + 1);\n}\n\nfunction pushHashPath(path) {\n window.location.hash = path;\n}\n\nfunction replaceHashPath(path) {\n window.location.replace(stripHash(window.location.href) + '#' + path);\n}\n\nfunction createHashHistory(props) {\n if (props === void 0) {\n props = {};\n }\n\n !canUseDOM ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Hash history needs a DOM') : invariant(false) : void 0;\n var globalHistory = window.history;\n var canGoWithoutReload = supportsGoWithoutReloadUsingHash();\n var _props = props,\n _props$getUserConfirm = _props.getUserConfirmation,\n getUserConfirmation = _props$getUserConfirm === void 0 ? getConfirmation : _props$getUserConfirm,\n _props$hashType = _props.hashType,\n hashType = _props$hashType === void 0 ? 'slash' : _props$hashType;\n var basename = props.basename ? stripTrailingSlash(addLeadingSlash(props.basename)) : '';\n var _HashPathCoders$hashT = HashPathCoders[hashType],\n encodePath = _HashPathCoders$hashT.encodePath,\n decodePath = _HashPathCoders$hashT.decodePath;\n\n function getDOMLocation() {\n var path = decodePath(getHashPath());\n process.env.NODE_ENV !== \"production\" ? warning(!basename || hasBasename(path, basename), 'You are attempting to use a basename on a page whose URL path does not begin ' + 'with the basename. Expected path \"' + path + '\" to begin with \"' + basename + '\".') : void 0;\n if (basename) path = stripBasename(path, basename);\n return createLocation(path);\n }\n\n var transitionManager = createTransitionManager();\n\n function setState(nextState) {\n _extends(history, nextState);\n\n history.length = globalHistory.length;\n transitionManager.notifyListeners(history.location, history.action);\n }\n\n var forceNextPop = false;\n var ignorePath = null;\n\n function locationsAreEqual$$1(a, b) {\n return a.pathname === b.pathname && a.search === b.search && a.hash === b.hash;\n }\n\n function handleHashChange() {\n var path = getHashPath();\n var encodedPath = encodePath(path);\n\n if (path !== encodedPath) {\n // Ensure we always have a properly-encoded hash.\n replaceHashPath(encodedPath);\n } else {\n var location = getDOMLocation();\n var prevLocation = history.location;\n if (!forceNextPop && locationsAreEqual$$1(prevLocation, location)) return; // A hashchange doesn't always == location change.\n\n if (ignorePath === createPath(location)) return; // Ignore this change; we already setState in push/replace.\n\n ignorePath = null;\n handlePop(location);\n }\n }\n\n function handlePop(location) {\n if (forceNextPop) {\n forceNextPop = false;\n setState();\n } else {\n var action = 'POP';\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (ok) {\n setState({\n action: action,\n location: location\n });\n } else {\n revertPop(location);\n }\n });\n }\n }\n\n function revertPop(fromLocation) {\n var toLocation = history.location; // TODO: We could probably make this more reliable by\n // keeping a list of paths we've seen in sessionStorage.\n // Instead, we just default to 0 for paths we don't know.\n\n var toIndex = allPaths.lastIndexOf(createPath(toLocation));\n if (toIndex === -1) toIndex = 0;\n var fromIndex = allPaths.lastIndexOf(createPath(fromLocation));\n if (fromIndex === -1) fromIndex = 0;\n var delta = toIndex - fromIndex;\n\n if (delta) {\n forceNextPop = true;\n go(delta);\n }\n } // Ensure the hash is encoded properly before doing anything else.\n\n\n var path = getHashPath();\n var encodedPath = encodePath(path);\n if (path !== encodedPath) replaceHashPath(encodedPath);\n var initialLocation = getDOMLocation();\n var allPaths = [createPath(initialLocation)]; // Public interface\n\n function createHref(location) {\n var baseTag = document.querySelector('base');\n var href = '';\n\n if (baseTag && baseTag.getAttribute('href')) {\n href = stripHash(window.location.href);\n }\n\n return href + '#' + encodePath(basename + createPath(location));\n }\n\n function push(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Hash history cannot push state; it is ignored') : void 0;\n var action = 'PUSH';\n var location = createLocation(path, undefined, undefined, history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var path = createPath(location);\n var encodedPath = encodePath(basename + path);\n var hashChanged = getHashPath() !== encodedPath;\n\n if (hashChanged) {\n // We cannot tell if a hashchange was caused by a PUSH, so we'd\n // rather setState here and ignore the hashchange. The caveat here\n // is that other hash histories in the page will consider it a POP.\n ignorePath = path;\n pushHashPath(encodedPath);\n var prevIndex = allPaths.lastIndexOf(createPath(history.location));\n var nextPaths = allPaths.slice(0, prevIndex + 1);\n nextPaths.push(path);\n allPaths = nextPaths;\n setState({\n action: action,\n location: location\n });\n } else {\n process.env.NODE_ENV !== \"production\" ? warning(false, 'Hash history cannot PUSH the same path; a new entry will not be added to the history stack') : void 0;\n setState();\n }\n });\n }\n\n function replace(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Hash history cannot replace state; it is ignored') : void 0;\n var action = 'REPLACE';\n var location = createLocation(path, undefined, undefined, history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var path = createPath(location);\n var encodedPath = encodePath(basename + path);\n var hashChanged = getHashPath() !== encodedPath;\n\n if (hashChanged) {\n // We cannot tell if a hashchange was caused by a REPLACE, so we'd\n // rather setState here and ignore the hashchange. The caveat here\n // is that other hash histories in the page will consider it a POP.\n ignorePath = path;\n replaceHashPath(encodedPath);\n }\n\n var prevIndex = allPaths.indexOf(createPath(history.location));\n if (prevIndex !== -1) allPaths[prevIndex] = path;\n setState({\n action: action,\n location: location\n });\n });\n }\n\n function go(n) {\n process.env.NODE_ENV !== \"production\" ? warning(canGoWithoutReload, 'Hash history go(n) causes a full page reload in this browser') : void 0;\n globalHistory.go(n);\n }\n\n function goBack() {\n go(-1);\n }\n\n function goForward() {\n go(1);\n }\n\n var listenerCount = 0;\n\n function checkDOMListeners(delta) {\n listenerCount += delta;\n\n if (listenerCount === 1 && delta === 1) {\n window.addEventListener(HashChangeEvent$1, handleHashChange);\n } else if (listenerCount === 0) {\n window.removeEventListener(HashChangeEvent$1, handleHashChange);\n }\n }\n\n var isBlocked = false;\n\n function block(prompt) {\n if (prompt === void 0) {\n prompt = false;\n }\n\n var unblock = transitionManager.setPrompt(prompt);\n\n if (!isBlocked) {\n checkDOMListeners(1);\n isBlocked = true;\n }\n\n return function () {\n if (isBlocked) {\n isBlocked = false;\n checkDOMListeners(-1);\n }\n\n return unblock();\n };\n }\n\n function listen(listener) {\n var unlisten = transitionManager.appendListener(listener);\n checkDOMListeners(1);\n return function () {\n checkDOMListeners(-1);\n unlisten();\n };\n }\n\n var history = {\n length: globalHistory.length,\n action: 'POP',\n location: initialLocation,\n createHref: createHref,\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward,\n block: block,\n listen: listen\n };\n return history;\n}\n\nfunction clamp(n, lowerBound, upperBound) {\n return Math.min(Math.max(n, lowerBound), upperBound);\n}\n/**\n * Creates a history object that stores locations in memory.\n */\n\n\nfunction createMemoryHistory(props) {\n if (props === void 0) {\n props = {};\n }\n\n var _props = props,\n getUserConfirmation = _props.getUserConfirmation,\n _props$initialEntries = _props.initialEntries,\n initialEntries = _props$initialEntries === void 0 ? ['/'] : _props$initialEntries,\n _props$initialIndex = _props.initialIndex,\n initialIndex = _props$initialIndex === void 0 ? 0 : _props$initialIndex,\n _props$keyLength = _props.keyLength,\n keyLength = _props$keyLength === void 0 ? 6 : _props$keyLength;\n var transitionManager = createTransitionManager();\n\n function setState(nextState) {\n _extends(history, nextState);\n\n history.length = history.entries.length;\n transitionManager.notifyListeners(history.location, history.action);\n }\n\n function createKey() {\n return Math.random().toString(36).substr(2, keyLength);\n }\n\n var index = clamp(initialIndex, 0, initialEntries.length - 1);\n var entries = initialEntries.map(function (entry) {\n return typeof entry === 'string' ? createLocation(entry, undefined, createKey()) : createLocation(entry, undefined, entry.key || createKey());\n }); // Public interface\n\n var createHref = createPath;\n\n function push(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to push when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n var action = 'PUSH';\n var location = createLocation(path, state, createKey(), history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var prevIndex = history.index;\n var nextIndex = prevIndex + 1;\n var nextEntries = history.entries.slice(0);\n\n if (nextEntries.length > nextIndex) {\n nextEntries.splice(nextIndex, nextEntries.length - nextIndex, location);\n } else {\n nextEntries.push(location);\n }\n\n setState({\n action: action,\n location: location,\n index: nextIndex,\n entries: nextEntries\n });\n });\n }\n\n function replace(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to replace when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n var action = 'REPLACE';\n var location = createLocation(path, state, createKey(), history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n history.entries[history.index] = location;\n setState({\n action: action,\n location: location\n });\n });\n }\n\n function go(n) {\n var nextIndex = clamp(history.index + n, 0, history.entries.length - 1);\n var action = 'POP';\n var location = history.entries[nextIndex];\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (ok) {\n setState({\n action: action,\n location: location,\n index: nextIndex\n });\n } else {\n // Mimic the behavior of DOM histories by\n // causing a render after a cancelled POP.\n setState();\n }\n });\n }\n\n function goBack() {\n go(-1);\n }\n\n function goForward() {\n go(1);\n }\n\n function canGo(n) {\n var nextIndex = history.index + n;\n return nextIndex >= 0 && nextIndex < history.entries.length;\n }\n\n function block(prompt) {\n if (prompt === void 0) {\n prompt = false;\n }\n\n return transitionManager.setPrompt(prompt);\n }\n\n function listen(listener) {\n return transitionManager.appendListener(listener);\n }\n\n var history = {\n length: entries.length,\n action: 'POP',\n location: entries[index],\n index: index,\n entries: entries,\n createHref: createHref,\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward,\n canGo: canGo,\n block: block,\n listen: listen\n };\n return history;\n}\n\nexport { createBrowserHistory, createHashHistory, createMemoryHistory, createLocation, locationsAreEqual, parsePath, createPath };\n","'use strict';\n\nvar reactIs = require('react-is');\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nvar REACT_STATICS = {\n childContextTypes: true,\n contextType: true,\n contextTypes: true,\n defaultProps: true,\n displayName: true,\n getDefaultProps: true,\n getDerivedStateFromError: true,\n getDerivedStateFromProps: true,\n mixins: true,\n propTypes: true,\n type: true\n};\nvar KNOWN_STATICS = {\n name: true,\n length: true,\n prototype: true,\n caller: true,\n callee: true,\n arguments: true,\n arity: true\n};\nvar FORWARD_REF_STATICS = {\n '$$typeof': true,\n render: true,\n defaultProps: true,\n displayName: true,\n propTypes: true\n};\nvar MEMO_STATICS = {\n '$$typeof': true,\n compare: true,\n defaultProps: true,\n displayName: true,\n propTypes: true,\n type: true\n};\nvar TYPE_STATICS = {};\nTYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;\nTYPE_STATICS[reactIs.Memo] = MEMO_STATICS;\n\nfunction getStatics(component) {\n // React v16.11 and below\n if (reactIs.isMemo(component)) {\n return MEMO_STATICS;\n } // React v16.12 and above\n\n\n return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n if (typeof sourceComponent !== 'string') {\n // don't hoist over string (html) components\n if (objectPrototype) {\n var inheritedComponent = getPrototypeOf(sourceComponent);\n\n if (inheritedComponent && inheritedComponent !== objectPrototype) {\n hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n }\n }\n\n var keys = getOwnPropertyNames(sourceComponent);\n\n if (getOwnPropertySymbols) {\n keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n }\n\n var targetStatics = getStatics(targetComponent);\n var sourceStatics = getStatics(sourceComponent);\n\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n\n if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n try {\n // Avoid failures from read-only properties\n defineProperty(targetComponent, key, descriptor);\n } catch (e) {}\n }\n }\n }\n\n return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;\n","import requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @param {Date|Number} argument - the value to convert\n * @returns {Date} the parsed date in the local time zone\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\n\nexport default function toDate(argument) {\n requiredArgs(1, arguments);\n var argStr = Object.prototype.toString.call(argument); // Clone the date\n\n if (argument instanceof Date || typeof argument === 'object' && argStr === '[object Date]') {\n // Prevent the date to lose the milliseconds when passed to new Date() in IE10\n return new Date(argument.getTime());\n } else if (typeof argument === 'number' || argStr === '[object Number]') {\n return new Date(argument);\n } else {\n if ((typeof argument === 'string' || argStr === '[object String]') && typeof console !== 'undefined') {\n // eslint-disable-next-line no-console\n console.warn(\"Starting with v2.0.0-beta.1 date-fns doesn't accept strings as date arguments. Please use `parseISO` to parse strings. See: https://git.io/fjule\"); // eslint-disable-next-line no-console\n\n console.warn(new Error().stack);\n }\n\n return new Date(NaN);\n }\n}","import toInteger from 'date-fns/esm/_lib/toInteger/index.js'\nimport getTimezoneOffsetInMilliseconds from 'date-fns/esm/_lib/getTimezoneOffsetInMilliseconds/index.js'\nimport tzParseTimezone from '../_lib/tzParseTimezone'\n\nvar MILLISECONDS_IN_HOUR = 3600000\nvar MILLISECONDS_IN_MINUTE = 60000\nvar DEFAULT_ADDITIONAL_DIGITS = 2\n\nvar patterns = {\n dateTimeDelimeter: /[T ]/,\n plainTime: /:/,\n timeZoneDelimeter: /[Z ]/i,\n\n // year tokens\n YY: /^(\\d{2})$/,\n YYY: [\n /^([+-]\\d{2})$/, // 0 additional digits\n /^([+-]\\d{3})$/, // 1 additional digit\n /^([+-]\\d{4})$/, // 2 additional digits\n ],\n YYYY: /^(\\d{4})/,\n YYYYY: [\n /^([+-]\\d{4})/, // 0 additional digits\n /^([+-]\\d{5})/, // 1 additional digit\n /^([+-]\\d{6})/, // 2 additional digits\n ],\n\n // date tokens\n MM: /^-(\\d{2})$/,\n DDD: /^-?(\\d{3})$/,\n MMDD: /^-?(\\d{2})-?(\\d{2})$/,\n Www: /^-?W(\\d{2})$/,\n WwwD: /^-?W(\\d{2})-?(\\d{1})$/,\n\n HH: /^(\\d{2}([.,]\\d*)?)$/,\n HHMM: /^(\\d{2}):?(\\d{2}([.,]\\d*)?)$/,\n HHMMSS: /^(\\d{2}):?(\\d{2}):?(\\d{2}([.,]\\d*)?)$/,\n\n // timezone tokens (to identify the presence of a tz)\n timezone: /([Z+-].*| UTC|(?:[a-zA-Z]+\\/[a-zA-Z_]+(?:\\/[a-zA-Z_]+)?))$/,\n}\n\n/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If an argument is a string, the function tries to parse it.\n * Function accepts complete ISO 8601 formats as well as partial implementations.\n * ISO 8601: http://en.wikipedia.org/wiki/ISO_8601\n * If the function cannot parse the string or the values are invalid, it returns Invalid Date.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n * All *date-fns* functions will throw `RangeError` if `options.additionalDigits` is not 0, 1, 2 or undefined.\n *\n * @param {Date|String|Number} argument - the value to convert\n * @param {OptionsWithTZ} [options] - the object with options. See [Options]{@link https://date-fns.org/docs/Options}\n * @param {0|1|2} [options.additionalDigits=2] - the additional number of digits in the extended year format\n * @param {String} [options.timeZone=''] - used to specify the IANA time zone offset of a date String.\n * @returns {Date} the parsed date in the local time zone\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.additionalDigits` must be 0, 1 or 2\n *\n * @example\n * // Convert string '2014-02-11T11:30:30' to date:\n * var result = toDate('2014-02-11T11:30:30')\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert string '+02014101' to date,\n * // if the additional number of digits in the extended year format is 1:\n * var result = toDate('+02014101', {additionalDigits: 1})\n * //=> Fri Apr 11 2014 00:00:00\n */\nexport default function toDate(argument, dirtyOptions) {\n if (arguments.length < 1) {\n throw new TypeError('1 argument required, but only ' + arguments.length + ' present')\n }\n\n if (argument === null) {\n return new Date(NaN)\n }\n\n var options = dirtyOptions || {}\n\n var additionalDigits =\n options.additionalDigits == null\n ? DEFAULT_ADDITIONAL_DIGITS\n : toInteger(options.additionalDigits)\n if (additionalDigits !== 2 && additionalDigits !== 1 && additionalDigits !== 0) {\n throw new RangeError('additionalDigits must be 0, 1 or 2')\n }\n\n // Clone the date\n if (\n argument instanceof Date ||\n (typeof argument === 'object' && Object.prototype.toString.call(argument) === '[object Date]')\n ) {\n // Prevent the date to lose the milliseconds when passed to new Date() in IE10\n return new Date(argument.getTime())\n } else if (\n typeof argument === 'number' ||\n Object.prototype.toString.call(argument) === '[object Number]'\n ) {\n return new Date(argument)\n } else if (\n !(\n typeof argument === 'string' || Object.prototype.toString.call(argument) === '[object String]'\n )\n ) {\n return new Date(NaN)\n }\n\n var dateStrings = splitDateString(argument)\n\n var parseYearResult = parseYear(dateStrings.date, additionalDigits)\n var year = parseYearResult.year\n var restDateString = parseYearResult.restDateString\n\n var date = parseDate(restDateString, year)\n\n if (isNaN(date)) {\n return new Date(NaN)\n }\n\n if (date) {\n var timestamp = date.getTime()\n var time = 0\n var offset\n\n if (dateStrings.time) {\n time = parseTime(dateStrings.time)\n\n if (isNaN(time)) {\n return new Date(NaN)\n }\n }\n\n if (dateStrings.timezone || options.timeZone) {\n offset = tzParseTimezone(dateStrings.timezone || options.timeZone, new Date(timestamp + time))\n if (isNaN(offset)) {\n return new Date(NaN)\n }\n } else {\n // get offset accurate to hour in timezones that change offset\n offset = getTimezoneOffsetInMilliseconds(new Date(timestamp + time))\n offset = getTimezoneOffsetInMilliseconds(new Date(timestamp + time + offset))\n }\n\n return new Date(timestamp + time + offset)\n } else {\n return new Date(NaN)\n }\n}\n\nfunction splitDateString(dateString) {\n var dateStrings = {}\n var array = dateString.split(patterns.dateTimeDelimeter)\n var timeString\n\n if (patterns.plainTime.test(array[0])) {\n dateStrings.date = null\n timeString = array[0]\n } else {\n dateStrings.date = array[0]\n timeString = array[1]\n dateStrings.timezone = array[2]\n if (patterns.timeZoneDelimeter.test(dateStrings.date)) {\n dateStrings.date = dateString.split(patterns.timeZoneDelimeter)[0]\n timeString = dateString.substr(dateStrings.date.length, dateString.length)\n }\n }\n\n if (timeString) {\n var token = patterns.timezone.exec(timeString)\n if (token) {\n dateStrings.time = timeString.replace(token[1], '')\n dateStrings.timezone = token[1]\n } else {\n dateStrings.time = timeString\n }\n }\n\n return dateStrings\n}\n\nfunction parseYear(dateString, additionalDigits) {\n var patternYYY = patterns.YYY[additionalDigits]\n var patternYYYYY = patterns.YYYYY[additionalDigits]\n\n var token\n\n // YYYY or ±YYYYY\n token = patterns.YYYY.exec(dateString) || patternYYYYY.exec(dateString)\n if (token) {\n var yearString = token[1]\n return {\n year: parseInt(yearString, 10),\n restDateString: dateString.slice(yearString.length),\n }\n }\n\n // YY or ±YYY\n token = patterns.YY.exec(dateString) || patternYYY.exec(dateString)\n if (token) {\n var centuryString = token[1]\n return {\n year: parseInt(centuryString, 10) * 100,\n restDateString: dateString.slice(centuryString.length),\n }\n }\n\n // Invalid ISO-formatted year\n return {\n year: null,\n }\n}\n\nfunction parseDate(dateString, year) {\n // Invalid ISO-formatted year\n if (year === null) {\n return null\n }\n\n var token\n var date\n var month\n var week\n\n // YYYY\n if (dateString.length === 0) {\n date = new Date(0)\n date.setUTCFullYear(year)\n return date\n }\n\n // YYYY-MM\n token = patterns.MM.exec(dateString)\n if (token) {\n date = new Date(0)\n month = parseInt(token[1], 10) - 1\n\n if (!validateDate(year, month)) {\n return new Date(NaN)\n }\n\n date.setUTCFullYear(year, month)\n return date\n }\n\n // YYYY-DDD or YYYYDDD\n token = patterns.DDD.exec(dateString)\n if (token) {\n date = new Date(0)\n var dayOfYear = parseInt(token[1], 10)\n\n if (!validateDayOfYearDate(year, dayOfYear)) {\n return new Date(NaN)\n }\n\n date.setUTCFullYear(year, 0, dayOfYear)\n return date\n }\n\n // yyyy-MM-dd or YYYYMMDD\n token = patterns.MMDD.exec(dateString)\n if (token) {\n date = new Date(0)\n month = parseInt(token[1], 10) - 1\n var day = parseInt(token[2], 10)\n\n if (!validateDate(year, month, day)) {\n return new Date(NaN)\n }\n\n date.setUTCFullYear(year, month, day)\n return date\n }\n\n // YYYY-Www or YYYYWww\n token = patterns.Www.exec(dateString)\n if (token) {\n week = parseInt(token[1], 10) - 1\n\n if (!validateWeekDate(year, week)) {\n return new Date(NaN)\n }\n\n return dayOfISOWeekYear(year, week)\n }\n\n // YYYY-Www-D or YYYYWwwD\n token = patterns.WwwD.exec(dateString)\n if (token) {\n week = parseInt(token[1], 10) - 1\n var dayOfWeek = parseInt(token[2], 10) - 1\n\n if (!validateWeekDate(year, week, dayOfWeek)) {\n return new Date(NaN)\n }\n\n return dayOfISOWeekYear(year, week, dayOfWeek)\n }\n\n // Invalid ISO-formatted date\n return null\n}\n\nfunction parseTime(timeString) {\n var token\n var hours\n var minutes\n\n // hh\n token = patterns.HH.exec(timeString)\n if (token) {\n hours = parseFloat(token[1].replace(',', '.'))\n\n if (!validateTime(hours)) {\n return NaN\n }\n\n return (hours % 24) * MILLISECONDS_IN_HOUR\n }\n\n // hh:mm or hhmm\n token = patterns.HHMM.exec(timeString)\n if (token) {\n hours = parseInt(token[1], 10)\n minutes = parseFloat(token[2].replace(',', '.'))\n\n if (!validateTime(hours, minutes)) {\n return NaN\n }\n\n return (hours % 24) * MILLISECONDS_IN_HOUR + minutes * MILLISECONDS_IN_MINUTE\n }\n\n // hh:mm:ss or hhmmss\n token = patterns.HHMMSS.exec(timeString)\n if (token) {\n hours = parseInt(token[1], 10)\n minutes = parseInt(token[2], 10)\n var seconds = parseFloat(token[3].replace(',', '.'))\n\n if (!validateTime(hours, minutes, seconds)) {\n return NaN\n }\n\n return (hours % 24) * MILLISECONDS_IN_HOUR + minutes * MILLISECONDS_IN_MINUTE + seconds * 1000\n }\n\n // Invalid ISO-formatted time\n return null\n}\n\nfunction dayOfISOWeekYear(isoWeekYear, week, day) {\n week = week || 0\n day = day || 0\n var date = new Date(0)\n date.setUTCFullYear(isoWeekYear, 0, 4)\n var fourthOfJanuaryDay = date.getUTCDay() || 7\n var diff = week * 7 + day + 1 - fourthOfJanuaryDay\n date.setUTCDate(date.getUTCDate() + diff)\n return date\n}\n\n// Validation functions\n\nvar DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\nvar DAYS_IN_MONTH_LEAP_YEAR = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n\nfunction isLeapYearIndex(year) {\n return year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0)\n}\n\nfunction validateDate(year, month, date) {\n if (month < 0 || month > 11) {\n return false\n }\n\n if (date != null) {\n if (date < 1) {\n return false\n }\n\n var isLeapYear = isLeapYearIndex(year)\n if (isLeapYear && date > DAYS_IN_MONTH_LEAP_YEAR[month]) {\n return false\n }\n if (!isLeapYear && date > DAYS_IN_MONTH[month]) {\n return false\n }\n }\n\n return true\n}\n\nfunction validateDayOfYearDate(year, dayOfYear) {\n if (dayOfYear < 1) {\n return false\n }\n\n var isLeapYear = isLeapYearIndex(year)\n if (isLeapYear && dayOfYear > 366) {\n return false\n }\n if (!isLeapYear && dayOfYear > 365) {\n return false\n }\n\n return true\n}\n\nfunction validateWeekDate(year, week, day) {\n if (week < 0 || week > 52) {\n return false\n }\n\n if (day != null && (day < 0 || day > 6)) {\n return false\n }\n\n return true\n}\n\nfunction validateTime(hours, minutes, seconds) {\n if (hours != null && (hours < 0 || hours >= 25)) {\n return false\n }\n\n if (minutes != null && (minutes < 0 || minutes >= 60)) {\n return false\n }\n\n if (seconds != null && (seconds < 0 || seconds >= 60)) {\n return false\n }\n\n return true\n}\n","/**\n * Returns the [year, month, day, hour, minute, seconds] tokens of the provided\n * `date` as it will be rendered in the `timeZone`.\n */\nexport default function tzTokenizeDate(date, timeZone) {\n var dtf = getDateTimeFormat(timeZone)\n return dtf.formatToParts ? partsOffset(dtf, date) : hackyOffset(dtf, date)\n}\n\nvar typeToPos = {\n year: 0,\n month: 1,\n day: 2,\n hour: 3,\n minute: 4,\n second: 5,\n}\n\nfunction partsOffset(dtf, date) {\n var formatted = dtf.formatToParts(date)\n var filled = []\n for (var i = 0; i < formatted.length; i++) {\n var pos = typeToPos[formatted[i].type]\n\n if (pos >= 0) {\n filled[pos] = parseInt(formatted[i].value, 10)\n }\n }\n return filled\n}\n\nfunction hackyOffset(dtf, date) {\n var formatted = dtf.format(date).replace(/\\u200E/g, '')\n var parsed = /(\\d+)\\/(\\d+)\\/(\\d+),? (\\d+):(\\d+):(\\d+)/.exec(formatted)\n // var [, fMonth, fDay, fYear, fHour, fMinute, fSecond] = parsed\n // return [fYear, fMonth, fDay, fHour, fMinute, fSecond]\n return [parsed[3], parsed[1], parsed[2], parsed[4], parsed[5], parsed[6]]\n}\n\n// Get a cached Intl.DateTimeFormat instance for the IANA `timeZone`. This can be used\n// to get deterministic local date/time output according to the `en-US` locale which\n// can be used to extract local time parts as necessary.\nvar dtfCache = {}\nfunction getDateTimeFormat(timeZone) {\n if (!dtfCache[timeZone]) {\n // New browsers use `hourCycle`, IE and Chrome <73 does not support it and uses `hour12`\n var testDateFormatted = new Intl.DateTimeFormat('en-US', {\n hour12: false,\n timeZone: 'America/New_York',\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n }).format(new Date('2014-06-25T04:00:00.123Z'))\n var hourCycleSupported =\n testDateFormatted === '06/25/2014, 00:00:00' ||\n testDateFormatted === '‎06‎/‎25‎/‎2014‎ ‎00‎:‎00‎:‎00'\n\n dtfCache[timeZone] = hourCycleSupported\n ? new Intl.DateTimeFormat('en-US', {\n hour12: false,\n timeZone: timeZone,\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n })\n : new Intl.DateTimeFormat('en-US', {\n hourCycle: 'h23',\n timeZone: timeZone,\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n })\n }\n return dtfCache[timeZone]\n}\n","import tzTokenizeDate from '../tzTokenizeDate/index.js'\n\nvar MILLISECONDS_IN_HOUR = 3600000\nvar MILLISECONDS_IN_MINUTE = 60000\n\nvar patterns = {\n timezone: /([Z+-].*)$/,\n timezoneZ: /^(Z)$/,\n timezoneHH: /^([+-])(\\d{2})$/,\n timezoneHHMM: /^([+-])(\\d{2}):?(\\d{2})$/\n}\n\n// Parse various time zone offset formats to an offset in milliseconds\nexport default function tzParseTimezone(timezoneString, date, isUtcDate) {\n var token\n var absoluteOffset\n\n // Z\n token = patterns.timezoneZ.exec(timezoneString)\n if (token) {\n return 0\n }\n\n var hours\n\n // ±hh\n token = patterns.timezoneHH.exec(timezoneString)\n if (token) {\n hours = parseInt(token[2], 10)\n\n if (!validateTimezone(hours)) {\n return NaN\n }\n\n absoluteOffset = hours * MILLISECONDS_IN_HOUR\n return token[1] === '+' ? -absoluteOffset : absoluteOffset\n }\n\n // ±hh:mm or ±hhmm\n token = patterns.timezoneHHMM.exec(timezoneString)\n if (token) {\n hours = parseInt(token[2], 10)\n var minutes = parseInt(token[3], 10)\n\n if (!validateTimezone(hours, minutes)) {\n return NaN\n }\n\n absoluteOffset = hours * MILLISECONDS_IN_HOUR + minutes * MILLISECONDS_IN_MINUTE\n return token[1] === '+' ? -absoluteOffset : absoluteOffset\n }\n\n // IANA time zone\n if (isValidTimezoneIANAString(timezoneString)) {\n date = new Date(date || Date.now())\n var utcDate = isUtcDate ? date : toUtcDate(date)\n\n var offset = calcOffset(utcDate, timezoneString)\n\n var fixedOffset = isUtcDate ? offset : fixOffset(date, offset, timezoneString)\n\n return -fixedOffset\n }\n\n return 0\n}\n\nfunction toUtcDate(date) {\n return new Date(\n Date.UTC(\n date.getFullYear(),\n date.getMonth(),\n date.getDate(),\n date.getHours(),\n date.getMinutes(),\n date.getSeconds(),\n date.getMilliseconds()\n )\n )\n}\n\nfunction calcOffset(date, timezoneString) {\n var tokens = tzTokenizeDate(date, timezoneString)\n\n var asUTC = Date.UTC(tokens[0], tokens[1] - 1, tokens[2], tokens[3] % 24, tokens[4], tokens[5])\n\n var asTS = date.getTime()\n var over = asTS % 1000\n asTS -= over >= 0 ? over : 1000 + over\n return asUTC - asTS\n}\n\nfunction fixOffset(date, offset, timezoneString) {\n var localTS = date.getTime()\n\n // Our UTC time is just a guess because our offset is just a guess\n var utcGuess = localTS - offset\n\n // Test whether the zone matches the offset for this ts\n var o2 = calcOffset(new Date(utcGuess), timezoneString)\n\n // If so, offset didn't change and we're done\n if (offset === o2) {\n return offset\n }\n\n // If not, change the ts by the difference in the offset\n utcGuess -= o2 - offset\n\n // If that gives us the local time we want, we're done\n var o3 = calcOffset(new Date(utcGuess), timezoneString)\n if (o2 === o3) {\n return o2\n }\n\n // If it's different, we're in a hole time. The offset has changed, but the we don't adjust the time\n return Math.max(o2, o3)\n}\n\nfunction validateTimezone(hours, minutes) {\n if (minutes != null && (minutes < 0 || minutes > 59)) {\n return false\n }\n\n return true\n}\n\nfunction isValidTimezoneIANAString(timeZoneString) {\n try {\n Intl.DateTimeFormat(undefined, {timeZone: timeZoneString});\n return true;\n } catch (error) {\n return false;\n }\n}\n","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nvar arr = [];\nvar each = arr.forEach;\nvar slice = arr.slice;\nexport function defaults(obj) {\n each.call(slice.call(arguments, 1), function (source) {\n if (source) {\n for (var prop in source) {\n if (obj[prop] === undefined) obj[prop] = source[prop];\n }\n }\n });\n return obj;\n}\nexport function hasXMLHttpRequest() {\n return typeof XMLHttpRequest === 'function' || (typeof XMLHttpRequest === \"undefined\" ? \"undefined\" : _typeof(XMLHttpRequest)) === 'object';\n}\nfunction isPromise(maybePromise) {\n return !!maybePromise && typeof maybePromise.then === 'function';\n}\nexport function makePromise(maybePromise) {\n if (isPromise(maybePromise)) {\n return maybePromise;\n }\n return Promise.resolve(maybePromise);\n}","/**\n * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds.\n * They usually appear for dates that denote time before the timezones were introduced\n * (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891\n * and GMT+01:00:00 after that date)\n *\n * Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above,\n * which would lead to incorrect calculations.\n *\n * This function returns the timezone offset in milliseconds that takes seconds in account.\n */\nexport default function getTimezoneOffsetInMilliseconds(date) {\n var utcDate = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds()));\n utcDate.setUTCFullYear(date.getFullYear());\n return date.getTime() - utcDate.getTime();\n}","/**\n * Returns the formatted time zone name of the provided `timeZone` or the current\n * system time zone if omitted, accounting for DST according to the UTC value of\n * the date.\n */\nexport default function tzIntlTimeZoneName(length, date, options) {\n var dtf = getDTF(length, options.timeZone, options.locale)\n return dtf.formatToParts ? partsTimeZone(dtf, date) : hackyTimeZone(dtf, date)\n}\n\nfunction partsTimeZone(dtf, date) {\n var formatted = dtf.formatToParts(date)\n return formatted[formatted.length - 1].value\n}\n\nfunction hackyTimeZone(dtf, date) {\n var formatted = dtf.format(date).replace(/\\u200E/g, '')\n var tzNameMatch = / [\\w-+ ]+$/.exec(formatted)\n return tzNameMatch ? tzNameMatch[0].substr(1) : ''\n}\n\n// If a locale has been provided `en-US` is used as a fallback in case it is an\n// invalid locale, otherwise the locale is left undefined to use the system locale.\nfunction getDTF(length, timeZone, locale) {\n if (locale && !locale.code) {\n throw new Error(\n \"date-fns-tz error: Please set a language code on the locale object imported from date-fns, e.g. `locale.code = 'en-US'`\"\n )\n }\n return new Intl.DateTimeFormat(locale ? [locale.code, 'en-US'] : undefined, {\n timeZone: timeZone,\n timeZoneName: length,\n })\n}\n","import tzIntlTimeZoneName from '../../_lib/tzIntlTimeZoneName'\nimport tzParseTimezone from '../../_lib/tzParseTimezone'\n\nvar MILLISECONDS_IN_MINUTE = 60 * 1000\n\nvar formatters = {\n // Timezone (ISO-8601. If offset is 0, output is always `'Z'`)\n X: function (date, token, localize, options) {\n var originalDate = options._originalDate || date\n var timezoneOffset = options.timeZone\n ? tzParseTimezone(options.timeZone, originalDate) / MILLISECONDS_IN_MINUTE\n : originalDate.getTimezoneOffset()\n\n if (timezoneOffset === 0) {\n return 'Z'\n }\n\n switch (token) {\n // Hours and optional minutes\n case 'X':\n return formatTimezoneWithOptionalMinutes(timezoneOffset)\n\n // Hours, minutes and optional seconds without `:` delimeter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `XX`\n case 'XXXX':\n case 'XX': // Hours and minutes without `:` delimeter\n return formatTimezone(timezoneOffset)\n\n // Hours, minutes and optional seconds with `:` delimeter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `XXX`\n case 'XXXXX':\n case 'XXX': // Hours and minutes with `:` delimeter\n default:\n return formatTimezone(timezoneOffset, ':')\n }\n },\n\n // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent)\n x: function (date, token, localize, options) {\n var originalDate = options._originalDate || date\n var timezoneOffset = options.timeZone\n ? tzParseTimezone(options.timeZone, originalDate) / MILLISECONDS_IN_MINUTE\n : originalDate.getTimezoneOffset()\n\n switch (token) {\n // Hours and optional minutes\n case 'x':\n return formatTimezoneWithOptionalMinutes(timezoneOffset)\n\n // Hours, minutes and optional seconds without `:` delimeter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `xx`\n case 'xxxx':\n case 'xx': // Hours and minutes without `:` delimeter\n return formatTimezone(timezoneOffset)\n\n // Hours, minutes and optional seconds with `:` delimeter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `xxx`\n case 'xxxxx':\n case 'xxx': // Hours and minutes with `:` delimeter\n default:\n return formatTimezone(timezoneOffset, ':')\n }\n },\n\n // Timezone (GMT)\n O: function (date, token, localize, options) {\n var originalDate = options._originalDate || date\n var timezoneOffset = options.timeZone\n ? tzParseTimezone(options.timeZone, originalDate) / MILLISECONDS_IN_MINUTE\n : originalDate.getTimezoneOffset()\n\n switch (token) {\n // Short\n case 'O':\n case 'OO':\n case 'OOO':\n return 'GMT' + formatTimezoneShort(timezoneOffset, ':')\n // Long\n case 'OOOO':\n default:\n return 'GMT' + formatTimezone(timezoneOffset, ':')\n }\n },\n\n // Timezone (specific non-location)\n z: function (date, token, localize, options) {\n var originalDate = options._originalDate || date\n\n switch (token) {\n // Short\n case 'z':\n case 'zz':\n case 'zzz':\n return tzIntlTimeZoneName('short', originalDate, options)\n // Long\n case 'zzzz':\n default:\n return tzIntlTimeZoneName('long', originalDate, options)\n }\n },\n}\n\nfunction addLeadingZeros(number, targetLength) {\n var sign = number < 0 ? '-' : ''\n var output = Math.abs(number).toString()\n while (output.length < targetLength) {\n output = '0' + output\n }\n return sign + output\n}\n\nfunction formatTimezone(offset, dirtyDelimeter) {\n var delimeter = dirtyDelimeter || ''\n var sign = offset > 0 ? '-' : '+'\n var absOffset = Math.abs(offset)\n var hours = addLeadingZeros(Math.floor(absOffset / 60), 2)\n var minutes = addLeadingZeros(absOffset % 60, 2)\n return sign + hours + delimeter + minutes\n}\n\nfunction formatTimezoneWithOptionalMinutes(offset, dirtyDelimeter) {\n if (offset % 60 === 0) {\n var sign = offset > 0 ? '-' : '+'\n return sign + addLeadingZeros(Math.abs(offset) / 60, 2)\n }\n return formatTimezone(offset, dirtyDelimeter)\n}\n\nfunction formatTimezoneShort(offset, dirtyDelimeter) {\n var sign = offset > 0 ? '-' : '+'\n var absOffset = Math.abs(offset)\n var hours = Math.floor(absOffset / 60)\n var minutes = absOffset % 60\n if (minutes === 0) {\n return sign + String(hours)\n }\n var delimeter = dirtyDelimeter || ''\n return sign + String(hours) + delimeter + addLeadingZeros(minutes, 2)\n}\n\nexport default formatters\n","import dateFnsFormat from 'date-fns/esm/format'\nimport formatters from './formatters'\nimport toDate from '../toDate'\n\nvar tzFormattingTokensRegExp = /([xXOz]+)|''|'(''|[^'])+('|$)/g\n\n/**\n * @name format\n * @category Common Helpers\n * @summary Format the date.\n *\n * @description\n * Return the formatted date string in the given format. The result may vary by locale.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://git.io/fxCyr\n *\n * The characters wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n * (see the last example)\n *\n * Format of the string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 7 below the table).\n *\n * Accepted patterns:\n * | Unit | Pattern | Result examples | Notes |\n * |---------------------------------|---------|-----------------------------------|-------|\n * | Era | G..GGG | AD, BC | |\n * | | GGGG | Anno Domini, Before Christ | 2 |\n * | | GGGGG | A, B | |\n * | Calendar year | y | 44, 1, 1900, 2017 | 5 |\n * | | yo | 44th, 1st, 0th, 17th | 5,7 |\n * | | yy | 44, 01, 00, 17 | 5 |\n * | | yyy | 044, 001, 1900, 2017 | 5 |\n * | | yyyy | 0044, 0001, 1900, 2017 | 5 |\n * | | yyyyy | ... | 3,5 |\n * | Local week-numbering year | Y | 44, 1, 1900, 2017 | 5 |\n * | | Yo | 44th, 1st, 1900th, 2017th | 5,7 |\n * | | YY | 44, 01, 00, 17 | 5,8 |\n * | | YYY | 044, 001, 1900, 2017 | 5 |\n * | | YYYY | 0044, 0001, 1900, 2017 | 5,8 |\n * | | YYYYY | ... | 3,5 |\n * | ISO week-numbering year | R | -43, 0, 1, 1900, 2017 | 5,7 |\n * | | RR | -43, 00, 01, 1900, 2017 | 5,7 |\n * | | RRR | -043, 000, 001, 1900, 2017 | 5,7 |\n * | | RRRR | -0043, 0000, 0001, 1900, 2017 | 5,7 |\n * | | RRRRR | ... | 3,5,7 |\n * | Extended year | u | -43, 0, 1, 1900, 2017 | 5 |\n * | | uu | -43, 01, 1900, 2017 | 5 |\n * | | uuu | -043, 001, 1900, 2017 | 5 |\n * | | uuuu | -0043, 0001, 1900, 2017 | 5 |\n * | | uuuuu | ... | 3,5 |\n * | Quarter (formatting) | Q | 1, 2, 3, 4 | |\n * | | Qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | QQ | 01, 02, 03, 04 | |\n * | | QQQ | Q1, Q2, Q3, Q4 | |\n * | | QQQQ | 1st quarter, 2nd quarter, ... | 2 |\n * | | QQQQQ | 1, 2, 3, 4 | 4 |\n * | Quarter (stand-alone) | q | 1, 2, 3, 4 | |\n * | | qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | qq | 01, 02, 03, 04 | |\n * | | qqq | Q1, Q2, Q3, Q4 | |\n * | | qqqq | 1st quarter, 2nd quarter, ... | 2 |\n * | | qqqqq | 1, 2, 3, 4 | 4 |\n * | Month (formatting) | M | 1, 2, ..., 12 | |\n * | | Mo | 1st, 2nd, ..., 12th | 7 |\n * | | MM | 01, 02, ..., 12 | |\n * | | MMM | Jan, Feb, ..., Dec | |\n * | | MMMM | January, February, ..., December | 2 |\n * | | MMMMM | J, F, ..., D | |\n * | Month (stand-alone) | L | 1, 2, ..., 12 | |\n * | | Lo | 1st, 2nd, ..., 12th | 7 |\n * | | LL | 01, 02, ..., 12 | |\n * | | LLL | Jan, Feb, ..., Dec | |\n * | | LLLL | January, February, ..., December | 2 |\n * | | LLLLL | J, F, ..., D | |\n * | Local week of year | w | 1, 2, ..., 53 | |\n * | | wo | 1st, 2nd, ..., 53th | 7 |\n * | | ww | 01, 02, ..., 53 | |\n * | ISO week of year | I | 1, 2, ..., 53 | 7 |\n * | | Io | 1st, 2nd, ..., 53th | 7 |\n * | | II | 01, 02, ..., 53 | 7 |\n * | Day of month | d | 1, 2, ..., 31 | |\n * | | do | 1st, 2nd, ..., 31st | 7 |\n * | | dd | 01, 02, ..., 31 | |\n * | Day of year | D | 1, 2, ..., 365, 366 | 8 |\n * | | Do | 1st, 2nd, ..., 365th, 366th | 7 |\n * | | DD | 01, 02, ..., 365, 366 | 8 |\n * | | DDD | 001, 002, ..., 365, 366 | |\n * | | DDDD | ... | 3 |\n * | Day of week (formatting) | E..EEE | Mon, Tue, Wed, ..., Su | |\n * | | EEEE | Monday, Tuesday, ..., Sunday | 2 |\n * | | EEEEE | M, T, W, T, F, S, S | |\n * | | EEEEEE | Mo, Tu, We, Th, Fr, Su, Sa | |\n * | ISO day of week (formatting) | i | 1, 2, 3, ..., 7 | 7 |\n * | | io | 1st, 2nd, ..., 7th | 7 |\n * | | ii | 01, 02, ..., 07 | 7 |\n * | | iii | Mon, Tue, Wed, ..., Su | 7 |\n * | | iiii | Monday, Tuesday, ..., Sunday | 2,7 |\n * | | iiiii | M, T, W, T, F, S, S | 7 |\n * | | iiiiii | Mo, Tu, We, Th, Fr, Su, Sa | 7 |\n * | Local day of week (formatting) | e | 2, 3, 4, ..., 1 | |\n * | | eo | 2nd, 3rd, ..., 1st | 7 |\n * | | ee | 02, 03, ..., 01 | |\n * | | eee | Mon, Tue, Wed, ..., Su | |\n * | | eeee | Monday, Tuesday, ..., Sunday | 2 |\n * | | eeeee | M, T, W, T, F, S, S | |\n * | | eeeeee | Mo, Tu, We, Th, Fr, Su, Sa | |\n * | Local day of week (stand-alone) | c | 2, 3, 4, ..., 1 | |\n * | | co | 2nd, 3rd, ..., 1st | 7 |\n * | | cc | 02, 03, ..., 01 | |\n * | | ccc | Mon, Tue, Wed, ..., Su | |\n * | | cccc | Monday, Tuesday, ..., Sunday | 2 |\n * | | ccccc | M, T, W, T, F, S, S | |\n * | | cccccc | Mo, Tu, We, Th, Fr, Su, Sa | |\n * | AM, PM | a..aaa | AM, PM | |\n * | | aaaa | a.m., p.m. | 2 |\n * | | aaaaa | a, p | |\n * | AM, PM, noon, midnight | b..bbb | AM, PM, noon, midnight | |\n * | | bbbb | a.m., p.m., noon, midnight | 2 |\n * | | bbbbb | a, p, n, mi | |\n * | Flexible day period | B..BBB | at night, in the morning, ... | |\n * | | BBBB | at night, in the morning, ... | 2 |\n * | | BBBBB | at night, in the morning, ... | |\n * | Hour [1-12] | h | 1, 2, ..., 11, 12 | |\n * | | ho | 1st, 2nd, ..., 11th, 12th | 7 |\n * | | hh | 01, 02, ..., 11, 12 | |\n * | Hour [0-23] | H | 0, 1, 2, ..., 23 | |\n * | | Ho | 0th, 1st, 2nd, ..., 23rd | 7 |\n * | | HH | 00, 01, 02, ..., 23 | |\n * | Hour [0-11] | K | 1, 2, ..., 11, 0 | |\n * | | Ko | 1st, 2nd, ..., 11th, 0th | 7 |\n * | | KK | 1, 2, ..., 11, 0 | |\n * | Hour [1-24] | k | 24, 1, 2, ..., 23 | |\n * | | ko | 24th, 1st, 2nd, ..., 23rd | 7 |\n * | | kk | 24, 01, 02, ..., 23 | |\n * | Minute | m | 0, 1, ..., 59 | |\n * | | mo | 0th, 1st, ..., 59th | 7 |\n * | | mm | 00, 01, ..., 59 | |\n * | Second | s | 0, 1, ..., 59 | |\n * | | so | 0th, 1st, ..., 59th | 7 |\n * | | ss | 00, 01, ..., 59 | |\n * | Fraction of second | S | 0, 1, ..., 9 | |\n * | | SS | 00, 01, ..., 99 | |\n * | | SSS | 000, 0001, ..., 999 | |\n * | | SSSS | ... | 3 |\n * | Timezone (ISO-8601 w/ Z) | X | -08, +0530, Z | |\n * | | XX | -0800, +0530, Z | |\n * | | XXX | -08:00, +05:30, Z | |\n * | | XXXX | -0800, +0530, Z, +123456 | 2 |\n * | | XXXXX | -08:00, +05:30, Z, +12:34:56 | |\n * | Timezone (ISO-8601 w/o Z) | x | -08, +0530, +00 | |\n * | | xx | -0800, +0530, +0000 | |\n * | | xxx | -08:00, +05:30, +00:00 | 2 |\n * | | xxxx | -0800, +0530, +0000, +123456 | |\n * | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 | |\n * | Timezone (GMT) | O...OOO | GMT-8, GMT+5:30, GMT+0 | |\n * | | OOOO | GMT-08:00, GMT+05:30, GMT+00:00 | 2 |\n * | Timezone (specific non-locat.) | z...zzz | PDT, EST, CEST | 6 |\n * | | zzzz | Pacific Daylight Time | 2,6 |\n * | Seconds timestamp | t | 512969520 | 7 |\n * | | tt | ... | 3,7 |\n * | Milliseconds timestamp | T | 512969520900 | 7 |\n * | | TT | ... | 3,7 |\n * | Long localized date | P | 05/29/1453 | 7 |\n * | | PP | May 29, 1453 | 7 |\n * | | PPP | May 29th, 1453 | 7 |\n * | | PPPP | Sunday, May 29th, 1453 | 2,7 |\n * | Long localized time | p | 12:00 AM | 7 |\n * | | pp | 12:00:00 AM | 7 |\n * | | ppp | 12:00:00 AM GMT+2 | 7 |\n * | | pppp | 12:00:00 AM GMT+02:00 | 2,7 |\n * | Combination of date and time | Pp | 05/29/1453, 12:00 AM | 7 |\n * | | PPpp | May 29, 1453, 12:00:00 AM | 7 |\n * | | PPPppp | May 29th, 1453 at ... | 7 |\n * | | PPPPpppp| Sunday, May 29th, 1453 at ... | 2,7 |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n * are the same as \"stand-alone\" units, but are different in some languages.\n * \"Formatting\" units are declined according to the rules of the language\n * in the context of a date. \"Stand-alone\" units are always nominative singular:\n *\n * `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n * `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n * the single quote characters (see below).\n * If the sequence is longer than listed in table (e.g. `EEEEEEEEEEE`)\n * the output will be the same as default pattern for this unit, usually\n * the longest one (in case of ISO weekdays, `EEEE`). Default patterns for units\n * are marked with \"2\" in the last column of the table.\n *\n * `format(new Date(2017, 10, 6), 'MMM') //=> 'Nov'`\n *\n * `format(new Date(2017, 10, 6), 'MMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMM') //=> 'N'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMMM') //=> 'November'`\n *\n * 3. Some patterns could be unlimited length (such as `yyyyyyyy`).\n * The output will be padded with zeros to match the length of the pattern.\n *\n * `format(new Date(2017, 10, 6), 'yyyyyyyy') //=> '00002017'`\n *\n * 4. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n * These tokens represent the shortest form of the quarter.\n *\n * 5. The main difference between `y` and `u` patterns are B.C. years:\n *\n * | Year | `y` | `u` |\n * |------|-----|-----|\n * | AC 1 | 1 | 1 |\n * | BC 1 | 1 | 0 |\n * | BC 2 | 2 | -1 |\n *\n * Also `yy` always returns the last two digits of a year,\n * while `uu` pads single digit years to 2 characters and returns other years unchanged:\n *\n * | Year | `yy` | `uu` |\n * |------|------|------|\n * | 1 | 01 | 01 |\n * | 14 | 14 | 14 |\n * | 376 | 76 | 376 |\n * | 1453 | 53 | 1453 |\n *\n * The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n * except local week-numbering years are dependent on `options.weekStartsOn`\n * and `options.firstWeekContainsDate` (compare [getISOWeekYear]{@link https://date-fns.org/docs/getISOWeekYear}\n * and [getWeekYear]{@link https://date-fns.org/docs/getWeekYear}).\n *\n * 6. Specific non-location timezones are created using the Intl browser API. The output is determined by the\n * preferred standard of the current locale (en-US by default) which may not always give the expected result.\n * For this reason it is recommended to supply a `locale` in the format options when formatting a time zone name.\n *\n * 7. These patterns are not in the Unicode Technical Standard #35:\n * - `i`: ISO day of week\n * - `I`: ISO week of year\n * - `R`: ISO week-numbering year\n * - `t`: seconds timestamp\n * - `T`: milliseconds timestamp\n * - `o`: ordinal number modifier\n * - `P`: long localized date\n * - `p`: long localized time\n *\n * 8. These tokens are often confused with others. See: https://git.io/fxCyr\n *\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole\n * library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The second argument is now required for the sake of explicitness.\n *\n * ```javascript\n * // Before v2.0.0\n * format(new Date(2016, 0, 1))\n *\n * // v2.0.0 onward\n * format(new Date(2016, 0, 1), \"yyyy-MM-dd'T'HH:mm:ss.SSSxxx\")\n * ```\n *\n * - New format string API for `format` function\n * which is based on [Unicode Technical Standard\n * #35](https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table). See [this\n * post](https://blog.date-fns.org/post/unicode-tokens-in-date-fns-v2-sreatyki91jg) for more details.\n *\n * - Characters are now escaped using single quote symbols (`'`) instead of square brackets.\n *\n * @param {Date|String|Number} date - the original date\n * @param {String} format - the string of tokens\n * @param {OptionsWithTZ} [options] - the object with options. See [Options]{@link https://date-fns.org/docs/Options}\n * @param {0|1|2} [options.additionalDigits=2] - passed to `toDate`. See [toDate]{@link\n * https://date-fns.org/docs/toDate}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {Number} [options.firstWeekContainsDate=1] - the day of January, which is\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See\n * [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {Boolean} [options.awareOfUnicodeTokens=false] - if true, allows usage of Unicode tokens causes confusion:\n * - Some of the day of year tokens (`D`, `DD`) that are confused with the day of month tokens (`d`, `dd`).\n * - Some of the local week-numbering year tokens (`YY`, `YYYY`) that are confused with the calendar year tokens\n * (`yy`, `yyyy`). See: https://git.io/fxCyr\n * @param {String} [options.timeZone=''] - used to specify the IANA time zone offset of a date String.\n * @returns {String} the formatted date string\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.additionalDigits` must be 0, 1 or 2\n * @throws {RangeError} `options.locale` must contain `localize` property\n * @throws {RangeError} `options.locale` must contain `formatLong` property\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n * @throws {RangeError} `options.awareOfUnicodeTokens` must be set to `true` to use `XX` token; see:\n * https://git.io/fxCyr\n *\n * @example\n * // Represent 11 February 2014 in middle-endian format:\n * var result = format(new Date(2014, 1, 11), 'MM/dd/yyyy')\n * //=> '02/11/2014'\n *\n * @example\n * // Represent 2 July 2014 in Esperanto:\n * import { eoLocale } from 'date-fns/esm/locale/eo'\n * var result = format(new Date(2014, 6, 2), \"do 'de' MMMM yyyy\", {\n * locale: eoLocale\n * })\n * //=> '2-a de julio 2014'\n *\n * @example\n * // Escape string by single quote characters:\n * var result = format(new Date(2014, 6, 2, 15), \"h 'o''clock'\")\n * //=> \"3 o'clock\"\n */\nexport default function format(dirtyDate, dirtyFormatStr, dirtyOptions) {\n var formatStr = String(dirtyFormatStr)\n var options = dirtyOptions || {}\n\n var matches = formatStr.match(tzFormattingTokensRegExp)\n if (matches) {\n var date = toDate(dirtyDate, options)\n formatStr = matches.reduce(function (result, token) {\n return token[0] === \"'\"\n ? result\n : result.replace(token, \"'\" + formatters[token[0]](date, token, null, options) + \"'\")\n }, formatStr)\n }\n\n return dateFnsFormat(dirtyDate, formatStr, options)\n}\n","export default function buildLocalizeFn(args) {\n return function (dirtyIndex, dirtyOptions) {\n var options = dirtyOptions || {};\n var context = options.context ? String(options.context) : 'standalone';\n var valuesArray;\n\n if (context === 'formatting' && args.formattingValues) {\n var defaultWidth = args.defaultFormattingWidth || args.defaultWidth;\n var width = options.width ? String(options.width) : defaultWidth;\n valuesArray = args.formattingValues[width] || args.formattingValues[defaultWidth];\n } else {\n var _defaultWidth = args.defaultWidth;\n\n var _width = options.width ? String(options.width) : args.defaultWidth;\n\n valuesArray = args.values[_width] || args.values[_defaultWidth];\n }\n\n var index = args.argumentCallback ? args.argumentCallback(dirtyIndex) : dirtyIndex; // @ts-ignore: For some reason TypeScript just don't want to match it, no matter how hard we try. I challange you to try to remove it!\n\n return valuesArray[index];\n };\n}","export default function buildMatchFn(args) {\n return function (string) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var width = options.width;\n var matchPattern = width && args.matchPatterns[width] || args.matchPatterns[args.defaultMatchWidth];\n var matchResult = string.match(matchPattern);\n\n if (!matchResult) {\n return null;\n }\n\n var matchedString = matchResult[0];\n var parsePatterns = width && args.parsePatterns[width] || args.parsePatterns[args.defaultParseWidth];\n var key = Array.isArray(parsePatterns) ? findIndex(parsePatterns, function (pattern) {\n return pattern.test(matchedString);\n }) : findKey(parsePatterns, function (pattern) {\n return pattern.test(matchedString);\n });\n var value;\n value = args.valueCallback ? args.valueCallback(key) : key;\n value = options.valueCallback ? options.valueCallback(value) : value;\n var rest = string.slice(matchedString.length);\n return {\n value: value,\n rest: rest\n };\n };\n}\n\nfunction findKey(object, predicate) {\n for (var key in object) {\n if (object.hasOwnProperty(key) && predicate(object[key])) {\n return key;\n }\n }\n\n return undefined;\n}\n\nfunction findIndex(array, predicate) {\n for (var key = 0; key < array.length; key++) {\n if (predicate(array[key])) {\n return key;\n }\n }\n\n return undefined;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfDay\n * @category Day Helpers\n * @summary Return the start of a day for the given date.\n *\n * @description\n * Return the start of a day for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a day\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a day for 2 September 2014 11:55:00:\n * const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 00:00:00\n */\n\nexport default function startOfDay(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n date.setHours(0, 0, 0, 0);\n return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name differenceInMilliseconds\n * @category Millisecond Helpers\n * @summary Get the number of milliseconds between the given dates.\n *\n * @description\n * Get the number of milliseconds between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of milliseconds\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many milliseconds are between\n * // 2 July 2014 12:30:20.600 and 2 July 2014 12:30:21.700?\n * const result = differenceInMilliseconds(\n * new Date(2014, 6, 2, 12, 30, 21, 700),\n * new Date(2014, 6, 2, 12, 30, 20, 600)\n * )\n * //=> 1100\n */\n\nexport default function differenceInMilliseconds(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeft = toDate(dirtyDateLeft);\n var dateRight = toDate(dirtyDateRight);\n return dateLeft.getTime() - dateRight.getTime();\n}","import toInteger from \"../toInteger/index.js\";\nimport toDate from \"../../toDate/index.js\";\nimport startOfUTCWeek from \"../startOfUTCWeek/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function getUTCWeekYear(dirtyDate, dirtyOptions) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate, dirtyOptions);\n var year = date.getUTCFullYear();\n var options = dirtyOptions || {};\n var locale = options.locale;\n var localeFirstWeekContainsDate = locale && locale.options && locale.options.firstWeekContainsDate;\n var defaultFirstWeekContainsDate = localeFirstWeekContainsDate == null ? 1 : toInteger(localeFirstWeekContainsDate);\n var firstWeekContainsDate = options.firstWeekContainsDate == null ? defaultFirstWeekContainsDate : toInteger(options.firstWeekContainsDate); // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n\n if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively');\n }\n\n var firstWeekOfNextYear = new Date(0);\n firstWeekOfNextYear.setUTCFullYear(year + 1, 0, firstWeekContainsDate);\n firstWeekOfNextYear.setUTCHours(0, 0, 0, 0);\n var startOfNextYear = startOfUTCWeek(firstWeekOfNextYear, dirtyOptions);\n var firstWeekOfThisYear = new Date(0);\n firstWeekOfThisYear.setUTCFullYear(year, 0, firstWeekContainsDate);\n firstWeekOfThisYear.setUTCHours(0, 0, 0, 0);\n var startOfThisYear = startOfUTCWeek(firstWeekOfThisYear, dirtyOptions);\n\n if (date.getTime() >= startOfNextYear.getTime()) {\n return year + 1;\n } else if (date.getTime() >= startOfThisYear.getTime()) {\n return year;\n } else {\n return year - 1;\n }\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isBefore\n * @category Common Helpers\n * @summary Is the first date before the second one?\n *\n * @description\n * Is the first date before the second one?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date that should be before the other one to return true\n * @param {Date|Number} dateToCompare - the date to compare with\n * @returns {Boolean} the first date is before the second date\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Is 10 July 1989 before 11 February 1987?\n * var result = isBefore(new Date(1989, 6, 10), new Date(1987, 1, 11))\n * //=> false\n */\n\nexport default function isBefore(dirtyDate, dirtyDateToCompare) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var dateToCompare = toDate(dirtyDateToCompare);\n return date.getTime() < dateToCompare.getTime();\n}","import tzParseTimezone from '../_lib/tzParseTimezone'\nimport toDate from '../toDate'\n\n/**\n * @name utcToZonedTime\n * @category Time Zone Helpers\n * @summary Get a date/time representing local time in a given time zone from the UTC date\n *\n * @description\n * Returns a date instance with values representing the local time in the time zone\n * specified of the UTC time from the date provided. In other words, when the new date\n * is formatted it will show the equivalent hours in the target time zone regardless\n * of the current system time zone.\n *\n * @param {Date|String|Number} date - the date with the relevant UTC time\n * @param {String} timeZone - the time zone to get local time for, can be an offset or IANA time zone\n * @param {OptionsWithTZ} [options] - the object with options. See [Options]{@link https://date-fns.org/docs/Options}\n * @param {0|1|2} [options.additionalDigits=2] - passed to `toDate`. See [toDate]{@link https://date-fns.org/docs/toDate}\n * @returns {Date} the new date with the equivalent time in the time zone\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.additionalDigits` must be 0, 1 or 2\n *\n * @example\n * // In June 10am UTC is 6am in New York (-04:00)\n * const result = utcToZonedTime('2014-06-25T10:00:00.000Z', 'America/New_York')\n * //=> Jun 25 2014 06:00:00\n */\nexport default function utcToZonedTime(dirtyDate, timeZone, options) {\n var date = toDate(dirtyDate, options)\n\n var offsetMilliseconds = tzParseTimezone(timeZone, date, true) || 0\n\n var d = new Date(date.getTime() - offsetMilliseconds)\n\n var zonedTime = new Date(\n d.getUTCFullYear(),\n d.getUTCMonth(),\n d.getUTCDate(),\n d.getUTCHours(),\n d.getUTCMinutes(),\n d.getUTCSeconds(),\n d.getUTCMilliseconds()\n )\n\n return zonedTime\n}\n","import * as glMatrix from \"./common.js\";\n/**\r\n * 3 Dimensional Vector\r\n * @module vec3\r\n */\n\n/**\r\n * Creates a new, empty vec3\r\n *\r\n * @returns {vec3} a new 3D vector\r\n */\n\nexport function create() {\n var out = new glMatrix.ARRAY_TYPE(3);\n\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n }\n\n return out;\n}\n/**\r\n * Creates a new vec3 initialized with values from an existing vector\r\n *\r\n * @param {ReadonlyVec3} a vector to clone\r\n * @returns {vec3} a new 3D vector\r\n */\n\nexport function clone(a) {\n var out = new glMatrix.ARRAY_TYPE(3);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n return out;\n}\n/**\r\n * Calculates the length of a vec3\r\n *\r\n * @param {ReadonlyVec3} a vector to calculate length of\r\n * @returns {Number} length of a\r\n */\n\nexport function length(a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n return Math.hypot(x, y, z);\n}\n/**\r\n * Creates a new vec3 initialized with the given values\r\n *\r\n * @param {Number} x X component\r\n * @param {Number} y Y component\r\n * @param {Number} z Z component\r\n * @returns {vec3} a new 3D vector\r\n */\n\nexport function fromValues(x, y, z) {\n var out = new glMatrix.ARRAY_TYPE(3);\n out[0] = x;\n out[1] = y;\n out[2] = z;\n return out;\n}\n/**\r\n * Copy the values from one vec3 to another\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the source vector\r\n * @returns {vec3} out\r\n */\n\nexport function copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n return out;\n}\n/**\r\n * Set the components of a vec3 to the given values\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {Number} x X component\r\n * @param {Number} y Y component\r\n * @param {Number} z Z component\r\n * @returns {vec3} out\r\n */\n\nexport function set(out, x, y, z) {\n out[0] = x;\n out[1] = y;\n out[2] = z;\n return out;\n}\n/**\r\n * Adds two vec3's\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @returns {vec3} out\r\n */\n\nexport function add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n return out;\n}\n/**\r\n * Subtracts vector b from vector a\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @returns {vec3} out\r\n */\n\nexport function subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n return out;\n}\n/**\r\n * Multiplies two vec3's\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @returns {vec3} out\r\n */\n\nexport function multiply(out, a, b) {\n out[0] = a[0] * b[0];\n out[1] = a[1] * b[1];\n out[2] = a[2] * b[2];\n return out;\n}\n/**\r\n * Divides two vec3's\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @returns {vec3} out\r\n */\n\nexport function divide(out, a, b) {\n out[0] = a[0] / b[0];\n out[1] = a[1] / b[1];\n out[2] = a[2] / b[2];\n return out;\n}\n/**\r\n * Math.ceil the components of a vec3\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a vector to ceil\r\n * @returns {vec3} out\r\n */\n\nexport function ceil(out, a) {\n out[0] = Math.ceil(a[0]);\n out[1] = Math.ceil(a[1]);\n out[2] = Math.ceil(a[2]);\n return out;\n}\n/**\r\n * Math.floor the components of a vec3\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a vector to floor\r\n * @returns {vec3} out\r\n */\n\nexport function floor(out, a) {\n out[0] = Math.floor(a[0]);\n out[1] = Math.floor(a[1]);\n out[2] = Math.floor(a[2]);\n return out;\n}\n/**\r\n * Returns the minimum of two vec3's\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @returns {vec3} out\r\n */\n\nexport function min(out, a, b) {\n out[0] = Math.min(a[0], b[0]);\n out[1] = Math.min(a[1], b[1]);\n out[2] = Math.min(a[2], b[2]);\n return out;\n}\n/**\r\n * Returns the maximum of two vec3's\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @returns {vec3} out\r\n */\n\nexport function max(out, a, b) {\n out[0] = Math.max(a[0], b[0]);\n out[1] = Math.max(a[1], b[1]);\n out[2] = Math.max(a[2], b[2]);\n return out;\n}\n/**\r\n * Math.round the components of a vec3\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a vector to round\r\n * @returns {vec3} out\r\n */\n\nexport function round(out, a) {\n out[0] = Math.round(a[0]);\n out[1] = Math.round(a[1]);\n out[2] = Math.round(a[2]);\n return out;\n}\n/**\r\n * Scales a vec3 by a scalar number\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the vector to scale\r\n * @param {Number} b amount to scale the vector by\r\n * @returns {vec3} out\r\n */\n\nexport function scale(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n out[2] = a[2] * b;\n return out;\n}\n/**\r\n * Adds two vec3's after scaling the second operand by a scalar value\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @param {Number} scale the amount to scale b by before adding\r\n * @returns {vec3} out\r\n */\n\nexport function scaleAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n out[2] = a[2] + b[2] * scale;\n return out;\n}\n/**\r\n * Calculates the euclidian distance between two vec3's\r\n *\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @returns {Number} distance between a and b\r\n */\n\nexport function distance(a, b) {\n var x = b[0] - a[0];\n var y = b[1] - a[1];\n var z = b[2] - a[2];\n return Math.hypot(x, y, z);\n}\n/**\r\n * Calculates the squared euclidian distance between two vec3's\r\n *\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @returns {Number} squared distance between a and b\r\n */\n\nexport function squaredDistance(a, b) {\n var x = b[0] - a[0];\n var y = b[1] - a[1];\n var z = b[2] - a[2];\n return x * x + y * y + z * z;\n}\n/**\r\n * Calculates the squared length of a vec3\r\n *\r\n * @param {ReadonlyVec3} a vector to calculate squared length of\r\n * @returns {Number} squared length of a\r\n */\n\nexport function squaredLength(a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n return x * x + y * y + z * z;\n}\n/**\r\n * Negates the components of a vec3\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a vector to negate\r\n * @returns {vec3} out\r\n */\n\nexport function negate(out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n out[2] = -a[2];\n return out;\n}\n/**\r\n * Returns the inverse of the components of a vec3\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a vector to invert\r\n * @returns {vec3} out\r\n */\n\nexport function inverse(out, a) {\n out[0] = 1.0 / a[0];\n out[1] = 1.0 / a[1];\n out[2] = 1.0 / a[2];\n return out;\n}\n/**\r\n * Normalize a vec3\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a vector to normalize\r\n * @returns {vec3} out\r\n */\n\nexport function normalize(out, a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n var len = x * x + y * y + z * z;\n\n if (len > 0) {\n //TODO: evaluate use of glm_invsqrt here?\n len = 1 / Math.sqrt(len);\n }\n\n out[0] = a[0] * len;\n out[1] = a[1] * len;\n out[2] = a[2] * len;\n return out;\n}\n/**\r\n * Calculates the dot product of two vec3's\r\n *\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @returns {Number} dot product of a and b\r\n */\n\nexport function dot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n/**\r\n * Computes the cross product of two vec3's\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @returns {vec3} out\r\n */\n\nexport function cross(out, a, b) {\n var ax = a[0],\n ay = a[1],\n az = a[2];\n var bx = b[0],\n by = b[1],\n bz = b[2];\n out[0] = ay * bz - az * by;\n out[1] = az * bx - ax * bz;\n out[2] = ax * by - ay * bx;\n return out;\n}\n/**\r\n * Performs a linear interpolation between two vec3's\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\r\n * @returns {vec3} out\r\n */\n\nexport function lerp(out, a, b, t) {\n var ax = a[0];\n var ay = a[1];\n var az = a[2];\n out[0] = ax + t * (b[0] - ax);\n out[1] = ay + t * (b[1] - ay);\n out[2] = az + t * (b[2] - az);\n return out;\n}\n/**\r\n * Performs a hermite interpolation with two control points\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @param {ReadonlyVec3} c the third operand\r\n * @param {ReadonlyVec3} d the fourth operand\r\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\r\n * @returns {vec3} out\r\n */\n\nexport function hermite(out, a, b, c, d, t) {\n var factorTimes2 = t * t;\n var factor1 = factorTimes2 * (2 * t - 3) + 1;\n var factor2 = factorTimes2 * (t - 2) + t;\n var factor3 = factorTimes2 * (t - 1);\n var factor4 = factorTimes2 * (3 - 2 * t);\n out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;\n out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;\n out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;\n return out;\n}\n/**\r\n * Performs a bezier interpolation with two control points\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @param {ReadonlyVec3} c the third operand\r\n * @param {ReadonlyVec3} d the fourth operand\r\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\r\n * @returns {vec3} out\r\n */\n\nexport function bezier(out, a, b, c, d, t) {\n var inverseFactor = 1 - t;\n var inverseFactorTimesTwo = inverseFactor * inverseFactor;\n var factorTimes2 = t * t;\n var factor1 = inverseFactorTimesTwo * inverseFactor;\n var factor2 = 3 * t * inverseFactorTimesTwo;\n var factor3 = 3 * factorTimes2 * inverseFactor;\n var factor4 = factorTimes2 * t;\n out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;\n out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;\n out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;\n return out;\n}\n/**\r\n * Generates a random vector with the given scale\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned\r\n * @returns {vec3} out\r\n */\n\nexport function random(out, scale) {\n scale = scale || 1.0;\n var r = glMatrix.RANDOM() * 2.0 * Math.PI;\n var z = glMatrix.RANDOM() * 2.0 - 1.0;\n var zScale = Math.sqrt(1.0 - z * z) * scale;\n out[0] = Math.cos(r) * zScale;\n out[1] = Math.sin(r) * zScale;\n out[2] = z * scale;\n return out;\n}\n/**\r\n * Transforms the vec3 with a mat4.\r\n * 4th vector component is implicitly '1'\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the vector to transform\r\n * @param {ReadonlyMat4} m matrix to transform with\r\n * @returns {vec3} out\r\n */\n\nexport function transformMat4(out, a, m) {\n var x = a[0],\n y = a[1],\n z = a[2];\n var w = m[3] * x + m[7] * y + m[11] * z + m[15];\n w = w || 1.0;\n out[0] = (m[0] * x + m[4] * y + m[8] * z + m[12]) / w;\n out[1] = (m[1] * x + m[5] * y + m[9] * z + m[13]) / w;\n out[2] = (m[2] * x + m[6] * y + m[10] * z + m[14]) / w;\n return out;\n}\n/**\r\n * Transforms the vec3 with a mat3.\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the vector to transform\r\n * @param {ReadonlyMat3} m the 3x3 matrix to transform with\r\n * @returns {vec3} out\r\n */\n\nexport function transformMat3(out, a, m) {\n var x = a[0],\n y = a[1],\n z = a[2];\n out[0] = x * m[0] + y * m[3] + z * m[6];\n out[1] = x * m[1] + y * m[4] + z * m[7];\n out[2] = x * m[2] + y * m[5] + z * m[8];\n return out;\n}\n/**\r\n * Transforms the vec3 with a quat\r\n * Can also be used for dual quaternions. (Multiply it with the real part)\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the vector to transform\r\n * @param {ReadonlyQuat} q quaternion to transform with\r\n * @returns {vec3} out\r\n */\n\nexport function transformQuat(out, a, q) {\n // benchmarks: https://jsperf.com/quaternion-transform-vec3-implementations-fixed\n var qx = q[0],\n qy = q[1],\n qz = q[2],\n qw = q[3];\n var x = a[0],\n y = a[1],\n z = a[2]; // var qvec = [qx, qy, qz];\n // var uv = vec3.cross([], qvec, a);\n\n var uvx = qy * z - qz * y,\n uvy = qz * x - qx * z,\n uvz = qx * y - qy * x; // var uuv = vec3.cross([], qvec, uv);\n\n var uuvx = qy * uvz - qz * uvy,\n uuvy = qz * uvx - qx * uvz,\n uuvz = qx * uvy - qy * uvx; // vec3.scale(uv, uv, 2 * w);\n\n var w2 = qw * 2;\n uvx *= w2;\n uvy *= w2;\n uvz *= w2; // vec3.scale(uuv, uuv, 2);\n\n uuvx *= 2;\n uuvy *= 2;\n uuvz *= 2; // return vec3.add(out, a, vec3.add(out, uv, uuv));\n\n out[0] = x + uvx + uuvx;\n out[1] = y + uvy + uuvy;\n out[2] = z + uvz + uuvz;\n return out;\n}\n/**\r\n * Rotate a 3D vector around the x-axis\r\n * @param {vec3} out The receiving vec3\r\n * @param {ReadonlyVec3} a The vec3 point to rotate\r\n * @param {ReadonlyVec3} b The origin of the rotation\r\n * @param {Number} rad The angle of rotation in radians\r\n * @returns {vec3} out\r\n */\n\nexport function rotateX(out, a, b, rad) {\n var p = [],\n r = []; //Translate point to the origin\n\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2]; //perform rotation\n\n r[0] = p[0];\n r[1] = p[1] * Math.cos(rad) - p[2] * Math.sin(rad);\n r[2] = p[1] * Math.sin(rad) + p[2] * Math.cos(rad); //translate to correct position\n\n out[0] = r[0] + b[0];\n out[1] = r[1] + b[1];\n out[2] = r[2] + b[2];\n return out;\n}\n/**\r\n * Rotate a 3D vector around the y-axis\r\n * @param {vec3} out The receiving vec3\r\n * @param {ReadonlyVec3} a The vec3 point to rotate\r\n * @param {ReadonlyVec3} b The origin of the rotation\r\n * @param {Number} rad The angle of rotation in radians\r\n * @returns {vec3} out\r\n */\n\nexport function rotateY(out, a, b, rad) {\n var p = [],\n r = []; //Translate point to the origin\n\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2]; //perform rotation\n\n r[0] = p[2] * Math.sin(rad) + p[0] * Math.cos(rad);\n r[1] = p[1];\n r[2] = p[2] * Math.cos(rad) - p[0] * Math.sin(rad); //translate to correct position\n\n out[0] = r[0] + b[0];\n out[1] = r[1] + b[1];\n out[2] = r[2] + b[2];\n return out;\n}\n/**\r\n * Rotate a 3D vector around the z-axis\r\n * @param {vec3} out The receiving vec3\r\n * @param {ReadonlyVec3} a The vec3 point to rotate\r\n * @param {ReadonlyVec3} b The origin of the rotation\r\n * @param {Number} rad The angle of rotation in radians\r\n * @returns {vec3} out\r\n */\n\nexport function rotateZ(out, a, b, rad) {\n var p = [],\n r = []; //Translate point to the origin\n\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2]; //perform rotation\n\n r[0] = p[0] * Math.cos(rad) - p[1] * Math.sin(rad);\n r[1] = p[0] * Math.sin(rad) + p[1] * Math.cos(rad);\n r[2] = p[2]; //translate to correct position\n\n out[0] = r[0] + b[0];\n out[1] = r[1] + b[1];\n out[2] = r[2] + b[2];\n return out;\n}\n/**\r\n * Get the angle between two 3D vectors\r\n * @param {ReadonlyVec3} a The first operand\r\n * @param {ReadonlyVec3} b The second operand\r\n * @returns {Number} The angle in radians\r\n */\n\nexport function angle(a, b) {\n var ax = a[0],\n ay = a[1],\n az = a[2],\n bx = b[0],\n by = b[1],\n bz = b[2],\n mag1 = Math.sqrt(ax * ax + ay * ay + az * az),\n mag2 = Math.sqrt(bx * bx + by * by + bz * bz),\n mag = mag1 * mag2,\n cosine = mag && dot(a, b) / mag;\n return Math.acos(Math.min(Math.max(cosine, -1), 1));\n}\n/**\r\n * Set the components of a vec3 to zero\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @returns {vec3} out\r\n */\n\nexport function zero(out) {\n out[0] = 0.0;\n out[1] = 0.0;\n out[2] = 0.0;\n return out;\n}\n/**\r\n * Returns a string representation of a vector\r\n *\r\n * @param {ReadonlyVec3} a vector to represent as a string\r\n * @returns {String} string representation of the vector\r\n */\n\nexport function str(a) {\n return \"vec3(\" + a[0] + \", \" + a[1] + \", \" + a[2] + \")\";\n}\n/**\r\n * Returns whether or not the vectors have exactly the same elements in the same position (when compared with ===)\r\n *\r\n * @param {ReadonlyVec3} a The first vector.\r\n * @param {ReadonlyVec3} b The second vector.\r\n * @returns {Boolean} True if the vectors are equal, false otherwise.\r\n */\n\nexport function exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2];\n}\n/**\r\n * Returns whether or not the vectors have approximately the same elements in the same position.\r\n *\r\n * @param {ReadonlyVec3} a The first vector.\r\n * @param {ReadonlyVec3} b The second vector.\r\n * @returns {Boolean} True if the vectors are equal, false otherwise.\r\n */\n\nexport function equals(a, b) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2];\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2];\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2));\n}\n/**\r\n * Alias for {@link vec3.subtract}\r\n * @function\r\n */\n\nexport var sub = subtract;\n/**\r\n * Alias for {@link vec3.multiply}\r\n * @function\r\n */\n\nexport var mul = multiply;\n/**\r\n * Alias for {@link vec3.divide}\r\n * @function\r\n */\n\nexport var div = divide;\n/**\r\n * Alias for {@link vec3.distance}\r\n * @function\r\n */\n\nexport var dist = distance;\n/**\r\n * Alias for {@link vec3.squaredDistance}\r\n * @function\r\n */\n\nexport var sqrDist = squaredDistance;\n/**\r\n * Alias for {@link vec3.length}\r\n * @function\r\n */\n\nexport var len = length;\n/**\r\n * Alias for {@link vec3.squaredLength}\r\n * @function\r\n */\n\nexport var sqrLen = squaredLength;\n/**\r\n * Perform some operation over an array of vec3s.\r\n *\r\n * @param {Array} a the array of vectors to iterate over\r\n * @param {Number} stride Number of elements between the start of each vec3. If 0 assumes tightly packed\r\n * @param {Number} offset Number of elements to skip at the beginning of the array\r\n * @param {Number} count Number of vec3s to iterate over. If 0 iterates over entire array\r\n * @param {Function} fn Function to call for each vector in the array\r\n * @param {Object} [arg] additional argument to pass to fn\r\n * @returns {Array} a\r\n * @function\r\n */\n\nexport var forEach = function () {\n var vec = create();\n return function (a, stride, offset, count, fn, arg) {\n var i, l;\n\n if (!stride) {\n stride = 3;\n }\n\n if (!offset) {\n offset = 0;\n }\n\n if (count) {\n l = Math.min(count * stride + offset, a.length);\n } else {\n l = a.length;\n }\n\n for (i = offset; i < l; i += stride) {\n vec[0] = a[i];\n vec[1] = a[i + 1];\n vec[2] = a[i + 2];\n fn(vec, vec, arg);\n a[i] = vec[0];\n a[i + 1] = vec[1];\n a[i + 2] = vec[2];\n }\n\n return a;\n };\n}();","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isValid\n * @category Common Helpers\n * @summary Is the given date valid?\n *\n * @description\n * Returns false if argument is Invalid Date and true otherwise.\n * Argument is converted to Date using `toDate`. See [toDate]{@link https://date-fns.org/docs/toDate}\n * Invalid Date is a Date, whose time value is NaN.\n *\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - Now `isValid` doesn't throw an exception\n * if the first argument is not an instance of Date.\n * Instead, argument is converted beforehand using `toDate`.\n *\n * Examples:\n *\n * | `isValid` argument | Before v2.0.0 | v2.0.0 onward |\n * |---------------------------|---------------|---------------|\n * | `new Date()` | `true` | `true` |\n * | `new Date('2016-01-01')` | `true` | `true` |\n * | `new Date('')` | `false` | `false` |\n * | `new Date(1488370835081)` | `true` | `true` |\n * | `new Date(NaN)` | `false` | `false` |\n * | `'2016-01-01'` | `TypeError` | `false` |\n * | `''` | `TypeError` | `false` |\n * | `1488370835081` | `TypeError` | `true` |\n * | `NaN` | `TypeError` | `false` |\n *\n * We introduce this change to make *date-fns* consistent with ECMAScript behavior\n * that try to coerce arguments to the expected type\n * (which is also the case with other *date-fns* functions).\n *\n * @param {*} date - the date to check\n * @returns {Boolean} the date is valid\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // For the valid date:\n * var result = isValid(new Date(2014, 1, 31))\n * //=> true\n *\n * @example\n * // For the value, convertable into a date:\n * var result = isValid(1393804800000)\n * //=> true\n *\n * @example\n * // For the invalid date:\n * var result = isValid(new Date(''))\n * //=> false\n */\n\nexport default function isValid(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n return !isNaN(date);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addMonths\n * @category Month Helpers\n * @summary Add the specified number of months to the given date.\n *\n * @description\n * Add the specified number of months to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of months to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the months added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 5 months to 1 September 2014:\n * const result = addMonths(new Date(2014, 8, 1), 5)\n * //=> Sun Feb 01 2015 00:00:00\n */\n\nexport default function addMonths(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var amount = toInteger(dirtyAmount);\n\n if (isNaN(amount)) {\n return new Date(NaN);\n }\n\n if (!amount) {\n // If 0 months, no-op to avoid changing times in the hour before end of DST\n return date;\n }\n\n var dayOfMonth = date.getDate(); // The JS Date object supports date math by accepting out-of-bounds values for\n // month, day, etc. For example, new Date(2020, 0, 0) returns 31 Dec 2019 and\n // new Date(2020, 13, 1) returns 1 Feb 2021. This is *almost* the behavior we\n // want except that dates will wrap around the end of a month, meaning that\n // new Date(2020, 13, 31) will return 3 Mar 2021 not 28 Feb 2021 as desired. So\n // we'll default to the end of the desired month by adding 1 to the desired\n // month and using a date of 0 to back up one day to the end of the desired\n // month.\n\n var endOfDesiredMonth = new Date(date.getTime());\n endOfDesiredMonth.setMonth(date.getMonth() + amount + 1, 0);\n var daysInMonth = endOfDesiredMonth.getDate();\n\n if (dayOfMonth >= daysInMonth) {\n // If we're already at the end of the month, then this is the correct date\n // and we're done.\n return endOfDesiredMonth;\n } else {\n // Otherwise, we now know that setting the original day-of-month value won't\n // cause an overflow, so set the desired day-of-month. Note that we can't\n // just set the date of `endOfDesiredMonth` because that object may have had\n // its time changed in the unusual case where where a DST transition was on\n // the last day of the month and its local time was in the hour skipped or\n // repeated next to a DST transition. So we use `date` instead which is\n // guaranteed to still have the original time.\n date.setFullYear(endOfDesiredMonth.getFullYear(), endOfDesiredMonth.getMonth(), dayOfMonth);\n return date;\n }\n}","/*! Hammer.JS - v2.0.7 - 2016-04-22\n * http://hammerjs.github.io/\n *\n * Copyright (c) 2016 Jorik Tangelder;\n * Licensed under the MIT license */\n(function(window, document, exportName, undefined) {\n 'use strict';\n\nvar VENDOR_PREFIXES = ['', 'webkit', 'Moz', 'MS', 'ms', 'o'];\nvar TEST_ELEMENT = document.createElement('div');\n\nvar TYPE_FUNCTION = 'function';\n\nvar round = Math.round;\nvar abs = Math.abs;\nvar now = Date.now;\n\n/**\n * set a timeout with a given scope\n * @param {Function} fn\n * @param {Number} timeout\n * @param {Object} context\n * @returns {number}\n */\nfunction setTimeoutContext(fn, timeout, context) {\n return setTimeout(bindFn(fn, context), timeout);\n}\n\n/**\n * if the argument is an array, we want to execute the fn on each entry\n * if it aint an array we don't want to do a thing.\n * this is used by all the methods that accept a single and array argument.\n * @param {*|Array} arg\n * @param {String} fn\n * @param {Object} [context]\n * @returns {Boolean}\n */\nfunction invokeArrayArg(arg, fn, context) {\n if (Array.isArray(arg)) {\n each(arg, context[fn], context);\n return true;\n }\n return false;\n}\n\n/**\n * walk objects and arrays\n * @param {Object} obj\n * @param {Function} iterator\n * @param {Object} context\n */\nfunction each(obj, iterator, context) {\n var i;\n\n if (!obj) {\n return;\n }\n\n if (obj.forEach) {\n obj.forEach(iterator, context);\n } else if (obj.length !== undefined) {\n i = 0;\n while (i < obj.length) {\n iterator.call(context, obj[i], i, obj);\n i++;\n }\n } else {\n for (i in obj) {\n obj.hasOwnProperty(i) && iterator.call(context, obj[i], i, obj);\n }\n }\n}\n\n/**\n * wrap a method with a deprecation warning and stack trace\n * @param {Function} method\n * @param {String} name\n * @param {String} message\n * @returns {Function} A new function wrapping the supplied method.\n */\nfunction deprecate(method, name, message) {\n var deprecationMessage = 'DEPRECATED METHOD: ' + name + '\\n' + message + ' AT \\n';\n return function() {\n var e = new Error('get-stack-trace');\n var stack = e && e.stack ? e.stack.replace(/^[^\\(]+?[\\n$]/gm, '')\n .replace(/^\\s+at\\s+/gm, '')\n .replace(/^Object.\\s*\\(/gm, '{anonymous}()@') : 'Unknown Stack Trace';\n\n var log = window.console && (window.console.warn || window.console.log);\n if (log) {\n log.call(window.console, deprecationMessage, stack);\n }\n return method.apply(this, arguments);\n };\n}\n\n/**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} target\n * @param {...Object} objects_to_assign\n * @returns {Object} target\n */\nvar assign;\nif (typeof Object.assign !== 'function') {\n assign = function assign(target) {\n if (target === undefined || target === null) {\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n var output = Object(target);\n for (var index = 1; index < arguments.length; index++) {\n var source = arguments[index];\n if (source !== undefined && source !== null) {\n for (var nextKey in source) {\n if (source.hasOwnProperty(nextKey)) {\n output[nextKey] = source[nextKey];\n }\n }\n }\n }\n return output;\n };\n} else {\n assign = Object.assign;\n}\n\n/**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} dest\n * @param {Object} src\n * @param {Boolean} [merge=false]\n * @returns {Object} dest\n */\nvar extend = deprecate(function extend(dest, src, merge) {\n var keys = Object.keys(src);\n var i = 0;\n while (i < keys.length) {\n if (!merge || (merge && dest[keys[i]] === undefined)) {\n dest[keys[i]] = src[keys[i]];\n }\n i++;\n }\n return dest;\n}, 'extend', 'Use `assign`.');\n\n/**\n * merge the values from src in the dest.\n * means that properties that exist in dest will not be overwritten by src\n * @param {Object} dest\n * @param {Object} src\n * @returns {Object} dest\n */\nvar merge = deprecate(function merge(dest, src) {\n return extend(dest, src, true);\n}, 'merge', 'Use `assign`.');\n\n/**\n * simple class inheritance\n * @param {Function} child\n * @param {Function} base\n * @param {Object} [properties]\n */\nfunction inherit(child, base, properties) {\n var baseP = base.prototype,\n childP;\n\n childP = child.prototype = Object.create(baseP);\n childP.constructor = child;\n childP._super = baseP;\n\n if (properties) {\n assign(childP, properties);\n }\n}\n\n/**\n * simple function bind\n * @param {Function} fn\n * @param {Object} context\n * @returns {Function}\n */\nfunction bindFn(fn, context) {\n return function boundFn() {\n return fn.apply(context, arguments);\n };\n}\n\n/**\n * let a boolean value also be a function that must return a boolean\n * this first item in args will be used as the context\n * @param {Boolean|Function} val\n * @param {Array} [args]\n * @returns {Boolean}\n */\nfunction boolOrFn(val, args) {\n if (typeof val == TYPE_FUNCTION) {\n return val.apply(args ? args[0] || undefined : undefined, args);\n }\n return val;\n}\n\n/**\n * use the val2 when val1 is undefined\n * @param {*} val1\n * @param {*} val2\n * @returns {*}\n */\nfunction ifUndefined(val1, val2) {\n return (val1 === undefined) ? val2 : val1;\n}\n\n/**\n * addEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nfunction addEventListeners(target, types, handler) {\n each(splitStr(types), function(type) {\n target.addEventListener(type, handler, false);\n });\n}\n\n/**\n * removeEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nfunction removeEventListeners(target, types, handler) {\n each(splitStr(types), function(type) {\n target.removeEventListener(type, handler, false);\n });\n}\n\n/**\n * find if a node is in the given parent\n * @method hasParent\n * @param {HTMLElement} node\n * @param {HTMLElement} parent\n * @return {Boolean} found\n */\nfunction hasParent(node, parent) {\n while (node) {\n if (node == parent) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n}\n\n/**\n * small indexOf wrapper\n * @param {String} str\n * @param {String} find\n * @returns {Boolean} found\n */\nfunction inStr(str, find) {\n return str.indexOf(find) > -1;\n}\n\n/**\n * split string on whitespace\n * @param {String} str\n * @returns {Array} words\n */\nfunction splitStr(str) {\n return str.trim().split(/\\s+/g);\n}\n\n/**\n * find if a array contains the object using indexOf or a simple polyFill\n * @param {Array} src\n * @param {String} find\n * @param {String} [findByKey]\n * @return {Boolean|Number} false when not found, or the index\n */\nfunction inArray(src, find, findByKey) {\n if (src.indexOf && !findByKey) {\n return src.indexOf(find);\n } else {\n var i = 0;\n while (i < src.length) {\n if ((findByKey && src[i][findByKey] == find) || (!findByKey && src[i] === find)) {\n return i;\n }\n i++;\n }\n return -1;\n }\n}\n\n/**\n * convert array-like objects to real arrays\n * @param {Object} obj\n * @returns {Array}\n */\nfunction toArray(obj) {\n return Array.prototype.slice.call(obj, 0);\n}\n\n/**\n * unique array with objects based on a key (like 'id') or just by the array's value\n * @param {Array} src [{id:1},{id:2},{id:1}]\n * @param {String} [key]\n * @param {Boolean} [sort=False]\n * @returns {Array} [{id:1},{id:2}]\n */\nfunction uniqueArray(src, key, sort) {\n var results = [];\n var values = [];\n var i = 0;\n\n while (i < src.length) {\n var val = key ? src[i][key] : src[i];\n if (inArray(values, val) < 0) {\n results.push(src[i]);\n }\n values[i] = val;\n i++;\n }\n\n if (sort) {\n if (!key) {\n results = results.sort();\n } else {\n results = results.sort(function sortUniqueArray(a, b) {\n return a[key] > b[key];\n });\n }\n }\n\n return results;\n}\n\n/**\n * get the prefixed property\n * @param {Object} obj\n * @param {String} property\n * @returns {String|Undefined} prefixed\n */\nfunction prefixed(obj, property) {\n var prefix, prop;\n var camelProp = property[0].toUpperCase() + property.slice(1);\n\n var i = 0;\n while (i < VENDOR_PREFIXES.length) {\n prefix = VENDOR_PREFIXES[i];\n prop = (prefix) ? prefix + camelProp : property;\n\n if (prop in obj) {\n return prop;\n }\n i++;\n }\n return undefined;\n}\n\n/**\n * get a unique id\n * @returns {number} uniqueId\n */\nvar _uniqueId = 1;\nfunction uniqueId() {\n return _uniqueId++;\n}\n\n/**\n * get the window object of an element\n * @param {HTMLElement} element\n * @returns {DocumentView|Window}\n */\nfunction getWindowForElement(element) {\n var doc = element.ownerDocument || element;\n return (doc.defaultView || doc.parentWindow || window);\n}\n\nvar MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i;\n\nvar SUPPORT_TOUCH = ('ontouchstart' in window);\nvar SUPPORT_POINTER_EVENTS = prefixed(window, 'PointerEvent') !== undefined;\nvar SUPPORT_ONLY_TOUCH = SUPPORT_TOUCH && MOBILE_REGEX.test(navigator.userAgent);\n\nvar INPUT_TYPE_TOUCH = 'touch';\nvar INPUT_TYPE_PEN = 'pen';\nvar INPUT_TYPE_MOUSE = 'mouse';\nvar INPUT_TYPE_KINECT = 'kinect';\n\nvar COMPUTE_INTERVAL = 25;\n\nvar INPUT_START = 1;\nvar INPUT_MOVE = 2;\nvar INPUT_END = 4;\nvar INPUT_CANCEL = 8;\n\nvar DIRECTION_NONE = 1;\nvar DIRECTION_LEFT = 2;\nvar DIRECTION_RIGHT = 4;\nvar DIRECTION_UP = 8;\nvar DIRECTION_DOWN = 16;\n\nvar DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT;\nvar DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN;\nvar DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL;\n\nvar PROPS_XY = ['x', 'y'];\nvar PROPS_CLIENT_XY = ['clientX', 'clientY'];\n\n/**\n * create new input type manager\n * @param {Manager} manager\n * @param {Function} callback\n * @returns {Input}\n * @constructor\n */\nfunction Input(manager, callback) {\n var self = this;\n this.manager = manager;\n this.callback = callback;\n this.element = manager.element;\n this.target = manager.options.inputTarget;\n\n // smaller wrapper around the handler, for the scope and the enabled state of the manager,\n // so when disabled the input events are completely bypassed.\n this.domHandler = function(ev) {\n if (boolOrFn(manager.options.enable, [manager])) {\n self.handler(ev);\n }\n };\n\n this.init();\n\n}\n\nInput.prototype = {\n /**\n * should handle the inputEvent data and trigger the callback\n * @virtual\n */\n handler: function() { },\n\n /**\n * bind the events\n */\n init: function() {\n this.evEl && addEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && addEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && addEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n },\n\n /**\n * unbind the events\n */\n destroy: function() {\n this.evEl && removeEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && removeEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && removeEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n }\n};\n\n/**\n * create new input type manager\n * called by the Manager constructor\n * @param {Hammer} manager\n * @returns {Input}\n */\nfunction createInputInstance(manager) {\n var Type;\n var inputClass = manager.options.inputClass;\n\n if (inputClass) {\n Type = inputClass;\n } else if (SUPPORT_POINTER_EVENTS) {\n Type = PointerEventInput;\n } else if (SUPPORT_ONLY_TOUCH) {\n Type = TouchInput;\n } else if (!SUPPORT_TOUCH) {\n Type = MouseInput;\n } else {\n Type = TouchMouseInput;\n }\n return new (Type)(manager, inputHandler);\n}\n\n/**\n * handle input events\n * @param {Manager} manager\n * @param {String} eventType\n * @param {Object} input\n */\nfunction inputHandler(manager, eventType, input) {\n var pointersLen = input.pointers.length;\n var changedPointersLen = input.changedPointers.length;\n var isFirst = (eventType & INPUT_START && (pointersLen - changedPointersLen === 0));\n var isFinal = (eventType & (INPUT_END | INPUT_CANCEL) && (pointersLen - changedPointersLen === 0));\n\n input.isFirst = !!isFirst;\n input.isFinal = !!isFinal;\n\n if (isFirst) {\n manager.session = {};\n }\n\n // source event is the normalized value of the domEvents\n // like 'touchstart, mouseup, pointerdown'\n input.eventType = eventType;\n\n // compute scale, rotation etc\n computeInputData(manager, input);\n\n // emit secret event\n manager.emit('hammer.input', input);\n\n manager.recognize(input);\n manager.session.prevInput = input;\n}\n\n/**\n * extend the data with some usable properties like scale, rotate, velocity etc\n * @param {Object} manager\n * @param {Object} input\n */\nfunction computeInputData(manager, input) {\n var session = manager.session;\n var pointers = input.pointers;\n var pointersLength = pointers.length;\n\n // store the first input to calculate the distance and direction\n if (!session.firstInput) {\n session.firstInput = simpleCloneInputData(input);\n }\n\n // to compute scale and rotation we need to store the multiple touches\n if (pointersLength > 1 && !session.firstMultiple) {\n session.firstMultiple = simpleCloneInputData(input);\n } else if (pointersLength === 1) {\n session.firstMultiple = false;\n }\n\n var firstInput = session.firstInput;\n var firstMultiple = session.firstMultiple;\n var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center;\n\n var center = input.center = getCenter(pointers);\n input.timeStamp = now();\n input.deltaTime = input.timeStamp - firstInput.timeStamp;\n\n input.angle = getAngle(offsetCenter, center);\n input.distance = getDistance(offsetCenter, center);\n\n computeDeltaXY(session, input);\n input.offsetDirection = getDirection(input.deltaX, input.deltaY);\n\n var overallVelocity = getVelocity(input.deltaTime, input.deltaX, input.deltaY);\n input.overallVelocityX = overallVelocity.x;\n input.overallVelocityY = overallVelocity.y;\n input.overallVelocity = (abs(overallVelocity.x) > abs(overallVelocity.y)) ? overallVelocity.x : overallVelocity.y;\n\n input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1;\n input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0;\n\n input.maxPointers = !session.prevInput ? input.pointers.length : ((input.pointers.length >\n session.prevInput.maxPointers) ? input.pointers.length : session.prevInput.maxPointers);\n\n computeIntervalInputData(session, input);\n\n // find the correct target\n var target = manager.element;\n if (hasParent(input.srcEvent.target, target)) {\n target = input.srcEvent.target;\n }\n input.target = target;\n}\n\nfunction computeDeltaXY(session, input) {\n var center = input.center;\n var offset = session.offsetDelta || {};\n var prevDelta = session.prevDelta || {};\n var prevInput = session.prevInput || {};\n\n if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) {\n prevDelta = session.prevDelta = {\n x: prevInput.deltaX || 0,\n y: prevInput.deltaY || 0\n };\n\n offset = session.offsetDelta = {\n x: center.x,\n y: center.y\n };\n }\n\n input.deltaX = prevDelta.x + (center.x - offset.x);\n input.deltaY = prevDelta.y + (center.y - offset.y);\n}\n\n/**\n * velocity is calculated every x ms\n * @param {Object} session\n * @param {Object} input\n */\nfunction computeIntervalInputData(session, input) {\n var last = session.lastInterval || input,\n deltaTime = input.timeStamp - last.timeStamp,\n velocity, velocityX, velocityY, direction;\n\n if (input.eventType != INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) {\n var deltaX = input.deltaX - last.deltaX;\n var deltaY = input.deltaY - last.deltaY;\n\n var v = getVelocity(deltaTime, deltaX, deltaY);\n velocityX = v.x;\n velocityY = v.y;\n velocity = (abs(v.x) > abs(v.y)) ? v.x : v.y;\n direction = getDirection(deltaX, deltaY);\n\n session.lastInterval = input;\n } else {\n // use latest velocity info if it doesn't overtake a minimum period\n velocity = last.velocity;\n velocityX = last.velocityX;\n velocityY = last.velocityY;\n direction = last.direction;\n }\n\n input.velocity = velocity;\n input.velocityX = velocityX;\n input.velocityY = velocityY;\n input.direction = direction;\n}\n\n/**\n * create a simple clone from the input used for storage of firstInput and firstMultiple\n * @param {Object} input\n * @returns {Object} clonedInputData\n */\nfunction simpleCloneInputData(input) {\n // make a simple copy of the pointers because we will get a reference if we don't\n // we only need clientXY for the calculations\n var pointers = [];\n var i = 0;\n while (i < input.pointers.length) {\n pointers[i] = {\n clientX: round(input.pointers[i].clientX),\n clientY: round(input.pointers[i].clientY)\n };\n i++;\n }\n\n return {\n timeStamp: now(),\n pointers: pointers,\n center: getCenter(pointers),\n deltaX: input.deltaX,\n deltaY: input.deltaY\n };\n}\n\n/**\n * get the center of all the pointers\n * @param {Array} pointers\n * @return {Object} center contains `x` and `y` properties\n */\nfunction getCenter(pointers) {\n var pointersLength = pointers.length;\n\n // no need to loop when only one touch\n if (pointersLength === 1) {\n return {\n x: round(pointers[0].clientX),\n y: round(pointers[0].clientY)\n };\n }\n\n var x = 0, y = 0, i = 0;\n while (i < pointersLength) {\n x += pointers[i].clientX;\n y += pointers[i].clientY;\n i++;\n }\n\n return {\n x: round(x / pointersLength),\n y: round(y / pointersLength)\n };\n}\n\n/**\n * calculate the velocity between two points. unit is in px per ms.\n * @param {Number} deltaTime\n * @param {Number} x\n * @param {Number} y\n * @return {Object} velocity `x` and `y`\n */\nfunction getVelocity(deltaTime, x, y) {\n return {\n x: x / deltaTime || 0,\n y: y / deltaTime || 0\n };\n}\n\n/**\n * get the direction between two points\n * @param {Number} x\n * @param {Number} y\n * @return {Number} direction\n */\nfunction getDirection(x, y) {\n if (x === y) {\n return DIRECTION_NONE;\n }\n\n if (abs(x) >= abs(y)) {\n return x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;\n }\n return y < 0 ? DIRECTION_UP : DIRECTION_DOWN;\n}\n\n/**\n * calculate the absolute distance between two points\n * @param {Object} p1 {x, y}\n * @param {Object} p2 {x, y}\n * @param {Array} [props] containing x and y keys\n * @return {Number} distance\n */\nfunction getDistance(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n var x = p2[props[0]] - p1[props[0]],\n y = p2[props[1]] - p1[props[1]];\n\n return Math.sqrt((x * x) + (y * y));\n}\n\n/**\n * calculate the angle between two coordinates\n * @param {Object} p1\n * @param {Object} p2\n * @param {Array} [props] containing x and y keys\n * @return {Number} angle\n */\nfunction getAngle(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n var x = p2[props[0]] - p1[props[0]],\n y = p2[props[1]] - p1[props[1]];\n return Math.atan2(y, x) * 180 / Math.PI;\n}\n\n/**\n * calculate the rotation degrees between two pointersets\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} rotation\n */\nfunction getRotation(start, end) {\n return getAngle(end[1], end[0], PROPS_CLIENT_XY) + getAngle(start[1], start[0], PROPS_CLIENT_XY);\n}\n\n/**\n * calculate the scale factor between two pointersets\n * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} scale\n */\nfunction getScale(start, end) {\n return getDistance(end[0], end[1], PROPS_CLIENT_XY) / getDistance(start[0], start[1], PROPS_CLIENT_XY);\n}\n\nvar MOUSE_INPUT_MAP = {\n mousedown: INPUT_START,\n mousemove: INPUT_MOVE,\n mouseup: INPUT_END\n};\n\nvar MOUSE_ELEMENT_EVENTS = 'mousedown';\nvar MOUSE_WINDOW_EVENTS = 'mousemove mouseup';\n\n/**\n * Mouse events input\n * @constructor\n * @extends Input\n */\nfunction MouseInput() {\n this.evEl = MOUSE_ELEMENT_EVENTS;\n this.evWin = MOUSE_WINDOW_EVENTS;\n\n this.pressed = false; // mousedown state\n\n Input.apply(this, arguments);\n}\n\ninherit(MouseInput, Input, {\n /**\n * handle mouse events\n * @param {Object} ev\n */\n handler: function MEhandler(ev) {\n var eventType = MOUSE_INPUT_MAP[ev.type];\n\n // on start we want to have the left mouse button down\n if (eventType & INPUT_START && ev.button === 0) {\n this.pressed = true;\n }\n\n if (eventType & INPUT_MOVE && ev.which !== 1) {\n eventType = INPUT_END;\n }\n\n // mouse must be down\n if (!this.pressed) {\n return;\n }\n\n if (eventType & INPUT_END) {\n this.pressed = false;\n }\n\n this.callback(this.manager, eventType, {\n pointers: [ev],\n changedPointers: [ev],\n pointerType: INPUT_TYPE_MOUSE,\n srcEvent: ev\n });\n }\n});\n\nvar POINTER_INPUT_MAP = {\n pointerdown: INPUT_START,\n pointermove: INPUT_MOVE,\n pointerup: INPUT_END,\n pointercancel: INPUT_CANCEL,\n pointerout: INPUT_CANCEL\n};\n\n// in IE10 the pointer types is defined as an enum\nvar IE10_POINTER_TYPE_ENUM = {\n 2: INPUT_TYPE_TOUCH,\n 3: INPUT_TYPE_PEN,\n 4: INPUT_TYPE_MOUSE,\n 5: INPUT_TYPE_KINECT // see https://twitter.com/jacobrossi/status/480596438489890816\n};\n\nvar POINTER_ELEMENT_EVENTS = 'pointerdown';\nvar POINTER_WINDOW_EVENTS = 'pointermove pointerup pointercancel';\n\n// IE10 has prefixed support, and case-sensitive\nif (window.MSPointerEvent && !window.PointerEvent) {\n POINTER_ELEMENT_EVENTS = 'MSPointerDown';\n POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel';\n}\n\n/**\n * Pointer events input\n * @constructor\n * @extends Input\n */\nfunction PointerEventInput() {\n this.evEl = POINTER_ELEMENT_EVENTS;\n this.evWin = POINTER_WINDOW_EVENTS;\n\n Input.apply(this, arguments);\n\n this.store = (this.manager.session.pointerEvents = []);\n}\n\ninherit(PointerEventInput, Input, {\n /**\n * handle mouse events\n * @param {Object} ev\n */\n handler: function PEhandler(ev) {\n var store = this.store;\n var removePointer = false;\n\n var eventTypeNormalized = ev.type.toLowerCase().replace('ms', '');\n var eventType = POINTER_INPUT_MAP[eventTypeNormalized];\n var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType;\n\n var isTouch = (pointerType == INPUT_TYPE_TOUCH);\n\n // get index of the event in the store\n var storeIndex = inArray(store, ev.pointerId, 'pointerId');\n\n // start and mouse must be down\n if (eventType & INPUT_START && (ev.button === 0 || isTouch)) {\n if (storeIndex < 0) {\n store.push(ev);\n storeIndex = store.length - 1;\n }\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n removePointer = true;\n }\n\n // it not found, so the pointer hasn't been down (so it's probably a hover)\n if (storeIndex < 0) {\n return;\n }\n\n // update the event in the store\n store[storeIndex] = ev;\n\n this.callback(this.manager, eventType, {\n pointers: store,\n changedPointers: [ev],\n pointerType: pointerType,\n srcEvent: ev\n });\n\n if (removePointer) {\n // remove from the store\n store.splice(storeIndex, 1);\n }\n }\n});\n\nvar SINGLE_TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\n\nvar SINGLE_TOUCH_TARGET_EVENTS = 'touchstart';\nvar SINGLE_TOUCH_WINDOW_EVENTS = 'touchstart touchmove touchend touchcancel';\n\n/**\n * Touch events input\n * @constructor\n * @extends Input\n */\nfunction SingleTouchInput() {\n this.evTarget = SINGLE_TOUCH_TARGET_EVENTS;\n this.evWin = SINGLE_TOUCH_WINDOW_EVENTS;\n this.started = false;\n\n Input.apply(this, arguments);\n}\n\ninherit(SingleTouchInput, Input, {\n handler: function TEhandler(ev) {\n var type = SINGLE_TOUCH_INPUT_MAP[ev.type];\n\n // should we handle the touch events?\n if (type === INPUT_START) {\n this.started = true;\n }\n\n if (!this.started) {\n return;\n }\n\n var touches = normalizeSingleTouches.call(this, ev, type);\n\n // when done, reset the started state\n if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) {\n this.started = false;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n }\n});\n\n/**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\nfunction normalizeSingleTouches(ev, type) {\n var all = toArray(ev.touches);\n var changed = toArray(ev.changedTouches);\n\n if (type & (INPUT_END | INPUT_CANCEL)) {\n all = uniqueArray(all.concat(changed), 'identifier', true);\n }\n\n return [all, changed];\n}\n\nvar TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\n\nvar TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel';\n\n/**\n * Multi-user touch events input\n * @constructor\n * @extends Input\n */\nfunction TouchInput() {\n this.evTarget = TOUCH_TARGET_EVENTS;\n this.targetIds = {};\n\n Input.apply(this, arguments);\n}\n\ninherit(TouchInput, Input, {\n handler: function MTEhandler(ev) {\n var type = TOUCH_INPUT_MAP[ev.type];\n var touches = getTouches.call(this, ev, type);\n if (!touches) {\n return;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n }\n});\n\n/**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\nfunction getTouches(ev, type) {\n var allTouches = toArray(ev.touches);\n var targetIds = this.targetIds;\n\n // when there is only one touch, the process can be simplified\n if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) {\n targetIds[allTouches[0].identifier] = true;\n return [allTouches, allTouches];\n }\n\n var i,\n targetTouches,\n changedTouches = toArray(ev.changedTouches),\n changedTargetTouches = [],\n target = this.target;\n\n // get target touches from touches\n targetTouches = allTouches.filter(function(touch) {\n return hasParent(touch.target, target);\n });\n\n // collect touches\n if (type === INPUT_START) {\n i = 0;\n while (i < targetTouches.length) {\n targetIds[targetTouches[i].identifier] = true;\n i++;\n }\n }\n\n // filter changed touches to only contain touches that exist in the collected target ids\n i = 0;\n while (i < changedTouches.length) {\n if (targetIds[changedTouches[i].identifier]) {\n changedTargetTouches.push(changedTouches[i]);\n }\n\n // cleanup removed touches\n if (type & (INPUT_END | INPUT_CANCEL)) {\n delete targetIds[changedTouches[i].identifier];\n }\n i++;\n }\n\n if (!changedTargetTouches.length) {\n return;\n }\n\n return [\n // merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel'\n uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true),\n changedTargetTouches\n ];\n}\n\n/**\n * Combined touch and mouse input\n *\n * Touch has a higher priority then mouse, and while touching no mouse events are allowed.\n * This because touch devices also emit mouse events while doing a touch.\n *\n * @constructor\n * @extends Input\n */\n\nvar DEDUP_TIMEOUT = 2500;\nvar DEDUP_DISTANCE = 25;\n\nfunction TouchMouseInput() {\n Input.apply(this, arguments);\n\n var handler = bindFn(this.handler, this);\n this.touch = new TouchInput(this.manager, handler);\n this.mouse = new MouseInput(this.manager, handler);\n\n this.primaryTouch = null;\n this.lastTouches = [];\n}\n\ninherit(TouchMouseInput, Input, {\n /**\n * handle mouse and touch events\n * @param {Hammer} manager\n * @param {String} inputEvent\n * @param {Object} inputData\n */\n handler: function TMEhandler(manager, inputEvent, inputData) {\n var isTouch = (inputData.pointerType == INPUT_TYPE_TOUCH),\n isMouse = (inputData.pointerType == INPUT_TYPE_MOUSE);\n\n if (isMouse && inputData.sourceCapabilities && inputData.sourceCapabilities.firesTouchEvents) {\n return;\n }\n\n // when we're in a touch event, record touches to de-dupe synthetic mouse event\n if (isTouch) {\n recordTouches.call(this, inputEvent, inputData);\n } else if (isMouse && isSyntheticEvent.call(this, inputData)) {\n return;\n }\n\n this.callback(manager, inputEvent, inputData);\n },\n\n /**\n * remove the event listeners\n */\n destroy: function destroy() {\n this.touch.destroy();\n this.mouse.destroy();\n }\n});\n\nfunction recordTouches(eventType, eventData) {\n if (eventType & INPUT_START) {\n this.primaryTouch = eventData.changedPointers[0].identifier;\n setLastTouch.call(this, eventData);\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n setLastTouch.call(this, eventData);\n }\n}\n\nfunction setLastTouch(eventData) {\n var touch = eventData.changedPointers[0];\n\n if (touch.identifier === this.primaryTouch) {\n var lastTouch = {x: touch.clientX, y: touch.clientY};\n this.lastTouches.push(lastTouch);\n var lts = this.lastTouches;\n var removeLastTouch = function() {\n var i = lts.indexOf(lastTouch);\n if (i > -1) {\n lts.splice(i, 1);\n }\n };\n setTimeout(removeLastTouch, DEDUP_TIMEOUT);\n }\n}\n\nfunction isSyntheticEvent(eventData) {\n var x = eventData.srcEvent.clientX, y = eventData.srcEvent.clientY;\n for (var i = 0; i < this.lastTouches.length; i++) {\n var t = this.lastTouches[i];\n var dx = Math.abs(x - t.x), dy = Math.abs(y - t.y);\n if (dx <= DEDUP_DISTANCE && dy <= DEDUP_DISTANCE) {\n return true;\n }\n }\n return false;\n}\n\nvar PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, 'touchAction');\nvar NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined;\n\n// magical touchAction value\nvar TOUCH_ACTION_COMPUTE = 'compute';\nvar TOUCH_ACTION_AUTO = 'auto';\nvar TOUCH_ACTION_MANIPULATION = 'manipulation'; // not implemented\nvar TOUCH_ACTION_NONE = 'none';\nvar TOUCH_ACTION_PAN_X = 'pan-x';\nvar TOUCH_ACTION_PAN_Y = 'pan-y';\nvar TOUCH_ACTION_MAP = getTouchActionProps();\n\n/**\n * Touch Action\n * sets the touchAction property or uses the js alternative\n * @param {Manager} manager\n * @param {String} value\n * @constructor\n */\nfunction TouchAction(manager, value) {\n this.manager = manager;\n this.set(value);\n}\n\nTouchAction.prototype = {\n /**\n * set the touchAction value on the element or enable the polyfill\n * @param {String} value\n */\n set: function(value) {\n // find out the touch-action by the event handlers\n if (value == TOUCH_ACTION_COMPUTE) {\n value = this.compute();\n }\n\n if (NATIVE_TOUCH_ACTION && this.manager.element.style && TOUCH_ACTION_MAP[value]) {\n this.manager.element.style[PREFIXED_TOUCH_ACTION] = value;\n }\n this.actions = value.toLowerCase().trim();\n },\n\n /**\n * just re-set the touchAction value\n */\n update: function() {\n this.set(this.manager.options.touchAction);\n },\n\n /**\n * compute the value for the touchAction property based on the recognizer's settings\n * @returns {String} value\n */\n compute: function() {\n var actions = [];\n each(this.manager.recognizers, function(recognizer) {\n if (boolOrFn(recognizer.options.enable, [recognizer])) {\n actions = actions.concat(recognizer.getTouchAction());\n }\n });\n return cleanTouchActions(actions.join(' '));\n },\n\n /**\n * this method is called on each input cycle and provides the preventing of the browser behavior\n * @param {Object} input\n */\n preventDefaults: function(input) {\n var srcEvent = input.srcEvent;\n var direction = input.offsetDirection;\n\n // if the touch action did prevented once this session\n if (this.manager.session.prevented) {\n srcEvent.preventDefault();\n return;\n }\n\n var actions = this.actions;\n var hasNone = inStr(actions, TOUCH_ACTION_NONE) && !TOUCH_ACTION_MAP[TOUCH_ACTION_NONE];\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_Y];\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_X];\n\n if (hasNone) {\n //do not prevent defaults if this is a tap gesture\n\n var isTapPointer = input.pointers.length === 1;\n var isTapMovement = input.distance < 2;\n var isTapTouchTime = input.deltaTime < 250;\n\n if (isTapPointer && isTapMovement && isTapTouchTime) {\n return;\n }\n }\n\n if (hasPanX && hasPanY) {\n // `pan-x pan-y` means browser handles all scrolling/panning, do not prevent\n return;\n }\n\n if (hasNone ||\n (hasPanY && direction & DIRECTION_HORIZONTAL) ||\n (hasPanX && direction & DIRECTION_VERTICAL)) {\n return this.preventSrc(srcEvent);\n }\n },\n\n /**\n * call preventDefault to prevent the browser's default behavior (scrolling in most cases)\n * @param {Object} srcEvent\n */\n preventSrc: function(srcEvent) {\n this.manager.session.prevented = true;\n srcEvent.preventDefault();\n }\n};\n\n/**\n * when the touchActions are collected they are not a valid value, so we need to clean things up. *\n * @param {String} actions\n * @returns {*}\n */\nfunction cleanTouchActions(actions) {\n // none\n if (inStr(actions, TOUCH_ACTION_NONE)) {\n return TOUCH_ACTION_NONE;\n }\n\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X);\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y);\n\n // if both pan-x and pan-y are set (different recognizers\n // for different directions, e.g. horizontal pan but vertical swipe?)\n // we need none (as otherwise with pan-x pan-y combined none of these\n // recognizers will work, since the browser would handle all panning\n if (hasPanX && hasPanY) {\n return TOUCH_ACTION_NONE;\n }\n\n // pan-x OR pan-y\n if (hasPanX || hasPanY) {\n return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y;\n }\n\n // manipulation\n if (inStr(actions, TOUCH_ACTION_MANIPULATION)) {\n return TOUCH_ACTION_MANIPULATION;\n }\n\n return TOUCH_ACTION_AUTO;\n}\n\nfunction getTouchActionProps() {\n if (!NATIVE_TOUCH_ACTION) {\n return false;\n }\n var touchMap = {};\n var cssSupports = window.CSS && window.CSS.supports;\n ['auto', 'manipulation', 'pan-y', 'pan-x', 'pan-x pan-y', 'none'].forEach(function(val) {\n\n // If css.supports is not supported but there is native touch-action assume it supports\n // all values. This is the case for IE 10 and 11.\n touchMap[val] = cssSupports ? window.CSS.supports('touch-action', val) : true;\n });\n return touchMap;\n}\n\n/**\n * Recognizer flow explained; *\n * All recognizers have the initial state of POSSIBLE when a input session starts.\n * The definition of a input session is from the first input until the last input, with all it's movement in it. *\n * Example session for mouse-input: mousedown -> mousemove -> mouseup\n *\n * On each recognizing cycle (see Manager.recognize) the .recognize() method is executed\n * which determines with state it should be.\n *\n * If the recognizer has the state FAILED, CANCELLED or RECOGNIZED (equals ENDED), it is reset to\n * POSSIBLE to give it another change on the next cycle.\n *\n * Possible\n * |\n * +-----+---------------+\n * | |\n * +-----+-----+ |\n * | | |\n * Failed Cancelled |\n * +-------+------+\n * | |\n * Recognized Began\n * |\n * Changed\n * |\n * Ended/Recognized\n */\nvar STATE_POSSIBLE = 1;\nvar STATE_BEGAN = 2;\nvar STATE_CHANGED = 4;\nvar STATE_ENDED = 8;\nvar STATE_RECOGNIZED = STATE_ENDED;\nvar STATE_CANCELLED = 16;\nvar STATE_FAILED = 32;\n\n/**\n * Recognizer\n * Every recognizer needs to extend from this class.\n * @constructor\n * @param {Object} options\n */\nfunction Recognizer(options) {\n this.options = assign({}, this.defaults, options || {});\n\n this.id = uniqueId();\n\n this.manager = null;\n\n // default is enable true\n this.options.enable = ifUndefined(this.options.enable, true);\n\n this.state = STATE_POSSIBLE;\n\n this.simultaneous = {};\n this.requireFail = [];\n}\n\nRecognizer.prototype = {\n /**\n * @virtual\n * @type {Object}\n */\n defaults: {},\n\n /**\n * set options\n * @param {Object} options\n * @return {Recognizer}\n */\n set: function(options) {\n assign(this.options, options);\n\n // also update the touchAction, in case something changed about the directions/enabled state\n this.manager && this.manager.touchAction.update();\n return this;\n },\n\n /**\n * recognize simultaneous with an other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n recognizeWith: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'recognizeWith', this)) {\n return this;\n }\n\n var simultaneous = this.simultaneous;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n if (!simultaneous[otherRecognizer.id]) {\n simultaneous[otherRecognizer.id] = otherRecognizer;\n otherRecognizer.recognizeWith(this);\n }\n return this;\n },\n\n /**\n * drop the simultaneous link. it doesnt remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n dropRecognizeWith: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRecognizeWith', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n delete this.simultaneous[otherRecognizer.id];\n return this;\n },\n\n /**\n * recognizer can only run when an other is failing\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n requireFailure: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'requireFailure', this)) {\n return this;\n }\n\n var requireFail = this.requireFail;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n if (inArray(requireFail, otherRecognizer) === -1) {\n requireFail.push(otherRecognizer);\n otherRecognizer.requireFailure(this);\n }\n return this;\n },\n\n /**\n * drop the requireFailure link. it does not remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n dropRequireFailure: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRequireFailure', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n var index = inArray(this.requireFail, otherRecognizer);\n if (index > -1) {\n this.requireFail.splice(index, 1);\n }\n return this;\n },\n\n /**\n * has require failures boolean\n * @returns {boolean}\n */\n hasRequireFailures: function() {\n return this.requireFail.length > 0;\n },\n\n /**\n * if the recognizer can recognize simultaneous with an other recognizer\n * @param {Recognizer} otherRecognizer\n * @returns {Boolean}\n */\n canRecognizeWith: function(otherRecognizer) {\n return !!this.simultaneous[otherRecognizer.id];\n },\n\n /**\n * You should use `tryEmit` instead of `emit` directly to check\n * that all the needed recognizers has failed before emitting.\n * @param {Object} input\n */\n emit: function(input) {\n var self = this;\n var state = this.state;\n\n function emit(event) {\n self.manager.emit(event, input);\n }\n\n // 'panstart' and 'panmove'\n if (state < STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n\n emit(self.options.event); // simple 'eventName' events\n\n if (input.additionalEvent) { // additional event(panleft, panright, pinchin, pinchout...)\n emit(input.additionalEvent);\n }\n\n // panend and pancancel\n if (state >= STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n },\n\n /**\n * Check that all the require failure recognizers has failed,\n * if true, it emits a gesture event,\n * otherwise, setup the state to FAILED.\n * @param {Object} input\n */\n tryEmit: function(input) {\n if (this.canEmit()) {\n return this.emit(input);\n }\n // it's failing anyway\n this.state = STATE_FAILED;\n },\n\n /**\n * can we emit?\n * @returns {boolean}\n */\n canEmit: function() {\n var i = 0;\n while (i < this.requireFail.length) {\n if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) {\n return false;\n }\n i++;\n }\n return true;\n },\n\n /**\n * update the recognizer\n * @param {Object} inputData\n */\n recognize: function(inputData) {\n // make a new copy of the inputData\n // so we can change the inputData without messing up the other recognizers\n var inputDataClone = assign({}, inputData);\n\n // is is enabled and allow recognizing?\n if (!boolOrFn(this.options.enable, [this, inputDataClone])) {\n this.reset();\n this.state = STATE_FAILED;\n return;\n }\n\n // reset when we've reached the end\n if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) {\n this.state = STATE_POSSIBLE;\n }\n\n this.state = this.process(inputDataClone);\n\n // the recognizer has recognized a gesture\n // so trigger an event\n if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) {\n this.tryEmit(inputDataClone);\n }\n },\n\n /**\n * return the state of the recognizer\n * the actual recognizing happens in this method\n * @virtual\n * @param {Object} inputData\n * @returns {Const} STATE\n */\n process: function(inputData) { }, // jshint ignore:line\n\n /**\n * return the preferred touch-action\n * @virtual\n * @returns {Array}\n */\n getTouchAction: function() { },\n\n /**\n * called when the gesture isn't allowed to recognize\n * like when another is being recognized or it is disabled\n * @virtual\n */\n reset: function() { }\n};\n\n/**\n * get a usable string, used as event postfix\n * @param {Const} state\n * @returns {String} state\n */\nfunction stateStr(state) {\n if (state & STATE_CANCELLED) {\n return 'cancel';\n } else if (state & STATE_ENDED) {\n return 'end';\n } else if (state & STATE_CHANGED) {\n return 'move';\n } else if (state & STATE_BEGAN) {\n return 'start';\n }\n return '';\n}\n\n/**\n * direction cons to string\n * @param {Const} direction\n * @returns {String}\n */\nfunction directionStr(direction) {\n if (direction == DIRECTION_DOWN) {\n return 'down';\n } else if (direction == DIRECTION_UP) {\n return 'up';\n } else if (direction == DIRECTION_LEFT) {\n return 'left';\n } else if (direction == DIRECTION_RIGHT) {\n return 'right';\n }\n return '';\n}\n\n/**\n * get a recognizer by name if it is bound to a manager\n * @param {Recognizer|String} otherRecognizer\n * @param {Recognizer} recognizer\n * @returns {Recognizer}\n */\nfunction getRecognizerByNameIfManager(otherRecognizer, recognizer) {\n var manager = recognizer.manager;\n if (manager) {\n return manager.get(otherRecognizer);\n }\n return otherRecognizer;\n}\n\n/**\n * This recognizer is just used as a base for the simple attribute recognizers.\n * @constructor\n * @extends Recognizer\n */\nfunction AttrRecognizer() {\n Recognizer.apply(this, arguments);\n}\n\ninherit(AttrRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof AttrRecognizer\n */\n defaults: {\n /**\n * @type {Number}\n * @default 1\n */\n pointers: 1\n },\n\n /**\n * Used to check if it the recognizer receives valid input, like input.distance > 10.\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {Boolean} recognized\n */\n attrTest: function(input) {\n var optionPointers = this.options.pointers;\n return optionPointers === 0 || input.pointers.length === optionPointers;\n },\n\n /**\n * Process the input and return the state for the recognizer\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {*} State\n */\n process: function(input) {\n var state = this.state;\n var eventType = input.eventType;\n\n var isRecognized = state & (STATE_BEGAN | STATE_CHANGED);\n var isValid = this.attrTest(input);\n\n // on cancel input and we've recognized before, return STATE_CANCELLED\n if (isRecognized && (eventType & INPUT_CANCEL || !isValid)) {\n return state | STATE_CANCELLED;\n } else if (isRecognized || isValid) {\n if (eventType & INPUT_END) {\n return state | STATE_ENDED;\n } else if (!(state & STATE_BEGAN)) {\n return STATE_BEGAN;\n }\n return state | STATE_CHANGED;\n }\n return STATE_FAILED;\n }\n});\n\n/**\n * Pan\n * Recognized when the pointer is down and moved in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction PanRecognizer() {\n AttrRecognizer.apply(this, arguments);\n\n this.pX = null;\n this.pY = null;\n}\n\ninherit(PanRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof PanRecognizer\n */\n defaults: {\n event: 'pan',\n threshold: 10,\n pointers: 1,\n direction: DIRECTION_ALL\n },\n\n getTouchAction: function() {\n var direction = this.options.direction;\n var actions = [];\n if (direction & DIRECTION_HORIZONTAL) {\n actions.push(TOUCH_ACTION_PAN_Y);\n }\n if (direction & DIRECTION_VERTICAL) {\n actions.push(TOUCH_ACTION_PAN_X);\n }\n return actions;\n },\n\n directionTest: function(input) {\n var options = this.options;\n var hasMoved = true;\n var distance = input.distance;\n var direction = input.direction;\n var x = input.deltaX;\n var y = input.deltaY;\n\n // lock to axis?\n if (!(direction & options.direction)) {\n if (options.direction & DIRECTION_HORIZONTAL) {\n direction = (x === 0) ? DIRECTION_NONE : (x < 0) ? DIRECTION_LEFT : DIRECTION_RIGHT;\n hasMoved = x != this.pX;\n distance = Math.abs(input.deltaX);\n } else {\n direction = (y === 0) ? DIRECTION_NONE : (y < 0) ? DIRECTION_UP : DIRECTION_DOWN;\n hasMoved = y != this.pY;\n distance = Math.abs(input.deltaY);\n }\n }\n input.direction = direction;\n return hasMoved && distance > options.threshold && direction & options.direction;\n },\n\n attrTest: function(input) {\n return AttrRecognizer.prototype.attrTest.call(this, input) &&\n (this.state & STATE_BEGAN || (!(this.state & STATE_BEGAN) && this.directionTest(input)));\n },\n\n emit: function(input) {\n\n this.pX = input.deltaX;\n this.pY = input.deltaY;\n\n var direction = directionStr(input.direction);\n\n if (direction) {\n input.additionalEvent = this.options.event + direction;\n }\n this._super.emit.call(this, input);\n }\n});\n\n/**\n * Pinch\n * Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out).\n * @constructor\n * @extends AttrRecognizer\n */\nfunction PinchRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(PinchRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof PinchRecognizer\n */\n defaults: {\n event: 'pinch',\n threshold: 0,\n pointers: 2\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_NONE];\n },\n\n attrTest: function(input) {\n return this._super.attrTest.call(this, input) &&\n (Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN);\n },\n\n emit: function(input) {\n if (input.scale !== 1) {\n var inOut = input.scale < 1 ? 'in' : 'out';\n input.additionalEvent = this.options.event + inOut;\n }\n this._super.emit.call(this, input);\n }\n});\n\n/**\n * Press\n * Recognized when the pointer is down for x ms without any movement.\n * @constructor\n * @extends Recognizer\n */\nfunction PressRecognizer() {\n Recognizer.apply(this, arguments);\n\n this._timer = null;\n this._input = null;\n}\n\ninherit(PressRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof PressRecognizer\n */\n defaults: {\n event: 'press',\n pointers: 1,\n time: 251, // minimal time of the pointer to be pressed\n threshold: 9 // a minimal movement is ok, but keep it low\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_AUTO];\n },\n\n process: function(input) {\n var options = this.options;\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTime = input.deltaTime > options.time;\n\n this._input = input;\n\n // we only allow little movement\n // and we've reached an end event, so a tap is possible\n if (!validMovement || !validPointers || (input.eventType & (INPUT_END | INPUT_CANCEL) && !validTime)) {\n this.reset();\n } else if (input.eventType & INPUT_START) {\n this.reset();\n this._timer = setTimeoutContext(function() {\n this.state = STATE_RECOGNIZED;\n this.tryEmit();\n }, options.time, this);\n } else if (input.eventType & INPUT_END) {\n return STATE_RECOGNIZED;\n }\n return STATE_FAILED;\n },\n\n reset: function() {\n clearTimeout(this._timer);\n },\n\n emit: function(input) {\n if (this.state !== STATE_RECOGNIZED) {\n return;\n }\n\n if (input && (input.eventType & INPUT_END)) {\n this.manager.emit(this.options.event + 'up', input);\n } else {\n this._input.timeStamp = now();\n this.manager.emit(this.options.event, this._input);\n }\n }\n});\n\n/**\n * Rotate\n * Recognized when two or more pointer are moving in a circular motion.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction RotateRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(RotateRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof RotateRecognizer\n */\n defaults: {\n event: 'rotate',\n threshold: 0,\n pointers: 2\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_NONE];\n },\n\n attrTest: function(input) {\n return this._super.attrTest.call(this, input) &&\n (Math.abs(input.rotation) > this.options.threshold || this.state & STATE_BEGAN);\n }\n});\n\n/**\n * Swipe\n * Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction SwipeRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(SwipeRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof SwipeRecognizer\n */\n defaults: {\n event: 'swipe',\n threshold: 10,\n velocity: 0.3,\n direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL,\n pointers: 1\n },\n\n getTouchAction: function() {\n return PanRecognizer.prototype.getTouchAction.call(this);\n },\n\n attrTest: function(input) {\n var direction = this.options.direction;\n var velocity;\n\n if (direction & (DIRECTION_HORIZONTAL | DIRECTION_VERTICAL)) {\n velocity = input.overallVelocity;\n } else if (direction & DIRECTION_HORIZONTAL) {\n velocity = input.overallVelocityX;\n } else if (direction & DIRECTION_VERTICAL) {\n velocity = input.overallVelocityY;\n }\n\n return this._super.attrTest.call(this, input) &&\n direction & input.offsetDirection &&\n input.distance > this.options.threshold &&\n input.maxPointers == this.options.pointers &&\n abs(velocity) > this.options.velocity && input.eventType & INPUT_END;\n },\n\n emit: function(input) {\n var direction = directionStr(input.offsetDirection);\n if (direction) {\n this.manager.emit(this.options.event + direction, input);\n }\n\n this.manager.emit(this.options.event, input);\n }\n});\n\n/**\n * A tap is ecognized when the pointer is doing a small tap/click. Multiple taps are recognized if they occur\n * between the given interval and position. The delay option can be used to recognize multi-taps without firing\n * a single tap.\n *\n * The eventData from the emitted event contains the property `tapCount`, which contains the amount of\n * multi-taps being recognized.\n * @constructor\n * @extends Recognizer\n */\nfunction TapRecognizer() {\n Recognizer.apply(this, arguments);\n\n // previous time and center,\n // used for tap counting\n this.pTime = false;\n this.pCenter = false;\n\n this._timer = null;\n this._input = null;\n this.count = 0;\n}\n\ninherit(TapRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof PinchRecognizer\n */\n defaults: {\n event: 'tap',\n pointers: 1,\n taps: 1,\n interval: 300, // max time between the multi-tap taps\n time: 250, // max time of the pointer to be down (like finger on the screen)\n threshold: 9, // a minimal movement is ok, but keep it low\n posThreshold: 10 // a multi-tap can be a bit off the initial position\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_MANIPULATION];\n },\n\n process: function(input) {\n var options = this.options;\n\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTouchTime = input.deltaTime < options.time;\n\n this.reset();\n\n if ((input.eventType & INPUT_START) && (this.count === 0)) {\n return this.failTimeout();\n }\n\n // we only allow little movement\n // and we've reached an end event, so a tap is possible\n if (validMovement && validTouchTime && validPointers) {\n if (input.eventType != INPUT_END) {\n return this.failTimeout();\n }\n\n var validInterval = this.pTime ? (input.timeStamp - this.pTime < options.interval) : true;\n var validMultiTap = !this.pCenter || getDistance(this.pCenter, input.center) < options.posThreshold;\n\n this.pTime = input.timeStamp;\n this.pCenter = input.center;\n\n if (!validMultiTap || !validInterval) {\n this.count = 1;\n } else {\n this.count += 1;\n }\n\n this._input = input;\n\n // if tap count matches we have recognized it,\n // else it has began recognizing...\n var tapCount = this.count % options.taps;\n if (tapCount === 0) {\n // no failing requirements, immediately trigger the tap event\n // or wait as long as the multitap interval to trigger\n if (!this.hasRequireFailures()) {\n return STATE_RECOGNIZED;\n } else {\n this._timer = setTimeoutContext(function() {\n this.state = STATE_RECOGNIZED;\n this.tryEmit();\n }, options.interval, this);\n return STATE_BEGAN;\n }\n }\n }\n return STATE_FAILED;\n },\n\n failTimeout: function() {\n this._timer = setTimeoutContext(function() {\n this.state = STATE_FAILED;\n }, this.options.interval, this);\n return STATE_FAILED;\n },\n\n reset: function() {\n clearTimeout(this._timer);\n },\n\n emit: function() {\n if (this.state == STATE_RECOGNIZED) {\n this._input.tapCount = this.count;\n this.manager.emit(this.options.event, this._input);\n }\n }\n});\n\n/**\n * Simple way to create a manager with a default set of recognizers.\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\nfunction Hammer(element, options) {\n options = options || {};\n options.recognizers = ifUndefined(options.recognizers, Hammer.defaults.preset);\n return new Manager(element, options);\n}\n\n/**\n * @const {string}\n */\nHammer.VERSION = '2.0.7';\n\n/**\n * default settings\n * @namespace\n */\nHammer.defaults = {\n /**\n * set if DOM events are being triggered.\n * But this is slower and unused by simple implementations, so disabled by default.\n * @type {Boolean}\n * @default false\n */\n domEvents: false,\n\n /**\n * The value for the touchAction property/fallback.\n * When set to `compute` it will magically set the correct value based on the added recognizers.\n * @type {String}\n * @default compute\n */\n touchAction: TOUCH_ACTION_COMPUTE,\n\n /**\n * @type {Boolean}\n * @default true\n */\n enable: true,\n\n /**\n * EXPERIMENTAL FEATURE -- can be removed/changed\n * Change the parent input target element.\n * If Null, then it is being set the to main element.\n * @type {Null|EventTarget}\n * @default null\n */\n inputTarget: null,\n\n /**\n * force an input class\n * @type {Null|Function}\n * @default null\n */\n inputClass: null,\n\n /**\n * Default recognizer setup when calling `Hammer()`\n * When creating a new Manager these will be skipped.\n * @type {Array}\n */\n preset: [\n // RecognizerClass, options, [recognizeWith, ...], [requireFailure, ...]\n [RotateRecognizer, {enable: false}],\n [PinchRecognizer, {enable: false}, ['rotate']],\n [SwipeRecognizer, {direction: DIRECTION_HORIZONTAL}],\n [PanRecognizer, {direction: DIRECTION_HORIZONTAL}, ['swipe']],\n [TapRecognizer],\n [TapRecognizer, {event: 'doubletap', taps: 2}, ['tap']],\n [PressRecognizer]\n ],\n\n /**\n * Some CSS properties can be used to improve the working of Hammer.\n * Add them to this method and they will be set when creating a new Manager.\n * @namespace\n */\n cssProps: {\n /**\n * Disables text selection to improve the dragging gesture. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userSelect: 'none',\n\n /**\n * Disable the Windows Phone grippers when pressing an element.\n * @type {String}\n * @default 'none'\n */\n touchSelect: 'none',\n\n /**\n * Disables the default callout shown when you touch and hold a touch target.\n * On iOS, when you touch and hold a touch target such as a link, Safari displays\n * a callout containing information about the link. This property allows you to disable that callout.\n * @type {String}\n * @default 'none'\n */\n touchCallout: 'none',\n\n /**\n * Specifies whether zooming is enabled. Used by IE10>\n * @type {String}\n * @default 'none'\n */\n contentZooming: 'none',\n\n /**\n * Specifies that an entire element should be draggable instead of its contents. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userDrag: 'none',\n\n /**\n * Overrides the highlight color shown when the user taps a link or a JavaScript\n * clickable element in iOS. This property obeys the alpha value, if specified.\n * @type {String}\n * @default 'rgba(0,0,0,0)'\n */\n tapHighlightColor: 'rgba(0,0,0,0)'\n }\n};\n\nvar STOP = 1;\nvar FORCED_STOP = 2;\n\n/**\n * Manager\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\nfunction Manager(element, options) {\n this.options = assign({}, Hammer.defaults, options || {});\n\n this.options.inputTarget = this.options.inputTarget || element;\n\n this.handlers = {};\n this.session = {};\n this.recognizers = [];\n this.oldCssProps = {};\n\n this.element = element;\n this.input = createInputInstance(this);\n this.touchAction = new TouchAction(this, this.options.touchAction);\n\n toggleCssProps(this, true);\n\n each(this.options.recognizers, function(item) {\n var recognizer = this.add(new (item[0])(item[1]));\n item[2] && recognizer.recognizeWith(item[2]);\n item[3] && recognizer.requireFailure(item[3]);\n }, this);\n}\n\nManager.prototype = {\n /**\n * set options\n * @param {Object} options\n * @returns {Manager}\n */\n set: function(options) {\n assign(this.options, options);\n\n // Options that need a little more setup\n if (options.touchAction) {\n this.touchAction.update();\n }\n if (options.inputTarget) {\n // Clean up existing event listeners and reinitialize\n this.input.destroy();\n this.input.target = options.inputTarget;\n this.input.init();\n }\n return this;\n },\n\n /**\n * stop recognizing for this session.\n * This session will be discarded, when a new [input]start event is fired.\n * When forced, the recognizer cycle is stopped immediately.\n * @param {Boolean} [force]\n */\n stop: function(force) {\n this.session.stopped = force ? FORCED_STOP : STOP;\n },\n\n /**\n * run the recognizers!\n * called by the inputHandler function on every movement of the pointers (touches)\n * it walks through all the recognizers and tries to detect the gesture that is being made\n * @param {Object} inputData\n */\n recognize: function(inputData) {\n var session = this.session;\n if (session.stopped) {\n return;\n }\n\n // run the touch-action polyfill\n this.touchAction.preventDefaults(inputData);\n\n var recognizer;\n var recognizers = this.recognizers;\n\n // this holds the recognizer that is being recognized.\n // so the recognizer's state needs to be BEGAN, CHANGED, ENDED or RECOGNIZED\n // if no recognizer is detecting a thing, it is set to `null`\n var curRecognizer = session.curRecognizer;\n\n // reset when the last recognizer is recognized\n // or when we're in a new session\n if (!curRecognizer || (curRecognizer && curRecognizer.state & STATE_RECOGNIZED)) {\n curRecognizer = session.curRecognizer = null;\n }\n\n var i = 0;\n while (i < recognizers.length) {\n recognizer = recognizers[i];\n\n // find out if we are allowed try to recognize the input for this one.\n // 1. allow if the session is NOT forced stopped (see the .stop() method)\n // 2. allow if we still haven't recognized a gesture in this session, or the this recognizer is the one\n // that is being recognized.\n // 3. allow if the recognizer is allowed to run simultaneous with the current recognized recognizer.\n // this can be setup with the `recognizeWith()` method on the recognizer.\n if (session.stopped !== FORCED_STOP && ( // 1\n !curRecognizer || recognizer == curRecognizer || // 2\n recognizer.canRecognizeWith(curRecognizer))) { // 3\n recognizer.recognize(inputData);\n } else {\n recognizer.reset();\n }\n\n // if the recognizer has been recognizing the input as a valid gesture, we want to store this one as the\n // current active recognizer. but only if we don't already have an active recognizer\n if (!curRecognizer && recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)) {\n curRecognizer = session.curRecognizer = recognizer;\n }\n i++;\n }\n },\n\n /**\n * get a recognizer by its event name.\n * @param {Recognizer|String} recognizer\n * @returns {Recognizer|Null}\n */\n get: function(recognizer) {\n if (recognizer instanceof Recognizer) {\n return recognizer;\n }\n\n var recognizers = this.recognizers;\n for (var i = 0; i < recognizers.length; i++) {\n if (recognizers[i].options.event == recognizer) {\n return recognizers[i];\n }\n }\n return null;\n },\n\n /**\n * add a recognizer to the manager\n * existing recognizers with the same event name will be removed\n * @param {Recognizer} recognizer\n * @returns {Recognizer|Manager}\n */\n add: function(recognizer) {\n if (invokeArrayArg(recognizer, 'add', this)) {\n return this;\n }\n\n // remove existing\n var existing = this.get(recognizer.options.event);\n if (existing) {\n this.remove(existing);\n }\n\n this.recognizers.push(recognizer);\n recognizer.manager = this;\n\n this.touchAction.update();\n return recognizer;\n },\n\n /**\n * remove a recognizer by name or instance\n * @param {Recognizer|String} recognizer\n * @returns {Manager}\n */\n remove: function(recognizer) {\n if (invokeArrayArg(recognizer, 'remove', this)) {\n return this;\n }\n\n recognizer = this.get(recognizer);\n\n // let's make sure this recognizer exists\n if (recognizer) {\n var recognizers = this.recognizers;\n var index = inArray(recognizers, recognizer);\n\n if (index !== -1) {\n recognizers.splice(index, 1);\n this.touchAction.update();\n }\n }\n\n return this;\n },\n\n /**\n * bind event\n * @param {String} events\n * @param {Function} handler\n * @returns {EventEmitter} this\n */\n on: function(events, handler) {\n if (events === undefined) {\n return;\n }\n if (handler === undefined) {\n return;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function(event) {\n handlers[event] = handlers[event] || [];\n handlers[event].push(handler);\n });\n return this;\n },\n\n /**\n * unbind event, leave emit blank to remove all handlers\n * @param {String} events\n * @param {Function} [handler]\n * @returns {EventEmitter} this\n */\n off: function(events, handler) {\n if (events === undefined) {\n return;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function(event) {\n if (!handler) {\n delete handlers[event];\n } else {\n handlers[event] && handlers[event].splice(inArray(handlers[event], handler), 1);\n }\n });\n return this;\n },\n\n /**\n * emit event to the listeners\n * @param {String} event\n * @param {Object} data\n */\n emit: function(event, data) {\n // we also want to trigger dom events\n if (this.options.domEvents) {\n triggerDomEvent(event, data);\n }\n\n // no handlers, so skip it all\n var handlers = this.handlers[event] && this.handlers[event].slice();\n if (!handlers || !handlers.length) {\n return;\n }\n\n data.type = event;\n data.preventDefault = function() {\n data.srcEvent.preventDefault();\n };\n\n var i = 0;\n while (i < handlers.length) {\n handlers[i](data);\n i++;\n }\n },\n\n /**\n * destroy the manager and unbinds all events\n * it doesn't unbind dom events, that is the user own responsibility\n */\n destroy: function() {\n this.element && toggleCssProps(this, false);\n\n this.handlers = {};\n this.session = {};\n this.input.destroy();\n this.element = null;\n }\n};\n\n/**\n * add/remove the css properties as defined in manager.options.cssProps\n * @param {Manager} manager\n * @param {Boolean} add\n */\nfunction toggleCssProps(manager, add) {\n var element = manager.element;\n if (!element.style) {\n return;\n }\n var prop;\n each(manager.options.cssProps, function(value, name) {\n prop = prefixed(element.style, name);\n if (add) {\n manager.oldCssProps[prop] = element.style[prop];\n element.style[prop] = value;\n } else {\n element.style[prop] = manager.oldCssProps[prop] || '';\n }\n });\n if (!add) {\n manager.oldCssProps = {};\n }\n}\n\n/**\n * trigger dom event\n * @param {String} event\n * @param {Object} data\n */\nfunction triggerDomEvent(event, data) {\n var gestureEvent = document.createEvent('Event');\n gestureEvent.initEvent(event, true, true);\n gestureEvent.gesture = data;\n data.target.dispatchEvent(gestureEvent);\n}\n\nassign(Hammer, {\n INPUT_START: INPUT_START,\n INPUT_MOVE: INPUT_MOVE,\n INPUT_END: INPUT_END,\n INPUT_CANCEL: INPUT_CANCEL,\n\n STATE_POSSIBLE: STATE_POSSIBLE,\n STATE_BEGAN: STATE_BEGAN,\n STATE_CHANGED: STATE_CHANGED,\n STATE_ENDED: STATE_ENDED,\n STATE_RECOGNIZED: STATE_RECOGNIZED,\n STATE_CANCELLED: STATE_CANCELLED,\n STATE_FAILED: STATE_FAILED,\n\n DIRECTION_NONE: DIRECTION_NONE,\n DIRECTION_LEFT: DIRECTION_LEFT,\n DIRECTION_RIGHT: DIRECTION_RIGHT,\n DIRECTION_UP: DIRECTION_UP,\n DIRECTION_DOWN: DIRECTION_DOWN,\n DIRECTION_HORIZONTAL: DIRECTION_HORIZONTAL,\n DIRECTION_VERTICAL: DIRECTION_VERTICAL,\n DIRECTION_ALL: DIRECTION_ALL,\n\n Manager: Manager,\n Input: Input,\n TouchAction: TouchAction,\n\n TouchInput: TouchInput,\n MouseInput: MouseInput,\n PointerEventInput: PointerEventInput,\n TouchMouseInput: TouchMouseInput,\n SingleTouchInput: SingleTouchInput,\n\n Recognizer: Recognizer,\n AttrRecognizer: AttrRecognizer,\n Tap: TapRecognizer,\n Pan: PanRecognizer,\n Swipe: SwipeRecognizer,\n Pinch: PinchRecognizer,\n Rotate: RotateRecognizer,\n Press: PressRecognizer,\n\n on: addEventListeners,\n off: removeEventListeners,\n each: each,\n merge: merge,\n extend: extend,\n assign: assign,\n inherit: inherit,\n bindFn: bindFn,\n prefixed: prefixed\n});\n\n// this prevents errors when Hammer is loaded in the presence of an AMD\n// style loader but by script tag, not by the loader.\nvar freeGlobal = (typeof window !== 'undefined' ? window : (typeof self !== 'undefined' ? self : {})); // jshint ignore:line\nfreeGlobal.Hammer = Hammer;\n\nif (typeof define === 'function' && define.amd) {\n define(function() {\n return Hammer;\n });\n} else if (typeof module != 'undefined' && module.exports) {\n module.exports = Hammer;\n} else {\n window[exportName] = Hammer;\n}\n\n})(window, document, 'Hammer');\n","import isInBrowser from 'is-in-browser';\nimport _toConsumableArray from '@babel/runtime/helpers/esm/toConsumableArray';\n\n// Export javascript style and css style vendor prefixes.\nvar js = '';\nvar css = '';\nvar vendor = '';\nvar browser = '';\nvar isTouch = isInBrowser && 'ontouchstart' in document.documentElement; // We should not do anything if required serverside.\n\nif (isInBrowser) {\n // Order matters. We need to check Webkit the last one because\n // other vendors use to add Webkit prefixes to some properties\n var jsCssMap = {\n Moz: '-moz-',\n ms: '-ms-',\n O: '-o-',\n Webkit: '-webkit-'\n };\n\n var _document$createEleme = document.createElement('p'),\n style = _document$createEleme.style;\n\n var testProp = 'Transform';\n\n for (var key in jsCssMap) {\n if (key + testProp in style) {\n js = key;\n css = jsCssMap[key];\n break;\n }\n } // Correctly detect the Edge browser.\n\n\n if (js === 'Webkit' && 'msHyphens' in style) {\n js = 'ms';\n css = jsCssMap.ms;\n browser = 'edge';\n } // Correctly detect the Safari browser.\n\n\n if (js === 'Webkit' && '-apple-trailing-word' in style) {\n vendor = 'apple';\n }\n}\n/**\n * Vendor prefix string for the current browser.\n *\n * @type {{js: String, css: String, vendor: String, browser: String}}\n * @api public\n */\n\n\nvar prefix = {\n js: js,\n css: css,\n vendor: vendor,\n browser: browser,\n isTouch: isTouch\n};\n\n/**\n * Test if a keyframe at-rule should be prefixed or not\n *\n * @param {String} vendor prefix string for the current browser.\n * @return {String}\n * @api public\n */\n\nfunction supportedKeyframes(key) {\n // Keyframes is already prefixed. e.g. key = '@-webkit-keyframes a'\n if (key[1] === '-') return key; // No need to prefix IE/Edge. Older browsers will ignore unsupported rules.\n // https://caniuse.com/#search=keyframes\n\n if (prefix.js === 'ms') return key;\n return \"@\" + prefix.css + \"keyframes\" + key.substr(10);\n}\n\n// https://caniuse.com/#search=appearance\n\nvar appearence = {\n noPrefill: ['appearance'],\n supportedProperty: function supportedProperty(prop) {\n if (prop !== 'appearance') return false;\n if (prefix.js === 'ms') return \"-webkit-\" + prop;\n return prefix.css + prop;\n }\n};\n\n// https://caniuse.com/#search=color-adjust\n\nvar colorAdjust = {\n noPrefill: ['color-adjust'],\n supportedProperty: function supportedProperty(prop) {\n if (prop !== 'color-adjust') return false;\n if (prefix.js === 'Webkit') return prefix.css + \"print-\" + prop;\n return prop;\n }\n};\n\nvar regExp = /[-\\s]+(.)?/g;\n/**\n * Replaces the letter with the capital letter\n *\n * @param {String} match\n * @param {String} c\n * @return {String}\n * @api private\n */\n\nfunction toUpper(match, c) {\n return c ? c.toUpperCase() : '';\n}\n/**\n * Convert dash separated strings to camel-cased.\n *\n * @param {String} str\n * @return {String}\n * @api private\n */\n\n\nfunction camelize(str) {\n return str.replace(regExp, toUpper);\n}\n\n/**\n * Convert dash separated strings to pascal cased.\n *\n * @param {String} str\n * @return {String}\n * @api private\n */\n\nfunction pascalize(str) {\n return camelize(\"-\" + str);\n}\n\n// but we can use a longhand property instead.\n// https://caniuse.com/#search=mask\n\nvar mask = {\n noPrefill: ['mask'],\n supportedProperty: function supportedProperty(prop, style) {\n if (!/^mask/.test(prop)) return false;\n\n if (prefix.js === 'Webkit') {\n var longhand = 'mask-image';\n\n if (camelize(longhand) in style) {\n return prop;\n }\n\n if (prefix.js + pascalize(longhand) in style) {\n return prefix.css + prop;\n }\n }\n\n return prop;\n }\n};\n\n// https://caniuse.com/#search=text-orientation\n\nvar textOrientation = {\n noPrefill: ['text-orientation'],\n supportedProperty: function supportedProperty(prop) {\n if (prop !== 'text-orientation') return false;\n\n if (prefix.vendor === 'apple' && !prefix.isTouch) {\n return prefix.css + prop;\n }\n\n return prop;\n }\n};\n\n// https://caniuse.com/#search=transform\n\nvar transform = {\n noPrefill: ['transform'],\n supportedProperty: function supportedProperty(prop, style, options) {\n if (prop !== 'transform') return false;\n\n if (options.transform) {\n return prop;\n }\n\n return prefix.css + prop;\n }\n};\n\n// https://caniuse.com/#search=transition\n\nvar transition = {\n noPrefill: ['transition'],\n supportedProperty: function supportedProperty(prop, style, options) {\n if (prop !== 'transition') return false;\n\n if (options.transition) {\n return prop;\n }\n\n return prefix.css + prop;\n }\n};\n\n// https://caniuse.com/#search=writing-mode\n\nvar writingMode = {\n noPrefill: ['writing-mode'],\n supportedProperty: function supportedProperty(prop) {\n if (prop !== 'writing-mode') return false;\n\n if (prefix.js === 'Webkit' || prefix.js === 'ms' && prefix.browser !== 'edge') {\n return prefix.css + prop;\n }\n\n return prop;\n }\n};\n\n// https://caniuse.com/#search=user-select\n\nvar userSelect = {\n noPrefill: ['user-select'],\n supportedProperty: function supportedProperty(prop) {\n if (prop !== 'user-select') return false;\n\n if (prefix.js === 'Moz' || prefix.js === 'ms' || prefix.vendor === 'apple') {\n return prefix.css + prop;\n }\n\n return prop;\n }\n};\n\n// https://caniuse.com/#search=multicolumn\n// https://github.com/postcss/autoprefixer/issues/491\n// https://github.com/postcss/autoprefixer/issues/177\n\nvar breakPropsOld = {\n supportedProperty: function supportedProperty(prop, style) {\n if (!/^break-/.test(prop)) return false;\n\n if (prefix.js === 'Webkit') {\n var jsProp = \"WebkitColumn\" + pascalize(prop);\n return jsProp in style ? prefix.css + \"column-\" + prop : false;\n }\n\n if (prefix.js === 'Moz') {\n var _jsProp = \"page\" + pascalize(prop);\n\n return _jsProp in style ? \"page-\" + prop : false;\n }\n\n return false;\n }\n};\n\n// See https://github.com/postcss/autoprefixer/issues/324.\n\nvar inlineLogicalOld = {\n supportedProperty: function supportedProperty(prop, style) {\n if (!/^(border|margin|padding)-inline/.test(prop)) return false;\n if (prefix.js === 'Moz') return prop;\n var newProp = prop.replace('-inline', '');\n return prefix.js + pascalize(newProp) in style ? prefix.css + newProp : false;\n }\n};\n\n// Camelization is required because we can't test using.\n// CSS syntax for e.g. in FF.\n\nvar unprefixed = {\n supportedProperty: function supportedProperty(prop, style) {\n return camelize(prop) in style ? prop : false;\n }\n};\n\nvar prefixed = {\n supportedProperty: function supportedProperty(prop, style) {\n var pascalized = pascalize(prop); // Return custom CSS variable without prefixing.\n\n if (prop[0] === '-') return prop; // Return already prefixed value without prefixing.\n\n if (prop[0] === '-' && prop[1] === '-') return prop;\n if (prefix.js + pascalized in style) return prefix.css + prop; // Try webkit fallback.\n\n if (prefix.js !== 'Webkit' && \"Webkit\" + pascalized in style) return \"-webkit-\" + prop;\n return false;\n }\n};\n\n// https://caniuse.com/#search=scroll-snap\n\nvar scrollSnap = {\n supportedProperty: function supportedProperty(prop) {\n if (prop.substring(0, 11) !== 'scroll-snap') return false;\n\n if (prefix.js === 'ms') {\n return \"\" + prefix.css + prop;\n }\n\n return prop;\n }\n};\n\n// https://caniuse.com/#search=overscroll-behavior\n\nvar overscrollBehavior = {\n supportedProperty: function supportedProperty(prop) {\n if (prop !== 'overscroll-behavior') return false;\n\n if (prefix.js === 'ms') {\n return prefix.css + \"scroll-chaining\";\n }\n\n return prop;\n }\n};\n\nvar propMap = {\n 'flex-grow': 'flex-positive',\n 'flex-shrink': 'flex-negative',\n 'flex-basis': 'flex-preferred-size',\n 'justify-content': 'flex-pack',\n order: 'flex-order',\n 'align-items': 'flex-align',\n 'align-content': 'flex-line-pack' // 'align-self' is handled by 'align-self' plugin.\n\n}; // Support old flex spec from 2012.\n\nvar flex2012 = {\n supportedProperty: function supportedProperty(prop, style) {\n var newProp = propMap[prop];\n if (!newProp) return false;\n return prefix.js + pascalize(newProp) in style ? prefix.css + newProp : false;\n }\n};\n\nvar propMap$1 = {\n flex: 'box-flex',\n 'flex-grow': 'box-flex',\n 'flex-direction': ['box-orient', 'box-direction'],\n order: 'box-ordinal-group',\n 'align-items': 'box-align',\n 'flex-flow': ['box-orient', 'box-direction'],\n 'justify-content': 'box-pack'\n};\nvar propKeys = Object.keys(propMap$1);\n\nvar prefixCss = function prefixCss(p) {\n return prefix.css + p;\n}; // Support old flex spec from 2009.\n\n\nvar flex2009 = {\n supportedProperty: function supportedProperty(prop, style, _ref) {\n var multiple = _ref.multiple;\n\n if (propKeys.indexOf(prop) > -1) {\n var newProp = propMap$1[prop];\n\n if (!Array.isArray(newProp)) {\n return prefix.js + pascalize(newProp) in style ? prefix.css + newProp : false;\n }\n\n if (!multiple) return false;\n\n for (var i = 0; i < newProp.length; i++) {\n if (!(prefix.js + pascalize(newProp[0]) in style)) {\n return false;\n }\n }\n\n return newProp.map(prefixCss);\n }\n\n return false;\n }\n};\n\n// plugins = [\n// ...plugins,\n// breakPropsOld,\n// inlineLogicalOld,\n// unprefixed,\n// prefixed,\n// scrollSnap,\n// flex2012,\n// flex2009\n// ]\n// Plugins without 'noPrefill' value, going last.\n// 'flex-*' plugins should be at the bottom.\n// 'flex2009' going after 'flex2012'.\n// 'prefixed' going after 'unprefixed'\n\nvar plugins = [appearence, colorAdjust, mask, textOrientation, transform, transition, writingMode, userSelect, breakPropsOld, inlineLogicalOld, unprefixed, prefixed, scrollSnap, overscrollBehavior, flex2012, flex2009];\nvar propertyDetectors = plugins.filter(function (p) {\n return p.supportedProperty;\n}).map(function (p) {\n return p.supportedProperty;\n});\nvar noPrefill = plugins.filter(function (p) {\n return p.noPrefill;\n}).reduce(function (a, p) {\n a.push.apply(a, _toConsumableArray(p.noPrefill));\n return a;\n}, []);\n\nvar el;\nvar cache = {};\n\nif (isInBrowser) {\n el = document.createElement('p'); // We test every property on vendor prefix requirement.\n // Once tested, result is cached. It gives us up to 70% perf boost.\n // http://jsperf.com/element-style-object-access-vs-plain-object\n //\n // Prefill cache with known css properties to reduce amount of\n // properties we need to feature test at runtime.\n // http://davidwalsh.name/vendor-prefix\n\n var computed = window.getComputedStyle(document.documentElement, '');\n\n for (var key$1 in computed) {\n // eslint-disable-next-line no-restricted-globals\n if (!isNaN(key$1)) cache[computed[key$1]] = computed[key$1];\n } // Properties that cannot be correctly detected using the\n // cache prefill method.\n\n\n noPrefill.forEach(function (x) {\n return delete cache[x];\n });\n}\n/**\n * Test if a property is supported, returns supported property with vendor\n * prefix if required. Returns `false` if not supported.\n *\n * @param {String} prop dash separated\n * @param {Object} [options]\n * @return {String|Boolean}\n * @api public\n */\n\n\nfunction supportedProperty(prop, options) {\n if (options === void 0) {\n options = {};\n }\n\n // For server-side rendering.\n if (!el) return prop; // Remove cache for benchmark tests or return property from the cache.\n\n if (process.env.NODE_ENV !== 'benchmark' && cache[prop] != null) {\n return cache[prop];\n } // Check if 'transition' or 'transform' natively supported in browser.\n\n\n if (prop === 'transition' || prop === 'transform') {\n options[prop] = prop in el.style;\n } // Find a plugin for current prefix property.\n\n\n for (var i = 0; i < propertyDetectors.length; i++) {\n cache[prop] = propertyDetectors[i](prop, el.style, options); // Break loop, if value found.\n\n if (cache[prop]) break;\n } // Reset styles for current property.\n // Firefox can even throw an error for invalid properties, e.g., \"0\".\n\n\n try {\n el.style[prop] = '';\n } catch (err) {\n return false;\n }\n\n return cache[prop];\n}\n\nvar cache$1 = {};\nvar transitionProperties = {\n transition: 1,\n 'transition-property': 1,\n '-webkit-transition': 1,\n '-webkit-transition-property': 1\n};\nvar transPropsRegExp = /(^\\s*[\\w-]+)|, (\\s*[\\w-]+)(?![^()]*\\))/g;\nvar el$1;\n/**\n * Returns prefixed value transition/transform if needed.\n *\n * @param {String} match\n * @param {String} p1\n * @param {String} p2\n * @return {String}\n * @api private\n */\n\nfunction prefixTransitionCallback(match, p1, p2) {\n if (p1 === 'var') return 'var';\n if (p1 === 'all') return 'all';\n if (p2 === 'all') return ', all';\n var prefixedValue = p1 ? supportedProperty(p1) : \", \" + supportedProperty(p2);\n if (!prefixedValue) return p1 || p2;\n return prefixedValue;\n}\n\nif (isInBrowser) el$1 = document.createElement('p');\n/**\n * Returns prefixed value if needed. Returns `false` if value is not supported.\n *\n * @param {String} property\n * @param {String} value\n * @return {String|Boolean}\n * @api public\n */\n\nfunction supportedValue(property, value) {\n // For server-side rendering.\n var prefixedValue = value;\n if (!el$1 || property === 'content') return value; // It is a string or a number as a string like '1'.\n // We want only prefixable values here.\n // eslint-disable-next-line no-restricted-globals\n\n if (typeof prefixedValue !== 'string' || !isNaN(parseInt(prefixedValue, 10))) {\n return prefixedValue;\n } // Create cache key for current value.\n\n\n var cacheKey = property + prefixedValue; // Remove cache for benchmark tests or return value from cache.\n\n if (process.env.NODE_ENV !== 'benchmark' && cache$1[cacheKey] != null) {\n return cache$1[cacheKey];\n } // IE can even throw an error in some cases, for e.g. style.content = 'bar'.\n\n\n try {\n // Test value as it is.\n el$1.style[property] = prefixedValue;\n } catch (err) {\n // Return false if value not supported.\n cache$1[cacheKey] = false;\n return false;\n } // If 'transition' or 'transition-property' property.\n\n\n if (transitionProperties[property]) {\n prefixedValue = prefixedValue.replace(transPropsRegExp, prefixTransitionCallback);\n } else if (el$1.style[property] === '') {\n // Value with a vendor prefix.\n prefixedValue = prefix.css + prefixedValue; // Hardcode test to convert \"flex\" to \"-ms-flexbox\" for IE10.\n\n if (prefixedValue === '-ms-flex') el$1.style[property] = '-ms-flexbox'; // Test prefixed value.\n\n el$1.style[property] = prefixedValue; // Return false if value not supported.\n\n if (el$1.style[property] === '') {\n cache$1[cacheKey] = false;\n return false;\n }\n } // Reset styles for current property.\n\n\n el$1.style[property] = ''; // Write current value to cache.\n\n cache$1[cacheKey] = prefixedValue;\n return cache$1[cacheKey];\n}\n\nexport { prefix, supportedKeyframes, supportedProperty, supportedValue };\n","export default function toInteger(dirtyNumber) {\n if (dirtyNumber === null || dirtyNumber === true || dirtyNumber === false) {\n return NaN;\n }\n\n var number = Number(dirtyNumber);\n\n if (isNaN(number)) {\n return number;\n }\n\n return number < 0 ? Math.ceil(number) : Math.floor(number);\n}","export default function buildFormatLongFn(args) {\n return function () {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n // TODO: Remove String()\n var width = options.width ? String(options.width) : args.defaultWidth;\n var format = args.formats[width] || args.formats[args.defaultWidth];\n return format;\n };\n}","var formatDistanceLocale = {\n lessThanXSeconds: {\n one: 'less than a second',\n other: 'less than {{count}} seconds'\n },\n xSeconds: {\n one: '1 second',\n other: '{{count}} seconds'\n },\n halfAMinute: 'half a minute',\n lessThanXMinutes: {\n one: 'less than a minute',\n other: 'less than {{count}} minutes'\n },\n xMinutes: {\n one: '1 minute',\n other: '{{count}} minutes'\n },\n aboutXHours: {\n one: 'about 1 hour',\n other: 'about {{count}} hours'\n },\n xHours: {\n one: '1 hour',\n other: '{{count}} hours'\n },\n xDays: {\n one: '1 day',\n other: '{{count}} days'\n },\n aboutXWeeks: {\n one: 'about 1 week',\n other: 'about {{count}} weeks'\n },\n xWeeks: {\n one: '1 week',\n other: '{{count}} weeks'\n },\n aboutXMonths: {\n one: 'about 1 month',\n other: 'about {{count}} months'\n },\n xMonths: {\n one: '1 month',\n other: '{{count}} months'\n },\n aboutXYears: {\n one: 'about 1 year',\n other: 'about {{count}} years'\n },\n xYears: {\n one: '1 year',\n other: '{{count}} years'\n },\n overXYears: {\n one: 'over 1 year',\n other: 'over {{count}} years'\n },\n almostXYears: {\n one: 'almost 1 year',\n other: 'almost {{count}} years'\n }\n};\nexport default function formatDistance(token, count, options) {\n options = options || {};\n var result;\n\n if (typeof formatDistanceLocale[token] === 'string') {\n result = formatDistanceLocale[token];\n } else if (count === 1) {\n result = formatDistanceLocale[token].one;\n } else {\n result = formatDistanceLocale[token].other.replace('{{count}}', count);\n }\n\n if (options.addSuffix) {\n if (options.comparison > 0) {\n return 'in ' + result;\n } else {\n return result + ' ago';\n }\n }\n\n return result;\n}","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n full: 'EEEE, MMMM do, y',\n long: 'MMMM do, y',\n medium: 'MMM d, y',\n short: 'MM/dd/yyyy'\n};\nvar timeFormats = {\n full: 'h:mm:ss a zzzz',\n long: 'h:mm:ss a z',\n medium: 'h:mm:ss a',\n short: 'h:mm a'\n};\nvar dateTimeFormats = {\n full: \"{{date}} 'at' {{time}}\",\n long: \"{{date}} 'at' {{time}}\",\n medium: '{{date}}, {{time}}',\n short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n date: buildFormatLongFn({\n formats: dateFormats,\n defaultWidth: 'full'\n }),\n time: buildFormatLongFn({\n formats: timeFormats,\n defaultWidth: 'full'\n }),\n dateTime: buildFormatLongFn({\n formats: dateTimeFormats,\n defaultWidth: 'full'\n })\n};\nexport default formatLong;","var formatRelativeLocale = {\n lastWeek: \"'last' eeee 'at' p\",\n yesterday: \"'yesterday at' p\",\n today: \"'today at' p\",\n tomorrow: \"'tomorrow at' p\",\n nextWeek: \"eeee 'at' p\",\n other: 'P'\n};\nexport default function formatRelative(token, _date, _baseDate, _options) {\n return formatRelativeLocale[token];\n}","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n narrow: ['B', 'A'],\n abbreviated: ['BC', 'AD'],\n wide: ['Before Christ', 'Anno Domini']\n};\nvar quarterValues = {\n narrow: ['1', '2', '3', '4'],\n abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],\n wide: ['1st quarter', '2nd quarter', '3rd quarter', '4th quarter']\n}; // Note: in English, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\n\nvar monthValues = {\n narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],\n abbreviated: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n wide: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']\n};\nvar dayValues = {\n narrow: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],\n short: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],\n abbreviated: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n wide: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']\n};\nvar dayPeriodValues = {\n narrow: {\n am: 'a',\n pm: 'p',\n midnight: 'mi',\n noon: 'n',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n },\n abbreviated: {\n am: 'AM',\n pm: 'PM',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n },\n wide: {\n am: 'a.m.',\n pm: 'p.m.',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n }\n};\nvar formattingDayPeriodValues = {\n narrow: {\n am: 'a',\n pm: 'p',\n midnight: 'mi',\n noon: 'n',\n morning: 'in the morning',\n afternoon: 'in the afternoon',\n evening: 'in the evening',\n night: 'at night'\n },\n abbreviated: {\n am: 'AM',\n pm: 'PM',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'in the morning',\n afternoon: 'in the afternoon',\n evening: 'in the evening',\n night: 'at night'\n },\n wide: {\n am: 'a.m.',\n pm: 'p.m.',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'in the morning',\n afternoon: 'in the afternoon',\n evening: 'in the evening',\n night: 'at night'\n }\n};\n\nfunction ordinalNumber(dirtyNumber, _dirtyOptions) {\n var number = Number(dirtyNumber); // If ordinal numbers depend on context, for example,\n // if they are different for different grammatical genders,\n // use `options.unit`:\n //\n // var options = dirtyOptions || {}\n // var unit = String(options.unit)\n //\n // where `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',\n // 'day', 'hour', 'minute', 'second'\n\n var rem100 = number % 100;\n\n if (rem100 > 20 || rem100 < 10) {\n switch (rem100 % 10) {\n case 1:\n return number + 'st';\n\n case 2:\n return number + 'nd';\n\n case 3:\n return number + 'rd';\n }\n }\n\n return number + 'th';\n}\n\nvar localize = {\n ordinalNumber: ordinalNumber,\n era: buildLocalizeFn({\n values: eraValues,\n defaultWidth: 'wide'\n }),\n quarter: buildLocalizeFn({\n values: quarterValues,\n defaultWidth: 'wide',\n argumentCallback: function (quarter) {\n return Number(quarter) - 1;\n }\n }),\n month: buildLocalizeFn({\n values: monthValues,\n defaultWidth: 'wide'\n }),\n day: buildLocalizeFn({\n values: dayValues,\n defaultWidth: 'wide'\n }),\n dayPeriod: buildLocalizeFn({\n values: dayPeriodValues,\n defaultWidth: 'wide',\n formattingValues: formattingDayPeriodValues,\n defaultFormattingWidth: 'wide'\n })\n};\nexport default localize;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary English locale (United States).\n * @language English\n * @iso-639-2 eng\n * @author Sasha Koss [@kossnocorp]{@link https://github.com/kossnocorp}\n * @author Lesha Koss [@leshakoss]{@link https://github.com/leshakoss}\n */\n\nvar locale = {\n code: 'en-US',\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 0\n /* Sunday */\n ,\n firstWeekContainsDate: 1\n }\n};\nexport default locale;","import buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nimport buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(th|st|nd|rd)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n narrow: /^(b|a)/i,\n abbreviated: /^(b\\.?\\s?c\\.?|b\\.?\\s?c\\.?\\s?e\\.?|a\\.?\\s?d\\.?|c\\.?\\s?e\\.?)/i,\n wide: /^(before christ|before common era|anno domini|common era)/i\n};\nvar parseEraPatterns = {\n any: [/^b/i, /^(a|c)/i]\n};\nvar matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /^q[1234]/i,\n wide: /^[1234](th|st|nd|rd)? quarter/i\n};\nvar parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n narrow: /^[jfmasond]/i,\n abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,\n wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i\n};\nvar parseMonthPatterns = {\n narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i],\n any: [/^ja/i, /^f/i, /^mar/i, /^ap/i, /^may/i, /^jun/i, /^jul/i, /^au/i, /^s/i, /^o/i, /^n/i, /^d/i]\n};\nvar matchDayPatterns = {\n narrow: /^[smtwf]/i,\n short: /^(su|mo|tu|we|th|fr|sa)/i,\n abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,\n wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i\n};\nvar parseDayPatterns = {\n narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],\n any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i]\n};\nvar matchDayPeriodPatterns = {\n narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,\n any: /^([ap]\\.?\\s?m\\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i\n};\nvar parseDayPeriodPatterns = {\n any: {\n am: /^a/i,\n pm: /^p/i,\n midnight: /^mi/i,\n noon: /^no/i,\n morning: /morning/i,\n afternoon: /afternoon/i,\n evening: /evening/i,\n night: /night/i\n }\n};\nvar match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: function (value) {\n return parseInt(value, 10);\n }\n }),\n era: buildMatchFn({\n matchPatterns: matchEraPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseEraPatterns,\n defaultParseWidth: 'any'\n }),\n quarter: buildMatchFn({\n matchPatterns: matchQuarterPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseQuarterPatterns,\n defaultParseWidth: 'any',\n valueCallback: function (index) {\n return index + 1;\n }\n }),\n month: buildMatchFn({\n matchPatterns: matchMonthPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseMonthPatterns,\n defaultParseWidth: 'any'\n }),\n day: buildMatchFn({\n matchPatterns: matchDayPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseDayPatterns,\n defaultParseWidth: 'any'\n }),\n dayPeriod: buildMatchFn({\n matchPatterns: matchDayPeriodPatterns,\n defaultMatchWidth: 'any',\n parsePatterns: parseDayPeriodPatterns,\n defaultParseWidth: 'any'\n })\n};\nexport default match;","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfYear\n * @category Year Helpers\n * @summary Return the start of a year for the given date.\n *\n * @description\n * Return the start of a year for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a year for 2 September 2014 11:55:00:\n * const result = startOfYear(new Date(2014, 8, 2, 11, 55, 00))\n * //=> Wed Jan 01 2014 00:00:00\n */\n\nexport default function startOfYear(dirtyDate) {\n requiredArgs(1, arguments);\n var cleanDate = toDate(dirtyDate);\n var date = new Date(0);\n date.setFullYear(cleanDate.getFullYear(), 0, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n}","/**\r\n * Common utilities\r\n * @module glMatrix\r\n */\n// Configuration Constants\nexport var EPSILON = 0.000001;\nexport var ARRAY_TYPE = typeof Float32Array !== 'undefined' ? Float32Array : Array;\nexport var RANDOM = Math.random;\n/**\r\n * Sets the type of array used when creating new vectors and matrices\r\n *\r\n * @param {Float32ArrayConstructor | ArrayConstructor} type Array type, such as Float32Array or Array\r\n */\n\nexport function setMatrixArrayType(type) {\n ARRAY_TYPE = type;\n}\nvar degree = Math.PI / 180;\n/**\r\n * Convert Degree To Radian\r\n *\r\n * @param {Number} a Angle in Degrees\r\n */\n\nexport function toRadian(a) {\n return a * degree;\n}\n/**\r\n * Tests whether or not the arguments have approximately the same value, within an absolute\r\n * or relative tolerance of glMatrix.EPSILON (an absolute tolerance is used for values less\r\n * than or equal to 1.0, and a relative tolerance is used for larger values)\r\n *\r\n * @param {Number} a The first number to test.\r\n * @param {Number} b The second number to test.\r\n * @returns {Boolean} True if the numbers are approximately equal, false otherwise.\r\n */\n\nexport function equals(a, b) {\n return Math.abs(a - b) <= EPSILON * Math.max(1.0, Math.abs(a), Math.abs(b));\n}\nif (!Math.hypot) Math.hypot = function () {\n var y = 0,\n i = arguments.length;\n\n while (i--) {\n y += arguments[i] * arguments[i];\n }\n\n return Math.sqrt(y);\n};","function dateLongFormatter(pattern, formatLong) {\n switch (pattern) {\n case 'P':\n return formatLong.date({\n width: 'short'\n });\n\n case 'PP':\n return formatLong.date({\n width: 'medium'\n });\n\n case 'PPP':\n return formatLong.date({\n width: 'long'\n });\n\n case 'PPPP':\n default:\n return formatLong.date({\n width: 'full'\n });\n }\n}\n\nfunction timeLongFormatter(pattern, formatLong) {\n switch (pattern) {\n case 'p':\n return formatLong.time({\n width: 'short'\n });\n\n case 'pp':\n return formatLong.time({\n width: 'medium'\n });\n\n case 'ppp':\n return formatLong.time({\n width: 'long'\n });\n\n case 'pppp':\n default:\n return formatLong.time({\n width: 'full'\n });\n }\n}\n\nfunction dateTimeLongFormatter(pattern, formatLong) {\n var matchResult = pattern.match(/(P+)(p+)?/);\n var datePattern = matchResult[1];\n var timePattern = matchResult[2];\n\n if (!timePattern) {\n return dateLongFormatter(pattern, formatLong);\n }\n\n var dateTimeFormat;\n\n switch (datePattern) {\n case 'P':\n dateTimeFormat = formatLong.dateTime({\n width: 'short'\n });\n break;\n\n case 'PP':\n dateTimeFormat = formatLong.dateTime({\n width: 'medium'\n });\n break;\n\n case 'PPP':\n dateTimeFormat = formatLong.dateTime({\n width: 'long'\n });\n break;\n\n case 'PPPP':\n default:\n dateTimeFormat = formatLong.dateTime({\n width: 'full'\n });\n break;\n }\n\n return dateTimeFormat.replace('{{date}}', dateLongFormatter(datePattern, formatLong)).replace('{{time}}', timeLongFormatter(timePattern, formatLong));\n}\n\nvar longFormatters = {\n p: timeLongFormatter,\n P: dateTimeLongFormatter\n};\nexport default longFormatters;","import toDate from \"../../toDate/index.js\";\nimport startOfUTCISOWeek from \"../startOfUTCISOWeek/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function getUTCISOWeekYear(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var year = date.getUTCFullYear();\n var fourthOfJanuaryOfNextYear = new Date(0);\n fourthOfJanuaryOfNextYear.setUTCFullYear(year + 1, 0, 4);\n fourthOfJanuaryOfNextYear.setUTCHours(0, 0, 0, 0);\n var startOfNextYear = startOfUTCISOWeek(fourthOfJanuaryOfNextYear);\n var fourthOfJanuaryOfThisYear = new Date(0);\n fourthOfJanuaryOfThisYear.setUTCFullYear(year, 0, 4);\n fourthOfJanuaryOfThisYear.setUTCHours(0, 0, 0, 0);\n var startOfThisYear = startOfUTCISOWeek(fourthOfJanuaryOfThisYear);\n\n if (date.getTime() >= startOfNextYear.getTime()) {\n return year + 1;\n } else if (date.getTime() >= startOfThisYear.getTime()) {\n return year;\n } else {\n return year - 1;\n }\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport addMilliseconds from \"../addMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name subMilliseconds\n * @category Millisecond Helpers\n * @summary Subtract the specified number of milliseconds from the given date.\n *\n * @description\n * Subtract the specified number of milliseconds from the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of milliseconds to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the milliseconds subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 750 milliseconds from 10 July 2014 12:45:30.000:\n * const result = subMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750)\n * //=> Thu Jul 10 2014 12:45:29.250\n */\n\nexport default function subMilliseconds(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var amount = toInteger(dirtyAmount);\n return addMilliseconds(dirtyDate, -amount);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addMilliseconds\n * @category Millisecond Helpers\n * @summary Add the specified number of milliseconds to the given date.\n *\n * @description\n * Add the specified number of milliseconds to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of milliseconds to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the milliseconds added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 750 milliseconds to 10 July 2014 12:45:30.000:\n * const result = addMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750)\n * //=> Thu Jul 10 2014 12:45:30.750\n */\n\nexport default function addMilliseconds(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var timestamp = toDate(dirtyDate).getTime();\n var amount = toInteger(dirtyAmount);\n return new Date(timestamp + amount);\n}","export default function assign(target, dirtyObject) {\n if (target == null) {\n throw new TypeError('assign requires that input parameter not be null or undefined');\n }\n\n dirtyObject = dirtyObject || {};\n\n for (var property in dirtyObject) {\n if (Object.prototype.hasOwnProperty.call(dirtyObject, property)) {\n target[property] = dirtyObject[property];\n }\n }\n\n return target;\n}","import toInteger from \"../toInteger/index.js\";\nimport getUTCWeekYear from \"../getUTCWeekYear/index.js\";\nimport startOfUTCWeek from \"../startOfUTCWeek/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function startOfUTCWeekYear(dirtyDate, dirtyOptions) {\n requiredArgs(1, arguments);\n var options = dirtyOptions || {};\n var locale = options.locale;\n var localeFirstWeekContainsDate = locale && locale.options && locale.options.firstWeekContainsDate;\n var defaultFirstWeekContainsDate = localeFirstWeekContainsDate == null ? 1 : toInteger(localeFirstWeekContainsDate);\n var firstWeekContainsDate = options.firstWeekContainsDate == null ? defaultFirstWeekContainsDate : toInteger(options.firstWeekContainsDate);\n var year = getUTCWeekYear(dirtyDate, dirtyOptions);\n var firstWeek = new Date(0);\n firstWeek.setUTCFullYear(year, 0, firstWeekContainsDate);\n firstWeek.setUTCHours(0, 0, 0, 0);\n var date = startOfUTCWeek(firstWeek, dirtyOptions);\n return date;\n}","import toDate from \"../../toDate/index.js\";\nimport startOfUTCWeek from \"../startOfUTCWeek/index.js\";\nimport startOfUTCWeekYear from \"../startOfUTCWeekYear/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nvar MILLISECONDS_IN_WEEK = 604800000; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function getUTCWeek(dirtyDate, options) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var diff = startOfUTCWeek(date, options).getTime() - startOfUTCWeekYear(date, options).getTime(); // Round the number of days to the nearest integer\n // because the number of milliseconds in a week is not constant\n // (e.g. it's different in the week of the daylight saving time clock shift)\n\n return Math.round(diff / MILLISECONDS_IN_WEEK) + 1;\n}","import getUTCISOWeekYear from \"../getUTCISOWeekYear/index.js\";\nimport startOfUTCISOWeek from \"../startOfUTCISOWeek/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function startOfUTCISOWeekYear(dirtyDate) {\n requiredArgs(1, arguments);\n var year = getUTCISOWeekYear(dirtyDate);\n var fourthOfJanuary = new Date(0);\n fourthOfJanuary.setUTCFullYear(year, 0, 4);\n fourthOfJanuary.setUTCHours(0, 0, 0, 0);\n var date = startOfUTCISOWeek(fourthOfJanuary);\n return date;\n}","import toDate from \"../../toDate/index.js\";\nimport startOfUTCISOWeek from \"../startOfUTCISOWeek/index.js\";\nimport startOfUTCISOWeekYear from \"../startOfUTCISOWeekYear/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nvar MILLISECONDS_IN_WEEK = 604800000; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function getUTCISOWeek(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var diff = startOfUTCISOWeek(date).getTime() - startOfUTCISOWeekYear(date).getTime(); // Round the number of days to the nearest integer\n // because the number of milliseconds in a week is not constant\n // (e.g. it's different in the week of the daylight saving time clock shift)\n\n return Math.round(diff / MILLISECONDS_IN_WEEK) + 1;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isAfter\n * @category Common Helpers\n * @summary Is the first date after the second one?\n *\n * @description\n * Is the first date after the second one?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date that should be after the other one to return true\n * @param {Date|Number} dateToCompare - the date to compare with\n * @returns {Boolean} the first date is after the second date\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Is 10 July 1989 after 11 February 1987?\n * var result = isAfter(new Date(1989, 6, 10), new Date(1987, 1, 11))\n * //=> true\n */\n\nexport default function isAfter(dirtyDate, dirtyDateToCompare) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var dateToCompare = toDate(dirtyDateToCompare);\n return date.getTime() > dateToCompare.getTime();\n}","export default __webpack_public_path__ + \"static/media/getFetch.5fde86e3.cjs\";","import * as glMatrix from \"./common.js\";\n/**\r\n * 4 Dimensional Vector\r\n * @module vec4\r\n */\n\n/**\r\n * Creates a new, empty vec4\r\n *\r\n * @returns {vec4} a new 4D vector\r\n */\n\nexport function create() {\n var out = new glMatrix.ARRAY_TYPE(4);\n\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n }\n\n return out;\n}\n/**\r\n * Creates a new vec4 initialized with values from an existing vector\r\n *\r\n * @param {ReadonlyVec4} a vector to clone\r\n * @returns {vec4} a new 4D vector\r\n */\n\nexport function clone(a) {\n var out = new glMatrix.ARRAY_TYPE(4);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n return out;\n}\n/**\r\n * Creates a new vec4 initialized with the given values\r\n *\r\n * @param {Number} x X component\r\n * @param {Number} y Y component\r\n * @param {Number} z Z component\r\n * @param {Number} w W component\r\n * @returns {vec4} a new 4D vector\r\n */\n\nexport function fromValues(x, y, z, w) {\n var out = new glMatrix.ARRAY_TYPE(4);\n out[0] = x;\n out[1] = y;\n out[2] = z;\n out[3] = w;\n return out;\n}\n/**\r\n * Copy the values from one vec4 to another\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a the source vector\r\n * @returns {vec4} out\r\n */\n\nexport function copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n return out;\n}\n/**\r\n * Set the components of a vec4 to the given values\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {Number} x X component\r\n * @param {Number} y Y component\r\n * @param {Number} z Z component\r\n * @param {Number} w W component\r\n * @returns {vec4} out\r\n */\n\nexport function set(out, x, y, z, w) {\n out[0] = x;\n out[1] = y;\n out[2] = z;\n out[3] = w;\n return out;\n}\n/**\r\n * Adds two vec4's\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a the first operand\r\n * @param {ReadonlyVec4} b the second operand\r\n * @returns {vec4} out\r\n */\n\nexport function add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n out[3] = a[3] + b[3];\n return out;\n}\n/**\r\n * Subtracts vector b from vector a\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a the first operand\r\n * @param {ReadonlyVec4} b the second operand\r\n * @returns {vec4} out\r\n */\n\nexport function subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n out[3] = a[3] - b[3];\n return out;\n}\n/**\r\n * Multiplies two vec4's\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a the first operand\r\n * @param {ReadonlyVec4} b the second operand\r\n * @returns {vec4} out\r\n */\n\nexport function multiply(out, a, b) {\n out[0] = a[0] * b[0];\n out[1] = a[1] * b[1];\n out[2] = a[2] * b[2];\n out[3] = a[3] * b[3];\n return out;\n}\n/**\r\n * Divides two vec4's\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a the first operand\r\n * @param {ReadonlyVec4} b the second operand\r\n * @returns {vec4} out\r\n */\n\nexport function divide(out, a, b) {\n out[0] = a[0] / b[0];\n out[1] = a[1] / b[1];\n out[2] = a[2] / b[2];\n out[3] = a[3] / b[3];\n return out;\n}\n/**\r\n * Math.ceil the components of a vec4\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a vector to ceil\r\n * @returns {vec4} out\r\n */\n\nexport function ceil(out, a) {\n out[0] = Math.ceil(a[0]);\n out[1] = Math.ceil(a[1]);\n out[2] = Math.ceil(a[2]);\n out[3] = Math.ceil(a[3]);\n return out;\n}\n/**\r\n * Math.floor the components of a vec4\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a vector to floor\r\n * @returns {vec4} out\r\n */\n\nexport function floor(out, a) {\n out[0] = Math.floor(a[0]);\n out[1] = Math.floor(a[1]);\n out[2] = Math.floor(a[2]);\n out[3] = Math.floor(a[3]);\n return out;\n}\n/**\r\n * Returns the minimum of two vec4's\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a the first operand\r\n * @param {ReadonlyVec4} b the second operand\r\n * @returns {vec4} out\r\n */\n\nexport function min(out, a, b) {\n out[0] = Math.min(a[0], b[0]);\n out[1] = Math.min(a[1], b[1]);\n out[2] = Math.min(a[2], b[2]);\n out[3] = Math.min(a[3], b[3]);\n return out;\n}\n/**\r\n * Returns the maximum of two vec4's\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a the first operand\r\n * @param {ReadonlyVec4} b the second operand\r\n * @returns {vec4} out\r\n */\n\nexport function max(out, a, b) {\n out[0] = Math.max(a[0], b[0]);\n out[1] = Math.max(a[1], b[1]);\n out[2] = Math.max(a[2], b[2]);\n out[3] = Math.max(a[3], b[3]);\n return out;\n}\n/**\r\n * Math.round the components of a vec4\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a vector to round\r\n * @returns {vec4} out\r\n */\n\nexport function round(out, a) {\n out[0] = Math.round(a[0]);\n out[1] = Math.round(a[1]);\n out[2] = Math.round(a[2]);\n out[3] = Math.round(a[3]);\n return out;\n}\n/**\r\n * Scales a vec4 by a scalar number\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a the vector to scale\r\n * @param {Number} b amount to scale the vector by\r\n * @returns {vec4} out\r\n */\n\nexport function scale(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n out[2] = a[2] * b;\n out[3] = a[3] * b;\n return out;\n}\n/**\r\n * Adds two vec4's after scaling the second operand by a scalar value\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a the first operand\r\n * @param {ReadonlyVec4} b the second operand\r\n * @param {Number} scale the amount to scale b by before adding\r\n * @returns {vec4} out\r\n */\n\nexport function scaleAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n out[2] = a[2] + b[2] * scale;\n out[3] = a[3] + b[3] * scale;\n return out;\n}\n/**\r\n * Calculates the euclidian distance between two vec4's\r\n *\r\n * @param {ReadonlyVec4} a the first operand\r\n * @param {ReadonlyVec4} b the second operand\r\n * @returns {Number} distance between a and b\r\n */\n\nexport function distance(a, b) {\n var x = b[0] - a[0];\n var y = b[1] - a[1];\n var z = b[2] - a[2];\n var w = b[3] - a[3];\n return Math.hypot(x, y, z, w);\n}\n/**\r\n * Calculates the squared euclidian distance between two vec4's\r\n *\r\n * @param {ReadonlyVec4} a the first operand\r\n * @param {ReadonlyVec4} b the second operand\r\n * @returns {Number} squared distance between a and b\r\n */\n\nexport function squaredDistance(a, b) {\n var x = b[0] - a[0];\n var y = b[1] - a[1];\n var z = b[2] - a[2];\n var w = b[3] - a[3];\n return x * x + y * y + z * z + w * w;\n}\n/**\r\n * Calculates the length of a vec4\r\n *\r\n * @param {ReadonlyVec4} a vector to calculate length of\r\n * @returns {Number} length of a\r\n */\n\nexport function length(a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n var w = a[3];\n return Math.hypot(x, y, z, w);\n}\n/**\r\n * Calculates the squared length of a vec4\r\n *\r\n * @param {ReadonlyVec4} a vector to calculate squared length of\r\n * @returns {Number} squared length of a\r\n */\n\nexport function squaredLength(a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n var w = a[3];\n return x * x + y * y + z * z + w * w;\n}\n/**\r\n * Negates the components of a vec4\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a vector to negate\r\n * @returns {vec4} out\r\n */\n\nexport function negate(out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n out[2] = -a[2];\n out[3] = -a[3];\n return out;\n}\n/**\r\n * Returns the inverse of the components of a vec4\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a vector to invert\r\n * @returns {vec4} out\r\n */\n\nexport function inverse(out, a) {\n out[0] = 1.0 / a[0];\n out[1] = 1.0 / a[1];\n out[2] = 1.0 / a[2];\n out[3] = 1.0 / a[3];\n return out;\n}\n/**\r\n * Normalize a vec4\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a vector to normalize\r\n * @returns {vec4} out\r\n */\n\nexport function normalize(out, a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n var w = a[3];\n var len = x * x + y * y + z * z + w * w;\n\n if (len > 0) {\n len = 1 / Math.sqrt(len);\n }\n\n out[0] = x * len;\n out[1] = y * len;\n out[2] = z * len;\n out[3] = w * len;\n return out;\n}\n/**\r\n * Calculates the dot product of two vec4's\r\n *\r\n * @param {ReadonlyVec4} a the first operand\r\n * @param {ReadonlyVec4} b the second operand\r\n * @returns {Number} dot product of a and b\r\n */\n\nexport function dot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];\n}\n/**\r\n * Returns the cross-product of three vectors in a 4-dimensional space\r\n *\r\n * @param {ReadonlyVec4} result the receiving vector\r\n * @param {ReadonlyVec4} U the first vector\r\n * @param {ReadonlyVec4} V the second vector\r\n * @param {ReadonlyVec4} W the third vector\r\n * @returns {vec4} result\r\n */\n\nexport function cross(out, u, v, w) {\n var A = v[0] * w[1] - v[1] * w[0],\n B = v[0] * w[2] - v[2] * w[0],\n C = v[0] * w[3] - v[3] * w[0],\n D = v[1] * w[2] - v[2] * w[1],\n E = v[1] * w[3] - v[3] * w[1],\n F = v[2] * w[3] - v[3] * w[2];\n var G = u[0];\n var H = u[1];\n var I = u[2];\n var J = u[3];\n out[0] = H * F - I * E + J * D;\n out[1] = -(G * F) + I * C - J * B;\n out[2] = G * E - H * C + J * A;\n out[3] = -(G * D) + H * B - I * A;\n return out;\n}\n/**\r\n * Performs a linear interpolation between two vec4's\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a the first operand\r\n * @param {ReadonlyVec4} b the second operand\r\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\r\n * @returns {vec4} out\r\n */\n\nexport function lerp(out, a, b, t) {\n var ax = a[0];\n var ay = a[1];\n var az = a[2];\n var aw = a[3];\n out[0] = ax + t * (b[0] - ax);\n out[1] = ay + t * (b[1] - ay);\n out[2] = az + t * (b[2] - az);\n out[3] = aw + t * (b[3] - aw);\n return out;\n}\n/**\r\n * Generates a random vector with the given scale\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned\r\n * @returns {vec4} out\r\n */\n\nexport function random(out, scale) {\n scale = scale || 1.0; // Marsaglia, George. Choosing a Point from the Surface of a\n // Sphere. Ann. Math. Statist. 43 (1972), no. 2, 645--646.\n // http://projecteuclid.org/euclid.aoms/1177692644;\n\n var v1, v2, v3, v4;\n var s1, s2;\n\n do {\n v1 = glMatrix.RANDOM() * 2 - 1;\n v2 = glMatrix.RANDOM() * 2 - 1;\n s1 = v1 * v1 + v2 * v2;\n } while (s1 >= 1);\n\n do {\n v3 = glMatrix.RANDOM() * 2 - 1;\n v4 = glMatrix.RANDOM() * 2 - 1;\n s2 = v3 * v3 + v4 * v4;\n } while (s2 >= 1);\n\n var d = Math.sqrt((1 - s1) / s2);\n out[0] = scale * v1;\n out[1] = scale * v2;\n out[2] = scale * v3 * d;\n out[3] = scale * v4 * d;\n return out;\n}\n/**\r\n * Transforms the vec4 with a mat4.\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a the vector to transform\r\n * @param {ReadonlyMat4} m matrix to transform with\r\n * @returns {vec4} out\r\n */\n\nexport function transformMat4(out, a, m) {\n var x = a[0],\n y = a[1],\n z = a[2],\n w = a[3];\n out[0] = m[0] * x + m[4] * y + m[8] * z + m[12] * w;\n out[1] = m[1] * x + m[5] * y + m[9] * z + m[13] * w;\n out[2] = m[2] * x + m[6] * y + m[10] * z + m[14] * w;\n out[3] = m[3] * x + m[7] * y + m[11] * z + m[15] * w;\n return out;\n}\n/**\r\n * Transforms the vec4 with a quat\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a the vector to transform\r\n * @param {ReadonlyQuat} q quaternion to transform with\r\n * @returns {vec4} out\r\n */\n\nexport function transformQuat(out, a, q) {\n var x = a[0],\n y = a[1],\n z = a[2];\n var qx = q[0],\n qy = q[1],\n qz = q[2],\n qw = q[3]; // calculate quat * vec\n\n var ix = qw * x + qy * z - qz * y;\n var iy = qw * y + qz * x - qx * z;\n var iz = qw * z + qx * y - qy * x;\n var iw = -qx * x - qy * y - qz * z; // calculate result * inverse quat\n\n out[0] = ix * qw + iw * -qx + iy * -qz - iz * -qy;\n out[1] = iy * qw + iw * -qy + iz * -qx - ix * -qz;\n out[2] = iz * qw + iw * -qz + ix * -qy - iy * -qx;\n out[3] = a[3];\n return out;\n}\n/**\r\n * Set the components of a vec4 to zero\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @returns {vec4} out\r\n */\n\nexport function zero(out) {\n out[0] = 0.0;\n out[1] = 0.0;\n out[2] = 0.0;\n out[3] = 0.0;\n return out;\n}\n/**\r\n * Returns a string representation of a vector\r\n *\r\n * @param {ReadonlyVec4} a vector to represent as a string\r\n * @returns {String} string representation of the vector\r\n */\n\nexport function str(a) {\n return \"vec4(\" + a[0] + \", \" + a[1] + \", \" + a[2] + \", \" + a[3] + \")\";\n}\n/**\r\n * Returns whether or not the vectors have exactly the same elements in the same position (when compared with ===)\r\n *\r\n * @param {ReadonlyVec4} a The first vector.\r\n * @param {ReadonlyVec4} b The second vector.\r\n * @returns {Boolean} True if the vectors are equal, false otherwise.\r\n */\n\nexport function exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3];\n}\n/**\r\n * Returns whether or not the vectors have approximately the same elements in the same position.\r\n *\r\n * @param {ReadonlyVec4} a The first vector.\r\n * @param {ReadonlyVec4} b The second vector.\r\n * @returns {Boolean} True if the vectors are equal, false otherwise.\r\n */\n\nexport function equals(a, b) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2],\n a3 = a[3];\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3];\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3));\n}\n/**\r\n * Alias for {@link vec4.subtract}\r\n * @function\r\n */\n\nexport var sub = subtract;\n/**\r\n * Alias for {@link vec4.multiply}\r\n * @function\r\n */\n\nexport var mul = multiply;\n/**\r\n * Alias for {@link vec4.divide}\r\n * @function\r\n */\n\nexport var div = divide;\n/**\r\n * Alias for {@link vec4.distance}\r\n * @function\r\n */\n\nexport var dist = distance;\n/**\r\n * Alias for {@link vec4.squaredDistance}\r\n * @function\r\n */\n\nexport var sqrDist = squaredDistance;\n/**\r\n * Alias for {@link vec4.length}\r\n * @function\r\n */\n\nexport var len = length;\n/**\r\n * Alias for {@link vec4.squaredLength}\r\n * @function\r\n */\n\nexport var sqrLen = squaredLength;\n/**\r\n * Perform some operation over an array of vec4s.\r\n *\r\n * @param {Array} a the array of vectors to iterate over\r\n * @param {Number} stride Number of elements between the start of each vec4. If 0 assumes tightly packed\r\n * @param {Number} offset Number of elements to skip at the beginning of the array\r\n * @param {Number} count Number of vec4s to iterate over. If 0 iterates over entire array\r\n * @param {Function} fn Function to call for each vector in the array\r\n * @param {Object} [arg] additional argument to pass to fn\r\n * @returns {Array} a\r\n * @function\r\n */\n\nexport var forEach = function () {\n var vec = create();\n return function (a, stride, offset, count, fn, arg) {\n var i, l;\n\n if (!stride) {\n stride = 4;\n }\n\n if (!offset) {\n offset = 0;\n }\n\n if (count) {\n l = Math.min(count * stride + offset, a.length);\n } else {\n l = a.length;\n }\n\n for (i = offset; i < l; i += stride) {\n vec[0] = a[i];\n vec[1] = a[i + 1];\n vec[2] = a[i + 2];\n vec[3] = a[i + 3];\n fn(vec, vec, arg);\n a[i] = vec[0];\n a[i + 1] = vec[1];\n a[i + 2] = vec[2];\n a[i + 3] = vec[3];\n }\n\n return a;\n };\n}();","/*!\n Copyright (c) 2018 Jed Watson.\n Licensed under the MIT License (MIT), see\n http://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames() {\n\t\tvar classes = [];\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (!arg) continue;\n\n\t\t\tvar argType = typeof arg;\n\n\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\tclasses.push(arg);\n\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\tif (arg.length) {\n\t\t\t\t\tvar inner = classNames.apply(null, arg);\n\t\t\t\t\tif (inner) {\n\t\t\t\t\t\tclasses.push(inner);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tif (arg.toString === Object.prototype.toString) {\n\t\t\t\t\tfor (var key in arg) {\n\t\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tclasses.push(arg.toString());\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn classes.join(' ');\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addDays\n * @category Day Helpers\n * @summary Add the specified number of days to the given date.\n *\n * @description\n * Add the specified number of days to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of days to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} - the new date with the days added\n * @throws {TypeError} - 2 arguments required\n *\n * @example\n * // Add 10 days to 1 September 2014:\n * const result = addDays(new Date(2014, 8, 1), 10)\n * //=> Thu Sep 11 2014 00:00:00\n */\n\nexport default function addDays(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var amount = toInteger(dirtyAmount);\n\n if (isNaN(amount)) {\n return new Date(NaN);\n }\n\n if (!amount) {\n // If 0 days, no-op to avoid changing times in the hour before end of DST\n return date;\n }\n\n date.setDate(date.getDate() + amount);\n return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name endOfDay\n * @category Day Helpers\n * @summary Return the end of a day for the given date.\n *\n * @description\n * Return the end of a day for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a day\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of a day for 2 September 2014 11:55:00:\n * const result = endOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 23:59:59.999\n */\n\nexport default function endOfDay(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n date.setHours(23, 59, 59, 999);\n return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfMonth\n * @category Month Helpers\n * @summary Return the start of a month for the given date.\n *\n * @description\n * Return the start of a month for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a month for 2 September 2014 11:55:00:\n * const result = startOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\n\nexport default function startOfMonth(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name endOfMonth\n * @category Month Helpers\n * @summary Return the end of a month for the given date.\n *\n * @description\n * Return the end of a month for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of a month for 2 September 2014 11:55:00:\n * const result = endOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 30 2014 23:59:59.999\n */\n\nexport default function endOfMonth(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var month = date.getMonth();\n date.setFullYear(date.getFullYear(), month + 1, 0);\n date.setHours(23, 59, 59, 999);\n return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name endOfYear\n * @category Year Helpers\n * @summary Return the end of a year for the given date.\n *\n * @description\n * Return the end of a year for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of a year for 2 September 2014 11:55:00:\n * var result = endOfYear(new Date(2014, 8, 2, 11, 55, 00))\n * //=> Wed Dec 31 2014 23:59:59.999\n */\n\nexport default function endOfYear(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var year = date.getFullYear();\n date.setFullYear(year + 1, 0, 0);\n date.setHours(23, 59, 59, 999);\n return date;\n}","import toDate from \"../toDate/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfWeek\n * @category Week Helpers\n * @summary Return the start of a week for the given date.\n *\n * @description\n * Return the start of a week for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @returns {Date} the start of a week\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // The start of a week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // If the week starts on Monday, the start of the week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Mon Sep 01 2014 00:00:00\n */\n\nexport default function startOfWeek(dirtyDate, dirtyOptions) {\n requiredArgs(1, arguments);\n var options = dirtyOptions || {};\n var locale = options.locale;\n var localeWeekStartsOn = locale && locale.options && locale.options.weekStartsOn;\n var defaultWeekStartsOn = localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn);\n var weekStartsOn = options.weekStartsOn == null ? defaultWeekStartsOn : toInteger(options.weekStartsOn); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n }\n\n var date = toDate(dirtyDate);\n var day = date.getDay();\n var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n date.setDate(date.getDate() - diff);\n date.setHours(0, 0, 0, 0);\n return date;\n}","import toDate from \"../toDate/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n\n/**\n * @name endOfWeek\n * @category Week Helpers\n * @summary Return the end of a week for the given date.\n *\n * @description\n * Return the end of a week for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @returns {Date} the end of a week\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // The end of a week for 2 September 2014 11:55:00:\n * const result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sat Sep 06 2014 23:59:59.999\n *\n * @example\n * // If the week starts on Monday, the end of the week for 2 September 2014 11:55:00:\n * const result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Sun Sep 07 2014 23:59:59.999\n */\nexport default function endOfWeek(dirtyDate, dirtyOptions) {\n requiredArgs(1, arguments);\n var options = dirtyOptions || {};\n var locale = options.locale;\n var localeWeekStartsOn = locale && locale.options && locale.options.weekStartsOn;\n var defaultWeekStartsOn = localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn);\n var weekStartsOn = options.weekStartsOn == null ? defaultWeekStartsOn : toInteger(options.weekStartsOn); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n }\n\n var date = toDate(dirtyDate);\n var day = date.getDay();\n var diff = (day < weekStartsOn ? -7 : 0) + 6 - (day - weekStartsOn);\n date.setDate(date.getDate() + diff);\n date.setHours(23, 59, 59, 999);\n return date;\n}","/* eslint-disable no-var, prefer-template */\nvar uppercasePattern = /[A-Z]/g\nvar msPattern = /^ms-/\nvar cache = {}\n\nfunction toHyphenLower(match) {\n return '-' + match.toLowerCase()\n}\n\nfunction hyphenateStyleName(name) {\n if (cache.hasOwnProperty(name)) {\n return cache[name]\n }\n\n var hName = name.replace(uppercasePattern, toHyphenLower)\n return (cache[name] = msPattern.test(hName) ? '-' + hName : hName)\n}\n\nexport default hyphenateStyleName\n","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}","export default function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nexport default function _toPropertyKey(arg) {\n var key = toPrimitive(arg, \"string\");\n return _typeof(key) === \"symbol\" ? key : String(key);\n}","import _typeof from \"./typeof.js\";\nexport default function _toPrimitive(input, hint) {\n if (_typeof(input) !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (_typeof(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, toPropertyKey(descriptor.key), descriptor);\n }\n}\nexport default function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}","export default function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n return self;\n}","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n Object.defineProperty(subClass, \"prototype\", {\n writable: false\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}","import _typeof from \"./typeof.js\";\nimport assertThisInitialized from \"./assertThisInitialized.js\";\nexport default function _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n } else if (call !== void 0) {\n throw new TypeError(\"Derived constructors may only return object or undefined\");\n }\n return assertThisInitialized(self);\n}","export default function _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}","import toPropertyKey from \"./toPropertyKey.js\";\nexport default function _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}","export default function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}","import arrayWithHoles from \"./arrayWithHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableRest from \"./nonIterableRest.js\";\nexport default function _toArray(arr) {\n return arrayWithHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableRest();\n}","export default function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}","export default function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}","export default function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","import _typeof from '@babel/runtime/helpers/esm/typeof';\nimport _classCallCheck from '@babel/runtime/helpers/esm/classCallCheck';\nimport _createClass from '@babel/runtime/helpers/esm/createClass';\nimport _assertThisInitialized from '@babel/runtime/helpers/esm/assertThisInitialized';\nimport _inherits from '@babel/runtime/helpers/esm/inherits';\nimport _possibleConstructorReturn from '@babel/runtime/helpers/esm/possibleConstructorReturn';\nimport _getPrototypeOf from '@babel/runtime/helpers/esm/getPrototypeOf';\nimport _defineProperty from '@babel/runtime/helpers/esm/defineProperty';\nimport _toArray from '@babel/runtime/helpers/esm/toArray';\n\nfunction ownKeys$6(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread$6(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$6(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$6(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nvar consoleLogger = {\n type: 'logger',\n log: function log(args) {\n this.output('log', args);\n },\n warn: function warn(args) {\n this.output('warn', args);\n },\n error: function error(args) {\n this.output('error', args);\n },\n output: function output(type, args) {\n if (console && console[type]) console[type].apply(console, args);\n }\n};\nvar Logger = function () {\n function Logger(concreteLogger) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _classCallCheck(this, Logger);\n this.init(concreteLogger, options);\n }\n _createClass(Logger, [{\n key: \"init\",\n value: function init(concreteLogger) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n this.prefix = options.prefix || 'i18next:';\n this.logger = concreteLogger || consoleLogger;\n this.options = options;\n this.debug = options.debug;\n }\n }, {\n key: \"setDebug\",\n value: function setDebug(bool) {\n this.debug = bool;\n }\n }, {\n key: \"log\",\n value: function log() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n return this.forward(args, 'log', '', true);\n }\n }, {\n key: \"warn\",\n value: function warn() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n return this.forward(args, 'warn', '', true);\n }\n }, {\n key: \"error\",\n value: function error() {\n for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n return this.forward(args, 'error', '');\n }\n }, {\n key: \"deprecate\",\n value: function deprecate() {\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n return this.forward(args, 'warn', 'WARNING DEPRECATED: ', true);\n }\n }, {\n key: \"forward\",\n value: function forward(args, lvl, prefix, debugOnly) {\n if (debugOnly && !this.debug) return null;\n if (typeof args[0] === 'string') args[0] = \"\".concat(prefix).concat(this.prefix, \" \").concat(args[0]);\n return this.logger[lvl](args);\n }\n }, {\n key: \"create\",\n value: function create(moduleName) {\n return new Logger(this.logger, _objectSpread$6(_objectSpread$6({}, {\n prefix: \"\".concat(this.prefix, \":\").concat(moduleName, \":\")\n }), this.options));\n }\n }, {\n key: \"clone\",\n value: function clone(options) {\n options = options || this.options;\n options.prefix = options.prefix || this.prefix;\n return new Logger(this.logger, options);\n }\n }]);\n return Logger;\n}();\nvar baseLogger = new Logger();\n\nvar EventEmitter = function () {\n function EventEmitter() {\n _classCallCheck(this, EventEmitter);\n this.observers = {};\n }\n _createClass(EventEmitter, [{\n key: \"on\",\n value: function on(events, listener) {\n var _this = this;\n events.split(' ').forEach(function (event) {\n _this.observers[event] = _this.observers[event] || [];\n _this.observers[event].push(listener);\n });\n return this;\n }\n }, {\n key: \"off\",\n value: function off(event, listener) {\n if (!this.observers[event]) return;\n if (!listener) {\n delete this.observers[event];\n return;\n }\n this.observers[event] = this.observers[event].filter(function (l) {\n return l !== listener;\n });\n }\n }, {\n key: \"emit\",\n value: function emit(event) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n if (this.observers[event]) {\n var cloned = [].concat(this.observers[event]);\n cloned.forEach(function (observer) {\n observer.apply(void 0, args);\n });\n }\n if (this.observers['*']) {\n var _cloned = [].concat(this.observers['*']);\n _cloned.forEach(function (observer) {\n observer.apply(observer, [event].concat(args));\n });\n }\n }\n }]);\n return EventEmitter;\n}();\n\nfunction defer() {\n var res;\n var rej;\n var promise = new Promise(function (resolve, reject) {\n res = resolve;\n rej = reject;\n });\n promise.resolve = res;\n promise.reject = rej;\n return promise;\n}\nfunction makeString(object) {\n if (object == null) return '';\n return '' + object;\n}\nfunction copy(a, s, t) {\n a.forEach(function (m) {\n if (s[m]) t[m] = s[m];\n });\n}\nfunction getLastOfPath(object, path, Empty) {\n function cleanKey(key) {\n return key && key.indexOf('###') > -1 ? key.replace(/###/g, '.') : key;\n }\n function canNotTraverseDeeper() {\n return !object || typeof object === 'string';\n }\n var stack = typeof path !== 'string' ? [].concat(path) : path.split('.');\n while (stack.length > 1) {\n if (canNotTraverseDeeper()) return {};\n var key = cleanKey(stack.shift());\n if (!object[key] && Empty) object[key] = new Empty();\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n object = object[key];\n } else {\n object = {};\n }\n }\n if (canNotTraverseDeeper()) return {};\n return {\n obj: object,\n k: cleanKey(stack.shift())\n };\n}\nfunction setPath(object, path, newValue) {\n var _getLastOfPath = getLastOfPath(object, path, Object),\n obj = _getLastOfPath.obj,\n k = _getLastOfPath.k;\n obj[k] = newValue;\n}\nfunction pushPath(object, path, newValue, concat) {\n var _getLastOfPath2 = getLastOfPath(object, path, Object),\n obj = _getLastOfPath2.obj,\n k = _getLastOfPath2.k;\n obj[k] = obj[k] || [];\n if (concat) obj[k] = obj[k].concat(newValue);\n if (!concat) obj[k].push(newValue);\n}\nfunction getPath(object, path) {\n var _getLastOfPath3 = getLastOfPath(object, path),\n obj = _getLastOfPath3.obj,\n k = _getLastOfPath3.k;\n if (!obj) return undefined;\n return obj[k];\n}\nfunction getPathWithDefaults(data, defaultData, key) {\n var value = getPath(data, key);\n if (value !== undefined) {\n return value;\n }\n return getPath(defaultData, key);\n}\nfunction deepExtend(target, source, overwrite) {\n for (var prop in source) {\n if (prop !== '__proto__' && prop !== 'constructor') {\n if (prop in target) {\n if (typeof target[prop] === 'string' || target[prop] instanceof String || typeof source[prop] === 'string' || source[prop] instanceof String) {\n if (overwrite) target[prop] = source[prop];\n } else {\n deepExtend(target[prop], source[prop], overwrite);\n }\n } else {\n target[prop] = source[prop];\n }\n }\n }\n return target;\n}\nfunction regexEscape(str) {\n return str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&');\n}\nvar _entityMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '/': '/'\n};\nfunction escape(data) {\n if (typeof data === 'string') {\n return data.replace(/[&<>\"'\\/]/g, function (s) {\n return _entityMap[s];\n });\n }\n return data;\n}\nvar isIE10 = typeof window !== 'undefined' && window.navigator && typeof window.navigator.userAgentData === 'undefined' && window.navigator.userAgent && window.navigator.userAgent.indexOf('MSIE') > -1;\nvar chars = [' ', ',', '?', '!', ';'];\nfunction looksLikeObjectPath(key, nsSeparator, keySeparator) {\n nsSeparator = nsSeparator || '';\n keySeparator = keySeparator || '';\n var possibleChars = chars.filter(function (c) {\n return nsSeparator.indexOf(c) < 0 && keySeparator.indexOf(c) < 0;\n });\n if (possibleChars.length === 0) return true;\n var r = new RegExp(\"(\".concat(possibleChars.map(function (c) {\n return c === '?' ? '\\\\?' : c;\n }).join('|'), \")\"));\n var matched = !r.test(key);\n if (!matched) {\n var ki = key.indexOf(keySeparator);\n if (ki > 0 && !r.test(key.substring(0, ki))) {\n matched = true;\n }\n }\n return matched;\n}\n\nfunction ownKeys$5(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread$5(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$5(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$5(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _createSuper$3(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$3(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _isNativeReflectConstruct$3() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction deepFind(obj, path) {\n var keySeparator = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '.';\n if (!obj) return undefined;\n if (obj[path]) return obj[path];\n var paths = path.split(keySeparator);\n var current = obj;\n for (var i = 0; i < paths.length; ++i) {\n if (!current) return undefined;\n if (typeof current[paths[i]] === 'string' && i + 1 < paths.length) {\n return undefined;\n }\n if (current[paths[i]] === undefined) {\n var j = 2;\n var p = paths.slice(i, i + j).join(keySeparator);\n var mix = current[p];\n while (mix === undefined && paths.length > i + j) {\n j++;\n p = paths.slice(i, i + j).join(keySeparator);\n mix = current[p];\n }\n if (mix === undefined) return undefined;\n if (mix === null) return null;\n if (path.endsWith(p)) {\n if (typeof mix === 'string') return mix;\n if (p && typeof mix[p] === 'string') return mix[p];\n }\n var joinedPath = paths.slice(i + j).join(keySeparator);\n if (joinedPath) return deepFind(mix, joinedPath, keySeparator);\n return undefined;\n }\n current = current[paths[i]];\n }\n return current;\n}\nvar ResourceStore = function (_EventEmitter) {\n _inherits(ResourceStore, _EventEmitter);\n var _super = _createSuper$3(ResourceStore);\n function ResourceStore(data) {\n var _this;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n ns: ['translation'],\n defaultNS: 'translation'\n };\n _classCallCheck(this, ResourceStore);\n _this = _super.call(this);\n if (isIE10) {\n EventEmitter.call(_assertThisInitialized(_this));\n }\n _this.data = data || {};\n _this.options = options;\n if (_this.options.keySeparator === undefined) {\n _this.options.keySeparator = '.';\n }\n if (_this.options.ignoreJSONStructure === undefined) {\n _this.options.ignoreJSONStructure = true;\n }\n return _this;\n }\n _createClass(ResourceStore, [{\n key: \"addNamespaces\",\n value: function addNamespaces(ns) {\n if (this.options.ns.indexOf(ns) < 0) {\n this.options.ns.push(ns);\n }\n }\n }, {\n key: \"removeNamespaces\",\n value: function removeNamespaces(ns) {\n var index = this.options.ns.indexOf(ns);\n if (index > -1) {\n this.options.ns.splice(index, 1);\n }\n }\n }, {\n key: \"getResource\",\n value: function getResource(lng, ns, key) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n var ignoreJSONStructure = options.ignoreJSONStructure !== undefined ? options.ignoreJSONStructure : this.options.ignoreJSONStructure;\n var path = [lng, ns];\n if (key && typeof key !== 'string') path = path.concat(key);\n if (key && typeof key === 'string') path = path.concat(keySeparator ? key.split(keySeparator) : key);\n if (lng.indexOf('.') > -1) {\n path = lng.split('.');\n }\n var result = getPath(this.data, path);\n if (result || !ignoreJSONStructure || typeof key !== 'string') return result;\n return deepFind(this.data && this.data[lng] && this.data[lng][ns], key, keySeparator);\n }\n }, {\n key: \"addResource\",\n value: function addResource(lng, ns, key, value) {\n var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {\n silent: false\n };\n var keySeparator = this.options.keySeparator;\n if (keySeparator === undefined) keySeparator = '.';\n var path = [lng, ns];\n if (key) path = path.concat(keySeparator ? key.split(keySeparator) : key);\n if (lng.indexOf('.') > -1) {\n path = lng.split('.');\n value = ns;\n ns = path[1];\n }\n this.addNamespaces(ns);\n setPath(this.data, path, value);\n if (!options.silent) this.emit('added', lng, ns, key, value);\n }\n }, {\n key: \"addResources\",\n value: function addResources(lng, ns, resources) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {\n silent: false\n };\n for (var m in resources) {\n if (typeof resources[m] === 'string' || Object.prototype.toString.apply(resources[m]) === '[object Array]') this.addResource(lng, ns, m, resources[m], {\n silent: true\n });\n }\n if (!options.silent) this.emit('added', lng, ns, resources);\n }\n }, {\n key: \"addResourceBundle\",\n value: function addResourceBundle(lng, ns, resources, deep, overwrite) {\n var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {\n silent: false\n };\n var path = [lng, ns];\n if (lng.indexOf('.') > -1) {\n path = lng.split('.');\n deep = resources;\n resources = ns;\n ns = path[1];\n }\n this.addNamespaces(ns);\n var pack = getPath(this.data, path) || {};\n if (deep) {\n deepExtend(pack, resources, overwrite);\n } else {\n pack = _objectSpread$5(_objectSpread$5({}, pack), resources);\n }\n setPath(this.data, path, pack);\n if (!options.silent) this.emit('added', lng, ns, resources);\n }\n }, {\n key: \"removeResourceBundle\",\n value: function removeResourceBundle(lng, ns) {\n if (this.hasResourceBundle(lng, ns)) {\n delete this.data[lng][ns];\n }\n this.removeNamespaces(ns);\n this.emit('removed', lng, ns);\n }\n }, {\n key: \"hasResourceBundle\",\n value: function hasResourceBundle(lng, ns) {\n return this.getResource(lng, ns) !== undefined;\n }\n }, {\n key: \"getResourceBundle\",\n value: function getResourceBundle(lng, ns) {\n if (!ns) ns = this.options.defaultNS;\n if (this.options.compatibilityAPI === 'v1') return _objectSpread$5(_objectSpread$5({}, {}), this.getResource(lng, ns));\n return this.getResource(lng, ns);\n }\n }, {\n key: \"getDataByLanguage\",\n value: function getDataByLanguage(lng) {\n return this.data[lng];\n }\n }, {\n key: \"hasLanguageSomeTranslations\",\n value: function hasLanguageSomeTranslations(lng) {\n var data = this.getDataByLanguage(lng);\n var n = data && Object.keys(data) || [];\n return !!n.find(function (v) {\n return data[v] && Object.keys(data[v]).length > 0;\n });\n }\n }, {\n key: \"toJSON\",\n value: function toJSON() {\n return this.data;\n }\n }]);\n return ResourceStore;\n}(EventEmitter);\n\nvar postProcessor = {\n processors: {},\n addPostProcessor: function addPostProcessor(module) {\n this.processors[module.name] = module;\n },\n handle: function handle(processors, value, key, options, translator) {\n var _this = this;\n processors.forEach(function (processor) {\n if (_this.processors[processor]) value = _this.processors[processor].process(value, key, options, translator);\n });\n return value;\n }\n};\n\nfunction ownKeys$4(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread$4(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$4(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$4(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _createSuper$2(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$2(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _isNativeReflectConstruct$2() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nvar checkedLoadedFor = {};\nvar Translator = function (_EventEmitter) {\n _inherits(Translator, _EventEmitter);\n var _super = _createSuper$2(Translator);\n function Translator(services) {\n var _this;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _classCallCheck(this, Translator);\n _this = _super.call(this);\n if (isIE10) {\n EventEmitter.call(_assertThisInitialized(_this));\n }\n copy(['resourceStore', 'languageUtils', 'pluralResolver', 'interpolator', 'backendConnector', 'i18nFormat', 'utils'], services, _assertThisInitialized(_this));\n _this.options = options;\n if (_this.options.keySeparator === undefined) {\n _this.options.keySeparator = '.';\n }\n _this.logger = baseLogger.create('translator');\n return _this;\n }\n _createClass(Translator, [{\n key: \"changeLanguage\",\n value: function changeLanguage(lng) {\n if (lng) this.language = lng;\n }\n }, {\n key: \"exists\",\n value: function exists(key) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n interpolation: {}\n };\n if (key === undefined || key === null) {\n return false;\n }\n var resolved = this.resolve(key, options);\n return resolved && resolved.res !== undefined;\n }\n }, {\n key: \"extractFromKey\",\n value: function extractFromKey(key, options) {\n var nsSeparator = options.nsSeparator !== undefined ? options.nsSeparator : this.options.nsSeparator;\n if (nsSeparator === undefined) nsSeparator = ':';\n var keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n var namespaces = options.ns || this.options.defaultNS || [];\n var wouldCheckForNsInKey = nsSeparator && key.indexOf(nsSeparator) > -1;\n var seemsNaturalLanguage = !this.options.userDefinedKeySeparator && !options.keySeparator && !this.options.userDefinedNsSeparator && !options.nsSeparator && !looksLikeObjectPath(key, nsSeparator, keySeparator);\n if (wouldCheckForNsInKey && !seemsNaturalLanguage) {\n var m = key.match(this.interpolator.nestingRegexp);\n if (m && m.length > 0) {\n return {\n key: key,\n namespaces: namespaces\n };\n }\n var parts = key.split(nsSeparator);\n if (nsSeparator !== keySeparator || nsSeparator === keySeparator && this.options.ns.indexOf(parts[0]) > -1) namespaces = parts.shift();\n key = parts.join(keySeparator);\n }\n if (typeof namespaces === 'string') namespaces = [namespaces];\n return {\n key: key,\n namespaces: namespaces\n };\n }\n }, {\n key: \"translate\",\n value: function translate(keys, options, lastKey) {\n var _this2 = this;\n if (_typeof(options) !== 'object' && this.options.overloadTranslationOptionHandler) {\n options = this.options.overloadTranslationOptionHandler(arguments);\n }\n if (!options) options = {};\n if (keys === undefined || keys === null) return '';\n if (!Array.isArray(keys)) keys = [String(keys)];\n var returnDetails = options.returnDetails !== undefined ? options.returnDetails : this.options.returnDetails;\n var keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n var _this$extractFromKey = this.extractFromKey(keys[keys.length - 1], options),\n key = _this$extractFromKey.key,\n namespaces = _this$extractFromKey.namespaces;\n var namespace = namespaces[namespaces.length - 1];\n var lng = options.lng || this.language;\n var appendNamespaceToCIMode = options.appendNamespaceToCIMode || this.options.appendNamespaceToCIMode;\n if (lng && lng.toLowerCase() === 'cimode') {\n if (appendNamespaceToCIMode) {\n var nsSeparator = options.nsSeparator || this.options.nsSeparator;\n if (returnDetails) {\n return {\n res: \"\".concat(namespace).concat(nsSeparator).concat(key),\n usedKey: key,\n exactUsedKey: key,\n usedLng: lng,\n usedNS: namespace\n };\n }\n return \"\".concat(namespace).concat(nsSeparator).concat(key);\n }\n if (returnDetails) {\n return {\n res: key,\n usedKey: key,\n exactUsedKey: key,\n usedLng: lng,\n usedNS: namespace\n };\n }\n return key;\n }\n var resolved = this.resolve(keys, options);\n var res = resolved && resolved.res;\n var resUsedKey = resolved && resolved.usedKey || key;\n var resExactUsedKey = resolved && resolved.exactUsedKey || key;\n var resType = Object.prototype.toString.apply(res);\n var noObject = ['[object Number]', '[object Function]', '[object RegExp]'];\n var joinArrays = options.joinArrays !== undefined ? options.joinArrays : this.options.joinArrays;\n var handleAsObjectInI18nFormat = !this.i18nFormat || this.i18nFormat.handleAsObject;\n var handleAsObject = typeof res !== 'string' && typeof res !== 'boolean' && typeof res !== 'number';\n if (handleAsObjectInI18nFormat && res && handleAsObject && noObject.indexOf(resType) < 0 && !(typeof joinArrays === 'string' && resType === '[object Array]')) {\n if (!options.returnObjects && !this.options.returnObjects) {\n if (!this.options.returnedObjectHandler) {\n this.logger.warn('accessing an object - but returnObjects options is not enabled!');\n }\n var r = this.options.returnedObjectHandler ? this.options.returnedObjectHandler(resUsedKey, res, _objectSpread$4(_objectSpread$4({}, options), {}, {\n ns: namespaces\n })) : \"key '\".concat(key, \" (\").concat(this.language, \")' returned an object instead of string.\");\n if (returnDetails) {\n resolved.res = r;\n return resolved;\n }\n return r;\n }\n if (keySeparator) {\n var resTypeIsArray = resType === '[object Array]';\n var copy = resTypeIsArray ? [] : {};\n var newKeyToUse = resTypeIsArray ? resExactUsedKey : resUsedKey;\n for (var m in res) {\n if (Object.prototype.hasOwnProperty.call(res, m)) {\n var deepKey = \"\".concat(newKeyToUse).concat(keySeparator).concat(m);\n copy[m] = this.translate(deepKey, _objectSpread$4(_objectSpread$4({}, options), {\n joinArrays: false,\n ns: namespaces\n }));\n if (copy[m] === deepKey) copy[m] = res[m];\n }\n }\n res = copy;\n }\n } else if (handleAsObjectInI18nFormat && typeof joinArrays === 'string' && resType === '[object Array]') {\n res = res.join(joinArrays);\n if (res) res = this.extendTranslation(res, keys, options, lastKey);\n } else {\n var usedDefault = false;\n var usedKey = false;\n var needsPluralHandling = options.count !== undefined && typeof options.count !== 'string';\n var hasDefaultValue = Translator.hasDefaultValue(options);\n var defaultValueSuffix = needsPluralHandling ? this.pluralResolver.getSuffix(lng, options.count, options) : '';\n var defaultValue = options[\"defaultValue\".concat(defaultValueSuffix)] || options.defaultValue;\n if (!this.isValidLookup(res) && hasDefaultValue) {\n usedDefault = true;\n res = defaultValue;\n }\n if (!this.isValidLookup(res)) {\n usedKey = true;\n res = key;\n }\n var missingKeyNoValueFallbackToKey = options.missingKeyNoValueFallbackToKey || this.options.missingKeyNoValueFallbackToKey;\n var resForMissing = missingKeyNoValueFallbackToKey && usedKey ? undefined : res;\n var updateMissing = hasDefaultValue && defaultValue !== res && this.options.updateMissing;\n if (usedKey || usedDefault || updateMissing) {\n this.logger.log(updateMissing ? 'updateKey' : 'missingKey', lng, namespace, key, updateMissing ? defaultValue : res);\n if (keySeparator) {\n var fk = this.resolve(key, _objectSpread$4(_objectSpread$4({}, options), {}, {\n keySeparator: false\n }));\n if (fk && fk.res) this.logger.warn('Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.');\n }\n var lngs = [];\n var fallbackLngs = this.languageUtils.getFallbackCodes(this.options.fallbackLng, options.lng || this.language);\n if (this.options.saveMissingTo === 'fallback' && fallbackLngs && fallbackLngs[0]) {\n for (var i = 0; i < fallbackLngs.length; i++) {\n lngs.push(fallbackLngs[i]);\n }\n } else if (this.options.saveMissingTo === 'all') {\n lngs = this.languageUtils.toResolveHierarchy(options.lng || this.language);\n } else {\n lngs.push(options.lng || this.language);\n }\n var send = function send(l, k, specificDefaultValue) {\n var defaultForMissing = hasDefaultValue && specificDefaultValue !== res ? specificDefaultValue : resForMissing;\n if (_this2.options.missingKeyHandler) {\n _this2.options.missingKeyHandler(l, namespace, k, defaultForMissing, updateMissing, options);\n } else if (_this2.backendConnector && _this2.backendConnector.saveMissing) {\n _this2.backendConnector.saveMissing(l, namespace, k, defaultForMissing, updateMissing, options);\n }\n _this2.emit('missingKey', l, namespace, k, res);\n };\n if (this.options.saveMissing) {\n if (this.options.saveMissingPlurals && needsPluralHandling) {\n lngs.forEach(function (language) {\n _this2.pluralResolver.getSuffixes(language, options).forEach(function (suffix) {\n send([language], key + suffix, options[\"defaultValue\".concat(suffix)] || defaultValue);\n });\n });\n } else {\n send(lngs, key, defaultValue);\n }\n }\n }\n res = this.extendTranslation(res, keys, options, resolved, lastKey);\n if (usedKey && res === key && this.options.appendNamespaceToMissingKey) res = \"\".concat(namespace, \":\").concat(key);\n if ((usedKey || usedDefault) && this.options.parseMissingKeyHandler) {\n if (this.options.compatibilityAPI !== 'v1') {\n res = this.options.parseMissingKeyHandler(this.options.appendNamespaceToMissingKey ? \"\".concat(namespace, \":\").concat(key) : key, usedDefault ? res : undefined);\n } else {\n res = this.options.parseMissingKeyHandler(res);\n }\n }\n }\n if (returnDetails) {\n resolved.res = res;\n return resolved;\n }\n return res;\n }\n }, {\n key: \"extendTranslation\",\n value: function extendTranslation(res, key, options, resolved, lastKey) {\n var _this3 = this;\n if (this.i18nFormat && this.i18nFormat.parse) {\n res = this.i18nFormat.parse(res, _objectSpread$4(_objectSpread$4({}, this.options.interpolation.defaultVariables), options), resolved.usedLng, resolved.usedNS, resolved.usedKey, {\n resolved: resolved\n });\n } else if (!options.skipInterpolation) {\n if (options.interpolation) this.interpolator.init(_objectSpread$4(_objectSpread$4({}, options), {\n interpolation: _objectSpread$4(_objectSpread$4({}, this.options.interpolation), options.interpolation)\n }));\n var skipOnVariables = typeof res === 'string' && (options && options.interpolation && options.interpolation.skipOnVariables !== undefined ? options.interpolation.skipOnVariables : this.options.interpolation.skipOnVariables);\n var nestBef;\n if (skipOnVariables) {\n var nb = res.match(this.interpolator.nestingRegexp);\n nestBef = nb && nb.length;\n }\n var data = options.replace && typeof options.replace !== 'string' ? options.replace : options;\n if (this.options.interpolation.defaultVariables) data = _objectSpread$4(_objectSpread$4({}, this.options.interpolation.defaultVariables), data);\n res = this.interpolator.interpolate(res, data, options.lng || this.language, options);\n if (skipOnVariables) {\n var na = res.match(this.interpolator.nestingRegexp);\n var nestAft = na && na.length;\n if (nestBef < nestAft) options.nest = false;\n }\n if (options.nest !== false) res = this.interpolator.nest(res, function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n if (lastKey && lastKey[0] === args[0] && !options.context) {\n _this3.logger.warn(\"It seems you are nesting recursively key: \".concat(args[0], \" in key: \").concat(key[0]));\n return null;\n }\n return _this3.translate.apply(_this3, args.concat([key]));\n }, options);\n if (options.interpolation) this.interpolator.reset();\n }\n var postProcess = options.postProcess || this.options.postProcess;\n var postProcessorNames = typeof postProcess === 'string' ? [postProcess] : postProcess;\n if (res !== undefined && res !== null && postProcessorNames && postProcessorNames.length && options.applyPostProcessor !== false) {\n res = postProcessor.handle(postProcessorNames, res, key, this.options && this.options.postProcessPassResolved ? _objectSpread$4({\n i18nResolved: resolved\n }, options) : options, this);\n }\n return res;\n }\n }, {\n key: \"resolve\",\n value: function resolve(keys) {\n var _this4 = this;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var found;\n var usedKey;\n var exactUsedKey;\n var usedLng;\n var usedNS;\n if (typeof keys === 'string') keys = [keys];\n keys.forEach(function (k) {\n if (_this4.isValidLookup(found)) return;\n var extracted = _this4.extractFromKey(k, options);\n var key = extracted.key;\n usedKey = key;\n var namespaces = extracted.namespaces;\n if (_this4.options.fallbackNS) namespaces = namespaces.concat(_this4.options.fallbackNS);\n var needsPluralHandling = options.count !== undefined && typeof options.count !== 'string';\n var needsZeroSuffixLookup = needsPluralHandling && !options.ordinal && options.count === 0 && _this4.pluralResolver.shouldUseIntlApi();\n var needsContextHandling = options.context !== undefined && (typeof options.context === 'string' || typeof options.context === 'number') && options.context !== '';\n var codes = options.lngs ? options.lngs : _this4.languageUtils.toResolveHierarchy(options.lng || _this4.language, options.fallbackLng);\n namespaces.forEach(function (ns) {\n if (_this4.isValidLookup(found)) return;\n usedNS = ns;\n if (!checkedLoadedFor[\"\".concat(codes[0], \"-\").concat(ns)] && _this4.utils && _this4.utils.hasLoadedNamespace && !_this4.utils.hasLoadedNamespace(usedNS)) {\n checkedLoadedFor[\"\".concat(codes[0], \"-\").concat(ns)] = true;\n _this4.logger.warn(\"key \\\"\".concat(usedKey, \"\\\" for languages \\\"\").concat(codes.join(', '), \"\\\" won't get resolved as namespace \\\"\").concat(usedNS, \"\\\" was not yet loaded\"), 'This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!');\n }\n codes.forEach(function (code) {\n if (_this4.isValidLookup(found)) return;\n usedLng = code;\n var finalKeys = [key];\n if (_this4.i18nFormat && _this4.i18nFormat.addLookupKeys) {\n _this4.i18nFormat.addLookupKeys(finalKeys, key, code, ns, options);\n } else {\n var pluralSuffix;\n if (needsPluralHandling) pluralSuffix = _this4.pluralResolver.getSuffix(code, options.count, options);\n var zeroSuffix = \"\".concat(_this4.options.pluralSeparator, \"zero\");\n if (needsPluralHandling) {\n finalKeys.push(key + pluralSuffix);\n if (needsZeroSuffixLookup) {\n finalKeys.push(key + zeroSuffix);\n }\n }\n if (needsContextHandling) {\n var contextKey = \"\".concat(key).concat(_this4.options.contextSeparator).concat(options.context);\n finalKeys.push(contextKey);\n if (needsPluralHandling) {\n finalKeys.push(contextKey + pluralSuffix);\n if (needsZeroSuffixLookup) {\n finalKeys.push(contextKey + zeroSuffix);\n }\n }\n }\n }\n var possibleKey;\n while (possibleKey = finalKeys.pop()) {\n if (!_this4.isValidLookup(found)) {\n exactUsedKey = possibleKey;\n found = _this4.getResource(code, ns, possibleKey, options);\n }\n }\n });\n });\n });\n return {\n res: found,\n usedKey: usedKey,\n exactUsedKey: exactUsedKey,\n usedLng: usedLng,\n usedNS: usedNS\n };\n }\n }, {\n key: \"isValidLookup\",\n value: function isValidLookup(res) {\n return res !== undefined && !(!this.options.returnNull && res === null) && !(!this.options.returnEmptyString && res === '');\n }\n }, {\n key: \"getResource\",\n value: function getResource(code, ns, key) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n if (this.i18nFormat && this.i18nFormat.getResource) return this.i18nFormat.getResource(code, ns, key, options);\n return this.resourceStore.getResource(code, ns, key, options);\n }\n }], [{\n key: \"hasDefaultValue\",\n value: function hasDefaultValue(options) {\n var prefix = 'defaultValue';\n for (var option in options) {\n if (Object.prototype.hasOwnProperty.call(options, option) && prefix === option.substring(0, prefix.length) && undefined !== options[option]) {\n return true;\n }\n }\n return false;\n }\n }]);\n return Translator;\n}(EventEmitter);\n\nfunction capitalize(string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n}\nvar LanguageUtil = function () {\n function LanguageUtil(options) {\n _classCallCheck(this, LanguageUtil);\n this.options = options;\n this.supportedLngs = this.options.supportedLngs || false;\n this.logger = baseLogger.create('languageUtils');\n }\n _createClass(LanguageUtil, [{\n key: \"getScriptPartFromCode\",\n value: function getScriptPartFromCode(code) {\n if (!code || code.indexOf('-') < 0) return null;\n var p = code.split('-');\n if (p.length === 2) return null;\n p.pop();\n if (p[p.length - 1].toLowerCase() === 'x') return null;\n return this.formatLanguageCode(p.join('-'));\n }\n }, {\n key: \"getLanguagePartFromCode\",\n value: function getLanguagePartFromCode(code) {\n if (!code || code.indexOf('-') < 0) return code;\n var p = code.split('-');\n return this.formatLanguageCode(p[0]);\n }\n }, {\n key: \"formatLanguageCode\",\n value: function formatLanguageCode(code) {\n if (typeof code === 'string' && code.indexOf('-') > -1) {\n var specialCases = ['hans', 'hant', 'latn', 'cyrl', 'cans', 'mong', 'arab'];\n var p = code.split('-');\n if (this.options.lowerCaseLng) {\n p = p.map(function (part) {\n return part.toLowerCase();\n });\n } else if (p.length === 2) {\n p[0] = p[0].toLowerCase();\n p[1] = p[1].toUpperCase();\n if (specialCases.indexOf(p[1].toLowerCase()) > -1) p[1] = capitalize(p[1].toLowerCase());\n } else if (p.length === 3) {\n p[0] = p[0].toLowerCase();\n if (p[1].length === 2) p[1] = p[1].toUpperCase();\n if (p[0] !== 'sgn' && p[2].length === 2) p[2] = p[2].toUpperCase();\n if (specialCases.indexOf(p[1].toLowerCase()) > -1) p[1] = capitalize(p[1].toLowerCase());\n if (specialCases.indexOf(p[2].toLowerCase()) > -1) p[2] = capitalize(p[2].toLowerCase());\n }\n return p.join('-');\n }\n return this.options.cleanCode || this.options.lowerCaseLng ? code.toLowerCase() : code;\n }\n }, {\n key: \"isSupportedCode\",\n value: function isSupportedCode(code) {\n if (this.options.load === 'languageOnly' || this.options.nonExplicitSupportedLngs) {\n code = this.getLanguagePartFromCode(code);\n }\n return !this.supportedLngs || !this.supportedLngs.length || this.supportedLngs.indexOf(code) > -1;\n }\n }, {\n key: \"getBestMatchFromCodes\",\n value: function getBestMatchFromCodes(codes) {\n var _this = this;\n if (!codes) return null;\n var found;\n codes.forEach(function (code) {\n if (found) return;\n var cleanedLng = _this.formatLanguageCode(code);\n if (!_this.options.supportedLngs || _this.isSupportedCode(cleanedLng)) found = cleanedLng;\n });\n if (!found && this.options.supportedLngs) {\n codes.forEach(function (code) {\n if (found) return;\n var lngOnly = _this.getLanguagePartFromCode(code);\n if (_this.isSupportedCode(lngOnly)) return found = lngOnly;\n found = _this.options.supportedLngs.find(function (supportedLng) {\n if (supportedLng.indexOf(lngOnly) === 0) return supportedLng;\n });\n });\n }\n if (!found) found = this.getFallbackCodes(this.options.fallbackLng)[0];\n return found;\n }\n }, {\n key: \"getFallbackCodes\",\n value: function getFallbackCodes(fallbacks, code) {\n if (!fallbacks) return [];\n if (typeof fallbacks === 'function') fallbacks = fallbacks(code);\n if (typeof fallbacks === 'string') fallbacks = [fallbacks];\n if (Object.prototype.toString.apply(fallbacks) === '[object Array]') return fallbacks;\n if (!code) return fallbacks[\"default\"] || [];\n var found = fallbacks[code];\n if (!found) found = fallbacks[this.getScriptPartFromCode(code)];\n if (!found) found = fallbacks[this.formatLanguageCode(code)];\n if (!found) found = fallbacks[this.getLanguagePartFromCode(code)];\n if (!found) found = fallbacks[\"default\"];\n return found || [];\n }\n }, {\n key: \"toResolveHierarchy\",\n value: function toResolveHierarchy(code, fallbackCode) {\n var _this2 = this;\n var fallbackCodes = this.getFallbackCodes(fallbackCode || this.options.fallbackLng || [], code);\n var codes = [];\n var addCode = function addCode(c) {\n if (!c) return;\n if (_this2.isSupportedCode(c)) {\n codes.push(c);\n } else {\n _this2.logger.warn(\"rejecting language code not found in supportedLngs: \".concat(c));\n }\n };\n if (typeof code === 'string' && code.indexOf('-') > -1) {\n if (this.options.load !== 'languageOnly') addCode(this.formatLanguageCode(code));\n if (this.options.load !== 'languageOnly' && this.options.load !== 'currentOnly') addCode(this.getScriptPartFromCode(code));\n if (this.options.load !== 'currentOnly') addCode(this.getLanguagePartFromCode(code));\n } else if (typeof code === 'string') {\n addCode(this.formatLanguageCode(code));\n }\n fallbackCodes.forEach(function (fc) {\n if (codes.indexOf(fc) < 0) addCode(_this2.formatLanguageCode(fc));\n });\n return codes;\n }\n }]);\n return LanguageUtil;\n}();\n\nvar sets = [{\n lngs: ['ach', 'ak', 'am', 'arn', 'br', 'fil', 'gun', 'ln', 'mfe', 'mg', 'mi', 'oc', 'pt', 'pt-BR', 'tg', 'tl', 'ti', 'tr', 'uz', 'wa'],\n nr: [1, 2],\n fc: 1\n}, {\n lngs: ['af', 'an', 'ast', 'az', 'bg', 'bn', 'ca', 'da', 'de', 'dev', 'el', 'en', 'eo', 'es', 'et', 'eu', 'fi', 'fo', 'fur', 'fy', 'gl', 'gu', 'ha', 'hi', 'hu', 'hy', 'ia', 'it', 'kk', 'kn', 'ku', 'lb', 'mai', 'ml', 'mn', 'mr', 'nah', 'nap', 'nb', 'ne', 'nl', 'nn', 'no', 'nso', 'pa', 'pap', 'pms', 'ps', 'pt-PT', 'rm', 'sco', 'se', 'si', 'so', 'son', 'sq', 'sv', 'sw', 'ta', 'te', 'tk', 'ur', 'yo'],\n nr: [1, 2],\n fc: 2\n}, {\n lngs: ['ay', 'bo', 'cgg', 'fa', 'ht', 'id', 'ja', 'jbo', 'ka', 'km', 'ko', 'ky', 'lo', 'ms', 'sah', 'su', 'th', 'tt', 'ug', 'vi', 'wo', 'zh'],\n nr: [1],\n fc: 3\n}, {\n lngs: ['be', 'bs', 'cnr', 'dz', 'hr', 'ru', 'sr', 'uk'],\n nr: [1, 2, 5],\n fc: 4\n}, {\n lngs: ['ar'],\n nr: [0, 1, 2, 3, 11, 100],\n fc: 5\n}, {\n lngs: ['cs', 'sk'],\n nr: [1, 2, 5],\n fc: 6\n}, {\n lngs: ['csb', 'pl'],\n nr: [1, 2, 5],\n fc: 7\n}, {\n lngs: ['cy'],\n nr: [1, 2, 3, 8],\n fc: 8\n}, {\n lngs: ['fr'],\n nr: [1, 2],\n fc: 9\n}, {\n lngs: ['ga'],\n nr: [1, 2, 3, 7, 11],\n fc: 10\n}, {\n lngs: ['gd'],\n nr: [1, 2, 3, 20],\n fc: 11\n}, {\n lngs: ['is'],\n nr: [1, 2],\n fc: 12\n}, {\n lngs: ['jv'],\n nr: [0, 1],\n fc: 13\n}, {\n lngs: ['kw'],\n nr: [1, 2, 3, 4],\n fc: 14\n}, {\n lngs: ['lt'],\n nr: [1, 2, 10],\n fc: 15\n}, {\n lngs: ['lv'],\n nr: [1, 2, 0],\n fc: 16\n}, {\n lngs: ['mk'],\n nr: [1, 2],\n fc: 17\n}, {\n lngs: ['mnk'],\n nr: [0, 1, 2],\n fc: 18\n}, {\n lngs: ['mt'],\n nr: [1, 2, 11, 20],\n fc: 19\n}, {\n lngs: ['or'],\n nr: [2, 1],\n fc: 2\n}, {\n lngs: ['ro'],\n nr: [1, 2, 20],\n fc: 20\n}, {\n lngs: ['sl'],\n nr: [5, 1, 2, 3],\n fc: 21\n}, {\n lngs: ['he', 'iw'],\n nr: [1, 2, 20, 21],\n fc: 22\n}];\nvar _rulesPluralsTypes = {\n 1: function _(n) {\n return Number(n > 1);\n },\n 2: function _(n) {\n return Number(n != 1);\n },\n 3: function _(n) {\n return 0;\n },\n 4: function _(n) {\n return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);\n },\n 5: function _(n) {\n return Number(n == 0 ? 0 : n == 1 ? 1 : n == 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5);\n },\n 6: function _(n) {\n return Number(n == 1 ? 0 : n >= 2 && n <= 4 ? 1 : 2);\n },\n 7: function _(n) {\n return Number(n == 1 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);\n },\n 8: function _(n) {\n return Number(n == 1 ? 0 : n == 2 ? 1 : n != 8 && n != 11 ? 2 : 3);\n },\n 9: function _(n) {\n return Number(n >= 2);\n },\n 10: function _(n) {\n return Number(n == 1 ? 0 : n == 2 ? 1 : n < 7 ? 2 : n < 11 ? 3 : 4);\n },\n 11: function _(n) {\n return Number(n == 1 || n == 11 ? 0 : n == 2 || n == 12 ? 1 : n > 2 && n < 20 ? 2 : 3);\n },\n 12: function _(n) {\n return Number(n % 10 != 1 || n % 100 == 11);\n },\n 13: function _(n) {\n return Number(n !== 0);\n },\n 14: function _(n) {\n return Number(n == 1 ? 0 : n == 2 ? 1 : n == 3 ? 2 : 3);\n },\n 15: function _(n) {\n return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);\n },\n 16: function _(n) {\n return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n !== 0 ? 1 : 2);\n },\n 17: function _(n) {\n return Number(n == 1 || n % 10 == 1 && n % 100 != 11 ? 0 : 1);\n },\n 18: function _(n) {\n return Number(n == 0 ? 0 : n == 1 ? 1 : 2);\n },\n 19: function _(n) {\n return Number(n == 1 ? 0 : n == 0 || n % 100 > 1 && n % 100 < 11 ? 1 : n % 100 > 10 && n % 100 < 20 ? 2 : 3);\n },\n 20: function _(n) {\n return Number(n == 1 ? 0 : n == 0 || n % 100 > 0 && n % 100 < 20 ? 1 : 2);\n },\n 21: function _(n) {\n return Number(n % 100 == 1 ? 1 : n % 100 == 2 ? 2 : n % 100 == 3 || n % 100 == 4 ? 3 : 0);\n },\n 22: function _(n) {\n return Number(n == 1 ? 0 : n == 2 ? 1 : (n < 0 || n > 10) && n % 10 == 0 ? 2 : 3);\n }\n};\nvar deprecatedJsonVersions = ['v1', 'v2', 'v3'];\nvar suffixesOrder = {\n zero: 0,\n one: 1,\n two: 2,\n few: 3,\n many: 4,\n other: 5\n};\nfunction createRules() {\n var rules = {};\n sets.forEach(function (set) {\n set.lngs.forEach(function (l) {\n rules[l] = {\n numbers: set.nr,\n plurals: _rulesPluralsTypes[set.fc]\n };\n });\n });\n return rules;\n}\nvar PluralResolver = function () {\n function PluralResolver(languageUtils) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _classCallCheck(this, PluralResolver);\n this.languageUtils = languageUtils;\n this.options = options;\n this.logger = baseLogger.create('pluralResolver');\n if ((!this.options.compatibilityJSON || this.options.compatibilityJSON === 'v4') && (typeof Intl === 'undefined' || !Intl.PluralRules)) {\n this.options.compatibilityJSON = 'v3';\n this.logger.error('Your environment seems not to be Intl API compatible, use an Intl.PluralRules polyfill. Will fallback to the compatibilityJSON v3 format handling.');\n }\n this.rules = createRules();\n }\n _createClass(PluralResolver, [{\n key: \"addRule\",\n value: function addRule(lng, obj) {\n this.rules[lng] = obj;\n }\n }, {\n key: \"getRule\",\n value: function getRule(code) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n if (this.shouldUseIntlApi()) {\n try {\n return new Intl.PluralRules(code, {\n type: options.ordinal ? 'ordinal' : 'cardinal'\n });\n } catch (_unused) {\n return;\n }\n }\n return this.rules[code] || this.rules[this.languageUtils.getLanguagePartFromCode(code)];\n }\n }, {\n key: \"needsPlural\",\n value: function needsPlural(code) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var rule = this.getRule(code, options);\n if (this.shouldUseIntlApi()) {\n return rule && rule.resolvedOptions().pluralCategories.length > 1;\n }\n return rule && rule.numbers.length > 1;\n }\n }, {\n key: \"getPluralFormsOfKey\",\n value: function getPluralFormsOfKey(code, key) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n return this.getSuffixes(code, options).map(function (suffix) {\n return \"\".concat(key).concat(suffix);\n });\n }\n }, {\n key: \"getSuffixes\",\n value: function getSuffixes(code) {\n var _this = this;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var rule = this.getRule(code, options);\n if (!rule) {\n return [];\n }\n if (this.shouldUseIntlApi()) {\n return rule.resolvedOptions().pluralCategories.sort(function (pluralCategory1, pluralCategory2) {\n return suffixesOrder[pluralCategory1] - suffixesOrder[pluralCategory2];\n }).map(function (pluralCategory) {\n return \"\".concat(_this.options.prepend).concat(pluralCategory);\n });\n }\n return rule.numbers.map(function (number) {\n return _this.getSuffix(code, number, options);\n });\n }\n }, {\n key: \"getSuffix\",\n value: function getSuffix(code, count) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var rule = this.getRule(code, options);\n if (rule) {\n if (this.shouldUseIntlApi()) {\n return \"\".concat(this.options.prepend).concat(rule.select(count));\n }\n return this.getSuffixRetroCompatible(rule, count);\n }\n this.logger.warn(\"no plural rule found for: \".concat(code));\n return '';\n }\n }, {\n key: \"getSuffixRetroCompatible\",\n value: function getSuffixRetroCompatible(rule, count) {\n var _this2 = this;\n var idx = rule.noAbs ? rule.plurals(count) : rule.plurals(Math.abs(count));\n var suffix = rule.numbers[idx];\n if (this.options.simplifyPluralSuffix && rule.numbers.length === 2 && rule.numbers[0] === 1) {\n if (suffix === 2) {\n suffix = 'plural';\n } else if (suffix === 1) {\n suffix = '';\n }\n }\n var returnSuffix = function returnSuffix() {\n return _this2.options.prepend && suffix.toString() ? _this2.options.prepend + suffix.toString() : suffix.toString();\n };\n if (this.options.compatibilityJSON === 'v1') {\n if (suffix === 1) return '';\n if (typeof suffix === 'number') return \"_plural_\".concat(suffix.toString());\n return returnSuffix();\n } else if (this.options.compatibilityJSON === 'v2') {\n return returnSuffix();\n } else if (this.options.simplifyPluralSuffix && rule.numbers.length === 2 && rule.numbers[0] === 1) {\n return returnSuffix();\n }\n return this.options.prepend && idx.toString() ? this.options.prepend + idx.toString() : idx.toString();\n }\n }, {\n key: \"shouldUseIntlApi\",\n value: function shouldUseIntlApi() {\n return !deprecatedJsonVersions.includes(this.options.compatibilityJSON);\n }\n }]);\n return PluralResolver;\n}();\n\nfunction ownKeys$3(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread$3(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$3(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$3(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nvar Interpolator = function () {\n function Interpolator() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n _classCallCheck(this, Interpolator);\n this.logger = baseLogger.create('interpolator');\n this.options = options;\n this.format = options.interpolation && options.interpolation.format || function (value) {\n return value;\n };\n this.init(options);\n }\n _createClass(Interpolator, [{\n key: \"init\",\n value: function init() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (!options.interpolation) options.interpolation = {\n escapeValue: true\n };\n var iOpts = options.interpolation;\n this.escape = iOpts.escape !== undefined ? iOpts.escape : escape;\n this.escapeValue = iOpts.escapeValue !== undefined ? iOpts.escapeValue : true;\n this.useRawValueToEscape = iOpts.useRawValueToEscape !== undefined ? iOpts.useRawValueToEscape : false;\n this.prefix = iOpts.prefix ? regexEscape(iOpts.prefix) : iOpts.prefixEscaped || '{{';\n this.suffix = iOpts.suffix ? regexEscape(iOpts.suffix) : iOpts.suffixEscaped || '}}';\n this.formatSeparator = iOpts.formatSeparator ? iOpts.formatSeparator : iOpts.formatSeparator || ',';\n this.unescapePrefix = iOpts.unescapeSuffix ? '' : iOpts.unescapePrefix || '-';\n this.unescapeSuffix = this.unescapePrefix ? '' : iOpts.unescapeSuffix || '';\n this.nestingPrefix = iOpts.nestingPrefix ? regexEscape(iOpts.nestingPrefix) : iOpts.nestingPrefixEscaped || regexEscape('$t(');\n this.nestingSuffix = iOpts.nestingSuffix ? regexEscape(iOpts.nestingSuffix) : iOpts.nestingSuffixEscaped || regexEscape(')');\n this.nestingOptionsSeparator = iOpts.nestingOptionsSeparator ? iOpts.nestingOptionsSeparator : iOpts.nestingOptionsSeparator || ',';\n this.maxReplaces = iOpts.maxReplaces ? iOpts.maxReplaces : 1000;\n this.alwaysFormat = iOpts.alwaysFormat !== undefined ? iOpts.alwaysFormat : false;\n this.resetRegExp();\n }\n }, {\n key: \"reset\",\n value: function reset() {\n if (this.options) this.init(this.options);\n }\n }, {\n key: \"resetRegExp\",\n value: function resetRegExp() {\n var regexpStr = \"\".concat(this.prefix, \"(.+?)\").concat(this.suffix);\n this.regexp = new RegExp(regexpStr, 'g');\n var regexpUnescapeStr = \"\".concat(this.prefix).concat(this.unescapePrefix, \"(.+?)\").concat(this.unescapeSuffix).concat(this.suffix);\n this.regexpUnescape = new RegExp(regexpUnescapeStr, 'g');\n var nestingRegexpStr = \"\".concat(this.nestingPrefix, \"(.+?)\").concat(this.nestingSuffix);\n this.nestingRegexp = new RegExp(nestingRegexpStr, 'g');\n }\n }, {\n key: \"interpolate\",\n value: function interpolate(str, data, lng, options) {\n var _this = this;\n var match;\n var value;\n var replaces;\n var defaultData = this.options && this.options.interpolation && this.options.interpolation.defaultVariables || {};\n function regexSafe(val) {\n return val.replace(/\\$/g, '$$$$');\n }\n var handleFormat = function handleFormat(key) {\n if (key.indexOf(_this.formatSeparator) < 0) {\n var path = getPathWithDefaults(data, defaultData, key);\n return _this.alwaysFormat ? _this.format(path, undefined, lng, _objectSpread$3(_objectSpread$3(_objectSpread$3({}, options), data), {}, {\n interpolationkey: key\n })) : path;\n }\n var p = key.split(_this.formatSeparator);\n var k = p.shift().trim();\n var f = p.join(_this.formatSeparator).trim();\n return _this.format(getPathWithDefaults(data, defaultData, k), f, lng, _objectSpread$3(_objectSpread$3(_objectSpread$3({}, options), data), {}, {\n interpolationkey: k\n }));\n };\n this.resetRegExp();\n var missingInterpolationHandler = options && options.missingInterpolationHandler || this.options.missingInterpolationHandler;\n var skipOnVariables = options && options.interpolation && options.interpolation.skipOnVariables !== undefined ? options.interpolation.skipOnVariables : this.options.interpolation.skipOnVariables;\n var todos = [{\n regex: this.regexpUnescape,\n safeValue: function safeValue(val) {\n return regexSafe(val);\n }\n }, {\n regex: this.regexp,\n safeValue: function safeValue(val) {\n return _this.escapeValue ? regexSafe(_this.escape(val)) : regexSafe(val);\n }\n }];\n todos.forEach(function (todo) {\n replaces = 0;\n while (match = todo.regex.exec(str)) {\n var matchedVar = match[1].trim();\n value = handleFormat(matchedVar);\n if (value === undefined) {\n if (typeof missingInterpolationHandler === 'function') {\n var temp = missingInterpolationHandler(str, match, options);\n value = typeof temp === 'string' ? temp : '';\n } else if (options && Object.prototype.hasOwnProperty.call(options, matchedVar)) {\n value = '';\n } else if (skipOnVariables) {\n value = match[0];\n continue;\n } else {\n _this.logger.warn(\"missed to pass in variable \".concat(matchedVar, \" for interpolating \").concat(str));\n value = '';\n }\n } else if (typeof value !== 'string' && !_this.useRawValueToEscape) {\n value = makeString(value);\n }\n var safeValue = todo.safeValue(value);\n str = str.replace(match[0], safeValue);\n if (skipOnVariables) {\n todo.regex.lastIndex += value.length;\n todo.regex.lastIndex -= match[0].length;\n } else {\n todo.regex.lastIndex = 0;\n }\n replaces++;\n if (replaces >= _this.maxReplaces) {\n break;\n }\n }\n });\n return str;\n }\n }, {\n key: \"nest\",\n value: function nest(str, fc) {\n var _this2 = this;\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var match;\n var value;\n var clonedOptions;\n function handleHasOptions(key, inheritedOptions) {\n var sep = this.nestingOptionsSeparator;\n if (key.indexOf(sep) < 0) return key;\n var c = key.split(new RegExp(\"\".concat(sep, \"[ ]*{\")));\n var optionsString = \"{\".concat(c[1]);\n key = c[0];\n optionsString = this.interpolate(optionsString, clonedOptions);\n var matchedSingleQuotes = optionsString.match(/'/g);\n var matchedDoubleQuotes = optionsString.match(/\"/g);\n if (matchedSingleQuotes && matchedSingleQuotes.length % 2 === 0 && !matchedDoubleQuotes || matchedDoubleQuotes.length % 2 !== 0) {\n optionsString = optionsString.replace(/'/g, '\"');\n }\n try {\n clonedOptions = JSON.parse(optionsString);\n if (inheritedOptions) clonedOptions = _objectSpread$3(_objectSpread$3({}, inheritedOptions), clonedOptions);\n } catch (e) {\n this.logger.warn(\"failed parsing options string in nesting for key \".concat(key), e);\n return \"\".concat(key).concat(sep).concat(optionsString);\n }\n delete clonedOptions.defaultValue;\n return key;\n }\n while (match = this.nestingRegexp.exec(str)) {\n var formatters = [];\n clonedOptions = _objectSpread$3({}, options);\n clonedOptions = clonedOptions.replace && typeof clonedOptions.replace !== 'string' ? clonedOptions.replace : clonedOptions;\n clonedOptions.applyPostProcessor = false;\n delete clonedOptions.defaultValue;\n var doReduce = false;\n if (match[0].indexOf(this.formatSeparator) !== -1 && !/{.*}/.test(match[1])) {\n var r = match[1].split(this.formatSeparator).map(function (elem) {\n return elem.trim();\n });\n match[1] = r.shift();\n formatters = r;\n doReduce = true;\n }\n value = fc(handleHasOptions.call(this, match[1].trim(), clonedOptions), clonedOptions);\n if (value && match[0] === str && typeof value !== 'string') return value;\n if (typeof value !== 'string') value = makeString(value);\n if (!value) {\n this.logger.warn(\"missed to resolve \".concat(match[1], \" for nesting \").concat(str));\n value = '';\n }\n if (doReduce) {\n value = formatters.reduce(function (v, f) {\n return _this2.format(v, f, options.lng, _objectSpread$3(_objectSpread$3({}, options), {}, {\n interpolationkey: match[1].trim()\n }));\n }, value.trim());\n }\n str = str.replace(match[0], value);\n this.regexp.lastIndex = 0;\n }\n return str;\n }\n }]);\n return Interpolator;\n}();\n\nfunction ownKeys$2(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread$2(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$2(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$2(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction parseFormatStr(formatStr) {\n var formatName = formatStr.toLowerCase().trim();\n var formatOptions = {};\n if (formatStr.indexOf('(') > -1) {\n var p = formatStr.split('(');\n formatName = p[0].toLowerCase().trim();\n var optStr = p[1].substring(0, p[1].length - 1);\n if (formatName === 'currency' && optStr.indexOf(':') < 0) {\n if (!formatOptions.currency) formatOptions.currency = optStr.trim();\n } else if (formatName === 'relativetime' && optStr.indexOf(':') < 0) {\n if (!formatOptions.range) formatOptions.range = optStr.trim();\n } else {\n var opts = optStr.split(';');\n opts.forEach(function (opt) {\n if (!opt) return;\n var _opt$split = opt.split(':'),\n _opt$split2 = _toArray(_opt$split),\n key = _opt$split2[0],\n rest = _opt$split2.slice(1);\n var val = rest.join(':').trim().replace(/^'+|'+$/g, '');\n if (!formatOptions[key.trim()]) formatOptions[key.trim()] = val;\n if (val === 'false') formatOptions[key.trim()] = false;\n if (val === 'true') formatOptions[key.trim()] = true;\n if (!isNaN(val)) formatOptions[key.trim()] = parseInt(val, 10);\n });\n }\n }\n return {\n formatName: formatName,\n formatOptions: formatOptions\n };\n}\nfunction createCachedFormatter(fn) {\n var cache = {};\n return function invokeFormatter(val, lng, options) {\n var key = lng + JSON.stringify(options);\n var formatter = cache[key];\n if (!formatter) {\n formatter = fn(lng, options);\n cache[key] = formatter;\n }\n return formatter(val);\n };\n}\nvar Formatter = function () {\n function Formatter() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n _classCallCheck(this, Formatter);\n this.logger = baseLogger.create('formatter');\n this.options = options;\n this.formats = {\n number: createCachedFormatter(function (lng, opt) {\n var formatter = new Intl.NumberFormat(lng, _objectSpread$2({}, opt));\n return function (val) {\n return formatter.format(val);\n };\n }),\n currency: createCachedFormatter(function (lng, opt) {\n var formatter = new Intl.NumberFormat(lng, _objectSpread$2(_objectSpread$2({}, opt), {}, {\n style: 'currency'\n }));\n return function (val) {\n return formatter.format(val);\n };\n }),\n datetime: createCachedFormatter(function (lng, opt) {\n var formatter = new Intl.DateTimeFormat(lng, _objectSpread$2({}, opt));\n return function (val) {\n return formatter.format(val);\n };\n }),\n relativetime: createCachedFormatter(function (lng, opt) {\n var formatter = new Intl.RelativeTimeFormat(lng, _objectSpread$2({}, opt));\n return function (val) {\n return formatter.format(val, opt.range || 'day');\n };\n }),\n list: createCachedFormatter(function (lng, opt) {\n var formatter = new Intl.ListFormat(lng, _objectSpread$2({}, opt));\n return function (val) {\n return formatter.format(val);\n };\n })\n };\n this.init(options);\n }\n _createClass(Formatter, [{\n key: \"init\",\n value: function init(services) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n interpolation: {}\n };\n var iOpts = options.interpolation;\n this.formatSeparator = iOpts.formatSeparator ? iOpts.formatSeparator : iOpts.formatSeparator || ',';\n }\n }, {\n key: \"add\",\n value: function add(name, fc) {\n this.formats[name.toLowerCase().trim()] = fc;\n }\n }, {\n key: \"addCached\",\n value: function addCached(name, fc) {\n this.formats[name.toLowerCase().trim()] = createCachedFormatter(fc);\n }\n }, {\n key: \"format\",\n value: function format(value, _format, lng) {\n var _this = this;\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var formats = _format.split(this.formatSeparator);\n var result = formats.reduce(function (mem, f) {\n var _parseFormatStr = parseFormatStr(f),\n formatName = _parseFormatStr.formatName,\n formatOptions = _parseFormatStr.formatOptions;\n if (_this.formats[formatName]) {\n var formatted = mem;\n try {\n var valOptions = options && options.formatParams && options.formatParams[options.interpolationkey] || {};\n var l = valOptions.locale || valOptions.lng || options.locale || options.lng || lng;\n formatted = _this.formats[formatName](mem, l, _objectSpread$2(_objectSpread$2(_objectSpread$2({}, formatOptions), options), valOptions));\n } catch (error) {\n _this.logger.warn(error);\n }\n return formatted;\n } else {\n _this.logger.warn(\"there was no format function for \".concat(formatName));\n }\n return mem;\n }, value);\n return result;\n }\n }]);\n return Formatter;\n}();\n\nfunction ownKeys$1(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread$1(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$1(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$1(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _createSuper$1(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$1(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _isNativeReflectConstruct$1() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction removePending(q, name) {\n if (q.pending[name] !== undefined) {\n delete q.pending[name];\n q.pendingCount--;\n }\n}\nvar Connector = function (_EventEmitter) {\n _inherits(Connector, _EventEmitter);\n var _super = _createSuper$1(Connector);\n function Connector(backend, store, services) {\n var _this;\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n _classCallCheck(this, Connector);\n _this = _super.call(this);\n if (isIE10) {\n EventEmitter.call(_assertThisInitialized(_this));\n }\n _this.backend = backend;\n _this.store = store;\n _this.services = services;\n _this.languageUtils = services.languageUtils;\n _this.options = options;\n _this.logger = baseLogger.create('backendConnector');\n _this.waitingReads = [];\n _this.maxParallelReads = options.maxParallelReads || 10;\n _this.readingCalls = 0;\n _this.maxRetries = options.maxRetries >= 0 ? options.maxRetries : 5;\n _this.retryTimeout = options.retryTimeout >= 1 ? options.retryTimeout : 350;\n _this.state = {};\n _this.queue = [];\n if (_this.backend && _this.backend.init) {\n _this.backend.init(services, options.backend, options);\n }\n return _this;\n }\n _createClass(Connector, [{\n key: \"queueLoad\",\n value: function queueLoad(languages, namespaces, options, callback) {\n var _this2 = this;\n var toLoad = {};\n var pending = {};\n var toLoadLanguages = {};\n var toLoadNamespaces = {};\n languages.forEach(function (lng) {\n var hasAllNamespaces = true;\n namespaces.forEach(function (ns) {\n var name = \"\".concat(lng, \"|\").concat(ns);\n if (!options.reload && _this2.store.hasResourceBundle(lng, ns)) {\n _this2.state[name] = 2;\n } else if (_this2.state[name] < 0) ; else if (_this2.state[name] === 1) {\n if (pending[name] === undefined) pending[name] = true;\n } else {\n _this2.state[name] = 1;\n hasAllNamespaces = false;\n if (pending[name] === undefined) pending[name] = true;\n if (toLoad[name] === undefined) toLoad[name] = true;\n if (toLoadNamespaces[ns] === undefined) toLoadNamespaces[ns] = true;\n }\n });\n if (!hasAllNamespaces) toLoadLanguages[lng] = true;\n });\n if (Object.keys(toLoad).length || Object.keys(pending).length) {\n this.queue.push({\n pending: pending,\n pendingCount: Object.keys(pending).length,\n loaded: {},\n errors: [],\n callback: callback\n });\n }\n return {\n toLoad: Object.keys(toLoad),\n pending: Object.keys(pending),\n toLoadLanguages: Object.keys(toLoadLanguages),\n toLoadNamespaces: Object.keys(toLoadNamespaces)\n };\n }\n }, {\n key: \"loaded\",\n value: function loaded(name, err, data) {\n var s = name.split('|');\n var lng = s[0];\n var ns = s[1];\n if (err) this.emit('failedLoading', lng, ns, err);\n if (data) {\n this.store.addResourceBundle(lng, ns, data);\n }\n this.state[name] = err ? -1 : 2;\n var loaded = {};\n this.queue.forEach(function (q) {\n pushPath(q.loaded, [lng], ns);\n removePending(q, name);\n if (err) q.errors.push(err);\n if (q.pendingCount === 0 && !q.done) {\n Object.keys(q.loaded).forEach(function (l) {\n if (!loaded[l]) loaded[l] = {};\n var loadedKeys = q.loaded[l];\n if (loadedKeys.length) {\n loadedKeys.forEach(function (n) {\n if (loaded[l][n] === undefined) loaded[l][n] = true;\n });\n }\n });\n q.done = true;\n if (q.errors.length) {\n q.callback(q.errors);\n } else {\n q.callback();\n }\n }\n });\n this.emit('loaded', loaded);\n this.queue = this.queue.filter(function (q) {\n return !q.done;\n });\n }\n }, {\n key: \"read\",\n value: function read(lng, ns, fcName) {\n var _this3 = this;\n var tried = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n var wait = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : this.retryTimeout;\n var callback = arguments.length > 5 ? arguments[5] : undefined;\n if (!lng.length) return callback(null, {});\n if (this.readingCalls >= this.maxParallelReads) {\n this.waitingReads.push({\n lng: lng,\n ns: ns,\n fcName: fcName,\n tried: tried,\n wait: wait,\n callback: callback\n });\n return;\n }\n this.readingCalls++;\n var resolver = function resolver(err, data) {\n _this3.readingCalls--;\n if (_this3.waitingReads.length > 0) {\n var next = _this3.waitingReads.shift();\n _this3.read(next.lng, next.ns, next.fcName, next.tried, next.wait, next.callback);\n }\n if (err && data && tried < _this3.maxRetries) {\n setTimeout(function () {\n _this3.read.call(_this3, lng, ns, fcName, tried + 1, wait * 2, callback);\n }, wait);\n return;\n }\n callback(err, data);\n };\n var fc = this.backend[fcName].bind(this.backend);\n if (fc.length === 2) {\n try {\n var r = fc(lng, ns);\n if (r && typeof r.then === 'function') {\n r.then(function (data) {\n return resolver(null, data);\n })[\"catch\"](resolver);\n } else {\n resolver(null, r);\n }\n } catch (err) {\n resolver(err);\n }\n return;\n }\n return fc(lng, ns, resolver);\n }\n }, {\n key: \"prepareLoading\",\n value: function prepareLoading(languages, namespaces) {\n var _this4 = this;\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var callback = arguments.length > 3 ? arguments[3] : undefined;\n if (!this.backend) {\n this.logger.warn('No backend was added via i18next.use. Will not load resources.');\n return callback && callback();\n }\n if (typeof languages === 'string') languages = this.languageUtils.toResolveHierarchy(languages);\n if (typeof namespaces === 'string') namespaces = [namespaces];\n var toLoad = this.queueLoad(languages, namespaces, options, callback);\n if (!toLoad.toLoad.length) {\n if (!toLoad.pending.length) callback();\n return null;\n }\n toLoad.toLoad.forEach(function (name) {\n _this4.loadOne(name);\n });\n }\n }, {\n key: \"load\",\n value: function load(languages, namespaces, callback) {\n this.prepareLoading(languages, namespaces, {}, callback);\n }\n }, {\n key: \"reload\",\n value: function reload(languages, namespaces, callback) {\n this.prepareLoading(languages, namespaces, {\n reload: true\n }, callback);\n }\n }, {\n key: \"loadOne\",\n value: function loadOne(name) {\n var _this5 = this;\n var prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n var s = name.split('|');\n var lng = s[0];\n var ns = s[1];\n this.read(lng, ns, 'read', undefined, undefined, function (err, data) {\n if (err) _this5.logger.warn(\"\".concat(prefix, \"loading namespace \").concat(ns, \" for language \").concat(lng, \" failed\"), err);\n if (!err && data) _this5.logger.log(\"\".concat(prefix, \"loaded namespace \").concat(ns, \" for language \").concat(lng), data);\n _this5.loaded(name, err, data);\n });\n }\n }, {\n key: \"saveMissing\",\n value: function saveMissing(languages, namespace, key, fallbackValue, isUpdate) {\n var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n var clb = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : function () {};\n if (this.services.utils && this.services.utils.hasLoadedNamespace && !this.services.utils.hasLoadedNamespace(namespace)) {\n this.logger.warn(\"did not save key \\\"\".concat(key, \"\\\" as the namespace \\\"\").concat(namespace, \"\\\" was not yet loaded\"), 'This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!');\n return;\n }\n if (key === undefined || key === null || key === '') return;\n if (this.backend && this.backend.create) {\n var opts = _objectSpread$1(_objectSpread$1({}, options), {}, {\n isUpdate: isUpdate\n });\n var fc = this.backend.create.bind(this.backend);\n if (fc.length < 6) {\n try {\n var r;\n if (fc.length === 5) {\n r = fc(languages, namespace, key, fallbackValue, opts);\n } else {\n r = fc(languages, namespace, key, fallbackValue);\n }\n if (r && typeof r.then === 'function') {\n r.then(function (data) {\n return clb(null, data);\n })[\"catch\"](clb);\n } else {\n clb(null, r);\n }\n } catch (err) {\n clb(err);\n }\n } else {\n fc(languages, namespace, key, fallbackValue, clb, opts);\n }\n }\n if (!languages || !languages[0]) return;\n this.store.addResource(languages[0], namespace, key, fallbackValue);\n }\n }]);\n return Connector;\n}(EventEmitter);\n\nfunction get() {\n return {\n debug: false,\n initImmediate: true,\n ns: ['translation'],\n defaultNS: ['translation'],\n fallbackLng: ['dev'],\n fallbackNS: false,\n supportedLngs: false,\n nonExplicitSupportedLngs: false,\n load: 'all',\n preload: false,\n simplifyPluralSuffix: true,\n keySeparator: '.',\n nsSeparator: ':',\n pluralSeparator: '_',\n contextSeparator: '_',\n partialBundledLanguages: false,\n saveMissing: false,\n updateMissing: false,\n saveMissingTo: 'fallback',\n saveMissingPlurals: true,\n missingKeyHandler: false,\n missingInterpolationHandler: false,\n postProcess: false,\n postProcessPassResolved: false,\n returnNull: true,\n returnEmptyString: true,\n returnObjects: false,\n joinArrays: false,\n returnedObjectHandler: false,\n parseMissingKeyHandler: false,\n appendNamespaceToMissingKey: false,\n appendNamespaceToCIMode: false,\n overloadTranslationOptionHandler: function handle(args) {\n var ret = {};\n if (_typeof(args[1]) === 'object') ret = args[1];\n if (typeof args[1] === 'string') ret.defaultValue = args[1];\n if (typeof args[2] === 'string') ret.tDescription = args[2];\n if (_typeof(args[2]) === 'object' || _typeof(args[3]) === 'object') {\n var options = args[3] || args[2];\n Object.keys(options).forEach(function (key) {\n ret[key] = options[key];\n });\n }\n return ret;\n },\n interpolation: {\n escapeValue: true,\n format: function format(value, _format, lng, options) {\n return value;\n },\n prefix: '{{',\n suffix: '}}',\n formatSeparator: ',',\n unescapePrefix: '-',\n nestingPrefix: '$t(',\n nestingSuffix: ')',\n nestingOptionsSeparator: ',',\n maxReplaces: 1000,\n skipOnVariables: true\n }\n };\n}\nfunction transformOptions(options) {\n if (typeof options.ns === 'string') options.ns = [options.ns];\n if (typeof options.fallbackLng === 'string') options.fallbackLng = [options.fallbackLng];\n if (typeof options.fallbackNS === 'string') options.fallbackNS = [options.fallbackNS];\n if (options.supportedLngs && options.supportedLngs.indexOf('cimode') < 0) {\n options.supportedLngs = options.supportedLngs.concat(['cimode']);\n }\n return options;\n}\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction noop() {}\nfunction bindMemberFunctions(inst) {\n var mems = Object.getOwnPropertyNames(Object.getPrototypeOf(inst));\n mems.forEach(function (mem) {\n if (typeof inst[mem] === 'function') {\n inst[mem] = inst[mem].bind(inst);\n }\n });\n}\nvar I18n = function (_EventEmitter) {\n _inherits(I18n, _EventEmitter);\n var _super = _createSuper(I18n);\n function I18n() {\n var _this;\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var callback = arguments.length > 1 ? arguments[1] : undefined;\n _classCallCheck(this, I18n);\n _this = _super.call(this);\n if (isIE10) {\n EventEmitter.call(_assertThisInitialized(_this));\n }\n _this.options = transformOptions(options);\n _this.services = {};\n _this.logger = baseLogger;\n _this.modules = {\n external: []\n };\n bindMemberFunctions(_assertThisInitialized(_this));\n if (callback && !_this.isInitialized && !options.isClone) {\n if (!_this.options.initImmediate) {\n _this.init(options, callback);\n return _possibleConstructorReturn(_this, _assertThisInitialized(_this));\n }\n setTimeout(function () {\n _this.init(options, callback);\n }, 0);\n }\n return _this;\n }\n _createClass(I18n, [{\n key: \"init\",\n value: function init() {\n var _this2 = this;\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var callback = arguments.length > 1 ? arguments[1] : undefined;\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n if (!options.defaultNS && options.defaultNS !== false && options.ns) {\n if (typeof options.ns === 'string') {\n options.defaultNS = options.ns;\n } else if (options.ns.indexOf('translation') < 0) {\n options.defaultNS = options.ns[0];\n }\n }\n var defOpts = get();\n this.options = _objectSpread(_objectSpread(_objectSpread({}, defOpts), this.options), transformOptions(options));\n if (this.options.compatibilityAPI !== 'v1') {\n this.options.interpolation = _objectSpread(_objectSpread({}, defOpts.interpolation), this.options.interpolation);\n }\n if (options.keySeparator !== undefined) {\n this.options.userDefinedKeySeparator = options.keySeparator;\n }\n if (options.nsSeparator !== undefined) {\n this.options.userDefinedNsSeparator = options.nsSeparator;\n }\n function createClassOnDemand(ClassOrObject) {\n if (!ClassOrObject) return null;\n if (typeof ClassOrObject === 'function') return new ClassOrObject();\n return ClassOrObject;\n }\n if (!this.options.isClone) {\n if (this.modules.logger) {\n baseLogger.init(createClassOnDemand(this.modules.logger), this.options);\n } else {\n baseLogger.init(null, this.options);\n }\n var formatter;\n if (this.modules.formatter) {\n formatter = this.modules.formatter;\n } else if (typeof Intl !== 'undefined') {\n formatter = Formatter;\n }\n var lu = new LanguageUtil(this.options);\n this.store = new ResourceStore(this.options.resources, this.options);\n var s = this.services;\n s.logger = baseLogger;\n s.resourceStore = this.store;\n s.languageUtils = lu;\n s.pluralResolver = new PluralResolver(lu, {\n prepend: this.options.pluralSeparator,\n compatibilityJSON: this.options.compatibilityJSON,\n simplifyPluralSuffix: this.options.simplifyPluralSuffix\n });\n if (formatter && (!this.options.interpolation.format || this.options.interpolation.format === defOpts.interpolation.format)) {\n s.formatter = createClassOnDemand(formatter);\n s.formatter.init(s, this.options);\n this.options.interpolation.format = s.formatter.format.bind(s.formatter);\n }\n s.interpolator = new Interpolator(this.options);\n s.utils = {\n hasLoadedNamespace: this.hasLoadedNamespace.bind(this)\n };\n s.backendConnector = new Connector(createClassOnDemand(this.modules.backend), s.resourceStore, s, this.options);\n s.backendConnector.on('*', function (event) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n _this2.emit.apply(_this2, [event].concat(args));\n });\n if (this.modules.languageDetector) {\n s.languageDetector = createClassOnDemand(this.modules.languageDetector);\n if (s.languageDetector.init) s.languageDetector.init(s, this.options.detection, this.options);\n }\n if (this.modules.i18nFormat) {\n s.i18nFormat = createClassOnDemand(this.modules.i18nFormat);\n if (s.i18nFormat.init) s.i18nFormat.init(this);\n }\n this.translator = new Translator(this.services, this.options);\n this.translator.on('*', function (event) {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n _this2.emit.apply(_this2, [event].concat(args));\n });\n this.modules.external.forEach(function (m) {\n if (m.init) m.init(_this2);\n });\n }\n this.format = this.options.interpolation.format;\n if (!callback) callback = noop;\n if (this.options.fallbackLng && !this.services.languageDetector && !this.options.lng) {\n var codes = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);\n if (codes.length > 0 && codes[0] !== 'dev') this.options.lng = codes[0];\n }\n if (!this.services.languageDetector && !this.options.lng) {\n this.logger.warn('init: no languageDetector is used and no lng is defined');\n }\n var storeApi = ['getResource', 'hasResourceBundle', 'getResourceBundle', 'getDataByLanguage'];\n storeApi.forEach(function (fcName) {\n _this2[fcName] = function () {\n var _this2$store;\n return (_this2$store = _this2.store)[fcName].apply(_this2$store, arguments);\n };\n });\n var storeApiChained = ['addResource', 'addResources', 'addResourceBundle', 'removeResourceBundle'];\n storeApiChained.forEach(function (fcName) {\n _this2[fcName] = function () {\n var _this2$store2;\n (_this2$store2 = _this2.store)[fcName].apply(_this2$store2, arguments);\n return _this2;\n };\n });\n var deferred = defer();\n var load = function load() {\n var finish = function finish(err, t) {\n if (_this2.isInitialized && !_this2.initializedStoreOnce) _this2.logger.warn('init: i18next is already initialized. You should call init just once!');\n _this2.isInitialized = true;\n if (!_this2.options.isClone) _this2.logger.log('initialized', _this2.options);\n _this2.emit('initialized', _this2.options);\n deferred.resolve(t);\n callback(err, t);\n };\n if (_this2.languages && _this2.options.compatibilityAPI !== 'v1' && !_this2.isInitialized) return finish(null, _this2.t.bind(_this2));\n _this2.changeLanguage(_this2.options.lng, finish);\n };\n if (this.options.resources || !this.options.initImmediate) {\n load();\n } else {\n setTimeout(load, 0);\n }\n return deferred;\n }\n }, {\n key: \"loadResources\",\n value: function loadResources(language) {\n var _this3 = this;\n var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;\n var usedCallback = callback;\n var usedLng = typeof language === 'string' ? language : this.language;\n if (typeof language === 'function') usedCallback = language;\n if (!this.options.resources || this.options.partialBundledLanguages) {\n if (usedLng && usedLng.toLowerCase() === 'cimode') return usedCallback();\n var toLoad = [];\n var append = function append(lng) {\n if (!lng) return;\n var lngs = _this3.services.languageUtils.toResolveHierarchy(lng);\n lngs.forEach(function (l) {\n if (toLoad.indexOf(l) < 0) toLoad.push(l);\n });\n };\n if (!usedLng) {\n var fallbacks = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);\n fallbacks.forEach(function (l) {\n return append(l);\n });\n } else {\n append(usedLng);\n }\n if (this.options.preload) {\n this.options.preload.forEach(function (l) {\n return append(l);\n });\n }\n this.services.backendConnector.load(toLoad, this.options.ns, function (e) {\n if (!e && !_this3.resolvedLanguage && _this3.language) _this3.setResolvedLanguage(_this3.language);\n usedCallback(e);\n });\n } else {\n usedCallback(null);\n }\n }\n }, {\n key: \"reloadResources\",\n value: function reloadResources(lngs, ns, callback) {\n var deferred = defer();\n if (!lngs) lngs = this.languages;\n if (!ns) ns = this.options.ns;\n if (!callback) callback = noop;\n this.services.backendConnector.reload(lngs, ns, function (err) {\n deferred.resolve();\n callback(err);\n });\n return deferred;\n }\n }, {\n key: \"use\",\n value: function use(module) {\n if (!module) throw new Error('You are passing an undefined module! Please check the object you are passing to i18next.use()');\n if (!module.type) throw new Error('You are passing a wrong module! Please check the object you are passing to i18next.use()');\n if (module.type === 'backend') {\n this.modules.backend = module;\n }\n if (module.type === 'logger' || module.log && module.warn && module.error) {\n this.modules.logger = module;\n }\n if (module.type === 'languageDetector') {\n this.modules.languageDetector = module;\n }\n if (module.type === 'i18nFormat') {\n this.modules.i18nFormat = module;\n }\n if (module.type === 'postProcessor') {\n postProcessor.addPostProcessor(module);\n }\n if (module.type === 'formatter') {\n this.modules.formatter = module;\n }\n if (module.type === '3rdParty') {\n this.modules.external.push(module);\n }\n return this;\n }\n }, {\n key: \"setResolvedLanguage\",\n value: function setResolvedLanguage(l) {\n if (!l || !this.languages) return;\n if (['cimode', 'dev'].indexOf(l) > -1) return;\n for (var li = 0; li < this.languages.length; li++) {\n var lngInLngs = this.languages[li];\n if (['cimode', 'dev'].indexOf(lngInLngs) > -1) continue;\n if (this.store.hasLanguageSomeTranslations(lngInLngs)) {\n this.resolvedLanguage = lngInLngs;\n break;\n }\n }\n }\n }, {\n key: \"changeLanguage\",\n value: function changeLanguage(lng, callback) {\n var _this4 = this;\n this.isLanguageChangingTo = lng;\n var deferred = defer();\n this.emit('languageChanging', lng);\n var setLngProps = function setLngProps(l) {\n _this4.language = l;\n _this4.languages = _this4.services.languageUtils.toResolveHierarchy(l);\n _this4.resolvedLanguage = undefined;\n _this4.setResolvedLanguage(l);\n };\n var done = function done(err, l) {\n if (l) {\n setLngProps(l);\n _this4.translator.changeLanguage(l);\n _this4.isLanguageChangingTo = undefined;\n _this4.emit('languageChanged', l);\n _this4.logger.log('languageChanged', l);\n } else {\n _this4.isLanguageChangingTo = undefined;\n }\n deferred.resolve(function () {\n return _this4.t.apply(_this4, arguments);\n });\n if (callback) callback(err, function () {\n return _this4.t.apply(_this4, arguments);\n });\n };\n var setLng = function setLng(lngs) {\n if (!lng && !lngs && _this4.services.languageDetector) lngs = [];\n var l = typeof lngs === 'string' ? lngs : _this4.services.languageUtils.getBestMatchFromCodes(lngs);\n if (l) {\n if (!_this4.language) {\n setLngProps(l);\n }\n if (!_this4.translator.language) _this4.translator.changeLanguage(l);\n if (_this4.services.languageDetector && _this4.services.languageDetector.cacheUserLanguage) _this4.services.languageDetector.cacheUserLanguage(l);\n }\n _this4.loadResources(l, function (err) {\n done(err, l);\n });\n };\n if (!lng && this.services.languageDetector && !this.services.languageDetector.async) {\n setLng(this.services.languageDetector.detect());\n } else if (!lng && this.services.languageDetector && this.services.languageDetector.async) {\n if (this.services.languageDetector.detect.length === 0) {\n this.services.languageDetector.detect().then(setLng);\n } else {\n this.services.languageDetector.detect(setLng);\n }\n } else {\n setLng(lng);\n }\n return deferred;\n }\n }, {\n key: \"getFixedT\",\n value: function getFixedT(lng, ns, keyPrefix) {\n var _this5 = this;\n var fixedT = function fixedT(key, opts) {\n var options;\n if (_typeof(opts) !== 'object') {\n for (var _len3 = arguments.length, rest = new Array(_len3 > 2 ? _len3 - 2 : 0), _key3 = 2; _key3 < _len3; _key3++) {\n rest[_key3 - 2] = arguments[_key3];\n }\n options = _this5.options.overloadTranslationOptionHandler([key, opts].concat(rest));\n } else {\n options = _objectSpread({}, opts);\n }\n options.lng = options.lng || fixedT.lng;\n options.lngs = options.lngs || fixedT.lngs;\n options.ns = options.ns || fixedT.ns;\n options.keyPrefix = options.keyPrefix || keyPrefix || fixedT.keyPrefix;\n var keySeparator = _this5.options.keySeparator || '.';\n var resultKey;\n if (options.keyPrefix && Array.isArray(key)) {\n resultKey = key.map(function (k) {\n return \"\".concat(options.keyPrefix).concat(keySeparator).concat(k);\n });\n } else {\n resultKey = options.keyPrefix ? \"\".concat(options.keyPrefix).concat(keySeparator).concat(key) : key;\n }\n return _this5.t(resultKey, options);\n };\n if (typeof lng === 'string') {\n fixedT.lng = lng;\n } else {\n fixedT.lngs = lng;\n }\n fixedT.ns = ns;\n fixedT.keyPrefix = keyPrefix;\n return fixedT;\n }\n }, {\n key: \"t\",\n value: function t() {\n var _this$translator;\n return this.translator && (_this$translator = this.translator).translate.apply(_this$translator, arguments);\n }\n }, {\n key: \"exists\",\n value: function exists() {\n var _this$translator2;\n return this.translator && (_this$translator2 = this.translator).exists.apply(_this$translator2, arguments);\n }\n }, {\n key: \"setDefaultNamespace\",\n value: function setDefaultNamespace(ns) {\n this.options.defaultNS = ns;\n }\n }, {\n key: \"hasLoadedNamespace\",\n value: function hasLoadedNamespace(ns) {\n var _this6 = this;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n if (!this.isInitialized) {\n this.logger.warn('hasLoadedNamespace: i18next was not initialized', this.languages);\n return false;\n }\n if (!this.languages || !this.languages.length) {\n this.logger.warn('hasLoadedNamespace: i18n.languages were undefined or empty', this.languages);\n return false;\n }\n var lng = this.resolvedLanguage || this.languages[0];\n var fallbackLng = this.options ? this.options.fallbackLng : false;\n var lastLng = this.languages[this.languages.length - 1];\n if (lng.toLowerCase() === 'cimode') return true;\n var loadNotPending = function loadNotPending(l, n) {\n var loadState = _this6.services.backendConnector.state[\"\".concat(l, \"|\").concat(n)];\n return loadState === -1 || loadState === 2;\n };\n if (options.precheck) {\n var preResult = options.precheck(this, loadNotPending);\n if (preResult !== undefined) return preResult;\n }\n if (this.hasResourceBundle(lng, ns)) return true;\n if (!this.services.backendConnector.backend || this.options.resources && !this.options.partialBundledLanguages) return true;\n if (loadNotPending(lng, ns) && (!fallbackLng || loadNotPending(lastLng, ns))) return true;\n return false;\n }\n }, {\n key: \"loadNamespaces\",\n value: function loadNamespaces(ns, callback) {\n var _this7 = this;\n var deferred = defer();\n if (!this.options.ns) {\n if (callback) callback();\n return Promise.resolve();\n }\n if (typeof ns === 'string') ns = [ns];\n ns.forEach(function (n) {\n if (_this7.options.ns.indexOf(n) < 0) _this7.options.ns.push(n);\n });\n this.loadResources(function (err) {\n deferred.resolve();\n if (callback) callback(err);\n });\n return deferred;\n }\n }, {\n key: \"loadLanguages\",\n value: function loadLanguages(lngs, callback) {\n var deferred = defer();\n if (typeof lngs === 'string') lngs = [lngs];\n var preloaded = this.options.preload || [];\n var newLngs = lngs.filter(function (lng) {\n return preloaded.indexOf(lng) < 0;\n });\n if (!newLngs.length) {\n if (callback) callback();\n return Promise.resolve();\n }\n this.options.preload = preloaded.concat(newLngs);\n this.loadResources(function (err) {\n deferred.resolve();\n if (callback) callback(err);\n });\n return deferred;\n }\n }, {\n key: \"dir\",\n value: function dir(lng) {\n if (!lng) lng = this.resolvedLanguage || (this.languages && this.languages.length > 0 ? this.languages[0] : this.language);\n if (!lng) return 'rtl';\n var rtlLngs = ['ar', 'shu', 'sqr', 'ssh', 'xaa', 'yhd', 'yud', 'aao', 'abh', 'abv', 'acm', 'acq', 'acw', 'acx', 'acy', 'adf', 'ads', 'aeb', 'aec', 'afb', 'ajp', 'apc', 'apd', 'arb', 'arq', 'ars', 'ary', 'arz', 'auz', 'avl', 'ayh', 'ayl', 'ayn', 'ayp', 'bbz', 'pga', 'he', 'iw', 'ps', 'pbt', 'pbu', 'pst', 'prp', 'prd', 'ug', 'ur', 'ydd', 'yds', 'yih', 'ji', 'yi', 'hbo', 'men', 'xmn', 'fa', 'jpr', 'peo', 'pes', 'prs', 'dv', 'sam', 'ckb'];\n var languageUtils = this.services && this.services.languageUtils || new LanguageUtil(get());\n return rtlLngs.indexOf(languageUtils.getLanguagePartFromCode(lng)) > -1 || lng.toLowerCase().indexOf('-arab') > 1 ? 'rtl' : 'ltr';\n }\n }, {\n key: \"cloneInstance\",\n value: function cloneInstance() {\n var _this8 = this;\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;\n var mergedOptions = _objectSpread(_objectSpread(_objectSpread({}, this.options), options), {\n isClone: true\n });\n var clone = new I18n(mergedOptions);\n if (options.debug !== undefined || options.prefix !== undefined) {\n clone.logger = clone.logger.clone(options);\n }\n var membersToCopy = ['store', 'services', 'language'];\n membersToCopy.forEach(function (m) {\n clone[m] = _this8[m];\n });\n clone.services = _objectSpread({}, this.services);\n clone.services.utils = {\n hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone)\n };\n clone.translator = new Translator(clone.services, clone.options);\n clone.translator.on('*', function (event) {\n for (var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n args[_key4 - 1] = arguments[_key4];\n }\n clone.emit.apply(clone, [event].concat(args));\n });\n clone.init(mergedOptions, callback);\n clone.translator.options = clone.options;\n clone.translator.backendConnector.services.utils = {\n hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone)\n };\n return clone;\n }\n }, {\n key: \"toJSON\",\n value: function toJSON() {\n return {\n options: this.options,\n store: this.store,\n language: this.language,\n languages: this.languages,\n resolvedLanguage: this.resolvedLanguage\n };\n }\n }]);\n return I18n;\n}(EventEmitter);\n_defineProperty(I18n, \"createInstance\", function () {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var callback = arguments.length > 1 ? arguments[1] : undefined;\n return new I18n(options, callback);\n});\nvar instance = I18n.createInstance();\ninstance.createInstance = I18n.createInstance;\n\nvar createInstance = instance.createInstance;\nvar dir = instance.dir;\nvar init = instance.init;\nvar loadResources = instance.loadResources;\nvar reloadResources = instance.reloadResources;\nvar use = instance.use;\nvar changeLanguage = instance.changeLanguage;\nvar getFixedT = instance.getFixedT;\nvar t = instance.t;\nvar exists = instance.exists;\nvar setDefaultNamespace = instance.setDefaultNamespace;\nvar hasLoadedNamespace = instance.hasLoadedNamespace;\nvar loadNamespaces = instance.loadNamespaces;\nvar loadLanguages = instance.loadLanguages;\n\nexport { changeLanguage, createInstance, instance as default, dir, exists, getFixedT, hasLoadedNamespace, init, loadLanguages, loadNamespaces, loadResources, reloadResources, setDefaultNamespace, t, use };\n","export default function buildMatchPatternFn(args) {\n return function (string) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var matchResult = string.match(args.matchPattern);\n if (!matchResult) return null;\n var matchedString = matchResult[0];\n var parseResult = string.match(args.parsePattern);\n if (!parseResult) return null;\n var value = args.valueCallback ? args.valueCallback(parseResult[0]) : parseResult[0];\n value = options.valueCallback ? options.valueCallback(value) : value;\n var rest = string.slice(matchedString.length);\n return {\n value: value,\n rest: rest\n };\n };\n}","'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nmodule.exports = function equal(a, b) {\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n for (i = length; i-- !== 0;) {\n var key = keys[i];\n\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n }\n\n // true if both NaN, false otherwise\n return a!==a && b!==b;\n};\n","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getHours\n * @category Hour Helpers\n * @summary Get the hours of the given date.\n *\n * @description\n * Get the hours of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the hours\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the hours of 29 February 2012 11:45:00:\n * const result = getHours(new Date(2012, 1, 29, 11, 45))\n * //=> 11\n */\n\nexport default function getHours(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var hours = date.getHours();\n return hours;\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name setHours\n * @category Hour Helpers\n * @summary Set the hours to the given date.\n *\n * @description\n * Set the hours to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} hours - the hours of the new date\n * @returns {Date} the new date with the hours set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set 4 hours to 1 September 2014 11:30:00:\n * var result = setHours(new Date(2014, 8, 1, 11, 30), 4)\n * //=> Mon Sep 01 2014 04:30:00\n */\n\nexport default function setHours(dirtyDate, dirtyHours) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var hours = toInteger(dirtyHours);\n date.setHours(hours);\n return date;\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name setMinutes\n * @category Minute Helpers\n * @summary Set the minutes to the given date.\n *\n * @description\n * Set the minutes to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} minutes - the minutes of the new date\n * @returns {Date} the new date with the minutes set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set 45 minutes to 1 September 2014 11:30:40:\n * const result = setMinutes(new Date(2014, 8, 1, 11, 30, 40), 45)\n * //=> Mon Sep 01 2014 11:45:40\n */\n\nexport default function setMinutes(dirtyDate, dirtyMinutes) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var minutes = toInteger(dirtyMinutes);\n date.setMinutes(minutes);\n return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getSeconds\n * @category Second Helpers\n * @summary Get the seconds of the given date.\n *\n * @description\n * Get the seconds of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the seconds\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the seconds of 29 February 2012 11:45:05.123:\n * const result = getSeconds(new Date(2012, 1, 29, 11, 45, 5, 123))\n * //=> 5\n */\n\nexport default function getSeconds(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var seconds = date.getSeconds();\n return seconds;\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name setSeconds\n * @category Second Helpers\n * @summary Set the seconds to the given date.\n *\n * @description\n * Set the seconds to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} seconds - the seconds of the new date\n * @returns {Date} the new date with the seconds set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set 45 seconds to 1 September 2014 11:30:40:\n * const result = setSeconds(new Date(2014, 8, 1, 11, 30, 40), 45)\n * //=> Mon Sep 01 2014 11:30:45\n */\n\nexport default function setSeconds(dirtyDate, dirtySeconds) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var seconds = toInteger(dirtySeconds);\n date.setSeconds(seconds);\n return date;\n}","import startOfDay from \"../startOfDay/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isSameDay\n * @category Day Helpers\n * @summary Are the given dates in the same day?\n *\n * @description\n * Are the given dates in the same day?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same day\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 4 September 06:00:00 and 4 September 18:00:00 in the same day?\n * var result = isSameDay(new Date(2014, 8, 4, 6, 0), new Date(2014, 8, 4, 18, 0))\n * //=> true\n */\n\nexport default function isSameDay(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeftStartOfDay = startOfDay(dirtyDateLeft);\n var dateRightStartOfDay = startOfDay(dirtyDateRight);\n return dateLeftStartOfDay.getTime() === dateRightStartOfDay.getTime();\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isSameMonth\n * @category Month Helpers\n * @summary Are the given dates in the same month?\n *\n * @description\n * Are the given dates in the same month?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same month\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 2 September 2014 and 25 September 2014 in the same month?\n * var result = isSameMonth(new Date(2014, 8, 2), new Date(2014, 8, 25))\n * //=> true\n */\n\nexport default function isSameMonth(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeft = toDate(dirtyDateLeft);\n var dateRight = toDate(dirtyDateRight);\n return dateLeft.getFullYear() === dateRight.getFullYear() && dateLeft.getMonth() === dateRight.getMonth();\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isSameYear\n * @category Year Helpers\n * @summary Are the given dates in the same year?\n *\n * @description\n * Are the given dates in the same year?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same year\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 2 September 2014 and 25 September 2014 in the same year?\n * var result = isSameYear(new Date(2014, 8, 2), new Date(2014, 8, 25))\n * //=> true\n */\n\nexport default function isSameYear(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeft = toDate(dirtyDateLeft);\n var dateRight = toDate(dirtyDateRight);\n return dateLeft.getFullYear() === dateRight.getFullYear();\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getYear\n * @category Year Helpers\n * @summary Get the year of the given date.\n *\n * @description\n * Get the year of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which year is 2 July 2014?\n * const result = getYear(new Date(2014, 6, 2))\n * //=> 2014\n */\n\nexport default function getYear(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var year = date.getFullYear();\n return year;\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name setYear\n * @category Year Helpers\n * @summary Set the year to the given date.\n *\n * @description\n * Set the year to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} year - the year of the new date\n * @returns {Date} the new date with the year set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set year 2013 to 1 September 2014:\n * const result = setYear(new Date(2014, 8, 1), 2013)\n * //=> Sun Sep 01 2013 00:00:00\n */\n\nexport default function setYear(dirtyDate, dirtyYear) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var year = toInteger(dirtyYear); // Check if date is Invalid Date because Date.prototype.setFullYear ignores the value of Invalid Date\n\n if (isNaN(date.getTime())) {\n return new Date(NaN);\n }\n\n date.setFullYear(year);\n return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isEqual\n * @category Common Helpers\n * @summary Are the given dates equal?\n *\n * @description\n * Are the given dates equal?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to compare\n * @param {Date|Number} dateRight - the second date to compare\n * @returns {Boolean} the dates are equal\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 2 July 2014 06:30:45.000 and 2 July 2014 06:30:45.500 equal?\n * var result = isEqual(\n * new Date(2014, 6, 2, 6, 30, 45, 0),\n * new Date(2014, 6, 2, 6, 30, 45, 500)\n * )\n * //=> false\n */\n\nexport default function isEqual(dirtyLeftDate, dirtyRightDate) {\n requiredArgs(2, arguments);\n var dateLeft = toDate(dirtyLeftDate);\n var dateRight = toDate(dirtyRightDate);\n return dateLeft.getTime() === dateRight.getTime();\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name eachDayOfInterval\n * @category Interval Helpers\n * @summary Return the array of dates within the specified time interval.\n *\n * @description\n * Return the array of dates within the specified time interval.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `eachDay` to `eachDayOfInterval`.\n * This change was made to mirror the use of the word \"interval\" in standard ISO 8601:2004 terminology:\n *\n * ```\n * 2.1.3\n * time interval\n * part of the time axis limited by two instants\n * ```\n *\n * Also, this function now accepts an object with `start` and `end` properties\n * instead of two arguments as an interval.\n * This function now throws `RangeError` if the start of the interval is after its end\n * or if any date in the interval is `Invalid Date`.\n *\n * ```javascript\n * // Before v2.0.0\n *\n * eachDay(new Date(2014, 0, 10), new Date(2014, 0, 20))\n *\n * // v2.0.0 onward\n *\n * eachDayOfInterval(\n * { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) }\n * )\n * ```\n *\n * @param {Interval} interval - the interval. See [Interval]{@link https://date-fns.org/docs/Interval}\n * @param {Object} [options] - an object with options.\n * @param {Number} [options.step=1] - the step to increment by. The value should be more than 1.\n * @returns {Date[]} the array with starts of days from the day of the interval start to the day of the interval end\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.step` must be a number greater than 1\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // Each day between 6 October 2014 and 10 October 2014:\n * const result = eachDayOfInterval({\n * start: new Date(2014, 9, 6),\n * end: new Date(2014, 9, 10)\n * })\n * //=> [\n * // Mon Oct 06 2014 00:00:00,\n * // Tue Oct 07 2014 00:00:00,\n * // Wed Oct 08 2014 00:00:00,\n * // Thu Oct 09 2014 00:00:00,\n * // Fri Oct 10 2014 00:00:00\n * // ]\n */\n\nexport default function eachDayOfInterval(dirtyInterval, options) {\n requiredArgs(1, arguments);\n var interval = dirtyInterval || {};\n var startDate = toDate(interval.start);\n var endDate = toDate(interval.end);\n var endTime = endDate.getTime(); // Throw an exception if start date is after end date or if any date is `Invalid Date`\n\n if (!(startDate.getTime() <= endTime)) {\n throw new RangeError('Invalid interval');\n }\n\n var dates = [];\n var currentDate = startDate;\n currentDate.setHours(0, 0, 0, 0);\n var step = options && 'step' in options ? Number(options.step) : 1;\n if (step < 1 || isNaN(step)) throw new RangeError('`options.step` must be a number greater than 1');\n\n while (currentDate.getTime() <= endTime) {\n dates.push(toDate(currentDate));\n currentDate.setDate(currentDate.getDate() + step);\n currentDate.setHours(0, 0, 0, 0);\n }\n\n return dates;\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport addMonths from \"../addMonths/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addYears\n * @category Year Helpers\n * @summary Add the specified number of years to the given date.\n *\n * @description\n * Add the specified number of years to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of years to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the years added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 5 years to 1 September 2014:\n * const result = addYears(new Date(2014, 8, 1), 5)\n * //=> Sun Sep 01 2019 00:00:00\n */\n\nexport default function addYears(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var amount = toInteger(dirtyAmount);\n return addMonths(dirtyDate, amount * 12);\n}","import lookup from 'void-elements'\nconst attrRE = /\\s([^'\"/\\s><]+?)[\\s/>]|([^\\s=]+)=\\s?(\".*?\"|'.*?')/g\n\nexport default function stringify(tag) {\n const res = {\n type: 'tag',\n name: '',\n voidElement: false,\n attrs: {},\n children: [],\n }\n\n const tagMatch = tag.match(/<\\/?([^\\s]+?)[/\\s>]/)\n if (tagMatch) {\n res.name = tagMatch[1]\n if (\n lookup[tagMatch[1]] ||\n tag.charAt(tag.length - 2) === '/'\n ) {\n res.voidElement = true\n }\n\n // handle comment tag\n if (res.name.startsWith('!--')) {\n const endIndex = tag.indexOf('-->')\n return {\n type: 'comment',\n comment: endIndex !== -1 ? tag.slice(4, endIndex) : '',\n }\n }\n }\n\n const reg = new RegExp(attrRE)\n let result = null\n for (;;) {\n result = reg.exec(tag)\n\n if (result === null) {\n break\n }\n\n if (!result[0].trim()) {\n continue\n }\n\n if (result[1]) {\n const attr = result[1].trim()\n let arr = [attr, '']\n\n if (attr.indexOf('=') > -1) {\n arr = attr.split('=')\n }\n\n res.attrs[arr[0]] = arr[1]\n reg.lastIndex--\n } else if (result[2]) {\n res.attrs[result[2]] = result[3].trim().substring(1, result[3].length - 1)\n }\n }\n\n return res\n}\n","import parseTag from './parse-tag'\n\nconst tagRE = /<[a-zA-Z0-9\\-\\!\\/](?:\"[^\"]*\"|'[^']*'|[^'\">])*>/g\nconst whitespaceRE = /^\\s*$/\n\n// re-used obj for quick lookups of components\nconst empty = Object.create(null)\n\nexport default function parse(html, options) {\n options || (options = {})\n options.components || (options.components = empty)\n const result = []\n const arr = []\n let current\n let level = -1\n let inComponent = false\n\n // handle text at top level\n if (html.indexOf('<') !== 0) {\n var end = html.indexOf('<')\n result.push({\n type: 'text',\n content: end === -1 ? html : html.substring(0, end),\n })\n }\n\n html.replace(tagRE, function (tag, index) {\n if (inComponent) {\n if (tag !== '') {\n return\n } else {\n inComponent = false\n }\n }\n const isOpen = tag.charAt(1) !== '/'\n const isComment = tag.startsWith(''\n return buff\n }\n}\n\nexport default function (doc) {\n return doc.reduce(function (token, rootEl) {\n return token + stringify('', rootEl)\n }, '')\n}\n","import parse from './parse'\nimport stringify from './stringify'\n\nexport default {\n parse,\n stringify,\n}\n","function replaceClassName(origClass, classToRemove) {\n return origClass.replace(new RegExp(\"(^|\\\\s)\" + classToRemove + \"(?:\\\\s|$)\", 'g'), '$1').replace(/\\s+/g, ' ').replace(/^\\s*|\\s*$/g, '');\n}\n/**\n * Removes a CSS class from a given element.\n * \n * @param element the element\n * @param className the CSS class name\n */\n\n\nexport default function removeClass(element, className) {\n if (element.classList) {\n element.classList.remove(className);\n } else if (typeof element.className === 'string') {\n element.className = replaceClassName(element.className, className);\n } else {\n element.setAttribute('class', replaceClassName(element.className && element.className.baseVal || '', className));\n }\n}","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.i18nextResourcesToBackend = factory());\n})(this, (function () { 'use strict';\n\n var resourcesToBackend = function resourcesToBackend(res) {\n return {\n type: 'backend',\n init: function init(services, backendOptions, i18nextOptions) {},\n read: function read(language, namespace, callback) {\n if (typeof res === 'function') {\n if (res.length === 2) {\n try {\n var r = res(language, namespace);\n if (r && typeof r.then === 'function') {\n r.then(function (data) {\n return callback(null, data && data.__esModule && data.default || data);\n }).catch(callback);\n } else {\n callback(null, r);\n }\n } catch (err) {\n callback(err);\n }\n return;\n }\n res(language, namespace, callback);\n return;\n }\n callback(null, res && res[language] && res[language][namespace]);\n }\n };\n };\n\n return resourcesToBackend;\n\n}));\n","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { defaults, makePromise } from './utils.js';\nimport request from './request.js';\nvar getDefaults = function getDefaults() {\n return {\n loadPath: '/locales/{{lng}}/{{ns}}.json',\n addPath: '/locales/add/{{lng}}/{{ns}}',\n allowMultiLoading: false,\n parse: function parse(data) {\n return JSON.parse(data);\n },\n stringify: JSON.stringify,\n parsePayload: function parsePayload(namespace, key, fallbackValue) {\n return _defineProperty({}, key, fallbackValue || '');\n },\n request: request,\n reloadInterval: typeof window !== 'undefined' ? false : 60 * 60 * 1000,\n customHeaders: {},\n queryStringParams: {},\n crossDomain: false,\n withCredentials: false,\n overrideMimeType: false,\n requestOptions: {\n mode: 'cors',\n credentials: 'same-origin',\n cache: 'default'\n }\n };\n};\nvar Backend = function () {\n function Backend(services) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var allOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n _classCallCheck(this, Backend);\n this.services = services;\n this.options = options;\n this.allOptions = allOptions;\n this.type = 'backend';\n this.init(services, options, allOptions);\n }\n _createClass(Backend, [{\n key: \"init\",\n value: function init(services) {\n var _this = this;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var allOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n this.services = services;\n this.options = defaults(options, this.options || {}, getDefaults());\n this.allOptions = allOptions;\n if (this.services && this.options.reloadInterval) {\n setInterval(function () {\n return _this.reload();\n }, this.options.reloadInterval);\n }\n }\n }, {\n key: \"readMulti\",\n value: function readMulti(languages, namespaces, callback) {\n this._readAny(languages, languages, namespaces, namespaces, callback);\n }\n }, {\n key: \"read\",\n value: function read(language, namespace, callback) {\n this._readAny([language], language, [namespace], namespace, callback);\n }\n }, {\n key: \"_readAny\",\n value: function _readAny(languages, loadUrlLanguages, namespaces, loadUrlNamespaces, callback) {\n var _this2 = this;\n var loadPath = this.options.loadPath;\n if (typeof this.options.loadPath === 'function') {\n loadPath = this.options.loadPath(languages, namespaces);\n }\n loadPath = makePromise(loadPath);\n loadPath.then(function (resolvedLoadPath) {\n if (!resolvedLoadPath) return callback(null, {});\n var url = _this2.services.interpolator.interpolate(resolvedLoadPath, {\n lng: languages.join('+'),\n ns: namespaces.join('+')\n });\n _this2.loadUrl(url, callback, loadUrlLanguages, loadUrlNamespaces);\n });\n }\n }, {\n key: \"loadUrl\",\n value: function loadUrl(url, callback, languages, namespaces) {\n var _this3 = this;\n this.options.request(this.options, url, undefined, function (err, res) {\n if (res && (res.status >= 500 && res.status < 600 || !res.status)) return callback('failed loading ' + url + '; status code: ' + res.status, true);\n if (res && res.status >= 400 && res.status < 500) return callback('failed loading ' + url + '; status code: ' + res.status, false);\n if (!res && err && err.message && err.message.indexOf('Failed to fetch') > -1) return callback('failed loading ' + url + ': ' + err.message, true);\n if (err) return callback(err, false);\n var ret, parseErr;\n try {\n if (typeof res.data === 'string') {\n ret = _this3.options.parse(res.data, languages, namespaces);\n } else {\n ret = res.data;\n }\n } catch (e) {\n parseErr = 'failed parsing ' + url + ' to json';\n }\n if (parseErr) return callback(parseErr, false);\n callback(null, ret);\n });\n }\n }, {\n key: \"create\",\n value: function create(languages, namespace, key, fallbackValue, callback) {\n var _this4 = this;\n if (!this.options.addPath) return;\n if (typeof languages === 'string') languages = [languages];\n var payload = this.options.parsePayload(namespace, key, fallbackValue);\n var finished = 0;\n var dataArray = [];\n var resArray = [];\n languages.forEach(function (lng) {\n var addPath = _this4.options.addPath;\n if (typeof _this4.options.addPath === 'function') {\n addPath = _this4.options.addPath(lng, namespace);\n }\n var url = _this4.services.interpolator.interpolate(addPath, {\n lng: lng,\n ns: namespace\n });\n _this4.options.request(_this4.options, url, payload, function (data, res) {\n finished += 1;\n dataArray.push(data);\n resArray.push(res);\n if (finished === languages.length) {\n if (typeof callback === 'function') callback(dataArray, resArray);\n }\n });\n });\n }\n }, {\n key: \"reload\",\n value: function reload() {\n var _this5 = this;\n var _this$services = this.services,\n backendConnector = _this$services.backendConnector,\n languageUtils = _this$services.languageUtils,\n logger = _this$services.logger;\n var currentLanguage = backendConnector.language;\n if (currentLanguage && currentLanguage.toLowerCase() === 'cimode') return;\n var toLoad = [];\n var append = function append(lng) {\n var lngs = languageUtils.toResolveHierarchy(lng);\n lngs.forEach(function (l) {\n if (toLoad.indexOf(l) < 0) toLoad.push(l);\n });\n };\n append(currentLanguage);\n if (this.allOptions.preload) this.allOptions.preload.forEach(function (l) {\n return append(l);\n });\n toLoad.forEach(function (lng) {\n _this5.allOptions.ns.forEach(function (ns) {\n backendConnector.read(lng, ns, 'read', null, null, function (err, data) {\n if (err) logger.warn(\"loading namespace \".concat(ns, \" for language \").concat(lng, \" failed\"), err);\n if (!err && data) logger.log(\"loaded namespace \".concat(ns, \" for language \").concat(lng), data);\n backendConnector.loaded(\"\".concat(lng, \"|\").concat(ns), err, data);\n });\n });\n });\n }\n }]);\n return Backend;\n}();\nBackend.type = 'backend';\nexport default Backend;","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nimport { defaults, hasXMLHttpRequest } from './utils.js';\nimport * as fetchNode from './getFetch.cjs';\nvar fetchApi;\nif (typeof fetch === 'function') {\n if (typeof global !== 'undefined' && global.fetch) {\n fetchApi = global.fetch;\n } else if (typeof window !== 'undefined' && window.fetch) {\n fetchApi = window.fetch;\n } else {\n fetchApi = fetch;\n }\n}\nvar XmlHttpRequestApi;\nif (hasXMLHttpRequest()) {\n if (typeof global !== 'undefined' && global.XMLHttpRequest) {\n XmlHttpRequestApi = global.XMLHttpRequest;\n } else if (typeof window !== 'undefined' && window.XMLHttpRequest) {\n XmlHttpRequestApi = window.XMLHttpRequest;\n }\n}\nvar ActiveXObjectApi;\nif (typeof ActiveXObject === 'function') {\n if (typeof global !== 'undefined' && global.ActiveXObject) {\n ActiveXObjectApi = global.ActiveXObject;\n } else if (typeof window !== 'undefined' && window.ActiveXObject) {\n ActiveXObjectApi = window.ActiveXObject;\n }\n}\nif (!fetchApi && fetchNode && !XmlHttpRequestApi && !ActiveXObjectApi) fetchApi = fetchNode.default || fetchNode;\nif (typeof fetchApi !== 'function') fetchApi = undefined;\nvar addQueryString = function addQueryString(url, params) {\n if (params && _typeof(params) === 'object') {\n var queryString = '';\n for (var paramName in params) {\n queryString += '&' + encodeURIComponent(paramName) + '=' + encodeURIComponent(params[paramName]);\n }\n if (!queryString) return url;\n url = url + (url.indexOf('?') !== -1 ? '&' : '?') + queryString.slice(1);\n }\n return url;\n};\nvar fetchIt = function fetchIt(url, fetchOptions, callback) {\n fetchApi(url, fetchOptions).then(function (response) {\n if (!response.ok) return callback(response.statusText || 'Error', {\n status: response.status\n });\n response.text().then(function (data) {\n callback(null, {\n status: response.status,\n data: data\n });\n }).catch(callback);\n }).catch(callback);\n};\nvar omitFetchOptions = false;\nvar requestWithFetch = function requestWithFetch(options, url, payload, callback) {\n if (options.queryStringParams) {\n url = addQueryString(url, options.queryStringParams);\n }\n var headers = defaults({}, typeof options.customHeaders === 'function' ? options.customHeaders() : options.customHeaders);\n if (payload) headers['Content-Type'] = 'application/json';\n var reqOptions = typeof options.requestOptions === 'function' ? options.requestOptions(payload) : options.requestOptions;\n var fetchOptions = defaults({\n method: payload ? 'POST' : 'GET',\n body: payload ? options.stringify(payload) : undefined,\n headers: headers\n }, omitFetchOptions ? {} : reqOptions);\n try {\n fetchIt(url, fetchOptions, callback);\n } catch (e) {\n if (!reqOptions || Object.keys(reqOptions).length === 0 || !e.message || e.message.indexOf('not implemented') < 0) {\n return callback(e);\n }\n try {\n Object.keys(reqOptions).forEach(function (opt) {\n delete fetchOptions[opt];\n });\n fetchIt(url, fetchOptions, callback);\n omitFetchOptions = true;\n } catch (err) {\n callback(err);\n }\n }\n};\nvar requestWithXmlHttpRequest = function requestWithXmlHttpRequest(options, url, payload, callback) {\n if (payload && _typeof(payload) === 'object') {\n payload = addQueryString('', payload).slice(1);\n }\n if (options.queryStringParams) {\n url = addQueryString(url, options.queryStringParams);\n }\n try {\n var x;\n if (XmlHttpRequestApi) {\n x = new XmlHttpRequestApi();\n } else {\n x = new ActiveXObjectApi('MSXML2.XMLHTTP.3.0');\n }\n x.open(payload ? 'POST' : 'GET', url, 1);\n if (!options.crossDomain) {\n x.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n }\n x.withCredentials = !!options.withCredentials;\n if (payload) {\n x.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n }\n if (x.overrideMimeType) {\n x.overrideMimeType('application/json');\n }\n var h = options.customHeaders;\n h = typeof h === 'function' ? h() : h;\n if (h) {\n for (var i in h) {\n x.setRequestHeader(i, h[i]);\n }\n }\n x.onreadystatechange = function () {\n x.readyState > 3 && callback(x.status >= 400 ? x.statusText : null, {\n status: x.status,\n data: x.responseText\n });\n };\n x.send(payload);\n } catch (e) {\n console && console.log(e);\n }\n};\nvar request = function request(options, url, payload, callback) {\n if (typeof payload === 'function') {\n callback = payload;\n payload = undefined;\n }\n callback = callback || function () {};\n if (fetchApi && url.indexOf('file:') !== 0) {\n return requestWithFetch(options, url, payload, callback);\n }\n if (hasXMLHttpRequest() || typeof ActiveXObject === 'function') {\n return requestWithXmlHttpRequest(options, url, payload, callback);\n }\n callback(new Error('No fetch and no xhr implementation found!'));\n};\nexport default request;","import toInteger from \"../toInteger/index.js\";\nimport toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function setUTCDay(dirtyDate, dirtyDay, dirtyOptions) {\n requiredArgs(2, arguments);\n var options = dirtyOptions || {};\n var locale = options.locale;\n var localeWeekStartsOn = locale && locale.options && locale.options.weekStartsOn;\n var defaultWeekStartsOn = localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn);\n var weekStartsOn = options.weekStartsOn == null ? defaultWeekStartsOn : toInteger(options.weekStartsOn); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n }\n\n var date = toDate(dirtyDate);\n var day = toInteger(dirtyDay);\n var currentDay = date.getUTCDay();\n var remainder = day % 7;\n var dayIndex = (remainder + 7) % 7;\n var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay;\n date.setUTCDate(date.getUTCDate() + diff);\n return date;\n}","import getUTCWeekYear from \"../../../_lib/getUTCWeekYear/index.js\";\nimport setUTCDay from \"../../../_lib/setUTCDay/index.js\";\nimport setUTCISODay from \"../../../_lib/setUTCISODay/index.js\";\nimport setUTCISOWeek from \"../../../_lib/setUTCISOWeek/index.js\";\nimport setUTCWeek from \"../../../_lib/setUTCWeek/index.js\";\nimport startOfUTCISOWeek from \"../../../_lib/startOfUTCISOWeek/index.js\";\nimport startOfUTCWeek from \"../../../_lib/startOfUTCWeek/index.js\";\nvar MILLISECONDS_IN_HOUR = 3600000;\nvar MILLISECONDS_IN_MINUTE = 60000;\nvar MILLISECONDS_IN_SECOND = 1000;\nvar numericPatterns = {\n month: /^(1[0-2]|0?\\d)/,\n // 0 to 12\n date: /^(3[0-1]|[0-2]?\\d)/,\n // 0 to 31\n dayOfYear: /^(36[0-6]|3[0-5]\\d|[0-2]?\\d?\\d)/,\n // 0 to 366\n week: /^(5[0-3]|[0-4]?\\d)/,\n // 0 to 53\n hour23h: /^(2[0-3]|[0-1]?\\d)/,\n // 0 to 23\n hour24h: /^(2[0-4]|[0-1]?\\d)/,\n // 0 to 24\n hour11h: /^(1[0-1]|0?\\d)/,\n // 0 to 11\n hour12h: /^(1[0-2]|0?\\d)/,\n // 0 to 12\n minute: /^[0-5]?\\d/,\n // 0 to 59\n second: /^[0-5]?\\d/,\n // 0 to 59\n singleDigit: /^\\d/,\n // 0 to 9\n twoDigits: /^\\d{1,2}/,\n // 0 to 99\n threeDigits: /^\\d{1,3}/,\n // 0 to 999\n fourDigits: /^\\d{1,4}/,\n // 0 to 9999\n anyDigitsSigned: /^-?\\d+/,\n singleDigitSigned: /^-?\\d/,\n // 0 to 9, -0 to -9\n twoDigitsSigned: /^-?\\d{1,2}/,\n // 0 to 99, -0 to -99\n threeDigitsSigned: /^-?\\d{1,3}/,\n // 0 to 999, -0 to -999\n fourDigitsSigned: /^-?\\d{1,4}/ // 0 to 9999, -0 to -9999\n\n};\nvar timezonePatterns = {\n basicOptionalMinutes: /^([+-])(\\d{2})(\\d{2})?|Z/,\n basic: /^([+-])(\\d{2})(\\d{2})|Z/,\n basicOptionalSeconds: /^([+-])(\\d{2})(\\d{2})((\\d{2}))?|Z/,\n extended: /^([+-])(\\d{2}):(\\d{2})|Z/,\n extendedOptionalSeconds: /^([+-])(\\d{2}):(\\d{2})(:(\\d{2}))?|Z/\n};\n\nfunction parseNumericPattern(pattern, string, valueCallback) {\n var matchResult = string.match(pattern);\n\n if (!matchResult) {\n return null;\n }\n\n var value = parseInt(matchResult[0], 10);\n return {\n value: valueCallback ? valueCallback(value) : value,\n rest: string.slice(matchResult[0].length)\n };\n}\n\nfunction parseTimezonePattern(pattern, string) {\n var matchResult = string.match(pattern);\n\n if (!matchResult) {\n return null;\n } // Input is 'Z'\n\n\n if (matchResult[0] === 'Z') {\n return {\n value: 0,\n rest: string.slice(1)\n };\n }\n\n var sign = matchResult[1] === '+' ? 1 : -1;\n var hours = matchResult[2] ? parseInt(matchResult[2], 10) : 0;\n var minutes = matchResult[3] ? parseInt(matchResult[3], 10) : 0;\n var seconds = matchResult[5] ? parseInt(matchResult[5], 10) : 0;\n return {\n value: sign * (hours * MILLISECONDS_IN_HOUR + minutes * MILLISECONDS_IN_MINUTE + seconds * MILLISECONDS_IN_SECOND),\n rest: string.slice(matchResult[0].length)\n };\n}\n\nfunction parseAnyDigitsSigned(string, valueCallback) {\n return parseNumericPattern(numericPatterns.anyDigitsSigned, string, valueCallback);\n}\n\nfunction parseNDigits(n, string, valueCallback) {\n switch (n) {\n case 1:\n return parseNumericPattern(numericPatterns.singleDigit, string, valueCallback);\n\n case 2:\n return parseNumericPattern(numericPatterns.twoDigits, string, valueCallback);\n\n case 3:\n return parseNumericPattern(numericPatterns.threeDigits, string, valueCallback);\n\n case 4:\n return parseNumericPattern(numericPatterns.fourDigits, string, valueCallback);\n\n default:\n return parseNumericPattern(new RegExp('^\\\\d{1,' + n + '}'), string, valueCallback);\n }\n}\n\nfunction parseNDigitsSigned(n, string, valueCallback) {\n switch (n) {\n case 1:\n return parseNumericPattern(numericPatterns.singleDigitSigned, string, valueCallback);\n\n case 2:\n return parseNumericPattern(numericPatterns.twoDigitsSigned, string, valueCallback);\n\n case 3:\n return parseNumericPattern(numericPatterns.threeDigitsSigned, string, valueCallback);\n\n case 4:\n return parseNumericPattern(numericPatterns.fourDigitsSigned, string, valueCallback);\n\n default:\n return parseNumericPattern(new RegExp('^-?\\\\d{1,' + n + '}'), string, valueCallback);\n }\n}\n\nfunction dayPeriodEnumToHours(enumValue) {\n switch (enumValue) {\n case 'morning':\n return 4;\n\n case 'evening':\n return 17;\n\n case 'pm':\n case 'noon':\n case 'afternoon':\n return 12;\n\n case 'am':\n case 'midnight':\n case 'night':\n default:\n return 0;\n }\n}\n\nfunction normalizeTwoDigitYear(twoDigitYear, currentYear) {\n var isCommonEra = currentYear > 0; // Absolute number of the current year:\n // 1 -> 1 AC\n // 0 -> 1 BC\n // -1 -> 2 BC\n\n var absCurrentYear = isCommonEra ? currentYear : 1 - currentYear;\n var result;\n\n if (absCurrentYear <= 50) {\n result = twoDigitYear || 100;\n } else {\n var rangeEnd = absCurrentYear + 50;\n var rangeEndCentury = Math.floor(rangeEnd / 100) * 100;\n var isPreviousCentury = twoDigitYear >= rangeEnd % 100;\n result = twoDigitYear + rangeEndCentury - (isPreviousCentury ? 100 : 0);\n }\n\n return isCommonEra ? result : 1 - result;\n}\n\nvar DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nvar DAYS_IN_MONTH_LEAP_YEAR = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; // User for validation\n\nfunction isLeapYearIndex(year) {\n return year % 400 === 0 || year % 4 === 0 && year % 100 !== 0;\n}\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | Milliseconds in day |\n * | b | AM, PM, noon, midnight | B | Flexible day period |\n * | c | Stand-alone local day of week | C* | Localized hour w/ day period |\n * | d | Day of month | D | Day of year |\n * | e | Local day of week | E | Day of week |\n * | f | | F* | Day of week in month |\n * | g* | Modified Julian day | G | Era |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | i! | ISO day of week | I! | ISO week of year |\n * | j* | Localized hour w/ day period | J* | Localized hour w/o day period |\n * | k | Hour [1-24] | K | Hour [0-11] |\n * | l* | (deprecated) | L | Stand-alone month |\n * | m | Minute | M | Month |\n * | n | | N | |\n * | o! | Ordinal number modifier | O* | Timezone (GMT) |\n * | p | | P | |\n * | q | Stand-alone quarter | Q | Quarter |\n * | r* | Related Gregorian year | R! | ISO week-numbering year |\n * | s | Second | S | Fraction of second |\n * | t! | Seconds timestamp | T! | Milliseconds timestamp |\n * | u | Extended year | U* | Cyclic year |\n * | v* | Timezone (generic non-locat.) | V* | Timezone (location) |\n * | w | Local week of year | W* | Week of month |\n * | x | Timezone (ISO-8601 w/o Z) | X | Timezone (ISO-8601) |\n * | y | Year (abs) | Y | Local week-numbering year |\n * | z* | Timezone (specific non-locat.) | Z* | Timezone (aliases) |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `parse` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n * i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n * `R` is supposed to be used in conjunction with `I` and `i`\n * for universal ISO week-numbering date, whereas\n * `Y` is supposed to be used in conjunction with `w` and `e`\n * for week-numbering date specific to the locale.\n */\n\n\nvar parsers = {\n // Era\n G: {\n priority: 140,\n parse: function (string, token, match, _options) {\n switch (token) {\n // AD, BC\n case 'G':\n case 'GG':\n case 'GGG':\n return match.era(string, {\n width: 'abbreviated'\n }) || match.era(string, {\n width: 'narrow'\n });\n // A, B\n\n case 'GGGGG':\n return match.era(string, {\n width: 'narrow'\n });\n // Anno Domini, Before Christ\n\n case 'GGGG':\n default:\n return match.era(string, {\n width: 'wide'\n }) || match.era(string, {\n width: 'abbreviated'\n }) || match.era(string, {\n width: 'narrow'\n });\n }\n },\n set: function (date, flags, value, _options) {\n flags.era = value;\n date.setUTCFullYear(value, 0, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['R', 'u', 't', 'T']\n },\n // Year\n y: {\n // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns\n // | Year | y | yy | yyy | yyyy | yyyyy |\n // |----------|-------|----|-------|-------|-------|\n // | AD 1 | 1 | 01 | 001 | 0001 | 00001 |\n // | AD 12 | 12 | 12 | 012 | 0012 | 00012 |\n // | AD 123 | 123 | 23 | 123 | 0123 | 00123 |\n // | AD 1234 | 1234 | 34 | 1234 | 1234 | 01234 |\n // | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\n priority: 130,\n parse: function (string, token, match, _options) {\n var valueCallback = function (year) {\n return {\n year: year,\n isTwoDigitYear: token === 'yy'\n };\n };\n\n switch (token) {\n case 'y':\n return parseNDigits(4, string, valueCallback);\n\n case 'yo':\n return match.ordinalNumber(string, {\n unit: 'year',\n valueCallback: valueCallback\n });\n\n default:\n return parseNDigits(token.length, string, valueCallback);\n }\n },\n validate: function (_date, value, _options) {\n return value.isTwoDigitYear || value.year > 0;\n },\n set: function (date, flags, value, _options) {\n var currentYear = date.getUTCFullYear();\n\n if (value.isTwoDigitYear) {\n var normalizedTwoDigitYear = normalizeTwoDigitYear(value.year, currentYear);\n date.setUTCFullYear(normalizedTwoDigitYear, 0, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n\n var year = !('era' in flags) || flags.era === 1 ? value.year : 1 - value.year;\n date.setUTCFullYear(year, 0, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['Y', 'R', 'u', 'w', 'I', 'i', 'e', 'c', 't', 'T']\n },\n // Local week-numbering year\n Y: {\n priority: 130,\n parse: function (string, token, match, _options) {\n var valueCallback = function (year) {\n return {\n year: year,\n isTwoDigitYear: token === 'YY'\n };\n };\n\n switch (token) {\n case 'Y':\n return parseNDigits(4, string, valueCallback);\n\n case 'Yo':\n return match.ordinalNumber(string, {\n unit: 'year',\n valueCallback: valueCallback\n });\n\n default:\n return parseNDigits(token.length, string, valueCallback);\n }\n },\n validate: function (_date, value, _options) {\n return value.isTwoDigitYear || value.year > 0;\n },\n set: function (date, flags, value, options) {\n var currentYear = getUTCWeekYear(date, options);\n\n if (value.isTwoDigitYear) {\n var normalizedTwoDigitYear = normalizeTwoDigitYear(value.year, currentYear);\n date.setUTCFullYear(normalizedTwoDigitYear, 0, options.firstWeekContainsDate);\n date.setUTCHours(0, 0, 0, 0);\n return startOfUTCWeek(date, options);\n }\n\n var year = !('era' in flags) || flags.era === 1 ? value.year : 1 - value.year;\n date.setUTCFullYear(year, 0, options.firstWeekContainsDate);\n date.setUTCHours(0, 0, 0, 0);\n return startOfUTCWeek(date, options);\n },\n incompatibleTokens: ['y', 'R', 'u', 'Q', 'q', 'M', 'L', 'I', 'd', 'D', 'i', 't', 'T']\n },\n // ISO week-numbering year\n R: {\n priority: 130,\n parse: function (string, token, _match, _options) {\n if (token === 'R') {\n return parseNDigitsSigned(4, string);\n }\n\n return parseNDigitsSigned(token.length, string);\n },\n set: function (_date, _flags, value, _options) {\n var firstWeekOfYear = new Date(0);\n firstWeekOfYear.setUTCFullYear(value, 0, 4);\n firstWeekOfYear.setUTCHours(0, 0, 0, 0);\n return startOfUTCISOWeek(firstWeekOfYear);\n },\n incompatibleTokens: ['G', 'y', 'Y', 'u', 'Q', 'q', 'M', 'L', 'w', 'd', 'D', 'e', 'c', 't', 'T']\n },\n // Extended year\n u: {\n priority: 130,\n parse: function (string, token, _match, _options) {\n if (token === 'u') {\n return parseNDigitsSigned(4, string);\n }\n\n return parseNDigitsSigned(token.length, string);\n },\n set: function (date, _flags, value, _options) {\n date.setUTCFullYear(value, 0, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['G', 'y', 'Y', 'R', 'w', 'I', 'i', 'e', 'c', 't', 'T']\n },\n // Quarter\n Q: {\n priority: 120,\n parse: function (string, token, match, _options) {\n switch (token) {\n // 1, 2, 3, 4\n case 'Q':\n case 'QQ':\n // 01, 02, 03, 04\n return parseNDigits(token.length, string);\n // 1st, 2nd, 3rd, 4th\n\n case 'Qo':\n return match.ordinalNumber(string, {\n unit: 'quarter'\n });\n // Q1, Q2, Q3, Q4\n\n case 'QQQ':\n return match.quarter(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.quarter(string, {\n width: 'narrow',\n context: 'formatting'\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n\n case 'QQQQQ':\n return match.quarter(string, {\n width: 'narrow',\n context: 'formatting'\n });\n // 1st quarter, 2nd quarter, ...\n\n case 'QQQQ':\n default:\n return match.quarter(string, {\n width: 'wide',\n context: 'formatting'\n }) || match.quarter(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.quarter(string, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n },\n validate: function (_date, value, _options) {\n return value >= 1 && value <= 4;\n },\n set: function (date, _flags, value, _options) {\n date.setUTCMonth((value - 1) * 3, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['Y', 'R', 'q', 'M', 'L', 'w', 'I', 'd', 'D', 'i', 'e', 'c', 't', 'T']\n },\n // Stand-alone quarter\n q: {\n priority: 120,\n parse: function (string, token, match, _options) {\n switch (token) {\n // 1, 2, 3, 4\n case 'q':\n case 'qq':\n // 01, 02, 03, 04\n return parseNDigits(token.length, string);\n // 1st, 2nd, 3rd, 4th\n\n case 'qo':\n return match.ordinalNumber(string, {\n unit: 'quarter'\n });\n // Q1, Q2, Q3, Q4\n\n case 'qqq':\n return match.quarter(string, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.quarter(string, {\n width: 'narrow',\n context: 'standalone'\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n\n case 'qqqqq':\n return match.quarter(string, {\n width: 'narrow',\n context: 'standalone'\n });\n // 1st quarter, 2nd quarter, ...\n\n case 'qqqq':\n default:\n return match.quarter(string, {\n width: 'wide',\n context: 'standalone'\n }) || match.quarter(string, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.quarter(string, {\n width: 'narrow',\n context: 'standalone'\n });\n }\n },\n validate: function (_date, value, _options) {\n return value >= 1 && value <= 4;\n },\n set: function (date, _flags, value, _options) {\n date.setUTCMonth((value - 1) * 3, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['Y', 'R', 'Q', 'M', 'L', 'w', 'I', 'd', 'D', 'i', 'e', 'c', 't', 'T']\n },\n // Month\n M: {\n priority: 110,\n parse: function (string, token, match, _options) {\n var valueCallback = function (value) {\n return value - 1;\n };\n\n switch (token) {\n // 1, 2, ..., 12\n case 'M':\n return parseNumericPattern(numericPatterns.month, string, valueCallback);\n // 01, 02, ..., 12\n\n case 'MM':\n return parseNDigits(2, string, valueCallback);\n // 1st, 2nd, ..., 12th\n\n case 'Mo':\n return match.ordinalNumber(string, {\n unit: 'month',\n valueCallback: valueCallback\n });\n // Jan, Feb, ..., Dec\n\n case 'MMM':\n return match.month(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.month(string, {\n width: 'narrow',\n context: 'formatting'\n });\n // J, F, ..., D\n\n case 'MMMMM':\n return match.month(string, {\n width: 'narrow',\n context: 'formatting'\n });\n // January, February, ..., December\n\n case 'MMMM':\n default:\n return match.month(string, {\n width: 'wide',\n context: 'formatting'\n }) || match.month(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.month(string, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n },\n validate: function (_date, value, _options) {\n return value >= 0 && value <= 11;\n },\n set: function (date, _flags, value, _options) {\n date.setUTCMonth(value, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['Y', 'R', 'q', 'Q', 'L', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T']\n },\n // Stand-alone month\n L: {\n priority: 110,\n parse: function (string, token, match, _options) {\n var valueCallback = function (value) {\n return value - 1;\n };\n\n switch (token) {\n // 1, 2, ..., 12\n case 'L':\n return parseNumericPattern(numericPatterns.month, string, valueCallback);\n // 01, 02, ..., 12\n\n case 'LL':\n return parseNDigits(2, string, valueCallback);\n // 1st, 2nd, ..., 12th\n\n case 'Lo':\n return match.ordinalNumber(string, {\n unit: 'month',\n valueCallback: valueCallback\n });\n // Jan, Feb, ..., Dec\n\n case 'LLL':\n return match.month(string, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.month(string, {\n width: 'narrow',\n context: 'standalone'\n });\n // J, F, ..., D\n\n case 'LLLLL':\n return match.month(string, {\n width: 'narrow',\n context: 'standalone'\n });\n // January, February, ..., December\n\n case 'LLLL':\n default:\n return match.month(string, {\n width: 'wide',\n context: 'standalone'\n }) || match.month(string, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.month(string, {\n width: 'narrow',\n context: 'standalone'\n });\n }\n },\n validate: function (_date, value, _options) {\n return value >= 0 && value <= 11;\n },\n set: function (date, _flags, value, _options) {\n date.setUTCMonth(value, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['Y', 'R', 'q', 'Q', 'M', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T']\n },\n // Local week of year\n w: {\n priority: 100,\n parse: function (string, token, match, _options) {\n switch (token) {\n case 'w':\n return parseNumericPattern(numericPatterns.week, string);\n\n case 'wo':\n return match.ordinalNumber(string, {\n unit: 'week'\n });\n\n default:\n return parseNDigits(token.length, string);\n }\n },\n validate: function (_date, value, _options) {\n return value >= 1 && value <= 53;\n },\n set: function (date, _flags, value, options) {\n return startOfUTCWeek(setUTCWeek(date, value, options), options);\n },\n incompatibleTokens: ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'i', 't', 'T']\n },\n // ISO week of year\n I: {\n priority: 100,\n parse: function (string, token, match, _options) {\n switch (token) {\n case 'I':\n return parseNumericPattern(numericPatterns.week, string);\n\n case 'Io':\n return match.ordinalNumber(string, {\n unit: 'week'\n });\n\n default:\n return parseNDigits(token.length, string);\n }\n },\n validate: function (_date, value, _options) {\n return value >= 1 && value <= 53;\n },\n set: function (date, _flags, value, options) {\n return startOfUTCISOWeek(setUTCISOWeek(date, value, options), options);\n },\n incompatibleTokens: ['y', 'Y', 'u', 'q', 'Q', 'M', 'L', 'w', 'd', 'D', 'e', 'c', 't', 'T']\n },\n // Day of the month\n d: {\n priority: 90,\n subPriority: 1,\n parse: function (string, token, match, _options) {\n switch (token) {\n case 'd':\n return parseNumericPattern(numericPatterns.date, string);\n\n case 'do':\n return match.ordinalNumber(string, {\n unit: 'date'\n });\n\n default:\n return parseNDigits(token.length, string);\n }\n },\n validate: function (date, value, _options) {\n var year = date.getUTCFullYear();\n var isLeapYear = isLeapYearIndex(year);\n var month = date.getUTCMonth();\n\n if (isLeapYear) {\n return value >= 1 && value <= DAYS_IN_MONTH_LEAP_YEAR[month];\n } else {\n return value >= 1 && value <= DAYS_IN_MONTH[month];\n }\n },\n set: function (date, _flags, value, _options) {\n date.setUTCDate(value);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['Y', 'R', 'q', 'Q', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T']\n },\n // Day of year\n D: {\n priority: 90,\n subPriority: 1,\n parse: function (string, token, match, _options) {\n switch (token) {\n case 'D':\n case 'DD':\n return parseNumericPattern(numericPatterns.dayOfYear, string);\n\n case 'Do':\n return match.ordinalNumber(string, {\n unit: 'date'\n });\n\n default:\n return parseNDigits(token.length, string);\n }\n },\n validate: function (date, value, _options) {\n var year = date.getUTCFullYear();\n var isLeapYear = isLeapYearIndex(year);\n\n if (isLeapYear) {\n return value >= 1 && value <= 366;\n } else {\n return value >= 1 && value <= 365;\n }\n },\n set: function (date, _flags, value, _options) {\n date.setUTCMonth(0, value);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['Y', 'R', 'q', 'Q', 'M', 'L', 'w', 'I', 'd', 'E', 'i', 'e', 'c', 't', 'T']\n },\n // Day of week\n E: {\n priority: 90,\n parse: function (string, token, match, _options) {\n switch (token) {\n // Tue\n case 'E':\n case 'EE':\n case 'EEE':\n return match.day(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(string, {\n width: 'short',\n context: 'formatting'\n }) || match.day(string, {\n width: 'narrow',\n context: 'formatting'\n });\n // T\n\n case 'EEEEE':\n return match.day(string, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n\n case 'EEEEEE':\n return match.day(string, {\n width: 'short',\n context: 'formatting'\n }) || match.day(string, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tuesday\n\n case 'EEEE':\n default:\n return match.day(string, {\n width: 'wide',\n context: 'formatting'\n }) || match.day(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(string, {\n width: 'short',\n context: 'formatting'\n }) || match.day(string, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n },\n validate: function (_date, value, _options) {\n return value >= 0 && value <= 6;\n },\n set: function (date, _flags, value, options) {\n date = setUTCDay(date, value, options);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['D', 'i', 'e', 'c', 't', 'T']\n },\n // Local day of week\n e: {\n priority: 90,\n parse: function (string, token, match, options) {\n var valueCallback = function (value) {\n var wholeWeekDays = Math.floor((value - 1) / 7) * 7;\n return (value + options.weekStartsOn + 6) % 7 + wholeWeekDays;\n };\n\n switch (token) {\n // 3\n case 'e':\n case 'ee':\n // 03\n return parseNDigits(token.length, string, valueCallback);\n // 3rd\n\n case 'eo':\n return match.ordinalNumber(string, {\n unit: 'day',\n valueCallback: valueCallback\n });\n // Tue\n\n case 'eee':\n return match.day(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(string, {\n width: 'short',\n context: 'formatting'\n }) || match.day(string, {\n width: 'narrow',\n context: 'formatting'\n });\n // T\n\n case 'eeeee':\n return match.day(string, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n\n case 'eeeeee':\n return match.day(string, {\n width: 'short',\n context: 'formatting'\n }) || match.day(string, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tuesday\n\n case 'eeee':\n default:\n return match.day(string, {\n width: 'wide',\n context: 'formatting'\n }) || match.day(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(string, {\n width: 'short',\n context: 'formatting'\n }) || match.day(string, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n },\n validate: function (_date, value, _options) {\n return value >= 0 && value <= 6;\n },\n set: function (date, _flags, value, options) {\n date = setUTCDay(date, value, options);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'E', 'i', 'c', 't', 'T']\n },\n // Stand-alone local day of week\n c: {\n priority: 90,\n parse: function (string, token, match, options) {\n var valueCallback = function (value) {\n var wholeWeekDays = Math.floor((value - 1) / 7) * 7;\n return (value + options.weekStartsOn + 6) % 7 + wholeWeekDays;\n };\n\n switch (token) {\n // 3\n case 'c':\n case 'cc':\n // 03\n return parseNDigits(token.length, string, valueCallback);\n // 3rd\n\n case 'co':\n return match.ordinalNumber(string, {\n unit: 'day',\n valueCallback: valueCallback\n });\n // Tue\n\n case 'ccc':\n return match.day(string, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.day(string, {\n width: 'short',\n context: 'standalone'\n }) || match.day(string, {\n width: 'narrow',\n context: 'standalone'\n });\n // T\n\n case 'ccccc':\n return match.day(string, {\n width: 'narrow',\n context: 'standalone'\n });\n // Tu\n\n case 'cccccc':\n return match.day(string, {\n width: 'short',\n context: 'standalone'\n }) || match.day(string, {\n width: 'narrow',\n context: 'standalone'\n });\n // Tuesday\n\n case 'cccc':\n default:\n return match.day(string, {\n width: 'wide',\n context: 'standalone'\n }) || match.day(string, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.day(string, {\n width: 'short',\n context: 'standalone'\n }) || match.day(string, {\n width: 'narrow',\n context: 'standalone'\n });\n }\n },\n validate: function (_date, value, _options) {\n return value >= 0 && value <= 6;\n },\n set: function (date, _flags, value, options) {\n date = setUTCDay(date, value, options);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'E', 'i', 'e', 't', 'T']\n },\n // ISO day of week\n i: {\n priority: 90,\n parse: function (string, token, match, _options) {\n var valueCallback = function (value) {\n if (value === 0) {\n return 7;\n }\n\n return value;\n };\n\n switch (token) {\n // 2\n case 'i':\n case 'ii':\n // 02\n return parseNDigits(token.length, string);\n // 2nd\n\n case 'io':\n return match.ordinalNumber(string, {\n unit: 'day'\n });\n // Tue\n\n case 'iii':\n return match.day(string, {\n width: 'abbreviated',\n context: 'formatting',\n valueCallback: valueCallback\n }) || match.day(string, {\n width: 'short',\n context: 'formatting',\n valueCallback: valueCallback\n }) || match.day(string, {\n width: 'narrow',\n context: 'formatting',\n valueCallback: valueCallback\n });\n // T\n\n case 'iiiii':\n return match.day(string, {\n width: 'narrow',\n context: 'formatting',\n valueCallback: valueCallback\n });\n // Tu\n\n case 'iiiiii':\n return match.day(string, {\n width: 'short',\n context: 'formatting',\n valueCallback: valueCallback\n }) || match.day(string, {\n width: 'narrow',\n context: 'formatting',\n valueCallback: valueCallback\n });\n // Tuesday\n\n case 'iiii':\n default:\n return match.day(string, {\n width: 'wide',\n context: 'formatting',\n valueCallback: valueCallback\n }) || match.day(string, {\n width: 'abbreviated',\n context: 'formatting',\n valueCallback: valueCallback\n }) || match.day(string, {\n width: 'short',\n context: 'formatting',\n valueCallback: valueCallback\n }) || match.day(string, {\n width: 'narrow',\n context: 'formatting',\n valueCallback: valueCallback\n });\n }\n },\n validate: function (_date, value, _options) {\n return value >= 1 && value <= 7;\n },\n set: function (date, _flags, value, options) {\n date = setUTCISODay(date, value, options);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['y', 'Y', 'u', 'q', 'Q', 'M', 'L', 'w', 'd', 'D', 'E', 'e', 'c', 't', 'T']\n },\n // AM or PM\n a: {\n priority: 80,\n parse: function (string, token, match, _options) {\n switch (token) {\n case 'a':\n case 'aa':\n case 'aaa':\n return match.dayPeriod(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(string, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'aaaaa':\n return match.dayPeriod(string, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'aaaa':\n default:\n return match.dayPeriod(string, {\n width: 'wide',\n context: 'formatting'\n }) || match.dayPeriod(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(string, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n },\n set: function (date, _flags, value, _options) {\n date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['b', 'B', 'H', 'K', 'k', 't', 'T']\n },\n // AM, PM, midnight\n b: {\n priority: 80,\n parse: function (string, token, match, _options) {\n switch (token) {\n case 'b':\n case 'bb':\n case 'bbb':\n return match.dayPeriod(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(string, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'bbbbb':\n return match.dayPeriod(string, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'bbbb':\n default:\n return match.dayPeriod(string, {\n width: 'wide',\n context: 'formatting'\n }) || match.dayPeriod(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(string, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n },\n set: function (date, _flags, value, _options) {\n date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['a', 'B', 'H', 'K', 'k', 't', 'T']\n },\n // in the morning, in the afternoon, in the evening, at night\n B: {\n priority: 80,\n parse: function (string, token, match, _options) {\n switch (token) {\n case 'B':\n case 'BB':\n case 'BBB':\n return match.dayPeriod(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(string, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'BBBBB':\n return match.dayPeriod(string, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'BBBB':\n default:\n return match.dayPeriod(string, {\n width: 'wide',\n context: 'formatting'\n }) || match.dayPeriod(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(string, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n },\n set: function (date, _flags, value, _options) {\n date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['a', 'b', 't', 'T']\n },\n // Hour [1-12]\n h: {\n priority: 70,\n parse: function (string, token, match, _options) {\n switch (token) {\n case 'h':\n return parseNumericPattern(numericPatterns.hour12h, string);\n\n case 'ho':\n return match.ordinalNumber(string, {\n unit: 'hour'\n });\n\n default:\n return parseNDigits(token.length, string);\n }\n },\n validate: function (_date, value, _options) {\n return value >= 1 && value <= 12;\n },\n set: function (date, _flags, value, _options) {\n var isPM = date.getUTCHours() >= 12;\n\n if (isPM && value < 12) {\n date.setUTCHours(value + 12, 0, 0, 0);\n } else if (!isPM && value === 12) {\n date.setUTCHours(0, 0, 0, 0);\n } else {\n date.setUTCHours(value, 0, 0, 0);\n }\n\n return date;\n },\n incompatibleTokens: ['H', 'K', 'k', 't', 'T']\n },\n // Hour [0-23]\n H: {\n priority: 70,\n parse: function (string, token, match, _options) {\n switch (token) {\n case 'H':\n return parseNumericPattern(numericPatterns.hour23h, string);\n\n case 'Ho':\n return match.ordinalNumber(string, {\n unit: 'hour'\n });\n\n default:\n return parseNDigits(token.length, string);\n }\n },\n validate: function (_date, value, _options) {\n return value >= 0 && value <= 23;\n },\n set: function (date, _flags, value, _options) {\n date.setUTCHours(value, 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['a', 'b', 'h', 'K', 'k', 't', 'T']\n },\n // Hour [0-11]\n K: {\n priority: 70,\n parse: function (string, token, match, _options) {\n switch (token) {\n case 'K':\n return parseNumericPattern(numericPatterns.hour11h, string);\n\n case 'Ko':\n return match.ordinalNumber(string, {\n unit: 'hour'\n });\n\n default:\n return parseNDigits(token.length, string);\n }\n },\n validate: function (_date, value, _options) {\n return value >= 0 && value <= 11;\n },\n set: function (date, _flags, value, _options) {\n var isPM = date.getUTCHours() >= 12;\n\n if (isPM && value < 12) {\n date.setUTCHours(value + 12, 0, 0, 0);\n } else {\n date.setUTCHours(value, 0, 0, 0);\n }\n\n return date;\n },\n incompatibleTokens: ['a', 'b', 'h', 'H', 'k', 't', 'T']\n },\n // Hour [1-24]\n k: {\n priority: 70,\n parse: function (string, token, match, _options) {\n switch (token) {\n case 'k':\n return parseNumericPattern(numericPatterns.hour24h, string);\n\n case 'ko':\n return match.ordinalNumber(string, {\n unit: 'hour'\n });\n\n default:\n return parseNDigits(token.length, string);\n }\n },\n validate: function (_date, value, _options) {\n return value >= 1 && value <= 24;\n },\n set: function (date, _flags, value, _options) {\n var hours = value <= 24 ? value % 24 : value;\n date.setUTCHours(hours, 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['a', 'b', 'h', 'H', 'K', 't', 'T']\n },\n // Minute\n m: {\n priority: 60,\n parse: function (string, token, match, _options) {\n switch (token) {\n case 'm':\n return parseNumericPattern(numericPatterns.minute, string);\n\n case 'mo':\n return match.ordinalNumber(string, {\n unit: 'minute'\n });\n\n default:\n return parseNDigits(token.length, string);\n }\n },\n validate: function (_date, value, _options) {\n return value >= 0 && value <= 59;\n },\n set: function (date, _flags, value, _options) {\n date.setUTCMinutes(value, 0, 0);\n return date;\n },\n incompatibleTokens: ['t', 'T']\n },\n // Second\n s: {\n priority: 50,\n parse: function (string, token, match, _options) {\n switch (token) {\n case 's':\n return parseNumericPattern(numericPatterns.second, string);\n\n case 'so':\n return match.ordinalNumber(string, {\n unit: 'second'\n });\n\n default:\n return parseNDigits(token.length, string);\n }\n },\n validate: function (_date, value, _options) {\n return value >= 0 && value <= 59;\n },\n set: function (date, _flags, value, _options) {\n date.setUTCSeconds(value, 0);\n return date;\n },\n incompatibleTokens: ['t', 'T']\n },\n // Fraction of second\n S: {\n priority: 30,\n parse: function (string, token, _match, _options) {\n var valueCallback = function (value) {\n return Math.floor(value * Math.pow(10, -token.length + 3));\n };\n\n return parseNDigits(token.length, string, valueCallback);\n },\n set: function (date, _flags, value, _options) {\n date.setUTCMilliseconds(value);\n return date;\n },\n incompatibleTokens: ['t', 'T']\n },\n // Timezone (ISO-8601. +00:00 is `'Z'`)\n X: {\n priority: 10,\n parse: function (string, token, _match, _options) {\n switch (token) {\n case 'X':\n return parseTimezonePattern(timezonePatterns.basicOptionalMinutes, string);\n\n case 'XX':\n return parseTimezonePattern(timezonePatterns.basic, string);\n\n case 'XXXX':\n return parseTimezonePattern(timezonePatterns.basicOptionalSeconds, string);\n\n case 'XXXXX':\n return parseTimezonePattern(timezonePatterns.extendedOptionalSeconds, string);\n\n case 'XXX':\n default:\n return parseTimezonePattern(timezonePatterns.extended, string);\n }\n },\n set: function (date, flags, value, _options) {\n if (flags.timestampIsSet) {\n return date;\n }\n\n return new Date(date.getTime() - value);\n },\n incompatibleTokens: ['t', 'T', 'x']\n },\n // Timezone (ISO-8601)\n x: {\n priority: 10,\n parse: function (string, token, _match, _options) {\n switch (token) {\n case 'x':\n return parseTimezonePattern(timezonePatterns.basicOptionalMinutes, string);\n\n case 'xx':\n return parseTimezonePattern(timezonePatterns.basic, string);\n\n case 'xxxx':\n return parseTimezonePattern(timezonePatterns.basicOptionalSeconds, string);\n\n case 'xxxxx':\n return parseTimezonePattern(timezonePatterns.extendedOptionalSeconds, string);\n\n case 'xxx':\n default:\n return parseTimezonePattern(timezonePatterns.extended, string);\n }\n },\n set: function (date, flags, value, _options) {\n if (flags.timestampIsSet) {\n return date;\n }\n\n return new Date(date.getTime() - value);\n },\n incompatibleTokens: ['t', 'T', 'X']\n },\n // Seconds timestamp\n t: {\n priority: 40,\n parse: function (string, _token, _match, _options) {\n return parseAnyDigitsSigned(string);\n },\n set: function (_date, _flags, value, _options) {\n return [new Date(value * 1000), {\n timestampIsSet: true\n }];\n },\n incompatibleTokens: '*'\n },\n // Milliseconds timestamp\n T: {\n priority: 20,\n parse: function (string, _token, _match, _options) {\n return parseAnyDigitsSigned(string);\n },\n set: function (_date, _flags, value, _options) {\n return [new Date(value), {\n timestampIsSet: true\n }];\n },\n incompatibleTokens: '*'\n }\n};\nexport default parsers;","import toInteger from \"../toInteger/index.js\";\nimport toDate from \"../../toDate/index.js\";\nimport getUTCWeek from \"../getUTCWeek/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function setUTCWeek(dirtyDate, dirtyWeek, options) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var week = toInteger(dirtyWeek);\n var diff = getUTCWeek(date, options) - week;\n date.setUTCDate(date.getUTCDate() - diff * 7);\n return date;\n}","import toInteger from \"../toInteger/index.js\";\nimport toDate from \"../../toDate/index.js\";\nimport getUTCISOWeek from \"../getUTCISOWeek/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function setUTCISOWeek(dirtyDate, dirtyISOWeek) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var isoWeek = toInteger(dirtyISOWeek);\n var diff = getUTCISOWeek(date) - isoWeek;\n date.setUTCDate(date.getUTCDate() - diff * 7);\n return date;\n}","import toInteger from \"../toInteger/index.js\";\nimport toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function setUTCISODay(dirtyDate, dirtyDay) {\n requiredArgs(2, arguments);\n var day = toInteger(dirtyDay);\n\n if (day % 7 === 0) {\n day = day - 7;\n }\n\n var weekStartsOn = 1;\n var date = toDate(dirtyDate);\n var currentDay = date.getUTCDay();\n var remainder = day % 7;\n var dayIndex = (remainder + 7) % 7;\n var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay;\n date.setUTCDate(date.getUTCDate() + diff);\n return date;\n}","import defaultLocale from \"../locale/en-US/index.js\";\nimport subMilliseconds from \"../subMilliseconds/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport assign from \"../_lib/assign/index.js\";\nimport longFormatters from \"../_lib/format/longFormatters/index.js\";\nimport getTimezoneOffsetInMilliseconds from \"../_lib/getTimezoneOffsetInMilliseconds/index.js\";\nimport { isProtectedDayOfYearToken, isProtectedWeekYearToken, throwProtectedError } from \"../_lib/protectedTokens/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport parsers from \"./_lib/parsers/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nvar TIMEZONE_UNIT_PRIORITY = 10; // This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n// (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n// except a single quote symbol, which ends the sequence.\n// Two quote characters do not end the sequence.\n// If there is no matching single quote\n// then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\n\nvar formattingTokensRegExp = /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g; // This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\n\nvar longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;\nvar escapedStringRegExp = /^'([^]*?)'?$/;\nvar doubleQuoteRegExp = /''/g;\nvar notWhitespaceRegExp = /\\S/;\nvar unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n/**\n * @name parse\n * @category Common Helpers\n * @summary Parse the date.\n *\n * @description\n * Return the date parsed from string using the given format string.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://git.io/fxCyr\n *\n * The characters in the format string wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n *\n * Format of the format string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 5 below the table).\n *\n * Not all tokens are compatible. Combinations that don't make sense or could lead to bugs are prohibited\n * and will throw `RangeError`. For example usage of 24-hour format token with AM/PM token will throw an exception:\n *\n * ```javascript\n * parse('23 AM', 'HH a', new Date())\n * //=> RangeError: The format string mustn't contain `HH` and `a` at the same time\n * ```\n *\n * See the compatibility table: https://docs.google.com/spreadsheets/d/e/2PACX-1vQOPU3xUhplll6dyoMmVUXHKl_8CRDs6_ueLmex3SoqwhuolkuN3O05l4rqx5h1dKX8eb46Ul-CCSrq/pubhtml?gid=0&single=true\n *\n * Accepted format string patterns:\n * | Unit |Prior| Pattern | Result examples | Notes |\n * |---------------------------------|-----|---------|-----------------------------------|-------|\n * | Era | 140 | G..GGG | AD, BC | |\n * | | | GGGG | Anno Domini, Before Christ | 2 |\n * | | | GGGGG | A, B | |\n * | Calendar year | 130 | y | 44, 1, 1900, 2017, 9999 | 4 |\n * | | | yo | 44th, 1st, 1900th, 9999999th | 4,5 |\n * | | | yy | 44, 01, 00, 17 | 4 |\n * | | | yyy | 044, 001, 123, 999 | 4 |\n * | | | yyyy | 0044, 0001, 1900, 2017 | 4 |\n * | | | yyyyy | ... | 2,4 |\n * | Local week-numbering year | 130 | Y | 44, 1, 1900, 2017, 9000 | 4 |\n * | | | Yo | 44th, 1st, 1900th, 9999999th | 4,5 |\n * | | | YY | 44, 01, 00, 17 | 4,6 |\n * | | | YYY | 044, 001, 123, 999 | 4 |\n * | | | YYYY | 0044, 0001, 1900, 2017 | 4,6 |\n * | | | YYYYY | ... | 2,4 |\n * | ISO week-numbering year | 130 | R | -43, 1, 1900, 2017, 9999, -9999 | 4,5 |\n * | | | RR | -43, 01, 00, 17 | 4,5 |\n * | | | RRR | -043, 001, 123, 999, -999 | 4,5 |\n * | | | RRRR | -0043, 0001, 2017, 9999, -9999 | 4,5 |\n * | | | RRRRR | ... | 2,4,5 |\n * | Extended year | 130 | u | -43, 1, 1900, 2017, 9999, -999 | 4 |\n * | | | uu | -43, 01, 99, -99 | 4 |\n * | | | uuu | -043, 001, 123, 999, -999 | 4 |\n * | | | uuuu | -0043, 0001, 2017, 9999, -9999 | 4 |\n * | | | uuuuu | ... | 2,4 |\n * | Quarter (formatting) | 120 | Q | 1, 2, 3, 4 | |\n * | | | Qo | 1st, 2nd, 3rd, 4th | 5 |\n * | | | QQ | 01, 02, 03, 04 | |\n * | | | QQQ | Q1, Q2, Q3, Q4 | |\n * | | | QQQQ | 1st quarter, 2nd quarter, ... | 2 |\n * | | | QQQQQ | 1, 2, 3, 4 | 4 |\n * | Quarter (stand-alone) | 120 | q | 1, 2, 3, 4 | |\n * | | | qo | 1st, 2nd, 3rd, 4th | 5 |\n * | | | qq | 01, 02, 03, 04 | |\n * | | | qqq | Q1, Q2, Q3, Q4 | |\n * | | | qqqq | 1st quarter, 2nd quarter, ... | 2 |\n * | | | qqqqq | 1, 2, 3, 4 | 3 |\n * | Month (formatting) | 110 | M | 1, 2, ..., 12 | |\n * | | | Mo | 1st, 2nd, ..., 12th | 5 |\n * | | | MM | 01, 02, ..., 12 | |\n * | | | MMM | Jan, Feb, ..., Dec | |\n * | | | MMMM | January, February, ..., December | 2 |\n * | | | MMMMM | J, F, ..., D | |\n * | Month (stand-alone) | 110 | L | 1, 2, ..., 12 | |\n * | | | Lo | 1st, 2nd, ..., 12th | 5 |\n * | | | LL | 01, 02, ..., 12 | |\n * | | | LLL | Jan, Feb, ..., Dec | |\n * | | | LLLL | January, February, ..., December | 2 |\n * | | | LLLLL | J, F, ..., D | |\n * | Local week of year | 100 | w | 1, 2, ..., 53 | |\n * | | | wo | 1st, 2nd, ..., 53th | 5 |\n * | | | ww | 01, 02, ..., 53 | |\n * | ISO week of year | 100 | I | 1, 2, ..., 53 | 5 |\n * | | | Io | 1st, 2nd, ..., 53th | 5 |\n * | | | II | 01, 02, ..., 53 | 5 |\n * | Day of month | 90 | d | 1, 2, ..., 31 | |\n * | | | do | 1st, 2nd, ..., 31st | 5 |\n * | | | dd | 01, 02, ..., 31 | |\n * | Day of year | 90 | D | 1, 2, ..., 365, 366 | 7 |\n * | | | Do | 1st, 2nd, ..., 365th, 366th | 5 |\n * | | | DD | 01, 02, ..., 365, 366 | 7 |\n * | | | DDD | 001, 002, ..., 365, 366 | |\n * | | | DDDD | ... | 2 |\n * | Day of week (formatting) | 90 | E..EEE | Mon, Tue, Wed, ..., Sun | |\n * | | | EEEE | Monday, Tuesday, ..., Sunday | 2 |\n * | | | EEEEE | M, T, W, T, F, S, S | |\n * | | | EEEEEE | Mo, Tu, We, Th, Fr, Su, Sa | |\n * | ISO day of week (formatting) | 90 | i | 1, 2, 3, ..., 7 | 5 |\n * | | | io | 1st, 2nd, ..., 7th | 5 |\n * | | | ii | 01, 02, ..., 07 | 5 |\n * | | | iii | Mon, Tue, Wed, ..., Sun | 5 |\n * | | | iiii | Monday, Tuesday, ..., Sunday | 2,5 |\n * | | | iiiii | M, T, W, T, F, S, S | 5 |\n * | | | iiiiii | Mo, Tu, We, Th, Fr, Su, Sa | 5 |\n * | Local day of week (formatting) | 90 | e | 2, 3, 4, ..., 1 | |\n * | | | eo | 2nd, 3rd, ..., 1st | 5 |\n * | | | ee | 02, 03, ..., 01 | |\n * | | | eee | Mon, Tue, Wed, ..., Sun | |\n * | | | eeee | Monday, Tuesday, ..., Sunday | 2 |\n * | | | eeeee | M, T, W, T, F, S, S | |\n * | | | eeeeee | Mo, Tu, We, Th, Fr, Su, Sa | |\n * | Local day of week (stand-alone) | 90 | c | 2, 3, 4, ..., 1 | |\n * | | | co | 2nd, 3rd, ..., 1st | 5 |\n * | | | cc | 02, 03, ..., 01 | |\n * | | | ccc | Mon, Tue, Wed, ..., Sun | |\n * | | | cccc | Monday, Tuesday, ..., Sunday | 2 |\n * | | | ccccc | M, T, W, T, F, S, S | |\n * | | | cccccc | Mo, Tu, We, Th, Fr, Su, Sa | |\n * | AM, PM | 80 | a..aaa | AM, PM | |\n * | | | aaaa | a.m., p.m. | 2 |\n * | | | aaaaa | a, p | |\n * | AM, PM, noon, midnight | 80 | b..bbb | AM, PM, noon, midnight | |\n * | | | bbbb | a.m., p.m., noon, midnight | 2 |\n * | | | bbbbb | a, p, n, mi | |\n * | Flexible day period | 80 | B..BBB | at night, in the morning, ... | |\n * | | | BBBB | at night, in the morning, ... | 2 |\n * | | | BBBBB | at night, in the morning, ... | |\n * | Hour [1-12] | 70 | h | 1, 2, ..., 11, 12 | |\n * | | | ho | 1st, 2nd, ..., 11th, 12th | 5 |\n * | | | hh | 01, 02, ..., 11, 12 | |\n * | Hour [0-23] | 70 | H | 0, 1, 2, ..., 23 | |\n * | | | Ho | 0th, 1st, 2nd, ..., 23rd | 5 |\n * | | | HH | 00, 01, 02, ..., 23 | |\n * | Hour [0-11] | 70 | K | 1, 2, ..., 11, 0 | |\n * | | | Ko | 1st, 2nd, ..., 11th, 0th | 5 |\n * | | | KK | 01, 02, ..., 11, 00 | |\n * | Hour [1-24] | 70 | k | 24, 1, 2, ..., 23 | |\n * | | | ko | 24th, 1st, 2nd, ..., 23rd | 5 |\n * | | | kk | 24, 01, 02, ..., 23 | |\n * | Minute | 60 | m | 0, 1, ..., 59 | |\n * | | | mo | 0th, 1st, ..., 59th | 5 |\n * | | | mm | 00, 01, ..., 59 | |\n * | Second | 50 | s | 0, 1, ..., 59 | |\n * | | | so | 0th, 1st, ..., 59th | 5 |\n * | | | ss | 00, 01, ..., 59 | |\n * | Seconds timestamp | 40 | t | 512969520 | |\n * | | | tt | ... | 2 |\n * | Fraction of second | 30 | S | 0, 1, ..., 9 | |\n * | | | SS | 00, 01, ..., 99 | |\n * | | | SSS | 000, 0001, ..., 999 | |\n * | | | SSSS | ... | 2 |\n * | Milliseconds timestamp | 20 | T | 512969520900 | |\n * | | | TT | ... | 2 |\n * | Timezone (ISO-8601 w/ Z) | 10 | X | -08, +0530, Z | |\n * | | | XX | -0800, +0530, Z | |\n * | | | XXX | -08:00, +05:30, Z | |\n * | | | XXXX | -0800, +0530, Z, +123456 | 2 |\n * | | | XXXXX | -08:00, +05:30, Z, +12:34:56 | |\n * | Timezone (ISO-8601 w/o Z) | 10 | x | -08, +0530, +00 | |\n * | | | xx | -0800, +0530, +0000 | |\n * | | | xxx | -08:00, +05:30, +00:00 | 2 |\n * | | | xxxx | -0800, +0530, +0000, +123456 | |\n * | | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 | |\n * | Long localized date | NA | P | 05/29/1453 | 5,8 |\n * | | | PP | May 29, 1453 | |\n * | | | PPP | May 29th, 1453 | |\n * | | | PPPP | Sunday, May 29th, 1453 | 2,5,8 |\n * | Long localized time | NA | p | 12:00 AM | 5,8 |\n * | | | pp | 12:00:00 AM | |\n * | Combination of date and time | NA | Pp | 05/29/1453, 12:00 AM | |\n * | | | PPpp | May 29, 1453, 12:00:00 AM | |\n * | | | PPPpp | May 29th, 1453 at ... | |\n * | | | PPPPpp | Sunday, May 29th, 1453 at ... | 2,5,8 |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n * are the same as \"stand-alone\" units, but are different in some languages.\n * \"Formatting\" units are declined according to the rules of the language\n * in the context of a date. \"Stand-alone\" units are always nominative singular.\n * In `format` function, they will produce different result:\n *\n * `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n * `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n * `parse` will try to match both formatting and stand-alone units interchangably.\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n * the single quote characters (see below).\n * If the sequence is longer than listed in table:\n * - for numerical units (`yyyyyyyy`) `parse` will try to match a number\n * as wide as the sequence\n * - for text units (`MMMMMMMM`) `parse` will try to match the widest variation of the unit.\n * These variations are marked with \"2\" in the last column of the table.\n *\n * 3. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n * These tokens represent the shortest form of the quarter.\n *\n * 4. The main difference between `y` and `u` patterns are B.C. years:\n *\n * | Year | `y` | `u` |\n * |------|-----|-----|\n * | AC 1 | 1 | 1 |\n * | BC 1 | 1 | 0 |\n * | BC 2 | 2 | -1 |\n *\n * Also `yy` will try to guess the century of two digit year by proximity with `referenceDate`:\n *\n * `parse('50', 'yy', new Date(2018, 0, 1)) //=> Sat Jan 01 2050 00:00:00`\n *\n * `parse('75', 'yy', new Date(2018, 0, 1)) //=> Wed Jan 01 1975 00:00:00`\n *\n * while `uu` will just assign the year as is:\n *\n * `parse('50', 'uu', new Date(2018, 0, 1)) //=> Sat Jan 01 0050 00:00:00`\n *\n * `parse('75', 'uu', new Date(2018, 0, 1)) //=> Tue Jan 01 0075 00:00:00`\n *\n * The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n * except local week-numbering years are dependent on `options.weekStartsOn`\n * and `options.firstWeekContainsDate` (compare [setISOWeekYear]{@link https://date-fns.org/docs/setISOWeekYear}\n * and [setWeekYear]{@link https://date-fns.org/docs/setWeekYear}).\n *\n * 5. These patterns are not in the Unicode Technical Standard #35:\n * - `i`: ISO day of week\n * - `I`: ISO week of year\n * - `R`: ISO week-numbering year\n * - `o`: ordinal number modifier\n * - `P`: long localized date\n * - `p`: long localized time\n *\n * 6. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.\n * You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://git.io/fxCyr\n *\n * 7. `D` and `DD` tokens represent days of the year but they are ofthen confused with days of the month.\n * You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://git.io/fxCyr\n *\n * 8. `P+` tokens do not have a defined priority since they are merely aliases to other tokens based\n * on the given locale.\n *\n * using `en-US` locale: `P` => `MM/dd/yyyy`\n * using `en-US` locale: `p` => `hh:mm a`\n * using `pt-BR` locale: `P` => `dd/MM/yyyy`\n * using `pt-BR` locale: `p` => `HH:mm`\n *\n * Values will be assigned to the date in the descending order of its unit's priority.\n * Units of an equal priority overwrite each other in the order of appearance.\n *\n * If no values of higher priority are parsed (e.g. when parsing string 'January 1st' without a year),\n * the values will be taken from 3rd argument `referenceDate` which works as a context of parsing.\n *\n * `referenceDate` must be passed for correct work of the function.\n * If you're not sure which `referenceDate` to supply, create a new instance of Date:\n * `parse('02/11/2014', 'MM/dd/yyyy', new Date())`\n * In this case parsing will be done in the context of the current date.\n * If `referenceDate` is `Invalid Date` or a value not convertible to valid `Date`,\n * then `Invalid Date` will be returned.\n *\n * The result may vary by locale.\n *\n * If `formatString` matches with `dateString` but does not provides tokens, `referenceDate` will be returned.\n *\n * If parsing failed, `Invalid Date` will be returned.\n * Invalid Date is a Date, whose time value is NaN.\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - Old `parse` was renamed to `toDate`.\n * Now `parse` is a new function which parses a string using a provided format.\n *\n * ```javascript\n * // Before v2.0.0\n * parse('2016-01-01')\n *\n * // v2.0.0 onward (toDate no longer accepts a string)\n * toDate(1392098430000) // Unix to timestamp\n * toDate(new Date(2014, 1, 11, 11, 30, 30)) // Cloning the date\n * parse('2016-01-01', 'yyyy-MM-dd', new Date())\n * ```\n *\n * @param {String} dateString - the string to parse\n * @param {String} formatString - the string of tokens\n * @param {Date|Number} referenceDate - defines values missing from the parsed dateString\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year\n * @param {Boolean} [options.useAdditionalWeekYearTokens=false] - if true, allows usage of the week-numbering year tokens `YY` and `YYYY`;\n * see: https://git.io/fxCyr\n * @param {Boolean} [options.useAdditionalDayOfYearTokens=false] - if true, allows usage of the day of year tokens `D` and `DD`;\n * see: https://git.io/fxCyr\n * @returns {Date} the parsed date\n * @throws {TypeError} 3 arguments required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n * @throws {RangeError} `options.locale` must contain `match` property\n * @throws {RangeError} use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://git.io/fxCyr\n * @throws {RangeError} use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://git.io/fxCyr\n * @throws {RangeError} use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://git.io/fxCyr\n * @throws {RangeError} use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://git.io/fxCyr\n * @throws {RangeError} format string contains an unescaped latin alphabet character\n *\n * @example\n * // Parse 11 February 2014 from middle-endian format:\n * var result = parse('02/11/2014', 'MM/dd/yyyy', new Date())\n * //=> Tue Feb 11 2014 00:00:00\n *\n * @example\n * // Parse 28th of February in Esperanto locale in the context of 2010 year:\n * import eo from 'date-fns/locale/eo'\n * var result = parse('28-a de februaro', \"do 'de' MMMM\", new Date(2010, 0, 1), {\n * locale: eo\n * })\n * //=> Sun Feb 28 2010 00:00:00\n */\n\nexport default function parse(dirtyDateString, dirtyFormatString, dirtyReferenceDate, dirtyOptions) {\n requiredArgs(3, arguments);\n var dateString = String(dirtyDateString);\n var formatString = String(dirtyFormatString);\n var options = dirtyOptions || {};\n var locale = options.locale || defaultLocale;\n\n if (!locale.match) {\n throw new RangeError('locale must contain match property');\n }\n\n var localeFirstWeekContainsDate = locale.options && locale.options.firstWeekContainsDate;\n var defaultFirstWeekContainsDate = localeFirstWeekContainsDate == null ? 1 : toInteger(localeFirstWeekContainsDate);\n var firstWeekContainsDate = options.firstWeekContainsDate == null ? defaultFirstWeekContainsDate : toInteger(options.firstWeekContainsDate); // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n\n if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively');\n }\n\n var localeWeekStartsOn = locale.options && locale.options.weekStartsOn;\n var defaultWeekStartsOn = localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn);\n var weekStartsOn = options.weekStartsOn == null ? defaultWeekStartsOn : toInteger(options.weekStartsOn); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n }\n\n if (formatString === '') {\n if (dateString === '') {\n return toDate(dirtyReferenceDate);\n } else {\n return new Date(NaN);\n }\n }\n\n var subFnOptions = {\n firstWeekContainsDate: firstWeekContainsDate,\n weekStartsOn: weekStartsOn,\n locale: locale\n }; // If timezone isn't specified, it will be set to the system timezone\n\n var setters = [{\n priority: TIMEZONE_UNIT_PRIORITY,\n subPriority: -1,\n set: dateToSystemTimezone,\n index: 0\n }];\n var i;\n var tokens = formatString.match(longFormattingTokensRegExp).map(function (substring) {\n var firstCharacter = substring[0];\n\n if (firstCharacter === 'p' || firstCharacter === 'P') {\n var longFormatter = longFormatters[firstCharacter];\n return longFormatter(substring, locale.formatLong, subFnOptions);\n }\n\n return substring;\n }).join('').match(formattingTokensRegExp);\n var usedTokens = [];\n\n for (i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n\n if (!options.useAdditionalWeekYearTokens && isProtectedWeekYearToken(token)) {\n throwProtectedError(token, formatString, dirtyDateString);\n }\n\n if (!options.useAdditionalDayOfYearTokens && isProtectedDayOfYearToken(token)) {\n throwProtectedError(token, formatString, dirtyDateString);\n }\n\n var firstCharacter = token[0];\n var parser = parsers[firstCharacter];\n\n if (parser) {\n var incompatibleTokens = parser.incompatibleTokens;\n\n if (Array.isArray(incompatibleTokens)) {\n var incompatibleToken = void 0;\n\n for (var _i = 0; _i < usedTokens.length; _i++) {\n var usedToken = usedTokens[_i].token;\n\n if (incompatibleTokens.indexOf(usedToken) !== -1 || usedToken === firstCharacter) {\n incompatibleToken = usedTokens[_i];\n break;\n }\n }\n\n if (incompatibleToken) {\n throw new RangeError(\"The format string mustn't contain `\".concat(incompatibleToken.fullToken, \"` and `\").concat(token, \"` at the same time\"));\n }\n } else if (parser.incompatibleTokens === '*' && usedTokens.length) {\n throw new RangeError(\"The format string mustn't contain `\".concat(token, \"` and any other token at the same time\"));\n }\n\n usedTokens.push({\n token: firstCharacter,\n fullToken: token\n });\n var parseResult = parser.parse(dateString, token, locale.match, subFnOptions);\n\n if (!parseResult) {\n return new Date(NaN);\n }\n\n setters.push({\n priority: parser.priority,\n subPriority: parser.subPriority || 0,\n set: parser.set,\n validate: parser.validate,\n value: parseResult.value,\n index: setters.length\n });\n dateString = parseResult.rest;\n } else {\n if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n throw new RangeError('Format string contains an unescaped latin alphabet character `' + firstCharacter + '`');\n } // Replace two single quote characters with one single quote character\n\n\n if (token === \"''\") {\n token = \"'\";\n } else if (firstCharacter === \"'\") {\n token = cleanEscapedString(token);\n } // Cut token from string, or, if string doesn't match the token, return Invalid Date\n\n\n if (dateString.indexOf(token) === 0) {\n dateString = dateString.slice(token.length);\n } else {\n return new Date(NaN);\n }\n }\n } // Check if the remaining input contains something other than whitespace\n\n\n if (dateString.length > 0 && notWhitespaceRegExp.test(dateString)) {\n return new Date(NaN);\n }\n\n var uniquePrioritySetters = setters.map(function (setter) {\n return setter.priority;\n }).sort(function (a, b) {\n return b - a;\n }).filter(function (priority, index, array) {\n return array.indexOf(priority) === index;\n }).map(function (priority) {\n return setters.filter(function (setter) {\n return setter.priority === priority;\n }).sort(function (a, b) {\n return b.subPriority - a.subPriority;\n });\n }).map(function (setterArray) {\n return setterArray[0];\n });\n var date = toDate(dirtyReferenceDate);\n\n if (isNaN(date)) {\n return new Date(NaN);\n } // Convert the date in system timezone to the same date in UTC+00:00 timezone.\n // This ensures that when UTC functions will be implemented, locales will be compatible with them.\n // See an issue about UTC functions: https://github.com/date-fns/date-fns/issues/37\n\n\n var utcDate = subMilliseconds(date, getTimezoneOffsetInMilliseconds(date));\n var flags = {};\n\n for (i = 0; i < uniquePrioritySetters.length; i++) {\n var setter = uniquePrioritySetters[i];\n\n if (setter.validate && !setter.validate(utcDate, setter.value, subFnOptions)) {\n return new Date(NaN);\n }\n\n var result = setter.set(utcDate, flags, setter.value, subFnOptions); // Result is tuple (date, flags)\n\n if (result[0]) {\n utcDate = result[0];\n assign(flags, result[1]); // Result is date\n } else {\n utcDate = result;\n }\n }\n\n return utcDate;\n}\n\nfunction dateToSystemTimezone(date, flags) {\n if (flags.timestampIsSet) {\n return date;\n }\n\n var convertedDate = new Date(0);\n convertedDate.setFullYear(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate());\n convertedDate.setHours(date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds(), date.getUTCMilliseconds());\n return convertedDate;\n}\n\nfunction cleanEscapedString(input) {\n return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp, \"'\");\n}","export default function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nexport default function _toPropertyKey(arg) {\n var key = toPrimitive(arg, \"string\");\n return _typeof(key) === \"symbol\" ? key : String(key);\n}","import _typeof from \"./typeof.js\";\nexport default function _toPrimitive(input, hint) {\n if (_typeof(input) !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (_typeof(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, toPropertyKey(descriptor.key), descriptor);\n }\n}\nexport default function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}","import _classCallCheck from '@babel/runtime/helpers/esm/classCallCheck';\nimport _createClass from '@babel/runtime/helpers/esm/createClass';\n\nvar arr = [];\nvar each = arr.forEach;\nvar slice = arr.slice;\nfunction defaults(obj) {\n each.call(slice.call(arguments, 1), function (source) {\n if (source) {\n for (var prop in source) {\n if (obj[prop] === undefined) obj[prop] = source[prop];\n }\n }\n });\n return obj;\n}\nfunction createClassOnDemand(ClassOrObject) {\n if (!ClassOrObject) return null;\n if (typeof ClassOrObject === 'function') return new ClassOrObject();\n return ClassOrObject;\n}\n\nfunction getDefaults() {\n return {\n handleEmptyResourcesAsFailed: true\n };\n}\nvar Backend = /*#__PURE__*/function () {\n function Backend(services) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _classCallCheck(this, Backend);\n this.backends = [];\n this.type = 'backend';\n this.init(services, options);\n }\n _createClass(Backend, [{\n key: \"init\",\n value: function init(services) {\n var _this = this;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var i18nextOptions = arguments.length > 2 ? arguments[2] : undefined;\n this.services = services;\n this.options = defaults(options, this.options || {}, getDefaults());\n this.options.backends && this.options.backends.forEach(function (b, i) {\n _this.backends[i] = _this.backends[i] || createClassOnDemand(b);\n _this.backends[i].init(services, _this.options.backendOptions && _this.options.backendOptions[i] || {}, i18nextOptions);\n });\n }\n }, {\n key: \"read\",\n value: function read(language, namespace, callback) {\n var _this2 = this;\n var bLen = this.backends.length;\n var loadPosition = function loadPosition(pos) {\n if (pos >= bLen) return callback(new Error('non of the backend loaded data;', true)); // failed pass retry flag\n var isLastBackend = pos === bLen - 1;\n var lengthCheckAmount = _this2.options.handleEmptyResourcesAsFailed && !isLastBackend ? 0 : -1;\n var backend = _this2.backends[pos];\n if (backend.read) {\n var resolver = function resolver(err, data) {\n if (!err && data && Object.keys(data).length > lengthCheckAmount) {\n callback(null, data, pos);\n savePosition(pos - 1, data); // save one in front\n } else {\n loadPosition(pos + 1); // try load from next\n }\n };\n\n var fc = backend.read.bind(backend);\n if (fc.length === 2) {\n // no callback\n try {\n var r = fc(language, namespace);\n if (r && typeof r.then === 'function') {\n // promise\n r.then(function (data) {\n return resolver(null, data);\n })[\"catch\"](resolver);\n } else {\n // sync\n resolver(null, r);\n }\n } catch (err) {\n resolver(err);\n }\n return;\n }\n\n // normal with callback\n fc(language, namespace, resolver);\n } else {\n loadPosition(pos + 1); // try load from next\n }\n };\n\n var savePosition = function savePosition(pos, data) {\n if (pos < 0) return;\n var backend = _this2.backends[pos];\n if (backend.save) {\n backend.save(language, namespace, data);\n savePosition(pos - 1, data);\n } else {\n savePosition(pos - 1, data);\n }\n };\n loadPosition(0);\n }\n }, {\n key: \"create\",\n value: function create(languages, namespace, key, fallbackValue) {\n var clb = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : function () {};\n var opts = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n this.backends.forEach(function (b) {\n if (!b.create) return;\n var fc = b.create.bind(b);\n if (fc.length < 6) {\n // no callback\n try {\n var r;\n if (fc.length === 5) {\n // future callback-less api for i18next-locize-backend\n r = fc(languages, namespace, key, fallbackValue, opts);\n } else {\n r = fc(languages, namespace, key, fallbackValue);\n }\n if (r && typeof r.then === 'function') {\n // promise\n r.then(function (data) {\n return clb(null, data);\n })[\"catch\"](clb);\n } else {\n // sync\n clb(null, r);\n }\n } catch (err) {\n clb(err);\n }\n return;\n }\n\n // normal with callback\n fc(languages, namespace, key, fallbackValue, clb /* unused callback */, opts);\n });\n }\n }]);\n return Backend;\n}();\nBackend.type = 'backend';\n\nexport { Backend as default };\n","export default function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nexport default function _toPropertyKey(arg) {\n var key = toPrimitive(arg, \"string\");\n return _typeof(key) === \"symbol\" ? key : String(key);\n}","import _typeof from \"./typeof.js\";\nexport default function _toPrimitive(input, hint) {\n if (_typeof(input) !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (_typeof(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, toPropertyKey(descriptor.key), descriptor);\n }\n}\nexport default function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}","import _classCallCheck from '@babel/runtime/helpers/esm/classCallCheck';\nimport _createClass from '@babel/runtime/helpers/esm/createClass';\n\nvar arr = [];\nvar each = arr.forEach;\nvar slice = arr.slice;\nfunction defaults(obj) {\n each.call(slice.call(arguments, 1), function (source) {\n if (source) {\n for (var prop in source) {\n if (obj[prop] === undefined) obj[prop] = source[prop];\n }\n }\n });\n return obj;\n}\n\n// eslint-disable-next-line no-control-regex\nvar fieldContentRegExp = /^[\\u0009\\u0020-\\u007e\\u0080-\\u00ff]+$/;\nvar serializeCookie = function serializeCookie(name, val, options) {\n var opt = options || {};\n opt.path = opt.path || '/';\n var value = encodeURIComponent(val);\n var str = \"\".concat(name, \"=\").concat(value);\n if (opt.maxAge > 0) {\n var maxAge = opt.maxAge - 0;\n if (Number.isNaN(maxAge)) throw new Error('maxAge should be a Number');\n str += \"; Max-Age=\".concat(Math.floor(maxAge));\n }\n if (opt.domain) {\n if (!fieldContentRegExp.test(opt.domain)) {\n throw new TypeError('option domain is invalid');\n }\n str += \"; Domain=\".concat(opt.domain);\n }\n if (opt.path) {\n if (!fieldContentRegExp.test(opt.path)) {\n throw new TypeError('option path is invalid');\n }\n str += \"; Path=\".concat(opt.path);\n }\n if (opt.expires) {\n if (typeof opt.expires.toUTCString !== 'function') {\n throw new TypeError('option expires is invalid');\n }\n str += \"; Expires=\".concat(opt.expires.toUTCString());\n }\n if (opt.httpOnly) str += '; HttpOnly';\n if (opt.secure) str += '; Secure';\n if (opt.sameSite) {\n var sameSite = typeof opt.sameSite === 'string' ? opt.sameSite.toLowerCase() : opt.sameSite;\n switch (sameSite) {\n case true:\n str += '; SameSite=Strict';\n break;\n case 'lax':\n str += '; SameSite=Lax';\n break;\n case 'strict':\n str += '; SameSite=Strict';\n break;\n case 'none':\n str += '; SameSite=None';\n break;\n default:\n throw new TypeError('option sameSite is invalid');\n }\n }\n return str;\n};\nvar cookie = {\n create: function create(name, value, minutes, domain) {\n var cookieOptions = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {\n path: '/',\n sameSite: 'strict'\n };\n if (minutes) {\n cookieOptions.expires = new Date();\n cookieOptions.expires.setTime(cookieOptions.expires.getTime() + minutes * 60 * 1000);\n }\n if (domain) cookieOptions.domain = domain;\n document.cookie = serializeCookie(name, encodeURIComponent(value), cookieOptions);\n },\n read: function read(name) {\n var nameEQ = \"\".concat(name, \"=\");\n var ca = document.cookie.split(';');\n for (var i = 0; i < ca.length; i++) {\n var c = ca[i];\n while (c.charAt(0) === ' ') {\n c = c.substring(1, c.length);\n }\n if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length);\n }\n return null;\n },\n remove: function remove(name) {\n this.create(name, '', -1);\n }\n};\nvar cookie$1 = {\n name: 'cookie',\n lookup: function lookup(options) {\n var found;\n if (options.lookupCookie && typeof document !== 'undefined') {\n var c = cookie.read(options.lookupCookie);\n if (c) found = c;\n }\n return found;\n },\n cacheUserLanguage: function cacheUserLanguage(lng, options) {\n if (options.lookupCookie && typeof document !== 'undefined') {\n cookie.create(options.lookupCookie, lng, options.cookieMinutes, options.cookieDomain, options.cookieOptions);\n }\n }\n};\n\nvar querystring = {\n name: 'querystring',\n lookup: function lookup(options) {\n var found;\n if (typeof window !== 'undefined') {\n var search = window.location.search;\n if (!window.location.search && window.location.hash && window.location.hash.indexOf('?') > -1) {\n search = window.location.hash.substring(window.location.hash.indexOf('?'));\n }\n var query = search.substring(1);\n var params = query.split('&');\n for (var i = 0; i < params.length; i++) {\n var pos = params[i].indexOf('=');\n if (pos > 0) {\n var key = params[i].substring(0, pos);\n if (key === options.lookupQuerystring) {\n found = params[i].substring(pos + 1);\n }\n }\n }\n }\n return found;\n }\n};\n\nvar hasLocalStorageSupport = null;\nvar localStorageAvailable = function localStorageAvailable() {\n if (hasLocalStorageSupport !== null) return hasLocalStorageSupport;\n try {\n hasLocalStorageSupport = window !== 'undefined' && window.localStorage !== null;\n var testKey = 'i18next.translate.boo';\n window.localStorage.setItem(testKey, 'foo');\n window.localStorage.removeItem(testKey);\n } catch (e) {\n hasLocalStorageSupport = false;\n }\n return hasLocalStorageSupport;\n};\nvar localStorage = {\n name: 'localStorage',\n lookup: function lookup(options) {\n var found;\n if (options.lookupLocalStorage && localStorageAvailable()) {\n var lng = window.localStorage.getItem(options.lookupLocalStorage);\n if (lng) found = lng;\n }\n return found;\n },\n cacheUserLanguage: function cacheUserLanguage(lng, options) {\n if (options.lookupLocalStorage && localStorageAvailable()) {\n window.localStorage.setItem(options.lookupLocalStorage, lng);\n }\n }\n};\n\nvar hasSessionStorageSupport = null;\nvar sessionStorageAvailable = function sessionStorageAvailable() {\n if (hasSessionStorageSupport !== null) return hasSessionStorageSupport;\n try {\n hasSessionStorageSupport = window !== 'undefined' && window.sessionStorage !== null;\n var testKey = 'i18next.translate.boo';\n window.sessionStorage.setItem(testKey, 'foo');\n window.sessionStorage.removeItem(testKey);\n } catch (e) {\n hasSessionStorageSupport = false;\n }\n return hasSessionStorageSupport;\n};\nvar sessionStorage = {\n name: 'sessionStorage',\n lookup: function lookup(options) {\n var found;\n if (options.lookupSessionStorage && sessionStorageAvailable()) {\n var lng = window.sessionStorage.getItem(options.lookupSessionStorage);\n if (lng) found = lng;\n }\n return found;\n },\n cacheUserLanguage: function cacheUserLanguage(lng, options) {\n if (options.lookupSessionStorage && sessionStorageAvailable()) {\n window.sessionStorage.setItem(options.lookupSessionStorage, lng);\n }\n }\n};\n\nvar navigator$1 = {\n name: 'navigator',\n lookup: function lookup(options) {\n var found = [];\n if (typeof navigator !== 'undefined') {\n if (navigator.languages) {\n // chrome only; not an array, so can't use .push.apply instead of iterating\n for (var i = 0; i < navigator.languages.length; i++) {\n found.push(navigator.languages[i]);\n }\n }\n if (navigator.userLanguage) {\n found.push(navigator.userLanguage);\n }\n if (navigator.language) {\n found.push(navigator.language);\n }\n }\n return found.length > 0 ? found : undefined;\n }\n};\n\nvar htmlTag = {\n name: 'htmlTag',\n lookup: function lookup(options) {\n var found;\n var htmlTag = options.htmlTag || (typeof document !== 'undefined' ? document.documentElement : null);\n if (htmlTag && typeof htmlTag.getAttribute === 'function') {\n found = htmlTag.getAttribute('lang');\n }\n return found;\n }\n};\n\nvar path = {\n name: 'path',\n lookup: function lookup(options) {\n var found;\n if (typeof window !== 'undefined') {\n var language = window.location.pathname.match(/\\/([a-zA-Z-]*)/g);\n if (language instanceof Array) {\n if (typeof options.lookupFromPathIndex === 'number') {\n if (typeof language[options.lookupFromPathIndex] !== 'string') {\n return undefined;\n }\n found = language[options.lookupFromPathIndex].replace('/', '');\n } else {\n found = language[0].replace('/', '');\n }\n }\n }\n return found;\n }\n};\n\nvar subdomain = {\n name: 'subdomain',\n lookup: function lookup(options) {\n // If given get the subdomain index else 1\n var lookupFromSubdomainIndex = typeof options.lookupFromSubdomainIndex === 'number' ? options.lookupFromSubdomainIndex + 1 : 1;\n // get all matches if window.location. is existing\n // first item of match is the match itself and the second is the first group macht which sould be the first subdomain match\n // is the hostname no public domain get the or option of localhost\n var language = typeof window !== 'undefined' && window.location && window.location.hostname && window.location.hostname.match(/^(\\w{2,5})\\.(([a-z0-9-]{1,63}\\.[a-z]{2,6})|localhost)/i);\n\n // if there is no match (null) return undefined\n if (!language) return undefined;\n // return the given group match\n return language[lookupFromSubdomainIndex];\n }\n};\n\nfunction getDefaults() {\n return {\n order: ['querystring', 'cookie', 'localStorage', 'sessionStorage', 'navigator', 'htmlTag'],\n lookupQuerystring: 'lng',\n lookupCookie: 'i18next',\n lookupLocalStorage: 'i18nextLng',\n lookupSessionStorage: 'i18nextLng',\n // cache user language\n caches: ['localStorage'],\n excludeCacheFor: ['cimode']\n // cookieMinutes: 10,\n // cookieDomain: 'myDomain'\n };\n}\nvar Browser = /*#__PURE__*/function () {\n function Browser(services) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _classCallCheck(this, Browser);\n this.type = 'languageDetector';\n this.detectors = {};\n this.init(services, options);\n }\n _createClass(Browser, [{\n key: \"init\",\n value: function init(services) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var i18nOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n this.services = services;\n this.options = defaults(options, this.options || {}, getDefaults());\n\n // backwards compatibility\n if (this.options.lookupFromUrlIndex) this.options.lookupFromPathIndex = this.options.lookupFromUrlIndex;\n this.i18nOptions = i18nOptions;\n this.addDetector(cookie$1);\n this.addDetector(querystring);\n this.addDetector(localStorage);\n this.addDetector(sessionStorage);\n this.addDetector(navigator$1);\n this.addDetector(htmlTag);\n this.addDetector(path);\n this.addDetector(subdomain);\n }\n }, {\n key: \"addDetector\",\n value: function addDetector(detector) {\n this.detectors[detector.name] = detector;\n }\n }, {\n key: \"detect\",\n value: function detect(detectionOrder) {\n var _this = this;\n if (!detectionOrder) detectionOrder = this.options.order;\n var detected = [];\n detectionOrder.forEach(function (detectorName) {\n if (_this.detectors[detectorName]) {\n var lookup = _this.detectors[detectorName].lookup(_this.options);\n if (lookup && typeof lookup === 'string') lookup = [lookup];\n if (lookup) detected = detected.concat(lookup);\n }\n });\n if (this.services.languageUtils.getBestMatchFromCodes) return detected; // new i18next v19.5.0\n return detected.length > 0 ? detected[0] : null; // a little backward compatibility\n }\n }, {\n key: \"cacheUserLanguage\",\n value: function cacheUserLanguage(lng, caches) {\n var _this2 = this;\n if (!caches) caches = this.options.caches;\n if (!caches) return;\n if (this.options.excludeCacheFor && this.options.excludeCacheFor.indexOf(lng) > -1) return;\n caches.forEach(function (cacheName) {\n if (_this2.detectors[cacheName]) _this2.detectors[cacheName].cacheUserLanguage(lng, _this2.options);\n });\n }\n }]);\n return Browser;\n}();\nBrowser.type = 'languageDetector';\n\nexport { Browser as default };\n","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfHour\n * @category Hour Helpers\n * @summary Return the start of an hour for the given date.\n *\n * @description\n * Return the start of an hour for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of an hour\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of an hour for 2 September 2014 11:55:00:\n * const result = startOfHour(new Date(2014, 8, 2, 11, 55))\n * //=> Tue Sep 02 2014 11:00:00\n */\n\nexport default function startOfHour(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n date.setMinutes(0, 0, 0);\n return date;\n}","import startOfHour from \"../startOfHour/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isSameHour\n * @category Hour Helpers\n * @summary Are the given dates in the same hour?\n *\n * @description\n * Are the given dates in the same hour?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same hour\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 4 September 2014 06:00:00 and 4 September 06:30:00 in the same hour?\n * var result = isSameHour(new Date(2014, 8, 4, 6, 0), new Date(2014, 8, 4, 6, 30))\n * //=> true\n */\n\nexport default function isSameHour(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeftStartOfHour = startOfHour(dirtyDateLeft);\n var dateRightStartOfHour = startOfHour(dirtyDateRight);\n return dateLeftStartOfHour.getTime() === dateRightStartOfHour.getTime();\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getDaysInMonth\n * @category Month Helpers\n * @summary Get the number of days in a month of the given date.\n *\n * @description\n * Get the number of days in a month of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the number of days in a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // How many days are in February 2000?\n * const result = getDaysInMonth(new Date(2000, 1))\n * //=> 29\n */\n\nexport default function getDaysInMonth(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var year = date.getFullYear();\n var monthIndex = date.getMonth();\n var lastDayOfMonth = new Date(0);\n lastDayOfMonth.setFullYear(year, monthIndex + 1, 0);\n lastDayOfMonth.setHours(0, 0, 0, 0);\n return lastDayOfMonth.getDate();\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport getDaysInMonth from \"../getDaysInMonth/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name setMonth\n * @category Month Helpers\n * @summary Set the month to the given date.\n *\n * @description\n * Set the month to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} month - the month of the new date\n * @returns {Date} the new date with the month set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set February to 1 September 2014:\n * const result = setMonth(new Date(2014, 8, 1), 1)\n * //=> Sat Feb 01 2014 00:00:00\n */\n\nexport default function setMonth(dirtyDate, dirtyMonth) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var month = toInteger(dirtyMonth);\n var year = date.getFullYear();\n var day = date.getDate();\n var dateWithDesiredMonth = new Date(0);\n dateWithDesiredMonth.setFullYear(year, month, 15);\n dateWithDesiredMonth.setHours(0, 0, 0, 0);\n var daysInMonth = getDaysInMonth(dateWithDesiredMonth); // Set the last day of the new month\n // if the original date was the last day of the longer month\n\n date.setMonth(month, Math.min(day, daysInMonth));\n return date;\n}","import hasClass from './hasClass';\n/**\n * Adds a CSS class to a given element.\n * \n * @param element the element\n * @param className the CSS class name\n */\n\nexport default function addClass(element, className) {\n if (element.classList) element.classList.add(className);else if (!hasClass(element, className)) if (typeof element.className === 'string') element.className = element.className + \" \" + className;else element.setAttribute('class', (element.className && element.className.baseVal || '') + \" \" + className);\n}","/**\n * Checks if a given element has a CSS class.\n * \n * @param element the element\n * @param className the CSS class name\n */\nexport default function hasClass(element, className) {\n if (element.classList) return !!className && element.classList.contains(className);\n return (\" \" + (element.className.baseVal || element.className) + \" \").indexOf(\" \" + className + \" \") !== -1;\n}","import differenceInMilliseconds from \"../differenceInMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nvar MILLISECONDS_IN_MINUTE = 60000;\n/**\n * @name differenceInMinutes\n * @category Minute Helpers\n * @summary Get the number of minutes between the given dates.\n *\n * @description\n * Get the signed number of full (rounded towards 0) minutes between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of minutes\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many minutes are between 2 July 2014 12:07:59 and 2 July 2014 12:20:00?\n * var result = differenceInMinutes(\n * new Date(2014, 6, 2, 12, 20, 0),\n * new Date(2014, 6, 2, 12, 7, 59)\n * )\n * //=> 12\n *\n * @example\n * // How many minutes are from 10:01:59 to 10:00:00\n * var result = differenceInMinutes(\n * new Date(2000, 0, 1, 10, 0, 0),\n * new Date(2000, 0, 1, 10, 1, 59)\n * )\n * //=> -1\n */\n\nexport default function differenceInMinutes(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var diff = differenceInMilliseconds(dirtyDateLeft, dirtyDateRight) / MILLISECONDS_IN_MINUTE;\n return diff > 0 ? Math.floor(diff) : Math.ceil(diff);\n}","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var b=\"function\"===typeof Symbol&&Symbol.for,c=b?Symbol.for(\"react.element\"):60103,d=b?Symbol.for(\"react.portal\"):60106,e=b?Symbol.for(\"react.fragment\"):60107,f=b?Symbol.for(\"react.strict_mode\"):60108,g=b?Symbol.for(\"react.profiler\"):60114,h=b?Symbol.for(\"react.provider\"):60109,k=b?Symbol.for(\"react.context\"):60110,l=b?Symbol.for(\"react.async_mode\"):60111,m=b?Symbol.for(\"react.concurrent_mode\"):60111,n=b?Symbol.for(\"react.forward_ref\"):60112,p=b?Symbol.for(\"react.suspense\"):60113,q=b?\nSymbol.for(\"react.suspense_list\"):60120,r=b?Symbol.for(\"react.memo\"):60115,t=b?Symbol.for(\"react.lazy\"):60116,v=b?Symbol.for(\"react.block\"):60121,w=b?Symbol.for(\"react.fundamental\"):60117,x=b?Symbol.for(\"react.responder\"):60118,y=b?Symbol.for(\"react.scope\"):60119;\nfunction z(a){if(\"object\"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;\nexports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isAsyncMode=function(a){return A(a)||z(a)===l};exports.isConcurrentMode=A;exports.isContextConsumer=function(a){return z(a)===k};exports.isContextProvider=function(a){return z(a)===h};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return z(a)===n};exports.isFragment=function(a){return z(a)===e};exports.isLazy=function(a){return z(a)===t};\nexports.isMemo=function(a){return z(a)===r};exports.isPortal=function(a){return z(a)===d};exports.isProfiler=function(a){return z(a)===g};exports.isStrictMode=function(a){return z(a)===f};exports.isSuspense=function(a){return z(a)===p};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||\"object\"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};exports.typeOf=z;\n","function toVal(mix) {\n\tvar k, y, str='';\n\n\tif (typeof mix === 'string' || typeof mix === 'number') {\n\t\tstr += mix;\n\t} else if (typeof mix === 'object') {\n\t\tif (Array.isArray(mix)) {\n\t\t\tfor (k=0; k < mix.length; k++) {\n\t\t\t\tif (mix[k]) {\n\t\t\t\t\tif (y = toVal(mix[k])) {\n\t\t\t\t\t\tstr && (str += ' ');\n\t\t\t\t\t\tstr += y;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor (k in mix) {\n\t\t\t\tif (mix[k]) {\n\t\t\t\t\tstr && (str += ' ');\n\t\t\t\t\tstr += k;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn str;\n}\n\nexport default function () {\n\tvar i=0, tmp, x, str='';\n\twhile (i < arguments.length) {\n\t\tif (tmp = arguments[i++]) {\n\t\t\tif (x = toVal(tmp)) {\n\t\t\t\tstr && (str += ' ');\n\t\t\t\tstr += x\n\t\t\t}\n\t\t}\n\t}\n\treturn str;\n}\n","export default function addLeadingZeros(number, targetLength) {\n var sign = number < 0 ? '-' : '';\n var output = Math.abs(number).toString();\n\n while (output.length < targetLength) {\n output = '0' + output;\n }\n\n return sign + output;\n}","import addLeadingZeros from \"../../addLeadingZeros/index.js\";\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | |\n * | d | Day of month | D | |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | m | Minute | M | Month |\n * | s | Second | S | Fraction of second |\n * | y | Year (abs) | Y | |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n */\n\nvar formatters = {\n // Year\n y: function (date, token) {\n // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_tokens\n // | Year | y | yy | yyy | yyyy | yyyyy |\n // |----------|-------|----|-------|-------|-------|\n // | AD 1 | 1 | 01 | 001 | 0001 | 00001 |\n // | AD 12 | 12 | 12 | 012 | 0012 | 00012 |\n // | AD 123 | 123 | 23 | 123 | 0123 | 00123 |\n // | AD 1234 | 1234 | 34 | 1234 | 1234 | 01234 |\n // | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\n var signedYear = date.getUTCFullYear(); // Returns 1 for 1 BC (which is year 0 in JavaScript)\n\n var year = signedYear > 0 ? signedYear : 1 - signedYear;\n return addLeadingZeros(token === 'yy' ? year % 100 : year, token.length);\n },\n // Month\n M: function (date, token) {\n var month = date.getUTCMonth();\n return token === 'M' ? String(month + 1) : addLeadingZeros(month + 1, 2);\n },\n // Day of the month\n d: function (date, token) {\n return addLeadingZeros(date.getUTCDate(), token.length);\n },\n // AM or PM\n a: function (date, token) {\n var dayPeriodEnumValue = date.getUTCHours() / 12 >= 1 ? 'pm' : 'am';\n\n switch (token) {\n case 'a':\n case 'aa':\n return dayPeriodEnumValue.toUpperCase();\n\n case 'aaa':\n return dayPeriodEnumValue;\n\n case 'aaaaa':\n return dayPeriodEnumValue[0];\n\n case 'aaaa':\n default:\n return dayPeriodEnumValue === 'am' ? 'a.m.' : 'p.m.';\n }\n },\n // Hour [1-12]\n h: function (date, token) {\n return addLeadingZeros(date.getUTCHours() % 12 || 12, token.length);\n },\n // Hour [0-23]\n H: function (date, token) {\n return addLeadingZeros(date.getUTCHours(), token.length);\n },\n // Minute\n m: function (date, token) {\n return addLeadingZeros(date.getUTCMinutes(), token.length);\n },\n // Second\n s: function (date, token) {\n return addLeadingZeros(date.getUTCSeconds(), token.length);\n },\n // Fraction of second\n S: function (date, token) {\n var numberOfDigits = token.length;\n var milliseconds = date.getUTCMilliseconds();\n var fractionalSeconds = Math.floor(milliseconds * Math.pow(10, numberOfDigits - 3));\n return addLeadingZeros(fractionalSeconds, token.length);\n }\n};\nexport default formatters;","import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nvar MILLISECONDS_IN_DAY = 86400000; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function getUTCDayOfYear(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var timestamp = date.getTime();\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n var startOfYearTimestamp = date.getTime();\n var difference = timestamp - startOfYearTimestamp;\n return Math.floor(difference / MILLISECONDS_IN_DAY) + 1;\n}","import lightFormatters from \"../lightFormatters/index.js\";\nimport getUTCDayOfYear from \"../../../_lib/getUTCDayOfYear/index.js\";\nimport getUTCISOWeek from \"../../../_lib/getUTCISOWeek/index.js\";\nimport getUTCISOWeekYear from \"../../../_lib/getUTCISOWeekYear/index.js\";\nimport getUTCWeek from \"../../../_lib/getUTCWeek/index.js\";\nimport getUTCWeekYear from \"../../../_lib/getUTCWeekYear/index.js\";\nimport addLeadingZeros from \"../../addLeadingZeros/index.js\";\nvar dayPeriodEnum = {\n am: 'am',\n pm: 'pm',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n};\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | Milliseconds in day |\n * | b | AM, PM, noon, midnight | B | Flexible day period |\n * | c | Stand-alone local day of week | C* | Localized hour w/ day period |\n * | d | Day of month | D | Day of year |\n * | e | Local day of week | E | Day of week |\n * | f | | F* | Day of week in month |\n * | g* | Modified Julian day | G | Era |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | i! | ISO day of week | I! | ISO week of year |\n * | j* | Localized hour w/ day period | J* | Localized hour w/o day period |\n * | k | Hour [1-24] | K | Hour [0-11] |\n * | l* | (deprecated) | L | Stand-alone month |\n * | m | Minute | M | Month |\n * | n | | N | |\n * | o! | Ordinal number modifier | O | Timezone (GMT) |\n * | p! | Long localized time | P! | Long localized date |\n * | q | Stand-alone quarter | Q | Quarter |\n * | r* | Related Gregorian year | R! | ISO week-numbering year |\n * | s | Second | S | Fraction of second |\n * | t! | Seconds timestamp | T! | Milliseconds timestamp |\n * | u | Extended year | U* | Cyclic year |\n * | v* | Timezone (generic non-locat.) | V* | Timezone (location) |\n * | w | Local week of year | W* | Week of month |\n * | x | Timezone (ISO-8601 w/o Z) | X | Timezone (ISO-8601) |\n * | y | Year (abs) | Y | Local week-numbering year |\n * | z | Timezone (specific non-locat.) | Z* | Timezone (aliases) |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `format` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n * i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n * `R` is supposed to be used in conjunction with `I` and `i`\n * for universal ISO week-numbering date, whereas\n * `Y` is supposed to be used in conjunction with `w` and `e`\n * for week-numbering date specific to the locale.\n * - `P` is long localized date format\n * - `p` is long localized time format\n */\n\nvar formatters = {\n // Era\n G: function (date, token, localize) {\n var era = date.getUTCFullYear() > 0 ? 1 : 0;\n\n switch (token) {\n // AD, BC\n case 'G':\n case 'GG':\n case 'GGG':\n return localize.era(era, {\n width: 'abbreviated'\n });\n // A, B\n\n case 'GGGGG':\n return localize.era(era, {\n width: 'narrow'\n });\n // Anno Domini, Before Christ\n\n case 'GGGG':\n default:\n return localize.era(era, {\n width: 'wide'\n });\n }\n },\n // Year\n y: function (date, token, localize) {\n // Ordinal number\n if (token === 'yo') {\n var signedYear = date.getUTCFullYear(); // Returns 1 for 1 BC (which is year 0 in JavaScript)\n\n var year = signedYear > 0 ? signedYear : 1 - signedYear;\n return localize.ordinalNumber(year, {\n unit: 'year'\n });\n }\n\n return lightFormatters.y(date, token);\n },\n // Local week-numbering year\n Y: function (date, token, localize, options) {\n var signedWeekYear = getUTCWeekYear(date, options); // Returns 1 for 1 BC (which is year 0 in JavaScript)\n\n var weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear; // Two digit year\n\n if (token === 'YY') {\n var twoDigitYear = weekYear % 100;\n return addLeadingZeros(twoDigitYear, 2);\n } // Ordinal number\n\n\n if (token === 'Yo') {\n return localize.ordinalNumber(weekYear, {\n unit: 'year'\n });\n } // Padding\n\n\n return addLeadingZeros(weekYear, token.length);\n },\n // ISO week-numbering year\n R: function (date, token) {\n var isoWeekYear = getUTCISOWeekYear(date); // Padding\n\n return addLeadingZeros(isoWeekYear, token.length);\n },\n // Extended year. This is a single number designating the year of this calendar system.\n // The main difference between `y` and `u` localizers are B.C. years:\n // | Year | `y` | `u` |\n // |------|-----|-----|\n // | AC 1 | 1 | 1 |\n // | BC 1 | 1 | 0 |\n // | BC 2 | 2 | -1 |\n // Also `yy` always returns the last two digits of a year,\n // while `uu` pads single digit years to 2 characters and returns other years unchanged.\n u: function (date, token) {\n var year = date.getUTCFullYear();\n return addLeadingZeros(year, token.length);\n },\n // Quarter\n Q: function (date, token, localize) {\n var quarter = Math.ceil((date.getUTCMonth() + 1) / 3);\n\n switch (token) {\n // 1, 2, 3, 4\n case 'Q':\n return String(quarter);\n // 01, 02, 03, 04\n\n case 'QQ':\n return addLeadingZeros(quarter, 2);\n // 1st, 2nd, 3rd, 4th\n\n case 'Qo':\n return localize.ordinalNumber(quarter, {\n unit: 'quarter'\n });\n // Q1, Q2, Q3, Q4\n\n case 'QQQ':\n return localize.quarter(quarter, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n\n case 'QQQQQ':\n return localize.quarter(quarter, {\n width: 'narrow',\n context: 'formatting'\n });\n // 1st quarter, 2nd quarter, ...\n\n case 'QQQQ':\n default:\n return localize.quarter(quarter, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Stand-alone quarter\n q: function (date, token, localize) {\n var quarter = Math.ceil((date.getUTCMonth() + 1) / 3);\n\n switch (token) {\n // 1, 2, 3, 4\n case 'q':\n return String(quarter);\n // 01, 02, 03, 04\n\n case 'qq':\n return addLeadingZeros(quarter, 2);\n // 1st, 2nd, 3rd, 4th\n\n case 'qo':\n return localize.ordinalNumber(quarter, {\n unit: 'quarter'\n });\n // Q1, Q2, Q3, Q4\n\n case 'qqq':\n return localize.quarter(quarter, {\n width: 'abbreviated',\n context: 'standalone'\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n\n case 'qqqqq':\n return localize.quarter(quarter, {\n width: 'narrow',\n context: 'standalone'\n });\n // 1st quarter, 2nd quarter, ...\n\n case 'qqqq':\n default:\n return localize.quarter(quarter, {\n width: 'wide',\n context: 'standalone'\n });\n }\n },\n // Month\n M: function (date, token, localize) {\n var month = date.getUTCMonth();\n\n switch (token) {\n case 'M':\n case 'MM':\n return lightFormatters.M(date, token);\n // 1st, 2nd, ..., 12th\n\n case 'Mo':\n return localize.ordinalNumber(month + 1, {\n unit: 'month'\n });\n // Jan, Feb, ..., Dec\n\n case 'MMM':\n return localize.month(month, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // J, F, ..., D\n\n case 'MMMMM':\n return localize.month(month, {\n width: 'narrow',\n context: 'formatting'\n });\n // January, February, ..., December\n\n case 'MMMM':\n default:\n return localize.month(month, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Stand-alone month\n L: function (date, token, localize) {\n var month = date.getUTCMonth();\n\n switch (token) {\n // 1, 2, ..., 12\n case 'L':\n return String(month + 1);\n // 01, 02, ..., 12\n\n case 'LL':\n return addLeadingZeros(month + 1, 2);\n // 1st, 2nd, ..., 12th\n\n case 'Lo':\n return localize.ordinalNumber(month + 1, {\n unit: 'month'\n });\n // Jan, Feb, ..., Dec\n\n case 'LLL':\n return localize.month(month, {\n width: 'abbreviated',\n context: 'standalone'\n });\n // J, F, ..., D\n\n case 'LLLLL':\n return localize.month(month, {\n width: 'narrow',\n context: 'standalone'\n });\n // January, February, ..., December\n\n case 'LLLL':\n default:\n return localize.month(month, {\n width: 'wide',\n context: 'standalone'\n });\n }\n },\n // Local week of year\n w: function (date, token, localize, options) {\n var week = getUTCWeek(date, options);\n\n if (token === 'wo') {\n return localize.ordinalNumber(week, {\n unit: 'week'\n });\n }\n\n return addLeadingZeros(week, token.length);\n },\n // ISO week of year\n I: function (date, token, localize) {\n var isoWeek = getUTCISOWeek(date);\n\n if (token === 'Io') {\n return localize.ordinalNumber(isoWeek, {\n unit: 'week'\n });\n }\n\n return addLeadingZeros(isoWeek, token.length);\n },\n // Day of the month\n d: function (date, token, localize) {\n if (token === 'do') {\n return localize.ordinalNumber(date.getUTCDate(), {\n unit: 'date'\n });\n }\n\n return lightFormatters.d(date, token);\n },\n // Day of year\n D: function (date, token, localize) {\n var dayOfYear = getUTCDayOfYear(date);\n\n if (token === 'Do') {\n return localize.ordinalNumber(dayOfYear, {\n unit: 'dayOfYear'\n });\n }\n\n return addLeadingZeros(dayOfYear, token.length);\n },\n // Day of week\n E: function (date, token, localize) {\n var dayOfWeek = date.getUTCDay();\n\n switch (token) {\n // Tue\n case 'E':\n case 'EE':\n case 'EEE':\n return localize.day(dayOfWeek, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // T\n\n case 'EEEEE':\n return localize.day(dayOfWeek, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n\n case 'EEEEEE':\n return localize.day(dayOfWeek, {\n width: 'short',\n context: 'formatting'\n });\n // Tuesday\n\n case 'EEEE':\n default:\n return localize.day(dayOfWeek, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Local day of week\n e: function (date, token, localize, options) {\n var dayOfWeek = date.getUTCDay();\n var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n\n switch (token) {\n // Numerical value (Nth day of week with current locale or weekStartsOn)\n case 'e':\n return String(localDayOfWeek);\n // Padded numerical value\n\n case 'ee':\n return addLeadingZeros(localDayOfWeek, 2);\n // 1st, 2nd, ..., 7th\n\n case 'eo':\n return localize.ordinalNumber(localDayOfWeek, {\n unit: 'day'\n });\n\n case 'eee':\n return localize.day(dayOfWeek, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // T\n\n case 'eeeee':\n return localize.day(dayOfWeek, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n\n case 'eeeeee':\n return localize.day(dayOfWeek, {\n width: 'short',\n context: 'formatting'\n });\n // Tuesday\n\n case 'eeee':\n default:\n return localize.day(dayOfWeek, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Stand-alone local day of week\n c: function (date, token, localize, options) {\n var dayOfWeek = date.getUTCDay();\n var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n\n switch (token) {\n // Numerical value (same as in `e`)\n case 'c':\n return String(localDayOfWeek);\n // Padded numerical value\n\n case 'cc':\n return addLeadingZeros(localDayOfWeek, token.length);\n // 1st, 2nd, ..., 7th\n\n case 'co':\n return localize.ordinalNumber(localDayOfWeek, {\n unit: 'day'\n });\n\n case 'ccc':\n return localize.day(dayOfWeek, {\n width: 'abbreviated',\n context: 'standalone'\n });\n // T\n\n case 'ccccc':\n return localize.day(dayOfWeek, {\n width: 'narrow',\n context: 'standalone'\n });\n // Tu\n\n case 'cccccc':\n return localize.day(dayOfWeek, {\n width: 'short',\n context: 'standalone'\n });\n // Tuesday\n\n case 'cccc':\n default:\n return localize.day(dayOfWeek, {\n width: 'wide',\n context: 'standalone'\n });\n }\n },\n // ISO day of week\n i: function (date, token, localize) {\n var dayOfWeek = date.getUTCDay();\n var isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek;\n\n switch (token) {\n // 2\n case 'i':\n return String(isoDayOfWeek);\n // 02\n\n case 'ii':\n return addLeadingZeros(isoDayOfWeek, token.length);\n // 2nd\n\n case 'io':\n return localize.ordinalNumber(isoDayOfWeek, {\n unit: 'day'\n });\n // Tue\n\n case 'iii':\n return localize.day(dayOfWeek, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // T\n\n case 'iiiii':\n return localize.day(dayOfWeek, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n\n case 'iiiiii':\n return localize.day(dayOfWeek, {\n width: 'short',\n context: 'formatting'\n });\n // Tuesday\n\n case 'iiii':\n default:\n return localize.day(dayOfWeek, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // AM or PM\n a: function (date, token, localize) {\n var hours = date.getUTCHours();\n var dayPeriodEnumValue = hours / 12 >= 1 ? 'pm' : 'am';\n\n switch (token) {\n case 'a':\n case 'aa':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n });\n\n case 'aaa':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n }).toLowerCase();\n\n case 'aaaaa':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'aaaa':\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // AM, PM, midnight, noon\n b: function (date, token, localize) {\n var hours = date.getUTCHours();\n var dayPeriodEnumValue;\n\n if (hours === 12) {\n dayPeriodEnumValue = dayPeriodEnum.noon;\n } else if (hours === 0) {\n dayPeriodEnumValue = dayPeriodEnum.midnight;\n } else {\n dayPeriodEnumValue = hours / 12 >= 1 ? 'pm' : 'am';\n }\n\n switch (token) {\n case 'b':\n case 'bb':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n });\n\n case 'bbb':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n }).toLowerCase();\n\n case 'bbbbb':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'bbbb':\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // in the morning, in the afternoon, in the evening, at night\n B: function (date, token, localize) {\n var hours = date.getUTCHours();\n var dayPeriodEnumValue;\n\n if (hours >= 17) {\n dayPeriodEnumValue = dayPeriodEnum.evening;\n } else if (hours >= 12) {\n dayPeriodEnumValue = dayPeriodEnum.afternoon;\n } else if (hours >= 4) {\n dayPeriodEnumValue = dayPeriodEnum.morning;\n } else {\n dayPeriodEnumValue = dayPeriodEnum.night;\n }\n\n switch (token) {\n case 'B':\n case 'BB':\n case 'BBB':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n });\n\n case 'BBBBB':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'BBBB':\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Hour [1-12]\n h: function (date, token, localize) {\n if (token === 'ho') {\n var hours = date.getUTCHours() % 12;\n if (hours === 0) hours = 12;\n return localize.ordinalNumber(hours, {\n unit: 'hour'\n });\n }\n\n return lightFormatters.h(date, token);\n },\n // Hour [0-23]\n H: function (date, token, localize) {\n if (token === 'Ho') {\n return localize.ordinalNumber(date.getUTCHours(), {\n unit: 'hour'\n });\n }\n\n return lightFormatters.H(date, token);\n },\n // Hour [0-11]\n K: function (date, token, localize) {\n var hours = date.getUTCHours() % 12;\n\n if (token === 'Ko') {\n return localize.ordinalNumber(hours, {\n unit: 'hour'\n });\n }\n\n return addLeadingZeros(hours, token.length);\n },\n // Hour [1-24]\n k: function (date, token, localize) {\n var hours = date.getUTCHours();\n if (hours === 0) hours = 24;\n\n if (token === 'ko') {\n return localize.ordinalNumber(hours, {\n unit: 'hour'\n });\n }\n\n return addLeadingZeros(hours, token.length);\n },\n // Minute\n m: function (date, token, localize) {\n if (token === 'mo') {\n return localize.ordinalNumber(date.getUTCMinutes(), {\n unit: 'minute'\n });\n }\n\n return lightFormatters.m(date, token);\n },\n // Second\n s: function (date, token, localize) {\n if (token === 'so') {\n return localize.ordinalNumber(date.getUTCSeconds(), {\n unit: 'second'\n });\n }\n\n return lightFormatters.s(date, token);\n },\n // Fraction of second\n S: function (date, token) {\n return lightFormatters.S(date, token);\n },\n // Timezone (ISO-8601. If offset is 0, output is always `'Z'`)\n X: function (date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timezoneOffset = originalDate.getTimezoneOffset();\n\n if (timezoneOffset === 0) {\n return 'Z';\n }\n\n switch (token) {\n // Hours and optional minutes\n case 'X':\n return formatTimezoneWithOptionalMinutes(timezoneOffset);\n // Hours, minutes and optional seconds without `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `XX`\n\n case 'XXXX':\n case 'XX':\n // Hours and minutes without `:` delimiter\n return formatTimezone(timezoneOffset);\n // Hours, minutes and optional seconds with `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `XXX`\n\n case 'XXXXX':\n case 'XXX': // Hours and minutes with `:` delimiter\n\n default:\n return formatTimezone(timezoneOffset, ':');\n }\n },\n // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent)\n x: function (date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timezoneOffset = originalDate.getTimezoneOffset();\n\n switch (token) {\n // Hours and optional minutes\n case 'x':\n return formatTimezoneWithOptionalMinutes(timezoneOffset);\n // Hours, minutes and optional seconds without `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `xx`\n\n case 'xxxx':\n case 'xx':\n // Hours and minutes without `:` delimiter\n return formatTimezone(timezoneOffset);\n // Hours, minutes and optional seconds with `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `xxx`\n\n case 'xxxxx':\n case 'xxx': // Hours and minutes with `:` delimiter\n\n default:\n return formatTimezone(timezoneOffset, ':');\n }\n },\n // Timezone (GMT)\n O: function (date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timezoneOffset = originalDate.getTimezoneOffset();\n\n switch (token) {\n // Short\n case 'O':\n case 'OO':\n case 'OOO':\n return 'GMT' + formatTimezoneShort(timezoneOffset, ':');\n // Long\n\n case 'OOOO':\n default:\n return 'GMT' + formatTimezone(timezoneOffset, ':');\n }\n },\n // Timezone (specific non-location)\n z: function (date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timezoneOffset = originalDate.getTimezoneOffset();\n\n switch (token) {\n // Short\n case 'z':\n case 'zz':\n case 'zzz':\n return 'GMT' + formatTimezoneShort(timezoneOffset, ':');\n // Long\n\n case 'zzzz':\n default:\n return 'GMT' + formatTimezone(timezoneOffset, ':');\n }\n },\n // Seconds timestamp\n t: function (date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timestamp = Math.floor(originalDate.getTime() / 1000);\n return addLeadingZeros(timestamp, token.length);\n },\n // Milliseconds timestamp\n T: function (date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timestamp = originalDate.getTime();\n return addLeadingZeros(timestamp, token.length);\n }\n};\n\nfunction formatTimezoneShort(offset, dirtyDelimiter) {\n var sign = offset > 0 ? '-' : '+';\n var absOffset = Math.abs(offset);\n var hours = Math.floor(absOffset / 60);\n var minutes = absOffset % 60;\n\n if (minutes === 0) {\n return sign + String(hours);\n }\n\n var delimiter = dirtyDelimiter || '';\n return sign + String(hours) + delimiter + addLeadingZeros(minutes, 2);\n}\n\nfunction formatTimezoneWithOptionalMinutes(offset, dirtyDelimiter) {\n if (offset % 60 === 0) {\n var sign = offset > 0 ? '-' : '+';\n return sign + addLeadingZeros(Math.abs(offset) / 60, 2);\n }\n\n return formatTimezone(offset, dirtyDelimiter);\n}\n\nfunction formatTimezone(offset, dirtyDelimiter) {\n var delimiter = dirtyDelimiter || '';\n var sign = offset > 0 ? '-' : '+';\n var absOffset = Math.abs(offset);\n var hours = addLeadingZeros(Math.floor(absOffset / 60), 2);\n var minutes = addLeadingZeros(absOffset % 60, 2);\n return sign + hours + delimiter + minutes;\n}\n\nexport default formatters;","import isValid from \"../isValid/index.js\";\nimport defaultLocale from \"../locale/en-US/index.js\";\nimport subMilliseconds from \"../subMilliseconds/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport formatters from \"../_lib/format/formatters/index.js\";\nimport longFormatters from \"../_lib/format/longFormatters/index.js\";\nimport getTimezoneOffsetInMilliseconds from \"../_lib/getTimezoneOffsetInMilliseconds/index.js\";\nimport { isProtectedDayOfYearToken, isProtectedWeekYearToken, throwProtectedError } from \"../_lib/protectedTokens/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\"; // This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n// (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n// except a single quote symbol, which ends the sequence.\n// Two quote characters do not end the sequence.\n// If there is no matching single quote\n// then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\n\nvar formattingTokensRegExp = /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g; // This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\n\nvar longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;\nvar escapedStringRegExp = /^'([^]*?)'?$/;\nvar doubleQuoteRegExp = /''/g;\nvar unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n/**\n * @name format\n * @category Common Helpers\n * @summary Format the date.\n *\n * @description\n * Return the formatted date string in the given format. The result may vary by locale.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://git.io/fxCyr\n *\n * The characters wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n * (see the last example)\n *\n * Format of the string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 7 below the table).\n *\n * Accepted patterns:\n * | Unit | Pattern | Result examples | Notes |\n * |---------------------------------|---------|-----------------------------------|-------|\n * | Era | G..GGG | AD, BC | |\n * | | GGGG | Anno Domini, Before Christ | 2 |\n * | | GGGGG | A, B | |\n * | Calendar year | y | 44, 1, 1900, 2017 | 5 |\n * | | yo | 44th, 1st, 0th, 17th | 5,7 |\n * | | yy | 44, 01, 00, 17 | 5 |\n * | | yyy | 044, 001, 1900, 2017 | 5 |\n * | | yyyy | 0044, 0001, 1900, 2017 | 5 |\n * | | yyyyy | ... | 3,5 |\n * | Local week-numbering year | Y | 44, 1, 1900, 2017 | 5 |\n * | | Yo | 44th, 1st, 1900th, 2017th | 5,7 |\n * | | YY | 44, 01, 00, 17 | 5,8 |\n * | | YYY | 044, 001, 1900, 2017 | 5 |\n * | | YYYY | 0044, 0001, 1900, 2017 | 5,8 |\n * | | YYYYY | ... | 3,5 |\n * | ISO week-numbering year | R | -43, 0, 1, 1900, 2017 | 5,7 |\n * | | RR | -43, 00, 01, 1900, 2017 | 5,7 |\n * | | RRR | -043, 000, 001, 1900, 2017 | 5,7 |\n * | | RRRR | -0043, 0000, 0001, 1900, 2017 | 5,7 |\n * | | RRRRR | ... | 3,5,7 |\n * | Extended year | u | -43, 0, 1, 1900, 2017 | 5 |\n * | | uu | -43, 01, 1900, 2017 | 5 |\n * | | uuu | -043, 001, 1900, 2017 | 5 |\n * | | uuuu | -0043, 0001, 1900, 2017 | 5 |\n * | | uuuuu | ... | 3,5 |\n * | Quarter (formatting) | Q | 1, 2, 3, 4 | |\n * | | Qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | QQ | 01, 02, 03, 04 | |\n * | | QQQ | Q1, Q2, Q3, Q4 | |\n * | | QQQQ | 1st quarter, 2nd quarter, ... | 2 |\n * | | QQQQQ | 1, 2, 3, 4 | 4 |\n * | Quarter (stand-alone) | q | 1, 2, 3, 4 | |\n * | | qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | qq | 01, 02, 03, 04 | |\n * | | qqq | Q1, Q2, Q3, Q4 | |\n * | | qqqq | 1st quarter, 2nd quarter, ... | 2 |\n * | | qqqqq | 1, 2, 3, 4 | 4 |\n * | Month (formatting) | M | 1, 2, ..., 12 | |\n * | | Mo | 1st, 2nd, ..., 12th | 7 |\n * | | MM | 01, 02, ..., 12 | |\n * | | MMM | Jan, Feb, ..., Dec | |\n * | | MMMM | January, February, ..., December | 2 |\n * | | MMMMM | J, F, ..., D | |\n * | Month (stand-alone) | L | 1, 2, ..., 12 | |\n * | | Lo | 1st, 2nd, ..., 12th | 7 |\n * | | LL | 01, 02, ..., 12 | |\n * | | LLL | Jan, Feb, ..., Dec | |\n * | | LLLL | January, February, ..., December | 2 |\n * | | LLLLL | J, F, ..., D | |\n * | Local week of year | w | 1, 2, ..., 53 | |\n * | | wo | 1st, 2nd, ..., 53th | 7 |\n * | | ww | 01, 02, ..., 53 | |\n * | ISO week of year | I | 1, 2, ..., 53 | 7 |\n * | | Io | 1st, 2nd, ..., 53th | 7 |\n * | | II | 01, 02, ..., 53 | 7 |\n * | Day of month | d | 1, 2, ..., 31 | |\n * | | do | 1st, 2nd, ..., 31st | 7 |\n * | | dd | 01, 02, ..., 31 | |\n * | Day of year | D | 1, 2, ..., 365, 366 | 9 |\n * | | Do | 1st, 2nd, ..., 365th, 366th | 7 |\n * | | DD | 01, 02, ..., 365, 366 | 9 |\n * | | DDD | 001, 002, ..., 365, 366 | |\n * | | DDDD | ... | 3 |\n * | Day of week (formatting) | E..EEE | Mon, Tue, Wed, ..., Sun | |\n * | | EEEE | Monday, Tuesday, ..., Sunday | 2 |\n * | | EEEEE | M, T, W, T, F, S, S | |\n * | | EEEEEE | Mo, Tu, We, Th, Fr, Su, Sa | |\n * | ISO day of week (formatting) | i | 1, 2, 3, ..., 7 | 7 |\n * | | io | 1st, 2nd, ..., 7th | 7 |\n * | | ii | 01, 02, ..., 07 | 7 |\n * | | iii | Mon, Tue, Wed, ..., Sun | 7 |\n * | | iiii | Monday, Tuesday, ..., Sunday | 2,7 |\n * | | iiiii | M, T, W, T, F, S, S | 7 |\n * | | iiiiii | Mo, Tu, We, Th, Fr, Su, Sa | 7 |\n * | Local day of week (formatting) | e | 2, 3, 4, ..., 1 | |\n * | | eo | 2nd, 3rd, ..., 1st | 7 |\n * | | ee | 02, 03, ..., 01 | |\n * | | eee | Mon, Tue, Wed, ..., Sun | |\n * | | eeee | Monday, Tuesday, ..., Sunday | 2 |\n * | | eeeee | M, T, W, T, F, S, S | |\n * | | eeeeee | Mo, Tu, We, Th, Fr, Su, Sa | |\n * | Local day of week (stand-alone) | c | 2, 3, 4, ..., 1 | |\n * | | co | 2nd, 3rd, ..., 1st | 7 |\n * | | cc | 02, 03, ..., 01 | |\n * | | ccc | Mon, Tue, Wed, ..., Sun | |\n * | | cccc | Monday, Tuesday, ..., Sunday | 2 |\n * | | ccccc | M, T, W, T, F, S, S | |\n * | | cccccc | Mo, Tu, We, Th, Fr, Su, Sa | |\n * | AM, PM | a..aa | AM, PM | |\n * | | aaa | am, pm | |\n * | | aaaa | a.m., p.m. | 2 |\n * | | aaaaa | a, p | |\n * | AM, PM, noon, midnight | b..bb | AM, PM, noon, midnight | |\n * | | bbb | am, pm, noon, midnight | |\n * | | bbbb | a.m., p.m., noon, midnight | 2 |\n * | | bbbbb | a, p, n, mi | |\n * | Flexible day period | B..BBB | at night, in the morning, ... | |\n * | | BBBB | at night, in the morning, ... | 2 |\n * | | BBBBB | at night, in the morning, ... | |\n * | Hour [1-12] | h | 1, 2, ..., 11, 12 | |\n * | | ho | 1st, 2nd, ..., 11th, 12th | 7 |\n * | | hh | 01, 02, ..., 11, 12 | |\n * | Hour [0-23] | H | 0, 1, 2, ..., 23 | |\n * | | Ho | 0th, 1st, 2nd, ..., 23rd | 7 |\n * | | HH | 00, 01, 02, ..., 23 | |\n * | Hour [0-11] | K | 1, 2, ..., 11, 0 | |\n * | | Ko | 1st, 2nd, ..., 11th, 0th | 7 |\n * | | KK | 01, 02, ..., 11, 00 | |\n * | Hour [1-24] | k | 24, 1, 2, ..., 23 | |\n * | | ko | 24th, 1st, 2nd, ..., 23rd | 7 |\n * | | kk | 24, 01, 02, ..., 23 | |\n * | Minute | m | 0, 1, ..., 59 | |\n * | | mo | 0th, 1st, ..., 59th | 7 |\n * | | mm | 00, 01, ..., 59 | |\n * | Second | s | 0, 1, ..., 59 | |\n * | | so | 0th, 1st, ..., 59th | 7 |\n * | | ss | 00, 01, ..., 59 | |\n * | Fraction of second | S | 0, 1, ..., 9 | |\n * | | SS | 00, 01, ..., 99 | |\n * | | SSS | 000, 001, ..., 999 | |\n * | | SSSS | ... | 3 |\n * | Timezone (ISO-8601 w/ Z) | X | -08, +0530, Z | |\n * | | XX | -0800, +0530, Z | |\n * | | XXX | -08:00, +05:30, Z | |\n * | | XXXX | -0800, +0530, Z, +123456 | 2 |\n * | | XXXXX | -08:00, +05:30, Z, +12:34:56 | |\n * | Timezone (ISO-8601 w/o Z) | x | -08, +0530, +00 | |\n * | | xx | -0800, +0530, +0000 | |\n * | | xxx | -08:00, +05:30, +00:00 | 2 |\n * | | xxxx | -0800, +0530, +0000, +123456 | |\n * | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 | |\n * | Timezone (GMT) | O...OOO | GMT-8, GMT+5:30, GMT+0 | |\n * | | OOOO | GMT-08:00, GMT+05:30, GMT+00:00 | 2 |\n * | Timezone (specific non-locat.) | z...zzz | GMT-8, GMT+5:30, GMT+0 | 6 |\n * | | zzzz | GMT-08:00, GMT+05:30, GMT+00:00 | 2,6 |\n * | Seconds timestamp | t | 512969520 | 7 |\n * | | tt | ... | 3,7 |\n * | Milliseconds timestamp | T | 512969520900 | 7 |\n * | | TT | ... | 3,7 |\n * | Long localized date | P | 04/29/1453 | 7 |\n * | | PP | Apr 29, 1453 | 7 |\n * | | PPP | April 29th, 1453 | 7 |\n * | | PPPP | Friday, April 29th, 1453 | 2,7 |\n * | Long localized time | p | 12:00 AM | 7 |\n * | | pp | 12:00:00 AM | 7 |\n * | | ppp | 12:00:00 AM GMT+2 | 7 |\n * | | pppp | 12:00:00 AM GMT+02:00 | 2,7 |\n * | Combination of date and time | Pp | 04/29/1453, 12:00 AM | 7 |\n * | | PPpp | Apr 29, 1453, 12:00:00 AM | 7 |\n * | | PPPppp | April 29th, 1453 at ... | 7 |\n * | | PPPPpppp| Friday, April 29th, 1453 at ... | 2,7 |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n * are the same as \"stand-alone\" units, but are different in some languages.\n * \"Formatting\" units are declined according to the rules of the language\n * in the context of a date. \"Stand-alone\" units are always nominative singular:\n *\n * `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n * `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n * the single quote characters (see below).\n * If the sequence is longer than listed in table (e.g. `EEEEEEEEEEE`)\n * the output will be the same as default pattern for this unit, usually\n * the longest one (in case of ISO weekdays, `EEEE`). Default patterns for units\n * are marked with \"2\" in the last column of the table.\n *\n * `format(new Date(2017, 10, 6), 'MMM') //=> 'Nov'`\n *\n * `format(new Date(2017, 10, 6), 'MMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMM') //=> 'N'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMMM') //=> 'November'`\n *\n * 3. Some patterns could be unlimited length (such as `yyyyyyyy`).\n * The output will be padded with zeros to match the length of the pattern.\n *\n * `format(new Date(2017, 10, 6), 'yyyyyyyy') //=> '00002017'`\n *\n * 4. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n * These tokens represent the shortest form of the quarter.\n *\n * 5. The main difference between `y` and `u` patterns are B.C. years:\n *\n * | Year | `y` | `u` |\n * |------|-----|-----|\n * | AC 1 | 1 | 1 |\n * | BC 1 | 1 | 0 |\n * | BC 2 | 2 | -1 |\n *\n * Also `yy` always returns the last two digits of a year,\n * while `uu` pads single digit years to 2 characters and returns other years unchanged:\n *\n * | Year | `yy` | `uu` |\n * |------|------|------|\n * | 1 | 01 | 01 |\n * | 14 | 14 | 14 |\n * | 376 | 76 | 376 |\n * | 1453 | 53 | 1453 |\n *\n * The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n * except local week-numbering years are dependent on `options.weekStartsOn`\n * and `options.firstWeekContainsDate` (compare [getISOWeekYear]{@link https://date-fns.org/docs/getISOWeekYear}\n * and [getWeekYear]{@link https://date-fns.org/docs/getWeekYear}).\n *\n * 6. Specific non-location timezones are currently unavailable in `date-fns`,\n * so right now these tokens fall back to GMT timezones.\n *\n * 7. These patterns are not in the Unicode Technical Standard #35:\n * - `i`: ISO day of week\n * - `I`: ISO week of year\n * - `R`: ISO week-numbering year\n * - `t`: seconds timestamp\n * - `T`: milliseconds timestamp\n * - `o`: ordinal number modifier\n * - `P`: long localized date\n * - `p`: long localized time\n *\n * 8. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.\n * You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://git.io/fxCyr\n *\n * 9. `D` and `DD` tokens represent days of the year but they are ofthen confused with days of the month.\n * You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://git.io/fxCyr\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The second argument is now required for the sake of explicitness.\n *\n * ```javascript\n * // Before v2.0.0\n * format(new Date(2016, 0, 1))\n *\n * // v2.0.0 onward\n * format(new Date(2016, 0, 1), \"yyyy-MM-dd'T'HH:mm:ss.SSSxxx\")\n * ```\n *\n * - New format string API for `format` function\n * which is based on [Unicode Technical Standard #35](https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table).\n * See [this post](https://blog.date-fns.org/post/unicode-tokens-in-date-fns-v2-sreatyki91jg) for more details.\n *\n * - Characters are now escaped using single quote symbols (`'`) instead of square brackets.\n *\n * @param {Date|Number} date - the original date\n * @param {String} format - the string of tokens\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {Number} [options.firstWeekContainsDate=1] - the day of January, which is\n * @param {Boolean} [options.useAdditionalWeekYearTokens=false] - if true, allows usage of the week-numbering year tokens `YY` and `YYYY`;\n * see: https://git.io/fxCyr\n * @param {Boolean} [options.useAdditionalDayOfYearTokens=false] - if true, allows usage of the day of year tokens `D` and `DD`;\n * see: https://git.io/fxCyr\n * @returns {String} the formatted date string\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `date` must not be Invalid Date\n * @throws {RangeError} `options.locale` must contain `localize` property\n * @throws {RangeError} `options.locale` must contain `formatLong` property\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n * @throws {RangeError} use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://git.io/fxCyr\n * @throws {RangeError} use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://git.io/fxCyr\n * @throws {RangeError} use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://git.io/fxCyr\n * @throws {RangeError} use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://git.io/fxCyr\n * @throws {RangeError} format string contains an unescaped latin alphabet character\n *\n * @example\n * // Represent 11 February 2014 in middle-endian format:\n * var result = format(new Date(2014, 1, 11), 'MM/dd/yyyy')\n * //=> '02/11/2014'\n *\n * @example\n * // Represent 2 July 2014 in Esperanto:\n * import { eoLocale } from 'date-fns/locale/eo'\n * var result = format(new Date(2014, 6, 2), \"do 'de' MMMM yyyy\", {\n * locale: eoLocale\n * })\n * //=> '2-a de julio 2014'\n *\n * @example\n * // Escape string by single quote characters:\n * var result = format(new Date(2014, 6, 2, 15), \"h 'o''clock'\")\n * //=> \"3 o'clock\"\n */\n\nexport default function format(dirtyDate, dirtyFormatStr, dirtyOptions) {\n requiredArgs(2, arguments);\n var formatStr = String(dirtyFormatStr);\n var options = dirtyOptions || {};\n var locale = options.locale || defaultLocale;\n var localeFirstWeekContainsDate = locale.options && locale.options.firstWeekContainsDate;\n var defaultFirstWeekContainsDate = localeFirstWeekContainsDate == null ? 1 : toInteger(localeFirstWeekContainsDate);\n var firstWeekContainsDate = options.firstWeekContainsDate == null ? defaultFirstWeekContainsDate : toInteger(options.firstWeekContainsDate); // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n\n if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively');\n }\n\n var localeWeekStartsOn = locale.options && locale.options.weekStartsOn;\n var defaultWeekStartsOn = localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn);\n var weekStartsOn = options.weekStartsOn == null ? defaultWeekStartsOn : toInteger(options.weekStartsOn); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n }\n\n if (!locale.localize) {\n throw new RangeError('locale must contain localize property');\n }\n\n if (!locale.formatLong) {\n throw new RangeError('locale must contain formatLong property');\n }\n\n var originalDate = toDate(dirtyDate);\n\n if (!isValid(originalDate)) {\n throw new RangeError('Invalid time value');\n } // Convert the date in system timezone to the same date in UTC+00:00 timezone.\n // This ensures that when UTC functions will be implemented, locales will be compatible with them.\n // See an issue about UTC functions: https://github.com/date-fns/date-fns/issues/376\n\n\n var timezoneOffset = getTimezoneOffsetInMilliseconds(originalDate);\n var utcDate = subMilliseconds(originalDate, timezoneOffset);\n var formatterOptions = {\n firstWeekContainsDate: firstWeekContainsDate,\n weekStartsOn: weekStartsOn,\n locale: locale,\n _originalDate: originalDate\n };\n var result = formatStr.match(longFormattingTokensRegExp).map(function (substring) {\n var firstCharacter = substring[0];\n\n if (firstCharacter === 'p' || firstCharacter === 'P') {\n var longFormatter = longFormatters[firstCharacter];\n return longFormatter(substring, locale.formatLong, formatterOptions);\n }\n\n return substring;\n }).join('').match(formattingTokensRegExp).map(function (substring) {\n // Replace two single quote characters with one single quote character\n if (substring === \"''\") {\n return \"'\";\n }\n\n var firstCharacter = substring[0];\n\n if (firstCharacter === \"'\") {\n return cleanEscapedString(substring);\n }\n\n var formatter = formatters[firstCharacter];\n\n if (formatter) {\n if (!options.useAdditionalWeekYearTokens && isProtectedWeekYearToken(substring)) {\n throwProtectedError(substring, dirtyFormatStr, dirtyDate);\n }\n\n if (!options.useAdditionalDayOfYearTokens && isProtectedDayOfYearToken(substring)) {\n throwProtectedError(substring, dirtyFormatStr, dirtyDate);\n }\n\n return formatter(utcDate, substring, locale.localize, formatterOptions);\n }\n\n if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n throw new RangeError('Format string contains an unescaped latin alphabet character `' + firstCharacter + '`');\n }\n\n return substring;\n }).join('');\n return result;\n}\n\nfunction cleanEscapedString(input) {\n return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp, \"'\");\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport addMilliseconds from \"../addMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nvar MILLISECONDS_IN_HOUR = 3600000;\n/**\n * @name addHours\n * @category Hour Helpers\n * @summary Add the specified number of hours to the given date.\n *\n * @description\n * Add the specified number of hours to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of hours to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the hours added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 2 hours to 10 July 2014 23:00:00:\n * const result = addHours(new Date(2014, 6, 10, 23, 0), 2)\n * //=> Fri Jul 11 2014 01:00:00\n */\n\nexport default function addHours(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var amount = toInteger(dirtyAmount);\n return addMilliseconds(dirtyDate, amount * MILLISECONDS_IN_HOUR);\n}","import differenceInMilliseconds from \"../differenceInMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name differenceInSeconds\n * @category Second Helpers\n * @summary Get the number of seconds between the given dates.\n *\n * @description\n * Get the number of seconds between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of seconds\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many seconds are between\n * // 2 July 2014 12:30:07.999 and 2 July 2014 12:30:20.000?\n * const result = differenceInSeconds(\n * new Date(2014, 6, 2, 12, 30, 20, 0),\n * new Date(2014, 6, 2, 12, 30, 7, 999)\n * )\n * //=> 12\n */\n\nexport default function differenceInSeconds(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var diff = differenceInMilliseconds(dirtyDateLeft, dirtyDateRight) / 1000;\n return diff > 0 ? Math.floor(diff) : Math.ceil(diff);\n}","import cloneObject from 'date-fns/esm/_lib/cloneObject'\nimport format from 'date-fns/esm/format'\nimport toDate from '../toDate'\n\n/**\n * @name zonedTimeToUtc\n * @category Time Zone Helpers\n * @summary Get the UTC date/time from a date representing local time in a given time zone\n *\n * @description\n * Returns a date instance with the UTC time of the provided date of which the values\n * represented the local time in the time zone specified. In other words, if the input\n * date represented local time in time time zone, the timestamp of the output date will\n * give the equivalent UTC of that local time regardless of the current system time zone.\n *\n * @param {Date|String|Number} date - the date with values representing the local time\n * @param {String} timeZone - the time zone of this local time, can be an offset or IANA time zone\n * @param {OptionsWithTZ} [options] - the object with options. See [Options]{@link https://date-fns.org/docs/Options}\n * @param {0|1|2} [options.additionalDigits=2] - passed to `toDate`. See [toDate]{@link https://date-fns.org/docs/toDate}\n * @returns {Date} the new date with the equivalent time in the time zone\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.additionalDigits` must be 0, 1 or 2\n *\n * @example\n * // In June 10am in Los Angeles is 5pm UTC\n * const result = zonedTimeToUtc(new Date(2014, 5, 25, 10, 0, 0), 'America/Los_Angeles')\n * //=> 2014-06-25T17:00:00.000Z\n */\nexport default function zonedTimeToUtc(date, timeZone, options) {\n if (date instanceof Date) {\n date = format(date, \"yyyy-MM-dd'T'HH:mm:ss.SSS\")\n }\n var extendedOptions = cloneObject(options)\n extendedOptions.timeZone = timeZone\n return toDate(date, extendedOptions)\n}\n","import assign from \"../assign/index.js\";\nexport default function cloneObject(dirtyObject) {\n return assign({}, dirtyObject);\n}"],"sourceRoot":""}