{"version":3,"sources":["webpack://client/./node_modules/resolve-pathname/index.js","webpack://client/./node_modules/value-equal/index.js","webpack://client/./node_modules/tiny-invariant/dist/tiny-invariant.esm.js","webpack://client/./node_modules/history/esm/history.js","webpack://client/./node_modules/@yl/react-router/dist/RouteHistory.js","webpack://client/./node_modules/@yl/react-router/dist/RouteCollection.js","webpack://client/./node_modules/@yl/react-router/dist/Router.js","webpack://client/./node_modules/@yl/react-router/dist/RouteMatcher.js","webpack://client/./node_modules/axios/index.js","webpack://client/./node_modules/axios/lib/adapters/xhr.js","webpack://client/./node_modules/axios/lib/axios.js","webpack://client/./node_modules/axios/lib/cancel/Cancel.js","webpack://client/./node_modules/axios/lib/cancel/CancelToken.js","webpack://client/./node_modules/axios/lib/cancel/isCancel.js","webpack://client/./node_modules/axios/lib/core/Axios.js","webpack://client/./node_modules/axios/lib/core/InterceptorManager.js","webpack://client/./node_modules/axios/lib/core/buildFullPath.js","webpack://client/./node_modules/axios/lib/core/createError.js","webpack://client/./node_modules/axios/lib/core/dispatchRequest.js","webpack://client/./node_modules/axios/lib/core/enhanceError.js","webpack://client/./node_modules/axios/lib/core/mergeConfig.js","webpack://client/./node_modules/axios/lib/core/settle.js","webpack://client/./node_modules/axios/lib/core/transformData.js","webpack://client/./node_modules/axios/lib/defaults.js","webpack://client/./node_modules/axios/lib/env/data.js","webpack://client/./node_modules/axios/lib/helpers/bind.js","webpack://client/./node_modules/axios/lib/helpers/buildURL.js","webpack://client/./node_modules/axios/lib/helpers/combineURLs.js","webpack://client/./node_modules/axios/lib/helpers/cookies.js","webpack://client/./node_modules/axios/lib/helpers/isAbsoluteURL.js","webpack://client/./node_modules/axios/lib/helpers/isAxiosError.js","webpack://client/./node_modules/axios/lib/helpers/isURLSameOrigin.js","webpack://client/./node_modules/axios/lib/helpers/normalizeHeaderName.js","webpack://client/./node_modules/axios/lib/helpers/parseHeaders.js","webpack://client/./node_modules/axios/lib/helpers/spread.js","webpack://client/./node_modules/axios/lib/helpers/validator.js","webpack://client/./node_modules/axios/lib/utils.js","webpack://client/./node_modules/browser-cookies/src/browser-cookies.js","webpack://client/./node_modules/charenc/charenc.js","webpack://client/./node_modules/crypt/crypt.js","webpack://client/./node_modules/date-fns/_lib/getTimezoneOffsetInMilliseconds/index.js","webpack://client/./node_modules/date-fns/add_days/index.js","webpack://client/./node_modules/date-fns/add_hours/index.js","webpack://client/./node_modules/date-fns/add_iso_years/index.js","webpack://client/./node_modules/date-fns/add_milliseconds/index.js","webpack://client/./node_modules/date-fns/add_minutes/index.js","webpack://client/./node_modules/date-fns/add_months/index.js","webpack://client/./node_modules/date-fns/add_quarters/index.js","webpack://client/./node_modules/date-fns/add_seconds/index.js","webpack://client/./node_modules/date-fns/add_weeks/index.js","webpack://client/./node_modules/date-fns/add_years/index.js","webpack://client/./node_modules/date-fns/are_ranges_overlapping/index.js","webpack://client/./node_modules/date-fns/closest_index_to/index.js","webpack://client/./node_modules/date-fns/closest_to/index.js","webpack://client/./node_modules/date-fns/compare_asc/index.js","webpack://client/./node_modules/date-fns/compare_desc/index.js","webpack://client/./node_modules/date-fns/difference_in_calendar_days/index.js","webpack://client/./node_modules/date-fns/difference_in_calendar_iso_weeks/index.js","webpack://client/./node_modules/date-fns/difference_in_calendar_iso_years/index.js","webpack://client/./node_modules/date-fns/difference_in_calendar_months/index.js","webpack://client/./node_modules/date-fns/difference_in_calendar_quarters/index.js","webpack://client/./node_modules/date-fns/difference_in_calendar_weeks/index.js","webpack://client/./node_modules/date-fns/difference_in_calendar_years/index.js","webpack://client/./node_modules/date-fns/difference_in_days/index.js","webpack://client/./node_modules/date-fns/difference_in_hours/index.js","webpack://client/./node_modules/date-fns/difference_in_iso_years/index.js","webpack://client/./node_modules/date-fns/difference_in_milliseconds/index.js","webpack://client/./node_modules/date-fns/difference_in_minutes/index.js","webpack://client/./node_modules/date-fns/difference_in_months/index.js","webpack://client/./node_modules/date-fns/difference_in_quarters/index.js","webpack://client/./node_modules/date-fns/difference_in_seconds/index.js","webpack://client/./node_modules/date-fns/difference_in_weeks/index.js","webpack://client/./node_modules/date-fns/difference_in_years/index.js","webpack://client/./node_modules/date-fns/distance_in_words/index.js","webpack://client/./node_modules/date-fns/distance_in_words_strict/index.js","webpack://client/./node_modules/date-fns/distance_in_words_to_now/index.js","webpack://client/./node_modules/date-fns/each_day/index.js","webpack://client/./node_modules/date-fns/end_of_day/index.js","webpack://client/./node_modules/date-fns/end_of_hour/index.js","webpack://client/./node_modules/date-fns/end_of_iso_week/index.js","webpack://client/./node_modules/date-fns/end_of_iso_year/index.js","webpack://client/./node_modules/date-fns/end_of_minute/index.js","webpack://client/./node_modules/date-fns/end_of_month/index.js","webpack://client/./node_modules/date-fns/end_of_quarter/index.js","webpack://client/./node_modules/date-fns/end_of_second/index.js","webpack://client/./node_modules/date-fns/end_of_today/index.js","webpack://client/./node_modules/date-fns/end_of_tomorrow/index.js","webpack://client/./node_modules/date-fns/end_of_week/index.js","webpack://client/./node_modules/date-fns/end_of_year/index.js","webpack://client/./node_modules/date-fns/end_of_yesterday/index.js","webpack://client/./node_modules/date-fns/format/index.js","webpack://client/./node_modules/date-fns/get_date/index.js","webpack://client/./node_modules/date-fns/get_day/index.js","webpack://client/./node_modules/date-fns/get_day_of_year/index.js","webpack://client/./node_modules/date-fns/get_days_in_month/index.js","webpack://client/./node_modules/date-fns/get_days_in_year/index.js","webpack://client/./node_modules/date-fns/get_hours/index.js","webpack://client/./node_modules/date-fns/get_iso_day/index.js","webpack://client/./node_modules/date-fns/get_iso_week/index.js","webpack://client/./node_modules/date-fns/get_iso_weeks_in_year/index.js","webpack://client/./node_modules/date-fns/get_iso_year/index.js","webpack://client/./node_modules/date-fns/get_milliseconds/index.js","webpack://client/./node_modules/date-fns/get_minutes/index.js","webpack://client/./node_modules/date-fns/get_month/index.js","webpack://client/./node_modules/date-fns/get_overlapping_days_in_ranges/index.js","webpack://client/./node_modules/date-fns/get_quarter/index.js","webpack://client/./node_modules/date-fns/get_seconds/index.js","webpack://client/./node_modules/date-fns/get_time/index.js","webpack://client/./node_modules/date-fns/get_year/index.js","webpack://client/./node_modules/date-fns/index.js","webpack://client/./node_modules/date-fns/is_after/index.js","webpack://client/./node_modules/date-fns/is_before/index.js","webpack://client/./node_modules/date-fns/is_date/index.js","webpack://client/./node_modules/date-fns/is_equal/index.js","webpack://client/./node_modules/date-fns/is_first_day_of_month/index.js","webpack://client/./node_modules/date-fns/is_friday/index.js","webpack://client/./node_modules/date-fns/is_future/index.js","webpack://client/./node_modules/date-fns/is_last_day_of_month/index.js","webpack://client/./node_modules/date-fns/is_leap_year/index.js","webpack://client/./node_modules/date-fns/is_monday/index.js","webpack://client/./node_modules/date-fns/is_past/index.js","webpack://client/./node_modules/date-fns/is_same_day/index.js","webpack://client/./node_modules/date-fns/is_same_hour/index.js","webpack://client/./node_modules/date-fns/is_same_iso_week/index.js","webpack://client/./node_modules/date-fns/is_same_iso_year/index.js","webpack://client/./node_modules/date-fns/is_same_minute/index.js","webpack://client/./node_modules/date-fns/is_same_month/index.js","webpack://client/./node_modules/date-fns/is_same_quarter/index.js","webpack://client/./node_modules/date-fns/is_same_second/index.js","webpack://client/./node_modules/date-fns/is_same_week/index.js","webpack://client/./node_modules/date-fns/is_same_year/index.js","webpack://client/./node_modules/date-fns/is_saturday/index.js","webpack://client/./node_modules/date-fns/is_sunday/index.js","webpack://client/./node_modules/date-fns/is_this_hour/index.js","webpack://client/./node_modules/date-fns/is_this_iso_week/index.js","webpack://client/./node_modules/date-fns/is_this_iso_year/index.js","webpack://client/./node_modules/date-fns/is_this_minute/index.js","webpack://client/./node_modules/date-fns/is_this_month/index.js","webpack://client/./node_modules/date-fns/is_this_quarter/index.js","webpack://client/./node_modules/date-fns/is_this_second/index.js","webpack://client/./node_modules/date-fns/is_this_week/index.js","webpack://client/./node_modules/date-fns/is_this_year/index.js","webpack://client/./node_modules/date-fns/is_thursday/index.js","webpack://client/./node_modules/date-fns/is_today/index.js","webpack://client/./node_modules/date-fns/is_tomorrow/index.js","webpack://client/./node_modules/date-fns/is_tuesday/index.js","webpack://client/./node_modules/date-fns/is_valid/index.js","webpack://client/./node_modules/date-fns/is_wednesday/index.js","webpack://client/./node_modules/date-fns/is_weekend/index.js","webpack://client/./node_modules/date-fns/is_within_range/index.js","webpack://client/./node_modules/date-fns/is_yesterday/index.js","webpack://client/./node_modules/date-fns/last_day_of_iso_week/index.js","webpack://client/./node_modules/date-fns/last_day_of_iso_year/index.js","webpack://client/./node_modules/date-fns/last_day_of_month/index.js","webpack://client/./node_modules/date-fns/last_day_of_quarter/index.js","webpack://client/./node_modules/date-fns/last_day_of_week/index.js","webpack://client/./node_modules/date-fns/last_day_of_year/index.js","webpack://client/./node_modules/date-fns/locale/_lib/build_formatting_tokens_reg_exp/index.js","webpack://client/./node_modules/date-fns/locale/en/build_distance_in_words_locale/index.js","webpack://client/./node_modules/date-fns/locale/en/build_format_locale/index.js","webpack://client/./node_modules/date-fns/locale/en/index.js","webpack://client/./node_modules/date-fns/max/index.js","webpack://client/./node_modules/date-fns/min/index.js","webpack://client/./node_modules/date-fns/parse/index.js","webpack://client/./node_modules/date-fns/set_date/index.js","webpack://client/./node_modules/date-fns/set_day/index.js","webpack://client/./node_modules/date-fns/set_day_of_year/index.js","webpack://client/./node_modules/date-fns/set_hours/index.js","webpack://client/./node_modules/date-fns/set_iso_day/index.js","webpack://client/./node_modules/date-fns/set_iso_week/index.js","webpack://client/./node_modules/date-fns/set_iso_year/index.js","webpack://client/./node_modules/date-fns/set_milliseconds/index.js","webpack://client/./node_modules/date-fns/set_minutes/index.js","webpack://client/./node_modules/date-fns/set_month/index.js","webpack://client/./node_modules/date-fns/set_quarter/index.js","webpack://client/./node_modules/date-fns/set_seconds/index.js","webpack://client/./node_modules/date-fns/set_year/index.js","webpack://client/./node_modules/date-fns/start_of_day/index.js","webpack://client/./node_modules/date-fns/start_of_hour/index.js","webpack://client/./node_modules/date-fns/start_of_iso_week/index.js","webpack://client/./node_modules/date-fns/start_of_iso_year/index.js","webpack://client/./node_modules/date-fns/start_of_minute/index.js","webpack://client/./node_modules/date-fns/start_of_month/index.js","webpack://client/./node_modules/date-fns/start_of_quarter/index.js","webpack://client/./node_modules/date-fns/start_of_second/index.js","webpack://client/./node_modules/date-fns/start_of_today/index.js","webpack://client/./node_modules/date-fns/start_of_tomorrow/index.js","webpack://client/./node_modules/date-fns/start_of_week/index.js","webpack://client/./node_modules/date-fns/start_of_year/index.js","webpack://client/./node_modules/date-fns/start_of_yesterday/index.js","webpack://client/./node_modules/date-fns/sub_days/index.js","webpack://client/./node_modules/date-fns/sub_hours/index.js","webpack://client/./node_modules/date-fns/sub_iso_years/index.js","webpack://client/./node_modules/date-fns/sub_milliseconds/index.js","webpack://client/./node_modules/date-fns/sub_minutes/index.js","webpack://client/./node_modules/date-fns/sub_months/index.js","webpack://client/./node_modules/date-fns/sub_quarters/index.js","webpack://client/./node_modules/date-fns/sub_seconds/index.js","webpack://client/./node_modules/date-fns/sub_weeks/index.js","webpack://client/./node_modules/date-fns/sub_years/index.js","webpack://client/./node_modules/is-buffer/index.js","webpack://client/./node_modules/js-cookie/src/js.cookie.js","webpack://client/./node_modules/md5/md5.js","webpack://client/./node_modules/mobx-state-tree/dist/mobx-state-tree.module.js","webpack://client/./node_modules/mobx/dist/mobx.esm.js","webpack://client/./node_modules/object-assign/index.js","webpack://client/./node_modules/path-to-regexp/index.js","webpack://client/./node_modules/process/browser.js","webpack://client/./node_modules/@yl/sso-single-logout/dist/esm/domain-cookie-management.js","webpack://client/./src/app/authentication/VoAuthentication.ts","webpack://client/./src/app/cookie-warning/CookieWarningModalStore.ts","webpack://client/./src/app/customer-enrollment-status/EnrollmentStatus.ts","webpack://client/./src/app/customer-enrollment-status/EnrollmentStatusManager.ts","webpack://client/./src/app/customer-enrollment-status/LinkParams.ts","webpack://client/./src/app/root/EnrollmentRedirect.ts","webpack://client/./src/app/customer-enrollment-status/StoreSpecificConfig.ts","webpack://client/./src/bootstrap.ts","webpack://client/./src/app/routing/disableBackForwardCache.ts","webpack://client/./src/external/shared/api/EnrollmentClient.generated.ts","webpack://client/./src/external/shared/api/ApiClientBase.ts","webpack://client/./src/external/shared/error-handling/ErrorModalStore.ts","webpack://client/./node_modules/i18next-browser-languagedetector/dist/esm/i18nextBrowserLanguageDetector.js","webpack://client/./src/external/shared/localization/languageDetector.ts","webpack://client/./src/external/shared/utils/configureMobx.ts","webpack://client/./src/infrastructure/analytics/gtm-support.ts","webpack://client/./src/infrastructure/http/EnrollmentResource.ts","webpack://client/./src/infrastructure/http/interceptors.ts","webpack://client/./src/infrastructure/redirecting/Redirector.ts","webpack://client/./node_modules/react/cjs/react.production.min.js","webpack://client/./node_modules/react/index.js","webpack://client/./node_modules/utf8/utf8.js","webpack://client/./node_modules/uuid/dist/esm-browser/rng.js","webpack://client/./node_modules/uuid/dist/esm-browser/regex.js","webpack://client/./node_modules/uuid/dist/esm-browser/validate.js","webpack://client/./node_modules/uuid/dist/esm-browser/stringify.js","webpack://client/./node_modules/uuid/dist/esm-browser/v4.js","webpack://client/./node_modules/@babel/runtime/helpers/regeneratorRuntime.js","webpack://client/./node_modules/@babel/runtime/helpers/typeof.js","webpack://client/./node_modules/@babel/runtime/regenerator/index.js","webpack://client/./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","webpack://client/./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","webpack://client/./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","webpack://client/./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js","webpack://client/./node_modules/@babel/runtime/helpers/esm/classCallCheck.js","webpack://client/./node_modules/@babel/runtime/helpers/esm/createClass.js","webpack://client/./node_modules/@babel/runtime/helpers/esm/createSuper.js","webpack://client/./node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://client/./node_modules/@babel/runtime/helpers/esm/extends.js","webpack://client/./node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","webpack://client/./node_modules/@babel/runtime/helpers/esm/inherits.js","webpack://client/./node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js","webpack://client/./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","webpack://client/./node_modules/@babel/runtime/helpers/esm/objectSpread2.js","webpack://client/./node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","webpack://client/./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://client/./node_modules/@babel/runtime/helpers/esm/slicedToArray.js","webpack://client/./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","webpack://client/./node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://client/./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","webpack://client/./node_modules/@babel/runtime/helpers/esm/construct.js","webpack://client/./node_modules/@babel/runtime/helpers/esm/wrapNativeSuper.js","webpack://client/./node_modules/@babel/runtime/helpers/esm/isNativeFunction.js"],"names":["isAbsolute","pathname","charAt","spliceOne","list","index","i","k","n","length","pop","to","from","arguments","undefined","toParts","split","fromParts","isToAbs","isFromAbs","mustEndAbs","concat","hasTrailingSlash","last","up","part","unshift","result","join","substr","Symbol","iterator","condition","message","Error","addLeadingSlash","path","stripBasename","prefix","RegExp","test","hasBasename","stripTrailingSlash","slice","createPath","location","search","hash","createLocation","state","key","currentLocation","hashIndex","indexOf","searchIndex","parsePath","decodeURI","e","URIError","createTransitionManager","prompt","listeners","setPrompt","nextPrompt","confirmTransitionTo","action","getUserConfirmation","callback","appendListener","fn","isActive","listener","apply","push","filter","item","notifyListeners","_len","args","Array","_key","forEach","canUseDOM","window","document","createElement","getConfirmation","confirm","getHistoryState","history","props","globalHistory","canUseHistory","ua","navigator","userAgent","supportsHistory","needsHashChangeListener","_props","_props$forceRefresh","forceRefresh","_props$getUserConfirm","_props$keyLength","keyLength","basename","getDOMLocation","historyState","_ref","_window$location","createKey","Math","random","toString","transitionManager","setState","nextState","handlePopState","event","isExtraneousPopstateEvent","handlePop","handleHashChange","forceNextPop","ok","fromLocation","toLocation","toIndex","allKeys","fromIndex","delta","go","revertPop","initialLocation","createHref","listenerCount","checkDOMListeners","addEventListener","removeEventListener","isBlocked","href","pushState","prevIndex","nextKeys","replace","replaceState","goBack","goForward","block","unblock","listen","unlisten","createBrowserHistory","RouteCollection","incomingRoutes","this","routes","url","Object","entries","find","view","matcher","matches","viewName","getUrl","findMatch","getViewForUrl","getArgs","Router","currentUrl","baseUrl","currentView","views","self","router","getArgsForView","actions","keys","getUrlForView","setCurrentUrl","autorun","setViewNameInternal","newView","createRouter","RouteMatcher","urlPattern","patternRegex","compiledPattern","end","start","exec","params","name","module","exports","utils","settle","cookies","buildURL","buildFullPath","parseHeaders","isURLSameOrigin","createError","defaults","Cancel","config","Promise","resolve","reject","onCanceled","requestData","data","requestHeaders","headers","responseType","done","cancelToken","unsubscribe","signal","isFormData","request","XMLHttpRequest","auth","username","password","unescape","encodeURIComponent","Authorization","btoa","fullPath","baseURL","onloadend","responseHeaders","getAllResponseHeaders","response","responseText","status","statusText","value","err","open","method","toUpperCase","paramsSerializer","timeout","onreadystatechange","readyState","responseURL","setTimeout","onabort","onerror","ontimeout","timeoutErrorMessage","transitional","clarifyTimeoutError","isStandardBrowserEnv","xsrfValue","withCredentials","xsrfCookieName","read","xsrfHeaderName","val","toLowerCase","setRequestHeader","isUndefined","onDownloadProgress","onUploadProgress","upload","cancel","type","abort","subscribe","aborted","send","bind","Axios","mergeConfig","axios","createInstance","defaultConfig","context","instance","prototype","extend","create","instanceConfig","CancelToken","isCancel","VERSION","all","promises","spread","isAxiosError","__CANCEL__","executor","TypeError","resolvePromise","promise","token","then","_listeners","l","onfulfilled","_resolve","reason","throwIfRequested","splice","source","c","InterceptorManager","dispatchRequest","validator","validators","interceptors","configOrUrl","assertOptions","silentJSONParsing","boolean","forcedJSONParsing","requestInterceptorChain","synchronousRequestInterceptors","interceptor","runWhen","synchronous","fulfilled","rejected","responseInterceptorChain","chain","shift","newConfig","onFulfilled","onRejected","error","getUri","handlers","use","options","eject","id","h","isAbsoluteURL","combineURLs","requestedURL","enhanceError","code","transformData","throwIfCancellationRequested","call","transformRequest","merge","common","adapter","transformResponse","toJSON","description","number","fileName","lineNumber","columnNumber","stack","config1","config2","getMergedValue","target","isPlainObject","isArray","mergeDeepProperties","prop","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","configValue","validateStatus","fns","normalizeHeaderName","DEFAULT_CONTENT_TYPE","setContentTypeIfUnset","process","getDefaultAdapter","isArrayBuffer","isBuffer","isStream","isFile","isBlob","isArrayBufferView","buffer","isURLSearchParams","isObject","rawValue","parser","encoder","isString","JSON","parse","trim","stringify","stringifySafely","strictJSONParsing","maxContentLength","maxBodyLength","thisArg","encode","serializedParams","parts","v","isDate","toISOString","hashmarkIndex","relativeURL","write","expires","domain","secure","cookie","isNumber","Date","toGMTString","match","decodeURIComponent","remove","now","payload","originURL","msie","urlParsingNode","resolveURL","setAttribute","protocol","host","hostname","port","requestURL","parsed","normalizedName","ignoreDuplicateOf","line","arr","thing","deprecatedWarnings","version","formatMessage","opt","desc","opts","console","warn","schema","allowUnknown","getPrototypeOf","isFunction","obj","hasOwnProperty","constructor","ArrayBuffer","isView","pipe","product","assignValue","a","b","str","stripBOM","content","charCodeAt","set","httponly","samesite","expDate","getTime","toUTCString","get","separatorIndex","erase","charenc","utf8","stringToBytes","bin","bytesToString","bytes","escape","String","fromCharCode","base64map","crypt","rotl","rotr","endian","Number","randomBytes","floor","bytesToWords","words","wordsToBytes","bytesToHex","hex","hexToBytes","parseInt","bytesToBase64","base64","triplet","j","base64ToBytes","imod4","pow","dirtyDate","date","baseTimezoneOffset","getTimezoneOffset","setSeconds","dirtyAmount","amount","setDate","getDate","addMilliseconds","getISOYear","setISOYear","timestamp","getDaysInMonth","desiredMonth","getMonth","dateWithDesiredMonth","setFullYear","getFullYear","setHours","daysInMonth","setMonth","min","addMonths","addDays","dirtyInitialRangeStartDate","dirtyInitialRangeEndDate","dirtyComparedRangeStartDate","dirtyComparedRangeEndDate","initialStartTime","initialEndTime","comparedStartTime","comparedEndTime","dirtyDateToCompare","dirtyDatesArray","minDistance","timeToCompare","currentDate","distance","abs","dirtyDateLeft","dirtyDateRight","timeLeft","timeRight","startOfDay","startOfDayLeft","startOfDayRight","timestampLeft","timestampRight","round","startOfISOWeek","startOfISOWeekLeft","startOfISOWeekRight","dateLeft","dateRight","getQuarter","startOfWeek","dirtyOptions","startOfWeekLeft","startOfWeekRight","differenceInCalendarDays","compareAsc","sign","difference","differenceInMilliseconds","diff","ceil","differenceInCalendarISOYears","subISOYears","differenceInCalendarMonths","differenceInMonths","differenceInDays","differenceInCalendarYears","compareDesc","differenceInSeconds","enLocale","comparison","locale","localize","distanceInWords","localizeOptions","addSuffix","Boolean","months","seconds","offset","minutes","includeSeconds","monthsSinceStartOfYear","years","unit","mathPartial","partialMethod","dirtyStartDate","dirtyEndDate","dirtyStep","startDate","step","endTime","dates","setMinutes","endOfWeek","weekStartsOn","year","fourthOfJanuaryOfNextYear","setMilliseconds","getMilliseconds","month","currentMonth","endOfDay","day","getDay","getDayOfYear","getISOWeek","isValid","formatters","addLeadingZeros","getHours","hours","getMinutes","getSeconds","formatTimezone","removeFormattingTokens","input","delimeter","absOffset","targetLength","output","dirtyFormatStr","formatStr","localeFormatters","format","formattingTokensRegExp","formatter","array","Function","buildFormatFn","formatFn","startOfYear","monthIndex","lastDayOfMonth","isLeapYear","startOfISOYear","addWeeks","thisYear","valueOf","startOfNextYear","fourthOfJanuaryOfThisYear","startOfThisYear","differenceInMs","addHours","addISOYears","addMinutes","addQuarters","addSeconds","addYears","areRangesOverlapping","closestIndexTo","closestTo","differenceInCalendarISOWeeks","differenceInCalendarQuarters","differenceInCalendarWeeks","differenceInHours","differenceInISOYears","differenceInMinutes","differenceInQuarters","differenceInWeeks","differenceInYears","distanceInWordsStrict","distanceInWordsToNow","eachDay","endOfHour","endOfISOWeek","endOfISOYear","endOfMinute","endOfMonth","endOfQuarter","endOfSecond","endOfToday","endOfTomorrow","endOfYear","endOfYesterday","getDaysInYear","getISODay","getISOWeeksInYear","getOverlappingDaysInRanges","getYear","isAfter","isBefore","isEqual","isFirstDayOfMonth","isFriday","isFuture","isLastDayOfMonth","isMonday","isPast","isSameDay","isSameHour","isSameISOWeek","isSameISOYear","isSameMinute","isSameMonth","isSameQuarter","isSameSecond","isSameWeek","isSameYear","isSaturday","isSunday","isThisHour","isThisISOWeek","isThisISOYear","isThisMinute","isThisMonth","isThisQuarter","isThisSecond","isThisWeek","isThisYear","isThursday","isToday","isTomorrow","isTuesday","isWednesday","isWeekend","isWithinRange","isYesterday","lastDayOfISOWeek","lastDayOfISOYear","lastDayOfQuarter","lastDayOfWeek","lastDayOfYear","max","setDay","setDayOfYear","setISODay","setISOWeek","setQuarter","setYear","startOfHour","startOfMinute","startOfMonth","startOfQuarter","startOfSecond","startOfToday","startOfTomorrow","startOfYesterday","subDays","subHours","subMilliseconds","subMinutes","subMonths","subQuarters","subSeconds","subWeeks","subYears","dateToCompare","argument","dirtyLeftDate","dirtyRightDate","dateLeftStartOfDay","dateRightStartOfDay","dateLeftStartOfHour","dateRightStartOfHour","dateLeftStartOfYear","dateRightStartOfYear","dateLeftStartOfMinute","dateRightStartOfMinute","dateLeftStartOfQuarter","dateRightStartOfQuarter","dateLeftStartOfSecond","dateRightStartOfSecond","dateLeftStartOfWeek","dateRightStartOfWeek","tomorrow","isNaN","time","startTime","yesterday","fourthOfJanuary","commonFormatterKeys","formatterKeys","formattingTokens","sort","reverse","distanceInWordsLocale","lessThanXSeconds","one","other","xSeconds","halfAMinute","lessThanXMinutes","xMinutes","aboutXHours","xHours","xDays","aboutXMonths","xMonths","aboutXYears","xYears","overXYears","almostXYears","count","buildFormattingTokensRegExp","months3char","monthsFull","weekdays2char","weekdays3char","weekdaysFull","meridiemUppercase","meridiemLowercase","meridiemFull","formatterToken","rem100","ordinal","buildDistanceInWordsLocale","buildFormatLocale","dirtyDates","map","latestTimestamp","earliestTimestamp","getTimezoneOffsetInMilliseconds","parseTokenDateTimeDelimeter","parseTokenPlainTime","parseTokenYY","parseTokensYYY","parseTokenYYYY","parseTokensYYYYY","parseTokenMM","parseTokenDDD","parseTokenMMDD","parseTokenWww","parseTokenWwwD","parseTokenHH","parseTokenHHMM","parseTokenHHMMSS","parseTokenTimezone","parseTokenTimezoneZ","parseTokenTimezoneHH","parseTokenTimezoneHHMM","dayOfISOYear","isoYear","week","setUTCFullYear","getUTCDay","setUTCDate","getUTCDate","additionalDigits","dateStrings","dateString","timeString","timezone","splitDateString","parseYearResult","parseTokenYYY","parseTokenYYYYY","yearString","restDateString","centuryString","parseYear","dayOfYear","dayOfWeek","parseDate","parseFloat","parseTime","timezoneString","absoluteOffset","parseTimezone","fullTime","fullTimeDate","fullTimeDateNextDay","offsetDiff","dirtyDayOfMonth","dayOfMonth","dirtyDay","currentDay","dirtyDayOfYear","dirtyHours","dirtyISOWeek","isoWeek","dirtyISOYear","dirtyMilliseconds","milliseconds","dirtyMinutes","dirtyMonth","dirtyQuarter","dirtySeconds","dirtyYear","cleanDate","readFloatLE","isSlowBuffer","_isBuffer","factory","OldCookies","Cookies","api","noConflict","attributes","decode","s","init","converter","stringifiedAttributes","attributeName","json","jar","getJSON","withConverter","md5","encoding","Uint8Array","m","d","FF","_ff","GG","_gg","HH","_hh","II","_ii","aa","bb","cc","dd","x","t","_blocksize","_digestsize","digestbytes","asBytes","asString","Hook","livelinessChecking","getLivelinessChecking","extendStatics","setPrototypeOf","__proto__","p","__extends","__","__assign","assign","__values","o","next","__read","r","ar","__spread","getType","object","assertIsStateTreeNode","getStateTreeNode","applyPatch","patch","assertArg","applyPatches","asArray","applySnapshot","snapshot","getSnapshot","applyPostProcess","node","freeze","getParentOfType","assertIsType","parent","is","storedValue","fail$1","getRoot","root","resolveIdentifier","identifier","isValidIdentifier","identifierCache","normalizeIdentifier","clone","keepEnvironment","environment","destroy","isRoot","die","removeChild","subpath","addDisposer","disposer","assertIsFunction","BaseNode","defineProperty","enumerable","configurable","writable","NodeLifeCycle","INITIALIZING","baseSetParent","_subpath","_subpathUponDeath","_pathUponDeath","getValue","_state","wasAlive","isAlive","aliveAtom","reportChanged","_hookSubscribers","emit","hook","hookHandler","EventHandlers","register","_parent","_escapedSubpath","pathAtom","getEscapedPath","reportObserved","createAtom","escapeJsonPath","DEAD","DETACHING","whenFinalized","CREATED","FINALIZED","fireHook","afterAttach","clearAll","beforeDestroy","ScalarNode","_super","simpleType","initialSnapshot","_this","createNewInstance","finalizeCreation","newParent","parentChanged","subpathChanged","pathUponDeath","aboutToDie","finalizeDeath","baseFinalizeCreation","baseAboutToDie","baseFinalizeDeath","fireInternalHook","_a","TypeFlags","nextNodeId","snapshotReactionOptions","onError","ObjectNode","complexType","initialValue","_snapshotComputed","computed","unbox","_initialSnapshot","identifierAttribute","IdentifierCache","_childNodes","initializeChildNodes","unnormalizedIdentifier","childNode","addNodeToCache","patches","createObservableInstanceIfNeeded","_applyPatches","_applySnapshot","_observableInstanceState","createObservableInstance","e_1","parentChain","parentChain_1","parentChain_1_1","e_1_1","return","preboot","_isRunningAction","finalizeNewInstance","trackAndCompute","_addSnapshotReaction","EMPTY_OBJECT","afterCreate","beforeDetach","previousState","newEnv","newIdCache","splitCache","mergeCache","_allowStateChangesInsideComputed","_getActualSnapshot","_getCachedInitialSnapshot","_snapshotUponDeath","_cachedInitialSnapshotCreated","childNodes","_cachedInitialSnapshot","processInitialSnapshot","isRunningAction","_getAssertAliveError","warnError","escapedPath","actionContext","getCurrentActionContext","parentActionEvent","actionFullPath","assertAlive","_autoUnbox","getChildNode","getChildren","convertChildNodesToArray","propertyName","getChildType","isProtectionEnabled","isProtected","subpathUponDeath","e_2","_b","_c","e_2_1","afterCreationFinalization","clearParent","createActionInvoker","splitJsonPath","resolveNodeByPathParts","applyPatchLocally","addHiddenFinalProp","_internalEventsEmit","_internalEventsClear","notifyDied","_internalEventsClearAll","onChange","_internalEventsRegister","handler","basePatch","_internalEventsHasSubscribers","stripPatch","invertPatch","splitPatch","_i","current","reversePatch","emitPatch","_internalEventsHas","hasDisposer","_internalEventsUnregister","middleware","middlewares","includeHooks","removeMiddleware","assertWritable","_hasSnapshotReaction","snapshotDisposer","reaction","emitSnapshot","_internalEvents","hasSubscribers","eventHandler","atTheBeginning","has","unregister","clear","detach","$type","BaseType","typecheckInternal","instantiate","getStateTreeNodeSafe","valueType","isAssignableFrom","typeCheckSuccess","typeCheckFailure","isValidSnapshot","validate","ComplexType","getDefaultSnapshot","newValue","isDetaching","isStateTreeNode","isMutable","isMatchingSnapshotId","tryToReconcileNode","setParent","newNode","SimpleType","res","isType","argNumber","Map","RunningAction","hooks","onStart","running","onFinish","flowsPending","currentActionContext","nextActionId","getNextActionId","runWithActionContext","baseIsRunningAction","previousContext","baseCall","originalFn","CollectedMiddlewares","isEmpty","runNextMiddleware","getNextMiddleware","call2","runMiddleWares","getParentActionContext","parentContext","parentActionContext","argsToArray","tree","rootId","parentId","allParentIds","parentEvent","_isMSTAction","$mst_middleware","arrayIndex","inArrayIndex","prettyPrintValue","safeStringify","toErrorString","pathPrefix","currentTypename","isPrimitive","isSnapshotCompatible","flags","Integer","isPrimitiveType","describe","getContextForPath","EMPTY_ARRAY","flattenTypeErrors","errors","reduce","env","ENABLE_TYPE_CHECK","valueInString","substring","validationErrorsToString","typecheck","identifierCacheId","observable","lcm","lastCacheModificationPerId","modificationId","cacheId","lastCacheUpdate","cache","mobxShallow","updateLastCacheModificationPerId","values","nodes","child","delete","basePath","modified","some","candidate","createObjectNode","existingNode","createScalarNode","$treenode","base","pathParts","failIfResolveFails","joinJsonPath","plainObjectString","_getGlobalState","useProxies","deep","proxy","identity","_","isInteger","isFinite","isObservableArray","proto","includeDate","descriptor","isObservableObject","propName","EventHandler","f","eventHandlers","stringStartsWith","beginning","deprecated","msg","typeName","assertIsString","canBeEmpty","setImmediateWithFallback","queueMicrotask","setImmediate","flow","generator","spawner","runId","contextBase","wrap","arg","gen","ret","throw","createFlowSpawner","op","oldValue","unescapeJsonPath","getPathStr","ids","$preProcessorFailed","SnapshotProcessor","_subtype","_processors","sn","preProcessor","preProcessSnapshot","postProcessor","nodeType","snapshotProcessorType","methods","methods_1","methods_1_1","proxyNodeTypeMethods","oldGetSnapshot","postProcessSnapshot","Union","getReconciliationType","processedInitialValue","_fixNode","reconcile","processedSn","preProcessSnapshotSafe","MapIdentifierMode","needsIdentifierError","MSTMap","initialData","mapNode","mapType","identifierMode","YES","mapIdentifierAttribute","put","ObservableMap","MapType","_subType","hookInitializers","UNKNOWN","_determineIdentifierMode","modelTypes","tryCollectModelTypes","subtypes","getSubTypes","subtypesArray","subtypesArray_1","subtypesArray_1_1","ModelType","NO","objNode","subType","_interceptReads","initializer","actionInvoker","intercept","willChange","observe","didChange","change","processIdentifier","expected","processed","oldSnapshot","currentKeys","ArrayType","_getAdministration","dehancer","updatedNodes","reconcileArrayChildren","index_1","removedCount","added","addedNodes","removed","addedCount","childType","oldNodes","newValues","newPaths","nothingChanged","hasNewNode","oldNode","newPath","areSame","valueAsNode","oldMatch","getNewNode","oldNodeType","objectTypeToString","defaultObjectOptions","properties","initializers","toPropertiesObject","declaredProps","getOwnPropertyDescriptor","optional","string","DatePrimitive","getPrimitiveFactoryFromValue","cloneAndEnhance","currentPreprocessor","currentPostprocessor","propertyNames","_getIdentifierAttribute","forAllProps","propType","Identifier","instantiateActions","action2","baseAction","specializedAction_1","boundAction","instantiateVolatileState","rest","getOwnPropertySymbols","propertyIsEnumerable","__rest","instantiateViews","getOwnPropertyNames","makeObservable","applySnapshotPreProcessor","chg","oldChildValue","raw","getAtom","applySnapshotPostProcessor","preProcessedSnapshot","processor","isModelType","CoreType","checker","integer","nullType","Null","undefinedType","Undefined","_DatePrimitive","Literal","literal","Refinement","_predicate","_message","subtypeErrors","_types","eager","dispatcher","_dispatcher","_eager","determineType","reconcileCurrentType","allErrors","applicableTypes","union","optionsOrType","otherTypes","types","OptionalValue","_defaultValue","optionalValues","Optional","defaultInstanceOrSnapshot","getDefaultInstanceOrSnapshot","defaultValueOrFunction","checkOptionalPreconditions","undefinedAsOptionalValues","optionalUndefinedType","optionalNullType","maybe","Late","_definition","mustSucceed","ReferenceError","getSubType","subtype","Frozen","isSerializable","untypedFrozenInstance","StoredReference","targetType","targetNode","normalizedId","lastCacheModification","getLastCacheModificationPerId","resolvedReference","InvalidReferenceError","updateResolvedReference","BaseReferenceType","onInvalidated","Reference","cause","storedRefNode","referenceId","refTargetNode","storedRefParentNode","storedRefParentValue","invalidTarget","invalidId","replaceRef","newRef","removeRef","refTargetValue","refTargetNodeHook","getInvalidationCause","fireInvalidated","refTargetDetachHookDisposer","registerHook","refTargetDestroyHookDisposer","customGetSet","onRefTargetDestroyedHookDisposer","startWatching","sync","addTargetNodeWatcher","IdentifierReferenceType","resolvedValue","storedRef","watchTargetNodeForInvalidations","compareByValue","ref","CustomReferenceType","newIdentifier","reference","getSetOptions","BaseIdentifierType","validType","IdentifierType","IdentifierNumberType","identifierNumber","CustomType","Custom","isTargetType","typeError","getValidationMessage","toSnapshot","fromSnapshot","isSnapshot","valueToStore","enumeration","realOptions","option","model","compose","hasTypename","prev","cur","named","custom","safeReference","refType","ev","acceptsUndefined","maybeNull","refinement","predicate","frozen","late","nameOrType","maybeType","null","snapshotProcessor","processors","mockGlobal","getGlobal","globalThis","g","getDescriptor","objectPrototype","hasProxy","Proxy","assertProxies","once","func","invoked","noop","isStringish","protoConstructor","isGenerator","displayName","addHiddenProp","createInstanceofPredicate","theClass","isES6Map","isES6Set","Set","hasGetOwnPropertySymbols","ownKeys","Reflect","toPrimitive","hasProp","getOwnPropertyDescriptors","_defineProperties","_createClass","Constructor","protoProps","staticProps","_extends","_inheritsLoose","subClass","superClass","_setPrototypeOf","_assertThisInitialized","_arrayLikeToArray","len","arr2","_createForOfIteratorHelperLoose","allowArrayLike","it","minLen","_unsupportedIterableToArray","storedAnnotationsSymbol","createDecoratorAnnotation","annotation","property","storeAnnotation","annotationType_","isOverride","$mobx","Atom","name_","isPendingUnobservation_","isBeingObserved_","observers_","diffValue_","lastAccessedBy_","lowestObserverState_","IDerivationState_","NOT_TRACKING_","onBOL","onBUOL","_proto","onBO","onBUO","startBatch","propagateChanged","endBatch","isAtom","onBecomeObservedHandler","onBecomeUnobservedHandler","atom","onBecomeObserved","onBecomeUnobserved","comparer","structural","deepEqual","shallow","deepEnhancer","isObservable","isAction","isFlow","autoAction","referenceEnhancer","override","make_","adm","extend_","proxyTrap","createActionAnnotation","options_","make_$1","extend_$1","_this$options_","bound","target_","actionDescriptor","createActionDescriptor","defineProperty_","safeDescriptors","_annotation$options_","_annotation$options_$","_annotation$options_2","_annotation$options_$2","_annotation$options_3","_annotation$options_4","_adm$proxy_2","_ref2","globalState","_adm$proxy_","proxy_","createAction","isPlainObject_","createFlowAnnotation","make_$2","extend_$2","flowDescriptor","createFlowDescriptor","_this$options_2","isMobXFlow","createComputedAnnotation","make_$3","extend_$3","assertComputedDescriptor","defineComputedProperty_","createObservableAnnotation","make_$4","extend_$4","_this$options_$enhanc","assertObservableDescriptor","defineObservableProperty_","enhancer","autoAnnotation","createAutoAnnotation","make_$5","extend_$5","_this$options_3","_this$options_4","autoBind","observableAnnotation","_this$options_5","_this$options_6","defaultCreateObservableOptions","defaultDecorator","asCreateObservableOptions","observableRefAnnotation","observableShallowAnnotation","isObservableMap","isObservableSet","observableStructAnnotation","observableDecoratorAnnotation","getEnhancerFromOptions","getEnhancerFromAnnotation","createObservable","arg2","arg3","box","_getDescriptor$config","_getDescriptor","ObservableValue","equals","initialValues","createLegacyArray","createObservableArray","ObservableSet","decorators","extendObservable","asObservableObject","_target$$mobx","_target$$mobx$proxy_","objectProxyTraps","asDynamicObservableObject","struct","computedAnnotation","computedStructAnnotation","arg1","ComputedValue","_Symbol$toPrimitive","currentActionId","isFunctionNameConfigurable","tmpNameDescriptor","actionName","executeAction","isMobxAction","canRunAsDerivation","scope","runInfo","_startAction","error_","_endAction","prevDerivation_","trackingDerivation","runAsAction","prevAllowStateChanges_","allowStateChanges","untrackedStart","allowStateChangesStart","runAsAction_","prevAllowStateReads_","allowStateReadsStart","notifySpy_","startTime_","actionId_","parentActionId_","suppressReactionErrors","allowStateChangesEnd","allowStateReadsEnd","untrackedEnd","_Symbol$toPrimitive$1","_Atom","notifySpy","hasUnreportedChange_","interceptors_","changeListeners_","value_","dehanceValue","prepareNewValue_","UNCHANGED","setNewValue_","checkIfStateModificationsAreAllowed","hasInterceptors","interceptChange","UPDATE","hasListeners","intercept_","registerInterceptor","observe_","fireImmediately","observableKind","debugObjectName","registerListener","isObservableValue","TraceMode","dependenciesState_","observing_","newObserving_","runId_","UP_TO_DATE_","unboundDepsCount_","CaughtException","triggeredBy_","isComputing_","isRunningSetter_","derivation","setter_","isTracing_","NONE","scope_","equals_","requiresReaction_","keepAlive_","compareStructural","requiresReaction","keepAlive","onBecomeStale_","POSSIBLY_STALE_","propagateMaybeChanged","inBatch","size","shouldCompute","prevTrackingContext","trackingContext","STALE_","propagateChangeConfirmed","warnAboutUntrackedRead_","computeValue_","isCaughtException","wasSuspended","changed","track","trackDerivedFunction","disableErrorBoundaries","suspend_","clearObserving","firstTime","prevValue","prevU","isComputedValue","prevAllowStateReads","prevUntracked","obs","changeDependenciesStateTo0","isComputingDerivation","prevTracking","prevObserving","observing","lowestNewObservingDerivationState","i0","dep","_dep","removeObserver","_dep2","addObserver","bindDependencies","untracked","allowStateReads","persistentKeys","MobXGlobals","mobxGuid","pendingUnobservations","pendingReactions","isRunningReactions","enforceActions","spyListeners","globalReactionErrorHandlers","computedRequiresReaction","reactionRequiresObservable","observableRequiresReaction","verifyProxies","canMergeGlobalState","isolateCalled","global","__mobxInstanceCount","__mobxGlobals","getGlobalState","resetGlobalState","defaultGlobals","add","queueForUnobservation","runReactions","Reaction","onInvalidate_","errorHandler_","requiresObservable_","isDisposed_","isScheduled_","isTrackPending_","isRunning_","schedule_","isScheduled","runReaction_","reportExceptionInDerivation_","prevReaction","dispose","getDisposer_","trace","enterBreakPoint","onReactionError","idx","reactionScheduler","runReactionsHelper","allReactions","iterations","remainingReactions","isReaction","spy","actionAnnotation","actionBoundAnnotation","autoActionAnnotation","autoActionBoundAnnotation","createActionFactory","runInAction","_opts$name","_opts","scheduler","delay","reactionRunner","requiresObservable","createSchedulerFromOptions","run","expression","effect","_opts$name2","errorHandler","baseFn","effectAction","runSync","nextValue","interceptHook","cb","listenersKey","hookListeners","configure","isolateGlobalState","ea","baseScheduler","setReactionScheduler","annotations","descriptors","getDependencyTree","nodeToDependencyTree","dependencies","getObserverTree","nodeToObserverTree","hasObservers","observers","getObservers","generatorId","FlowCancellationError","isFlowCancellationError","flowAnnotation","flowBoundAnnotation","rejector","ctx","pendingPromise","stepId","cancelPromise","_res","yieldedPromise","flowResult","interceptReads","propOrHandler","getAdministration","interceptProperty","interceptInterceptable","_isComputed","values_","isComputed","isComputedProp","_isObservable","isObservableProp","keys_","set_","_values","delete_","has_","get_","apiDefineProperty","apiOwnKeys","ownKeys_","propOrCb","cbOrFire","observeObservableProperty","observeObservable","toJS","toJSHelper","__alreadySeen","_res2","_res3","getAtomFromArgs","log","BREAK","LOG","transaction","when","whenPromise","_when","timeoutHandle","clearTimeout","getAdm","_getAdm$set_","deleteProperty","_getAdm$delete_","_getAdm$definePropert","preventExtensions","interceptable","listenable","collectStoredAnnotations","keysSymbol","makeAutoObservable","overrides","arrayTraps","getArrayLength_","arrayExtensions","setArrayLength_","ObservableArrayAdministration","owned_","legacyMode_","atom_","enhancer_","lastKnownLength_","newV","oldV","dehanceValue_","dehanceValues_","newLength","currentLength","newItems","spliceWithArray_","updateArrayLength_","oldLength","reserveArrayBuffer","deleteCount","lengthDelta","spliceItemsIntoValues_","notifyArraySplice_","_this$values_","oldItems","notifyArrayChildUpdate_","notify","owned","spliceWithArray","_len2","items","_key2","_len3","_key3","copy","addArrayExtension","funcName","funcFactory","simpleFunc","dehancedValues","mapLikeFunc","_this2","element","reduceLikeFunc","_this3","accumulator","currentValue","_Symbol$iterator","_Symbol$toStringTag","isObservableArrayAdministration","ObservableMapMarker","ADD","toStringTag","_Symbol$iterator$1","_Symbol$toStringTag$1","data_","hasMap_","keysAtom_","entry","newEntry","hasKey","updateValue_","addValue_","_change","_this3$hasMap_$get","_this4","_this4$hasMap_$get","makeIterable","_keys$next","_keys$next2","_step","_iterator","_step$value","_this5","symbols","getPlainObjectKeys","_this6","_step2","_iterator2","_this7","_step3","replacementMap","dataStructure","convertToMap","orderedData","keysReportChangedCalled","_iterator3","_step4","_iterator4","_step4$value","_value","keyExisted","_value2","iter1","iter2","next1","next2","ObservableSetMarker","callbackFn","_change2","nextIndex","observableValues","descriptorCache","ObservableObjectAdministration","defaultAnnotation_","appliedAnnotations_","pendingKeys_","getObservablePropValue_","setObservablePropValue_","assertAnnotable","_this$target_$storedA","outcome","recordAnnotationApplied","deleteOutcome","notifyPropertyAddition_","cachedDescriptor","getCachedObservablePropDescriptor","_this$pendingKeys_","_this$pendingKeys_$ge","_this$pendingKeys_2","_this$pendingKeys_2$g","_options$name","_options$defaultDecor","getAnnotationFromOptions","isObservableObjectAdministration","_adm$target_$storedAn","ctor","ENTRY_0","createArrayEntryDescriptor","OBSERVABLE_ARRAY_BUFFER_SIZE","StubArray","LegacyObservableArray","_StubArray","arrays","createArrayBufferItem","getDebugName","_observable","depth","eq","aStack","bStack","className","unwrap","areArrays","aCtor","bCtor","getSelf","__MOBX_DEVTOOLS_GLOBAL_HOOK__","injectMobx","extras","propIsEnumerable","toObject","test1","test2","test3","letter","shouldUseNative","pathToRegexp","compile","tokensToFunction","tokensToRegExp","PATH_REGEXP","tokens","defaultDelimiter","delimiter","whitelist","pathEscaped","escaped","capture","group","modifier","repeat","pattern","escapeGroup","escapeString","segment","sensitive","strict","endsWith","route","endToken","isEndDelimited","groups","regexpToRegexp","arrayToRegexp","stringToRegexp","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","currentQueue","queue","draining","queueIndex","cleanUpNextTick","drainQueue","marker","runClearTimeout","Item","nextTick","title","browser","argv","versions","on","addListener","off","removeListener","removeAllListeners","prependListener","prependOnceListener","binding","cwd","chdir","dir","umask","initialCookiePresent","establishUniversalDomainSession","userId","createDomainLevelCookie","revokeUniversalDomainSession","getVoAuthToken","tokenString","localStorage","getItem","isExpired","authenticationToken","expireDate","setupVoAuthentication","setItem","memberId","removeVoAuthentication","authToken","removeItem","removeCurrentCookieConsent","sessionStorage","CookieWarningModalStore","showModal","close","EnrollmentConfigTag","EnrollmentStatus","enrollmentId","storeId","tag","countryIso","socialLinkHasExpired","countryIso3","getCartIdToUse","cartQuantity","cart","getCurrentEnrollmentId","removeCurrentEnrollmentId","createInitialEnrollmentStatus","redirectData","EnrollmentRedirect","socialLinkId","enrollmentResource","socialLinkResponse","linkParams","getLinkParams","detectLocale","cartId","phase","countryIsoCode","enrollerId","enrollerid","sponsorId","sponsorid","getNextEnrollmentStatus","cleanupClientStorages","persistEnrollmentStatus","enrollmentStatus","languageDetector","cancelEnrollment","toRoot","country","language","searchParams","URLSearchParams","Redirector","createInitialEnrollmentStatusOrRedirect","errorModalStore","link_params","dateCaptured","today","collectLinkParams","dateCaptures","getRedirectData","setRedirectData","removeRedirectData","validatePathAndRedirectIfNecessary","enabled","includes","applyUrlSearchParams","getStoreSpecificConfiguration","persisted","reload","sendHistoryEventsToAnalytics","bootstrapData","storeSpecificConfig","dataPromise","OrderPaymentStatus","EnrollmentPaymentType","PaymentMethodProviderType","CreditCardTypes","AgreementKind","ShareStatus","ItemStatusAvailability","FieldType","InputType","AddressVerificationStatus","CustomErType","StarterKitDisplayStyle","StarterKitTabType","StarterKitTabStyle","EnrollmentCustomerType","TaxIdContextRenderer","TaxIdTypeContext","CustomerType","Gender","EnrollmentModules","StepStyle","StepLayout","UplineValidationStatuses","VirtualWalletType","PlaceToPayStatus","ValidateCreditCardAsyncStatus","ApiClientBase","ContentfulLabelsClient","namespace","lang","url_","transformOptions","transformedOptions_","catch","_error","_response","processGetTranslations","_headers","result200","resultData200","throwException","TokenClient","processGetDevAuthToken","processReissue","SocialLinkClient","form","processStartCreatorModeEnrollment","processGetSocialLinkConfig","processValidateSocialLinkNameIsUnique","searchText","includingArchiveLinks","processGetSocialLinks","processCreateSocialLink","linkId","processCreateSocialLinkEnrollment","processUpdateSocialLink","processAddSocialLinkShareStatus","processGetSocialLinkItems","MissingTranslationClient","ns","translations","content_","FormData","append","processCreateMissingTranslation","contentDisposition","fileNameMatch","Blob","processAddToContentful","processMoveTranslationContentful","processGetMissingTranslations","SponsorEnrollerClient","processValidateSponsorAndEnroller","gaiyoshomenCode","processValidateGaiyoshomen","VirtualWalletClient","processGetAuthorizationToken","processSavePaymentToken","paymentId","processSavePaymentId","processAddVirtualWallet","CreditCardClient","transactionId","paymentMethodIdentity","processGetTransactionStatus","creditCartPreValidationForm","processValidateCreditCard","processSaveClientJsonValue","processAssociateCvvWithCreditCard","cardTypeName","processResolveNextGateway","processGetEncryptionKey","processGetStripe3DSParams","paymentIntentId","processGetStripe3DSResult","processGetDoku3DSParams","processGetDoku3DSResult","InstallmentClient","processGetAvailableInstallments","ApiException","isApiException","ErrorModalStore","configureMobx","errorId","requestId","each","fieldContentRegExp","serializeCookie","maxAge","httpOnly","sameSite","cookieOptions","setTime","nameEQ","ca","cookie$1","lookup","found","lookupCookie","cacheUserLanguage","lng","cookieMinutes","cookieDomain","querystring","pos","lookupQuerystring","hasLocalStorageSupport","localStorageAvailable","lookupLocalStorage","hasSessionStorageSupport","sessionStorageAvailable","lookupSessionStorage","navigator$1","languages","userLanguage","htmlTag","documentElement","getAttribute","lookupFromPathIndex","subdomain","lookupFromSubdomainIndex","Browser","services","detectors","i18nOptions","order","caches","excludeCacheFor","lookupFromUrlIndex","addDetector","detector","detectionOrder","detected","detectorName","languageUtils","getBestMatchFromCodes","cacheName","UrlSearchParamsDetector","localeRegularExpression","LanguageDetector","detect","configured","dataLayer","publishECommerceCompletionEvent","hasEr","memberType","paymentType","ecommerce","currencyCode","purchase","actionField","coupon","affiliation","orderId","revenue","tax","shipping","products","enrollmentClient","YL_BASE_URL","setupInterceptors","addEnrollmentIdInterceptor","addYlRequestIdInterceptor","addMarketShieldInterceptor","addRetryInterceptor","addRedirectInterceptor","currentEnrollmentId","uuidv4","axiosStatic","isShielded","storedAccess","verified","shieldAccessCode","num502Retries","redirectToStepOne","addVoAuthTokenInterceptor","AuthToken","tokenClient","reissue","redirect","Fragment","StrictMode","Profiler","q","Suspense","u","for","w","z","A","isMounted","enqueueForceUpdate","enqueueReplaceState","enqueueSetState","B","C","refs","updater","D","E","isReactComponent","forceUpdate","F","isPureReactComponent","G","H","I","__self","__source","J","children","defaultProps","$$typeof","_owner","L","M","N","O","K","y","P","Q","_status","_result","default","R","S","T","ReactCurrentDispatcher","ReactCurrentBatchConfig","transition","ReactCurrentOwner","IsSomeRendererActing","Children","toArray","only","Component","PureComponent","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","cloneElement","createContext","_calculateChangedBits","_currentValue","_currentValue2","_threadCount","Provider","Consumer","_context","createFactory","createRef","forwardRef","render","isValidElement","lazy","_payload","_init","memo","compare","useCallback","useContext","useDebugValue","useEffect","useImperativeHandle","useLayoutEffect","useMemo","useReducer","useRef","useState","freeExports","freeGlobal","byteArray","byteCount","byteIndex","stringFromCharCode","ucs2decode","extra","counter","checkScalarValue","codePoint","createByte","encodeCodePoint","symbol","readContinuationByte","continuationByte","decodeSymbol","byte1","codePoints","byteString","tmp","ucs2encode","getRandomValues","rnds8","rng","crypto","msCrypto","uuid","byteToHex","buf","rnds","_typeof","_regeneratorRuntime","__esModule","Op","hasOwn","$Symbol","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","define","innerFn","outerFn","tryLocsList","protoGenerator","Generator","Context","_invoke","doneResult","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","abrupt","record","tryCatch","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","NativeIteratorPrototype","Gp","defineIteratorMethods","AsyncIterator","PromiseImpl","previousPromise","callInvokeWithMethodAndArg","invoke","__await","unwrapped","info","resultName","nextLoc","pushTryEntry","locs","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","iterable","iteratorMethod","isGeneratorFunction","genFun","mark","awrap","async","iter","skipTempReset","stop","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","thrown","delegateYield","runtime","regeneratorRuntime","accidentalStrictMode","_arrayWithHoles","asyncGeneratorStep","_next","_throw","_asyncToGenerator","_classCallCheck","_createSuper","Derived","hasNativeReflectConstruct","Super","NewTarget","construct","_defineProperty","_getPrototypeOf","_inherits","_isNativeReflectConstruct","sham","_nonIterableRest","enumerableOnly","sym","_objectSpread2","defineProperties","_possibleConstructorReturn","_slicedToArray","arrayWithHoles","_s","_e","_arr","_n","_d","unsupportedIterableToArray","nonIterableRest","_construct","Parent","Class","isNativeReflectConstruct","_wrapNativeSuper","_cache","Wrapper"],"mappings":"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","file":"static/js/bootstrap.3992755e.chunk.js","sourcesContent":["function isAbsolute(pathname) {\n  return pathname.charAt(0) === '/';\n}\n\n// About 1.5x faster than the two-arg version of Array#splice()\nfunction spliceOne(list, index) {\n  for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1) {\n    list[i] = list[k];\n  }\n\n  list.pop();\n}\n\n// This implementation is based heavily on node's url.parse\nfunction resolvePathname(to) {\n  var from = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n\n  var toParts = to && to.split('/') || [];\n  var fromParts = from && from.split('/') || [];\n\n  var isToAbs = to && isAbsolute(to);\n  var isFromAbs = from && isAbsolute(from);\n  var mustEndAbs = isToAbs || isFromAbs;\n\n  if (to && isAbsolute(to)) {\n    // to is absolute\n    fromParts = toParts;\n  } else if (toParts.length) {\n    // to is relative, drop the filename\n    fromParts.pop();\n    fromParts = fromParts.concat(toParts);\n  }\n\n  if (!fromParts.length) return '/';\n\n  var hasTrailingSlash = void 0;\n  if (fromParts.length) {\n    var last = fromParts[fromParts.length - 1];\n    hasTrailingSlash = last === '.' || last === '..' || last === '';\n  } else {\n    hasTrailingSlash = false;\n  }\n\n  var up = 0;\n  for (var i = fromParts.length; i >= 0; i--) {\n    var part = fromParts[i];\n\n    if (part === '.') {\n      spliceOne(fromParts, i);\n    } else if (part === '..') {\n      spliceOne(fromParts, i);\n      up++;\n    } else if (up) {\n      spliceOne(fromParts, i);\n      up--;\n    }\n  }\n\n  if (!mustEndAbs) for (; up--; up) {\n    fromParts.unshift('..');\n  }if (mustEndAbs && fromParts[0] !== '' && (!fromParts[0] || !isAbsolute(fromParts[0]))) fromParts.unshift('');\n\n  var result = fromParts.join('/');\n\n  if (hasTrailingSlash && result.substr(-1) !== '/') result += '/';\n\n  return result;\n}\n\nexport default resolvePathname;","var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction valueEqual(a, b) {\n  if (a === b) return true;\n\n  if (a == null || b == null) return false;\n\n  if (Array.isArray(a)) {\n    return Array.isArray(b) && a.length === b.length && a.every(function (item, index) {\n      return valueEqual(item, b[index]);\n    });\n  }\n\n  var aType = typeof a === 'undefined' ? 'undefined' : _typeof(a);\n  var bType = typeof b === 'undefined' ? 'undefined' : _typeof(b);\n\n  if (aType !== bType) return false;\n\n  if (aType === 'object') {\n    var aValue = a.valueOf();\n    var bValue = b.valueOf();\n\n    if (aValue !== a || bValue !== b) return valueEqual(aValue, bValue);\n\n    var aKeys = Object.keys(a);\n    var bKeys = Object.keys(b);\n\n    if (aKeys.length !== bKeys.length) return false;\n\n    return aKeys.every(function (key) {\n      return valueEqual(a[key], b[key]);\n    });\n  }\n\n  return false;\n}\n\nexport default valueEqual;","var isProduction = process.env.NODE_ENV === 'production';\nvar prefix = 'Invariant failed';\nfunction invariant(condition, message) {\n  if (condition) {\n    return;\n  }\n\n  if (isProduction) {\n    throw new Error(prefix);\n  } else {\n    throw new Error(prefix + \": \" + (message || ''));\n  }\n}\n\nexport default invariant;\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 new RegExp('^' + prefix + '(\\\\/|\\\\?|#|$)', 'i').test(path);\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  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 ? 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 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  var hashIndex = window.location.href.indexOf('#');\n  window.location.replace(window.location.href.slice(0, hashIndex >= 0 ? hashIndex : 0) + '#' + 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 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(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    return '#' + 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 ? 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","import { createBrowserHistory } from 'history';\nexport const history = createBrowserHistory();\n//# sourceMappingURL=RouteHistory.js.map","export class RouteCollection {\n  constructor(incomingRoutes) {\n    this.routes = void 0;\n    this.routes = incomingRoutes;\n  }\n  findMatch(url) {\n    return Object.entries(this.routes).find(_ref => {\n      let [view, matcher] = _ref;\n      return matcher.matches(url);\n    });\n  }\n  getUrlForView(viewName) {\n    let args = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    const matcher = this.routes[viewName];\n    if (matcher === undefined) {\n      throw new Error(`View '${viewName} Does not exist}`);\n    }\n    return matcher.getUrl(args);\n  }\n  getViewForUrl(url) {\n    const [view] = this.findMatch(url) || [undefined];\n    return view || '';\n  }\n  getArgsForView(url) {\n    const view = this.getViewForUrl(url);\n    if (!view || view.length === 0) {\n      return {};\n    }\n    const matcher = this.routes[view];\n    return matcher.getArgs(url);\n  }\n}\n//# sourceMappingURL=RouteCollection.js.map","import { addDisposer, types } from 'mobx-state-tree';\nimport { autorun } from 'mobx';\nimport { RouteCollection } from './RouteCollection';\nimport { history } from './RouteHistory';\nexport const Router = types.model({\n  currentUrl: types.optional(types.string, ''),\n  baseUrl: types.string,\n  currentView: types.optional(types.string, ''),\n  routes: types.frozen()\n}).views(self => ({\n  get router() {\n    return new RouteCollection(self.routes);\n  },\n  getParameters() {\n    return this.router.getArgsForView(self.currentUrl);\n  }\n})).actions(self => ({\n  setCurrentUrl(url) {\n    self.currentUrl = url;\n  },\n  setCurrentView(view) {\n    let args = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    if (view === self.currentView && Object.keys(args).length === 0) {\n      return;\n    }\n    const url = self.router.getUrlForView(view, args);\n    this.setCurrentUrl(`${self.baseUrl}${url}`);\n  },\n  setViewNameInternal(view) {\n    self.currentView = view;\n  },\n  afterCreate() {\n    autorun(() => {\n      if (!self.currentUrl || self.currentUrl.length === 0) {\n        this.setViewNameInternal('');\n      }\n      if (self.currentUrl !== history.location.pathname) {\n        history.push(self.currentUrl);\n      }\n      const newView = self.router.getViewForUrl(self.currentUrl);\n      this.setViewNameInternal(newView);\n    });\n    addDisposer(self, history.listen(location => this.setCurrentUrl(location.pathname)));\n    this.setCurrentUrl(history.location.pathname);\n  }\n}));\nexport function createRouter(routes) {\n  let baseUrl = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n  return {\n    baseUrl,\n    routes\n  };\n}\n//# sourceMappingURL=Router.js.map","import pathToRegexp from 'path-to-regexp';\nexport class RouteMatcher {\n  constructor(urlPattern) {\n    this.urlPattern = urlPattern;\n    this.keys = [];\n    this.patternRegex = void 0;\n    this.compiledPattern = void 0;\n    this.patternRegex = pathToRegexp(urlPattern, this.keys, {\n      end: true,\n      start: false\n    });\n    this.compiledPattern = pathToRegexp.compile(urlPattern);\n  }\n  matches(url) {\n    return this.patternRegex.test(url);\n  }\n  getArgs(url) {\n    const matches = this.patternRegex.exec(url);\n    if (matches === null) {\n      return {};\n    }\n    const params = {};\n    this.keys.forEach((key, i) => {\n      params[key.name] = matches[i + 1];\n    });\n    return params;\n  }\n  getUrl(args) {\n    return this.compiledPattern(args || {});\n  }\n}\n//# sourceMappingURL=RouteMatcher.js.map","module.exports = require('./lib/axios');","'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar cookies = require('./../helpers/cookies');\nvar buildURL = require('./../helpers/buildURL');\nvar buildFullPath = require('../core/buildFullPath');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar createError = require('../core/createError');\nvar defaults = require('../defaults');\nvar Cancel = require('../cancel/Cancel');\n\nmodule.exports = function xhrAdapter(config) {\n  return new Promise(function dispatchXhrRequest(resolve, reject) {\n    var requestData = config.data;\n    var requestHeaders = config.headers;\n    var responseType = config.responseType;\n    var onCanceled;\n    function done() {\n      if (config.cancelToken) {\n        config.cancelToken.unsubscribe(onCanceled);\n      }\n\n      if (config.signal) {\n        config.signal.removeEventListener('abort', onCanceled);\n      }\n    }\n\n    if (utils.isFormData(requestData)) {\n      delete requestHeaders['Content-Type']; // Let the browser set it\n    }\n\n    var request = new XMLHttpRequest();\n\n    // HTTP basic authentication\n    if (config.auth) {\n      var username = config.auth.username || '';\n      var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';\n      requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n    }\n\n    var fullPath = buildFullPath(config.baseURL, config.url);\n    request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\n    // Set the request timeout in MS\n    request.timeout = config.timeout;\n\n    function onloadend() {\n      if (!request) {\n        return;\n      }\n      // Prepare the response\n      var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n      var responseData = !responseType || responseType === 'text' ||  responseType === 'json' ?\n        request.responseText : request.response;\n      var response = {\n        data: responseData,\n        status: request.status,\n        statusText: request.statusText,\n        headers: responseHeaders,\n        config: config,\n        request: request\n      };\n\n      settle(function _resolve(value) {\n        resolve(value);\n        done();\n      }, function _reject(err) {\n        reject(err);\n        done();\n      }, response);\n\n      // Clean up request\n      request = null;\n    }\n\n    if ('onloadend' in request) {\n      // Use onloadend if available\n      request.onloadend = onloadend;\n    } else {\n      // Listen for ready state to emulate onloadend\n      request.onreadystatechange = function handleLoad() {\n        if (!request || request.readyState !== 4) {\n          return;\n        }\n\n        // The request errored out and we didn't get a response, this will be\n        // handled by onerror instead\n        // With one exception: request that using file: protocol, most browsers\n        // will return status as 0 even though it's a successful request\n        if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n          return;\n        }\n        // readystate handler is calling before onerror or ontimeout handlers,\n        // so we should call onloadend on the next 'tick'\n        setTimeout(onloadend);\n      };\n    }\n\n    // Handle browser request cancellation (as opposed to a manual cancellation)\n    request.onabort = function handleAbort() {\n      if (!request) {\n        return;\n      }\n\n      reject(createError('Request aborted', config, 'ECONNABORTED', request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Handle low level network errors\n    request.onerror = function handleError() {\n      // Real errors are hidden from us by the browser\n      // onerror should only fire if it's a network error\n      reject(createError('Network Error', config, null, request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Handle timeout\n    request.ontimeout = function handleTimeout() {\n      var timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';\n      var transitional = config.transitional || defaults.transitional;\n      if (config.timeoutErrorMessage) {\n        timeoutErrorMessage = config.timeoutErrorMessage;\n      }\n      reject(createError(\n        timeoutErrorMessage,\n        config,\n        transitional.clarifyTimeoutError ? 'ETIMEDOUT' : 'ECONNABORTED',\n        request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Add xsrf header\n    // This is only done if running in a standard browser environment.\n    // Specifically not if we're in a web worker, or react-native.\n    if (utils.isStandardBrowserEnv()) {\n      // Add xsrf header\n      var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ?\n        cookies.read(config.xsrfCookieName) :\n        undefined;\n\n      if (xsrfValue) {\n        requestHeaders[config.xsrfHeaderName] = xsrfValue;\n      }\n    }\n\n    // Add headers to the request\n    if ('setRequestHeader' in request) {\n      utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n        if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n          // Remove Content-Type if data is undefined\n          delete requestHeaders[key];\n        } else {\n          // Otherwise add header to the request\n          request.setRequestHeader(key, val);\n        }\n      });\n    }\n\n    // Add withCredentials to request if needed\n    if (!utils.isUndefined(config.withCredentials)) {\n      request.withCredentials = !!config.withCredentials;\n    }\n\n    // Add responseType to request if needed\n    if (responseType && responseType !== 'json') {\n      request.responseType = config.responseType;\n    }\n\n    // Handle progress if needed\n    if (typeof config.onDownloadProgress === 'function') {\n      request.addEventListener('progress', config.onDownloadProgress);\n    }\n\n    // Not all browsers support upload events\n    if (typeof config.onUploadProgress === 'function' && request.upload) {\n      request.upload.addEventListener('progress', config.onUploadProgress);\n    }\n\n    if (config.cancelToken || config.signal) {\n      // Handle cancellation\n      // eslint-disable-next-line func-names\n      onCanceled = function(cancel) {\n        if (!request) {\n          return;\n        }\n        reject(!cancel || (cancel && cancel.type) ? new Cancel('canceled') : cancel);\n        request.abort();\n        request = null;\n      };\n\n      config.cancelToken && config.cancelToken.subscribe(onCanceled);\n      if (config.signal) {\n        config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled);\n      }\n    }\n\n    if (!requestData) {\n      requestData = null;\n    }\n\n    // Send the request\n    request.send(requestData);\n  });\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar bind = require('./helpers/bind');\nvar Axios = require('./core/Axios');\nvar mergeConfig = require('./core/mergeConfig');\nvar defaults = require('./defaults');\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n  var context = new Axios(defaultConfig);\n  var instance = bind(Axios.prototype.request, context);\n\n  // Copy axios.prototype to instance\n  utils.extend(instance, Axios.prototype, context);\n\n  // Copy context to instance\n  utils.extend(instance, context);\n\n  // Factory for creating new instances\n  instance.create = function create(instanceConfig) {\n    return createInstance(mergeConfig(defaultConfig, instanceConfig));\n  };\n\n  return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.Cancel = require('./cancel/Cancel');\naxios.CancelToken = require('./cancel/CancelToken');\naxios.isCancel = require('./cancel/isCancel');\naxios.VERSION = require('./env/data').version;\n\n// Expose all/spread\naxios.all = function all(promises) {\n  return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\n// Expose isAxiosError\naxios.isAxiosError = require('./helpers/isAxiosError');\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = axios;\n","'use strict';\n\n/**\n * A `Cancel` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction Cancel(message) {\n  this.message = message;\n}\n\nCancel.prototype.toString = function toString() {\n  return 'Cancel' + (this.message ? ': ' + this.message : '');\n};\n\nCancel.prototype.__CANCEL__ = true;\n\nmodule.exports = Cancel;\n","'use strict';\n\nvar Cancel = require('./Cancel');\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n  if (typeof executor !== 'function') {\n    throw new TypeError('executor must be a function.');\n  }\n\n  var resolvePromise;\n\n  this.promise = new Promise(function promiseExecutor(resolve) {\n    resolvePromise = resolve;\n  });\n\n  var token = this;\n\n  // eslint-disable-next-line func-names\n  this.promise.then(function(cancel) {\n    if (!token._listeners) return;\n\n    var i;\n    var l = token._listeners.length;\n\n    for (i = 0; i < l; i++) {\n      token._listeners[i](cancel);\n    }\n    token._listeners = null;\n  });\n\n  // eslint-disable-next-line func-names\n  this.promise.then = function(onfulfilled) {\n    var _resolve;\n    // eslint-disable-next-line func-names\n    var promise = new Promise(function(resolve) {\n      token.subscribe(resolve);\n      _resolve = resolve;\n    }).then(onfulfilled);\n\n    promise.cancel = function reject() {\n      token.unsubscribe(_resolve);\n    };\n\n    return promise;\n  };\n\n  executor(function cancel(message) {\n    if (token.reason) {\n      // Cancellation has already been requested\n      return;\n    }\n\n    token.reason = new Cancel(message);\n    resolvePromise(token.reason);\n  });\n}\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n  if (this.reason) {\n    throw this.reason;\n  }\n};\n\n/**\n * Subscribe to the cancel signal\n */\n\nCancelToken.prototype.subscribe = function subscribe(listener) {\n  if (this.reason) {\n    listener(this.reason);\n    return;\n  }\n\n  if (this._listeners) {\n    this._listeners.push(listener);\n  } else {\n    this._listeners = [listener];\n  }\n};\n\n/**\n * Unsubscribe from the cancel signal\n */\n\nCancelToken.prototype.unsubscribe = function unsubscribe(listener) {\n  if (!this._listeners) {\n    return;\n  }\n  var index = this._listeners.indexOf(listener);\n  if (index !== -1) {\n    this._listeners.splice(index, 1);\n  }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n  var cancel;\n  var token = new CancelToken(function executor(c) {\n    cancel = c;\n  });\n  return {\n    token: token,\n    cancel: cancel\n  };\n};\n\nmodule.exports = CancelToken;\n","'use strict';\n\nmodule.exports = function isCancel(value) {\n  return !!(value && value.__CANCEL__);\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar buildURL = require('../helpers/buildURL');\nvar InterceptorManager = require('./InterceptorManager');\nvar dispatchRequest = require('./dispatchRequest');\nvar mergeConfig = require('./mergeConfig');\nvar validator = require('../helpers/validator');\n\nvar validators = validator.validators;\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n  this.defaults = instanceConfig;\n  this.interceptors = {\n    request: new InterceptorManager(),\n    response: new InterceptorManager()\n  };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(configOrUrl, config) {\n  /*eslint no-param-reassign:0*/\n  // Allow for axios('example/url'[, config]) a la fetch API\n  if (typeof configOrUrl === 'string') {\n    config = config || {};\n    config.url = configOrUrl;\n  } else {\n    config = configOrUrl || {};\n  }\n\n  if (!config.url) {\n    throw new Error('Provided config url is not valid');\n  }\n\n  config = mergeConfig(this.defaults, config);\n\n  // Set config.method\n  if (config.method) {\n    config.method = config.method.toLowerCase();\n  } else if (this.defaults.method) {\n    config.method = this.defaults.method.toLowerCase();\n  } else {\n    config.method = 'get';\n  }\n\n  var transitional = config.transitional;\n\n  if (transitional !== undefined) {\n    validator.assertOptions(transitional, {\n      silentJSONParsing: validators.transitional(validators.boolean),\n      forcedJSONParsing: validators.transitional(validators.boolean),\n      clarifyTimeoutError: validators.transitional(validators.boolean)\n    }, false);\n  }\n\n  // filter out skipped interceptors\n  var requestInterceptorChain = [];\n  var synchronousRequestInterceptors = true;\n  this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n    if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n      return;\n    }\n\n    synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n    requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n  });\n\n  var responseInterceptorChain = [];\n  this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n    responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n  });\n\n  var promise;\n\n  if (!synchronousRequestInterceptors) {\n    var chain = [dispatchRequest, undefined];\n\n    Array.prototype.unshift.apply(chain, requestInterceptorChain);\n    chain = chain.concat(responseInterceptorChain);\n\n    promise = Promise.resolve(config);\n    while (chain.length) {\n      promise = promise.then(chain.shift(), chain.shift());\n    }\n\n    return promise;\n  }\n\n\n  var newConfig = config;\n  while (requestInterceptorChain.length) {\n    var onFulfilled = requestInterceptorChain.shift();\n    var onRejected = requestInterceptorChain.shift();\n    try {\n      newConfig = onFulfilled(newConfig);\n    } catch (error) {\n      onRejected(error);\n      break;\n    }\n  }\n\n  try {\n    promise = dispatchRequest(newConfig);\n  } catch (error) {\n    return Promise.reject(error);\n  }\n\n  while (responseInterceptorChain.length) {\n    promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift());\n  }\n\n  return promise;\n};\n\nAxios.prototype.getUri = function getUri(config) {\n  if (!config.url) {\n    throw new Error('Provided config url is not valid');\n  }\n  config = mergeConfig(this.defaults, config);\n  return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\\?/, '');\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n  /*eslint func-names:0*/\n  Axios.prototype[method] = function(url, config) {\n    return this.request(mergeConfig(config || {}, {\n      method: method,\n      url: url,\n      data: (config || {}).data\n    }));\n  };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n  /*eslint func-names:0*/\n  Axios.prototype[method] = function(url, data, config) {\n    return this.request(mergeConfig(config || {}, {\n      method: method,\n      url: url,\n      data: data\n    }));\n  };\n});\n\nmodule.exports = Axios;\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n  this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected, options) {\n  this.handlers.push({\n    fulfilled: fulfilled,\n    rejected: rejected,\n    synchronous: options ? options.synchronous : false,\n    runWhen: options ? options.runWhen : null\n  });\n  return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n  if (this.handlers[id]) {\n    this.handlers[id] = null;\n  }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n  utils.forEach(this.handlers, function forEachHandler(h) {\n    if (h !== null) {\n      fn(h);\n    }\n  });\n};\n\nmodule.exports = InterceptorManager;\n","'use strict';\n\nvar isAbsoluteURL = require('../helpers/isAbsoluteURL');\nvar combineURLs = require('../helpers/combineURLs');\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n * @returns {string} The combined full path\n */\nmodule.exports = function buildFullPath(baseURL, requestedURL) {\n  if (baseURL && !isAbsoluteURL(requestedURL)) {\n    return combineURLs(baseURL, requestedURL);\n  }\n  return requestedURL;\n};\n","'use strict';\n\nvar enhanceError = require('./enhanceError');\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nmodule.exports = function createError(message, config, code, request, response) {\n  var error = new Error(message);\n  return enhanceError(error, config, code, request, response);\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar transformData = require('./transformData');\nvar isCancel = require('../cancel/isCancel');\nvar defaults = require('../defaults');\nvar Cancel = require('../cancel/Cancel');\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n  if (config.cancelToken) {\n    config.cancelToken.throwIfRequested();\n  }\n\n  if (config.signal && config.signal.aborted) {\n    throw new Cancel('canceled');\n  }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n  throwIfCancellationRequested(config);\n\n  // Ensure headers exist\n  config.headers = config.headers || {};\n\n  // Transform request data\n  config.data = transformData.call(\n    config,\n    config.data,\n    config.headers,\n    config.transformRequest\n  );\n\n  // Flatten headers\n  config.headers = utils.merge(\n    config.headers.common || {},\n    config.headers[config.method] || {},\n    config.headers\n  );\n\n  utils.forEach(\n    ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n    function cleanHeaderConfig(method) {\n      delete config.headers[method];\n    }\n  );\n\n  var adapter = config.adapter || defaults.adapter;\n\n  return adapter(config).then(function onAdapterResolution(response) {\n    throwIfCancellationRequested(config);\n\n    // Transform response data\n    response.data = transformData.call(\n      config,\n      response.data,\n      response.headers,\n      config.transformResponse\n    );\n\n    return response;\n  }, function onAdapterRejection(reason) {\n    if (!isCancel(reason)) {\n      throwIfCancellationRequested(config);\n\n      // Transform response data\n      if (reason && reason.response) {\n        reason.response.data = transformData.call(\n          config,\n          reason.response.data,\n          reason.response.headers,\n          config.transformResponse\n        );\n      }\n    }\n\n    return Promise.reject(reason);\n  });\n};\n","'use strict';\n\n/**\n * Update an Error with the specified config, error code, and response.\n *\n * @param {Error} error The error to update.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The error.\n */\nmodule.exports = function enhanceError(error, config, code, request, response) {\n  error.config = config;\n  if (code) {\n    error.code = code;\n  }\n\n  error.request = request;\n  error.response = response;\n  error.isAxiosError = true;\n\n  error.toJSON = function toJSON() {\n    return {\n      // Standard\n      message: this.message,\n      name: this.name,\n      // Microsoft\n      description: this.description,\n      number: this.number,\n      // Mozilla\n      fileName: this.fileName,\n      lineNumber: this.lineNumber,\n      columnNumber: this.columnNumber,\n      stack: this.stack,\n      // Axios\n      config: this.config,\n      code: this.code,\n      status: this.response && this.response.status ? this.response.status : null\n    };\n  };\n  return error;\n};\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n * @returns {Object} New object resulting from merging config2 to config1\n */\nmodule.exports = function mergeConfig(config1, config2) {\n  // eslint-disable-next-line no-param-reassign\n  config2 = config2 || {};\n  var config = {};\n\n  function getMergedValue(target, source) {\n    if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n      return utils.merge(target, source);\n    } else if (utils.isPlainObject(source)) {\n      return utils.merge({}, source);\n    } else if (utils.isArray(source)) {\n      return source.slice();\n    }\n    return source;\n  }\n\n  // eslint-disable-next-line consistent-return\n  function mergeDeepProperties(prop) {\n    if (!utils.isUndefined(config2[prop])) {\n      return getMergedValue(config1[prop], config2[prop]);\n    } else if (!utils.isUndefined(config1[prop])) {\n      return getMergedValue(undefined, config1[prop]);\n    }\n  }\n\n  // eslint-disable-next-line consistent-return\n  function valueFromConfig2(prop) {\n    if (!utils.isUndefined(config2[prop])) {\n      return getMergedValue(undefined, config2[prop]);\n    }\n  }\n\n  // eslint-disable-next-line consistent-return\n  function defaultToConfig2(prop) {\n    if (!utils.isUndefined(config2[prop])) {\n      return getMergedValue(undefined, config2[prop]);\n    } else if (!utils.isUndefined(config1[prop])) {\n      return getMergedValue(undefined, config1[prop]);\n    }\n  }\n\n  // eslint-disable-next-line consistent-return\n  function mergeDirectKeys(prop) {\n    if (prop in config2) {\n      return getMergedValue(config1[prop], config2[prop]);\n    } else if (prop in config1) {\n      return getMergedValue(undefined, config1[prop]);\n    }\n  }\n\n  var mergeMap = {\n    'url': valueFromConfig2,\n    'method': valueFromConfig2,\n    'data': valueFromConfig2,\n    'baseURL': defaultToConfig2,\n    'transformRequest': defaultToConfig2,\n    'transformResponse': defaultToConfig2,\n    'paramsSerializer': defaultToConfig2,\n    'timeout': defaultToConfig2,\n    'timeoutMessage': defaultToConfig2,\n    'withCredentials': defaultToConfig2,\n    'adapter': defaultToConfig2,\n    'responseType': defaultToConfig2,\n    'xsrfCookieName': defaultToConfig2,\n    'xsrfHeaderName': defaultToConfig2,\n    'onUploadProgress': defaultToConfig2,\n    'onDownloadProgress': defaultToConfig2,\n    'decompress': defaultToConfig2,\n    'maxContentLength': defaultToConfig2,\n    'maxBodyLength': defaultToConfig2,\n    'transport': defaultToConfig2,\n    'httpAgent': defaultToConfig2,\n    'httpsAgent': defaultToConfig2,\n    'cancelToken': defaultToConfig2,\n    'socketPath': defaultToConfig2,\n    'responseEncoding': defaultToConfig2,\n    'validateStatus': mergeDirectKeys\n  };\n\n  utils.forEach(Object.keys(config1).concat(Object.keys(config2)), function computeConfigValue(prop) {\n    var merge = mergeMap[prop] || mergeDeepProperties;\n    var configValue = merge(prop);\n    (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n  });\n\n  return config;\n};\n","'use strict';\n\nvar createError = require('./createError');\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n  var validateStatus = response.config.validateStatus;\n  if (!response.status || !validateStatus || validateStatus(response.status)) {\n    resolve(response);\n  } else {\n    reject(createError(\n      'Request failed with status code ' + response.status,\n      response.config,\n      null,\n      response.request,\n      response\n    ));\n  }\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar defaults = require('./../defaults');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n  var context = this || defaults;\n  /*eslint no-param-reassign:0*/\n  utils.forEach(fns, function transform(fn) {\n    data = fn.call(context, data, headers);\n  });\n\n  return data;\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar normalizeHeaderName = require('./helpers/normalizeHeaderName');\nvar enhanceError = require('./core/enhanceError');\n\nvar DEFAULT_CONTENT_TYPE = {\n  'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n  if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n    headers['Content-Type'] = value;\n  }\n}\n\nfunction getDefaultAdapter() {\n  var adapter;\n  if (typeof XMLHttpRequest !== 'undefined') {\n    // For browsers use XHR adapter\n    adapter = require('./adapters/xhr');\n  } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n    // For node use HTTP adapter\n    adapter = require('./adapters/http');\n  }\n  return adapter;\n}\n\nfunction stringifySafely(rawValue, parser, encoder) {\n  if (utils.isString(rawValue)) {\n    try {\n      (parser || JSON.parse)(rawValue);\n      return utils.trim(rawValue);\n    } catch (e) {\n      if (e.name !== 'SyntaxError') {\n        throw e;\n      }\n    }\n  }\n\n  return (encoder || JSON.stringify)(rawValue);\n}\n\nvar defaults = {\n\n  transitional: {\n    silentJSONParsing: true,\n    forcedJSONParsing: true,\n    clarifyTimeoutError: false\n  },\n\n  adapter: getDefaultAdapter(),\n\n  transformRequest: [function transformRequest(data, headers) {\n    normalizeHeaderName(headers, 'Accept');\n    normalizeHeaderName(headers, 'Content-Type');\n\n    if (utils.isFormData(data) ||\n      utils.isArrayBuffer(data) ||\n      utils.isBuffer(data) ||\n      utils.isStream(data) ||\n      utils.isFile(data) ||\n      utils.isBlob(data)\n    ) {\n      return data;\n    }\n    if (utils.isArrayBufferView(data)) {\n      return data.buffer;\n    }\n    if (utils.isURLSearchParams(data)) {\n      setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n      return data.toString();\n    }\n    if (utils.isObject(data) || (headers && headers['Content-Type'] === 'application/json')) {\n      setContentTypeIfUnset(headers, 'application/json');\n      return stringifySafely(data);\n    }\n    return data;\n  }],\n\n  transformResponse: [function transformResponse(data) {\n    var transitional = this.transitional || defaults.transitional;\n    var silentJSONParsing = transitional && transitional.silentJSONParsing;\n    var forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n    var strictJSONParsing = !silentJSONParsing && this.responseType === 'json';\n\n    if (strictJSONParsing || (forcedJSONParsing && utils.isString(data) && data.length)) {\n      try {\n        return JSON.parse(data);\n      } catch (e) {\n        if (strictJSONParsing) {\n          if (e.name === 'SyntaxError') {\n            throw enhanceError(e, this, 'E_JSON_PARSE');\n          }\n          throw e;\n        }\n      }\n    }\n\n    return data;\n  }],\n\n  /**\n   * A timeout in milliseconds to abort a request. If set to 0 (default) a\n   * timeout is not created.\n   */\n  timeout: 0,\n\n  xsrfCookieName: 'XSRF-TOKEN',\n  xsrfHeaderName: 'X-XSRF-TOKEN',\n\n  maxContentLength: -1,\n  maxBodyLength: -1,\n\n  validateStatus: function validateStatus(status) {\n    return status >= 200 && status < 300;\n  },\n\n  headers: {\n    common: {\n      'Accept': 'application/json, text/plain, */*'\n    }\n  }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n  defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n  defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n","module.exports = {\n  \"version\": \"0.25.0\"\n};","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n  return function wrap() {\n    var args = new Array(arguments.length);\n    for (var i = 0; i < args.length; i++) {\n      args[i] = arguments[i];\n    }\n    return fn.apply(thisArg, args);\n  };\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n  return encodeURIComponent(val).\n    replace(/%3A/gi, ':').\n    replace(/%24/g, '$').\n    replace(/%2C/gi, ',').\n    replace(/%20/g, '+').\n    replace(/%5B/gi, '[').\n    replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n  /*eslint no-param-reassign:0*/\n  if (!params) {\n    return url;\n  }\n\n  var serializedParams;\n  if (paramsSerializer) {\n    serializedParams = paramsSerializer(params);\n  } else if (utils.isURLSearchParams(params)) {\n    serializedParams = params.toString();\n  } else {\n    var parts = [];\n\n    utils.forEach(params, function serialize(val, key) {\n      if (val === null || typeof val === 'undefined') {\n        return;\n      }\n\n      if (utils.isArray(val)) {\n        key = key + '[]';\n      } else {\n        val = [val];\n      }\n\n      utils.forEach(val, function parseValue(v) {\n        if (utils.isDate(v)) {\n          v = v.toISOString();\n        } else if (utils.isObject(v)) {\n          v = JSON.stringify(v);\n        }\n        parts.push(encode(key) + '=' + encode(v));\n      });\n    });\n\n    serializedParams = parts.join('&');\n  }\n\n  if (serializedParams) {\n    var hashmarkIndex = url.indexOf('#');\n    if (hashmarkIndex !== -1) {\n      url = url.slice(0, hashmarkIndex);\n    }\n\n    url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n  }\n\n  return url;\n};\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n  return relativeURL\n    ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n    : baseURL;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n  utils.isStandardBrowserEnv() ?\n\n  // Standard browser envs support document.cookie\n    (function standardBrowserEnv() {\n      return {\n        write: function write(name, value, expires, path, domain, secure) {\n          var cookie = [];\n          cookie.push(name + '=' + encodeURIComponent(value));\n\n          if (utils.isNumber(expires)) {\n            cookie.push('expires=' + new Date(expires).toGMTString());\n          }\n\n          if (utils.isString(path)) {\n            cookie.push('path=' + path);\n          }\n\n          if (utils.isString(domain)) {\n            cookie.push('domain=' + domain);\n          }\n\n          if (secure === true) {\n            cookie.push('secure');\n          }\n\n          document.cookie = cookie.join('; ');\n        },\n\n        read: function read(name) {\n          var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n          return (match ? decodeURIComponent(match[3]) : null);\n        },\n\n        remove: function remove(name) {\n          this.write(name, '', Date.now() - 86400000);\n        }\n      };\n    })() :\n\n  // Non standard browser env (web workers, react-native) lack needed support.\n    (function nonStandardBrowserEnv() {\n      return {\n        write: function write() {},\n        read: function read() { return null; },\n        remove: function remove() {}\n      };\n    })()\n);\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n  // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n  // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n  // by any combination of letters, digits, plus, period, or hyphen.\n  return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nmodule.exports = function isAxiosError(payload) {\n  return utils.isObject(payload) && (payload.isAxiosError === true);\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n  utils.isStandardBrowserEnv() ?\n\n  // Standard browser envs have full support of the APIs needed to test\n  // whether the request URL is of the same origin as current location.\n    (function standardBrowserEnv() {\n      var msie = /(msie|trident)/i.test(navigator.userAgent);\n      var urlParsingNode = document.createElement('a');\n      var originURL;\n\n      /**\n    * Parse a URL to discover it's components\n    *\n    * @param {String} url The URL to be parsed\n    * @returns {Object}\n    */\n      function resolveURL(url) {\n        var href = url;\n\n        if (msie) {\n        // IE needs attribute set twice to normalize properties\n          urlParsingNode.setAttribute('href', href);\n          href = urlParsingNode.href;\n        }\n\n        urlParsingNode.setAttribute('href', href);\n\n        // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n        return {\n          href: urlParsingNode.href,\n          protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n          host: urlParsingNode.host,\n          search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n          hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n          hostname: urlParsingNode.hostname,\n          port: urlParsingNode.port,\n          pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n            urlParsingNode.pathname :\n            '/' + urlParsingNode.pathname\n        };\n      }\n\n      originURL = resolveURL(window.location.href);\n\n      /**\n    * Determine if a URL shares the same origin as the current location\n    *\n    * @param {String} requestURL The URL to test\n    * @returns {boolean} True if URL shares the same origin, otherwise false\n    */\n      return function isURLSameOrigin(requestURL) {\n        var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n        return (parsed.protocol === originURL.protocol &&\n            parsed.host === originURL.host);\n      };\n    })() :\n\n  // Non standard browser envs (web workers, react-native) lack needed support.\n    (function nonStandardBrowserEnv() {\n      return function isURLSameOrigin() {\n        return true;\n      };\n    })()\n);\n","'use strict';\n\nvar utils = require('../utils');\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n  utils.forEach(headers, function processHeader(value, name) {\n    if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n      headers[normalizedName] = value;\n      delete headers[name];\n    }\n  });\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = [\n  'age', 'authorization', 'content-length', 'content-type', 'etag',\n  'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n  'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n  'referer', 'retry-after', 'user-agent'\n];\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n  var parsed = {};\n  var key;\n  var val;\n  var i;\n\n  if (!headers) { return parsed; }\n\n  utils.forEach(headers.split('\\n'), function parser(line) {\n    i = line.indexOf(':');\n    key = utils.trim(line.substr(0, i)).toLowerCase();\n    val = utils.trim(line.substr(i + 1));\n\n    if (key) {\n      if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n        return;\n      }\n      if (key === 'set-cookie') {\n        parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n      } else {\n        parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n      }\n    }\n  });\n\n  return parsed;\n};\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n *  ```js\n *  function f(x, y, z) {}\n *  var args = [1, 2, 3];\n *  f.apply(null, args);\n *  ```\n *\n * With `spread` this example can be re-written.\n *\n *  ```js\n *  spread(function(x, y, z) {})([1, 2, 3]);\n *  ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n  return function wrap(arr) {\n    return callback.apply(null, arr);\n  };\n};\n","'use strict';\n\nvar VERSION = require('../env/data').version;\n\nvar validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function(type, i) {\n  validators[type] = function validator(thing) {\n    return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n  };\n});\n\nvar deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n  function formatMessage(opt, desc) {\n    return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n  }\n\n  // eslint-disable-next-line func-names\n  return function(value, opt, opts) {\n    if (validator === false) {\n      throw new Error(formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')));\n    }\n\n    if (version && !deprecatedWarnings[opt]) {\n      deprecatedWarnings[opt] = true;\n      // eslint-disable-next-line no-console\n      console.warn(\n        formatMessage(\n          opt,\n          ' has been deprecated since v' + version + ' and will be removed in the near future'\n        )\n      );\n    }\n\n    return validator ? validator(value, opt, opts) : true;\n  };\n};\n\n/**\n * Assert object's properties type\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n  if (typeof options !== 'object') {\n    throw new TypeError('options must be an object');\n  }\n  var keys = Object.keys(options);\n  var i = keys.length;\n  while (i-- > 0) {\n    var opt = keys[i];\n    var validator = schema[opt];\n    if (validator) {\n      var value = options[opt];\n      var result = value === undefined || validator(value, opt, options);\n      if (result !== true) {\n        throw new TypeError('option ' + opt + ' must be ' + result);\n      }\n      continue;\n    }\n    if (allowUnknown !== true) {\n      throw Error('Unknown option ' + opt);\n    }\n  }\n}\n\nmodule.exports = {\n  assertOptions: assertOptions,\n  validators: validators\n};\n","'use strict';\n\nvar bind = require('./helpers/bind');\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n  return Array.isArray(val);\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n  return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n  return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n    && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n  return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n  return toString.call(val) === '[object FormData]';\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n  var result;\n  if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n    result = ArrayBuffer.isView(val);\n  } else {\n    result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n  }\n  return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n  return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n  return typeof val === 'number';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n  return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {Object} val The value to test\n * @return {boolean} True if value is a plain Object, otherwise false\n */\nfunction isPlainObject(val) {\n  if (toString.call(val) !== '[object Object]') {\n    return false;\n  }\n\n  var prototype = Object.getPrototypeOf(val);\n  return prototype === null || prototype === Object.prototype;\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n  return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n  return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n  return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n  return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n  return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nfunction isURLSearchParams(val) {\n  return toString.call(val) === '[object URLSearchParams]';\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n  return str.trim ? str.trim() : str.replace(/^\\s+|\\s+$/g, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n *  typeof window -> undefined\n *  typeof document -> undefined\n *\n * react-native:\n *  navigator.product -> 'ReactNative'\n * nativescript\n *  navigator.product -> 'NativeScript' or 'NS'\n */\nfunction isStandardBrowserEnv() {\n  if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||\n                                           navigator.product === 'NativeScript' ||\n                                           navigator.product === 'NS')) {\n    return false;\n  }\n  return (\n    typeof window !== 'undefined' &&\n    typeof document !== 'undefined'\n  );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n  // Don't bother if no value provided\n  if (obj === null || typeof obj === 'undefined') {\n    return;\n  }\n\n  // Force an array if not already something iterable\n  if (typeof obj !== 'object') {\n    /*eslint no-param-reassign:0*/\n    obj = [obj];\n  }\n\n  if (isArray(obj)) {\n    // Iterate over array values\n    for (var i = 0, l = obj.length; i < l; i++) {\n      fn.call(null, obj[i], i, obj);\n    }\n  } else {\n    // Iterate over object keys\n    for (var key in obj) {\n      if (Object.prototype.hasOwnProperty.call(obj, key)) {\n        fn.call(null, obj[key], key, obj);\n      }\n    }\n  }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n  var result = {};\n  function assignValue(val, key) {\n    if (isPlainObject(result[key]) && isPlainObject(val)) {\n      result[key] = merge(result[key], val);\n    } else if (isPlainObject(val)) {\n      result[key] = merge({}, val);\n    } else if (isArray(val)) {\n      result[key] = val.slice();\n    } else {\n      result[key] = val;\n    }\n  }\n\n  for (var i = 0, l = arguments.length; i < l; i++) {\n    forEach(arguments[i], assignValue);\n  }\n  return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n  forEach(b, function assignValue(val, key) {\n    if (thisArg && typeof val === 'function') {\n      a[key] = bind(val, thisArg);\n    } else {\n      a[key] = val;\n    }\n  });\n  return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n * @return {string} content value without BOM\n */\nfunction stripBOM(content) {\n  if (content.charCodeAt(0) === 0xFEFF) {\n    content = content.slice(1);\n  }\n  return content;\n}\n\nmodule.exports = {\n  isArray: isArray,\n  isArrayBuffer: isArrayBuffer,\n  isBuffer: isBuffer,\n  isFormData: isFormData,\n  isArrayBufferView: isArrayBufferView,\n  isString: isString,\n  isNumber: isNumber,\n  isObject: isObject,\n  isPlainObject: isPlainObject,\n  isUndefined: isUndefined,\n  isDate: isDate,\n  isFile: isFile,\n  isBlob: isBlob,\n  isFunction: isFunction,\n  isStream: isStream,\n  isURLSearchParams: isURLSearchParams,\n  isStandardBrowserEnv: isStandardBrowserEnv,\n  forEach: forEach,\n  merge: merge,\n  extend: extend,\n  trim: trim,\n  stripBOM: stripBOM\n};\n","exports.defaults = {};\r\n\r\nexports.set = function(name, value, options) {\r\n  // Retrieve options and defaults\r\n  var opts = options || {};\r\n  var defaults = exports.defaults;\r\n\r\n  // Apply default value for unspecified options\r\n  var expires  = opts.expires  || defaults.expires;\r\n  var domain   = opts.domain   || defaults.domain;\r\n  var path     = opts.path     !== undefined ? opts.path     : (defaults.path !== undefined ? defaults.path : '/');\r\n  var secure   = opts.secure   !== undefined ? opts.secure   : defaults.secure;\r\n  var httponly = opts.httponly !== undefined ? opts.httponly : defaults.httponly;\r\n  var samesite = opts.samesite !== undefined ? opts.samesite : defaults.samesite;\r\n\r\n  // Determine cookie expiration date\r\n  // If succesful the result will be a valid Date, otherwise it will be an invalid Date or false(ish)\r\n  var expDate = expires ? new Date(\r\n      // in case expires is an integer, it should specify the number of days till the cookie expires\r\n      typeof expires === 'number' ? new Date().getTime() + (expires * 864e5) :\r\n      // else expires should be either a Date object or in a format recognized by Date.parse()\r\n      expires\r\n  ) : 0;\r\n\r\n  // Set cookie\r\n  document.cookie = name.replace(/[^+#$&^`|]/g, encodeURIComponent)                // Encode cookie name\r\n  .replace('(', '%28')\r\n  .replace(')', '%29') +\r\n  '=' + value.replace(/[^+#$&/:<-\\[\\]-}]/g, encodeURIComponent) +                  // Encode cookie value (RFC6265)\r\n  (expDate && expDate.getTime() >= 0 ? ';expires=' + expDate.toUTCString() : '') + // Add expiration date\r\n  (domain   ? ';domain=' + domain     : '') +                                      // Add domain\r\n  (path     ? ';path='   + path       : '') +                                      // Add path\r\n  (secure   ? ';secure'               : '') +                                      // Add secure option\r\n  (httponly ? ';httponly'             : '') +                                      // Add httponly option\r\n  (samesite ? ';samesite=' + samesite : '');                                       // Add samesite option\r\n};\r\n\r\nexports.get = function(name) {\r\n  var cookies = document.cookie.split(';');\r\n  \r\n  // Iterate all cookies\r\n  while(cookies.length) {\r\n    var cookie = cookies.pop();\r\n\r\n    // Determine separator index (\"name=value\")\r\n    var separatorIndex = cookie.indexOf('=');\r\n\r\n    // IE<11 emits the equal sign when the cookie value is empty\r\n    separatorIndex = separatorIndex < 0 ? cookie.length : separatorIndex;\r\n\r\n    var cookie_name = decodeURIComponent(cookie.slice(0, separatorIndex).replace(/^\\s+/, ''));\r\n\r\n    // Return cookie value if the name matches\r\n    if (cookie_name === name) {\r\n      return decodeURIComponent(cookie.slice(separatorIndex + 1));\r\n    }\r\n  }\r\n\r\n  // Return `null` as the cookie was not found\r\n  return null;\r\n};\r\n\r\nexports.erase = function(name, options) {\r\n  exports.set(name, '', {\r\n    expires:  -1,\r\n    domain:   options && options.domain,\r\n    path:     options && options.path,\r\n    secure:   0,\r\n    httponly: 0}\r\n  );\r\n};\r\n\r\nexports.all = function() {\r\n  var all = {};\r\n  var cookies = document.cookie.split(';');\r\n\r\n  // Iterate all cookies\r\n  while(cookies.length) {\r\n    var cookie = cookies.pop();\r\n\r\n    // Determine separator index (\"name=value\")\r\n    var separatorIndex = cookie.indexOf('=');\r\n\r\n    // IE<11 emits the equal sign when the cookie value is empty\r\n    separatorIndex = separatorIndex < 0 ? cookie.length : separatorIndex;\r\n\r\n    // add the cookie name and value to the `all` object\r\n    var cookie_name = decodeURIComponent(cookie.slice(0, separatorIndex).replace(/^\\s+/, ''));\r\n    all[cookie_name] = decodeURIComponent(cookie.slice(separatorIndex + 1));\r\n  }\r\n\r\n  return all;\r\n};\r\n","var charenc = {\n  // UTF-8 encoding\n  utf8: {\n    // Convert a string to a byte array\n    stringToBytes: function(str) {\n      return charenc.bin.stringToBytes(unescape(encodeURIComponent(str)));\n    },\n\n    // Convert a byte array to a string\n    bytesToString: function(bytes) {\n      return decodeURIComponent(escape(charenc.bin.bytesToString(bytes)));\n    }\n  },\n\n  // Binary encoding\n  bin: {\n    // Convert a string to a byte array\n    stringToBytes: function(str) {\n      for (var bytes = [], i = 0; i < str.length; i++)\n        bytes.push(str.charCodeAt(i) & 0xFF);\n      return bytes;\n    },\n\n    // Convert a byte array to a string\n    bytesToString: function(bytes) {\n      for (var str = [], i = 0; i < bytes.length; i++)\n        str.push(String.fromCharCode(bytes[i]));\n      return str.join('');\n    }\n  }\n};\n\nmodule.exports = charenc;\n","(function() {\n  var base64map\n      = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',\n\n  crypt = {\n    // Bit-wise rotation left\n    rotl: function(n, b) {\n      return (n << b) | (n >>> (32 - b));\n    },\n\n    // Bit-wise rotation right\n    rotr: function(n, b) {\n      return (n << (32 - b)) | (n >>> b);\n    },\n\n    // Swap big-endian to little-endian and vice versa\n    endian: function(n) {\n      // If number given, swap endian\n      if (n.constructor == Number) {\n        return crypt.rotl(n, 8) & 0x00FF00FF | crypt.rotl(n, 24) & 0xFF00FF00;\n      }\n\n      // Else, assume array and swap all items\n      for (var i = 0; i < n.length; i++)\n        n[i] = crypt.endian(n[i]);\n      return n;\n    },\n\n    // Generate an array of any length of random bytes\n    randomBytes: function(n) {\n      for (var bytes = []; n > 0; n--)\n        bytes.push(Math.floor(Math.random() * 256));\n      return bytes;\n    },\n\n    // Convert a byte array to big-endian 32-bit words\n    bytesToWords: function(bytes) {\n      for (var words = [], i = 0, b = 0; i < bytes.length; i++, b += 8)\n        words[b >>> 5] |= bytes[i] << (24 - b % 32);\n      return words;\n    },\n\n    // Convert big-endian 32-bit words to a byte array\n    wordsToBytes: function(words) {\n      for (var bytes = [], b = 0; b < words.length * 32; b += 8)\n        bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF);\n      return bytes;\n    },\n\n    // Convert a byte array to a hex string\n    bytesToHex: function(bytes) {\n      for (var hex = [], i = 0; i < bytes.length; i++) {\n        hex.push((bytes[i] >>> 4).toString(16));\n        hex.push((bytes[i] & 0xF).toString(16));\n      }\n      return hex.join('');\n    },\n\n    // Convert a hex string to a byte array\n    hexToBytes: function(hex) {\n      for (var bytes = [], c = 0; c < hex.length; c += 2)\n        bytes.push(parseInt(hex.substr(c, 2), 16));\n      return bytes;\n    },\n\n    // Convert a byte array to a base-64 string\n    bytesToBase64: function(bytes) {\n      for (var base64 = [], i = 0; i < bytes.length; i += 3) {\n        var triplet = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2];\n        for (var j = 0; j < 4; j++)\n          if (i * 8 + j * 6 <= bytes.length * 8)\n            base64.push(base64map.charAt((triplet >>> 6 * (3 - j)) & 0x3F));\n          else\n            base64.push('=');\n      }\n      return base64.join('');\n    },\n\n    // Convert a base-64 string to a byte array\n    base64ToBytes: function(base64) {\n      // Remove non-base-64 characters\n      base64 = base64.replace(/[^A-Z0-9+\\/]/ig, '');\n\n      for (var bytes = [], i = 0, imod4 = 0; i < base64.length;\n          imod4 = ++i % 4) {\n        if (imod4 == 0) continue;\n        bytes.push(((base64map.indexOf(base64.charAt(i - 1))\n            & (Math.pow(2, -2 * imod4 + 8) - 1)) << (imod4 * 2))\n            | (base64map.indexOf(base64.charAt(i)) >>> (6 - imod4 * 2)));\n      }\n      return bytes;\n    }\n  };\n\n  module.exports = crypt;\n})();\n","var MILLISECONDS_IN_MINUTE = 60000\n\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 */\nmodule.exports = function getTimezoneOffsetInMilliseconds (dirtyDate) {\n  var date = new Date(dirtyDate.getTime())\n  var baseTimezoneOffset = date.getTimezoneOffset()\n  date.setSeconds(0, 0)\n  var millisecondsPartOfTimezoneOffset = date.getTime() % MILLISECONDS_IN_MINUTE\n\n  return baseTimezoneOffset * MILLISECONDS_IN_MINUTE + millisecondsPartOfTimezoneOffset\n}\n","var parse = require('../parse/index.js')\n\n/**\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 * @param {Date|String|Number} date - the date to be changed\n * @param {Number} amount - the amount of days to be added\n * @returns {Date} the new date with the days added\n *\n * @example\n * // Add 10 days to 1 September 2014:\n * var result = addDays(new Date(2014, 8, 1), 10)\n * //=> Thu Sep 11 2014 00:00:00\n */\nfunction addDays (dirtyDate, dirtyAmount) {\n  var date = parse(dirtyDate)\n  var amount = Number(dirtyAmount)\n  date.setDate(date.getDate() + amount)\n  return date\n}\n\nmodule.exports = addDays\n","var addMilliseconds = require('../add_milliseconds/index.js')\n\nvar MILLISECONDS_IN_HOUR = 3600000\n\n/**\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 * @param {Date|String|Number} date - the date to be changed\n * @param {Number} amount - the amount of hours to be added\n * @returns {Date} the new date with the hours added\n *\n * @example\n * // Add 2 hours to 10 July 2014 23:00:00:\n * var result = addHours(new Date(2014, 6, 10, 23, 0), 2)\n * //=> Fri Jul 11 2014 01:00:00\n */\nfunction addHours (dirtyDate, dirtyAmount) {\n  var amount = Number(dirtyAmount)\n  return addMilliseconds(dirtyDate, amount * MILLISECONDS_IN_HOUR)\n}\n\nmodule.exports = addHours\n","var getISOYear = require('../get_iso_year/index.js')\nvar setISOYear = require('../set_iso_year/index.js')\n\n/**\n * @category ISO Week-Numbering Year Helpers\n * @summary Add the specified number of ISO week-numbering years to the given date.\n *\n * @description\n * Add the specified number of ISO week-numbering years to the given date.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|String|Number} date - the date to be changed\n * @param {Number} amount - the amount of ISO week-numbering years to be added\n * @returns {Date} the new date with the ISO week-numbering years added\n *\n * @example\n * // Add 5 ISO week-numbering years to 2 July 2010:\n * var result = addISOYears(new Date(2010, 6, 2), 5)\n * //=> Fri Jun 26 2015 00:00:00\n */\nfunction addISOYears (dirtyDate, dirtyAmount) {\n  var amount = Number(dirtyAmount)\n  return setISOYear(dirtyDate, getISOYear(dirtyDate) + amount)\n}\n\nmodule.exports = addISOYears\n","var parse = require('../parse/index.js')\n\n/**\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 * @param {Date|String|Number} date - the date to be changed\n * @param {Number} amount - the amount of milliseconds to be added\n * @returns {Date} the new date with the milliseconds added\n *\n * @example\n * // Add 750 milliseconds to 10 July 2014 12:45:30.000:\n * var result = addMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750)\n * //=> Thu Jul 10 2014 12:45:30.750\n */\nfunction addMilliseconds (dirtyDate, dirtyAmount) {\n  var timestamp = parse(dirtyDate).getTime()\n  var amount = Number(dirtyAmount)\n  return new Date(timestamp + amount)\n}\n\nmodule.exports = addMilliseconds\n","var addMilliseconds = require('../add_milliseconds/index.js')\n\nvar MILLISECONDS_IN_MINUTE = 60000\n\n/**\n * @category Minute Helpers\n * @summary Add the specified number of minutes to the given date.\n *\n * @description\n * Add the specified number of minutes to the given date.\n *\n * @param {Date|String|Number} date - the date to be changed\n * @param {Number} amount - the amount of minutes to be added\n * @returns {Date} the new date with the minutes added\n *\n * @example\n * // Add 30 minutes to 10 July 2014 12:00:00:\n * var result = addMinutes(new Date(2014, 6, 10, 12, 0), 30)\n * //=> Thu Jul 10 2014 12:30:00\n */\nfunction addMinutes (dirtyDate, dirtyAmount) {\n  var amount = Number(dirtyAmount)\n  return addMilliseconds(dirtyDate, amount * MILLISECONDS_IN_MINUTE)\n}\n\nmodule.exports = addMinutes\n","var parse = require('../parse/index.js')\nvar getDaysInMonth = require('../get_days_in_month/index.js')\n\n/**\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 * @param {Date|String|Number} date - the date to be changed\n * @param {Number} amount - the amount of months to be added\n * @returns {Date} the new date with the months added\n *\n * @example\n * // Add 5 months to 1 September 2014:\n * var result = addMonths(new Date(2014, 8, 1), 5)\n * //=> Sun Feb 01 2015 00:00:00\n */\nfunction addMonths (dirtyDate, dirtyAmount) {\n  var date = parse(dirtyDate)\n  var amount = Number(dirtyAmount)\n  var desiredMonth = date.getMonth() + amount\n  var dateWithDesiredMonth = new Date(0)\n  dateWithDesiredMonth.setFullYear(date.getFullYear(), desiredMonth, 1)\n  dateWithDesiredMonth.setHours(0, 0, 0, 0)\n  var daysInMonth = getDaysInMonth(dateWithDesiredMonth)\n  // Set the last day of the new month\n  // if the original date was the last day of the longer month\n  date.setMonth(desiredMonth, Math.min(daysInMonth, date.getDate()))\n  return date\n}\n\nmodule.exports = addMonths\n","var addMonths = require('../add_months/index.js')\n\n/**\n * @category Quarter Helpers\n * @summary Add the specified number of year quarters to the given date.\n *\n * @description\n * Add the specified number of year quarters to the given date.\n *\n * @param {Date|String|Number} date - the date to be changed\n * @param {Number} amount - the amount of quarters to be added\n * @returns {Date} the new date with the quarters added\n *\n * @example\n * // Add 1 quarter to 1 September 2014:\n * var result = addQuarters(new Date(2014, 8, 1), 1)\n * //=> Mon Dec 01 2014 00:00:00\n */\nfunction addQuarters (dirtyDate, dirtyAmount) {\n  var amount = Number(dirtyAmount)\n  var months = amount * 3\n  return addMonths(dirtyDate, months)\n}\n\nmodule.exports = addQuarters\n","var addMilliseconds = require('../add_milliseconds/index.js')\n\n/**\n * @category Second Helpers\n * @summary Add the specified number of seconds to the given date.\n *\n * @description\n * Add the specified number of seconds to the given date.\n *\n * @param {Date|String|Number} date - the date to be changed\n * @param {Number} amount - the amount of seconds to be added\n * @returns {Date} the new date with the seconds added\n *\n * @example\n * // Add 30 seconds to 10 July 2014 12:45:00:\n * var result = addSeconds(new Date(2014, 6, 10, 12, 45, 0), 30)\n * //=> Thu Jul 10 2014 12:45:30\n */\nfunction addSeconds (dirtyDate, dirtyAmount) {\n  var amount = Number(dirtyAmount)\n  return addMilliseconds(dirtyDate, amount * 1000)\n}\n\nmodule.exports = addSeconds\n","var addDays = require('../add_days/index.js')\n\n/**\n * @category Week Helpers\n * @summary Add the specified number of weeks to the given date.\n *\n * @description\n * Add the specified number of week to the given date.\n *\n * @param {Date|String|Number} date - the date to be changed\n * @param {Number} amount - the amount of weeks to be added\n * @returns {Date} the new date with the weeks added\n *\n * @example\n * // Add 4 weeks to 1 September 2014:\n * var result = addWeeks(new Date(2014, 8, 1), 4)\n * //=> Mon Sep 29 2014 00:00:00\n */\nfunction addWeeks (dirtyDate, dirtyAmount) {\n  var amount = Number(dirtyAmount)\n  var days = amount * 7\n  return addDays(dirtyDate, days)\n}\n\nmodule.exports = addWeeks\n","var addMonths = require('../add_months/index.js')\n\n/**\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 * @param {Date|String|Number} date - the date to be changed\n * @param {Number} amount - the amount of years to be added\n * @returns {Date} the new date with the years added\n *\n * @example\n * // Add 5 years to 1 September 2014:\n * var result = addYears(new Date(2014, 8, 1), 5)\n * //=> Sun Sep 01 2019 00:00:00\n */\nfunction addYears (dirtyDate, dirtyAmount) {\n  var amount = Number(dirtyAmount)\n  return addMonths(dirtyDate, amount * 12)\n}\n\nmodule.exports = addYears\n","var parse = require('../parse/index.js')\n\n/**\n * @category Range Helpers\n * @summary Is the given date range overlapping with another date range?\n *\n * @description\n * Is the given date range overlapping with another date range?\n *\n * @param {Date|String|Number} initialRangeStartDate - the start of the initial range\n * @param {Date|String|Number} initialRangeEndDate - the end of the initial range\n * @param {Date|String|Number} comparedRangeStartDate - the start of the range to compare it with\n * @param {Date|String|Number} comparedRangeEndDate - the end of the range to compare it with\n * @returns {Boolean} whether the date ranges are overlapping\n * @throws {Error} startDate of a date range cannot be after its endDate\n *\n * @example\n * // For overlapping date ranges:\n * areRangesOverlapping(\n *   new Date(2014, 0, 10), new Date(2014, 0, 20), new Date(2014, 0, 17), new Date(2014, 0, 21)\n * )\n * //=> true\n *\n * @example\n * // For non-overlapping date ranges:\n * areRangesOverlapping(\n *   new Date(2014, 0, 10), new Date(2014, 0, 20), new Date(2014, 0, 21), new Date(2014, 0, 22)\n * )\n * //=> false\n */\nfunction areRangesOverlapping (dirtyInitialRangeStartDate, dirtyInitialRangeEndDate, dirtyComparedRangeStartDate, dirtyComparedRangeEndDate) {\n  var initialStartTime = parse(dirtyInitialRangeStartDate).getTime()\n  var initialEndTime = parse(dirtyInitialRangeEndDate).getTime()\n  var comparedStartTime = parse(dirtyComparedRangeStartDate).getTime()\n  var comparedEndTime = parse(dirtyComparedRangeEndDate).getTime()\n\n  if (initialStartTime > initialEndTime || comparedStartTime > comparedEndTime) {\n    throw new Error('The start of the range cannot be after the end of the range')\n  }\n\n  return initialStartTime < comparedEndTime && comparedStartTime < initialEndTime\n}\n\nmodule.exports = areRangesOverlapping\n","var parse = require('../parse/index.js')\n\n/**\n * @category Common Helpers\n * @summary Return an index of the closest date from the array comparing to the given date.\n *\n * @description\n * Return an index of the closest date from the array comparing to the given date.\n *\n * @param {Date|String|Number} dateToCompare - the date to compare with\n * @param {Date[]|String[]|Number[]} datesArray - the array to search\n * @returns {Number} an index of the date closest to the given date\n * @throws {TypeError} the second argument must be an instance of Array\n *\n * @example\n * // Which date is closer to 6 September 2015?\n * var dateToCompare = new Date(2015, 8, 6)\n * var datesArray = [\n *   new Date(2015, 0, 1),\n *   new Date(2016, 0, 1),\n *   new Date(2017, 0, 1)\n * ]\n * var result = closestIndexTo(dateToCompare, datesArray)\n * //=> 1\n */\nfunction closestIndexTo (dirtyDateToCompare, dirtyDatesArray) {\n  if (!(dirtyDatesArray instanceof Array)) {\n    throw new TypeError(toString.call(dirtyDatesArray) + ' is not an instance of Array')\n  }\n\n  var dateToCompare = parse(dirtyDateToCompare)\n  var timeToCompare = dateToCompare.getTime()\n\n  var result\n  var minDistance\n\n  dirtyDatesArray.forEach(function (dirtyDate, index) {\n    var currentDate = parse(dirtyDate)\n    var distance = Math.abs(timeToCompare - currentDate.getTime())\n    if (result === undefined || distance < minDistance) {\n      result = index\n      minDistance = distance\n    }\n  })\n\n  return result\n}\n\nmodule.exports = closestIndexTo\n","var parse = require('../parse/index.js')\n\n/**\n * @category Common Helpers\n * @summary Return a date from the array closest to the given date.\n *\n * @description\n * Return a date from the array closest to the given date.\n *\n * @param {Date|String|Number} dateToCompare - the date to compare with\n * @param {Date[]|String[]|Number[]} datesArray - the array to search\n * @returns {Date} the date from the array closest to the given date\n * @throws {TypeError} the second argument must be an instance of Array\n *\n * @example\n * // Which date is closer to 6 September 2015: 1 January 2000 or 1 January 2030?\n * var dateToCompare = new Date(2015, 8, 6)\n * var result = closestTo(dateToCompare, [\n *   new Date(2000, 0, 1),\n *   new Date(2030, 0, 1)\n * ])\n * //=> Tue Jan 01 2030 00:00:00\n */\nfunction closestTo (dirtyDateToCompare, dirtyDatesArray) {\n  if (!(dirtyDatesArray instanceof Array)) {\n    throw new TypeError(toString.call(dirtyDatesArray) + ' is not an instance of Array')\n  }\n\n  var dateToCompare = parse(dirtyDateToCompare)\n  var timeToCompare = dateToCompare.getTime()\n\n  var result\n  var minDistance\n\n  dirtyDatesArray.forEach(function (dirtyDate) {\n    var currentDate = parse(dirtyDate)\n    var distance = Math.abs(timeToCompare - currentDate.getTime())\n    if (result === undefined || distance < minDistance) {\n      result = currentDate\n      minDistance = distance\n    }\n  })\n\n  return result\n}\n\nmodule.exports = closestTo\n","var parse = require('../parse/index.js')\n\n/**\n * @category Common Helpers\n * @summary Compare the two dates and return -1, 0 or 1.\n *\n * @description\n * Compare the two dates and return 1 if the first date is after the second,\n * -1 if the first date is before the second or 0 if dates are equal.\n *\n * @param {Date|String|Number} dateLeft - the first date to compare\n * @param {Date|String|Number} dateRight - the second date to compare\n * @returns {Number} the result of the comparison\n *\n * @example\n * // Compare 11 February 1987 and 10 July 1989:\n * var result = compareAsc(\n *   new Date(1987, 1, 11),\n *   new Date(1989, 6, 10)\n * )\n * //=> -1\n *\n * @example\n * // Sort the array of dates:\n * var result = [\n *   new Date(1995, 6, 2),\n *   new Date(1987, 1, 11),\n *   new Date(1989, 6, 10)\n * ].sort(compareAsc)\n * //=> [\n * //   Wed Feb 11 1987 00:00:00,\n * //   Mon Jul 10 1989 00:00:00,\n * //   Sun Jul 02 1995 00:00:00\n * // ]\n */\nfunction compareAsc (dirtyDateLeft, dirtyDateRight) {\n  var dateLeft = parse(dirtyDateLeft)\n  var timeLeft = dateLeft.getTime()\n  var dateRight = parse(dirtyDateRight)\n  var timeRight = dateRight.getTime()\n\n  if (timeLeft < timeRight) {\n    return -1\n  } else if (timeLeft > timeRight) {\n    return 1\n  } else {\n    return 0\n  }\n}\n\nmodule.exports = compareAsc\n","var parse = require('../parse/index.js')\n\n/**\n * @category Common Helpers\n * @summary Compare the two dates reverse chronologically and return -1, 0 or 1.\n *\n * @description\n * Compare the two dates and return -1 if the first date is after the second,\n * 1 if the first date is before the second or 0 if dates are equal.\n *\n * @param {Date|String|Number} dateLeft - the first date to compare\n * @param {Date|String|Number} dateRight - the second date to compare\n * @returns {Number} the result of the comparison\n *\n * @example\n * // Compare 11 February 1987 and 10 July 1989 reverse chronologically:\n * var result = compareDesc(\n *   new Date(1987, 1, 11),\n *   new Date(1989, 6, 10)\n * )\n * //=> 1\n *\n * @example\n * // Sort the array of dates in reverse chronological order:\n * var result = [\n *   new Date(1995, 6, 2),\n *   new Date(1987, 1, 11),\n *   new Date(1989, 6, 10)\n * ].sort(compareDesc)\n * //=> [\n * //   Sun Jul 02 1995 00:00:00,\n * //   Mon Jul 10 1989 00:00:00,\n * //   Wed Feb 11 1987 00:00:00\n * // ]\n */\nfunction compareDesc (dirtyDateLeft, dirtyDateRight) {\n  var dateLeft = parse(dirtyDateLeft)\n  var timeLeft = dateLeft.getTime()\n  var dateRight = parse(dirtyDateRight)\n  var timeRight = dateRight.getTime()\n\n  if (timeLeft > timeRight) {\n    return -1\n  } else if (timeLeft < timeRight) {\n    return 1\n  } else {\n    return 0\n  }\n}\n\nmodule.exports = compareDesc\n","var startOfDay = require('../start_of_day/index.js')\n\nvar MILLISECONDS_IN_MINUTE = 60000\nvar MILLISECONDS_IN_DAY = 86400000\n\n/**\n * @category Day Helpers\n * @summary Get the number of calendar days between the given dates.\n *\n * @description\n * Get the number of calendar days between the given dates.\n *\n * @param {Date|String|Number} dateLeft - the later date\n * @param {Date|String|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar days\n *\n * @example\n * // How many calendar days are between\n * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?\n * var result = differenceInCalendarDays(\n *   new Date(2012, 6, 2, 0, 0),\n *   new Date(2011, 6, 2, 23, 0)\n * )\n * //=> 366\n */\nfunction differenceInCalendarDays (dirtyDateLeft, dirtyDateRight) {\n  var startOfDayLeft = startOfDay(dirtyDateLeft)\n  var startOfDayRight = startOfDay(dirtyDateRight)\n\n  var timestampLeft = startOfDayLeft.getTime() -\n    startOfDayLeft.getTimezoneOffset() * MILLISECONDS_IN_MINUTE\n  var timestampRight = startOfDayRight.getTime() -\n    startOfDayRight.getTimezoneOffset() * MILLISECONDS_IN_MINUTE\n\n  // Round the number of days to the nearest integer\n  // because the number of milliseconds in a day is not constant\n  // (e.g. it's different in the day of the daylight saving time clock shift)\n  return Math.round((timestampLeft - timestampRight) / MILLISECONDS_IN_DAY)\n}\n\nmodule.exports = differenceInCalendarDays\n","var startOfISOWeek = require('../start_of_iso_week/index.js')\n\nvar MILLISECONDS_IN_MINUTE = 60000\nvar MILLISECONDS_IN_WEEK = 604800000\n\n/**\n * @category ISO Week Helpers\n * @summary Get the number of calendar ISO weeks between the given dates.\n *\n * @description\n * Get the number of calendar ISO weeks between the given dates.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|String|Number} dateLeft - the later date\n * @param {Date|String|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar ISO weeks\n *\n * @example\n * // How many calendar ISO weeks are between 6 July 2014 and 21 July 2014?\n * var result = differenceInCalendarISOWeeks(\n *   new Date(2014, 6, 21),\n *   new Date(2014, 6, 6)\n * )\n * //=> 3\n */\nfunction differenceInCalendarISOWeeks (dirtyDateLeft, dirtyDateRight) {\n  var startOfISOWeekLeft = startOfISOWeek(dirtyDateLeft)\n  var startOfISOWeekRight = startOfISOWeek(dirtyDateRight)\n\n  var timestampLeft = startOfISOWeekLeft.getTime() -\n    startOfISOWeekLeft.getTimezoneOffset() * MILLISECONDS_IN_MINUTE\n  var timestampRight = startOfISOWeekRight.getTime() -\n    startOfISOWeekRight.getTimezoneOffset() * MILLISECONDS_IN_MINUTE\n\n  // 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  return Math.round((timestampLeft - timestampRight) / MILLISECONDS_IN_WEEK)\n}\n\nmodule.exports = differenceInCalendarISOWeeks\n","var getISOYear = require('../get_iso_year/index.js')\n\n/**\n * @category ISO Week-Numbering Year Helpers\n * @summary Get the number of calendar ISO week-numbering years between the given dates.\n *\n * @description\n * Get the number of calendar ISO week-numbering years between the given dates.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|String|Number} dateLeft - the later date\n * @param {Date|String|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar ISO week-numbering years\n *\n * @example\n * // How many calendar ISO week-numbering years are 1 January 2010 and 1 January 2012?\n * var result = differenceInCalendarISOYears(\n *   new Date(2012, 0, 1),\n *   new Date(2010, 0, 1)\n * )\n * //=> 2\n */\nfunction differenceInCalendarISOYears (dirtyDateLeft, dirtyDateRight) {\n  return getISOYear(dirtyDateLeft) - getISOYear(dirtyDateRight)\n}\n\nmodule.exports = differenceInCalendarISOYears\n","var parse = require('../parse/index.js')\n\n/**\n * @category Month Helpers\n * @summary Get the number of calendar months between the given dates.\n *\n * @description\n * Get the number of calendar months between the given dates.\n *\n * @param {Date|String|Number} dateLeft - the later date\n * @param {Date|String|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar months\n *\n * @example\n * // How many calendar months are between 31 January 2014 and 1 September 2014?\n * var result = differenceInCalendarMonths(\n *   new Date(2014, 8, 1),\n *   new Date(2014, 0, 31)\n * )\n * //=> 8\n */\nfunction differenceInCalendarMonths (dirtyDateLeft, dirtyDateRight) {\n  var dateLeft = parse(dirtyDateLeft)\n  var dateRight = parse(dirtyDateRight)\n\n  var yearDiff = dateLeft.getFullYear() - dateRight.getFullYear()\n  var monthDiff = dateLeft.getMonth() - dateRight.getMonth()\n\n  return yearDiff * 12 + monthDiff\n}\n\nmodule.exports = differenceInCalendarMonths\n","var getQuarter = require('../get_quarter/index.js')\nvar parse = require('../parse/index.js')\n\n/**\n * @category Quarter Helpers\n * @summary Get the number of calendar quarters between the given dates.\n *\n * @description\n * Get the number of calendar quarters between the given dates.\n *\n * @param {Date|String|Number} dateLeft - the later date\n * @param {Date|String|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar quarters\n *\n * @example\n * // How many calendar quarters are between 31 December 2013 and 2 July 2014?\n * var result = differenceInCalendarQuarters(\n *   new Date(2014, 6, 2),\n *   new Date(2013, 11, 31)\n * )\n * //=> 3\n */\nfunction differenceInCalendarQuarters (dirtyDateLeft, dirtyDateRight) {\n  var dateLeft = parse(dirtyDateLeft)\n  var dateRight = parse(dirtyDateRight)\n\n  var yearDiff = dateLeft.getFullYear() - dateRight.getFullYear()\n  var quarterDiff = getQuarter(dateLeft) - getQuarter(dateRight)\n\n  return yearDiff * 4 + quarterDiff\n}\n\nmodule.exports = differenceInCalendarQuarters\n","var startOfWeek = require('../start_of_week/index.js')\n\nvar MILLISECONDS_IN_MINUTE = 60000\nvar MILLISECONDS_IN_WEEK = 604800000\n\n/**\n * @category Week Helpers\n * @summary Get the number of calendar weeks between the given dates.\n *\n * @description\n * Get the number of calendar weeks between the given dates.\n *\n * @param {Date|String|Number} dateLeft - the later date\n * @param {Date|String|Number} dateRight - the earlier date\n * @param {Object} [options] - the object with options\n * @param {Number} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @returns {Number} the number of calendar weeks\n *\n * @example\n * // How many calendar weeks are between 5 July 2014 and 20 July 2014?\n * var result = differenceInCalendarWeeks(\n *   new Date(2014, 6, 20),\n *   new Date(2014, 6, 5)\n * )\n * //=> 3\n *\n * @example\n * // If the week starts on Monday,\n * // how many calendar weeks are between 5 July 2014 and 20 July 2014?\n * var result = differenceInCalendarWeeks(\n *   new Date(2014, 6, 20),\n *   new Date(2014, 6, 5),\n *   {weekStartsOn: 1}\n * )\n * //=> 2\n */\nfunction differenceInCalendarWeeks (dirtyDateLeft, dirtyDateRight, dirtyOptions) {\n  var startOfWeekLeft = startOfWeek(dirtyDateLeft, dirtyOptions)\n  var startOfWeekRight = startOfWeek(dirtyDateRight, dirtyOptions)\n\n  var timestampLeft = startOfWeekLeft.getTime() -\n    startOfWeekLeft.getTimezoneOffset() * MILLISECONDS_IN_MINUTE\n  var timestampRight = startOfWeekRight.getTime() -\n    startOfWeekRight.getTimezoneOffset() * MILLISECONDS_IN_MINUTE\n\n  // 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  return Math.round((timestampLeft - timestampRight) / MILLISECONDS_IN_WEEK)\n}\n\nmodule.exports = differenceInCalendarWeeks\n","var parse = require('../parse/index.js')\n\n/**\n * @category Year Helpers\n * @summary Get the number of calendar years between the given dates.\n *\n * @description\n * Get the number of calendar years between the given dates.\n *\n * @param {Date|String|Number} dateLeft - the later date\n * @param {Date|String|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar years\n *\n * @example\n * // How many calendar years are between 31 December 2013 and 11 February 2015?\n * var result = differenceInCalendarYears(\n *   new Date(2015, 1, 11),\n *   new Date(2013, 11, 31)\n * )\n * //=> 2\n */\nfunction differenceInCalendarYears (dirtyDateLeft, dirtyDateRight) {\n  var dateLeft = parse(dirtyDateLeft)\n  var dateRight = parse(dirtyDateRight)\n\n  return dateLeft.getFullYear() - dateRight.getFullYear()\n}\n\nmodule.exports = differenceInCalendarYears\n","var parse = require('../parse/index.js')\nvar differenceInCalendarDays = require('../difference_in_calendar_days/index.js')\nvar compareAsc = require('../compare_asc/index.js')\n\n/**\n * @category Day Helpers\n * @summary Get the number of full days between the given dates.\n *\n * @description\n * Get the number of full days between the given dates.\n *\n * @param {Date|String|Number} dateLeft - the later date\n * @param {Date|String|Number} dateRight - the earlier date\n * @returns {Number} the number of full days\n *\n * @example\n * // How many full days are between\n * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?\n * var result = differenceInDays(\n *   new Date(2012, 6, 2, 0, 0),\n *   new Date(2011, 6, 2, 23, 0)\n * )\n * //=> 365\n */\nfunction differenceInDays (dirtyDateLeft, dirtyDateRight) {\n  var dateLeft = parse(dirtyDateLeft)\n  var dateRight = parse(dirtyDateRight)\n\n  var sign = compareAsc(dateLeft, dateRight)\n  var difference = Math.abs(differenceInCalendarDays(dateLeft, dateRight))\n  dateLeft.setDate(dateLeft.getDate() - sign * difference)\n\n  // Math.abs(diff in full days - diff in calendar days) === 1 if last calendar day is not full\n  // If so, result must be decreased by 1 in absolute value\n  var isLastDayNotFull = compareAsc(dateLeft, dateRight) === -sign\n  return sign * (difference - isLastDayNotFull)\n}\n\nmodule.exports = differenceInDays\n","var differenceInMilliseconds = require('../difference_in_milliseconds/index.js')\n\nvar MILLISECONDS_IN_HOUR = 3600000\n\n/**\n * @category Hour Helpers\n * @summary Get the number of hours between the given dates.\n *\n * @description\n * Get the number of hours between the given dates.\n *\n * @param {Date|String|Number} dateLeft - the later date\n * @param {Date|String|Number} dateRight - the earlier date\n * @returns {Number} the number of hours\n *\n * @example\n * // How many hours are between 2 July 2014 06:50:00 and 2 July 2014 19:00:00?\n * var result = differenceInHours(\n *   new Date(2014, 6, 2, 19, 0),\n *   new Date(2014, 6, 2, 6, 50)\n * )\n * //=> 12\n */\nfunction differenceInHours (dirtyDateLeft, dirtyDateRight) {\n  var diff = differenceInMilliseconds(dirtyDateLeft, dirtyDateRight) / MILLISECONDS_IN_HOUR\n  return diff > 0 ? Math.floor(diff) : Math.ceil(diff)\n}\n\nmodule.exports = differenceInHours\n","var parse = require('../parse/index.js')\nvar differenceInCalendarISOYears = require('../difference_in_calendar_iso_years/index.js')\nvar compareAsc = require('../compare_asc/index.js')\nvar subISOYears = require('../sub_iso_years/index.js')\n\n/**\n * @category ISO Week-Numbering Year Helpers\n * @summary Get the number of full ISO week-numbering years between the given dates.\n *\n * @description\n * Get the number of full ISO week-numbering years between the given dates.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|String|Number} dateLeft - the later date\n * @param {Date|String|Number} dateRight - the earlier date\n * @returns {Number} the number of full ISO week-numbering years\n *\n * @example\n * // How many full ISO week-numbering years are between 1 January 2010 and 1 January 2012?\n * var result = differenceInISOYears(\n *   new Date(2012, 0, 1),\n *   new Date(2010, 0, 1)\n * )\n * //=> 1\n */\nfunction differenceInISOYears (dirtyDateLeft, dirtyDateRight) {\n  var dateLeft = parse(dirtyDateLeft)\n  var dateRight = parse(dirtyDateRight)\n\n  var sign = compareAsc(dateLeft, dateRight)\n  var difference = Math.abs(differenceInCalendarISOYears(dateLeft, dateRight))\n  dateLeft = subISOYears(dateLeft, sign * difference)\n\n  // Math.abs(diff in full ISO years - diff in calendar ISO years) === 1\n  // if last calendar ISO year is not full\n  // If so, result must be decreased by 1 in absolute value\n  var isLastISOYearNotFull = compareAsc(dateLeft, dateRight) === -sign\n  return sign * (difference - isLastISOYearNotFull)\n}\n\nmodule.exports = differenceInISOYears\n","var parse = require('../parse/index.js')\n\n/**\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 * @param {Date|String|Number} dateLeft - the later date\n * @param {Date|String|Number} dateRight - the earlier date\n * @returns {Number} the number of milliseconds\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 * var 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 */\nfunction differenceInMilliseconds (dirtyDateLeft, dirtyDateRight) {\n  var dateLeft = parse(dirtyDateLeft)\n  var dateRight = parse(dirtyDateRight)\n  return dateLeft.getTime() - dateRight.getTime()\n}\n\nmodule.exports = differenceInMilliseconds\n","var differenceInMilliseconds = require('../difference_in_milliseconds/index.js')\n\nvar MILLISECONDS_IN_MINUTE = 60000\n\n/**\n * @category Minute Helpers\n * @summary Get the number of minutes between the given dates.\n *\n * @description\n * Get the number of minutes between the given dates.\n *\n * @param {Date|String|Number} dateLeft - the later date\n * @param {Date|String|Number} dateRight - the earlier date\n * @returns {Number} the number of minutes\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 */\nfunction differenceInMinutes (dirtyDateLeft, dirtyDateRight) {\n  var diff = differenceInMilliseconds(dirtyDateLeft, dirtyDateRight) / MILLISECONDS_IN_MINUTE\n  return diff > 0 ? Math.floor(diff) : Math.ceil(diff)\n}\n\nmodule.exports = differenceInMinutes\n","var parse = require('../parse/index.js')\nvar differenceInCalendarMonths = require('../difference_in_calendar_months/index.js')\nvar compareAsc = require('../compare_asc/index.js')\n\n/**\n * @category Month Helpers\n * @summary Get the number of full months between the given dates.\n *\n * @description\n * Get the number of full months between the given dates.\n *\n * @param {Date|String|Number} dateLeft - the later date\n * @param {Date|String|Number} dateRight - the earlier date\n * @returns {Number} the number of full months\n *\n * @example\n * // How many full months are between 31 January 2014 and 1 September 2014?\n * var result = differenceInMonths(\n *   new Date(2014, 8, 1),\n *   new Date(2014, 0, 31)\n * )\n * //=> 7\n */\nfunction differenceInMonths (dirtyDateLeft, dirtyDateRight) {\n  var dateLeft = parse(dirtyDateLeft)\n  var dateRight = parse(dirtyDateRight)\n\n  var sign = compareAsc(dateLeft, dateRight)\n  var difference = Math.abs(differenceInCalendarMonths(dateLeft, dateRight))\n  dateLeft.setMonth(dateLeft.getMonth() - sign * difference)\n\n  // Math.abs(diff in full months - diff in calendar months) === 1 if last calendar month is not full\n  // If so, result must be decreased by 1 in absolute value\n  var isLastMonthNotFull = compareAsc(dateLeft, dateRight) === -sign\n  return sign * (difference - isLastMonthNotFull)\n}\n\nmodule.exports = differenceInMonths\n","var differenceInMonths = require('../difference_in_months/index.js')\n\n/**\n * @category Quarter Helpers\n * @summary Get the number of full quarters between the given dates.\n *\n * @description\n * Get the number of full quarters between the given dates.\n *\n * @param {Date|String|Number} dateLeft - the later date\n * @param {Date|String|Number} dateRight - the earlier date\n * @returns {Number} the number of full quarters\n *\n * @example\n * // How many full quarters are between 31 December 2013 and 2 July 2014?\n * var result = differenceInQuarters(\n *   new Date(2014, 6, 2),\n *   new Date(2013, 11, 31)\n * )\n * //=> 2\n */\nfunction differenceInQuarters (dirtyDateLeft, dirtyDateRight) {\n  var diff = differenceInMonths(dirtyDateLeft, dirtyDateRight) / 3\n  return diff > 0 ? Math.floor(diff) : Math.ceil(diff)\n}\n\nmodule.exports = differenceInQuarters\n","var differenceInMilliseconds = require('../difference_in_milliseconds/index.js')\n\n/**\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 * @param {Date|String|Number} dateLeft - the later date\n * @param {Date|String|Number} dateRight - the earlier date\n * @returns {Number} the number of seconds\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 * var 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 */\nfunction differenceInSeconds (dirtyDateLeft, dirtyDateRight) {\n  var diff = differenceInMilliseconds(dirtyDateLeft, dirtyDateRight) / 1000\n  return diff > 0 ? Math.floor(diff) : Math.ceil(diff)\n}\n\nmodule.exports = differenceInSeconds\n","var differenceInDays = require('../difference_in_days/index.js')\n\n/**\n * @category Week Helpers\n * @summary Get the number of full weeks between the given dates.\n *\n * @description\n * Get the number of full weeks between the given dates.\n *\n * @param {Date|String|Number} dateLeft - the later date\n * @param {Date|String|Number} dateRight - the earlier date\n * @returns {Number} the number of full weeks\n *\n * @example\n * // How many full weeks are between 5 July 2014 and 20 July 2014?\n * var result = differenceInWeeks(\n *   new Date(2014, 6, 20),\n *   new Date(2014, 6, 5)\n * )\n * //=> 2\n */\nfunction differenceInWeeks (dirtyDateLeft, dirtyDateRight) {\n  var diff = differenceInDays(dirtyDateLeft, dirtyDateRight) / 7\n  return diff > 0 ? Math.floor(diff) : Math.ceil(diff)\n}\n\nmodule.exports = differenceInWeeks\n","var parse = require('../parse/index.js')\nvar differenceInCalendarYears = require('../difference_in_calendar_years/index.js')\nvar compareAsc = require('../compare_asc/index.js')\n\n/**\n * @category Year Helpers\n * @summary Get the number of full years between the given dates.\n *\n * @description\n * Get the number of full years between the given dates.\n *\n * @param {Date|String|Number} dateLeft - the later date\n * @param {Date|String|Number} dateRight - the earlier date\n * @returns {Number} the number of full years\n *\n * @example\n * // How many full years are between 31 December 2013 and 11 February 2015?\n * var result = differenceInYears(\n *   new Date(2015, 1, 11),\n *   new Date(2013, 11, 31)\n * )\n * //=> 1\n */\nfunction differenceInYears (dirtyDateLeft, dirtyDateRight) {\n  var dateLeft = parse(dirtyDateLeft)\n  var dateRight = parse(dirtyDateRight)\n\n  var sign = compareAsc(dateLeft, dateRight)\n  var difference = Math.abs(differenceInCalendarYears(dateLeft, dateRight))\n  dateLeft.setFullYear(dateLeft.getFullYear() - sign * difference)\n\n  // Math.abs(diff in full years - diff in calendar years) === 1 if last calendar year is not full\n  // If so, result must be decreased by 1 in absolute value\n  var isLastYearNotFull = compareAsc(dateLeft, dateRight) === -sign\n  return sign * (difference - isLastYearNotFull)\n}\n\nmodule.exports = differenceInYears\n","var compareDesc = require('../compare_desc/index.js')\nvar parse = require('../parse/index.js')\nvar differenceInSeconds = require('../difference_in_seconds/index.js')\nvar differenceInMonths = require('../difference_in_months/index.js')\nvar enLocale = require('../locale/en/index.js')\n\nvar MINUTES_IN_DAY = 1440\nvar MINUTES_IN_ALMOST_TWO_DAYS = 2520\nvar MINUTES_IN_MONTH = 43200\nvar MINUTES_IN_TWO_MONTHS = 86400\n\n/**\n * @category Common Helpers\n * @summary Return the distance between the given dates in words.\n *\n * @description\n * Return the distance between the given dates in words.\n *\n * | Distance between dates                                            | Result              |\n * |-------------------------------------------------------------------|---------------------|\n * | 0 ... 30 secs                                                     | less than a minute  |\n * | 30 secs ... 1 min 30 secs                                         | 1 minute            |\n * | 1 min 30 secs ... 44 mins 30 secs                                 | [2..44] minutes     |\n * | 44 mins ... 30 secs ... 89 mins 30 secs                           | about 1 hour        |\n * | 89 mins 30 secs ... 23 hrs 59 mins 30 secs                        | about [2..24] hours |\n * | 23 hrs 59 mins 30 secs ... 41 hrs 59 mins 30 secs                 | 1 day               |\n * | 41 hrs 59 mins 30 secs ... 29 days 23 hrs 59 mins 30 secs         | [2..30] days        |\n * | 29 days 23 hrs 59 mins 30 secs ... 44 days 23 hrs 59 mins 30 secs | about 1 month       |\n * | 44 days 23 hrs 59 mins 30 secs ... 59 days 23 hrs 59 mins 30 secs | about 2 months      |\n * | 59 days 23 hrs 59 mins 30 secs ... 1 yr                           | [2..12] months      |\n * | 1 yr ... 1 yr 3 months                                            | about 1 year        |\n * | 1 yr 3 months ... 1 yr 9 month s                                  | over 1 year         |\n * | 1 yr 9 months ... 2 yrs                                           | almost 2 years      |\n * | N yrs ... N yrs 3 months                                          | about N years       |\n * | N yrs 3 months ... N yrs 9 months                                 | over N years        |\n * | N yrs 9 months ... N+1 yrs                                        | almost N+1 years    |\n *\n * With `options.includeSeconds == true`:\n * | Distance between dates | Result               |\n * |------------------------|----------------------|\n * | 0 secs ... 5 secs      | less than 5 seconds  |\n * | 5 secs ... 10 secs     | less than 10 seconds |\n * | 10 secs ... 20 secs    | less than 20 seconds |\n * | 20 secs ... 40 secs    | half a minute        |\n * | 40 secs ... 60 secs    | less than a minute   |\n * | 60 secs ... 90 secs    | 1 minute             |\n *\n * @param {Date|String|Number} dateToCompare - the date to compare with\n * @param {Date|String|Number} date - the other date\n * @param {Object} [options] - the object with options\n * @param {Boolean} [options.includeSeconds=false] - distances less than a minute are more detailed\n * @param {Boolean} [options.addSuffix=false] - result indicates if the second date is earlier or later than the first\n * @param {Object} [options.locale=enLocale] - the locale object\n * @returns {String} the distance in words\n *\n * @example\n * // What is the distance between 2 July 2014 and 1 January 2015?\n * var result = distanceInWords(\n *   new Date(2014, 6, 2),\n *   new Date(2015, 0, 1)\n * )\n * //=> '6 months'\n *\n * @example\n * // What is the distance between 1 January 2015 00:00:15\n * // and 1 January 2015 00:00:00, including seconds?\n * var result = distanceInWords(\n *   new Date(2015, 0, 1, 0, 0, 15),\n *   new Date(2015, 0, 1, 0, 0, 0),\n *   {includeSeconds: true}\n * )\n * //=> 'less than 20 seconds'\n *\n * @example\n * // What is the distance from 1 January 2016\n * // to 1 January 2015, with a suffix?\n * var result = distanceInWords(\n *   new Date(2016, 0, 1),\n *   new Date(2015, 0, 1),\n *   {addSuffix: true}\n * )\n * //=> 'about 1 year ago'\n *\n * @example\n * // What is the distance between 1 August 2016 and 1 January 2015 in Esperanto?\n * var eoLocale = require('date-fns/locale/eo')\n * var result = distanceInWords(\n *   new Date(2016, 7, 1),\n *   new Date(2015, 0, 1),\n *   {locale: eoLocale}\n * )\n * //=> 'pli ol 1 jaro'\n */\nfunction distanceInWords (dirtyDateToCompare, dirtyDate, dirtyOptions) {\n  var options = dirtyOptions || {}\n\n  var comparison = compareDesc(dirtyDateToCompare, dirtyDate)\n\n  var locale = options.locale\n  var localize = enLocale.distanceInWords.localize\n  if (locale && locale.distanceInWords && locale.distanceInWords.localize) {\n    localize = locale.distanceInWords.localize\n  }\n\n  var localizeOptions = {\n    addSuffix: Boolean(options.addSuffix),\n    comparison: comparison\n  }\n\n  var dateLeft, dateRight\n  if (comparison > 0) {\n    dateLeft = parse(dirtyDateToCompare)\n    dateRight = parse(dirtyDate)\n  } else {\n    dateLeft = parse(dirtyDate)\n    dateRight = parse(dirtyDateToCompare)\n  }\n\n  var seconds = differenceInSeconds(dateRight, dateLeft)\n  var offset = dateRight.getTimezoneOffset() - dateLeft.getTimezoneOffset()\n  var minutes = Math.round(seconds / 60) - offset\n  var months\n\n  // 0 up to 2 mins\n  if (minutes < 2) {\n    if (options.includeSeconds) {\n      if (seconds < 5) {\n        return localize('lessThanXSeconds', 5, localizeOptions)\n      } else if (seconds < 10) {\n        return localize('lessThanXSeconds', 10, localizeOptions)\n      } else if (seconds < 20) {\n        return localize('lessThanXSeconds', 20, localizeOptions)\n      } else if (seconds < 40) {\n        return localize('halfAMinute', null, localizeOptions)\n      } else if (seconds < 60) {\n        return localize('lessThanXMinutes', 1, localizeOptions)\n      } else {\n        return localize('xMinutes', 1, localizeOptions)\n      }\n    } else {\n      if (minutes === 0) {\n        return localize('lessThanXMinutes', 1, localizeOptions)\n      } else {\n        return localize('xMinutes', minutes, localizeOptions)\n      }\n    }\n\n  // 2 mins up to 0.75 hrs\n  } else if (minutes < 45) {\n    return localize('xMinutes', minutes, localizeOptions)\n\n  // 0.75 hrs up to 1.5 hrs\n  } else if (minutes < 90) {\n    return localize('aboutXHours', 1, localizeOptions)\n\n  // 1.5 hrs up to 24 hrs\n  } else if (minutes < MINUTES_IN_DAY) {\n    var hours = Math.round(minutes / 60)\n    return localize('aboutXHours', hours, localizeOptions)\n\n  // 1 day up to 1.75 days\n  } else if (minutes < MINUTES_IN_ALMOST_TWO_DAYS) {\n    return localize('xDays', 1, localizeOptions)\n\n  // 1.75 days up to 30 days\n  } else if (minutes < MINUTES_IN_MONTH) {\n    var days = Math.round(minutes / MINUTES_IN_DAY)\n    return localize('xDays', days, localizeOptions)\n\n  // 1 month up to 2 months\n  } else if (minutes < MINUTES_IN_TWO_MONTHS) {\n    months = Math.round(minutes / MINUTES_IN_MONTH)\n    return localize('aboutXMonths', months, localizeOptions)\n  }\n\n  months = differenceInMonths(dateRight, dateLeft)\n\n  // 2 months up to 12 months\n  if (months < 12) {\n    var nearestMonth = Math.round(minutes / MINUTES_IN_MONTH)\n    return localize('xMonths', nearestMonth, localizeOptions)\n\n  // 1 year up to max Date\n  } else {\n    var monthsSinceStartOfYear = months % 12\n    var years = Math.floor(months / 12)\n\n    // N years up to 1 years 3 months\n    if (monthsSinceStartOfYear < 3) {\n      return localize('aboutXYears', years, localizeOptions)\n\n    // N years 3 months up to N years 9 months\n    } else if (monthsSinceStartOfYear < 9) {\n      return localize('overXYears', years, localizeOptions)\n\n    // N years 9 months up to N year 12 months\n    } else {\n      return localize('almostXYears', years + 1, localizeOptions)\n    }\n  }\n}\n\nmodule.exports = distanceInWords\n","var compareDesc = require('../compare_desc/index.js')\nvar parse = require('../parse/index.js')\nvar differenceInSeconds = require('../difference_in_seconds/index.js')\nvar enLocale = require('../locale/en/index.js')\n\nvar MINUTES_IN_DAY = 1440\nvar MINUTES_IN_MONTH = 43200\nvar MINUTES_IN_YEAR = 525600\n\n/**\n * @category Common Helpers\n * @summary Return the distance between the given dates in words.\n *\n * @description\n * Return the distance between the given dates in words, using strict units.\n * This is like `distanceInWords`, but does not use helpers like 'almost', 'over',\n * 'less than' and the like.\n *\n * | Distance between dates | Result              |\n * |------------------------|---------------------|\n * | 0 ... 59 secs          | [0..59] seconds     |\n * | 1 ... 59 mins          | [1..59] minutes     |\n * | 1 ... 23 hrs           | [1..23] hours       |\n * | 1 ... 29 days          | [1..29] days        |\n * | 1 ... 11 months        | [1..11] months      |\n * | 1 ... N years          | [1..N]  years       |\n *\n * @param {Date|String|Number} dateToCompare - the date to compare with\n * @param {Date|String|Number} date - the other date\n * @param {Object} [options] - the object with options\n * @param {Boolean} [options.addSuffix=false] - result indicates if the second date is earlier or later than the first\n * @param {'s'|'m'|'h'|'d'|'M'|'Y'} [options.unit] - if specified, will force a unit\n * @param {'floor'|'ceil'|'round'} [options.partialMethod='floor'] - which way to round partial units\n * @param {Object} [options.locale=enLocale] - the locale object\n * @returns {String} the distance in words\n *\n * @example\n * // What is the distance between 2 July 2014 and 1 January 2015?\n * var result = distanceInWordsStrict(\n *   new Date(2014, 6, 2),\n *   new Date(2015, 0, 2)\n * )\n * //=> '6 months'\n *\n * @example\n * // What is the distance between 1 January 2015 00:00:15\n * // and 1 January 2015 00:00:00?\n * var result = distanceInWordsStrict(\n *   new Date(2015, 0, 1, 0, 0, 15),\n *   new Date(2015, 0, 1, 0, 0, 0),\n * )\n * //=> '15 seconds'\n *\n * @example\n * // What is the distance from 1 January 2016\n * // to 1 January 2015, with a suffix?\n * var result = distanceInWordsStrict(\n *   new Date(2016, 0, 1),\n *   new Date(2015, 0, 1),\n *   {addSuffix: true}\n * )\n * //=> '1 year ago'\n *\n * @example\n * // What is the distance from 1 January 2016\n * // to 1 January 2015, in minutes?\n * var result = distanceInWordsStrict(\n *   new Date(2016, 0, 1),\n *   new Date(2015, 0, 1),\n *   {unit: 'm'}\n * )\n * //=> '525600 minutes'\n *\n * @example\n * // What is the distance from 1 January 2016\n * // to 28 January 2015, in months, rounded up?\n * var result = distanceInWordsStrict(\n *   new Date(2015, 0, 28),\n *   new Date(2015, 0, 1),\n *   {unit: 'M', partialMethod: 'ceil'}\n * )\n * //=> '1 month'\n *\n * @example\n * // What is the distance between 1 August 2016 and 1 January 2015 in Esperanto?\n * var eoLocale = require('date-fns/locale/eo')\n * var result = distanceInWordsStrict(\n *   new Date(2016, 7, 1),\n *   new Date(2015, 0, 1),\n *   {locale: eoLocale}\n * )\n * //=> '1 jaro'\n */\nfunction distanceInWordsStrict (dirtyDateToCompare, dirtyDate, dirtyOptions) {\n  var options = dirtyOptions || {}\n\n  var comparison = compareDesc(dirtyDateToCompare, dirtyDate)\n\n  var locale = options.locale\n  var localize = enLocale.distanceInWords.localize\n  if (locale && locale.distanceInWords && locale.distanceInWords.localize) {\n    localize = locale.distanceInWords.localize\n  }\n\n  var localizeOptions = {\n    addSuffix: Boolean(options.addSuffix),\n    comparison: comparison\n  }\n\n  var dateLeft, dateRight\n  if (comparison > 0) {\n    dateLeft = parse(dirtyDateToCompare)\n    dateRight = parse(dirtyDate)\n  } else {\n    dateLeft = parse(dirtyDate)\n    dateRight = parse(dirtyDateToCompare)\n  }\n\n  var unit\n  var mathPartial = Math[options.partialMethod ? String(options.partialMethod) : 'floor']\n  var seconds = differenceInSeconds(dateRight, dateLeft)\n  var offset = dateRight.getTimezoneOffset() - dateLeft.getTimezoneOffset()\n  var minutes = mathPartial(seconds / 60) - offset\n  var hours, days, months, years\n\n  if (options.unit) {\n    unit = String(options.unit)\n  } else {\n    if (minutes < 1) {\n      unit = 's'\n    } else if (minutes < 60) {\n      unit = 'm'\n    } else if (minutes < MINUTES_IN_DAY) {\n      unit = 'h'\n    } else if (minutes < MINUTES_IN_MONTH) {\n      unit = 'd'\n    } else if (minutes < MINUTES_IN_YEAR) {\n      unit = 'M'\n    } else {\n      unit = 'Y'\n    }\n  }\n\n  // 0 up to 60 seconds\n  if (unit === 's') {\n    return localize('xSeconds', seconds, localizeOptions)\n\n  // 1 up to 60 mins\n  } else if (unit === 'm') {\n    return localize('xMinutes', minutes, localizeOptions)\n\n  // 1 up to 24 hours\n  } else if (unit === 'h') {\n    hours = mathPartial(minutes / 60)\n    return localize('xHours', hours, localizeOptions)\n\n  // 1 up to 30 days\n  } else if (unit === 'd') {\n    days = mathPartial(minutes / MINUTES_IN_DAY)\n    return localize('xDays', days, localizeOptions)\n\n  // 1 up to 12 months\n  } else if (unit === 'M') {\n    months = mathPartial(minutes / MINUTES_IN_MONTH)\n    return localize('xMonths', months, localizeOptions)\n\n  // 1 year up to max Date\n  } else if (unit === 'Y') {\n    years = mathPartial(minutes / MINUTES_IN_YEAR)\n    return localize('xYears', years, localizeOptions)\n  }\n\n  throw new Error('Unknown unit: ' + unit)\n}\n\nmodule.exports = distanceInWordsStrict\n","var distanceInWords = require('../distance_in_words/index.js')\n\n/**\n * @category Common Helpers\n * @summary Return the distance between the given date and now in words.\n *\n * @description\n * Return the distance between the given date and now in words.\n *\n * | Distance to now                                                   | Result              |\n * |-------------------------------------------------------------------|---------------------|\n * | 0 ... 30 secs                                                     | less than a minute  |\n * | 30 secs ... 1 min 30 secs                                         | 1 minute            |\n * | 1 min 30 secs ... 44 mins 30 secs                                 | [2..44] minutes     |\n * | 44 mins ... 30 secs ... 89 mins 30 secs                           | about 1 hour        |\n * | 89 mins 30 secs ... 23 hrs 59 mins 30 secs                        | about [2..24] hours |\n * | 23 hrs 59 mins 30 secs ... 41 hrs 59 mins 30 secs                 | 1 day               |\n * | 41 hrs 59 mins 30 secs ... 29 days 23 hrs 59 mins 30 secs         | [2..30] days        |\n * | 29 days 23 hrs 59 mins 30 secs ... 44 days 23 hrs 59 mins 30 secs | about 1 month       |\n * | 44 days 23 hrs 59 mins 30 secs ... 59 days 23 hrs 59 mins 30 secs | about 2 months      |\n * | 59 days 23 hrs 59 mins 30 secs ... 1 yr                           | [2..12] months      |\n * | 1 yr ... 1 yr 3 months                                            | about 1 year        |\n * | 1 yr 3 months ... 1 yr 9 month s                                  | over 1 year         |\n * | 1 yr 9 months ... 2 yrs                                           | almost 2 years      |\n * | N yrs ... N yrs 3 months                                          | about N years       |\n * | N yrs 3 months ... N yrs 9 months                                 | over N years        |\n * | N yrs 9 months ... N+1 yrs                                        | almost N+1 years    |\n *\n * With `options.includeSeconds == true`:\n * | Distance to now     | Result               |\n * |---------------------|----------------------|\n * | 0 secs ... 5 secs   | less than 5 seconds  |\n * | 5 secs ... 10 secs  | less than 10 seconds |\n * | 10 secs ... 20 secs | less than 20 seconds |\n * | 20 secs ... 40 secs | half a minute        |\n * | 40 secs ... 60 secs | less than a minute   |\n * | 60 secs ... 90 secs | 1 minute             |\n *\n * @param {Date|String|Number} date - the given date\n * @param {Object} [options] - the object with options\n * @param {Boolean} [options.includeSeconds=false] - distances less than a minute are more detailed\n * @param {Boolean} [options.addSuffix=false] - result specifies if the second date is earlier or later than the first\n * @param {Object} [options.locale=enLocale] - the locale object\n * @returns {String} the distance in words\n *\n * @example\n * // If today is 1 January 2015, what is the distance to 2 July 2014?\n * var result = distanceInWordsToNow(\n *   new Date(2014, 6, 2)\n * )\n * //=> '6 months'\n *\n * @example\n * // If now is 1 January 2015 00:00:00,\n * // what is the distance to 1 January 2015 00:00:15, including seconds?\n * var result = distanceInWordsToNow(\n *   new Date(2015, 0, 1, 0, 0, 15),\n *   {includeSeconds: true}\n * )\n * //=> 'less than 20 seconds'\n *\n * @example\n * // If today is 1 January 2015,\n * // what is the distance to 1 January 2016, with a suffix?\n * var result = distanceInWordsToNow(\n *   new Date(2016, 0, 1),\n *   {addSuffix: true}\n * )\n * //=> 'in about 1 year'\n *\n * @example\n * // If today is 1 January 2015,\n * // what is the distance to 1 August 2016 in Esperanto?\n * var eoLocale = require('date-fns/locale/eo')\n * var result = distanceInWordsToNow(\n *   new Date(2016, 7, 1),\n *   {locale: eoLocale}\n * )\n * //=> 'pli ol 1 jaro'\n */\nfunction distanceInWordsToNow (dirtyDate, dirtyOptions) {\n  return distanceInWords(Date.now(), dirtyDate, dirtyOptions)\n}\n\nmodule.exports = distanceInWordsToNow\n","var parse = require('../parse/index.js')\n\n/**\n * @category Day Helpers\n * @summary Return the array of dates within the specified range.\n *\n * @description\n * Return the array of dates within the specified range.\n *\n * @param {Date|String|Number} startDate - the first date\n * @param {Date|String|Number} endDate - the last date\n * @param {Number} [step=1] - the step between each day\n * @returns {Date[]} the array with starts of days from the day of startDate to the day of endDate\n * @throws {Error} startDate cannot be after endDate\n *\n * @example\n * // Each day between 6 October 2014 and 10 October 2014:\n * var result = eachDay(\n *   new Date(2014, 9, 6),\n *   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 */\nfunction eachDay (dirtyStartDate, dirtyEndDate, dirtyStep) {\n  var startDate = parse(dirtyStartDate)\n  var endDate = parse(dirtyEndDate)\n  var step = dirtyStep !== undefined ? dirtyStep : 1\n\n  var endTime = endDate.getTime()\n\n  if (startDate.getTime() > endTime) {\n    throw new Error('The first date cannot be after the second date')\n  }\n\n  var dates = []\n\n  var currentDate = startDate\n  currentDate.setHours(0, 0, 0, 0)\n\n  while (currentDate.getTime() <= endTime) {\n    dates.push(parse(currentDate))\n    currentDate.setDate(currentDate.getDate() + step)\n  }\n\n  return dates\n}\n\nmodule.exports = eachDay\n","var parse = require('../parse/index.js')\n\n/**\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 * @param {Date|String|Number} date - the original date\n * @returns {Date} the end of a day\n *\n * @example\n * // The end of a day for 2 September 2014 11:55:00:\n * var result = endOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 23:59:59.999\n */\nfunction endOfDay (dirtyDate) {\n  var date = parse(dirtyDate)\n  date.setHours(23, 59, 59, 999)\n  return date\n}\n\nmodule.exports = endOfDay\n","var parse = require('../parse/index.js')\n\n/**\n * @category Hour Helpers\n * @summary Return the end of an hour for the given date.\n *\n * @description\n * Return the end of an hour for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|String|Number} date - the original date\n * @returns {Date} the end of an hour\n *\n * @example\n * // The end of an hour for 2 September 2014 11:55:00:\n * var result = endOfHour(new Date(2014, 8, 2, 11, 55))\n * //=> Tue Sep 02 2014 11:59:59.999\n */\nfunction endOfHour (dirtyDate) {\n  var date = parse(dirtyDate)\n  date.setMinutes(59, 59, 999)\n  return date\n}\n\nmodule.exports = endOfHour\n","var endOfWeek = require('../end_of_week/index.js')\n\n/**\n * @category ISO Week Helpers\n * @summary Return the end of an ISO week for the given date.\n *\n * @description\n * Return the end of an ISO week for the given date.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|String|Number} date - the original date\n * @returns {Date} the end of an ISO week\n *\n * @example\n * // The end of an ISO week for 2 September 2014 11:55:00:\n * var result = endOfISOWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Sep 07 2014 23:59:59.999\n */\nfunction endOfISOWeek (dirtyDate) {\n  return endOfWeek(dirtyDate, {weekStartsOn: 1})\n}\n\nmodule.exports = endOfISOWeek\n","var getISOYear = require('../get_iso_year/index.js')\nvar startOfISOWeek = require('../start_of_iso_week/index.js')\n\n/**\n * @category ISO Week-Numbering Year Helpers\n * @summary Return the end of an ISO week-numbering year for the given date.\n *\n * @description\n * Return the end of an ISO week-numbering year,\n * which always starts 3 days before the year's first Thursday.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|String|Number} date - the original date\n * @returns {Date} the end of an ISO week-numbering year\n *\n * @example\n * // The end of an ISO week-numbering year for 2 July 2005:\n * var result = endOfISOYear(new Date(2005, 6, 2))\n * //=> Sun Jan 01 2006 23:59:59.999\n */\nfunction endOfISOYear (dirtyDate) {\n  var year = getISOYear(dirtyDate)\n  var fourthOfJanuaryOfNextYear = new Date(0)\n  fourthOfJanuaryOfNextYear.setFullYear(year + 1, 0, 4)\n  fourthOfJanuaryOfNextYear.setHours(0, 0, 0, 0)\n  var date = startOfISOWeek(fourthOfJanuaryOfNextYear)\n  date.setMilliseconds(date.getMilliseconds() - 1)\n  return date\n}\n\nmodule.exports = endOfISOYear\n","var parse = require('../parse/index.js')\n\n/**\n * @category Minute Helpers\n * @summary Return the end of a minute for the given date.\n *\n * @description\n * Return the end of a minute for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|String|Number} date - the original date\n * @returns {Date} the end of a minute\n *\n * @example\n * // The end of a minute for 1 December 2014 22:15:45.400:\n * var result = endOfMinute(new Date(2014, 11, 1, 22, 15, 45, 400))\n * //=> Mon Dec 01 2014 22:15:59.999\n */\nfunction endOfMinute (dirtyDate) {\n  var date = parse(dirtyDate)\n  date.setSeconds(59, 999)\n  return date\n}\n\nmodule.exports = endOfMinute\n","var parse = require('../parse/index.js')\n\n/**\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 * @param {Date|String|Number} date - the original date\n * @returns {Date} the end of a month\n *\n * @example\n * // The end of a month for 2 September 2014 11:55:00:\n * var result = endOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 30 2014 23:59:59.999\n */\nfunction endOfMonth (dirtyDate) {\n  var date = parse(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}\n\nmodule.exports = endOfMonth\n","var parse = require('../parse/index.js')\n\n/**\n * @category Quarter Helpers\n * @summary Return the end of a year quarter for the given date.\n *\n * @description\n * Return the end of a year quarter for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|String|Number} date - the original date\n * @returns {Date} the end of a quarter\n *\n * @example\n * // The end of a quarter for 2 September 2014 11:55:00:\n * var result = endOfQuarter(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 30 2014 23:59:59.999\n */\nfunction endOfQuarter (dirtyDate) {\n  var date = parse(dirtyDate)\n  var currentMonth = date.getMonth()\n  var month = currentMonth - currentMonth % 3 + 3\n  date.setMonth(month, 0)\n  date.setHours(23, 59, 59, 999)\n  return date\n}\n\nmodule.exports = endOfQuarter\n","var parse = require('../parse/index.js')\n\n/**\n * @category Second Helpers\n * @summary Return the end of a second for the given date.\n *\n * @description\n * Return the end of a second for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|String|Number} date - the original date\n * @returns {Date} the end of a second\n *\n * @example\n * // The end of a second for 1 December 2014 22:15:45.400:\n * var result = endOfSecond(new Date(2014, 11, 1, 22, 15, 45, 400))\n * //=> Mon Dec 01 2014 22:15:45.999\n */\nfunction endOfSecond (dirtyDate) {\n  var date = parse(dirtyDate)\n  date.setMilliseconds(999)\n  return date\n}\n\nmodule.exports = endOfSecond\n","var endOfDay = require('../end_of_day/index.js')\n\n/**\n * @category Day Helpers\n * @summary Return the end of today.\n *\n * @description\n * Return the end of today.\n *\n * @returns {Date} the end of today\n *\n * @example\n * // If today is 6 October 2014:\n * var result = endOfToday()\n * //=> Mon Oct 6 2014 23:59:59.999\n */\nfunction endOfToday () {\n  return endOfDay(new Date())\n}\n\nmodule.exports = endOfToday\n","/**\n * @category Day Helpers\n * @summary Return the end of tomorrow.\n *\n * @description\n * Return the end of tomorrow.\n *\n * @returns {Date} the end of tomorrow\n *\n * @example\n * // If today is 6 October 2014:\n * var result = endOfTomorrow()\n * //=> Tue Oct 7 2014 23:59:59.999\n */\nfunction endOfTomorrow () {\n  var now = new Date()\n  var year = now.getFullYear()\n  var month = now.getMonth()\n  var day = now.getDate()\n\n  var date = new Date(0)\n  date.setFullYear(year, month, day + 1)\n  date.setHours(23, 59, 59, 999)\n  return date\n}\n\nmodule.exports = endOfTomorrow\n","var parse = require('../parse/index.js')\n\n/**\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 * @param {Date|String|Number} date - the original date\n * @param {Object} [options] - the object with options\n * @param {Number} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @returns {Date} the end of a week\n *\n * @example\n * // The end of a week for 2 September 2014 11:55:00:\n * var 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 * var result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0), {weekStartsOn: 1})\n * //=> Sun Sep 07 2014 23:59:59.999\n */\nfunction endOfWeek (dirtyDate, dirtyOptions) {\n  var weekStartsOn = dirtyOptions ? (Number(dirtyOptions.weekStartsOn) || 0) : 0\n\n  var date = parse(dirtyDate)\n  var day = date.getDay()\n  var diff = (day < weekStartsOn ? -7 : 0) + 6 - (day - weekStartsOn)\n\n  date.setDate(date.getDate() + diff)\n  date.setHours(23, 59, 59, 999)\n  return date\n}\n\nmodule.exports = endOfWeek\n","var parse = require('../parse/index.js')\n\n/**\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 * @param {Date|String|Number} date - the original date\n * @returns {Date} the end of a year\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 */\nfunction endOfYear (dirtyDate) {\n  var date = parse(dirtyDate)\n  var year = date.getFullYear()\n  date.setFullYear(year + 1, 0, 0)\n  date.setHours(23, 59, 59, 999)\n  return date\n}\n\nmodule.exports = endOfYear\n","/**\n * @category Day Helpers\n * @summary Return the end of yesterday.\n *\n * @description\n * Return the end of yesterday.\n *\n * @returns {Date} the end of yesterday\n *\n * @example\n * // If today is 6 October 2014:\n * var result = endOfYesterday()\n * //=> Sun Oct 5 2014 23:59:59.999\n */\nfunction endOfYesterday () {\n  var now = new Date()\n  var year = now.getFullYear()\n  var month = now.getMonth()\n  var day = now.getDate()\n\n  var date = new Date(0)\n  date.setFullYear(year, month, day - 1)\n  date.setHours(23, 59, 59, 999)\n  return date\n}\n\nmodule.exports = endOfYesterday\n","var getDayOfYear = require('../get_day_of_year/index.js')\nvar getISOWeek = require('../get_iso_week/index.js')\nvar getISOYear = require('../get_iso_year/index.js')\nvar parse = require('../parse/index.js')\nvar isValid = require('../is_valid/index.js')\nvar enLocale = require('../locale/en/index.js')\n\n/**\n * @category Common Helpers\n * @summary Format the date.\n *\n * @description\n * Return the formatted date string in the given format.\n *\n * Accepted tokens:\n * | Unit                    | Token | Result examples                  |\n * |-------------------------|-------|----------------------------------|\n * | Month                   | M     | 1, 2, ..., 12                    |\n * |                         | Mo    | 1st, 2nd, ..., 12th              |\n * |                         | MM    | 01, 02, ..., 12                  |\n * |                         | MMM   | Jan, Feb, ..., Dec               |\n * |                         | MMMM  | January, February, ..., December |\n * | Quarter                 | Q     | 1, 2, 3, 4                       |\n * |                         | Qo    | 1st, 2nd, 3rd, 4th               |\n * | Day of month            | D     | 1, 2, ..., 31                    |\n * |                         | Do    | 1st, 2nd, ..., 31st              |\n * |                         | DD    | 01, 02, ..., 31                  |\n * | Day of year             | DDD   | 1, 2, ..., 366                   |\n * |                         | DDDo  | 1st, 2nd, ..., 366th             |\n * |                         | DDDD  | 001, 002, ..., 366               |\n * | Day of week             | d     | 0, 1, ..., 6                     |\n * |                         | do    | 0th, 1st, ..., 6th               |\n * |                         | dd    | Su, Mo, ..., Sa                  |\n * |                         | ddd   | Sun, Mon, ..., Sat               |\n * |                         | dddd  | Sunday, Monday, ..., Saturday    |\n * | Day of ISO week         | E     | 1, 2, ..., 7                     |\n * | ISO week                | W     | 1, 2, ..., 53                    |\n * |                         | Wo    | 1st, 2nd, ..., 53rd              |\n * |                         | WW    | 01, 02, ..., 53                  |\n * | Year                    | YY    | 00, 01, ..., 99                  |\n * |                         | YYYY  | 1900, 1901, ..., 2099            |\n * | ISO week-numbering year | GG    | 00, 01, ..., 99                  |\n * |                         | GGGG  | 1900, 1901, ..., 2099            |\n * | AM/PM                   | A     | AM, PM                           |\n * |                         | a     | am, pm                           |\n * |                         | aa    | a.m., p.m.                       |\n * | Hour                    | H     | 0, 1, ... 23                     |\n * |                         | HH    | 00, 01, ... 23                   |\n * |                         | h     | 1, 2, ..., 12                    |\n * |                         | hh    | 01, 02, ..., 12                  |\n * | Minute                  | m     | 0, 1, ..., 59                    |\n * |                         | mm    | 00, 01, ..., 59                  |\n * | Second                  | s     | 0, 1, ..., 59                    |\n * |                         | ss    | 00, 01, ..., 59                  |\n * | 1/10 of second          | S     | 0, 1, ..., 9                     |\n * | 1/100 of second         | SS    | 00, 01, ..., 99                  |\n * | Millisecond             | SSS   | 000, 001, ..., 999               |\n * | Timezone                | Z     | -01:00, +00:00, ... +12:00       |\n * |                         | ZZ    | -0100, +0000, ..., +1200         |\n * | Seconds timestamp       | X     | 512969520                        |\n * | Milliseconds timestamp  | x     | 512969520900                     |\n *\n * The characters wrapped in square brackets are escaped.\n *\n * The result may vary by locale.\n *\n * @param {Date|String|Number} date - the original date\n * @param {String} [format='YYYY-MM-DDTHH:mm:ss.SSSZ'] - the string of tokens\n * @param {Object} [options] - the object with options\n * @param {Object} [options.locale=enLocale] - the locale object\n * @returns {String} the formatted date string\n *\n * @example\n * // Represent 11 February 2014 in middle-endian format:\n * var result = format(\n *   new Date(2014, 1, 11),\n *   'MM/DD/YYYY'\n * )\n * //=> '02/11/2014'\n *\n * @example\n * // Represent 2 July 2014 in Esperanto:\n * var eoLocale = require('date-fns/locale/eo')\n * var result = format(\n *   new Date(2014, 6, 2),\n *   'Do [de] MMMM YYYY',\n *   {locale: eoLocale}\n * )\n * //=> '2-a de julio 2014'\n */\nfunction format (dirtyDate, dirtyFormatStr, dirtyOptions) {\n  var formatStr = dirtyFormatStr ? String(dirtyFormatStr) : 'YYYY-MM-DDTHH:mm:ss.SSSZ'\n  var options = dirtyOptions || {}\n\n  var locale = options.locale\n  var localeFormatters = enLocale.format.formatters\n  var formattingTokensRegExp = enLocale.format.formattingTokensRegExp\n  if (locale && locale.format && locale.format.formatters) {\n    localeFormatters = locale.format.formatters\n\n    if (locale.format.formattingTokensRegExp) {\n      formattingTokensRegExp = locale.format.formattingTokensRegExp\n    }\n  }\n\n  var date = parse(dirtyDate)\n\n  if (!isValid(date)) {\n    return 'Invalid Date'\n  }\n\n  var formatFn = buildFormatFn(formatStr, localeFormatters, formattingTokensRegExp)\n\n  return formatFn(date)\n}\n\nvar formatters = {\n  // Month: 1, 2, ..., 12\n  'M': function (date) {\n    return date.getMonth() + 1\n  },\n\n  // Month: 01, 02, ..., 12\n  'MM': function (date) {\n    return addLeadingZeros(date.getMonth() + 1, 2)\n  },\n\n  // Quarter: 1, 2, 3, 4\n  'Q': function (date) {\n    return Math.ceil((date.getMonth() + 1) / 3)\n  },\n\n  // Day of month: 1, 2, ..., 31\n  'D': function (date) {\n    return date.getDate()\n  },\n\n  // Day of month: 01, 02, ..., 31\n  'DD': function (date) {\n    return addLeadingZeros(date.getDate(), 2)\n  },\n\n  // Day of year: 1, 2, ..., 366\n  'DDD': function (date) {\n    return getDayOfYear(date)\n  },\n\n  // Day of year: 001, 002, ..., 366\n  'DDDD': function (date) {\n    return addLeadingZeros(getDayOfYear(date), 3)\n  },\n\n  // Day of week: 0, 1, ..., 6\n  'd': function (date) {\n    return date.getDay()\n  },\n\n  // Day of ISO week: 1, 2, ..., 7\n  'E': function (date) {\n    return date.getDay() || 7\n  },\n\n  // ISO week: 1, 2, ..., 53\n  'W': function (date) {\n    return getISOWeek(date)\n  },\n\n  // ISO week: 01, 02, ..., 53\n  'WW': function (date) {\n    return addLeadingZeros(getISOWeek(date), 2)\n  },\n\n  // Year: 00, 01, ..., 99\n  'YY': function (date) {\n    return addLeadingZeros(date.getFullYear(), 4).substr(2)\n  },\n\n  // Year: 1900, 1901, ..., 2099\n  'YYYY': function (date) {\n    return addLeadingZeros(date.getFullYear(), 4)\n  },\n\n  // ISO week-numbering year: 00, 01, ..., 99\n  'GG': function (date) {\n    return String(getISOYear(date)).substr(2)\n  },\n\n  // ISO week-numbering year: 1900, 1901, ..., 2099\n  'GGGG': function (date) {\n    return getISOYear(date)\n  },\n\n  // Hour: 0, 1, ... 23\n  'H': function (date) {\n    return date.getHours()\n  },\n\n  // Hour: 00, 01, ..., 23\n  'HH': function (date) {\n    return addLeadingZeros(date.getHours(), 2)\n  },\n\n  // Hour: 1, 2, ..., 12\n  'h': function (date) {\n    var hours = date.getHours()\n    if (hours === 0) {\n      return 12\n    } else if (hours > 12) {\n      return hours % 12\n    } else {\n      return hours\n    }\n  },\n\n  // Hour: 01, 02, ..., 12\n  'hh': function (date) {\n    return addLeadingZeros(formatters['h'](date), 2)\n  },\n\n  // Minute: 0, 1, ..., 59\n  'm': function (date) {\n    return date.getMinutes()\n  },\n\n  // Minute: 00, 01, ..., 59\n  'mm': function (date) {\n    return addLeadingZeros(date.getMinutes(), 2)\n  },\n\n  // Second: 0, 1, ..., 59\n  's': function (date) {\n    return date.getSeconds()\n  },\n\n  // Second: 00, 01, ..., 59\n  'ss': function (date) {\n    return addLeadingZeros(date.getSeconds(), 2)\n  },\n\n  // 1/10 of second: 0, 1, ..., 9\n  'S': function (date) {\n    return Math.floor(date.getMilliseconds() / 100)\n  },\n\n  // 1/100 of second: 00, 01, ..., 99\n  'SS': function (date) {\n    return addLeadingZeros(Math.floor(date.getMilliseconds() / 10), 2)\n  },\n\n  // Millisecond: 000, 001, ..., 999\n  'SSS': function (date) {\n    return addLeadingZeros(date.getMilliseconds(), 3)\n  },\n\n  // Timezone: -01:00, +00:00, ... +12:00\n  'Z': function (date) {\n    return formatTimezone(date.getTimezoneOffset(), ':')\n  },\n\n  // Timezone: -0100, +0000, ... +1200\n  'ZZ': function (date) {\n    return formatTimezone(date.getTimezoneOffset())\n  },\n\n  // Seconds timestamp: 512969520\n  'X': function (date) {\n    return Math.floor(date.getTime() / 1000)\n  },\n\n  // Milliseconds timestamp: 512969520900\n  'x': function (date) {\n    return date.getTime()\n  }\n}\n\nfunction buildFormatFn (formatStr, localeFormatters, formattingTokensRegExp) {\n  var array = formatStr.match(formattingTokensRegExp)\n  var length = array.length\n\n  var i\n  var formatter\n  for (i = 0; i < length; i++) {\n    formatter = localeFormatters[array[i]] || formatters[array[i]]\n    if (formatter) {\n      array[i] = formatter\n    } else {\n      array[i] = removeFormattingTokens(array[i])\n    }\n  }\n\n  return function (date) {\n    var output = ''\n    for (var i = 0; i < length; i++) {\n      if (array[i] instanceof Function) {\n        output += array[i](date, formatters)\n      } else {\n        output += array[i]\n      }\n    }\n    return output\n  }\n}\n\nfunction removeFormattingTokens (input) {\n  if (input.match(/\\[[\\s\\S]/)) {\n    return input.replace(/^\\[|]$/g, '')\n  }\n  return input.replace(/\\\\/g, '')\n}\n\nfunction formatTimezone (offset, delimeter) {\n  delimeter = delimeter || ''\n  var sign = offset > 0 ? '-' : '+'\n  var absOffset = Math.abs(offset)\n  var hours = Math.floor(absOffset / 60)\n  var minutes = absOffset % 60\n  return sign + addLeadingZeros(hours, 2) + delimeter + addLeadingZeros(minutes, 2)\n}\n\nfunction addLeadingZeros (number, targetLength) {\n  var output = Math.abs(number).toString()\n  while (output.length < targetLength) {\n    output = '0' + output\n  }\n  return output\n}\n\nmodule.exports = format\n","var parse = require('../parse/index.js')\n\n/**\n * @category Day Helpers\n * @summary Get the day of the month of the given date.\n *\n * @description\n * Get the day of the month of the given date.\n *\n * @param {Date|String|Number} date - the given date\n * @returns {Number} the day of month\n *\n * @example\n * // Which day of the month is 29 February 2012?\n * var result = getDate(new Date(2012, 1, 29))\n * //=> 29\n */\nfunction getDate (dirtyDate) {\n  var date = parse(dirtyDate)\n  var dayOfMonth = date.getDate()\n  return dayOfMonth\n}\n\nmodule.exports = getDate\n","var parse = require('../parse/index.js')\n\n/**\n * @category Weekday Helpers\n * @summary Get the day of the week of the given date.\n *\n * @description\n * Get the day of the week of the given date.\n *\n * @param {Date|String|Number} date - the given date\n * @returns {Number} the day of week\n *\n * @example\n * // Which day of the week is 29 February 2012?\n * var result = getDay(new Date(2012, 1, 29))\n * //=> 3\n */\nfunction getDay (dirtyDate) {\n  var date = parse(dirtyDate)\n  var day = date.getDay()\n  return day\n}\n\nmodule.exports = getDay\n","var parse = require('../parse/index.js')\nvar startOfYear = require('../start_of_year/index.js')\nvar differenceInCalendarDays = require('../difference_in_calendar_days/index.js')\n\n/**\n * @category Day Helpers\n * @summary Get the day of the year of the given date.\n *\n * @description\n * Get the day of the year of the given date.\n *\n * @param {Date|String|Number} date - the given date\n * @returns {Number} the day of year\n *\n * @example\n * // Which day of the year is 2 July 2014?\n * var result = getDayOfYear(new Date(2014, 6, 2))\n * //=> 183\n */\nfunction getDayOfYear (dirtyDate) {\n  var date = parse(dirtyDate)\n  var diff = differenceInCalendarDays(date, startOfYear(date))\n  var dayOfYear = diff + 1\n  return dayOfYear\n}\n\nmodule.exports = getDayOfYear\n","var parse = require('../parse/index.js')\n\n/**\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 * @param {Date|String|Number} date - the given date\n * @returns {Number} the number of days in a month\n *\n * @example\n * // How many days are in February 2000?\n * var result = getDaysInMonth(new Date(2000, 1))\n * //=> 29\n */\nfunction getDaysInMonth (dirtyDate) {\n  var date = parse(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}\n\nmodule.exports = getDaysInMonth\n","var isLeapYear = require('../is_leap_year/index.js')\n\n/**\n * @category Year Helpers\n * @summary Get the number of days in a year of the given date.\n *\n * @description\n * Get the number of days in a year of the given date.\n *\n * @param {Date|String|Number} date - the given date\n * @returns {Number} the number of days in a year\n *\n * @example\n * // How many days are in 2012?\n * var result = getDaysInYear(new Date(2012, 0, 1))\n * //=> 366\n */\nfunction getDaysInYear (dirtyDate) {\n  return isLeapYear(dirtyDate) ? 366 : 365\n}\n\nmodule.exports = getDaysInYear\n","var parse = require('../parse/index.js')\n\n/**\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 * @param {Date|String|Number} date - the given date\n * @returns {Number} the hours\n *\n * @example\n * // Get the hours of 29 February 2012 11:45:00:\n * var result = getHours(new Date(2012, 1, 29, 11, 45))\n * //=> 11\n */\nfunction getHours (dirtyDate) {\n  var date = parse(dirtyDate)\n  var hours = date.getHours()\n  return hours\n}\n\nmodule.exports = getHours\n","var parse = require('../parse/index.js')\n\n/**\n * @category Weekday Helpers\n * @summary Get the day of the ISO week of the given date.\n *\n * @description\n * Get the day of the ISO week of the given date,\n * which is 7 for Sunday, 1 for Monday etc.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|String|Number} date - the given date\n * @returns {Number} the day of ISO week\n *\n * @example\n * // Which day of the ISO week is 26 February 2012?\n * var result = getISODay(new Date(2012, 1, 26))\n * //=> 7\n */\nfunction getISODay (dirtyDate) {\n  var date = parse(dirtyDate)\n  var day = date.getDay()\n\n  if (day === 0) {\n    day = 7\n  }\n\n  return day\n}\n\nmodule.exports = getISODay\n","var parse = require('../parse/index.js')\nvar startOfISOWeek = require('../start_of_iso_week/index.js')\nvar startOfISOYear = require('../start_of_iso_year/index.js')\n\nvar MILLISECONDS_IN_WEEK = 604800000\n\n/**\n * @category ISO Week Helpers\n * @summary Get the ISO week of the given date.\n *\n * @description\n * Get the ISO week of the given date.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|String|Number} date - the given date\n * @returns {Number} the ISO week\n *\n * @example\n * // Which week of the ISO-week numbering year is 2 January 2005?\n * var result = getISOWeek(new Date(2005, 0, 2))\n * //=> 53\n */\nfunction getISOWeek (dirtyDate) {\n  var date = parse(dirtyDate)\n  var diff = startOfISOWeek(date).getTime() - startOfISOYear(date).getTime()\n\n  // 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  return Math.round(diff / MILLISECONDS_IN_WEEK) + 1\n}\n\nmodule.exports = getISOWeek\n","var startOfISOYear = require('../start_of_iso_year/index.js')\nvar addWeeks = require('../add_weeks/index.js')\n\nvar MILLISECONDS_IN_WEEK = 604800000\n\n/**\n * @category ISO Week-Numbering Year Helpers\n * @summary Get the number of weeks in an ISO week-numbering year of the given date.\n *\n * @description\n * Get the number of weeks in an ISO week-numbering year of the given date.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|String|Number} date - the given date\n * @returns {Number} the number of ISO weeks in a year\n *\n * @example\n * // How many weeks are in ISO week-numbering year 2015?\n * var result = getISOWeeksInYear(new Date(2015, 1, 11))\n * //=> 53\n */\nfunction getISOWeeksInYear (dirtyDate) {\n  var thisYear = startOfISOYear(dirtyDate)\n  var nextYear = startOfISOYear(addWeeks(thisYear, 60))\n  var diff = nextYear.valueOf() - thisYear.valueOf()\n  // Round the number of weeks 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  return Math.round(diff / MILLISECONDS_IN_WEEK)\n}\n\nmodule.exports = getISOWeeksInYear\n","var parse = require('../parse/index.js')\nvar startOfISOWeek = require('../start_of_iso_week/index.js')\n\n/**\n * @category ISO Week-Numbering Year Helpers\n * @summary Get the ISO week-numbering year of the given date.\n *\n * @description\n * Get the ISO week-numbering year of the given date,\n * which always starts 3 days before the year's first Thursday.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|String|Number} date - the given date\n * @returns {Number} the ISO week-numbering year\n *\n * @example\n * // Which ISO-week numbering year is 2 January 2005?\n * var result = getISOYear(new Date(2005, 0, 2))\n * //=> 2004\n */\nfunction getISOYear (dirtyDate) {\n  var date = parse(dirtyDate)\n  var year = date.getFullYear()\n\n  var fourthOfJanuaryOfNextYear = new Date(0)\n  fourthOfJanuaryOfNextYear.setFullYear(year + 1, 0, 4)\n  fourthOfJanuaryOfNextYear.setHours(0, 0, 0, 0)\n  var startOfNextYear = startOfISOWeek(fourthOfJanuaryOfNextYear)\n\n  var fourthOfJanuaryOfThisYear = new Date(0)\n  fourthOfJanuaryOfThisYear.setFullYear(year, 0, 4)\n  fourthOfJanuaryOfThisYear.setHours(0, 0, 0, 0)\n  var startOfThisYear = startOfISOWeek(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}\n\nmodule.exports = getISOYear\n","var parse = require('../parse/index.js')\n\n/**\n * @category Millisecond Helpers\n * @summary Get the milliseconds of the given date.\n *\n * @description\n * Get the milliseconds of the given date.\n *\n * @param {Date|String|Number} date - the given date\n * @returns {Number} the milliseconds\n *\n * @example\n * // Get the milliseconds of 29 February 2012 11:45:05.123:\n * var result = getMilliseconds(new Date(2012, 1, 29, 11, 45, 5, 123))\n * //=> 123\n */\nfunction getMilliseconds (dirtyDate) {\n  var date = parse(dirtyDate)\n  var milliseconds = date.getMilliseconds()\n  return milliseconds\n}\n\nmodule.exports = getMilliseconds\n","var parse = require('../parse/index.js')\n\n/**\n * @category Minute Helpers\n * @summary Get the minutes of the given date.\n *\n * @description\n * Get the minutes of the given date.\n *\n * @param {Date|String|Number} date - the given date\n * @returns {Number} the minutes\n *\n * @example\n * // Get the minutes of 29 February 2012 11:45:05:\n * var result = getMinutes(new Date(2012, 1, 29, 11, 45, 5))\n * //=> 45\n */\nfunction getMinutes (dirtyDate) {\n  var date = parse(dirtyDate)\n  var minutes = date.getMinutes()\n  return minutes\n}\n\nmodule.exports = getMinutes\n","var parse = require('../parse/index.js')\n\n/**\n * @category Month Helpers\n * @summary Get the month of the given date.\n *\n * @description\n * Get the month of the given date.\n *\n * @param {Date|String|Number} date - the given date\n * @returns {Number} the month\n *\n * @example\n * // Which month is 29 February 2012?\n * var result = getMonth(new Date(2012, 1, 29))\n * //=> 1\n */\nfunction getMonth (dirtyDate) {\n  var date = parse(dirtyDate)\n  var month = date.getMonth()\n  return month\n}\n\nmodule.exports = getMonth\n","var parse = require('../parse/index.js')\n\nvar MILLISECONDS_IN_DAY = 24 * 60 * 60 * 1000\n\n/**\n * @category Range Helpers\n * @summary Get the number of days that overlap in two date ranges\n *\n * @description\n * Get the number of days that overlap in two date ranges\n *\n * @param {Date|String|Number} initialRangeStartDate - the start of the initial range\n * @param {Date|String|Number} initialRangeEndDate - the end of the initial range\n * @param {Date|String|Number} comparedRangeStartDate - the start of the range to compare it with\n * @param {Date|String|Number} comparedRangeEndDate - the end of the range to compare it with\n * @returns {Number} the number of days that overlap in two date ranges\n * @throws {Error} startDate of a date range cannot be after its endDate\n *\n * @example\n * // For overlapping date ranges adds 1 for each started overlapping day:\n * getOverlappingDaysInRanges(\n *   new Date(2014, 0, 10), new Date(2014, 0, 20), new Date(2014, 0, 17), new Date(2014, 0, 21)\n * )\n * //=> 3\n *\n * @example\n * // For non-overlapping date ranges returns 0:\n * getOverlappingDaysInRanges(\n *   new Date(2014, 0, 10), new Date(2014, 0, 20), new Date(2014, 0, 21), new Date(2014, 0, 22)\n * )\n * //=> 0\n */\nfunction getOverlappingDaysInRanges (dirtyInitialRangeStartDate, dirtyInitialRangeEndDate, dirtyComparedRangeStartDate, dirtyComparedRangeEndDate) {\n  var initialStartTime = parse(dirtyInitialRangeStartDate).getTime()\n  var initialEndTime = parse(dirtyInitialRangeEndDate).getTime()\n  var comparedStartTime = parse(dirtyComparedRangeStartDate).getTime()\n  var comparedEndTime = parse(dirtyComparedRangeEndDate).getTime()\n\n  if (initialStartTime > initialEndTime || comparedStartTime > comparedEndTime) {\n    throw new Error('The start of the range cannot be after the end of the range')\n  }\n\n  var isOverlapping = initialStartTime < comparedEndTime && comparedStartTime < initialEndTime\n\n  if (!isOverlapping) {\n    return 0\n  }\n\n  var overlapStartDate = comparedStartTime < initialStartTime\n    ? initialStartTime\n    : comparedStartTime\n\n  var overlapEndDate = comparedEndTime > initialEndTime\n    ? initialEndTime\n    : comparedEndTime\n\n  var differenceInMs = overlapEndDate - overlapStartDate\n\n  return Math.ceil(differenceInMs / MILLISECONDS_IN_DAY)\n}\n\nmodule.exports = getOverlappingDaysInRanges\n","var parse = require('../parse/index.js')\n\n/**\n * @category Quarter Helpers\n * @summary Get the year quarter of the given date.\n *\n * @description\n * Get the year quarter of the given date.\n *\n * @param {Date|String|Number} date - the given date\n * @returns {Number} the quarter\n *\n * @example\n * // Which quarter is 2 July 2014?\n * var result = getQuarter(new Date(2014, 6, 2))\n * //=> 3\n */\nfunction getQuarter (dirtyDate) {\n  var date = parse(dirtyDate)\n  var quarter = Math.floor(date.getMonth() / 3) + 1\n  return quarter\n}\n\nmodule.exports = getQuarter\n","var parse = require('../parse/index.js')\n\n/**\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 * @param {Date|String|Number} date - the given date\n * @returns {Number} the seconds\n *\n * @example\n * // Get the seconds of 29 February 2012 11:45:05.123:\n * var result = getSeconds(new Date(2012, 1, 29, 11, 45, 5, 123))\n * //=> 5\n */\nfunction getSeconds (dirtyDate) {\n  var date = parse(dirtyDate)\n  var seconds = date.getSeconds()\n  return seconds\n}\n\nmodule.exports = getSeconds\n","var parse = require('../parse/index.js')\n\n/**\n * @category Timestamp Helpers\n * @summary Get the milliseconds timestamp of the given date.\n *\n * @description\n * Get the milliseconds timestamp of the given date.\n *\n * @param {Date|String|Number} date - the given date\n * @returns {Number} the timestamp\n *\n * @example\n * // Get the timestamp of 29 February 2012 11:45:05.123:\n * var result = getTime(new Date(2012, 1, 29, 11, 45, 5, 123))\n * //=> 1330515905123\n */\nfunction getTime (dirtyDate) {\n  var date = parse(dirtyDate)\n  var timestamp = date.getTime()\n  return timestamp\n}\n\nmodule.exports = getTime\n","var parse = require('../parse/index.js')\n\n/**\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 * @param {Date|String|Number} date - the given date\n * @returns {Number} the year\n *\n * @example\n * // Which year is 2 July 2014?\n * var result = getYear(new Date(2014, 6, 2))\n * //=> 2014\n */\nfunction getYear (dirtyDate) {\n  var date = parse(dirtyDate)\n  var year = date.getFullYear()\n  return year\n}\n\nmodule.exports = getYear\n","module.exports = {\n  addDays: require('./add_days/index.js'),\n  addHours: require('./add_hours/index.js'),\n  addISOYears: require('./add_iso_years/index.js'),\n  addMilliseconds: require('./add_milliseconds/index.js'),\n  addMinutes: require('./add_minutes/index.js'),\n  addMonths: require('./add_months/index.js'),\n  addQuarters: require('./add_quarters/index.js'),\n  addSeconds: require('./add_seconds/index.js'),\n  addWeeks: require('./add_weeks/index.js'),\n  addYears: require('./add_years/index.js'),\n  areRangesOverlapping: require('./are_ranges_overlapping/index.js'),\n  closestIndexTo: require('./closest_index_to/index.js'),\n  closestTo: require('./closest_to/index.js'),\n  compareAsc: require('./compare_asc/index.js'),\n  compareDesc: require('./compare_desc/index.js'),\n  differenceInCalendarDays: require('./difference_in_calendar_days/index.js'),\n  differenceInCalendarISOWeeks: require('./difference_in_calendar_iso_weeks/index.js'),\n  differenceInCalendarISOYears: require('./difference_in_calendar_iso_years/index.js'),\n  differenceInCalendarMonths: require('./difference_in_calendar_months/index.js'),\n  differenceInCalendarQuarters: require('./difference_in_calendar_quarters/index.js'),\n  differenceInCalendarWeeks: require('./difference_in_calendar_weeks/index.js'),\n  differenceInCalendarYears: require('./difference_in_calendar_years/index.js'),\n  differenceInDays: require('./difference_in_days/index.js'),\n  differenceInHours: require('./difference_in_hours/index.js'),\n  differenceInISOYears: require('./difference_in_iso_years/index.js'),\n  differenceInMilliseconds: require('./difference_in_milliseconds/index.js'),\n  differenceInMinutes: require('./difference_in_minutes/index.js'),\n  differenceInMonths: require('./difference_in_months/index.js'),\n  differenceInQuarters: require('./difference_in_quarters/index.js'),\n  differenceInSeconds: require('./difference_in_seconds/index.js'),\n  differenceInWeeks: require('./difference_in_weeks/index.js'),\n  differenceInYears: require('./difference_in_years/index.js'),\n  distanceInWords: require('./distance_in_words/index.js'),\n  distanceInWordsStrict: require('./distance_in_words_strict/index.js'),\n  distanceInWordsToNow: require('./distance_in_words_to_now/index.js'),\n  eachDay: require('./each_day/index.js'),\n  endOfDay: require('./end_of_day/index.js'),\n  endOfHour: require('./end_of_hour/index.js'),\n  endOfISOWeek: require('./end_of_iso_week/index.js'),\n  endOfISOYear: require('./end_of_iso_year/index.js'),\n  endOfMinute: require('./end_of_minute/index.js'),\n  endOfMonth: require('./end_of_month/index.js'),\n  endOfQuarter: require('./end_of_quarter/index.js'),\n  endOfSecond: require('./end_of_second/index.js'),\n  endOfToday: require('./end_of_today/index.js'),\n  endOfTomorrow: require('./end_of_tomorrow/index.js'),\n  endOfWeek: require('./end_of_week/index.js'),\n  endOfYear: require('./end_of_year/index.js'),\n  endOfYesterday: require('./end_of_yesterday/index.js'),\n  format: require('./format/index.js'),\n  getDate: require('./get_date/index.js'),\n  getDay: require('./get_day/index.js'),\n  getDayOfYear: require('./get_day_of_year/index.js'),\n  getDaysInMonth: require('./get_days_in_month/index.js'),\n  getDaysInYear: require('./get_days_in_year/index.js'),\n  getHours: require('./get_hours/index.js'),\n  getISODay: require('./get_iso_day/index.js'),\n  getISOWeek: require('./get_iso_week/index.js'),\n  getISOWeeksInYear: require('./get_iso_weeks_in_year/index.js'),\n  getISOYear: require('./get_iso_year/index.js'),\n  getMilliseconds: require('./get_milliseconds/index.js'),\n  getMinutes: require('./get_minutes/index.js'),\n  getMonth: require('./get_month/index.js'),\n  getOverlappingDaysInRanges: require('./get_overlapping_days_in_ranges/index.js'),\n  getQuarter: require('./get_quarter/index.js'),\n  getSeconds: require('./get_seconds/index.js'),\n  getTime: require('./get_time/index.js'),\n  getYear: require('./get_year/index.js'),\n  isAfter: require('./is_after/index.js'),\n  isBefore: require('./is_before/index.js'),\n  isDate: require('./is_date/index.js'),\n  isEqual: require('./is_equal/index.js'),\n  isFirstDayOfMonth: require('./is_first_day_of_month/index.js'),\n  isFriday: require('./is_friday/index.js'),\n  isFuture: require('./is_future/index.js'),\n  isLastDayOfMonth: require('./is_last_day_of_month/index.js'),\n  isLeapYear: require('./is_leap_year/index.js'),\n  isMonday: require('./is_monday/index.js'),\n  isPast: require('./is_past/index.js'),\n  isSameDay: require('./is_same_day/index.js'),\n  isSameHour: require('./is_same_hour/index.js'),\n  isSameISOWeek: require('./is_same_iso_week/index.js'),\n  isSameISOYear: require('./is_same_iso_year/index.js'),\n  isSameMinute: require('./is_same_minute/index.js'),\n  isSameMonth: require('./is_same_month/index.js'),\n  isSameQuarter: require('./is_same_quarter/index.js'),\n  isSameSecond: require('./is_same_second/index.js'),\n  isSameWeek: require('./is_same_week/index.js'),\n  isSameYear: require('./is_same_year/index.js'),\n  isSaturday: require('./is_saturday/index.js'),\n  isSunday: require('./is_sunday/index.js'),\n  isThisHour: require('./is_this_hour/index.js'),\n  isThisISOWeek: require('./is_this_iso_week/index.js'),\n  isThisISOYear: require('./is_this_iso_year/index.js'),\n  isThisMinute: require('./is_this_minute/index.js'),\n  isThisMonth: require('./is_this_month/index.js'),\n  isThisQuarter: require('./is_this_quarter/index.js'),\n  isThisSecond: require('./is_this_second/index.js'),\n  isThisWeek: require('./is_this_week/index.js'),\n  isThisYear: require('./is_this_year/index.js'),\n  isThursday: require('./is_thursday/index.js'),\n  isToday: require('./is_today/index.js'),\n  isTomorrow: require('./is_tomorrow/index.js'),\n  isTuesday: require('./is_tuesday/index.js'),\n  isValid: require('./is_valid/index.js'),\n  isWednesday: require('./is_wednesday/index.js'),\n  isWeekend: require('./is_weekend/index.js'),\n  isWithinRange: require('./is_within_range/index.js'),\n  isYesterday: require('./is_yesterday/index.js'),\n  lastDayOfISOWeek: require('./last_day_of_iso_week/index.js'),\n  lastDayOfISOYear: require('./last_day_of_iso_year/index.js'),\n  lastDayOfMonth: require('./last_day_of_month/index.js'),\n  lastDayOfQuarter: require('./last_day_of_quarter/index.js'),\n  lastDayOfWeek: require('./last_day_of_week/index.js'),\n  lastDayOfYear: require('./last_day_of_year/index.js'),\n  max: require('./max/index.js'),\n  min: require('./min/index.js'),\n  parse: require('./parse/index.js'),\n  setDate: require('./set_date/index.js'),\n  setDay: require('./set_day/index.js'),\n  setDayOfYear: require('./set_day_of_year/index.js'),\n  setHours: require('./set_hours/index.js'),\n  setISODay: require('./set_iso_day/index.js'),\n  setISOWeek: require('./set_iso_week/index.js'),\n  setISOYear: require('./set_iso_year/index.js'),\n  setMilliseconds: require('./set_milliseconds/index.js'),\n  setMinutes: require('./set_minutes/index.js'),\n  setMonth: require('./set_month/index.js'),\n  setQuarter: require('./set_quarter/index.js'),\n  setSeconds: require('./set_seconds/index.js'),\n  setYear: require('./set_year/index.js'),\n  startOfDay: require('./start_of_day/index.js'),\n  startOfHour: require('./start_of_hour/index.js'),\n  startOfISOWeek: require('./start_of_iso_week/index.js'),\n  startOfISOYear: require('./start_of_iso_year/index.js'),\n  startOfMinute: require('./start_of_minute/index.js'),\n  startOfMonth: require('./start_of_month/index.js'),\n  startOfQuarter: require('./start_of_quarter/index.js'),\n  startOfSecond: require('./start_of_second/index.js'),\n  startOfToday: require('./start_of_today/index.js'),\n  startOfTomorrow: require('./start_of_tomorrow/index.js'),\n  startOfWeek: require('./start_of_week/index.js'),\n  startOfYear: require('./start_of_year/index.js'),\n  startOfYesterday: require('./start_of_yesterday/index.js'),\n  subDays: require('./sub_days/index.js'),\n  subHours: require('./sub_hours/index.js'),\n  subISOYears: require('./sub_iso_years/index.js'),\n  subMilliseconds: require('./sub_milliseconds/index.js'),\n  subMinutes: require('./sub_minutes/index.js'),\n  subMonths: require('./sub_months/index.js'),\n  subQuarters: require('./sub_quarters/index.js'),\n  subSeconds: require('./sub_seconds/index.js'),\n  subWeeks: require('./sub_weeks/index.js'),\n  subYears: require('./sub_years/index.js')\n}\n","var parse = require('../parse/index.js')\n\n/**\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 * @param {Date|String|Number} date - the date that should be after the other one to return true\n * @param {Date|String|Number} dateToCompare - the date to compare with\n * @returns {Boolean} the first date is after the second date\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 */\nfunction isAfter (dirtyDate, dirtyDateToCompare) {\n  var date = parse(dirtyDate)\n  var dateToCompare = parse(dirtyDateToCompare)\n  return date.getTime() > dateToCompare.getTime()\n}\n\nmodule.exports = isAfter\n","var parse = require('../parse/index.js')\n\n/**\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 * @param {Date|String|Number} date - the date that should be before the other one to return true\n * @param {Date|String|Number} dateToCompare - the date to compare with\n * @returns {Boolean} the first date is before the second date\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 */\nfunction isBefore (dirtyDate, dirtyDateToCompare) {\n  var date = parse(dirtyDate)\n  var dateToCompare = parse(dirtyDateToCompare)\n  return date.getTime() < dateToCompare.getTime()\n}\n\nmodule.exports = isBefore\n","/**\n * @category Common Helpers\n * @summary Is the given argument an instance of Date?\n *\n * @description\n * Is the given argument an instance of Date?\n *\n * @param {*} argument - the argument to check\n * @returns {Boolean} the given argument is an instance of Date\n *\n * @example\n * // Is 'mayonnaise' a Date?\n * var result = isDate('mayonnaise')\n * //=> false\n */\nfunction isDate (argument) {\n  return argument instanceof Date\n}\n\nmodule.exports = isDate\n","var parse = require('../parse/index.js')\n\n/**\n * @category Common Helpers\n * @summary Are the given dates equal?\n *\n * @description\n * Are the given dates equal?\n *\n * @param {Date|String|Number} dateLeft - the first date to compare\n * @param {Date|String|Number} dateRight - the second date to compare\n * @returns {Boolean} the dates are equal\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 */\nfunction isEqual (dirtyLeftDate, dirtyRightDate) {\n  var dateLeft = parse(dirtyLeftDate)\n  var dateRight = parse(dirtyRightDate)\n  return dateLeft.getTime() === dateRight.getTime()\n}\n\nmodule.exports = isEqual\n","var parse = require('../parse/index.js')\n\n/**\n * @category Month Helpers\n * @summary Is the given date the first day of a month?\n *\n * @description\n * Is the given date the first day of a month?\n *\n * @param {Date|String|Number} date - the date to check\n * @returns {Boolean} the date is the first day of a month\n *\n * @example\n * // Is 1 September 2014 the first day of a month?\n * var result = isFirstDayOfMonth(new Date(2014, 8, 1))\n * //=> true\n */\nfunction isFirstDayOfMonth (dirtyDate) {\n  return parse(dirtyDate).getDate() === 1\n}\n\nmodule.exports = isFirstDayOfMonth\n","var parse = require('../parse/index.js')\n\n/**\n * @category Weekday Helpers\n * @summary Is the given date Friday?\n *\n * @description\n * Is the given date Friday?\n *\n * @param {Date|String|Number} date - the date to check\n * @returns {Boolean} the date is Friday\n *\n * @example\n * // Is 26 September 2014 Friday?\n * var result = isFriday(new Date(2014, 8, 26))\n * //=> true\n */\nfunction isFriday (dirtyDate) {\n  return parse(dirtyDate).getDay() === 5\n}\n\nmodule.exports = isFriday\n","var parse = require('../parse/index.js')\n\n/**\n * @category Common Helpers\n * @summary Is the given date in the future?\n *\n * @description\n * Is the given date in the future?\n *\n * @param {Date|String|Number} date - the date to check\n * @returns {Boolean} the date is in the future\n *\n * @example\n * // If today is 6 October 2014, is 31 December 2014 in the future?\n * var result = isFuture(new Date(2014, 11, 31))\n * //=> true\n */\nfunction isFuture (dirtyDate) {\n  return parse(dirtyDate).getTime() > new Date().getTime()\n}\n\nmodule.exports = isFuture\n","var parse = require('../parse/index.js')\nvar endOfDay = require('../end_of_day/index.js')\nvar endOfMonth = require('../end_of_month/index.js')\n\n/**\n * @category Month Helpers\n * @summary Is the given date the last day of a month?\n *\n * @description\n * Is the given date the last day of a month?\n *\n * @param {Date|String|Number} date - the date to check\n * @returns {Boolean} the date is the last day of a month\n *\n * @example\n * // Is 28 February 2014 the last day of a month?\n * var result = isLastDayOfMonth(new Date(2014, 1, 28))\n * //=> true\n */\nfunction isLastDayOfMonth (dirtyDate) {\n  var date = parse(dirtyDate)\n  return endOfDay(date).getTime() === endOfMonth(date).getTime()\n}\n\nmodule.exports = isLastDayOfMonth\n","var parse = require('../parse/index.js')\n\n/**\n * @category Year Helpers\n * @summary Is the given date in the leap year?\n *\n * @description\n * Is the given date in the leap year?\n *\n * @param {Date|String|Number} date - the date to check\n * @returns {Boolean} the date is in the leap year\n *\n * @example\n * // Is 1 September 2012 in the leap year?\n * var result = isLeapYear(new Date(2012, 8, 1))\n * //=> true\n */\nfunction isLeapYear (dirtyDate) {\n  var date = parse(dirtyDate)\n  var year = date.getFullYear()\n  return year % 400 === 0 || year % 4 === 0 && year % 100 !== 0\n}\n\nmodule.exports = isLeapYear\n","var parse = require('../parse/index.js')\n\n/**\n * @category Weekday Helpers\n * @summary Is the given date Monday?\n *\n * @description\n * Is the given date Monday?\n *\n * @param {Date|String|Number} date - the date to check\n * @returns {Boolean} the date is Monday\n *\n * @example\n * // Is 22 September 2014 Monday?\n * var result = isMonday(new Date(2014, 8, 22))\n * //=> true\n */\nfunction isMonday (dirtyDate) {\n  return parse(dirtyDate).getDay() === 1\n}\n\nmodule.exports = isMonday\n","var parse = require('../parse/index.js')\n\n/**\n * @category Common Helpers\n * @summary Is the given date in the past?\n *\n * @description\n * Is the given date in the past?\n *\n * @param {Date|String|Number} date - the date to check\n * @returns {Boolean} the date is in the past\n *\n * @example\n * // If today is 6 October 2014, is 2 July 2014 in the past?\n * var result = isPast(new Date(2014, 6, 2))\n * //=> true\n */\nfunction isPast (dirtyDate) {\n  return parse(dirtyDate).getTime() < new Date().getTime()\n}\n\nmodule.exports = isPast\n","var startOfDay = require('../start_of_day/index.js')\n\n/**\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 * @param {Date|String|Number} dateLeft - the first date to check\n * @param {Date|String|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same day\n *\n * @example\n * // Are 4 September 06:00:00 and 4 September 18:00:00 in the same day?\n * var result = isSameDay(\n *   new Date(2014, 8, 4, 6, 0),\n *   new Date(2014, 8, 4, 18, 0)\n * )\n * //=> true\n */\nfunction isSameDay (dirtyDateLeft, dirtyDateRight) {\n  var dateLeftStartOfDay = startOfDay(dirtyDateLeft)\n  var dateRightStartOfDay = startOfDay(dirtyDateRight)\n\n  return dateLeftStartOfDay.getTime() === dateRightStartOfDay.getTime()\n}\n\nmodule.exports = isSameDay\n","var startOfHour = require('../start_of_hour/index.js')\n\n/**\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 * @param {Date|String|Number} dateLeft - the first date to check\n * @param {Date|String|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same hour\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(\n *   new Date(2014, 8, 4, 6, 0),\n *   new Date(2014, 8, 4, 6, 30)\n * )\n * //=> true\n */\nfunction isSameHour (dirtyDateLeft, dirtyDateRight) {\n  var dateLeftStartOfHour = startOfHour(dirtyDateLeft)\n  var dateRightStartOfHour = startOfHour(dirtyDateRight)\n\n  return dateLeftStartOfHour.getTime() === dateRightStartOfHour.getTime()\n}\n\nmodule.exports = isSameHour\n","var isSameWeek = require('../is_same_week/index.js')\n\n/**\n * @category ISO Week Helpers\n * @summary Are the given dates in the same ISO week?\n *\n * @description\n * Are the given dates in the same ISO week?\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|String|Number} dateLeft - the first date to check\n * @param {Date|String|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same ISO week\n *\n * @example\n * // Are 1 September 2014 and 7 September 2014 in the same ISO week?\n * var result = isSameISOWeek(\n *   new Date(2014, 8, 1),\n *   new Date(2014, 8, 7)\n * )\n * //=> true\n */\nfunction isSameISOWeek (dirtyDateLeft, dirtyDateRight) {\n  return isSameWeek(dirtyDateLeft, dirtyDateRight, {weekStartsOn: 1})\n}\n\nmodule.exports = isSameISOWeek\n","var startOfISOYear = require('../start_of_iso_year/index.js')\n\n/**\n * @category ISO Week-Numbering Year Helpers\n * @summary Are the given dates in the same ISO week-numbering year?\n *\n * @description\n * Are the given dates in the same ISO week-numbering year?\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|String|Number} dateLeft - the first date to check\n * @param {Date|String|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same ISO week-numbering year\n *\n * @example\n * // Are 29 December 2003 and 2 January 2005 in the same ISO week-numbering year?\n * var result = isSameISOYear(\n *   new Date(2003, 11, 29),\n *   new Date(2005, 0, 2)\n * )\n * //=> true\n */\nfunction isSameISOYear (dirtyDateLeft, dirtyDateRight) {\n  var dateLeftStartOfYear = startOfISOYear(dirtyDateLeft)\n  var dateRightStartOfYear = startOfISOYear(dirtyDateRight)\n\n  return dateLeftStartOfYear.getTime() === dateRightStartOfYear.getTime()\n}\n\nmodule.exports = isSameISOYear\n","var startOfMinute = require('../start_of_minute/index.js')\n\n/**\n * @category Minute Helpers\n * @summary Are the given dates in the same minute?\n *\n * @description\n * Are the given dates in the same minute?\n *\n * @param {Date|String|Number} dateLeft - the first date to check\n * @param {Date|String|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same minute\n *\n * @example\n * // Are 4 September 2014 06:30:00 and 4 September 2014 06:30:15\n * // in the same minute?\n * var result = isSameMinute(\n *   new Date(2014, 8, 4, 6, 30),\n *   new Date(2014, 8, 4, 6, 30, 15)\n * )\n * //=> true\n */\nfunction isSameMinute (dirtyDateLeft, dirtyDateRight) {\n  var dateLeftStartOfMinute = startOfMinute(dirtyDateLeft)\n  var dateRightStartOfMinute = startOfMinute(dirtyDateRight)\n\n  return dateLeftStartOfMinute.getTime() === dateRightStartOfMinute.getTime()\n}\n\nmodule.exports = isSameMinute\n","var parse = require('../parse/index.js')\n\n/**\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 * @param {Date|String|Number} dateLeft - the first date to check\n * @param {Date|String|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same month\n *\n * @example\n * // Are 2 September 2014 and 25 September 2014 in the same month?\n * var result = isSameMonth(\n *   new Date(2014, 8, 2),\n *   new Date(2014, 8, 25)\n * )\n * //=> true\n */\nfunction isSameMonth (dirtyDateLeft, dirtyDateRight) {\n  var dateLeft = parse(dirtyDateLeft)\n  var dateRight = parse(dirtyDateRight)\n  return dateLeft.getFullYear() === dateRight.getFullYear() &&\n    dateLeft.getMonth() === dateRight.getMonth()\n}\n\nmodule.exports = isSameMonth\n","var startOfQuarter = require('../start_of_quarter/index.js')\n\n/**\n * @category Quarter Helpers\n * @summary Are the given dates in the same year quarter?\n *\n * @description\n * Are the given dates in the same year quarter?\n *\n * @param {Date|String|Number} dateLeft - the first date to check\n * @param {Date|String|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same quarter\n *\n * @example\n * // Are 1 January 2014 and 8 March 2014 in the same quarter?\n * var result = isSameQuarter(\n *   new Date(2014, 0, 1),\n *   new Date(2014, 2, 8)\n * )\n * //=> true\n */\nfunction isSameQuarter (dirtyDateLeft, dirtyDateRight) {\n  var dateLeftStartOfQuarter = startOfQuarter(dirtyDateLeft)\n  var dateRightStartOfQuarter = startOfQuarter(dirtyDateRight)\n\n  return dateLeftStartOfQuarter.getTime() === dateRightStartOfQuarter.getTime()\n}\n\nmodule.exports = isSameQuarter\n","var startOfSecond = require('../start_of_second/index.js')\n\n/**\n * @category Second Helpers\n * @summary Are the given dates in the same second?\n *\n * @description\n * Are the given dates in the same second?\n *\n * @param {Date|String|Number} dateLeft - the first date to check\n * @param {Date|String|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same second\n *\n * @example\n * // Are 4 September 2014 06:30:15.000 and 4 September 2014 06:30.15.500\n * // in the same second?\n * var result = isSameSecond(\n *   new Date(2014, 8, 4, 6, 30, 15),\n *   new Date(2014, 8, 4, 6, 30, 15, 500)\n * )\n * //=> true\n */\nfunction isSameSecond (dirtyDateLeft, dirtyDateRight) {\n  var dateLeftStartOfSecond = startOfSecond(dirtyDateLeft)\n  var dateRightStartOfSecond = startOfSecond(dirtyDateRight)\n\n  return dateLeftStartOfSecond.getTime() === dateRightStartOfSecond.getTime()\n}\n\nmodule.exports = isSameSecond\n","var startOfWeek = require('../start_of_week/index.js')\n\n/**\n * @category Week Helpers\n * @summary Are the given dates in the same week?\n *\n * @description\n * Are the given dates in the same week?\n *\n * @param {Date|String|Number} dateLeft - the first date to check\n * @param {Date|String|Number} dateRight - the second date to check\n * @param {Object} [options] - the object with options\n * @param {Number} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @returns {Boolean} the dates are in the same week\n *\n * @example\n * // Are 31 August 2014 and 4 September 2014 in the same week?\n * var result = isSameWeek(\n *   new Date(2014, 7, 31),\n *   new Date(2014, 8, 4)\n * )\n * //=> true\n *\n * @example\n * // If week starts with Monday,\n * // are 31 August 2014 and 4 September 2014 in the same week?\n * var result = isSameWeek(\n *   new Date(2014, 7, 31),\n *   new Date(2014, 8, 4),\n *   {weekStartsOn: 1}\n * )\n * //=> false\n */\nfunction isSameWeek (dirtyDateLeft, dirtyDateRight, dirtyOptions) {\n  var dateLeftStartOfWeek = startOfWeek(dirtyDateLeft, dirtyOptions)\n  var dateRightStartOfWeek = startOfWeek(dirtyDateRight, dirtyOptions)\n\n  return dateLeftStartOfWeek.getTime() === dateRightStartOfWeek.getTime()\n}\n\nmodule.exports = isSameWeek\n","var parse = require('../parse/index.js')\n\n/**\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 * @param {Date|String|Number} dateLeft - the first date to check\n * @param {Date|String|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same year\n *\n * @example\n * // Are 2 September 2014 and 25 September 2014 in the same year?\n * var result = isSameYear(\n *   new Date(2014, 8, 2),\n *   new Date(2014, 8, 25)\n * )\n * //=> true\n */\nfunction isSameYear (dirtyDateLeft, dirtyDateRight) {\n  var dateLeft = parse(dirtyDateLeft)\n  var dateRight = parse(dirtyDateRight)\n  return dateLeft.getFullYear() === dateRight.getFullYear()\n}\n\nmodule.exports = isSameYear\n","var parse = require('../parse/index.js')\n\n/**\n * @category Weekday Helpers\n * @summary Is the given date Saturday?\n *\n * @description\n * Is the given date Saturday?\n *\n * @param {Date|String|Number} date - the date to check\n * @returns {Boolean} the date is Saturday\n *\n * @example\n * // Is 27 September 2014 Saturday?\n * var result = isSaturday(new Date(2014, 8, 27))\n * //=> true\n */\nfunction isSaturday (dirtyDate) {\n  return parse(dirtyDate).getDay() === 6\n}\n\nmodule.exports = isSaturday\n","var parse = require('../parse/index.js')\n\n/**\n * @category Weekday Helpers\n * @summary Is the given date Sunday?\n *\n * @description\n * Is the given date Sunday?\n *\n * @param {Date|String|Number} date - the date to check\n * @returns {Boolean} the date is Sunday\n *\n * @example\n * // Is 21 September 2014 Sunday?\n * var result = isSunday(new Date(2014, 8, 21))\n * //=> true\n */\nfunction isSunday (dirtyDate) {\n  return parse(dirtyDate).getDay() === 0\n}\n\nmodule.exports = isSunday\n","var isSameHour = require('../is_same_hour/index.js')\n\n/**\n * @category Hour Helpers\n * @summary Is the given date in the same hour as the current date?\n *\n * @description\n * Is the given date in the same hour as the current date?\n *\n * @param {Date|String|Number} date - the date to check\n * @returns {Boolean} the date is in this hour\n *\n * @example\n * // If now is 25 September 2014 18:30:15.500,\n * // is 25 September 2014 18:00:00 in this hour?\n * var result = isThisHour(new Date(2014, 8, 25, 18))\n * //=> true\n */\nfunction isThisHour (dirtyDate) {\n  return isSameHour(new Date(), dirtyDate)\n}\n\nmodule.exports = isThisHour\n","var isSameISOWeek = require('../is_same_iso_week/index.js')\n\n/**\n * @category ISO Week Helpers\n * @summary Is the given date in the same ISO week as the current date?\n *\n * @description\n * Is the given date in the same ISO week as the current date?\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|String|Number} date - the date to check\n * @returns {Boolean} the date is in this ISO week\n *\n * @example\n * // If today is 25 September 2014, is 22 September 2014 in this ISO week?\n * var result = isThisISOWeek(new Date(2014, 8, 22))\n * //=> true\n */\nfunction isThisISOWeek (dirtyDate) {\n  return isSameISOWeek(new Date(), dirtyDate)\n}\n\nmodule.exports = isThisISOWeek\n","var isSameISOYear = require('../is_same_iso_year/index.js')\n\n/**\n * @category ISO Week-Numbering Year Helpers\n * @summary Is the given date in the same ISO week-numbering year as the current date?\n *\n * @description\n * Is the given date in the same ISO week-numbering year as the current date?\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|String|Number} date - the date to check\n * @returns {Boolean} the date is in this ISO week-numbering year\n *\n * @example\n * // If today is 25 September 2014,\n * // is 30 December 2013 in this ISO week-numbering year?\n * var result = isThisISOYear(new Date(2013, 11, 30))\n * //=> true\n */\nfunction isThisISOYear (dirtyDate) {\n  return isSameISOYear(new Date(), dirtyDate)\n}\n\nmodule.exports = isThisISOYear\n","var isSameMinute = require('../is_same_minute/index.js')\n\n/**\n * @category Minute Helpers\n * @summary Is the given date in the same minute as the current date?\n *\n * @description\n * Is the given date in the same minute as the current date?\n *\n * @param {Date|String|Number} date - the date to check\n * @returns {Boolean} the date is in this minute\n *\n * @example\n * // If now is 25 September 2014 18:30:15.500,\n * // is 25 September 2014 18:30:00 in this minute?\n * var result = isThisMinute(new Date(2014, 8, 25, 18, 30))\n * //=> true\n */\nfunction isThisMinute (dirtyDate) {\n  return isSameMinute(new Date(), dirtyDate)\n}\n\nmodule.exports = isThisMinute\n","var isSameMonth = require('../is_same_month/index.js')\n\n/**\n * @category Month Helpers\n * @summary Is the given date in the same month as the current date?\n *\n * @description\n * Is the given date in the same month as the current date?\n *\n * @param {Date|String|Number} date - the date to check\n * @returns {Boolean} the date is in this month\n *\n * @example\n * // If today is 25 September 2014, is 15 September 2014 in this month?\n * var result = isThisMonth(new Date(2014, 8, 15))\n * //=> true\n */\nfunction isThisMonth (dirtyDate) {\n  return isSameMonth(new Date(), dirtyDate)\n}\n\nmodule.exports = isThisMonth\n","var isSameQuarter = require('../is_same_quarter/index.js')\n\n/**\n * @category Quarter Helpers\n * @summary Is the given date in the same quarter as the current date?\n *\n * @description\n * Is the given date in the same quarter as the current date?\n *\n * @param {Date|String|Number} date - the date to check\n * @returns {Boolean} the date is in this quarter\n *\n * @example\n * // If today is 25 September 2014, is 2 July 2014 in this quarter?\n * var result = isThisQuarter(new Date(2014, 6, 2))\n * //=> true\n */\nfunction isThisQuarter (dirtyDate) {\n  return isSameQuarter(new Date(), dirtyDate)\n}\n\nmodule.exports = isThisQuarter\n","var isSameSecond = require('../is_same_second/index.js')\n\n/**\n * @category Second Helpers\n * @summary Is the given date in the same second as the current date?\n *\n * @description\n * Is the given date in the same second as the current date?\n *\n * @param {Date|String|Number} date - the date to check\n * @returns {Boolean} the date is in this second\n *\n * @example\n * // If now is 25 September 2014 18:30:15.500,\n * // is 25 September 2014 18:30:15.000 in this second?\n * var result = isThisSecond(new Date(2014, 8, 25, 18, 30, 15))\n * //=> true\n */\nfunction isThisSecond (dirtyDate) {\n  return isSameSecond(new Date(), dirtyDate)\n}\n\nmodule.exports = isThisSecond\n","var isSameWeek = require('../is_same_week/index.js')\n\n/**\n * @category Week Helpers\n * @summary Is the given date in the same week as the current date?\n *\n * @description\n * Is the given date in the same week as the current date?\n *\n * @param {Date|String|Number} date - the date to check\n * @param {Object} [options] - the object with options\n * @param {Number} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @returns {Boolean} the date is in this week\n *\n * @example\n * // If today is 25 September 2014, is 21 September 2014 in this week?\n * var result = isThisWeek(new Date(2014, 8, 21))\n * //=> true\n *\n * @example\n * // If today is 25 September 2014 and week starts with Monday\n * // is 21 September 2014 in this week?\n * var result = isThisWeek(new Date(2014, 8, 21), {weekStartsOn: 1})\n * //=> false\n */\nfunction isThisWeek (dirtyDate, dirtyOptions) {\n  return isSameWeek(new Date(), dirtyDate, dirtyOptions)\n}\n\nmodule.exports = isThisWeek\n","var isSameYear = require('../is_same_year/index.js')\n\n/**\n * @category Year Helpers\n * @summary Is the given date in the same year as the current date?\n *\n * @description\n * Is the given date in the same year as the current date?\n *\n * @param {Date|String|Number} date - the date to check\n * @returns {Boolean} the date is in this year\n *\n * @example\n * // If today is 25 September 2014, is 2 July 2014 in this year?\n * var result = isThisYear(new Date(2014, 6, 2))\n * //=> true\n */\nfunction isThisYear (dirtyDate) {\n  return isSameYear(new Date(), dirtyDate)\n}\n\nmodule.exports = isThisYear\n","var parse = require('../parse/index.js')\n\n/**\n * @category Weekday Helpers\n * @summary Is the given date Thursday?\n *\n * @description\n * Is the given date Thursday?\n *\n * @param {Date|String|Number} date - the date to check\n * @returns {Boolean} the date is Thursday\n *\n * @example\n * // Is 25 September 2014 Thursday?\n * var result = isThursday(new Date(2014, 8, 25))\n * //=> true\n */\nfunction isThursday (dirtyDate) {\n  return parse(dirtyDate).getDay() === 4\n}\n\nmodule.exports = isThursday\n","var startOfDay = require('../start_of_day/index.js')\n\n/**\n * @category Day Helpers\n * @summary Is the given date today?\n *\n * @description\n * Is the given date today?\n *\n * @param {Date|String|Number} date - the date to check\n * @returns {Boolean} the date is today\n *\n * @example\n * // If today is 6 October 2014, is 6 October 14:00:00 today?\n * var result = isToday(new Date(2014, 9, 6, 14, 0))\n * //=> true\n */\nfunction isToday (dirtyDate) {\n  return startOfDay(dirtyDate).getTime() === startOfDay(new Date()).getTime()\n}\n\nmodule.exports = isToday\n","var startOfDay = require('../start_of_day/index.js')\n\n/**\n * @category Day Helpers\n * @summary Is the given date tomorrow?\n *\n * @description\n * Is the given date tomorrow?\n *\n * @param {Date|String|Number} date - the date to check\n * @returns {Boolean} the date is tomorrow\n *\n * @example\n * // If today is 6 October 2014, is 7 October 14:00:00 tomorrow?\n * var result = isTomorrow(new Date(2014, 9, 7, 14, 0))\n * //=> true\n */\nfunction isTomorrow (dirtyDate) {\n  var tomorrow = new Date()\n  tomorrow.setDate(tomorrow.getDate() + 1)\n  return startOfDay(dirtyDate).getTime() === startOfDay(tomorrow).getTime()\n}\n\nmodule.exports = isTomorrow\n","var parse = require('../parse/index.js')\n\n/**\n * @category Weekday Helpers\n * @summary Is the given date Tuesday?\n *\n * @description\n * Is the given date Tuesday?\n *\n * @param {Date|String|Number} date - the date to check\n * @returns {Boolean} the date is Tuesday\n *\n * @example\n * // Is 23 September 2014 Tuesday?\n * var result = isTuesday(new Date(2014, 8, 23))\n * //=> true\n */\nfunction isTuesday (dirtyDate) {\n  return parse(dirtyDate).getDay() === 2\n}\n\nmodule.exports = isTuesday\n","var isDate = require('../is_date/index.js')\n\n/**\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 * 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 * @param {Date} date - the date to check\n * @returns {Boolean} the date is valid\n * @throws {TypeError} argument must be an instance of Date\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 invalid date:\n * var result = isValid(new Date(''))\n * //=> false\n */\nfunction isValid (dirtyDate) {\n  if (isDate(dirtyDate)) {\n    return !isNaN(dirtyDate)\n  } else {\n    throw new TypeError(toString.call(dirtyDate) + ' is not an instance of Date')\n  }\n}\n\nmodule.exports = isValid\n","var parse = require('../parse/index.js')\n\n/**\n * @category Weekday Helpers\n * @summary Is the given date Wednesday?\n *\n * @description\n * Is the given date Wednesday?\n *\n * @param {Date|String|Number} date - the date to check\n * @returns {Boolean} the date is Wednesday\n *\n * @example\n * // Is 24 September 2014 Wednesday?\n * var result = isWednesday(new Date(2014, 8, 24))\n * //=> true\n */\nfunction isWednesday (dirtyDate) {\n  return parse(dirtyDate).getDay() === 3\n}\n\nmodule.exports = isWednesday\n","var parse = require('../parse/index.js')\n\n/**\n * @category Weekday Helpers\n * @summary Does the given date fall on a weekend?\n *\n * @description\n * Does the given date fall on a weekend?\n *\n * @param {Date|String|Number} date - the date to check\n * @returns {Boolean} the date falls on a weekend\n *\n * @example\n * // Does 5 October 2014 fall on a weekend?\n * var result = isWeekend(new Date(2014, 9, 5))\n * //=> true\n */\nfunction isWeekend (dirtyDate) {\n  var date = parse(dirtyDate)\n  var day = date.getDay()\n  return day === 0 || day === 6\n}\n\nmodule.exports = isWeekend\n","var parse = require('../parse/index.js')\n\n/**\n * @category Range Helpers\n * @summary Is the given date within the range?\n *\n * @description\n * Is the given date within the range?\n *\n * @param {Date|String|Number} date - the date to check\n * @param {Date|String|Number} startDate - the start of range\n * @param {Date|String|Number} endDate - the end of range\n * @returns {Boolean} the date is within the range\n * @throws {Error} startDate cannot be after endDate\n *\n * @example\n * // For the date within the range:\n * isWithinRange(\n *   new Date(2014, 0, 3), new Date(2014, 0, 1), new Date(2014, 0, 7)\n * )\n * //=> true\n *\n * @example\n * // For the date outside of the range:\n * isWithinRange(\n *   new Date(2014, 0, 10), new Date(2014, 0, 1), new Date(2014, 0, 7)\n * )\n * //=> false\n */\nfunction isWithinRange (dirtyDate, dirtyStartDate, dirtyEndDate) {\n  var time = parse(dirtyDate).getTime()\n  var startTime = parse(dirtyStartDate).getTime()\n  var endTime = parse(dirtyEndDate).getTime()\n\n  if (startTime > endTime) {\n    throw new Error('The start of the range cannot be after the end of the range')\n  }\n\n  return time >= startTime && time <= endTime\n}\n\nmodule.exports = isWithinRange\n","var startOfDay = require('../start_of_day/index.js')\n\n/**\n * @category Day Helpers\n * @summary Is the given date yesterday?\n *\n * @description\n * Is the given date yesterday?\n *\n * @param {Date|String|Number} date - the date to check\n * @returns {Boolean} the date is yesterday\n *\n * @example\n * // If today is 6 October 2014, is 5 October 14:00:00 yesterday?\n * var result = isYesterday(new Date(2014, 9, 5, 14, 0))\n * //=> true\n */\nfunction isYesterday (dirtyDate) {\n  var yesterday = new Date()\n  yesterday.setDate(yesterday.getDate() - 1)\n  return startOfDay(dirtyDate).getTime() === startOfDay(yesterday).getTime()\n}\n\nmodule.exports = isYesterday\n","var lastDayOfWeek = require('../last_day_of_week/index.js')\n\n/**\n * @category ISO Week Helpers\n * @summary Return the last day of an ISO week for the given date.\n *\n * @description\n * Return the last day of an ISO week for the given date.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|String|Number} date - the original date\n * @returns {Date} the last day of an ISO week\n *\n * @example\n * // The last day of an ISO week for 2 September 2014 11:55:00:\n * var result = lastDayOfISOWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Sep 07 2014 00:00:00\n */\nfunction lastDayOfISOWeek (dirtyDate) {\n  return lastDayOfWeek(dirtyDate, {weekStartsOn: 1})\n}\n\nmodule.exports = lastDayOfISOWeek\n","var getISOYear = require('../get_iso_year/index.js')\nvar startOfISOWeek = require('../start_of_iso_week/index.js')\n\n/**\n * @category ISO Week-Numbering Year Helpers\n * @summary Return the last day of an ISO week-numbering year for the given date.\n *\n * @description\n * Return the last day of an ISO week-numbering year,\n * which always starts 3 days before the year's first Thursday.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|String|Number} date - the original date\n * @returns {Date} the end of an ISO week-numbering year\n *\n * @example\n * // The last day of an ISO week-numbering year for 2 July 2005:\n * var result = lastDayOfISOYear(new Date(2005, 6, 2))\n * //=> Sun Jan 01 2006 00:00:00\n */\nfunction lastDayOfISOYear (dirtyDate) {\n  var year = getISOYear(dirtyDate)\n  var fourthOfJanuary = new Date(0)\n  fourthOfJanuary.setFullYear(year + 1, 0, 4)\n  fourthOfJanuary.setHours(0, 0, 0, 0)\n  var date = startOfISOWeek(fourthOfJanuary)\n  date.setDate(date.getDate() - 1)\n  return date\n}\n\nmodule.exports = lastDayOfISOYear\n","var parse = require('../parse/index.js')\n\n/**\n * @category Month Helpers\n * @summary Return the last day of a month for the given date.\n *\n * @description\n * Return the last day of a month for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|String|Number} date - the original date\n * @returns {Date} the last day of a month\n *\n * @example\n * // The last day of a month for 2 September 2014 11:55:00:\n * var result = lastDayOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 30 2014 00:00:00\n */\nfunction lastDayOfMonth (dirtyDate) {\n  var date = parse(dirtyDate)\n  var month = date.getMonth()\n  date.setFullYear(date.getFullYear(), month + 1, 0)\n  date.setHours(0, 0, 0, 0)\n  return date\n}\n\nmodule.exports = lastDayOfMonth\n","var parse = require('../parse/index.js')\n\n/**\n * @category Quarter Helpers\n * @summary Return the last day of a year quarter for the given date.\n *\n * @description\n * Return the last day of a year quarter for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|String|Number} date - the original date\n * @returns {Date} the last day of a quarter\n *\n * @example\n * // The last day of a quarter for 2 September 2014 11:55:00:\n * var result = lastDayOfQuarter(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 30 2014 00:00:00\n */\nfunction lastDayOfQuarter (dirtyDate) {\n  var date = parse(dirtyDate)\n  var currentMonth = date.getMonth()\n  var month = currentMonth - currentMonth % 3 + 3\n  date.setMonth(month, 0)\n  date.setHours(0, 0, 0, 0)\n  return date\n}\n\nmodule.exports = lastDayOfQuarter\n","var parse = require('../parse/index.js')\n\n/**\n * @category Week Helpers\n * @summary Return the last day of a week for the given date.\n *\n * @description\n * Return the last day of a week for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|String|Number} date - the original date\n * @param {Object} [options] - the object with options\n * @param {Number} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @returns {Date} the last day of a week\n *\n * @example\n * // The last day of a week for 2 September 2014 11:55:00:\n * var result = lastDayOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sat Sep 06 2014 00:00:00\n *\n * @example\n * // If the week starts on Monday, the last day of the week for 2 September 2014 11:55:00:\n * var result = lastDayOfWeek(new Date(2014, 8, 2, 11, 55, 0), {weekStartsOn: 1})\n * //=> Sun Sep 07 2014 00:00:00\n */\nfunction lastDayOfWeek (dirtyDate, dirtyOptions) {\n  var weekStartsOn = dirtyOptions ? (Number(dirtyOptions.weekStartsOn) || 0) : 0\n\n  var date = parse(dirtyDate)\n  var day = date.getDay()\n  var diff = (day < weekStartsOn ? -7 : 0) + 6 - (day - weekStartsOn)\n\n  date.setHours(0, 0, 0, 0)\n  date.setDate(date.getDate() + diff)\n  return date\n}\n\nmodule.exports = lastDayOfWeek\n","var parse = require('../parse/index.js')\n\n/**\n * @category Year Helpers\n * @summary Return the last day of a year for the given date.\n *\n * @description\n * Return the last day of a year for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|String|Number} date - the original date\n * @returns {Date} the last day of a year\n *\n * @example\n * // The last day of a year for 2 September 2014 11:55:00:\n * var result = lastDayOfYear(new Date(2014, 8, 2, 11, 55, 00))\n * //=> Wed Dec 31 2014 00:00:00\n */\nfunction lastDayOfYear (dirtyDate) {\n  var date = parse(dirtyDate)\n  var year = date.getFullYear()\n  date.setFullYear(year + 1, 0, 0)\n  date.setHours(0, 0, 0, 0)\n  return date\n}\n\nmodule.exports = lastDayOfYear\n","var commonFormatterKeys = [\n  'M', 'MM', 'Q', 'D', 'DD', 'DDD', 'DDDD', 'd',\n  'E', 'W', 'WW', 'YY', 'YYYY', 'GG', 'GGGG',\n  'H', 'HH', 'h', 'hh', 'm', 'mm',\n  's', 'ss', 'S', 'SS', 'SSS',\n  'Z', 'ZZ', 'X', 'x'\n]\n\nfunction buildFormattingTokensRegExp (formatters) {\n  var formatterKeys = []\n  for (var key in formatters) {\n    if (formatters.hasOwnProperty(key)) {\n      formatterKeys.push(key)\n    }\n  }\n\n  var formattingTokens = commonFormatterKeys\n    .concat(formatterKeys)\n    .sort()\n    .reverse()\n  var formattingTokensRegExp = new RegExp(\n    '(\\\\[[^\\\\[]*\\\\])|(\\\\\\\\)?' + '(' + formattingTokens.join('|') + '|.)', 'g'\n  )\n\n  return formattingTokensRegExp\n}\n\nmodule.exports = buildFormattingTokensRegExp\n","function buildDistanceInWordsLocale () {\n  var distanceInWordsLocale = {\n    lessThanXSeconds: {\n      one: 'less than a second',\n      other: 'less than {{count}} seconds'\n    },\n\n    xSeconds: {\n      one: '1 second',\n      other: '{{count}} seconds'\n    },\n\n    halfAMinute: 'half a minute',\n\n    lessThanXMinutes: {\n      one: 'less than a minute',\n      other: 'less than {{count}} minutes'\n    },\n\n    xMinutes: {\n      one: '1 minute',\n      other: '{{count}} minutes'\n    },\n\n    aboutXHours: {\n      one: 'about 1 hour',\n      other: 'about {{count}} hours'\n    },\n\n    xHours: {\n      one: '1 hour',\n      other: '{{count}} hours'\n    },\n\n    xDays: {\n      one: '1 day',\n      other: '{{count}} days'\n    },\n\n    aboutXMonths: {\n      one: 'about 1 month',\n      other: 'about {{count}} months'\n    },\n\n    xMonths: {\n      one: '1 month',\n      other: '{{count}} months'\n    },\n\n    aboutXYears: {\n      one: 'about 1 year',\n      other: 'about {{count}} years'\n    },\n\n    xYears: {\n      one: '1 year',\n      other: '{{count}} years'\n    },\n\n    overXYears: {\n      one: 'over 1 year',\n      other: 'over {{count}} years'\n    },\n\n    almostXYears: {\n      one: 'almost 1 year',\n      other: 'almost {{count}} years'\n    }\n  }\n\n  function localize (token, count, options) {\n    options = options || {}\n\n    var result\n    if (typeof distanceInWordsLocale[token] === 'string') {\n      result = distanceInWordsLocale[token]\n    } else if (count === 1) {\n      result = distanceInWordsLocale[token].one\n    } else {\n      result = distanceInWordsLocale[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  }\n\n  return {\n    localize: localize\n  }\n}\n\nmodule.exports = buildDistanceInWordsLocale\n","var buildFormattingTokensRegExp = require('../../_lib/build_formatting_tokens_reg_exp/index.js')\n\nfunction buildFormatLocale () {\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  var months3char = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']\n  var monthsFull = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']\n  var weekdays2char = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa']\n  var weekdays3char = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']\n  var weekdaysFull = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']\n  var meridiemUppercase = ['AM', 'PM']\n  var meridiemLowercase = ['am', 'pm']\n  var meridiemFull = ['a.m.', 'p.m.']\n\n  var formatters = {\n    // Month: Jan, Feb, ..., Dec\n    'MMM': function (date) {\n      return months3char[date.getMonth()]\n    },\n\n    // Month: January, February, ..., December\n    'MMMM': function (date) {\n      return monthsFull[date.getMonth()]\n    },\n\n    // Day of week: Su, Mo, ..., Sa\n    'dd': function (date) {\n      return weekdays2char[date.getDay()]\n    },\n\n    // Day of week: Sun, Mon, ..., Sat\n    'ddd': function (date) {\n      return weekdays3char[date.getDay()]\n    },\n\n    // Day of week: Sunday, Monday, ..., Saturday\n    'dddd': function (date) {\n      return weekdaysFull[date.getDay()]\n    },\n\n    // AM, PM\n    'A': function (date) {\n      return (date.getHours() / 12) >= 1 ? meridiemUppercase[1] : meridiemUppercase[0]\n    },\n\n    // am, pm\n    'a': function (date) {\n      return (date.getHours() / 12) >= 1 ? meridiemLowercase[1] : meridiemLowercase[0]\n    },\n\n    // a.m., p.m.\n    'aa': function (date) {\n      return (date.getHours() / 12) >= 1 ? meridiemFull[1] : meridiemFull[0]\n    }\n  }\n\n  // Generate ordinal version of formatters: M -> Mo, D -> Do, etc.\n  var ordinalFormatters = ['M', 'D', 'DDD', 'd', 'Q', 'W']\n  ordinalFormatters.forEach(function (formatterToken) {\n    formatters[formatterToken + 'o'] = function (date, formatters) {\n      return ordinal(formatters[formatterToken](date))\n    }\n  })\n\n  return {\n    formatters: formatters,\n    formattingTokensRegExp: buildFormattingTokensRegExp(formatters)\n  }\n}\n\nfunction ordinal (number) {\n  var rem100 = number % 100\n  if (rem100 > 20 || rem100 < 10) {\n    switch (rem100 % 10) {\n      case 1:\n        return number + 'st'\n      case 2:\n        return number + 'nd'\n      case 3:\n        return number + 'rd'\n    }\n  }\n  return number + 'th'\n}\n\nmodule.exports = buildFormatLocale\n","var buildDistanceInWordsLocale = require('./build_distance_in_words_locale/index.js')\nvar buildFormatLocale = require('./build_format_locale/index.js')\n\n/**\n * @category Locales\n * @summary English locale.\n */\nmodule.exports = {\n  distanceInWords: buildDistanceInWordsLocale(),\n  format: buildFormatLocale()\n}\n","var parse = require('../parse/index.js')\n\n/**\n * @category Common Helpers\n * @summary Return the latest of the given dates.\n *\n * @description\n * Return the latest of the given dates.\n *\n * @param {...(Date|String|Number)} dates - the dates to compare\n * @returns {Date} the latest of the dates\n *\n * @example\n * // Which of these dates is the latest?\n * var result = max(\n *   new Date(1989, 6, 10),\n *   new Date(1987, 1, 11),\n *   new Date(1995, 6, 2),\n *   new Date(1990, 0, 1)\n * )\n * //=> Sun Jul 02 1995 00:00:00\n */\nfunction max () {\n  var dirtyDates = Array.prototype.slice.call(arguments)\n  var dates = dirtyDates.map(function (dirtyDate) {\n    return parse(dirtyDate)\n  })\n  var latestTimestamp = Math.max.apply(null, dates)\n  return new Date(latestTimestamp)\n}\n\nmodule.exports = max\n","var parse = require('../parse/index.js')\n\n/**\n * @category Common Helpers\n * @summary Return the earliest of the given dates.\n *\n * @description\n * Return the earliest of the given dates.\n *\n * @param {...(Date|String|Number)} dates - the dates to compare\n * @returns {Date} the earliest of the dates\n *\n * @example\n * // Which of these dates is the earliest?\n * var result = min(\n *   new Date(1989, 6, 10),\n *   new Date(1987, 1, 11),\n *   new Date(1995, 6, 2),\n *   new Date(1990, 0, 1)\n * )\n * //=> Wed Feb 11 1987 00:00:00\n */\nfunction min () {\n  var dirtyDates = Array.prototype.slice.call(arguments)\n  var dates = dirtyDates.map(function (dirtyDate) {\n    return parse(dirtyDate)\n  })\n  var earliestTimestamp = Math.min.apply(null, dates)\n  return new Date(earliestTimestamp)\n}\n\nmodule.exports = min\n","var getTimezoneOffsetInMilliseconds = require('../_lib/getTimezoneOffsetInMilliseconds/index.js')\nvar isDate = require('../is_date/index.js')\n\nvar MILLISECONDS_IN_HOUR = 3600000\nvar MILLISECONDS_IN_MINUTE = 60000\nvar DEFAULT_ADDITIONAL_DIGITS = 2\n\nvar parseTokenDateTimeDelimeter = /[T ]/\nvar parseTokenPlainTime = /:/\n\n// year tokens\nvar parseTokenYY = /^(\\d{2})$/\nvar parseTokensYYY = [\n  /^([+-]\\d{2})$/, // 0 additional digits\n  /^([+-]\\d{3})$/, // 1 additional digit\n  /^([+-]\\d{4})$/ // 2 additional digits\n]\n\nvar parseTokenYYYY = /^(\\d{4})/\nvar parseTokensYYYYY = [\n  /^([+-]\\d{4})/, // 0 additional digits\n  /^([+-]\\d{5})/, // 1 additional digit\n  /^([+-]\\d{6})/ // 2 additional digits\n]\n\n// date tokens\nvar parseTokenMM = /^-(\\d{2})$/\nvar parseTokenDDD = /^-?(\\d{3})$/\nvar parseTokenMMDD = /^-?(\\d{2})-?(\\d{2})$/\nvar parseTokenWww = /^-?W(\\d{2})$/\nvar parseTokenWwwD = /^-?W(\\d{2})-?(\\d{1})$/\n\n// time tokens\nvar parseTokenHH = /^(\\d{2}([.,]\\d*)?)$/\nvar parseTokenHHMM = /^(\\d{2}):?(\\d{2}([.,]\\d*)?)$/\nvar parseTokenHHMMSS = /^(\\d{2}):?(\\d{2}):?(\\d{2}([.,]\\d*)?)$/\n\n// timezone tokens\nvar parseTokenTimezone = /([Z+-].*)$/\nvar parseTokenTimezoneZ = /^(Z)$/\nvar parseTokenTimezoneHH = /^([+-])(\\d{2})$/\nvar parseTokenTimezoneHHMM = /^([+-])(\\d{2}):?(\\d{2})$/\n\n/**\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 *\n * If all above fails, the function passes the given argument to Date constructor.\n *\n * @param {Date|String|Number} argument - the value to convert\n * @param {Object} [options] - the 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 *\n * @example\n * // Convert string '2014-02-11T11:30:30' to date:\n * var result = parse('2014-02-11T11:30:30')\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Parse string '+02014101',\n * // if the additional number of digits in the extended year format is 1:\n * var result = parse('+02014101', {additionalDigits: 1})\n * //=> Fri Apr 11 2014 00:00:00\n */\nfunction parse (argument, dirtyOptions) {\n  if (isDate(argument)) {\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 !== 'string') {\n    return new Date(argument)\n  }\n\n  var options = dirtyOptions || {}\n  var additionalDigits = options.additionalDigits\n  if (additionalDigits == null) {\n    additionalDigits = DEFAULT_ADDITIONAL_DIGITS\n  } else {\n    additionalDigits = Number(additionalDigits)\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 (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\n    if (dateStrings.timezone) {\n      offset = parseTimezone(dateStrings.timezone) * MILLISECONDS_IN_MINUTE\n    } else {\n      var fullTime = timestamp + time\n      var fullTimeDate = new Date(fullTime)\n\n      offset = getTimezoneOffsetInMilliseconds(fullTimeDate)\n\n      // Adjust time when it's coming from DST\n      var fullTimeDateNextDay = new Date(fullTime)\n      fullTimeDateNextDay.setDate(fullTimeDate.getDate() + 1)\n      var offsetDiff =\n        getTimezoneOffsetInMilliseconds(fullTimeDateNextDay) -\n        getTimezoneOffsetInMilliseconds(fullTimeDate)\n      if (offsetDiff > 0) {\n        offset += offsetDiff\n      }\n    }\n\n    return new Date(timestamp + time + offset)\n  } else {\n    return new Date(argument)\n  }\n}\n\nfunction splitDateString (dateString) {\n  var dateStrings = {}\n  var array = dateString.split(parseTokenDateTimeDelimeter)\n  var timeString\n\n  if (parseTokenPlainTime.test(array[0])) {\n    dateStrings.date = null\n    timeString = array[0]\n  } else {\n    dateStrings.date = array[0]\n    timeString = array[1]\n  }\n\n  if (timeString) {\n    var token = parseTokenTimezone.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 parseTokenYYY = parseTokensYYY[additionalDigits]\n  var parseTokenYYYYY = parseTokensYYYYY[additionalDigits]\n\n  var token\n\n  // YYYY or ±YYYYY\n  token = parseTokenYYYY.exec(dateString) || parseTokenYYYYY.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 = parseTokenYY.exec(dateString) || parseTokenYYY.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 = parseTokenMM.exec(dateString)\n  if (token) {\n    date = new Date(0)\n    month = parseInt(token[1], 10) - 1\n    date.setUTCFullYear(year, month)\n    return date\n  }\n\n  // YYYY-DDD or YYYYDDD\n  token = parseTokenDDD.exec(dateString)\n  if (token) {\n    date = new Date(0)\n    var dayOfYear = parseInt(token[1], 10)\n    date.setUTCFullYear(year, 0, dayOfYear)\n    return date\n  }\n\n  // YYYY-MM-DD or YYYYMMDD\n  token = parseTokenMMDD.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    date.setUTCFullYear(year, month, day)\n    return date\n  }\n\n  // YYYY-Www or YYYYWww\n  token = parseTokenWww.exec(dateString)\n  if (token) {\n    week = parseInt(token[1], 10) - 1\n    return dayOfISOYear(year, week)\n  }\n\n  // YYYY-Www-D or YYYYWwwD\n  token = parseTokenWwwD.exec(dateString)\n  if (token) {\n    week = parseInt(token[1], 10) - 1\n    var dayOfWeek = parseInt(token[2], 10) - 1\n    return dayOfISOYear(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 = parseTokenHH.exec(timeString)\n  if (token) {\n    hours = parseFloat(token[1].replace(',', '.'))\n    return (hours % 24) * MILLISECONDS_IN_HOUR\n  }\n\n  // hh:mm or hhmm\n  token = parseTokenHHMM.exec(timeString)\n  if (token) {\n    hours = parseInt(token[1], 10)\n    minutes = parseFloat(token[2].replace(',', '.'))\n    return (hours % 24) * MILLISECONDS_IN_HOUR +\n      minutes * MILLISECONDS_IN_MINUTE\n  }\n\n  // hh:mm:ss or hhmmss\n  token = parseTokenHHMMSS.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    return (hours % 24) * MILLISECONDS_IN_HOUR +\n      minutes * MILLISECONDS_IN_MINUTE +\n      seconds * 1000\n  }\n\n  // Invalid ISO-formatted time\n  return null\n}\n\nfunction parseTimezone (timezoneString) {\n  var token\n  var absoluteOffset\n\n  // Z\n  token = parseTokenTimezoneZ.exec(timezoneString)\n  if (token) {\n    return 0\n  }\n\n  // ±hh\n  token = parseTokenTimezoneHH.exec(timezoneString)\n  if (token) {\n    absoluteOffset = parseInt(token[2], 10) * 60\n    return (token[1] === '+') ? -absoluteOffset : absoluteOffset\n  }\n\n  // ±hh:mm or ±hhmm\n  token = parseTokenTimezoneHHMM.exec(timezoneString)\n  if (token) {\n    absoluteOffset = parseInt(token[2], 10) * 60 + parseInt(token[3], 10)\n    return (token[1] === '+') ? -absoluteOffset : absoluteOffset\n  }\n\n  return 0\n}\n\nfunction dayOfISOYear (isoYear, week, day) {\n  week = week || 0\n  day = day || 0\n  var date = new Date(0)\n  date.setUTCFullYear(isoYear, 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\nmodule.exports = parse\n","var parse = require('../parse/index.js')\n\n/**\n * @category Day Helpers\n * @summary Set the day of the month to the given date.\n *\n * @description\n * Set the day of the month to the given date.\n *\n * @param {Date|String|Number} date - the date to be changed\n * @param {Number} dayOfMonth - the day of the month of the new date\n * @returns {Date} the new date with the day of the month setted\n *\n * @example\n * // Set the 30th day of the month to 1 September 2014:\n * var result = setDate(new Date(2014, 8, 1), 30)\n * //=> Tue Sep 30 2014 00:00:00\n */\nfunction setDate (dirtyDate, dirtyDayOfMonth) {\n  var date = parse(dirtyDate)\n  var dayOfMonth = Number(dirtyDayOfMonth)\n  date.setDate(dayOfMonth)\n  return date\n}\n\nmodule.exports = setDate\n","var parse = require('../parse/index.js')\nvar addDays = require('../add_days/index.js')\n\n/**\n * @category Weekday Helpers\n * @summary Set the day of the week to the given date.\n *\n * @description\n * Set the day of the week to the given date.\n *\n * @param {Date|String|Number} date - the date to be changed\n * @param {Number} day - the day of the week of the new date\n * @param {Object} [options] - the object with options\n * @param {Number} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @returns {Date} the new date with the day of the week setted\n *\n * @example\n * // Set Sunday to 1 September 2014:\n * var result = setDay(new Date(2014, 8, 1), 0)\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // If week starts with Monday, set Sunday to 1 September 2014:\n * var result = setDay(new Date(2014, 8, 1), 0, {weekStartsOn: 1})\n * //=> Sun Sep 07 2014 00:00:00\n */\nfunction setDay (dirtyDate, dirtyDay, dirtyOptions) {\n  var weekStartsOn = dirtyOptions ? (Number(dirtyOptions.weekStartsOn) || 0) : 0\n  var date = parse(dirtyDate)\n  var day = Number(dirtyDay)\n  var currentDay = date.getDay()\n\n  var remainder = day % 7\n  var dayIndex = (remainder + 7) % 7\n\n  var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay\n  return addDays(date, diff)\n}\n\nmodule.exports = setDay\n","var parse = require('../parse/index.js')\n\n/**\n * @category Day Helpers\n * @summary Set the day of the year to the given date.\n *\n * @description\n * Set the day of the year to the given date.\n *\n * @param {Date|String|Number} date - the date to be changed\n * @param {Number} dayOfYear - the day of the year of the new date\n * @returns {Date} the new date with the day of the year setted\n *\n * @example\n * // Set the 2nd day of the year to 2 July 2014:\n * var result = setDayOfYear(new Date(2014, 6, 2), 2)\n * //=> Thu Jan 02 2014 00:00:00\n */\nfunction setDayOfYear (dirtyDate, dirtyDayOfYear) {\n  var date = parse(dirtyDate)\n  var dayOfYear = Number(dirtyDayOfYear)\n  date.setMonth(0)\n  date.setDate(dayOfYear)\n  return date\n}\n\nmodule.exports = setDayOfYear\n","var parse = require('../parse/index.js')\n\n/**\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 * @param {Date|String|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 setted\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 */\nfunction setHours (dirtyDate, dirtyHours) {\n  var date = parse(dirtyDate)\n  var hours = Number(dirtyHours)\n  date.setHours(hours)\n  return date\n}\n\nmodule.exports = setHours\n","var parse = require('../parse/index.js')\nvar addDays = require('../add_days/index.js')\nvar getISODay = require('../get_iso_day/index.js')\n\n/**\n * @category Weekday Helpers\n * @summary Set the day of the ISO week to the given date.\n *\n * @description\n * Set the day of the ISO week to the given date.\n * ISO week starts with Monday.\n * 7 is the index of Sunday, 1 is the index of Monday etc.\n *\n * @param {Date|String|Number} date - the date to be changed\n * @param {Number} day - the day of the ISO week of the new date\n * @returns {Date} the new date with the day of the ISO week setted\n *\n * @example\n * // Set Sunday to 1 September 2014:\n * var result = setISODay(new Date(2014, 8, 1), 7)\n * //=> Sun Sep 07 2014 00:00:00\n */\nfunction setISODay (dirtyDate, dirtyDay) {\n  var date = parse(dirtyDate)\n  var day = Number(dirtyDay)\n  var currentDay = getISODay(date)\n  var diff = day - currentDay\n  return addDays(date, diff)\n}\n\nmodule.exports = setISODay\n","var parse = require('../parse/index.js')\nvar getISOWeek = require('../get_iso_week/index.js')\n\n/**\n * @category ISO Week Helpers\n * @summary Set the ISO week to the given date.\n *\n * @description\n * Set the ISO week to the given date, saving the weekday number.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|String|Number} date - the date to be changed\n * @param {Number} isoWeek - the ISO week of the new date\n * @returns {Date} the new date with the ISO week setted\n *\n * @example\n * // Set the 53rd ISO week to 7 August 2004:\n * var result = setISOWeek(new Date(2004, 7, 7), 53)\n * //=> Sat Jan 01 2005 00:00:00\n */\nfunction setISOWeek (dirtyDate, dirtyISOWeek) {\n  var date = parse(dirtyDate)\n  var isoWeek = Number(dirtyISOWeek)\n  var diff = getISOWeek(date) - isoWeek\n  date.setDate(date.getDate() - diff * 7)\n  return date\n}\n\nmodule.exports = setISOWeek\n","var parse = require('../parse/index.js')\nvar startOfISOYear = require('../start_of_iso_year/index.js')\nvar differenceInCalendarDays = require('../difference_in_calendar_days/index.js')\n\n/**\n * @category ISO Week-Numbering Year Helpers\n * @summary Set the ISO week-numbering year to the given date.\n *\n * @description\n * Set the ISO week-numbering year to the given date,\n * saving the week number and the weekday number.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|String|Number} date - the date to be changed\n * @param {Number} isoYear - the ISO week-numbering year of the new date\n * @returns {Date} the new date with the ISO week-numbering year setted\n *\n * @example\n * // Set ISO week-numbering year 2007 to 29 December 2008:\n * var result = setISOYear(new Date(2008, 11, 29), 2007)\n * //=> Mon Jan 01 2007 00:00:00\n */\nfunction setISOYear (dirtyDate, dirtyISOYear) {\n  var date = parse(dirtyDate)\n  var isoYear = Number(dirtyISOYear)\n  var diff = differenceInCalendarDays(date, startOfISOYear(date))\n  var fourthOfJanuary = new Date(0)\n  fourthOfJanuary.setFullYear(isoYear, 0, 4)\n  fourthOfJanuary.setHours(0, 0, 0, 0)\n  date = startOfISOYear(fourthOfJanuary)\n  date.setDate(date.getDate() + diff)\n  return date\n}\n\nmodule.exports = setISOYear\n","var parse = require('../parse/index.js')\n\n/**\n * @category Millisecond Helpers\n * @summary Set the milliseconds to the given date.\n *\n * @description\n * Set the milliseconds to the given date.\n *\n * @param {Date|String|Number} date - the date to be changed\n * @param {Number} milliseconds - the milliseconds of the new date\n * @returns {Date} the new date with the milliseconds setted\n *\n * @example\n * // Set 300 milliseconds to 1 September 2014 11:30:40.500:\n * var result = setMilliseconds(new Date(2014, 8, 1, 11, 30, 40, 500), 300)\n * //=> Mon Sep 01 2014 11:30:40.300\n */\nfunction setMilliseconds (dirtyDate, dirtyMilliseconds) {\n  var date = parse(dirtyDate)\n  var milliseconds = Number(dirtyMilliseconds)\n  date.setMilliseconds(milliseconds)\n  return date\n}\n\nmodule.exports = setMilliseconds\n","var parse = require('../parse/index.js')\n\n/**\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 * @param {Date|String|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 setted\n *\n * @example\n * // Set 45 minutes to 1 September 2014 11:30:40:\n * var result = setMinutes(new Date(2014, 8, 1, 11, 30, 40), 45)\n * //=> Mon Sep 01 2014 11:45:40\n */\nfunction setMinutes (dirtyDate, dirtyMinutes) {\n  var date = parse(dirtyDate)\n  var minutes = Number(dirtyMinutes)\n  date.setMinutes(minutes)\n  return date\n}\n\nmodule.exports = setMinutes\n","var parse = require('../parse/index.js')\nvar getDaysInMonth = require('../get_days_in_month/index.js')\n\n/**\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 * @param {Date|String|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 setted\n *\n * @example\n * // Set February to 1 September 2014:\n * var result = setMonth(new Date(2014, 8, 1), 1)\n * //=> Sat Feb 01 2014 00:00:00\n */\nfunction setMonth (dirtyDate, dirtyMonth) {\n  var date = parse(dirtyDate)\n  var month = Number(dirtyMonth)\n  var year = date.getFullYear()\n  var day = date.getDate()\n\n  var dateWithDesiredMonth = new Date(0)\n  dateWithDesiredMonth.setFullYear(year, month, 15)\n  dateWithDesiredMonth.setHours(0, 0, 0, 0)\n  var daysInMonth = getDaysInMonth(dateWithDesiredMonth)\n  // Set the last day of the new month\n  // if the original date was the last day of the longer month\n  date.setMonth(month, Math.min(day, daysInMonth))\n  return date\n}\n\nmodule.exports = setMonth\n","var parse = require('../parse/index.js')\nvar setMonth = require('../set_month/index.js')\n\n/**\n * @category Quarter Helpers\n * @summary Set the year quarter to the given date.\n *\n * @description\n * Set the year quarter to the given date.\n *\n * @param {Date|String|Number} date - the date to be changed\n * @param {Number} quarter - the quarter of the new date\n * @returns {Date} the new date with the quarter setted\n *\n * @example\n * // Set the 2nd quarter to 2 July 2014:\n * var result = setQuarter(new Date(2014, 6, 2), 2)\n * //=> Wed Apr 02 2014 00:00:00\n */\nfunction setQuarter (dirtyDate, dirtyQuarter) {\n  var date = parse(dirtyDate)\n  var quarter = Number(dirtyQuarter)\n  var oldQuarter = Math.floor(date.getMonth() / 3) + 1\n  var diff = quarter - oldQuarter\n  return setMonth(date, date.getMonth() + diff * 3)\n}\n\nmodule.exports = setQuarter\n","var parse = require('../parse/index.js')\n\n/**\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 * @param {Date|String|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 setted\n *\n * @example\n * // Set 45 seconds to 1 September 2014 11:30:40:\n * var result = setSeconds(new Date(2014, 8, 1, 11, 30, 40), 45)\n * //=> Mon Sep 01 2014 11:30:45\n */\nfunction setSeconds (dirtyDate, dirtySeconds) {\n  var date = parse(dirtyDate)\n  var seconds = Number(dirtySeconds)\n  date.setSeconds(seconds)\n  return date\n}\n\nmodule.exports = setSeconds\n","var parse = require('../parse/index.js')\n\n/**\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 * @param {Date|String|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 setted\n *\n * @example\n * // Set year 2013 to 1 September 2014:\n * var result = setYear(new Date(2014, 8, 1), 2013)\n * //=> Sun Sep 01 2013 00:00:00\n */\nfunction setYear (dirtyDate, dirtyYear) {\n  var date = parse(dirtyDate)\n  var year = Number(dirtyYear)\n  date.setFullYear(year)\n  return date\n}\n\nmodule.exports = setYear\n","var parse = require('../parse/index.js')\n\n/**\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 * @param {Date|String|Number} date - the original date\n * @returns {Date} the start of a day\n *\n * @example\n * // The start of a day for 2 September 2014 11:55:00:\n * var result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 00:00:00\n */\nfunction startOfDay (dirtyDate) {\n  var date = parse(dirtyDate)\n  date.setHours(0, 0, 0, 0)\n  return date\n}\n\nmodule.exports = startOfDay\n","var parse = require('../parse/index.js')\n\n/**\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 * @param {Date|String|Number} date - the original date\n * @returns {Date} the start of an hour\n *\n * @example\n * // The start of an hour for 2 September 2014 11:55:00:\n * var result = startOfHour(new Date(2014, 8, 2, 11, 55))\n * //=> Tue Sep 02 2014 11:00:00\n */\nfunction startOfHour (dirtyDate) {\n  var date = parse(dirtyDate)\n  date.setMinutes(0, 0, 0)\n  return date\n}\n\nmodule.exports = startOfHour\n","var startOfWeek = require('../start_of_week/index.js')\n\n/**\n * @category ISO Week Helpers\n * @summary Return the start of an ISO week for the given date.\n *\n * @description\n * Return the start of an ISO week for the given date.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|String|Number} date - the original date\n * @returns {Date} the start of an ISO week\n *\n * @example\n * // The start of an ISO week for 2 September 2014 11:55:00:\n * var result = startOfISOWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\nfunction startOfISOWeek (dirtyDate) {\n  return startOfWeek(dirtyDate, {weekStartsOn: 1})\n}\n\nmodule.exports = startOfISOWeek\n","var getISOYear = require('../get_iso_year/index.js')\nvar startOfISOWeek = require('../start_of_iso_week/index.js')\n\n/**\n * @category ISO Week-Numbering Year Helpers\n * @summary Return the start of an ISO week-numbering year for the given date.\n *\n * @description\n * Return the start of an ISO week-numbering year,\n * which always starts 3 days before the year's first Thursday.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|String|Number} date - the original date\n * @returns {Date} the start of an ISO year\n *\n * @example\n * // The start of an ISO week-numbering year for 2 July 2005:\n * var result = startOfISOYear(new Date(2005, 6, 2))\n * //=> Mon Jan 03 2005 00:00:00\n */\nfunction startOfISOYear (dirtyDate) {\n  var year = getISOYear(dirtyDate)\n  var fourthOfJanuary = new Date(0)\n  fourthOfJanuary.setFullYear(year, 0, 4)\n  fourthOfJanuary.setHours(0, 0, 0, 0)\n  var date = startOfISOWeek(fourthOfJanuary)\n  return date\n}\n\nmodule.exports = startOfISOYear\n","var parse = require('../parse/index.js')\n\n/**\n * @category Minute Helpers\n * @summary Return the start of a minute for the given date.\n *\n * @description\n * Return the start of a minute for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|String|Number} date - the original date\n * @returns {Date} the start of a minute\n *\n * @example\n * // The start of a minute for 1 December 2014 22:15:45.400:\n * var result = startOfMinute(new Date(2014, 11, 1, 22, 15, 45, 400))\n * //=> Mon Dec 01 2014 22:15:00\n */\nfunction startOfMinute (dirtyDate) {\n  var date = parse(dirtyDate)\n  date.setSeconds(0, 0)\n  return date\n}\n\nmodule.exports = startOfMinute\n","var parse = require('../parse/index.js')\n\n/**\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 * @param {Date|String|Number} date - the original date\n * @returns {Date} the start of a month\n *\n * @example\n * // The start of a month for 2 September 2014 11:55:00:\n * var result = startOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\nfunction startOfMonth (dirtyDate) {\n  var date = parse(dirtyDate)\n  date.setDate(1)\n  date.setHours(0, 0, 0, 0)\n  return date\n}\n\nmodule.exports = startOfMonth\n","var parse = require('../parse/index.js')\n\n/**\n * @category Quarter Helpers\n * @summary Return the start of a year quarter for the given date.\n *\n * @description\n * Return the start of a year quarter for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|String|Number} date - the original date\n * @returns {Date} the start of a quarter\n *\n * @example\n * // The start of a quarter for 2 September 2014 11:55:00:\n * var result = startOfQuarter(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Jul 01 2014 00:00:00\n */\nfunction startOfQuarter (dirtyDate) {\n  var date = parse(dirtyDate)\n  var currentMonth = date.getMonth()\n  var month = currentMonth - currentMonth % 3\n  date.setMonth(month, 1)\n  date.setHours(0, 0, 0, 0)\n  return date\n}\n\nmodule.exports = startOfQuarter\n","var parse = require('../parse/index.js')\n\n/**\n * @category Second Helpers\n * @summary Return the start of a second for the given date.\n *\n * @description\n * Return the start of a second for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|String|Number} date - the original date\n * @returns {Date} the start of a second\n *\n * @example\n * // The start of a second for 1 December 2014 22:15:45.400:\n * var result = startOfSecond(new Date(2014, 11, 1, 22, 15, 45, 400))\n * //=> Mon Dec 01 2014 22:15:45.000\n */\nfunction startOfSecond (dirtyDate) {\n  var date = parse(dirtyDate)\n  date.setMilliseconds(0)\n  return date\n}\n\nmodule.exports = startOfSecond\n","var startOfDay = require('../start_of_day/index.js')\n\n/**\n * @category Day Helpers\n * @summary Return the start of today.\n *\n * @description\n * Return the start of today.\n *\n * @returns {Date} the start of today\n *\n * @example\n * // If today is 6 October 2014:\n * var result = startOfToday()\n * //=> Mon Oct 6 2014 00:00:00\n */\nfunction startOfToday () {\n  return startOfDay(new Date())\n}\n\nmodule.exports = startOfToday\n","/**\n * @category Day Helpers\n * @summary Return the start of tomorrow.\n *\n * @description\n * Return the start of tomorrow.\n *\n * @returns {Date} the start of tomorrow\n *\n * @example\n * // If today is 6 October 2014:\n * var result = startOfTomorrow()\n * //=> Tue Oct 7 2014 00:00:00\n */\nfunction startOfTomorrow () {\n  var now = new Date()\n  var year = now.getFullYear()\n  var month = now.getMonth()\n  var day = now.getDate()\n\n  var date = new Date(0)\n  date.setFullYear(year, month, day + 1)\n  date.setHours(0, 0, 0, 0)\n  return date\n}\n\nmodule.exports = startOfTomorrow\n","var parse = require('../parse/index.js')\n\n/**\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 * @param {Date|String|Number} date - the original date\n * @param {Object} [options] - the object with options\n * @param {Number} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @returns {Date} the start of a week\n *\n * @example\n * // The start of a week for 2 September 2014 11:55:00:\n * var 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 * var result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0), {weekStartsOn: 1})\n * //=> Mon Sep 01 2014 00:00:00\n */\nfunction startOfWeek (dirtyDate, dirtyOptions) {\n  var weekStartsOn = dirtyOptions ? (Number(dirtyOptions.weekStartsOn) || 0) : 0\n\n  var date = parse(dirtyDate)\n  var day = date.getDay()\n  var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn\n\n  date.setDate(date.getDate() - diff)\n  date.setHours(0, 0, 0, 0)\n  return date\n}\n\nmodule.exports = startOfWeek\n","var parse = require('../parse/index.js')\n\n/**\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 * @param {Date|String|Number} date - the original date\n * @returns {Date} the start of a year\n *\n * @example\n * // The start of a year for 2 September 2014 11:55:00:\n * var result = startOfYear(new Date(2014, 8, 2, 11, 55, 00))\n * //=> Wed Jan 01 2014 00:00:00\n */\nfunction startOfYear (dirtyDate) {\n  var cleanDate = parse(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}\n\nmodule.exports = startOfYear\n","/**\n * @category Day Helpers\n * @summary Return the start of yesterday.\n *\n * @description\n * Return the start of yesterday.\n *\n * @returns {Date} the start of yesterday\n *\n * @example\n * // If today is 6 October 2014:\n * var result = startOfYesterday()\n * //=> Sun Oct 5 2014 00:00:00\n */\nfunction startOfYesterday () {\n  var now = new Date()\n  var year = now.getFullYear()\n  var month = now.getMonth()\n  var day = now.getDate()\n\n  var date = new Date(0)\n  date.setFullYear(year, month, day - 1)\n  date.setHours(0, 0, 0, 0)\n  return date\n}\n\nmodule.exports = startOfYesterday\n","var addDays = require('../add_days/index.js')\n\n/**\n * @category Day Helpers\n * @summary Subtract the specified number of days from the given date.\n *\n * @description\n * Subtract the specified number of days from the given date.\n *\n * @param {Date|String|Number} date - the date to be changed\n * @param {Number} amount - the amount of days to be subtracted\n * @returns {Date} the new date with the days subtracted\n *\n * @example\n * // Subtract 10 days from 1 September 2014:\n * var result = subDays(new Date(2014, 8, 1), 10)\n * //=> Fri Aug 22 2014 00:00:00\n */\nfunction subDays (dirtyDate, dirtyAmount) {\n  var amount = Number(dirtyAmount)\n  return addDays(dirtyDate, -amount)\n}\n\nmodule.exports = subDays\n","var addHours = require('../add_hours/index.js')\n\n/**\n * @category Hour Helpers\n * @summary Subtract the specified number of hours from the given date.\n *\n * @description\n * Subtract the specified number of hours from the given date.\n *\n * @param {Date|String|Number} date - the date to be changed\n * @param {Number} amount - the amount of hours to be subtracted\n * @returns {Date} the new date with the hours subtracted\n *\n * @example\n * // Subtract 2 hours from 11 July 2014 01:00:00:\n * var result = subHours(new Date(2014, 6, 11, 1, 0), 2)\n * //=> Thu Jul 10 2014 23:00:00\n */\nfunction subHours (dirtyDate, dirtyAmount) {\n  var amount = Number(dirtyAmount)\n  return addHours(dirtyDate, -amount)\n}\n\nmodule.exports = subHours\n","var addISOYears = require('../add_iso_years/index.js')\n\n/**\n * @category ISO Week-Numbering Year Helpers\n * @summary Subtract the specified number of ISO week-numbering years from the given date.\n *\n * @description\n * Subtract the specified number of ISO week-numbering years from the given date.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|String|Number} date - the date to be changed\n * @param {Number} amount - the amount of ISO week-numbering years to be subtracted\n * @returns {Date} the new date with the ISO week-numbering years subtracted\n *\n * @example\n * // Subtract 5 ISO week-numbering years from 1 September 2014:\n * var result = subISOYears(new Date(2014, 8, 1), 5)\n * //=> Mon Aug 31 2009 00:00:00\n */\nfunction subISOYears (dirtyDate, dirtyAmount) {\n  var amount = Number(dirtyAmount)\n  return addISOYears(dirtyDate, -amount)\n}\n\nmodule.exports = subISOYears\n","var addMilliseconds = require('../add_milliseconds/index.js')\n\n/**\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 * @param {Date|String|Number} date - the date to be changed\n * @param {Number} amount - the amount of milliseconds to be subtracted\n * @returns {Date} the new date with the milliseconds subtracted\n *\n * @example\n * // Subtract 750 milliseconds from 10 July 2014 12:45:30.000:\n * var result = subMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750)\n * //=> Thu Jul 10 2014 12:45:29.250\n */\nfunction subMilliseconds (dirtyDate, dirtyAmount) {\n  var amount = Number(dirtyAmount)\n  return addMilliseconds(dirtyDate, -amount)\n}\n\nmodule.exports = subMilliseconds\n","var addMinutes = require('../add_minutes/index.js')\n\n/**\n * @category Minute Helpers\n * @summary Subtract the specified number of minutes from the given date.\n *\n * @description\n * Subtract the specified number of minutes from the given date.\n *\n * @param {Date|String|Number} date - the date to be changed\n * @param {Number} amount - the amount of minutes to be subtracted\n * @returns {Date} the new date with the mintues subtracted\n *\n * @example\n * // Subtract 30 minutes from 10 July 2014 12:00:00:\n * var result = subMinutes(new Date(2014, 6, 10, 12, 0), 30)\n * //=> Thu Jul 10 2014 11:30:00\n */\nfunction subMinutes (dirtyDate, dirtyAmount) {\n  var amount = Number(dirtyAmount)\n  return addMinutes(dirtyDate, -amount)\n}\n\nmodule.exports = subMinutes\n","var addMonths = require('../add_months/index.js')\n\n/**\n * @category Month Helpers\n * @summary Subtract the specified number of months from the given date.\n *\n * @description\n * Subtract the specified number of months from the given date.\n *\n * @param {Date|String|Number} date - the date to be changed\n * @param {Number} amount - the amount of months to be subtracted\n * @returns {Date} the new date with the months subtracted\n *\n * @example\n * // Subtract 5 months from 1 February 2015:\n * var result = subMonths(new Date(2015, 1, 1), 5)\n * //=> Mon Sep 01 2014 00:00:00\n */\nfunction subMonths (dirtyDate, dirtyAmount) {\n  var amount = Number(dirtyAmount)\n  return addMonths(dirtyDate, -amount)\n}\n\nmodule.exports = subMonths\n","var addQuarters = require('../add_quarters/index.js')\n\n/**\n * @category Quarter Helpers\n * @summary Subtract the specified number of year quarters from the given date.\n *\n * @description\n * Subtract the specified number of year quarters from the given date.\n *\n * @param {Date|String|Number} date - the date to be changed\n * @param {Number} amount - the amount of quarters to be subtracted\n * @returns {Date} the new date with the quarters subtracted\n *\n * @example\n * // Subtract 3 quarters from 1 September 2014:\n * var result = subQuarters(new Date(2014, 8, 1), 3)\n * //=> Sun Dec 01 2013 00:00:00\n */\nfunction subQuarters (dirtyDate, dirtyAmount) {\n  var amount = Number(dirtyAmount)\n  return addQuarters(dirtyDate, -amount)\n}\n\nmodule.exports = subQuarters\n","var addSeconds = require('../add_seconds/index.js')\n\n/**\n * @category Second Helpers\n * @summary Subtract the specified number of seconds from the given date.\n *\n * @description\n * Subtract the specified number of seconds from the given date.\n *\n * @param {Date|String|Number} date - the date to be changed\n * @param {Number} amount - the amount of seconds to be subtracted\n * @returns {Date} the new date with the seconds subtracted\n *\n * @example\n * // Subtract 30 seconds from 10 July 2014 12:45:00:\n * var result = subSeconds(new Date(2014, 6, 10, 12, 45, 0), 30)\n * //=> Thu Jul 10 2014 12:44:30\n */\nfunction subSeconds (dirtyDate, dirtyAmount) {\n  var amount = Number(dirtyAmount)\n  return addSeconds(dirtyDate, -amount)\n}\n\nmodule.exports = subSeconds\n","var addWeeks = require('../add_weeks/index.js')\n\n/**\n * @category Week Helpers\n * @summary Subtract the specified number of weeks from the given date.\n *\n * @description\n * Subtract the specified number of weeks from the given date.\n *\n * @param {Date|String|Number} date - the date to be changed\n * @param {Number} amount - the amount of weeks to be subtracted\n * @returns {Date} the new date with the weeks subtracted\n *\n * @example\n * // Subtract 4 weeks from 1 September 2014:\n * var result = subWeeks(new Date(2014, 8, 1), 4)\n * //=> Mon Aug 04 2014 00:00:00\n */\nfunction subWeeks (dirtyDate, dirtyAmount) {\n  var amount = Number(dirtyAmount)\n  return addWeeks(dirtyDate, -amount)\n}\n\nmodule.exports = subWeeks\n","var addYears = require('../add_years/index.js')\n\n/**\n * @category Year Helpers\n * @summary Subtract the specified number of years from the given date.\n *\n * @description\n * Subtract the specified number of years from the given date.\n *\n * @param {Date|String|Number} date - the date to be changed\n * @param {Number} amount - the amount of years to be subtracted\n * @returns {Date} the new date with the years subtracted\n *\n * @example\n * // Subtract 5 years from 1 September 2014:\n * var result = subYears(new Date(2014, 8, 1), 5)\n * //=> Tue Sep 01 2009 00:00:00\n */\nfunction subYears (dirtyDate, dirtyAmount) {\n  var amount = Number(dirtyAmount)\n  return addYears(dirtyDate, -amount)\n}\n\nmodule.exports = subYears\n","/*!\n * Determine if an object is a Buffer\n *\n * @author   Feross Aboukhadijeh <https://feross.org>\n * @license  MIT\n */\n\n// The _isBuffer check is for Safari 5-7 support, because it's missing\n// Object.prototype.constructor. Remove this eventually\nmodule.exports = function (obj) {\n  return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)\n}\n\nfunction isBuffer (obj) {\n  return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n\n// For Node v0.10 support. Remove this eventually.\nfunction isSlowBuffer (obj) {\n  return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))\n}\n","/*!\n * JavaScript Cookie v2.2.1\n * https://github.com/js-cookie/js-cookie\n *\n * Copyright 2006, 2015 Klaus Hartl & Fagner Brack\n * Released under the MIT license\n */\n;(function (factory) {\n\tvar registeredInModuleLoader;\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine(factory);\n\t\tregisteredInModuleLoader = true;\n\t}\n\tif (typeof exports === 'object') {\n\t\tmodule.exports = factory();\n\t\tregisteredInModuleLoader = true;\n\t}\n\tif (!registeredInModuleLoader) {\n\t\tvar OldCookies = window.Cookies;\n\t\tvar api = window.Cookies = factory();\n\t\tapi.noConflict = function () {\n\t\t\twindow.Cookies = OldCookies;\n\t\t\treturn api;\n\t\t};\n\t}\n}(function () {\n\tfunction extend () {\n\t\tvar i = 0;\n\t\tvar result = {};\n\t\tfor (; i < arguments.length; i++) {\n\t\t\tvar attributes = arguments[ i ];\n\t\t\tfor (var key in attributes) {\n\t\t\t\tresult[key] = attributes[key];\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tfunction decode (s) {\n\t\treturn s.replace(/(%[0-9A-Z]{2})+/g, decodeURIComponent);\n\t}\n\n\tfunction init (converter) {\n\t\tfunction api() {}\n\n\t\tfunction set (key, value, attributes) {\n\t\t\tif (typeof document === 'undefined') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tattributes = extend({\n\t\t\t\tpath: '/'\n\t\t\t}, api.defaults, attributes);\n\n\t\t\tif (typeof attributes.expires === 'number') {\n\t\t\t\tattributes.expires = new Date(new Date() * 1 + attributes.expires * 864e+5);\n\t\t\t}\n\n\t\t\t// We're using \"expires\" because \"max-age\" is not supported by IE\n\t\t\tattributes.expires = attributes.expires ? attributes.expires.toUTCString() : '';\n\n\t\t\ttry {\n\t\t\t\tvar result = JSON.stringify(value);\n\t\t\t\tif (/^[\\{\\[]/.test(result)) {\n\t\t\t\t\tvalue = result;\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\tvalue = converter.write ?\n\t\t\t\tconverter.write(value, key) :\n\t\t\t\tencodeURIComponent(String(value))\n\t\t\t\t\t.replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);\n\n\t\t\tkey = encodeURIComponent(String(key))\n\t\t\t\t.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent)\n\t\t\t\t.replace(/[\\(\\)]/g, escape);\n\n\t\t\tvar stringifiedAttributes = '';\n\t\t\tfor (var attributeName in attributes) {\n\t\t\t\tif (!attributes[attributeName]) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tstringifiedAttributes += '; ' + attributeName;\n\t\t\t\tif (attributes[attributeName] === true) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Considers RFC 6265 section 5.2:\n\t\t\t\t// ...\n\t\t\t\t// 3.  If the remaining unparsed-attributes contains a %x3B (\";\")\n\t\t\t\t//     character:\n\t\t\t\t// Consume the characters of the unparsed-attributes up to,\n\t\t\t\t// not including, the first %x3B (\";\") character.\n\t\t\t\t// ...\n\t\t\t\tstringifiedAttributes += '=' + attributes[attributeName].split(';')[0];\n\t\t\t}\n\n\t\t\treturn (document.cookie = key + '=' + value + stringifiedAttributes);\n\t\t}\n\n\t\tfunction get (key, json) {\n\t\t\tif (typeof document === 'undefined') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar jar = {};\n\t\t\t// To prevent the for loop in the first place assign an empty array\n\t\t\t// in case there are no cookies at all.\n\t\t\tvar cookies = document.cookie ? document.cookie.split('; ') : [];\n\t\t\tvar i = 0;\n\n\t\t\tfor (; i < cookies.length; i++) {\n\t\t\t\tvar parts = cookies[i].split('=');\n\t\t\t\tvar cookie = parts.slice(1).join('=');\n\n\t\t\t\tif (!json && cookie.charAt(0) === '\"') {\n\t\t\t\t\tcookie = cookie.slice(1, -1);\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tvar name = decode(parts[0]);\n\t\t\t\t\tcookie = (converter.read || converter)(cookie, name) ||\n\t\t\t\t\t\tdecode(cookie);\n\n\t\t\t\t\tif (json) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tcookie = JSON.parse(cookie);\n\t\t\t\t\t\t} catch (e) {}\n\t\t\t\t\t}\n\n\t\t\t\t\tjar[name] = cookie;\n\n\t\t\t\t\tif (key === name) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {}\n\t\t\t}\n\n\t\t\treturn key ? jar[key] : jar;\n\t\t}\n\n\t\tapi.set = set;\n\t\tapi.get = function (key) {\n\t\t\treturn get(key, false /* read as raw */);\n\t\t};\n\t\tapi.getJSON = function (key) {\n\t\t\treturn get(key, true /* read as json */);\n\t\t};\n\t\tapi.remove = function (key, attributes) {\n\t\t\tset(key, '', extend(attributes, {\n\t\t\t\texpires: -1\n\t\t\t}));\n\t\t};\n\n\t\tapi.defaults = {};\n\n\t\tapi.withConverter = init;\n\n\t\treturn api;\n\t}\n\n\treturn init(function () {});\n}));\n","(function(){\r\n  var crypt = require('crypt'),\r\n      utf8 = require('charenc').utf8,\r\n      isBuffer = require('is-buffer'),\r\n      bin = require('charenc').bin,\r\n\r\n  // The core\r\n  md5 = function (message, options) {\r\n    // Convert to byte array\r\n    if (message.constructor == String)\r\n      if (options && options.encoding === 'binary')\r\n        message = bin.stringToBytes(message);\r\n      else\r\n        message = utf8.stringToBytes(message);\r\n    else if (isBuffer(message))\r\n      message = Array.prototype.slice.call(message, 0);\r\n    else if (!Array.isArray(message) && message.constructor !== Uint8Array)\r\n      message = message.toString();\r\n    // else, assume byte array already\r\n\r\n    var m = crypt.bytesToWords(message),\r\n        l = message.length * 8,\r\n        a =  1732584193,\r\n        b = -271733879,\r\n        c = -1732584194,\r\n        d =  271733878;\r\n\r\n    // Swap endian\r\n    for (var i = 0; i < m.length; i++) {\r\n      m[i] = ((m[i] <<  8) | (m[i] >>> 24)) & 0x00FF00FF |\r\n             ((m[i] << 24) | (m[i] >>>  8)) & 0xFF00FF00;\r\n    }\r\n\r\n    // Padding\r\n    m[l >>> 5] |= 0x80 << (l % 32);\r\n    m[(((l + 64) >>> 9) << 4) + 14] = l;\r\n\r\n    // Method shortcuts\r\n    var FF = md5._ff,\r\n        GG = md5._gg,\r\n        HH = md5._hh,\r\n        II = md5._ii;\r\n\r\n    for (var i = 0; i < m.length; i += 16) {\r\n\r\n      var aa = a,\r\n          bb = b,\r\n          cc = c,\r\n          dd = d;\r\n\r\n      a = FF(a, b, c, d, m[i+ 0],  7, -680876936);\r\n      d = FF(d, a, b, c, m[i+ 1], 12, -389564586);\r\n      c = FF(c, d, a, b, m[i+ 2], 17,  606105819);\r\n      b = FF(b, c, d, a, m[i+ 3], 22, -1044525330);\r\n      a = FF(a, b, c, d, m[i+ 4],  7, -176418897);\r\n      d = FF(d, a, b, c, m[i+ 5], 12,  1200080426);\r\n      c = FF(c, d, a, b, m[i+ 6], 17, -1473231341);\r\n      b = FF(b, c, d, a, m[i+ 7], 22, -45705983);\r\n      a = FF(a, b, c, d, m[i+ 8],  7,  1770035416);\r\n      d = FF(d, a, b, c, m[i+ 9], 12, -1958414417);\r\n      c = FF(c, d, a, b, m[i+10], 17, -42063);\r\n      b = FF(b, c, d, a, m[i+11], 22, -1990404162);\r\n      a = FF(a, b, c, d, m[i+12],  7,  1804603682);\r\n      d = FF(d, a, b, c, m[i+13], 12, -40341101);\r\n      c = FF(c, d, a, b, m[i+14], 17, -1502002290);\r\n      b = FF(b, c, d, a, m[i+15], 22,  1236535329);\r\n\r\n      a = GG(a, b, c, d, m[i+ 1],  5, -165796510);\r\n      d = GG(d, a, b, c, m[i+ 6],  9, -1069501632);\r\n      c = GG(c, d, a, b, m[i+11], 14,  643717713);\r\n      b = GG(b, c, d, a, m[i+ 0], 20, -373897302);\r\n      a = GG(a, b, c, d, m[i+ 5],  5, -701558691);\r\n      d = GG(d, a, b, c, m[i+10],  9,  38016083);\r\n      c = GG(c, d, a, b, m[i+15], 14, -660478335);\r\n      b = GG(b, c, d, a, m[i+ 4], 20, -405537848);\r\n      a = GG(a, b, c, d, m[i+ 9],  5,  568446438);\r\n      d = GG(d, a, b, c, m[i+14],  9, -1019803690);\r\n      c = GG(c, d, a, b, m[i+ 3], 14, -187363961);\r\n      b = GG(b, c, d, a, m[i+ 8], 20,  1163531501);\r\n      a = GG(a, b, c, d, m[i+13],  5, -1444681467);\r\n      d = GG(d, a, b, c, m[i+ 2],  9, -51403784);\r\n      c = GG(c, d, a, b, m[i+ 7], 14,  1735328473);\r\n      b = GG(b, c, d, a, m[i+12], 20, -1926607734);\r\n\r\n      a = HH(a, b, c, d, m[i+ 5],  4, -378558);\r\n      d = HH(d, a, b, c, m[i+ 8], 11, -2022574463);\r\n      c = HH(c, d, a, b, m[i+11], 16,  1839030562);\r\n      b = HH(b, c, d, a, m[i+14], 23, -35309556);\r\n      a = HH(a, b, c, d, m[i+ 1],  4, -1530992060);\r\n      d = HH(d, a, b, c, m[i+ 4], 11,  1272893353);\r\n      c = HH(c, d, a, b, m[i+ 7], 16, -155497632);\r\n      b = HH(b, c, d, a, m[i+10], 23, -1094730640);\r\n      a = HH(a, b, c, d, m[i+13],  4,  681279174);\r\n      d = HH(d, a, b, c, m[i+ 0], 11, -358537222);\r\n      c = HH(c, d, a, b, m[i+ 3], 16, -722521979);\r\n      b = HH(b, c, d, a, m[i+ 6], 23,  76029189);\r\n      a = HH(a, b, c, d, m[i+ 9],  4, -640364487);\r\n      d = HH(d, a, b, c, m[i+12], 11, -421815835);\r\n      c = HH(c, d, a, b, m[i+15], 16,  530742520);\r\n      b = HH(b, c, d, a, m[i+ 2], 23, -995338651);\r\n\r\n      a = II(a, b, c, d, m[i+ 0],  6, -198630844);\r\n      d = II(d, a, b, c, m[i+ 7], 10,  1126891415);\r\n      c = II(c, d, a, b, m[i+14], 15, -1416354905);\r\n      b = II(b, c, d, a, m[i+ 5], 21, -57434055);\r\n      a = II(a, b, c, d, m[i+12],  6,  1700485571);\r\n      d = II(d, a, b, c, m[i+ 3], 10, -1894986606);\r\n      c = II(c, d, a, b, m[i+10], 15, -1051523);\r\n      b = II(b, c, d, a, m[i+ 1], 21, -2054922799);\r\n      a = II(a, b, c, d, m[i+ 8],  6,  1873313359);\r\n      d = II(d, a, b, c, m[i+15], 10, -30611744);\r\n      c = II(c, d, a, b, m[i+ 6], 15, -1560198380);\r\n      b = II(b, c, d, a, m[i+13], 21,  1309151649);\r\n      a = II(a, b, c, d, m[i+ 4],  6, -145523070);\r\n      d = II(d, a, b, c, m[i+11], 10, -1120210379);\r\n      c = II(c, d, a, b, m[i+ 2], 15,  718787259);\r\n      b = II(b, c, d, a, m[i+ 9], 21, -343485551);\r\n\r\n      a = (a + aa) >>> 0;\r\n      b = (b + bb) >>> 0;\r\n      c = (c + cc) >>> 0;\r\n      d = (d + dd) >>> 0;\r\n    }\r\n\r\n    return crypt.endian([a, b, c, d]);\r\n  };\r\n\r\n  // Auxiliary functions\r\n  md5._ff  = function (a, b, c, d, x, s, t) {\r\n    var n = a + (b & c | ~b & d) + (x >>> 0) + t;\r\n    return ((n << s) | (n >>> (32 - s))) + b;\r\n  };\r\n  md5._gg  = function (a, b, c, d, x, s, t) {\r\n    var n = a + (b & d | c & ~d) + (x >>> 0) + t;\r\n    return ((n << s) | (n >>> (32 - s))) + b;\r\n  };\r\n  md5._hh  = function (a, b, c, d, x, s, t) {\r\n    var n = a + (b ^ c ^ d) + (x >>> 0) + t;\r\n    return ((n << s) | (n >>> (32 - s))) + b;\r\n  };\r\n  md5._ii  = function (a, b, c, d, x, s, t) {\r\n    var n = a + (c ^ (b | ~d)) + (x >>> 0) + t;\r\n    return ((n << s) | (n >>> (32 - s))) + b;\r\n  };\r\n\r\n  // Package private blocksize\r\n  md5._blocksize = 16;\r\n  md5._digestsize = 16;\r\n\r\n  module.exports = function (message, options) {\r\n    if (message === undefined || message === null)\r\n      throw new Error('Illegal argument ' + message);\r\n\r\n    var digestbytes = crypt.wordsToBytes(md5(message, options));\r\n    return options && options.asBytes ? digestbytes :\r\n        options && options.asString ? bin.bytesToString(digestbytes) :\r\n        crypt.bytesToHex(digestbytes);\r\n  };\r\n\r\n})();\r\n","import { isComputedProp, isObservableProp, createAtom, action, computed, _allowStateChangesInsideComputed, reaction, runInAction, observable, values, entries, _getGlobalState, isObservableArray, isObservableObject, defineProperty as defineProperty$1, ObservableMap, _interceptReads, intercept, observe, _getAdministration, set, makeObservable, getAtom } from 'mobx';\n\nvar livelinessChecking = \"warn\";\n/**\n * Defines what MST should do when running into reads / writes to objects that have died.\n * By default it will print a warning.\n * Use the `\"error\"` option to easy debugging to see where the error was thrown and when the offending read / write took place\n *\n * @param mode `\"warn\"`, `\"error\"` or `\"ignore\"`\n */\nfunction setLivelinessChecking(mode) {\n    livelinessChecking = mode;\n}\n/**\n * Returns the current liveliness checking mode.\n *\n * @returns `\"warn\"`, `\"error\"` or `\"ignore\"`\n */\nfunction getLivelinessChecking() {\n    return livelinessChecking;\n}\n/**\n * @deprecated use setLivelinessChecking instead\n * @hidden\n *\n * Defines what MST should do when running into reads / writes to objects that have died.\n * By default it will print a warning.\n * Use the `\"error\"` option to easy debugging to see where the error was thrown and when the offending read / write took place\n *\n * @param mode `\"warn\"`, `\"error\"` or `\"ignore\"`\n */\nfunction setLivelynessChecking(mode) {\n    setLivelinessChecking(mode);\n}\n\n/**\n * @hidden\n */\nvar Hook;\n(function (Hook) {\n    Hook[\"afterCreate\"] = \"afterCreate\";\n    Hook[\"afterAttach\"] = \"afterAttach\";\n    Hook[\"afterCreationFinalization\"] = \"afterCreationFinalization\";\n    Hook[\"beforeDetach\"] = \"beforeDetach\";\n    Hook[\"beforeDestroy\"] = \"beforeDestroy\";\n})(Hook || (Hook = {}));\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nfunction __extends(d, b) {\r\n    if (typeof b !== \"function\" && b !== null)\r\n        throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nvar __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    };\r\n    return __assign.apply(this, arguments);\r\n};\r\n\r\nfunction __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n}\r\n\r\nfunction __generator(thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (_) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n}\r\n\r\nfunction __values(o) {\r\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n    if (m) return m.call(o);\r\n    if (o && typeof o.length === \"number\") return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nfunction __read(o, n) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nfunction __spread() {\r\n    for (var ar = [], i = 0; i < arguments.length; i++)\r\n        ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n}\n\n/**\n * Returns the _actual_ type of the given tree node. (Or throws)\n *\n * @param object\n * @returns\n */\nfunction getType(object) {\n    assertIsStateTreeNode(object, 1);\n    return getStateTreeNode(object).type;\n}\n/**\n * Returns the _declared_ type of the given sub property of an object, array or map.\n * In the case of arrays and maps the property name is optional and will be ignored.\n *\n * Example:\n * ```ts\n * const Box = types.model({ x: 0, y: 0 })\n * const box = Box.create()\n *\n * console.log(getChildType(box, \"x\").name) // 'number'\n * ```\n *\n * @param object\n * @param propertyName\n * @returns\n */\nfunction getChildType(object, propertyName) {\n    assertIsStateTreeNode(object, 1);\n    return getStateTreeNode(object).getChildType(propertyName);\n}\n/**\n * Registers a function that will be invoked for each mutation that is applied to the provided model instance, or to any of its children.\n * See [patches](https://github.com/mobxjs/mobx-state-tree#patches) for more details. onPatch events are emitted immediately and will not await the end of a transaction.\n * Patches can be used to deep observe a model tree.\n *\n * @param target the model instance from which to receive patches\n * @param callback the callback that is invoked for each patch. The reversePatch is a patch that would actually undo the emitted patch\n * @returns function to remove the listener\n */\nfunction onPatch(target, callback) {\n    // check all arguments\n    assertIsStateTreeNode(target, 1);\n    assertIsFunction(callback, 2);\n    return getStateTreeNode(target).onPatch(callback);\n}\n/**\n * Registers a function that is invoked whenever a new snapshot for the given model instance is available.\n * The listener will only be fire at the end of the current MobX (trans)action.\n * See [snapshots](https://github.com/mobxjs/mobx-state-tree#snapshots) for more details.\n *\n * @param target\n * @param callback\n * @returns\n */\nfunction onSnapshot(target, callback) {\n    // check all arguments\n    assertIsStateTreeNode(target, 1);\n    assertIsFunction(callback, 2);\n    return getStateTreeNode(target).onSnapshot(callback);\n}\n/**\n * Applies a JSON-patch to the given model instance or bails out if the patch couldn't be applied\n * See [patches](https://github.com/mobxjs/mobx-state-tree#patches) for more details.\n *\n * Can apply a single past, or an array of patches.\n *\n * @param target\n * @param patch\n * @returns\n */\nfunction applyPatch(target, patch) {\n    // check all arguments\n    assertIsStateTreeNode(target, 1);\n    assertArg(patch, function (p) { return typeof p === \"object\"; }, \"object or array\", 2);\n    getStateTreeNode(target).applyPatches(asArray(patch));\n}\n/**\n * Small abstraction around `onPatch` and `applyPatch`, attaches a patch listener to a tree and records all the patches.\n * Returns an recorder object with the following signature:\n *\n * Example:\n * ```ts\n * export interface IPatchRecorder {\n *      // the recorded patches\n *      patches: IJsonPatch[]\n *      // the inverse of the recorded patches\n *      inversePatches: IJsonPatch[]\n *      // true if currently recording\n *      recording: boolean\n *      // stop recording patches\n *      stop(): void\n *      // resume recording patches\n *      resume(): void\n *      // apply all the recorded patches on the given target (the original subject if omitted)\n *      replay(target?: IAnyStateTreeNode): void\n *      // reverse apply the recorded patches on the given target  (the original subject if omitted)\n *      // stops the recorder if not already stopped\n *      undo(): void\n * }\n * ```\n *\n * The optional filter function allows to skip recording certain patches.\n *\n * @param subject\n * @param filter\n * @returns\n */\nfunction recordPatches(subject, filter) {\n    // check all arguments\n    assertIsStateTreeNode(subject, 1);\n    var data = {\n        patches: [],\n        reversedInversePatches: []\n    };\n    // we will generate the immutable copy of patches on demand for public consumption\n    var publicData = {};\n    var disposer;\n    var recorder = {\n        get recording() {\n            return !!disposer;\n        },\n        get patches() {\n            if (!publicData.patches) {\n                publicData.patches = data.patches.slice();\n            }\n            return publicData.patches;\n        },\n        get reversedInversePatches() {\n            if (!publicData.reversedInversePatches) {\n                publicData.reversedInversePatches = data.reversedInversePatches.slice();\n            }\n            return publicData.reversedInversePatches;\n        },\n        get inversePatches() {\n            if (!publicData.inversePatches) {\n                publicData.inversePatches = data.reversedInversePatches.slice().reverse();\n            }\n            return publicData.inversePatches;\n        },\n        stop: function () {\n            if (disposer) {\n                disposer();\n                disposer = undefined;\n            }\n        },\n        resume: function () {\n            if (disposer)\n                return;\n            disposer = onPatch(subject, function (patch, inversePatch) {\n                // skip patches that are asked to be filtered if there's a filter in place\n                if (filter && !filter(patch, inversePatch, getRunningActionContext())) {\n                    return;\n                }\n                data.patches.push(patch);\n                data.reversedInversePatches.unshift(inversePatch);\n                // mark immutable public patches as dirty\n                publicData.patches = undefined;\n                publicData.inversePatches = undefined;\n                publicData.reversedInversePatches = undefined;\n            });\n        },\n        replay: function (target) {\n            applyPatch(target || subject, data.patches);\n        },\n        undo: function (target) {\n            applyPatch(target || subject, data.reversedInversePatches);\n        }\n    };\n    recorder.resume();\n    return recorder;\n}\n/**\n * The inverse of `unprotect`.\n *\n * @param target\n */\nfunction protect(target) {\n    // check all arguments\n    assertIsStateTreeNode(target, 1);\n    var node = getStateTreeNode(target);\n    if (!node.isRoot)\n        throw fail$1(\"`protect` can only be invoked on root nodes\");\n    node.isProtectionEnabled = true;\n}\n/**\n * By default it is not allowed to directly modify a model. Models can only be modified through actions.\n * However, in some cases you don't care about the advantages (like replayability, traceability, etc) this yields.\n * For example because you are building a PoC or don't have any middleware attached to your tree.\n *\n * In that case you can disable this protection by calling `unprotect` on the root of your tree.\n *\n * Example:\n * ```ts\n * const Todo = types.model({\n *     done: false\n * }).actions(self => ({\n *     toggle() {\n *         self.done = !self.done\n *     }\n * }))\n *\n * const todo = Todo.create()\n * todo.done = true // throws!\n * todo.toggle() // OK\n * unprotect(todo)\n * todo.done = false // OK\n * ```\n */\nfunction unprotect(target) {\n    // check all arguments\n    assertIsStateTreeNode(target, 1);\n    var node = getStateTreeNode(target);\n    if (!node.isRoot)\n        throw fail$1(\"`unprotect` can only be invoked on root nodes\");\n    node.isProtectionEnabled = false;\n}\n/**\n * Returns true if the object is in protected mode, @see protect\n */\nfunction isProtected(target) {\n    return getStateTreeNode(target).isProtected;\n}\n/**\n * Applies a snapshot to a given model instances. Patch and snapshot listeners will be invoked as usual.\n *\n * @param target\n * @param snapshot\n * @returns\n */\nfunction applySnapshot(target, snapshot) {\n    // check all arguments\n    assertIsStateTreeNode(target, 1);\n    return getStateTreeNode(target).applySnapshot(snapshot);\n}\n/**\n * Calculates a snapshot from the given model instance. The snapshot will always reflect the latest state but use\n * structural sharing where possible. Doesn't require MobX transactions to be completed.\n *\n * @param target\n * @param applyPostProcess If true (the default) then postProcessSnapshot gets applied.\n * @returns\n */\nfunction getSnapshot(target, applyPostProcess) {\n    if (applyPostProcess === void 0) { applyPostProcess = true; }\n    // check all arguments\n    assertIsStateTreeNode(target, 1);\n    var node = getStateTreeNode(target);\n    if (applyPostProcess)\n        return node.snapshot;\n    return freeze(node.type.getSnapshot(node, false));\n}\n/**\n * Given a model instance, returns `true` if the object has a parent, that is, is part of another object, map or array.\n *\n * @param target\n * @param depth How far should we look upward? 1 by default.\n * @returns\n */\nfunction hasParent(target, depth) {\n    if (depth === void 0) { depth = 1; }\n    // check all arguments\n    assertIsStateTreeNode(target, 1);\n    assertIsNumber(depth, 2, 0);\n    var parent = getStateTreeNode(target).parent;\n    while (parent) {\n        if (--depth === 0)\n            return true;\n        parent = parent.parent;\n    }\n    return false;\n}\n/**\n * Returns the immediate parent of this object, or throws.\n *\n * Note that the immediate parent can be either an object, map or array, and\n * doesn't necessarily refer to the parent model.\n *\n * Please note that in child nodes access to the root is only possible\n * once the `afterAttach` hook has fired.\n *\n * @param target\n * @param depth How far should we look upward? 1 by default.\n * @returns\n */\nfunction getParent(target, depth) {\n    if (depth === void 0) { depth = 1; }\n    // check all arguments\n    assertIsStateTreeNode(target, 1);\n    assertIsNumber(depth, 2, 0);\n    var d = depth;\n    var parent = getStateTreeNode(target).parent;\n    while (parent) {\n        if (--d === 0)\n            return parent.storedValue;\n        parent = parent.parent;\n    }\n    throw fail$1(\"Failed to find the parent of \" + getStateTreeNode(target) + \" at depth \" + depth);\n}\n/**\n * Given a model instance, returns `true` if the object has a parent of given type, that is, is part of another object, map or array\n *\n * @param target\n * @param type\n * @returns\n */\nfunction hasParentOfType(target, type) {\n    // check all arguments\n    assertIsStateTreeNode(target, 1);\n    assertIsType(type, 2);\n    var parent = getStateTreeNode(target).parent;\n    while (parent) {\n        if (type.is(parent.storedValue))\n            return true;\n        parent = parent.parent;\n    }\n    return false;\n}\n/**\n * Returns the target's parent of a given type, or throws.\n *\n * @param target\n * @param type\n * @returns\n */\nfunction getParentOfType(target, type) {\n    // check all arguments\n    assertIsStateTreeNode(target, 1);\n    assertIsType(type, 2);\n    var parent = getStateTreeNode(target).parent;\n    while (parent) {\n        if (type.is(parent.storedValue))\n            return parent.storedValue;\n        parent = parent.parent;\n    }\n    throw fail$1(\"Failed to find the parent of \" + getStateTreeNode(target) + \" of a given type\");\n}\n/**\n * Given an object in a model tree, returns the root object of that tree.\n *\n * Please note that in child nodes access to the root is only possible\n * once the `afterAttach` hook has fired.\n *\n * @param target\n * @returns\n */\nfunction getRoot(target) {\n    // check all arguments\n    assertIsStateTreeNode(target, 1);\n    return getStateTreeNode(target).root.storedValue;\n}\n/**\n * Returns the path of the given object in the model tree\n *\n * @param target\n * @returns\n */\nfunction getPath(target) {\n    // check all arguments\n    assertIsStateTreeNode(target, 1);\n    return getStateTreeNode(target).path;\n}\n/**\n * Returns the path of the given object as unescaped string array.\n *\n * @param target\n * @returns\n */\nfunction getPathParts(target) {\n    // check all arguments\n    assertIsStateTreeNode(target, 1);\n    return splitJsonPath(getStateTreeNode(target).path);\n}\n/**\n * Returns true if the given object is the root of a model tree.\n *\n * @param target\n * @returns\n */\nfunction isRoot(target) {\n    // check all arguments\n    assertIsStateTreeNode(target, 1);\n    return getStateTreeNode(target).isRoot;\n}\n/**\n * Resolves a path relatively to a given object.\n * Returns undefined if no value can be found.\n *\n * @param target\n * @param path escaped json path\n * @returns\n */\nfunction resolvePath(target, path) {\n    // check all arguments\n    assertIsStateTreeNode(target, 1);\n    assertIsString(path, 2);\n    var node = resolveNodeByPath(getStateTreeNode(target), path);\n    return node ? node.value : undefined;\n}\n/**\n * Resolves a model instance given a root target, the type and the identifier you are searching for.\n * Returns undefined if no value can be found.\n *\n * @param type\n * @param target\n * @param identifier\n * @returns\n */\nfunction resolveIdentifier(type, target, identifier) {\n    // check all arguments\n    assertIsType(type, 1);\n    assertIsStateTreeNode(target, 2);\n    assertIsValidIdentifier(identifier, 3);\n    var node = getStateTreeNode(target).root.identifierCache.resolve(type, normalizeIdentifier(identifier));\n    return node === null || node === void 0 ? void 0 : node.value;\n}\n/**\n * Returns the identifier of the target node.\n * This is the *string normalized* identifier, which might not match the type of the identifier attribute\n *\n * @param target\n * @returns\n */\nfunction getIdentifier(target) {\n    // check all arguments\n    assertIsStateTreeNode(target, 1);\n    return getStateTreeNode(target).identifier;\n}\n/**\n * Tests if a reference is valid (pointing to an existing node and optionally if alive) and returns such reference if it the check passes,\n * else it returns undefined.\n *\n * @param getter Function to access the reference.\n * @param checkIfAlive true to also make sure the referenced node is alive (default), false to skip this check.\n * @returns\n */\nfunction tryReference(getter, checkIfAlive) {\n    if (checkIfAlive === void 0) { checkIfAlive = true; }\n    try {\n        var node = getter();\n        if (node === undefined || node === null) {\n            return undefined;\n        }\n        else if (isStateTreeNode(node)) {\n            if (!checkIfAlive) {\n                return node;\n            }\n            else {\n                return isAlive(node) ? node : undefined;\n            }\n        }\n        else {\n            throw fail$1(\"The reference to be checked is not one of node, null or undefined\");\n        }\n    }\n    catch (e) {\n        if (e instanceof InvalidReferenceError) {\n            return undefined;\n        }\n        throw e;\n    }\n}\n/**\n * Tests if a reference is valid (pointing to an existing node and optionally if alive) and returns if the check passes or not.\n *\n * @param getter Function to access the reference.\n * @param checkIfAlive true to also make sure the referenced node is alive (default), false to skip this check.\n * @returns\n */\nfunction isValidReference(getter, checkIfAlive) {\n    if (checkIfAlive === void 0) { checkIfAlive = true; }\n    try {\n        var node = getter();\n        if (node === undefined || node === null) {\n            return false;\n        }\n        else if (isStateTreeNode(node)) {\n            return checkIfAlive ? isAlive(node) : true;\n        }\n        else {\n            throw fail$1(\"The reference to be checked is not one of node, null or undefined\");\n        }\n    }\n    catch (e) {\n        if (e instanceof InvalidReferenceError) {\n            return false;\n        }\n        throw e;\n    }\n}\n/**\n * Try to resolve a given path relative to a given node.\n *\n * @param target\n * @param path\n * @returns\n */\nfunction tryResolve(target, path) {\n    // check all arguments\n    assertIsStateTreeNode(target, 1);\n    assertIsString(path, 2);\n    var node = resolveNodeByPath(getStateTreeNode(target), path, false);\n    if (node === undefined)\n        return undefined;\n    try {\n        return node.value;\n    }\n    catch (e) {\n        // For what ever reason not resolvable (e.g. totally not existing path, or value that cannot be fetched)\n        // see test / issue: 'try resolve doesn't work #686'\n        return undefined;\n    }\n}\n/**\n * Given two state tree nodes that are part of the same tree,\n * returns the shortest jsonpath needed to navigate from the one to the other\n *\n * @param base\n * @param target\n * @returns\n */\nfunction getRelativePath(base, target) {\n    // check all arguments\n    assertIsStateTreeNode(base, 1);\n    assertIsStateTreeNode(target, 2);\n    return getRelativePathBetweenNodes(getStateTreeNode(base), getStateTreeNode(target));\n}\n/**\n * Returns a deep copy of the given state tree node as new tree.\n * Short hand for `snapshot(x) = getType(x).create(getSnapshot(x))`\n *\n * _Tip: clone will create a literal copy, including the same identifiers. To modify identifiers etc during cloning, don't use clone but take a snapshot of the tree, modify it, and create new instance_\n *\n * @param source\n * @param keepEnvironment indicates whether the clone should inherit the same environment (`true`, the default), or not have an environment (`false`). If an object is passed in as second argument, that will act as the environment for the cloned tree.\n * @returns\n */\nfunction clone(source, keepEnvironment) {\n    if (keepEnvironment === void 0) { keepEnvironment = true; }\n    // check all arguments\n    assertIsStateTreeNode(source, 1);\n    var node = getStateTreeNode(source);\n    return node.type.create(node.snapshot, keepEnvironment === true\n        ? node.root.environment\n        : keepEnvironment === false\n            ? undefined\n            : keepEnvironment); // it's an object or something else\n}\n/**\n * Removes a model element from the state tree, and let it live on as a new state tree\n */\nfunction detach(target) {\n    // check all arguments\n    assertIsStateTreeNode(target, 1);\n    getStateTreeNode(target).detach();\n    return target;\n}\n/**\n * Removes a model element from the state tree, and mark it as end-of-life; the element should not be used anymore\n */\nfunction destroy(target) {\n    // check all arguments\n    assertIsStateTreeNode(target, 1);\n    var node = getStateTreeNode(target);\n    if (node.isRoot)\n        node.die();\n    else\n        node.parent.removeChild(node.subpath);\n}\n/**\n * Returns true if the given state tree node is not killed yet.\n * This means that the node is still a part of a tree, and that `destroy`\n * has not been called. If a node is not alive anymore, the only thing one can do with it\n * is requesting it's last path and snapshot\n *\n * @param target\n * @returns\n */\nfunction isAlive(target) {\n    // check all arguments\n    assertIsStateTreeNode(target, 1);\n    return getStateTreeNode(target).observableIsAlive;\n}\n/**\n * Use this utility to register a function that should be called whenever the\n * targeted state tree node is destroyed. This is a useful alternative to managing\n * cleanup methods yourself using the `beforeDestroy` hook.\n *\n * This methods returns the same disposer that was passed as argument.\n *\n * Example:\n * ```ts\n * const Todo = types.model({\n *   title: types.string\n * }).actions(self => ({\n *   afterCreate() {\n *     const autoSaveDisposer = reaction(\n *       () => getSnapshot(self),\n *       snapshot => sendSnapshotToServerSomehow(snapshot)\n *     )\n *     // stop sending updates to server if this\n *     // instance is destroyed\n *     addDisposer(self, autoSaveDisposer)\n *   }\n * }))\n * ```\n *\n * @param target\n * @param disposer\n * @returns The same disposer that was passed as argument\n */\nfunction addDisposer(target, disposer) {\n    // check all arguments\n    assertIsStateTreeNode(target, 1);\n    assertIsFunction(disposer, 2);\n    var node = getStateTreeNode(target);\n    node.addDisposer(disposer);\n    return disposer;\n}\n/**\n * Returns the environment of the current state tree. For more info on environments,\n * see [Dependency injection](https://github.com/mobxjs/mobx-state-tree#dependency-injection)\n *\n * Please note that in child nodes access to the root is only possible\n * once the `afterAttach` hook has fired\n *\n * Returns an empty environment if the tree wasn't initialized with an environment\n *\n * @param target\n * @returns\n */\nfunction getEnv(target) {\n    // check all arguments\n    assertIsStateTreeNode(target, 1);\n    var node = getStateTreeNode(target);\n    var env = node.root.environment;\n    if (!env)\n        return EMPTY_OBJECT;\n    return env;\n}\n/**\n * Performs a depth first walk through a tree.\n */\nfunction walk(target, processor) {\n    // check all arguments\n    assertIsStateTreeNode(target, 1);\n    assertIsFunction(processor, 2);\n    var node = getStateTreeNode(target);\n    // tslint:disable-next-line:no_unused-variable\n    node.getChildren().forEach(function (child) {\n        if (isStateTreeNode(child.storedValue))\n            walk(child.storedValue, processor);\n    });\n    processor(node.storedValue);\n}\n/**\n * Returns a reflection of the model type properties and name for either a model type or model node.\n *\n * @param typeOrNode\n * @returns\n */\nfunction getPropertyMembers(typeOrNode) {\n    var type;\n    if (isStateTreeNode(typeOrNode)) {\n        type = getType(typeOrNode);\n    }\n    else {\n        type = typeOrNode;\n    }\n    assertArg(type, function (t) { return isModelType(t); }, \"model type or model instance\", 1);\n    return {\n        name: type.name,\n        properties: __assign({}, type.properties)\n    };\n}\n/**\n * Returns a reflection of the model node, including name, properties, views, volatile and actions.\n *\n * @param target\n * @returns\n */\nfunction getMembers(target) {\n    var type = getStateTreeNode(target).type;\n    var reflected = __assign(__assign({}, getPropertyMembers(type)), { actions: [], volatile: [], views: [] });\n    var props = Object.getOwnPropertyNames(target);\n    props.forEach(function (key) {\n        if (key in reflected.properties)\n            return;\n        var descriptor = Object.getOwnPropertyDescriptor(target, key);\n        if (descriptor.get) {\n            if (isComputedProp(target, key))\n                reflected.views.push(key);\n            else\n                reflected.volatile.push(key);\n            return;\n        }\n        if (descriptor.value._isMSTAction === true)\n            reflected.actions.push(key);\n        else if (isObservableProp(target, key))\n            reflected.volatile.push(key);\n        else\n            reflected.views.push(key);\n    });\n    return reflected;\n}\n/**\n * Casts a node snapshot or instance type to an instance type so it can be assigned to a type instance.\n * Note that this is just a cast for the type system, this is, it won't actually convert a snapshot to an instance,\n * but just fool typescript into thinking so.\n * Either way, casting when outside an assignation operation won't compile.\n *\n * Example:\n * ```ts\n * const ModelA = types.model({\n *   n: types.number\n * }).actions(self => ({\n *   setN(aNumber: number) {\n *     self.n = aNumber\n *   }\n * }))\n *\n * const ModelB = types.model({\n *   innerModel: ModelA\n * }).actions(self => ({\n *   someAction() {\n *     // this will allow the compiler to assign a snapshot to the property\n *     self.innerModel = cast({ a: 5 })\n *   }\n * }))\n * ```\n *\n * @param snapshotOrInstance Snapshot or instance\n * @returns The same object casted as an instance\n */\nfunction cast(snapshotOrInstance) {\n    return snapshotOrInstance;\n}\n/**\n * Casts a node instance type to an snapshot type so it can be assigned to a type snapshot (e.g. to be used inside a create call).\n * Note that this is just a cast for the type system, this is, it won't actually convert an instance to a snapshot,\n * but just fool typescript into thinking so.\n *\n * Example:\n * ```ts\n * const ModelA = types.model({\n *   n: types.number\n * }).actions(self => ({\n *   setN(aNumber: number) {\n *     self.n = aNumber\n *   }\n * }))\n *\n * const ModelB = types.model({\n *   innerModel: ModelA\n * })\n *\n * const a = ModelA.create({ n: 5 });\n * // this will allow the compiler to use a model as if it were a snapshot\n * const b = ModelB.create({ innerModel: castToSnapshot(a)})\n * ```\n *\n * @param snapshotOrInstance Snapshot or instance\n * @returns The same object casted as an input (creation) snapshot\n */\nfunction castToSnapshot(snapshotOrInstance) {\n    return snapshotOrInstance;\n}\n/**\n * Casts a node instance type to a reference snapshot type so it can be assigned to a refernence snapshot (e.g. to be used inside a create call).\n * Note that this is just a cast for the type system, this is, it won't actually convert an instance to a refererence snapshot,\n * but just fool typescript into thinking so.\n *\n * Example:\n * ```ts\n * const ModelA = types.model({\n *   id: types.identifier,\n *   n: types.number\n * }).actions(self => ({\n *   setN(aNumber: number) {\n *     self.n = aNumber\n *   }\n * }))\n *\n * const ModelB = types.model({\n *   refA: types.reference(ModelA)\n * })\n *\n * const a = ModelA.create({ id: 'someId', n: 5 });\n * // this will allow the compiler to use a model as if it were a reference snapshot\n * const b = ModelB.create({ refA: castToReferenceSnapshot(a)})\n * ```\n *\n * @param instance Instance\n * @returns The same object casted as an reference snapshot (string or number)\n */\nfunction castToReferenceSnapshot(instance) {\n    return instance;\n}\n/**\n * Returns the unique node id (not to be confused with the instance identifier) for a\n * given instance.\n * This id is a number that is unique for each instance.\n *\n * @export\n * @param target\n * @returns\n */\nfunction getNodeId(target) {\n    assertIsStateTreeNode(target, 1);\n    return getStateTreeNode(target).nodeId;\n}\n\n/**\n * @internal\n * @hidden\n */\nvar BaseNode = /** @class */ (function () {\n    function BaseNode(type, parent, subpath, environment) {\n        Object.defineProperty(this, \"type\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: type\n        });\n        Object.defineProperty(this, \"environment\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: environment\n        });\n        Object.defineProperty(this, \"_escapedSubpath\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"_subpath\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"_subpathUponDeath\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"_pathUponDeath\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"storedValue\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        }); // usually the same type as the value, but not always (such as with references)\n        Object.defineProperty(this, \"aliveAtom\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"_state\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: NodeLifeCycle.INITIALIZING\n        });\n        Object.defineProperty(this, \"_hookSubscribers\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"_parent\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"pathAtom\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        this.environment = environment;\n        this.baseSetParent(parent, subpath);\n    }\n    Object.defineProperty(BaseNode.prototype, \"subpath\", {\n        get: function () {\n            return this._subpath;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(BaseNode.prototype, \"subpathUponDeath\", {\n        get: function () {\n            return this._subpathUponDeath;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(BaseNode.prototype, \"pathUponDeath\", {\n        get: function () {\n            return this._pathUponDeath;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(BaseNode.prototype, \"value\", {\n        get: function () {\n            return this.type.getValue(this);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(BaseNode.prototype, \"state\", {\n        get: function () {\n            return this._state;\n        },\n        set: function (val) {\n            var wasAlive = this.isAlive;\n            this._state = val;\n            var isAlive = this.isAlive;\n            if (this.aliveAtom && wasAlive !== isAlive) {\n                this.aliveAtom.reportChanged();\n            }\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(BaseNode.prototype, \"fireInternalHook\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (name) {\n            if (this._hookSubscribers) {\n                this._hookSubscribers.emit(name, this, name);\n            }\n        }\n    });\n    Object.defineProperty(BaseNode.prototype, \"registerHook\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (hook, hookHandler) {\n            if (!this._hookSubscribers) {\n                this._hookSubscribers = new EventHandlers();\n            }\n            return this._hookSubscribers.register(hook, hookHandler);\n        }\n    });\n    Object.defineProperty(BaseNode.prototype, \"parent\", {\n        get: function () {\n            return this._parent;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(BaseNode.prototype, \"getReconciliationType\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            return this.type;\n        }\n    });\n    Object.defineProperty(BaseNode.prototype, \"baseSetParent\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (parent, subpath) {\n            this._parent = parent;\n            this._subpath = subpath;\n            this._escapedSubpath = undefined; // regenerate when needed\n            if (this.pathAtom) {\n                this.pathAtom.reportChanged();\n            }\n        }\n    });\n    Object.defineProperty(BaseNode.prototype, \"path\", {\n        /*\n         * Returns (escaped) path representation as string\n         */\n        get: function () {\n            return this.getEscapedPath(true);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(BaseNode.prototype, \"getEscapedPath\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (reportObserved) {\n            if (reportObserved) {\n                if (!this.pathAtom) {\n                    this.pathAtom = createAtom(\"path\");\n                }\n                this.pathAtom.reportObserved();\n            }\n            if (!this.parent)\n                return \"\";\n            // regenerate escaped subpath if needed\n            if (this._escapedSubpath === undefined) {\n                this._escapedSubpath = !this._subpath ? \"\" : escapeJsonPath(this._subpath);\n            }\n            return this.parent.getEscapedPath(reportObserved) + \"/\" + this._escapedSubpath;\n        }\n    });\n    Object.defineProperty(BaseNode.prototype, \"isRoot\", {\n        get: function () {\n            return this.parent === null;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(BaseNode.prototype, \"isAlive\", {\n        get: function () {\n            return this.state !== NodeLifeCycle.DEAD;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(BaseNode.prototype, \"isDetaching\", {\n        get: function () {\n            return this.state === NodeLifeCycle.DETACHING;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(BaseNode.prototype, \"observableIsAlive\", {\n        get: function () {\n            if (!this.aliveAtom) {\n                this.aliveAtom = createAtom(\"alive\");\n            }\n            this.aliveAtom.reportObserved();\n            return this.isAlive;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(BaseNode.prototype, \"baseFinalizeCreation\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (whenFinalized) {\n            if (devMode()) {\n                if (!this.isAlive) {\n                    // istanbul ignore next\n                    throw fail(\"assertion failed: cannot finalize the creation of a node that is already dead\");\n                }\n            }\n            // goal: afterCreate hooks runs depth-first. After attach runs parent first, so on afterAttach the parent has completed already\n            if (this.state === NodeLifeCycle.CREATED) {\n                if (this.parent) {\n                    if (this.parent.state !== NodeLifeCycle.FINALIZED) {\n                        // parent not ready yet, postpone\n                        return;\n                    }\n                    this.fireHook(Hook.afterAttach);\n                }\n                this.state = NodeLifeCycle.FINALIZED;\n                if (whenFinalized) {\n                    whenFinalized();\n                }\n            }\n        }\n    });\n    Object.defineProperty(BaseNode.prototype, \"baseFinalizeDeath\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            if (this._hookSubscribers) {\n                this._hookSubscribers.clearAll();\n            }\n            this._subpathUponDeath = this._subpath;\n            this._pathUponDeath = this.getEscapedPath(false);\n            this.baseSetParent(null, \"\");\n            this.state = NodeLifeCycle.DEAD;\n        }\n    });\n    Object.defineProperty(BaseNode.prototype, \"baseAboutToDie\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            this.fireHook(Hook.beforeDestroy);\n        }\n    });\n    return BaseNode;\n}());\n\n/**\n * @internal\n * @hidden\n */\nvar ScalarNode = /** @class */ (function (_super) {\n    __extends(ScalarNode, _super);\n    function ScalarNode(simpleType, parent, subpath, environment, initialSnapshot) {\n        var _this = _super.call(this, simpleType, parent, subpath, environment) || this;\n        try {\n            _this.storedValue = simpleType.createNewInstance(initialSnapshot);\n        }\n        catch (e) {\n            // short-cut to die the instance, to avoid the snapshot computed starting to throw...\n            _this.state = NodeLifeCycle.DEAD;\n            throw e;\n        }\n        _this.state = NodeLifeCycle.CREATED;\n        // for scalar nodes there's no point in firing this event since it would fire on the constructor, before\n        // anybody can actually register for/listen to it\n        // this.fireHook(Hook.AfterCreate)\n        _this.finalizeCreation();\n        return _this;\n    }\n    Object.defineProperty(ScalarNode.prototype, \"root\", {\n        get: function () {\n            // future optimization: store root ref in the node and maintain it\n            if (!this.parent)\n                throw fail$1(\"This scalar node is not part of a tree\");\n            return this.parent.root;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(ScalarNode.prototype, \"setParent\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (newParent, subpath) {\n            var parentChanged = this.parent !== newParent;\n            var subpathChanged = this.subpath !== subpath;\n            if (!parentChanged && !subpathChanged) {\n                return;\n            }\n            if (devMode()) {\n                if (!subpath) {\n                    // istanbul ignore next\n                    throw fail$1(\"assertion failed: subpath expected\");\n                }\n                if (!newParent) {\n                    // istanbul ignore next\n                    throw fail$1(\"assertion failed: parent expected\");\n                }\n                if (parentChanged) {\n                    // istanbul ignore next\n                    throw fail$1(\"assertion failed: scalar nodes cannot change their parent\");\n                }\n            }\n            this.environment = undefined; // use parent's\n            this.baseSetParent(this.parent, subpath);\n        }\n    });\n    Object.defineProperty(ScalarNode.prototype, \"snapshot\", {\n        get: function () {\n            return freeze(this.getSnapshot());\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(ScalarNode.prototype, \"getSnapshot\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            return this.type.getSnapshot(this);\n        }\n    });\n    Object.defineProperty(ScalarNode.prototype, \"toString\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            var path = (this.isAlive ? this.path : this.pathUponDeath) || \"<root>\";\n            return this.type.name + \"@\" + path + (this.isAlive ? \"\" : \" [dead]\");\n        }\n    });\n    Object.defineProperty(ScalarNode.prototype, \"die\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            if (!this.isAlive || this.state === NodeLifeCycle.DETACHING)\n                return;\n            this.aboutToDie();\n            this.finalizeDeath();\n        }\n    });\n    Object.defineProperty(ScalarNode.prototype, \"finalizeCreation\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            this.baseFinalizeCreation();\n        }\n    });\n    Object.defineProperty(ScalarNode.prototype, \"aboutToDie\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            this.baseAboutToDie();\n        }\n    });\n    Object.defineProperty(ScalarNode.prototype, \"finalizeDeath\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            this.baseFinalizeDeath();\n        }\n    });\n    Object.defineProperty(ScalarNode.prototype, \"fireHook\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (name) {\n            this.fireInternalHook(name);\n        }\n    });\n    return ScalarNode;\n}(BaseNode));\nScalarNode.prototype.die = action(ScalarNode.prototype.die);\n\nvar nextNodeId = 1;\nvar snapshotReactionOptions = {\n    onError: function (e) {\n        throw e;\n    }\n};\n/**\n * @internal\n * @hidden\n */\nvar ObjectNode = /** @class */ (function (_super) {\n    __extends(ObjectNode, _super);\n    function ObjectNode(complexType, parent, subpath, environment, initialValue) {\n        var _this = _super.call(this, complexType, parent, subpath, environment) || this;\n        Object.defineProperty(_this, \"nodeId\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: ++nextNodeId\n        });\n        Object.defineProperty(_this, \"identifierAttribute\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(_this, \"identifier\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        }); // Identifier is always normalized to string, even if the identifier property isn't\n        Object.defineProperty(_this, \"unnormalizedIdentifier\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(_this, \"identifierCache\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(_this, \"isProtectionEnabled\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: true\n        });\n        Object.defineProperty(_this, \"middlewares\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(_this, \"_applyPatches\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(_this, \"_applySnapshot\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(_this, \"_autoUnbox\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: true\n        }); // unboxing is disabled when reading child nodes\n        Object.defineProperty(_this, \"_isRunningAction\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: false\n        }); // only relevant for root\n        Object.defineProperty(_this, \"_hasSnapshotReaction\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: false\n        });\n        Object.defineProperty(_this, \"_observableInstanceState\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: 0 /* UNINITIALIZED */\n        });\n        Object.defineProperty(_this, \"_childNodes\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(_this, \"_initialSnapshot\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(_this, \"_cachedInitialSnapshot\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(_this, \"_cachedInitialSnapshotCreated\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: false\n        });\n        Object.defineProperty(_this, \"_snapshotComputed\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(_this, \"_snapshotUponDeath\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        // #region internal event handling\n        Object.defineProperty(_this, \"_internalEvents\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        _this._snapshotComputed = computed(function () { return freeze(_this.getSnapshot()); });\n        _this.unbox = _this.unbox.bind(_this);\n        _this._initialSnapshot = freeze(initialValue);\n        _this.identifierAttribute = complexType.identifierAttribute;\n        if (!parent) {\n            _this.identifierCache = new IdentifierCache();\n        }\n        _this._childNodes = complexType.initializeChildNodes(_this, _this._initialSnapshot);\n        // identifier can not be changed during lifecycle of a node\n        // so we safely can read it from initial snapshot\n        _this.identifier = null;\n        _this.unnormalizedIdentifier = null;\n        if (_this.identifierAttribute && _this._initialSnapshot) {\n            var id = _this._initialSnapshot[_this.identifierAttribute];\n            if (id === undefined) {\n                // try with the actual node if not (for optional identifiers)\n                var childNode = _this._childNodes[_this.identifierAttribute];\n                if (childNode) {\n                    id = childNode.value;\n                }\n            }\n            if (typeof id !== \"string\" && typeof id !== \"number\") {\n                throw fail$1(\"Instance identifier '\" + _this.identifierAttribute + \"' for type '\" + _this.type.name + \"' must be a string or a number\");\n            }\n            // normalize internal identifier to string\n            _this.identifier = normalizeIdentifier(id);\n            _this.unnormalizedIdentifier = id;\n        }\n        if (!parent) {\n            _this.identifierCache.addNodeToCache(_this);\n        }\n        else {\n            parent.root.identifierCache.addNodeToCache(_this);\n        }\n        return _this;\n    }\n    Object.defineProperty(ObjectNode.prototype, \"applyPatches\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (patches) {\n            this.createObservableInstanceIfNeeded();\n            this._applyPatches(patches);\n        }\n    });\n    Object.defineProperty(ObjectNode.prototype, \"applySnapshot\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (snapshot) {\n            this.createObservableInstanceIfNeeded();\n            this._applySnapshot(snapshot);\n        }\n    });\n    Object.defineProperty(ObjectNode.prototype, \"createObservableInstanceIfNeeded\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            if (this._observableInstanceState === 0 /* UNINITIALIZED */) {\n                this.createObservableInstance();\n            }\n        }\n    });\n    Object.defineProperty(ObjectNode.prototype, \"createObservableInstance\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            var e_1, _a;\n            if (devMode()) {\n                if (this.state !== NodeLifeCycle.INITIALIZING) {\n                    // istanbul ignore next\n                    throw fail$1(\"assertion failed: the creation of the observable instance must be done on the initializing phase\");\n                }\n            }\n            this._observableInstanceState = 1 /* CREATING */;\n            // make sure the parent chain is created as well\n            // array with parent chain from parent to child\n            var parentChain = [];\n            var parent = this.parent;\n            // for performance reasons we never go back further than the most direct\n            // uninitialized parent\n            // this is done to avoid traversing the whole tree to the root when using\n            // the same reference again\n            while (parent &&\n                parent._observableInstanceState === 0 /* UNINITIALIZED */) {\n                parentChain.unshift(parent);\n                parent = parent.parent;\n            }\n            try {\n                // initialize the uninitialized parent chain from parent to child\n                for (var parentChain_1 = __values(parentChain), parentChain_1_1 = parentChain_1.next(); !parentChain_1_1.done; parentChain_1_1 = parentChain_1.next()) {\n                    var p = parentChain_1_1.value;\n                    p.createObservableInstanceIfNeeded();\n                }\n            }\n            catch (e_1_1) { e_1 = { error: e_1_1 }; }\n            finally {\n                try {\n                    if (parentChain_1_1 && !parentChain_1_1.done && (_a = parentChain_1.return)) _a.call(parentChain_1);\n                }\n                finally { if (e_1) throw e_1.error; }\n            }\n            var type = this.type;\n            try {\n                this.storedValue = type.createNewInstance(this._childNodes);\n                this.preboot();\n                this._isRunningAction = true;\n                type.finalizeNewInstance(this, this.storedValue);\n            }\n            catch (e) {\n                // short-cut to die the instance, to avoid the snapshot computed starting to throw...\n                this.state = NodeLifeCycle.DEAD;\n                throw e;\n            }\n            finally {\n                this._isRunningAction = false;\n            }\n            this._observableInstanceState = 2 /* CREATED */;\n            this._snapshotComputed.trackAndCompute();\n            if (this.isRoot)\n                this._addSnapshotReaction();\n            this._childNodes = EMPTY_OBJECT;\n            this.state = NodeLifeCycle.CREATED;\n            this.fireHook(Hook.afterCreate);\n            this.finalizeCreation();\n        }\n    });\n    Object.defineProperty(ObjectNode.prototype, \"root\", {\n        get: function () {\n            var parent = this.parent;\n            return parent ? parent.root : this;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(ObjectNode.prototype, \"clearParent\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            if (!this.parent)\n                return;\n            // detach if attached\n            this.fireHook(Hook.beforeDetach);\n            var previousState = this.state;\n            this.state = NodeLifeCycle.DETACHING;\n            var root = this.root;\n            var newEnv = root.environment;\n            var newIdCache = root.identifierCache.splitCache(this);\n            try {\n                this.parent.removeChild(this.subpath);\n                this.baseSetParent(null, \"\");\n                this.environment = newEnv;\n                this.identifierCache = newIdCache;\n            }\n            finally {\n                this.state = previousState;\n            }\n        }\n    });\n    Object.defineProperty(ObjectNode.prototype, \"setParent\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (newParent, subpath) {\n            var parentChanged = newParent !== this.parent;\n            var subpathChanged = subpath !== this.subpath;\n            if (!parentChanged && !subpathChanged) {\n                return;\n            }\n            if (devMode()) {\n                if (!subpath) {\n                    // istanbul ignore next\n                    throw fail$1(\"assertion failed: subpath expected\");\n                }\n                if (!newParent) {\n                    // istanbul ignore next\n                    throw fail$1(\"assertion failed: new parent expected\");\n                }\n                if (this.parent && parentChanged) {\n                    throw fail$1(\"A node cannot exists twice in the state tree. Failed to add \" + this + \" to path '\" + newParent.path + \"/\" + subpath + \"'.\");\n                }\n                if (!this.parent && newParent.root === this) {\n                    throw fail$1(\"A state tree is not allowed to contain itself. Cannot assign \" + this + \" to path '\" + newParent.path + \"/\" + subpath + \"'\");\n                }\n                if (!this.parent &&\n                    !!this.environment &&\n                    this.environment !== newParent.root.environment) {\n                    throw fail$1(\"A state tree cannot be made part of another state tree as long as their environments are different.\");\n                }\n            }\n            if (parentChanged) {\n                // attach to new parent\n                this.environment = undefined; // will use root's\n                newParent.root.identifierCache.mergeCache(this);\n                this.baseSetParent(newParent, subpath);\n                this.fireHook(Hook.afterAttach);\n            }\n            else if (subpathChanged) {\n                // moving to a new subpath on the same parent\n                this.baseSetParent(this.parent, subpath);\n            }\n        }\n    });\n    Object.defineProperty(ObjectNode.prototype, \"fireHook\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (name) {\n            var _this = this;\n            this.fireInternalHook(name);\n            var fn = this.storedValue &&\n                typeof this.storedValue === \"object\" &&\n                this.storedValue[name];\n            if (typeof fn === \"function\") {\n                // we check for it to allow old mobx peer dependencies that don't have the method to work (even when still bugged)\n                if (_allowStateChangesInsideComputed) {\n                    _allowStateChangesInsideComputed(function () {\n                        fn.apply(_this.storedValue);\n                    });\n                }\n                else {\n                    fn.apply(this.storedValue);\n                }\n            }\n        }\n    });\n    Object.defineProperty(ObjectNode.prototype, \"snapshot\", {\n        // advantage of using computed for a snapshot is that nicely respects transactions etc.\n        get: function () {\n            return this._snapshotComputed.get();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    // NOTE: we use this method to get snapshot without creating @computed overhead\n    Object.defineProperty(ObjectNode.prototype, \"getSnapshot\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            if (!this.isAlive)\n                return this._snapshotUponDeath;\n            return this._observableInstanceState === 2 /* CREATED */\n                ? this._getActualSnapshot()\n                : this._getCachedInitialSnapshot();\n        }\n    });\n    Object.defineProperty(ObjectNode.prototype, \"_getActualSnapshot\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            return this.type.getSnapshot(this);\n        }\n    });\n    Object.defineProperty(ObjectNode.prototype, \"_getCachedInitialSnapshot\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            if (!this._cachedInitialSnapshotCreated) {\n                var type = this.type;\n                var childNodes = this._childNodes;\n                var snapshot = this._initialSnapshot;\n                this._cachedInitialSnapshot = type.processInitialSnapshot(childNodes, snapshot);\n                this._cachedInitialSnapshotCreated = true;\n            }\n            return this._cachedInitialSnapshot;\n        }\n    });\n    Object.defineProperty(ObjectNode.prototype, \"isRunningAction\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            if (this._isRunningAction)\n                return true;\n            if (this.isRoot)\n                return false;\n            return this.parent.isRunningAction();\n        }\n    });\n    Object.defineProperty(ObjectNode.prototype, \"assertAlive\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (context) {\n            var livelinessChecking = getLivelinessChecking();\n            if (!this.isAlive && livelinessChecking !== \"ignore\") {\n                var error = this._getAssertAliveError(context);\n                switch (livelinessChecking) {\n                    case \"error\":\n                        throw fail$1(error);\n                    case \"warn\":\n                        warnError(error);\n                }\n            }\n        }\n    });\n    Object.defineProperty(ObjectNode.prototype, \"_getAssertAliveError\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (context) {\n            var escapedPath = this.getEscapedPath(false) || this.pathUponDeath || \"\";\n            var subpath = (context.subpath && escapeJsonPath(context.subpath)) || \"\";\n            var actionContext = context.actionContext || getCurrentActionContext();\n            // try to use a real action context if possible since it includes the action name\n            if (actionContext && actionContext.type !== \"action\" && actionContext.parentActionEvent) {\n                actionContext = actionContext.parentActionEvent;\n            }\n            var actionFullPath = \"\";\n            if (actionContext && actionContext.name != null) {\n                // try to use the context, and if it not available use the node one\n                var actionPath = (actionContext && actionContext.context && getPath(actionContext.context)) ||\n                    escapedPath;\n                actionFullPath = actionPath + \".\" + actionContext.name + \"()\";\n            }\n            return \"You are trying to read or write to an object that is no longer part of a state tree. (Object type: '\" + this.type.name + \"', Path upon death: '\" + escapedPath + \"', Subpath: '\" + subpath + \"', Action: '\" + actionFullPath + \"'). Either detach nodes first, or don't use objects after removing / replacing them in the tree.\";\n        }\n    });\n    Object.defineProperty(ObjectNode.prototype, \"getChildNode\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (subpath) {\n            this.assertAlive({\n                subpath: subpath\n            });\n            this._autoUnbox = false;\n            try {\n                return this._observableInstanceState === 2 /* CREATED */\n                    ? this.type.getChildNode(this, subpath)\n                    : this._childNodes[subpath];\n            }\n            finally {\n                this._autoUnbox = true;\n            }\n        }\n    });\n    Object.defineProperty(ObjectNode.prototype, \"getChildren\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            this.assertAlive(EMPTY_OBJECT);\n            this._autoUnbox = false;\n            try {\n                return this._observableInstanceState === 2 /* CREATED */\n                    ? this.type.getChildren(this)\n                    : convertChildNodesToArray(this._childNodes);\n            }\n            finally {\n                this._autoUnbox = true;\n            }\n        }\n    });\n    Object.defineProperty(ObjectNode.prototype, \"getChildType\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (propertyName) {\n            return this.type.getChildType(propertyName);\n        }\n    });\n    Object.defineProperty(ObjectNode.prototype, \"isProtected\", {\n        get: function () {\n            return this.root.isProtectionEnabled;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(ObjectNode.prototype, \"assertWritable\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (context) {\n            this.assertAlive(context);\n            if (!this.isRunningAction() && this.isProtected) {\n                throw fail$1(\"Cannot modify '\" + this + \"', the object is protected and can only be modified by using an action.\");\n            }\n        }\n    });\n    Object.defineProperty(ObjectNode.prototype, \"removeChild\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (subpath) {\n            this.type.removeChild(this, subpath);\n        }\n    });\n    // bound on the constructor\n    Object.defineProperty(ObjectNode.prototype, \"unbox\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (childNode) {\n            if (!childNode)\n                return childNode;\n            this.assertAlive({\n                subpath: childNode.subpath || childNode.subpathUponDeath\n            });\n            return this._autoUnbox ? childNode.value : childNode;\n        }\n    });\n    Object.defineProperty(ObjectNode.prototype, \"toString\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            var path = (this.isAlive ? this.path : this.pathUponDeath) || \"<root>\";\n            var identifier = this.identifier ? \"(id: \" + this.identifier + \")\" : \"\";\n            return this.type.name + \"@\" + path + identifier + (this.isAlive ? \"\" : \" [dead]\");\n        }\n    });\n    Object.defineProperty(ObjectNode.prototype, \"finalizeCreation\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            var _this = this;\n            this.baseFinalizeCreation(function () {\n                var e_2, _a;\n                try {\n                    for (var _b = __values(_this.getChildren()), _c = _b.next(); !_c.done; _c = _b.next()) {\n                        var child = _c.value;\n                        child.finalizeCreation();\n                    }\n                }\n                catch (e_2_1) { e_2 = { error: e_2_1 }; }\n                finally {\n                    try {\n                        if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n                    }\n                    finally { if (e_2) throw e_2.error; }\n                }\n                _this.fireInternalHook(Hook.afterCreationFinalization);\n            });\n        }\n    });\n    Object.defineProperty(ObjectNode.prototype, \"detach\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            if (!this.isAlive)\n                throw fail$1(\"Error while detaching, node is not alive.\");\n            this.clearParent();\n        }\n    });\n    Object.defineProperty(ObjectNode.prototype, \"preboot\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            var self = this;\n            this._applyPatches = createActionInvoker(this.storedValue, \"@APPLY_PATCHES\", function (patches) {\n                patches.forEach(function (patch) {\n                    if (!patch.path) {\n                        self.type.applySnapshot(self, patch.value);\n                        return;\n                    }\n                    var parts = splitJsonPath(patch.path);\n                    var node = resolveNodeByPathParts(self, parts.slice(0, -1));\n                    node.applyPatchLocally(parts[parts.length - 1], patch);\n                });\n            });\n            this._applySnapshot = createActionInvoker(this.storedValue, \"@APPLY_SNAPSHOT\", function (snapshot) {\n                // if the snapshot is the same as the current one, avoid performing a reconcile\n                if (snapshot === self.snapshot)\n                    return;\n                // else, apply it by calling the type logic\n                return self.type.applySnapshot(self, snapshot);\n            });\n            addHiddenFinalProp(this.storedValue, \"$treenode\", this);\n            addHiddenFinalProp(this.storedValue, \"toJSON\", toJSON);\n        }\n    });\n    Object.defineProperty(ObjectNode.prototype, \"die\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            if (!this.isAlive || this.state === NodeLifeCycle.DETACHING)\n                return;\n            this.aboutToDie();\n            this.finalizeDeath();\n        }\n    });\n    Object.defineProperty(ObjectNode.prototype, \"aboutToDie\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            if (this._observableInstanceState === 0 /* UNINITIALIZED */) {\n                return;\n            }\n            this.getChildren().forEach(function (node) {\n                node.aboutToDie();\n            });\n            // beforeDestroy should run before the disposers since else we could end up in a situation where\n            // a disposer added with addDisposer at this stage (beforeDestroy) is actually never released\n            this.baseAboutToDie();\n            this._internalEventsEmit(\"dispose\" /* Dispose */);\n            this._internalEventsClear(\"dispose\" /* Dispose */);\n        }\n    });\n    Object.defineProperty(ObjectNode.prototype, \"finalizeDeath\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            // invariant: not called directly but from \"die\"\n            this.getChildren().forEach(function (node) {\n                node.finalizeDeath();\n            });\n            this.root.identifierCache.notifyDied(this);\n            // \"kill\" the computed prop and just store the last snapshot\n            var snapshot = this.snapshot;\n            this._snapshotUponDeath = snapshot;\n            this._internalEventsClearAll();\n            this.baseFinalizeDeath();\n        }\n    });\n    Object.defineProperty(ObjectNode.prototype, \"onSnapshot\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (onChange) {\n            this._addSnapshotReaction();\n            return this._internalEventsRegister(\"snapshot\" /* Snapshot */, onChange);\n        }\n    });\n    Object.defineProperty(ObjectNode.prototype, \"emitSnapshot\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (snapshot) {\n            this._internalEventsEmit(\"snapshot\" /* Snapshot */, snapshot);\n        }\n    });\n    Object.defineProperty(ObjectNode.prototype, \"onPatch\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (handler) {\n            return this._internalEventsRegister(\"patch\" /* Patch */, handler);\n        }\n    });\n    Object.defineProperty(ObjectNode.prototype, \"emitPatch\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (basePatch, source) {\n            if (this._internalEventsHasSubscribers(\"patch\" /* Patch */)) {\n                var localizedPatch = extend({}, basePatch, {\n                    path: source.path.substr(this.path.length) + \"/\" + basePatch.path // calculate the relative path of the patch\n                });\n                var _a = __read(splitPatch(localizedPatch), 2), patch = _a[0], reversePatch = _a[1];\n                this._internalEventsEmit(\"patch\" /* Patch */, patch, reversePatch);\n            }\n            if (this.parent)\n                this.parent.emitPatch(basePatch, source);\n        }\n    });\n    Object.defineProperty(ObjectNode.prototype, \"hasDisposer\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (disposer) {\n            return this._internalEventsHas(\"dispose\" /* Dispose */, disposer);\n        }\n    });\n    Object.defineProperty(ObjectNode.prototype, \"addDisposer\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (disposer) {\n            if (!this.hasDisposer(disposer)) {\n                this._internalEventsRegister(\"dispose\" /* Dispose */, disposer, true);\n                return;\n            }\n            throw fail$1(\"cannot add a disposer when it is already registered for execution\");\n        }\n    });\n    Object.defineProperty(ObjectNode.prototype, \"removeDisposer\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (disposer) {\n            if (!this._internalEventsHas(\"dispose\" /* Dispose */, disposer)) {\n                throw fail$1(\"cannot remove a disposer which was never registered for execution\");\n            }\n            this._internalEventsUnregister(\"dispose\" /* Dispose */, disposer);\n        }\n    });\n    Object.defineProperty(ObjectNode.prototype, \"removeMiddleware\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (middleware) {\n            if (this.middlewares) {\n                var index = this.middlewares.indexOf(middleware);\n                if (index >= 0) {\n                    this.middlewares.splice(index, 1);\n                }\n            }\n        }\n    });\n    Object.defineProperty(ObjectNode.prototype, \"addMiddleWare\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (handler, includeHooks) {\n            var _this = this;\n            if (includeHooks === void 0) { includeHooks = true; }\n            var middleware = { handler: handler, includeHooks: includeHooks };\n            if (!this.middlewares)\n                this.middlewares = [middleware];\n            else\n                this.middlewares.push(middleware);\n            return function () {\n                _this.removeMiddleware(middleware);\n            };\n        }\n    });\n    Object.defineProperty(ObjectNode.prototype, \"applyPatchLocally\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (subpath, patch) {\n            this.assertWritable({\n                subpath: subpath\n            });\n            this.createObservableInstanceIfNeeded();\n            this.type.applyPatchLocally(this, subpath, patch);\n        }\n    });\n    Object.defineProperty(ObjectNode.prototype, \"_addSnapshotReaction\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            var _this = this;\n            if (!this._hasSnapshotReaction) {\n                var snapshotDisposer = reaction(function () { return _this.snapshot; }, function (snapshot) { return _this.emitSnapshot(snapshot); }, snapshotReactionOptions);\n                this.addDisposer(snapshotDisposer);\n                this._hasSnapshotReaction = true;\n            }\n        }\n    });\n    // we proxy the methods to avoid creating an EventHandlers instance when it is not needed\n    Object.defineProperty(ObjectNode.prototype, \"_internalEventsHasSubscribers\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (event) {\n            return !!this._internalEvents && this._internalEvents.hasSubscribers(event);\n        }\n    });\n    Object.defineProperty(ObjectNode.prototype, \"_internalEventsRegister\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (event, eventHandler, atTheBeginning) {\n            if (atTheBeginning === void 0) { atTheBeginning = false; }\n            if (!this._internalEvents) {\n                this._internalEvents = new EventHandlers();\n            }\n            return this._internalEvents.register(event, eventHandler, atTheBeginning);\n        }\n    });\n    Object.defineProperty(ObjectNode.prototype, \"_internalEventsHas\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (event, eventHandler) {\n            return !!this._internalEvents && this._internalEvents.has(event, eventHandler);\n        }\n    });\n    Object.defineProperty(ObjectNode.prototype, \"_internalEventsUnregister\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (event, eventHandler) {\n            if (this._internalEvents) {\n                this._internalEvents.unregister(event, eventHandler);\n            }\n        }\n    });\n    Object.defineProperty(ObjectNode.prototype, \"_internalEventsEmit\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (event) {\n            var _a;\n            var args = [];\n            for (var _i = 1; _i < arguments.length; _i++) {\n                args[_i - 1] = arguments[_i];\n            }\n            if (this._internalEvents) {\n                (_a = this._internalEvents).emit.apply(_a, __spread([event], args));\n            }\n        }\n    });\n    Object.defineProperty(ObjectNode.prototype, \"_internalEventsClear\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (event) {\n            if (this._internalEvents) {\n                this._internalEvents.clear(event);\n            }\n        }\n    });\n    Object.defineProperty(ObjectNode.prototype, \"_internalEventsClearAll\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            if (this._internalEvents) {\n                this._internalEvents.clearAll();\n            }\n        }\n    });\n    return ObjectNode;\n}(BaseNode));\nObjectNode.prototype.createObservableInstance = action(ObjectNode.prototype.createObservableInstance);\nObjectNode.prototype.detach = action(ObjectNode.prototype.detach);\nObjectNode.prototype.die = action(ObjectNode.prototype.die);\n\nvar _a;\n/**\n * @internal\n * @hidden\n */\nvar TypeFlags;\n(function (TypeFlags) {\n    TypeFlags[TypeFlags[\"String\"] = 1] = \"String\";\n    TypeFlags[TypeFlags[\"Number\"] = 2] = \"Number\";\n    TypeFlags[TypeFlags[\"Boolean\"] = 4] = \"Boolean\";\n    TypeFlags[TypeFlags[\"Date\"] = 8] = \"Date\";\n    TypeFlags[TypeFlags[\"Literal\"] = 16] = \"Literal\";\n    TypeFlags[TypeFlags[\"Array\"] = 32] = \"Array\";\n    TypeFlags[TypeFlags[\"Map\"] = 64] = \"Map\";\n    TypeFlags[TypeFlags[\"Object\"] = 128] = \"Object\";\n    TypeFlags[TypeFlags[\"Frozen\"] = 256] = \"Frozen\";\n    TypeFlags[TypeFlags[\"Optional\"] = 512] = \"Optional\";\n    TypeFlags[TypeFlags[\"Reference\"] = 1024] = \"Reference\";\n    TypeFlags[TypeFlags[\"Identifier\"] = 2048] = \"Identifier\";\n    TypeFlags[TypeFlags[\"Late\"] = 4096] = \"Late\";\n    TypeFlags[TypeFlags[\"Refinement\"] = 8192] = \"Refinement\";\n    TypeFlags[TypeFlags[\"Union\"] = 16384] = \"Union\";\n    TypeFlags[TypeFlags[\"Null\"] = 32768] = \"Null\";\n    TypeFlags[TypeFlags[\"Undefined\"] = 65536] = \"Undefined\";\n    TypeFlags[TypeFlags[\"Integer\"] = 131072] = \"Integer\";\n    TypeFlags[TypeFlags[\"Custom\"] = 262144] = \"Custom\";\n    TypeFlags[TypeFlags[\"SnapshotProcessor\"] = 524288] = \"SnapshotProcessor\";\n})(TypeFlags || (TypeFlags = {}));\n/**\n * @internal\n * @hidden\n */\nvar cannotDetermineSubtype = \"cannotDetermine\";\n/** @hidden */\nvar $type = Symbol(\"$type\");\n/**\n * A base type produces a MST node (Node in the state tree)\n *\n * @internal\n * @hidden\n */\nvar BaseType = /** @class */ (function () {\n    function BaseType(name) {\n        Object.defineProperty(this, _a, {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        // these are just to make inner types avaialable to inherited classes\n        Object.defineProperty(this, \"C\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"S\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"T\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"N\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"isType\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: true\n        });\n        Object.defineProperty(this, \"name\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        this.name = name;\n    }\n    Object.defineProperty(BaseType.prototype, \"create\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (snapshot, environment) {\n            typecheckInternal(this, snapshot);\n            return this.instantiate(null, \"\", environment, snapshot).value;\n        }\n    });\n    Object.defineProperty(BaseType.prototype, \"getSnapshot\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (node, applyPostProcess) {\n            // istanbul ignore next\n            throw fail$1(\"unimplemented method\");\n        }\n    });\n    Object.defineProperty(BaseType.prototype, \"isAssignableFrom\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (type) {\n            return type === this;\n        }\n    });\n    Object.defineProperty(BaseType.prototype, \"validate\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (value, context) {\n            var node = getStateTreeNodeSafe(value);\n            if (node) {\n                var valueType = getType(value);\n                return this.isAssignableFrom(valueType)\n                    ? typeCheckSuccess()\n                    : typeCheckFailure(context, value);\n                // it is tempting to compare snapshots, but in that case we should always clone on assignments...\n            }\n            return this.isValidSnapshot(value, context);\n        }\n    });\n    Object.defineProperty(BaseType.prototype, \"is\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (thing) {\n            return this.validate(thing, [{ path: \"\", type: this }]).length === 0;\n        }\n    });\n    Object.defineProperty(BaseType.prototype, \"Type\", {\n        get: function () {\n            // istanbul ignore next\n            throw fail$1(\"Factory.Type should not be actually called. It is just a Type signature that can be used at compile time with Typescript, by using `typeof type.Type`\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(BaseType.prototype, \"TypeWithoutSTN\", {\n        get: function () {\n            // istanbul ignore next\n            throw fail$1(\"Factory.TypeWithoutSTN should not be actually called. It is just a Type signature that can be used at compile time with Typescript, by using `typeof type.TypeWithoutSTN`\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(BaseType.prototype, \"SnapshotType\", {\n        get: function () {\n            // istanbul ignore next\n            throw fail$1(\"Factory.SnapshotType should not be actually called. It is just a Type signature that can be used at compile time with Typescript, by using `typeof type.SnapshotType`\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(BaseType.prototype, \"CreationType\", {\n        get: function () {\n            // istanbul ignore next\n            throw fail$1(\"Factory.CreationType should not be actually called. It is just a Type signature that can be used at compile time with Typescript, by using `typeof type.CreationType`\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return BaseType;\n}());\n_a = $type;\nBaseType.prototype.create = action(BaseType.prototype.create);\n/**\n * A complex type produces a MST node (Node in the state tree)\n *\n * @internal\n * @hidden\n */\nvar ComplexType = /** @class */ (function (_super) {\n    __extends(ComplexType, _super);\n    function ComplexType(name) {\n        var _this = _super.call(this, name) || this;\n        Object.defineProperty(_this, \"identifierAttribute\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        return _this;\n    }\n    Object.defineProperty(ComplexType.prototype, \"create\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (snapshot, environment) {\n            if (snapshot === void 0) { snapshot = this.getDefaultSnapshot(); }\n            return _super.prototype.create.call(this, snapshot, environment);\n        }\n    });\n    Object.defineProperty(ComplexType.prototype, \"getValue\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (node) {\n            node.createObservableInstanceIfNeeded();\n            return node.storedValue;\n        }\n    });\n    Object.defineProperty(ComplexType.prototype, \"isMatchingSnapshotId\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (current, snapshot) {\n            return (!current.identifierAttribute ||\n                current.identifier ===\n                    normalizeIdentifier(snapshot[current.identifierAttribute]));\n        }\n    });\n    Object.defineProperty(ComplexType.prototype, \"tryToReconcileNode\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (current, newValue) {\n            if (current.isDetaching)\n                return false;\n            if (current.snapshot === newValue) {\n                // newValue is the current snapshot of the node, noop\n                return true;\n            }\n            if (isStateTreeNode(newValue) && getStateTreeNode(newValue) === current) {\n                // the current node is the same as the new one\n                return true;\n            }\n            if (current.type === this &&\n                isMutable(newValue) &&\n                !isStateTreeNode(newValue) &&\n                this.isMatchingSnapshotId(current, newValue)) {\n                // the newValue has no node, so can be treated like a snapshot\n                // we can reconcile\n                current.applySnapshot(newValue);\n                return true;\n            }\n            return false;\n        }\n    });\n    Object.defineProperty(ComplexType.prototype, \"reconcile\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (current, newValue, parent, subpath) {\n            var nodeReconciled = this.tryToReconcileNode(current, newValue);\n            if (nodeReconciled) {\n                current.setParent(parent, subpath);\n                return current;\n            }\n            // current node cannot be recycled in any way\n            current.die(); // noop if detaching\n            // attempt to reuse the new one\n            if (isStateTreeNode(newValue) && this.isAssignableFrom(getType(newValue))) {\n                // newValue is a Node as well, move it here..\n                var newNode = getStateTreeNode(newValue);\n                newNode.setParent(parent, subpath);\n                return newNode;\n            }\n            // nothing to do, we have to create a new node\n            return this.instantiate(parent, subpath, undefined, newValue);\n        }\n    });\n    Object.defineProperty(ComplexType.prototype, \"getSubTypes\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            return null;\n        }\n    });\n    return ComplexType;\n}(BaseType));\nComplexType.prototype.create = action(ComplexType.prototype.create);\n/**\n * @internal\n * @hidden\n */\nvar SimpleType = /** @class */ (function (_super) {\n    __extends(SimpleType, _super);\n    function SimpleType() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Object.defineProperty(SimpleType.prototype, \"createNewInstance\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (snapshot) {\n            return snapshot;\n        }\n    });\n    Object.defineProperty(SimpleType.prototype, \"getValue\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (node) {\n            // if we ever find a case where scalar nodes can be accessed without iterating through its parent\n            // uncomment this to make sure the parent chain is created when this is accessed\n            // if (node.parent) {\n            //     node.parent.createObservableInstanceIfNeeded()\n            // }\n            return node.storedValue;\n        }\n    });\n    Object.defineProperty(SimpleType.prototype, \"getSnapshot\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (node) {\n            return node.storedValue;\n        }\n    });\n    Object.defineProperty(SimpleType.prototype, \"reconcile\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (current, newValue, parent, subpath) {\n            // reconcile only if type and value are still the same, and only if the node is not detaching\n            if (!current.isDetaching && current.type === this && current.storedValue === newValue) {\n                return current;\n            }\n            var res = this.instantiate(parent, subpath, undefined, newValue);\n            current.die(); // noop if detaching\n            return res;\n        }\n    });\n    Object.defineProperty(SimpleType.prototype, \"getSubTypes\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            return null;\n        }\n    });\n    return SimpleType;\n}(BaseType));\n/**\n * Returns if a given value represents a type.\n *\n * @param value Value to check.\n * @returns `true` if the value is a type.\n */\nfunction isType(value) {\n    return typeof value === \"object\" && value && value.isType === true;\n}\n/**\n * @internal\n * @hidden\n */\nfunction assertIsType(type, argNumber) {\n    assertArg(type, isType, \"mobx-state-tree type\", argNumber);\n}\n\nvar runningActions = new Map();\n/**\n * Note: Consider migrating to `createActionTrackingMiddleware2`, it is easier to use.\n *\n * Convenience utility to create action based middleware that supports async processes more easily.\n * All hooks are called for both synchronous and asynchronous actions. Except that either `onSuccess` or `onFail` is called\n *\n * The create middleware tracks the process of an action (assuming it passes the `filter`).\n * `onResume` can return any value, which will be passed as second argument to any other hook. This makes it possible to keep state during a process.\n *\n * See the `atomic` middleware for an example\n *\n * @param hooks\n * @returns\n */\nfunction createActionTrackingMiddleware(hooks) {\n    return function actionTrackingMiddleware(call, next, abort) {\n        switch (call.type) {\n            case \"action\": {\n                if (!hooks.filter || hooks.filter(call) === true) {\n                    var context = hooks.onStart(call);\n                    hooks.onResume(call, context);\n                    runningActions.set(call.id, {\n                        call: call,\n                        context: context,\n                        async: false\n                    });\n                    try {\n                        var res = next(call);\n                        hooks.onSuspend(call, context);\n                        if (runningActions.get(call.id).async === false) {\n                            runningActions.delete(call.id);\n                            hooks.onSuccess(call, context, res);\n                        }\n                        return res;\n                    }\n                    catch (e) {\n                        runningActions.delete(call.id);\n                        hooks.onFail(call, context, e);\n                        throw e;\n                    }\n                }\n                else {\n                    return next(call);\n                }\n            }\n            case \"flow_spawn\": {\n                var root = runningActions.get(call.rootId);\n                root.async = true;\n                return next(call);\n            }\n            case \"flow_resume\":\n            case \"flow_resume_error\": {\n                var root = runningActions.get(call.rootId);\n                hooks.onResume(call, root.context);\n                try {\n                    return next(call);\n                }\n                finally {\n                    hooks.onSuspend(call, root.context);\n                }\n            }\n            case \"flow_throw\": {\n                var root = runningActions.get(call.rootId);\n                runningActions.delete(call.rootId);\n                hooks.onFail(call, root.context, call.args[0]);\n                return next(call);\n            }\n            case \"flow_return\": {\n                var root = runningActions.get(call.rootId);\n                runningActions.delete(call.rootId);\n                hooks.onSuccess(call, root.context, call.args[0]);\n                return next(call);\n            }\n        }\n    };\n}\n\nvar RunningAction = /** @class */ (function () {\n    function RunningAction(hooks, call) {\n        Object.defineProperty(this, \"hooks\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: hooks\n        });\n        Object.defineProperty(this, \"call\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: call\n        });\n        Object.defineProperty(this, \"flowsPending\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: 0\n        });\n        Object.defineProperty(this, \"running\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: true\n        });\n        if (hooks) {\n            hooks.onStart(call);\n        }\n    }\n    Object.defineProperty(RunningAction.prototype, \"finish\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (error) {\n            if (this.running) {\n                this.running = false;\n                if (this.hooks) {\n                    this.hooks.onFinish(this.call, error);\n                }\n            }\n        }\n    });\n    Object.defineProperty(RunningAction.prototype, \"incFlowsPending\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            this.flowsPending++;\n        }\n    });\n    Object.defineProperty(RunningAction.prototype, \"decFlowsPending\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            this.flowsPending--;\n        }\n    });\n    Object.defineProperty(RunningAction.prototype, \"hasFlowsPending\", {\n        get: function () {\n            return this.flowsPending > 0;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return RunningAction;\n}());\n/**\n * Convenience utility to create action based middleware that supports async processes more easily.\n * The flow is like this:\n * - for each action: if filter passes -> `onStart` -> (inner actions recursively) -> `onFinish`\n *\n * Example: if we had an action `a` that called inside an action `b1`, then `b2` the flow would be:\n * - `filter(a)`\n * - `onStart(a)`\n *   - `filter(b1)`\n *   - `onStart(b1)`\n *   - `onFinish(b1)`\n *   - `filter(b2)`\n *   - `onStart(b2)`\n *   - `onFinish(b2)`\n * - `onFinish(a)`\n *\n * The flow is the same no matter if the actions are sync or async.\n *\n * See the `atomic` middleware for an example\n *\n * @param hooks\n * @returns\n */\nfunction createActionTrackingMiddleware2(middlewareHooks) {\n    var runningActions = new WeakMap();\n    return function actionTrackingMiddleware(call, next) {\n        // find parentRunningAction\n        var parentRunningAction = call.parentActionEvent\n            ? runningActions.get(call.parentActionEvent)\n            : undefined;\n        if (call.type === \"action\") {\n            var newCall = __assign(__assign({}, call), { \n                // make a shallow copy of the parent action env\n                env: parentRunningAction && parentRunningAction.call.env, parentCall: parentRunningAction && parentRunningAction.call });\n            var passesFilter = !middlewareHooks.filter || middlewareHooks.filter(newCall);\n            var hooks = passesFilter ? middlewareHooks : undefined;\n            var runningAction = new RunningAction(hooks, newCall);\n            runningActions.set(call, runningAction);\n            var res = void 0;\n            try {\n                res = next(call);\n            }\n            catch (e) {\n                runningAction.finish(e);\n                throw e;\n            }\n            if (!runningAction.hasFlowsPending) {\n                // sync action finished\n                runningAction.finish();\n            }\n            return res;\n        }\n        else {\n            if (!parentRunningAction) {\n                return next(call);\n            }\n            switch (call.type) {\n                case \"flow_spawn\": {\n                    parentRunningAction.incFlowsPending();\n                    return next(call);\n                }\n                case \"flow_resume\":\n                case \"flow_resume_error\": {\n                    return next(call);\n                }\n                case \"flow_throw\": {\n                    var error = call.args[0];\n                    try {\n                        return next(call);\n                    }\n                    finally {\n                        parentRunningAction.decFlowsPending();\n                        if (!parentRunningAction.hasFlowsPending) {\n                            parentRunningAction.finish(error);\n                        }\n                    }\n                }\n                case \"flow_return\": {\n                    try {\n                        return next(call);\n                    }\n                    finally {\n                        parentRunningAction.decFlowsPending();\n                        if (!parentRunningAction.hasFlowsPending) {\n                            parentRunningAction.finish();\n                        }\n                    }\n                }\n            }\n        }\n    };\n}\n\nfunction serializeArgument(node, actionName, index, arg) {\n    if (arg instanceof Date)\n        return { $MST_DATE: arg.getTime() };\n    if (isPrimitive(arg))\n        return arg;\n    // We should not serialize MST nodes, even if we can, because we don't know if the receiving party can handle a raw snapshot instead of an\n    // MST type instance. So if one wants to serialize a MST node that was pass in, either explitly pass: 1: an id, 2: a (relative) path, 3: a snapshot\n    if (isStateTreeNode(arg))\n        return serializeTheUnserializable(\"[MSTNode: \" + getType(arg).name + \"]\");\n    if (typeof arg === \"function\")\n        return serializeTheUnserializable(\"[function]\");\n    if (typeof arg === \"object\" && !isPlainObject(arg) && !isArray(arg))\n        return serializeTheUnserializable(\"[object \" + ((arg && arg.constructor && arg.constructor.name) ||\n            \"Complex Object\") + \"]\");\n    try {\n        // Check if serializable, cycle free etc...\n        // MWE: there must be a better way....\n        JSON.stringify(arg); // or throws\n        return arg;\n    }\n    catch (e) {\n        return serializeTheUnserializable(\"\" + e);\n    }\n}\nfunction deserializeArgument(adm, value) {\n    if (value && typeof value === \"object\" && \"$MST_DATE\" in value)\n        return new Date(value[\"$MST_DATE\"]);\n    return value;\n}\nfunction serializeTheUnserializable(baseType) {\n    return {\n        $MST_UNSERIALIZABLE: true,\n        type: baseType\n    };\n}\n/**\n * Applies an action or a series of actions in a single MobX transaction.\n * Does not return any value\n * Takes an action description as produced by the `onAction` middleware.\n *\n * @param target\n * @param actions\n */\nfunction applyAction(target, actions) {\n    // check all arguments\n    assertIsStateTreeNode(target, 1);\n    assertArg(actions, function (a) { return typeof a === \"object\"; }, \"object or array\", 2);\n    runInAction(function () {\n        asArray(actions).forEach(function (action) { return baseApplyAction(target, action); });\n    });\n}\nfunction baseApplyAction(target, action) {\n    var resolvedTarget = tryResolve(target, action.path || \"\");\n    if (!resolvedTarget)\n        throw fail$1(\"Invalid action path: \" + (action.path || \"\"));\n    var node = getStateTreeNode(resolvedTarget);\n    // Reserved functions\n    if (action.name === \"@APPLY_PATCHES\") {\n        return applyPatch.call(null, resolvedTarget, action.args[0]);\n    }\n    if (action.name === \"@APPLY_SNAPSHOT\") {\n        return applySnapshot.call(null, resolvedTarget, action.args[0]);\n    }\n    if (!(typeof resolvedTarget[action.name] === \"function\"))\n        throw fail$1(\"Action '\" + action.name + \"' does not exist in '\" + node.path + \"'\");\n    return resolvedTarget[action.name].apply(resolvedTarget, action.args ? action.args.map(function (v) { return deserializeArgument(node, v); }) : []);\n}\n/**\n * Small abstraction around `onAction` and `applyAction`, attaches an action listener to a tree and records all the actions emitted.\n * Returns an recorder object with the following signature:\n *\n * Example:\n * ```ts\n * export interface IActionRecorder {\n *      // the recorded actions\n *      actions: ISerializedActionCall[]\n *      // true if currently recording\n *      recording: boolean\n *      // stop recording actions\n *      stop(): void\n *      // resume recording actions\n *      resume(): void\n *      // apply all the recorded actions on the given object\n *      replay(target: IAnyStateTreeNode): void\n * }\n * ```\n *\n * The optional filter function allows to skip recording certain actions.\n *\n * @param subject\n * @returns\n */\nfunction recordActions(subject, filter) {\n    // check all arguments\n    assertIsStateTreeNode(subject, 1);\n    var actions = [];\n    var listener = function (call) {\n        var recordThis = filter ? filter(call, getRunningActionContext()) : true;\n        if (recordThis) {\n            actions.push(call);\n        }\n    };\n    var disposer;\n    var recorder = {\n        actions: actions,\n        get recording() {\n            return !!disposer;\n        },\n        stop: function () {\n            if (disposer) {\n                disposer();\n                disposer = undefined;\n            }\n        },\n        resume: function () {\n            if (disposer)\n                return;\n            disposer = onAction(subject, listener);\n        },\n        replay: function (target) {\n            applyAction(target, actions);\n        }\n    };\n    recorder.resume();\n    return recorder;\n}\n/**\n * Registers a function that will be invoked for each action that is called on the provided model instance, or to any of its children.\n * See [actions](https://github.com/mobxjs/mobx-state-tree#actions) for more details. onAction events are emitted only for the outermost called action in the stack.\n * Action can also be intercepted by middleware using addMiddleware to change the function call before it will be run.\n *\n * Not all action arguments might be serializable. For unserializable arguments, a struct like `{ $MST_UNSERIALIZABLE: true, type: \"someType\" }` will be generated.\n * MST Nodes are considered non-serializable as well (they could be serialized as there snapshot, but it is uncertain whether an replaying party will be able to handle such a non-instantiated snapshot).\n * Rather, when using `onAction` middleware, one should consider in passing arguments which are 1: an id, 2: a (relative) path, or 3: a snapshot. Instead of a real MST node.\n *\n * Example:\n * ```ts\n * const Todo = types.model({\n *   task: types.string\n * })\n *\n * const TodoStore = types.model({\n *   todos: types.array(Todo)\n * }).actions(self => ({\n *   add(todo) {\n *     self.todos.push(todo);\n *   }\n * }))\n *\n * const s = TodoStore.create({ todos: [] })\n *\n * let disposer = onAction(s, (call) => {\n *   console.log(call);\n * })\n *\n * s.add({ task: \"Grab a coffee\" })\n * // Logs: { name: \"add\", path: \"\", args: [{ task: \"Grab a coffee\" }] }\n * ```\n *\n * @param target\n * @param listener\n * @param attachAfter (default false) fires the listener *after* the action has executed instead of before.\n * @returns\n */\nfunction onAction(target, listener, attachAfter) {\n    if (attachAfter === void 0) { attachAfter = false; }\n    // check all arguments\n    assertIsStateTreeNode(target, 1);\n    if (devMode()) {\n        if (!isRoot(target))\n            warnError(\"Warning: Attaching onAction listeners to non root nodes is dangerous: No events will be emitted for actions initiated higher up in the tree.\");\n        if (!isProtected(target))\n            warnError(\"Warning: Attaching onAction listeners to non protected nodes is dangerous: No events will be emitted for direct modifications without action.\");\n    }\n    return addMiddleware(target, function handler(rawCall, next) {\n        if (rawCall.type === \"action\" && rawCall.id === rawCall.rootId) {\n            var sourceNode_1 = getStateTreeNode(rawCall.context);\n            var info = {\n                name: rawCall.name,\n                path: getRelativePathBetweenNodes(getStateTreeNode(target), sourceNode_1),\n                args: rawCall.args.map(function (arg, index) {\n                    return serializeArgument(sourceNode_1, rawCall.name, index, arg);\n                })\n            };\n            if (attachAfter) {\n                var res = next(rawCall);\n                listener(info);\n                return res;\n            }\n            else {\n                listener(info);\n                return next(rawCall);\n            }\n        }\n        else {\n            return next(rawCall);\n        }\n    });\n}\n\nvar nextActionId = 1;\nvar currentActionContext;\n/**\n * @internal\n * @hidden\n */\nfunction getCurrentActionContext() {\n    return currentActionContext;\n}\n/**\n * @internal\n * @hidden\n */\nfunction getNextActionId() {\n    return nextActionId++;\n}\n// TODO: optimize away entire action context if there is no middleware in tree?\n/**\n * @internal\n * @hidden\n */\nfunction runWithActionContext(context, fn) {\n    var node = getStateTreeNode(context.context);\n    if (context.type === \"action\") {\n        node.assertAlive({\n            actionContext: context\n        });\n    }\n    var baseIsRunningAction = node._isRunningAction;\n    node._isRunningAction = true;\n    var previousContext = currentActionContext;\n    currentActionContext = context;\n    try {\n        return runMiddleWares(node, context, fn);\n    }\n    finally {\n        currentActionContext = previousContext;\n        node._isRunningAction = baseIsRunningAction;\n    }\n}\n/**\n * @internal\n * @hidden\n */\nfunction getParentActionContext(parentContext) {\n    if (!parentContext)\n        return undefined;\n    if (parentContext.type === \"action\")\n        return parentContext;\n    return parentContext.parentActionEvent;\n}\n/**\n * @internal\n * @hidden\n */\nfunction createActionInvoker(target, name, fn) {\n    var res = function () {\n        var id = getNextActionId();\n        var parentContext = currentActionContext;\n        var parentActionContext = getParentActionContext(parentContext);\n        return runWithActionContext({\n            type: \"action\",\n            name: name,\n            id: id,\n            args: argsToArray(arguments),\n            context: target,\n            tree: getRoot(target),\n            rootId: parentContext ? parentContext.rootId : id,\n            parentId: parentContext ? parentContext.id : 0,\n            allParentIds: parentContext\n                ? __spread(parentContext.allParentIds, [parentContext.id]) : [],\n            parentEvent: parentContext,\n            parentActionEvent: parentActionContext\n        }, fn);\n    };\n    res._isMSTAction = true;\n    return res;\n}\n/**\n * Middleware can be used to intercept any action is invoked on the subtree where it is attached.\n * If a tree is protected (by default), this means that any mutation of the tree will pass through your middleware.\n *\n * For more details, see the [middleware docs](concepts/middleware.md)\n *\n * @param target Node to apply the middleware to.\n * @param middleware Middleware to apply.\n * @returns A callable function to dispose the middleware.\n */\nfunction addMiddleware(target, handler, includeHooks) {\n    if (includeHooks === void 0) { includeHooks = true; }\n    var node = getStateTreeNode(target);\n    if (devMode()) {\n        if (!node.isProtectionEnabled) {\n            warnError(\"It is recommended to protect the state tree before attaching action middleware, as otherwise it cannot be guaranteed that all changes are passed through middleware. See `protect`\");\n        }\n    }\n    return node.addMiddleWare(handler, includeHooks);\n}\n/**\n * Binds middleware to a specific action.\n *\n * Example:\n * ```ts\n * type.actions(self => {\n *   function takeA____() {\n *       self.toilet.donate()\n *       self.wipe()\n *       self.wipe()\n *       self.toilet.flush()\n *   }\n *   return {\n *     takeA____: decorate(atomic, takeA____)\n *   }\n * })\n * ```\n *\n * @param handler\n * @param fn\n * @param includeHooks\n * @returns The original function\n */\nfunction decorate(handler, fn, includeHooks) {\n    if (includeHooks === void 0) { includeHooks = true; }\n    var middleware = { handler: handler, includeHooks: includeHooks };\n    fn.$mst_middleware = fn.$mst_middleware || [];\n    fn.$mst_middleware.push(middleware);\n    return fn;\n}\nvar CollectedMiddlewares = /** @class */ (function () {\n    function CollectedMiddlewares(node, fn) {\n        Object.defineProperty(this, \"arrayIndex\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: 0\n        });\n        Object.defineProperty(this, \"inArrayIndex\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: 0\n        });\n        Object.defineProperty(this, \"middlewares\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: []\n        });\n        // we just push middleware arrays into an array of arrays to avoid making copies\n        if (fn.$mst_middleware) {\n            this.middlewares.push(fn.$mst_middleware);\n        }\n        var n = node;\n        // Find all middlewares. Optimization: cache this?\n        while (n) {\n            if (n.middlewares)\n                this.middlewares.push(n.middlewares);\n            n = n.parent;\n        }\n    }\n    Object.defineProperty(CollectedMiddlewares.prototype, \"isEmpty\", {\n        get: function () {\n            return this.middlewares.length <= 0;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(CollectedMiddlewares.prototype, \"getNextMiddleware\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            var array = this.middlewares[this.arrayIndex];\n            if (!array)\n                return undefined;\n            var item = array[this.inArrayIndex++];\n            if (!item) {\n                this.arrayIndex++;\n                this.inArrayIndex = 0;\n                return this.getNextMiddleware();\n            }\n            return item;\n        }\n    });\n    return CollectedMiddlewares;\n}());\nfunction runMiddleWares(node, baseCall, originalFn) {\n    var middlewares = new CollectedMiddlewares(node, originalFn);\n    // Short circuit\n    if (middlewares.isEmpty)\n        return action(originalFn).apply(null, baseCall.args);\n    var result = null;\n    function runNextMiddleware(call) {\n        var middleware = middlewares.getNextMiddleware();\n        var handler = middleware && middleware.handler;\n        if (!handler) {\n            return action(originalFn).apply(null, call.args);\n        }\n        // skip hooks if asked to\n        if (!middleware.includeHooks && Hook[call.name]) {\n            return runNextMiddleware(call);\n        }\n        var nextInvoked = false;\n        function next(call2, callback) {\n            nextInvoked = true;\n            // the result can contain\n            // - the non manipulated return value from an action\n            // - the non manipulated abort value\n            // - one of the above but manipulated through the callback function\n            result = runNextMiddleware(call2);\n            if (callback) {\n                result = callback(result);\n            }\n        }\n        var abortInvoked = false;\n        function abort(value) {\n            abortInvoked = true;\n            // overwrite the result\n            // can be manipulated through middlewares earlier in the queue using the callback fn\n            result = value;\n        }\n        handler(call, next, abort);\n        if (devMode()) {\n            if (!nextInvoked && !abortInvoked) {\n                var node2 = getStateTreeNode(call.tree);\n                throw fail$1(\"Neither the next() nor the abort() callback within the middleware \" + handler.name + \" for the action: \\\"\" + call.name + \"\\\" on the node: \" + node2.type.name + \" was invoked.\");\n            }\n            else if (nextInvoked && abortInvoked) {\n                var node2 = getStateTreeNode(call.tree);\n                throw fail$1(\"The next() and abort() callback within the middleware \" + handler.name + \" for the action: \\\"\" + call.name + \"\\\" on the node: \" + node2.type.name + \" were invoked.\");\n            }\n        }\n        return result;\n    }\n    return runNextMiddleware(baseCall);\n}\n\n/**\n * Returns the currently executing MST action context, or undefined if none.\n */\nfunction getRunningActionContext() {\n    var current = getCurrentActionContext();\n    while (current && current.type !== \"action\") {\n        current = current.parentActionEvent;\n    }\n    return current;\n}\nfunction _isActionContextThisOrChildOf(actionContext, sameOrParent, includeSame) {\n    var parentId = typeof sameOrParent === \"number\" ? sameOrParent : sameOrParent.id;\n    var current = includeSame\n        ? actionContext\n        : actionContext.parentActionEvent;\n    while (current) {\n        if (current.id === parentId) {\n            return true;\n        }\n        current = current.parentActionEvent;\n    }\n    return false;\n}\n/**\n * Returns if the given action context is a parent of this action context.\n */\nfunction isActionContextChildOf(actionContext, parent) {\n    return _isActionContextThisOrChildOf(actionContext, parent, false);\n}\n/**\n * Returns if the given action context is this or a parent of this action context.\n */\nfunction isActionContextThisOrChildOf(actionContext, parentOrThis) {\n    return _isActionContextThisOrChildOf(actionContext, parentOrThis, true);\n}\n\nfunction safeStringify(value) {\n    try {\n        return JSON.stringify(value);\n    }\n    catch (e) {\n        // istanbul ignore next\n        return \"<Unserializable: \" + e + \">\";\n    }\n}\n/**\n * @internal\n * @hidden\n */\nfunction prettyPrintValue(value) {\n    return typeof value === \"function\"\n        ? \"<function\" + (value.name ? \" \" + value.name : \"\") + \">\"\n        : isStateTreeNode(value)\n            ? \"<\" + value + \">\"\n            : \"`\" + safeStringify(value) + \"`\";\n}\nfunction shortenPrintValue(valueInString) {\n    return valueInString.length < 280\n        ? valueInString\n        : valueInString.substring(0, 272) + \"......\" + valueInString.substring(valueInString.length - 8);\n}\nfunction toErrorString(error) {\n    var value = error.value;\n    var type = error.context[error.context.length - 1].type;\n    var fullPath = error.context\n        .map(function (_a) {\n        var path = _a.path;\n        return path;\n    })\n        .filter(function (path) { return path.length > 0; })\n        .join(\"/\");\n    var pathPrefix = fullPath.length > 0 ? \"at path \\\"/\" + fullPath + \"\\\" \" : \"\";\n    var currentTypename = isStateTreeNode(value)\n        ? \"value of type \" + getStateTreeNode(value).type.name + \":\"\n        : isPrimitive(value)\n            ? \"value\"\n            : \"snapshot\";\n    var isSnapshotCompatible = type && isStateTreeNode(value) && type.is(getStateTreeNode(value).snapshot);\n    return (\"\" + pathPrefix + currentTypename + \" \" + prettyPrintValue(value) + \" is not assignable \" + (type ? \"to type: `\" + type.name + \"`\" : \"\") +\n        (error.message ? \" (\" + error.message + \")\" : \"\") +\n        (type\n            ? isPrimitiveType(type) || isPrimitive(value)\n                ? \".\"\n                : \", expected an instance of `\" + type.name + \"` or a snapshot like `\" + type.describe() + \"` instead.\" +\n                    (isSnapshotCompatible\n                        ? \" (Note that a snapshot of the provided value is compatible with the targeted type)\"\n                        : \"\")\n            : \".\"));\n}\n/**\n * @internal\n * @hidden\n */\nfunction getContextForPath(context, path, type) {\n    return context.concat([{ path: path, type: type }]);\n}\n/**\n * @internal\n * @hidden\n */\nfunction typeCheckSuccess() {\n    return EMPTY_ARRAY;\n}\n/**\n * @internal\n * @hidden\n */\nfunction typeCheckFailure(context, value, message) {\n    return [{ context: context, value: value, message: message }];\n}\n/**\n * @internal\n * @hidden\n */\nfunction flattenTypeErrors(errors) {\n    return errors.reduce(function (a, i) { return a.concat(i); }, []);\n}\n// TODO; doublecheck: typecheck should only needed to be invoked from: type.create and array / map / value.property will change\n/**\n * @internal\n * @hidden\n */\nfunction typecheckInternal(type, value) {\n    // runs typeChecking if it is in dev-mode or through a process.env.ENABLE_TYPE_CHECK flag\n    if (isTypeCheckingEnabled()) {\n        typecheck(type, value);\n    }\n}\n/**\n * Run's the typechecker for the given type on the given value, which can be a snapshot or an instance.\n * Throws if the given value is not according the provided type specification.\n * Use this if you need typechecks even in a production build (by default all automatic runtime type checks will be skipped in production builds)\n *\n * @param type Type to check against.\n * @param value Value to be checked, either a snapshot or an instance.\n */\nfunction typecheck(type, value) {\n    var errors = type.validate(value, [{ path: \"\", type: type }]);\n    if (errors.length > 0) {\n        throw fail$1(validationErrorsToString(type, value, errors));\n    }\n}\nfunction validationErrorsToString(type, value, errors) {\n    if (errors.length === 0) {\n        return undefined;\n    }\n    return (\"Error while converting \" + shortenPrintValue(prettyPrintValue(value)) + \" to `\" + type.name + \"`:\\n\\n    \" + errors.map(toErrorString).join(\"\\n    \"));\n}\n\nvar identifierCacheId = 0;\n/**\n * @internal\n * @hidden\n */\nvar IdentifierCache = /** @class */ (function () {\n    function IdentifierCache() {\n        Object.defineProperty(this, \"cacheId\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: identifierCacheId++\n        });\n        // n.b. in cache all identifiers are normalized to strings\n        Object.defineProperty(this, \"cache\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: observable.map()\n        });\n        // last time the cache (array) for a given time changed\n        // n.b. it is not really the time, but just an integer that gets increased after each modification to the array\n        Object.defineProperty(this, \"lastCacheModificationPerId\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: observable.map()\n        });\n    }\n    Object.defineProperty(IdentifierCache.prototype, \"updateLastCacheModificationPerId\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (identifier) {\n            var lcm = this.lastCacheModificationPerId.get(identifier);\n            // we start at 1 since 0 means no update since cache creation\n            this.lastCacheModificationPerId.set(identifier, lcm === undefined ? 1 : lcm + 1);\n        }\n    });\n    Object.defineProperty(IdentifierCache.prototype, \"getLastCacheModificationPerId\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (identifier) {\n            var modificationId = this.lastCacheModificationPerId.get(identifier) || 0;\n            return this.cacheId + \"-\" + modificationId;\n        }\n    });\n    Object.defineProperty(IdentifierCache.prototype, \"addNodeToCache\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (node, lastCacheUpdate) {\n            if (lastCacheUpdate === void 0) { lastCacheUpdate = true; }\n            if (node.identifierAttribute) {\n                var identifier = node.identifier;\n                if (!this.cache.has(identifier)) {\n                    this.cache.set(identifier, observable.array([], mobxShallow));\n                }\n                var set = this.cache.get(identifier);\n                if (set.indexOf(node) !== -1)\n                    throw fail$1(\"Already registered\");\n                set.push(node);\n                if (lastCacheUpdate) {\n                    this.updateLastCacheModificationPerId(identifier);\n                }\n            }\n        }\n    });\n    Object.defineProperty(IdentifierCache.prototype, \"mergeCache\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (node) {\n            var _this = this;\n            values(node.identifierCache.cache).forEach(function (nodes) {\n                return nodes.forEach(function (child) {\n                    _this.addNodeToCache(child);\n                });\n            });\n        }\n    });\n    Object.defineProperty(IdentifierCache.prototype, \"notifyDied\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (node) {\n            if (node.identifierAttribute) {\n                var id = node.identifier;\n                var set = this.cache.get(id);\n                if (set) {\n                    set.remove(node);\n                    // remove empty sets from cache\n                    if (!set.length) {\n                        this.cache.delete(id);\n                    }\n                    this.updateLastCacheModificationPerId(node.identifier);\n                }\n            }\n        }\n    });\n    Object.defineProperty(IdentifierCache.prototype, \"splitCache\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (node) {\n            var _this = this;\n            var res = new IdentifierCache();\n            var basePath = node.path;\n            entries(this.cache).forEach(function (_a) {\n                var _b = __read(_a, 2), id = _b[0], nodes = _b[1];\n                var modified = false;\n                for (var i = nodes.length - 1; i >= 0; i--) {\n                    if (nodes[i].path.indexOf(basePath) === 0) {\n                        res.addNodeToCache(nodes[i], false); // no need to update lastUpdated since it is a whole new cache\n                        nodes.splice(i, 1);\n                        modified = true;\n                    }\n                }\n                if (modified) {\n                    _this.updateLastCacheModificationPerId(id);\n                }\n            });\n            return res;\n        }\n    });\n    Object.defineProperty(IdentifierCache.prototype, \"has\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (type, identifier) {\n            var set = this.cache.get(identifier);\n            if (!set)\n                return false;\n            return set.some(function (candidate) { return type.isAssignableFrom(candidate.type); });\n        }\n    });\n    Object.defineProperty(IdentifierCache.prototype, \"resolve\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (type, identifier) {\n            var set = this.cache.get(identifier);\n            if (!set)\n                return null;\n            var matches = set.filter(function (candidate) { return type.isAssignableFrom(candidate.type); });\n            switch (matches.length) {\n                case 0:\n                    return null;\n                case 1:\n                    return matches[0];\n                default:\n                    throw fail$1(\"Cannot resolve a reference to type '\" + type.name + \"' with id: '\" + identifier + \"' unambigously, there are multiple candidates: \" + matches\n                        .map(function (n) { return n.path; })\n                        .join(\", \"));\n            }\n        }\n    });\n    return IdentifierCache;\n}());\n\n/**\n * @internal\n * @hidden\n */\nfunction createObjectNode(type, parent, subpath, environment, initialValue) {\n    var existingNode = getStateTreeNodeSafe(initialValue);\n    if (existingNode) {\n        if (existingNode.parent) {\n            // istanbul ignore next\n            throw fail$1(\"Cannot add an object to a state tree if it is already part of the same or another state tree. Tried to assign an object to '\" + (parent ? parent.path : \"\") + \"/\" + subpath + \"', but it lives already at '\" + existingNode.path + \"'\");\n        }\n        if (parent) {\n            existingNode.setParent(parent, subpath);\n        }\n        // else it already has no parent since it is a pre-requisite\n        return existingNode;\n    }\n    // not a node, a snapshot\n    return new ObjectNode(type, parent, subpath, environment, initialValue);\n}\n/**\n * @internal\n * @hidden\n */\nfunction createScalarNode(type, parent, subpath, environment, initialValue) {\n    return new ScalarNode(type, parent, subpath, environment, initialValue);\n}\n/**\n * @internal\n * @hidden\n */\nfunction isNode(value) {\n    return value instanceof ScalarNode || value instanceof ObjectNode;\n}\n\n/**\n * @internal\n * @hidden\n */\nvar NodeLifeCycle;\n(function (NodeLifeCycle) {\n    NodeLifeCycle[NodeLifeCycle[\"INITIALIZING\"] = 0] = \"INITIALIZING\";\n    NodeLifeCycle[NodeLifeCycle[\"CREATED\"] = 1] = \"CREATED\";\n    NodeLifeCycle[NodeLifeCycle[\"FINALIZED\"] = 2] = \"FINALIZED\";\n    NodeLifeCycle[NodeLifeCycle[\"DETACHING\"] = 3] = \"DETACHING\";\n    NodeLifeCycle[NodeLifeCycle[\"DEAD\"] = 4] = \"DEAD\"; // no coming back from this one\n})(NodeLifeCycle || (NodeLifeCycle = {}));\n/**\n * Returns true if the given value is a node in a state tree.\n * More precisely, that is, if the value is an instance of a\n * `types.model`, `types.array` or `types.map`.\n *\n * @param value\n * @returns true if the value is a state tree node.\n */\nfunction isStateTreeNode(value) {\n    return !!(value && value.$treenode);\n}\n/**\n * @internal\n * @hidden\n */\nfunction assertIsStateTreeNode(value, argNumber) {\n    assertArg(value, isStateTreeNode, \"mobx-state-tree node\", argNumber);\n}\n/**\n * @internal\n * @hidden\n */\nfunction getStateTreeNode(value) {\n    if (!isStateTreeNode(value)) {\n        // istanbul ignore next\n        throw fail$1(\"Value \" + value + \" is no MST Node\");\n    }\n    return value.$treenode;\n}\n/**\n * @internal\n * @hidden\n */\nfunction getStateTreeNodeSafe(value) {\n    return (value && value.$treenode) || null;\n}\n/**\n * @internal\n * @hidden\n */\nfunction toJSON() {\n    return getStateTreeNode(this).snapshot;\n}\nvar doubleDot = function (_) { return \"..\"; };\n/**\n * @internal\n * @hidden\n */\nfunction getRelativePathBetweenNodes(base, target) {\n    // PRE condition target is (a child of) base!\n    if (base.root !== target.root) {\n        throw fail$1(\"Cannot calculate relative path: objects '\" + base + \"' and '\" + target + \"' are not part of the same object tree\");\n    }\n    var baseParts = splitJsonPath(base.path);\n    var targetParts = splitJsonPath(target.path);\n    var common = 0;\n    for (; common < baseParts.length; common++) {\n        if (baseParts[common] !== targetParts[common])\n            break;\n    }\n    // TODO: assert that no targetParts paths are \"..\", \".\" or \"\"!\n    return (baseParts.slice(common).map(doubleDot).join(\"/\") + joinJsonPath(targetParts.slice(common)));\n}\n/**\n * @internal\n * @hidden\n */\nfunction resolveNodeByPath(base, path, failIfResolveFails) {\n    if (failIfResolveFails === void 0) { failIfResolveFails = true; }\n    return resolveNodeByPathParts(base, splitJsonPath(path), failIfResolveFails);\n}\n/**\n * @internal\n * @hidden\n */\nfunction resolveNodeByPathParts(base, pathParts, failIfResolveFails) {\n    if (failIfResolveFails === void 0) { failIfResolveFails = true; }\n    var current = base;\n    for (var i = 0; i < pathParts.length; i++) {\n        var part = pathParts[i];\n        if (part === \"..\") {\n            current = current.parent;\n            if (current)\n                continue; // not everything has a parent\n        }\n        else if (part === \".\") {\n            continue;\n        }\n        else if (current) {\n            if (current instanceof ScalarNode) {\n                // check if the value of a scalar resolves to a state tree node (e.g. references)\n                // then we can continue resolving...\n                try {\n                    var value = current.value;\n                    if (isStateTreeNode(value)) {\n                        current = getStateTreeNode(value);\n                        // fall through\n                    }\n                }\n                catch (e) {\n                    if (!failIfResolveFails) {\n                        return undefined;\n                    }\n                    throw e;\n                }\n            }\n            if (current instanceof ObjectNode) {\n                var subType = current.getChildType(part);\n                if (subType) {\n                    current = current.getChildNode(part);\n                    if (current)\n                        continue;\n                }\n            }\n        }\n        if (failIfResolveFails)\n            throw fail$1(\"Could not resolve '\" + part + \"' in path '\" + (joinJsonPath(pathParts.slice(0, i)) || \"/\") + \"' while resolving '\" + joinJsonPath(pathParts) + \"'\");\n        else\n            return undefined;\n    }\n    return current;\n}\n/**\n * @internal\n * @hidden\n */\nfunction convertChildNodesToArray(childNodes) {\n    if (!childNodes)\n        return EMPTY_ARRAY;\n    var keys = Object.keys(childNodes);\n    if (!keys.length)\n        return EMPTY_ARRAY;\n    var result = new Array(keys.length);\n    keys.forEach(function (key, index) {\n        result[index] = childNodes[key];\n    });\n    return result;\n}\n\n// based on: https://github.com/mobxjs/mobx-utils/blob/master/src/async-action.ts\n/*\n    All contents of this file are deprecated.\n\n    The term `process` has been replaced with `flow` to avoid conflicts with the\n    global `process` object.\n\n    Refer to `flow.ts` for any further changes to this implementation.\n*/\nvar DEPRECATION_MESSAGE = \"See https://github.com/mobxjs/mobx-state-tree/issues/399 for more information. \" +\n    \"Note that the middleware event types starting with `process` now start with `flow`.\";\n/**\n * @hidden\n *\n * @deprecated has been renamed to `flow()`.\n * See https://github.com/mobxjs/mobx-state-tree/issues/399 for more information.\n * Note that the middleware event types starting with `process` now start with `flow`.\n *\n * @returns {Promise}\n */\nfunction process$1(asyncAction) {\n    deprecated(\"process\", \"`process()` has been renamed to `flow()`. \" + DEPRECATION_MESSAGE);\n    return flow(asyncAction);\n}\n\nvar plainObjectString = Object.toString();\n/**\n * @internal\n * @hidden\n */\nvar EMPTY_ARRAY = Object.freeze([]);\n/**\n * @internal\n * @hidden\n */\nvar EMPTY_OBJECT = Object.freeze({});\n/**\n * @internal\n * @hidden\n */\nvar mobxShallow = _getGlobalState().useProxies\n    ? { deep: false }\n    : { deep: false, proxy: false };\nObject.freeze(mobxShallow);\n/**\n * @internal\n * @hidden\n */\nfunction fail$1(message) {\n    if (message === void 0) { message = \"Illegal state\"; }\n    return new Error(\"[mobx-state-tree] \" + message);\n}\n/**\n * @internal\n * @hidden\n */\nfunction identity(_) {\n    return _;\n}\n/**\n * pollyfill (for IE) suggested in MDN:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger\n * @internal\n * @hidden\n */\nvar isInteger = Number.isInteger ||\n    function (value) {\n        return typeof value === \"number\" && isFinite(value) && Math.floor(value) === value;\n    };\n/**\n * @internal\n * @hidden\n */\nfunction isArray(val) {\n    return Array.isArray(val) || isObservableArray(val);\n}\n/**\n * @internal\n * @hidden\n */\nfunction asArray(val) {\n    if (!val)\n        return EMPTY_ARRAY;\n    if (isArray(val))\n        return val;\n    return [val];\n}\n/**\n * @internal\n * @hidden\n */\nfunction extend(a) {\n    var b = [];\n    for (var _i = 1; _i < arguments.length; _i++) {\n        b[_i - 1] = arguments[_i];\n    }\n    for (var i = 0; i < b.length; i++) {\n        var current = b[i];\n        for (var key in current)\n            a[key] = current[key];\n    }\n    return a;\n}\n/**\n * @internal\n * @hidden\n */\nfunction isPlainObject(value) {\n    var _a;\n    if (value === null || typeof value !== \"object\")\n        return false;\n    var proto = Object.getPrototypeOf(value);\n    if (proto == null)\n        return true;\n    return ((_a = proto.constructor) === null || _a === void 0 ? void 0 : _a.toString()) === plainObjectString;\n}\n/**\n * @internal\n * @hidden\n */\nfunction isMutable(value) {\n    return (value !== null &&\n        typeof value === \"object\" &&\n        !(value instanceof Date) &&\n        !(value instanceof RegExp));\n}\n/**\n * @internal\n * @hidden\n */\nfunction isPrimitive(value, includeDate) {\n    if (includeDate === void 0) { includeDate = true; }\n    return (value === null ||\n        value === undefined ||\n        typeof value === \"string\" ||\n        typeof value === \"number\" ||\n        typeof value === \"boolean\" ||\n        (includeDate && value instanceof Date));\n}\n/**\n * @internal\n * @hidden\n * Freeze a value and return it (if not in production)\n */\nfunction freeze(value) {\n    if (!devMode())\n        return value;\n    return isPrimitive(value) || isObservableArray(value) ? value : Object.freeze(value);\n}\n/**\n * @internal\n * @hidden\n * Recursively freeze a value (if not in production)\n */\nfunction deepFreeze(value) {\n    if (!devMode())\n        return value;\n    freeze(value);\n    if (isPlainObject(value)) {\n        Object.keys(value).forEach(function (propKey) {\n            if (!isPrimitive(value[propKey]) &&\n                !Object.isFrozen(value[propKey])) {\n                deepFreeze(value[propKey]);\n            }\n        });\n    }\n    return value;\n}\n/**\n * @internal\n * @hidden\n */\nfunction isSerializable(value) {\n    return typeof value !== \"function\";\n}\n/**\n * @internal\n * @hidden\n */\nfunction defineProperty(object, key, descriptor) {\n    isObservableObject(object)\n        ? defineProperty$1(object, key, descriptor)\n        : Object.defineProperty(object, key, descriptor);\n}\n/**\n * @internal\n * @hidden\n */\nfunction addHiddenFinalProp(object, propName, value) {\n    defineProperty(object, propName, {\n        enumerable: false,\n        writable: false,\n        configurable: true,\n        value: value\n    });\n}\n/**\n * @internal\n * @hidden\n */\nfunction addHiddenWritableProp(object, propName, value) {\n    defineProperty(object, propName, {\n        enumerable: false,\n        writable: true,\n        configurable: true,\n        value: value\n    });\n}\n/**\n * @internal\n * @hidden\n */\nvar EventHandler = /** @class */ (function () {\n    function EventHandler() {\n        Object.defineProperty(this, \"handlers\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: []\n        });\n    }\n    Object.defineProperty(EventHandler.prototype, \"hasSubscribers\", {\n        get: function () {\n            return this.handlers.length > 0;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(EventHandler.prototype, \"register\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (fn, atTheBeginning) {\n            var _this = this;\n            if (atTheBeginning === void 0) { atTheBeginning = false; }\n            if (atTheBeginning) {\n                this.handlers.unshift(fn);\n            }\n            else {\n                this.handlers.push(fn);\n            }\n            return function () {\n                _this.unregister(fn);\n            };\n        }\n    });\n    Object.defineProperty(EventHandler.prototype, \"has\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (fn) {\n            return this.handlers.indexOf(fn) >= 0;\n        }\n    });\n    Object.defineProperty(EventHandler.prototype, \"unregister\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (fn) {\n            var index = this.handlers.indexOf(fn);\n            if (index >= 0) {\n                this.handlers.splice(index, 1);\n            }\n        }\n    });\n    Object.defineProperty(EventHandler.prototype, \"clear\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            this.handlers.length = 0;\n        }\n    });\n    Object.defineProperty(EventHandler.prototype, \"emit\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            var args = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i] = arguments[_i];\n            }\n            // make a copy just in case it changes\n            var handlers = this.handlers.slice();\n            handlers.forEach(function (f) { return f.apply(void 0, __spread(args)); });\n        }\n    });\n    return EventHandler;\n}());\n/**\n * @internal\n * @hidden\n */\nvar EventHandlers = /** @class */ (function () {\n    function EventHandlers() {\n        Object.defineProperty(this, \"eventHandlers\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n    }\n    Object.defineProperty(EventHandlers.prototype, \"hasSubscribers\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (event) {\n            var handler = this.eventHandlers && this.eventHandlers[event];\n            return !!handler && handler.hasSubscribers;\n        }\n    });\n    Object.defineProperty(EventHandlers.prototype, \"register\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (event, fn, atTheBeginning) {\n            if (atTheBeginning === void 0) { atTheBeginning = false; }\n            if (!this.eventHandlers) {\n                this.eventHandlers = {};\n            }\n            var handler = this.eventHandlers[event];\n            if (!handler) {\n                handler = this.eventHandlers[event] = new EventHandler();\n            }\n            return handler.register(fn, atTheBeginning);\n        }\n    });\n    Object.defineProperty(EventHandlers.prototype, \"has\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (event, fn) {\n            var handler = this.eventHandlers && this.eventHandlers[event];\n            return !!handler && handler.has(fn);\n        }\n    });\n    Object.defineProperty(EventHandlers.prototype, \"unregister\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (event, fn) {\n            var handler = this.eventHandlers && this.eventHandlers[event];\n            if (handler) {\n                handler.unregister(fn);\n            }\n        }\n    });\n    Object.defineProperty(EventHandlers.prototype, \"clear\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (event) {\n            if (this.eventHandlers) {\n                delete this.eventHandlers[event];\n            }\n        }\n    });\n    Object.defineProperty(EventHandlers.prototype, \"clearAll\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            this.eventHandlers = undefined;\n        }\n    });\n    Object.defineProperty(EventHandlers.prototype, \"emit\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (event) {\n            var _a;\n            var args = [];\n            for (var _i = 1; _i < arguments.length; _i++) {\n                args[_i - 1] = arguments[_i];\n            }\n            var handler = this.eventHandlers && this.eventHandlers[event];\n            if (handler) {\n                (_a = handler).emit.apply(_a, __spread(args));\n            }\n        }\n    });\n    return EventHandlers;\n}());\n/**\n * @internal\n * @hidden\n */\nfunction argsToArray(args) {\n    var res = new Array(args.length);\n    for (var i = 0; i < args.length; i++)\n        res[i] = args[i];\n    return res;\n}\n/**\n * @internal\n * @hidden\n */\nfunction stringStartsWith(str, beginning) {\n    return str.indexOf(beginning) === 0;\n}\n/**\n * @internal\n * @hidden\n */\nvar deprecated = function (id, message) {\n    // skip if running production\n    if (!devMode())\n        return;\n    // warn if hasn't been warned before\n    if (deprecated.ids && !deprecated.ids.hasOwnProperty(id)) {\n        warnError(\"Deprecation warning: \" + message);\n    }\n    // mark as warned to avoid duplicate warn message\n    if (deprecated.ids)\n        deprecated.ids[id] = true;\n};\ndeprecated.ids = {};\n/**\n * @internal\n * @hidden\n */\nfunction warnError(msg) {\n    console.warn(new Error(\"[mobx-state-tree] \" + msg));\n}\n/**\n * @internal\n * @hidden\n */\nfunction isTypeCheckingEnabled() {\n    return (devMode() ||\n        (typeof process !== \"undefined\" && process.env && process.env.ENABLE_TYPE_CHECK === \"true\"));\n}\n/**\n * @internal\n * @hidden\n */\nfunction devMode() {\n    return process.env.NODE_ENV !== \"production\";\n}\n/**\n * @internal\n * @hidden\n */\nfunction assertArg(value, fn, typeName, argNumber) {\n    if (devMode()) {\n        if (!fn(value)) {\n            // istanbul ignore next\n            throw fail$1(\"expected \" + typeName + \" as argument \" + asArray(argNumber).join(\" or \") + \", got \" + value + \" instead\");\n        }\n    }\n}\n/**\n * @internal\n * @hidden\n */\nfunction assertIsFunction(value, argNumber) {\n    assertArg(value, function (fn) { return typeof fn === \"function\"; }, \"function\", argNumber);\n}\n/**\n * @internal\n * @hidden\n */\nfunction assertIsNumber(value, argNumber, min, max) {\n    assertArg(value, function (n) { return typeof n === \"number\"; }, \"number\", argNumber);\n    if (min !== undefined) {\n        assertArg(value, function (n) { return n >= min; }, \"number greater than \" + min, argNumber);\n    }\n    if (max !== undefined) {\n        assertArg(value, function (n) { return n <= max; }, \"number lesser than \" + max, argNumber);\n    }\n}\n/**\n * @internal\n * @hidden\n */\nfunction assertIsString(value, argNumber, canBeEmpty) {\n    if (canBeEmpty === void 0) { canBeEmpty = true; }\n    assertArg(value, function (s) { return typeof s === \"string\"; }, \"string\", argNumber);\n    if (!canBeEmpty) {\n        assertArg(value, function (s) { return s !== \"\"; }, \"not empty string\", argNumber);\n    }\n}\n/**\n * @internal\n * @hidden\n */\nfunction setImmediateWithFallback(fn) {\n    if (typeof queueMicrotask === \"function\") {\n        queueMicrotask(fn);\n    }\n    else if (typeof setImmediate === \"function\") {\n        setImmediate(fn);\n    }\n    else {\n        setTimeout(fn, 1);\n    }\n}\n\n/**\n * See [asynchronous actions](concepts/async-actions.md).\n *\n * @returns The flow as a promise.\n */\nfunction flow(generator) {\n    return createFlowSpawner(generator.name, generator);\n}\n/**\n * @deprecated Not needed since TS3.6.\n * Used for TypeScript to make flows that return a promise return the actual promise result.\n *\n * @param val\n * @returns\n */\nfunction castFlowReturn(val) {\n    return val;\n}\n/**\n * @experimental\n * experimental api - might change on minor/patch releases\n *\n * Convert a promise-returning function to a generator-returning one.\n * This is intended to allow for usage of `yield*` in async actions to\n * retain the promise return type.\n *\n * Example:\n * ```ts\n * function getDataAsync(input: string): Promise<number> { ... }\n * const getDataGen = toGeneratorFunction(getDataAsync);\n *\n * const someModel.actions(self => ({\n *   someAction: flow(function*() {\n *     // value is typed as number\n *     const value = yield* getDataGen(\"input value\");\n *     ...\n *   })\n * }))\n * ```\n */\nfunction toGeneratorFunction(p) {\n    return function () {\n        var _i;\n        var args = [];\n        for (_i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        return __generator(this, function (_a) {\n            switch (_a.label) {\n                case 0: return [4 /*yield*/, p.apply(void 0, __spread(args))];\n                case 1: return [2 /*return*/, (_a.sent())];\n            }\n        });\n    };\n}\n/**\n * @experimental\n * experimental api - might change on minor/patch releases\n *\n * Convert a promise to a generator yielding that promise\n * This is intended to allow for usage of `yield*` in async actions to\n * retain the promise return type.\n *\n * Example:\n * ```ts\n * function getDataAsync(input: string): Promise<number> { ... }\n *\n * const someModel.actions(self => ({\n *   someAction: flow(function*() {\n *     // value is typed as number\n *     const value = yield* toGenerator(getDataAsync(\"input value\"));\n *     ...\n *   })\n * }))\n * ```\n */\nfunction toGenerator(p) {\n    return __generator(this, function (_a) {\n        switch (_a.label) {\n            case 0: return [4 /*yield*/, p];\n            case 1: return [2 /*return*/, (_a.sent())];\n        }\n    });\n}\n/**\n * @internal\n * @hidden\n */\nfunction createFlowSpawner(name, generator) {\n    var spawner = function flowSpawner() {\n        // Implementation based on https://github.com/tj/co/blob/master/index.js\n        var runId = getNextActionId();\n        var parentContext = getCurrentActionContext();\n        if (!parentContext) {\n            throw fail$1(\"a mst flow must always have a parent context\");\n        }\n        var parentActionContext = getParentActionContext(parentContext);\n        if (!parentActionContext) {\n            throw fail$1(\"a mst flow must always have a parent action context\");\n        }\n        var contextBase = {\n            name: name,\n            id: runId,\n            tree: parentContext.tree,\n            context: parentContext.context,\n            parentId: parentContext.id,\n            allParentIds: __spread(parentContext.allParentIds, [parentContext.id]),\n            rootId: parentContext.rootId,\n            parentEvent: parentContext,\n            parentActionEvent: parentActionContext\n        };\n        var args = arguments;\n        function wrap(fn, type, arg) {\n            fn.$mst_middleware = spawner.$mst_middleware; // pick up any middleware attached to the flow\n            runWithActionContext(__assign(__assign({}, contextBase), { type: type, args: [arg] }), fn);\n        }\n        return new Promise(function (resolve, reject) {\n            var gen;\n            var init = function asyncActionInit() {\n                gen = generator.apply(null, arguments);\n                onFulfilled(undefined); // kick off the flow\n            };\n            init.$mst_middleware = spawner.$mst_middleware;\n            runWithActionContext(__assign(__assign({}, contextBase), { type: \"flow_spawn\", args: argsToArray(args) }), init);\n            function onFulfilled(res) {\n                var ret;\n                try {\n                    // prettier-ignore\n                    wrap(function (r) { ret = gen.next(r); }, \"flow_resume\", res);\n                }\n                catch (e) {\n                    // prettier-ignore\n                    setImmediateWithFallback(function () {\n                        wrap(function (r) { reject(e); }, \"flow_throw\", e);\n                    });\n                    return;\n                }\n                next(ret);\n                return;\n            }\n            function onRejected(err) {\n                var ret;\n                try {\n                    // prettier-ignore\n                    wrap(function (r) { ret = gen.throw(r); }, \"flow_resume_error\", err); // or yieldError?\n                }\n                catch (e) {\n                    // prettier-ignore\n                    setImmediateWithFallback(function () {\n                        wrap(function (r) { reject(e); }, \"flow_throw\", e);\n                    });\n                    return;\n                }\n                next(ret);\n            }\n            function next(ret) {\n                if (ret.done) {\n                    // prettier-ignore\n                    setImmediateWithFallback(function () {\n                        wrap(function (r) { resolve(r); }, \"flow_return\", ret.value);\n                    });\n                    return;\n                }\n                // TODO: support more type of values? See https://github.com/tj/co/blob/249bbdc72da24ae44076afd716349d2089b31c4c/index.js#L100\n                if (!ret.value || typeof ret.value.then !== \"function\") {\n                    // istanbul ignore next\n                    throw fail$1(\"Only promises can be yielded to `async`, got: \" + ret);\n                }\n                return ret.value.then(onFulfilled, onRejected);\n            }\n        });\n    };\n    return spawner;\n}\n\n/**\n * @internal\n * @hidden\n */\nfunction splitPatch(patch) {\n    if (!(\"oldValue\" in patch))\n        throw fail$1(\"Patches without `oldValue` field cannot be inversed\");\n    return [stripPatch(patch), invertPatch(patch)];\n}\n/**\n * @internal\n * @hidden\n */\nfunction stripPatch(patch) {\n    // strips `oldvalue` information from the patch, so that it becomes a patch conform the json-patch spec\n    // this removes the ability to undo the patch\n    switch (patch.op) {\n        case \"add\":\n            return { op: \"add\", path: patch.path, value: patch.value };\n        case \"remove\":\n            return { op: \"remove\", path: patch.path };\n        case \"replace\":\n            return { op: \"replace\", path: patch.path, value: patch.value };\n    }\n}\nfunction invertPatch(patch) {\n    switch (patch.op) {\n        case \"add\":\n            return {\n                op: \"remove\",\n                path: patch.path\n            };\n        case \"remove\":\n            return {\n                op: \"add\",\n                path: patch.path,\n                value: patch.oldValue\n            };\n        case \"replace\":\n            return {\n                op: \"replace\",\n                path: patch.path,\n                value: patch.oldValue\n            };\n    }\n}\n/**\n * Simple simple check to check it is a number.\n */\nfunction isNumber(x) {\n    return typeof x === \"number\";\n}\n/**\n * Escape slashes and backslashes.\n *\n * http://tools.ietf.org/html/rfc6901\n */\nfunction escapeJsonPath(path) {\n    if (isNumber(path) === true) {\n        return \"\" + path;\n    }\n    if (path.indexOf(\"/\") === -1 && path.indexOf(\"~\") === -1)\n        return path;\n    return path.replace(/~/g, \"~0\").replace(/\\//g, \"~1\");\n}\n/**\n * Unescape slashes and backslashes.\n */\nfunction unescapeJsonPath(path) {\n    return path.replace(/~1/g, \"/\").replace(/~0/g, \"~\");\n}\n/**\n * Generates a json-path compliant json path from path parts.\n *\n * @param path\n * @returns\n */\nfunction joinJsonPath(path) {\n    // `/` refers to property with an empty name, while `` refers to root itself!\n    if (path.length === 0)\n        return \"\";\n    var getPathStr = function (p) { return p.map(escapeJsonPath).join(\"/\"); };\n    if (path[0] === \".\" || path[0] === \"..\") {\n        // relative\n        return getPathStr(path);\n    }\n    else {\n        // absolute\n        return \"/\" + getPathStr(path);\n    }\n}\n/**\n * Splits and decodes a json path into several parts.\n *\n * @param path\n * @returns\n */\nfunction splitJsonPath(path) {\n    // `/` refers to property with an empty name, while `` refers to root itself!\n    var parts = path.split(\"/\").map(unescapeJsonPath);\n    var valid = path === \"\" ||\n        path === \".\" ||\n        path === \"..\" ||\n        stringStartsWith(path, \"/\") ||\n        stringStartsWith(path, \"./\") ||\n        stringStartsWith(path, \"../\");\n    if (!valid) {\n        throw fail$1(\"a json path must be either rooted, empty or relative, but got '\" + path + \"'\");\n    }\n    // '/a/b/c' -> [\"a\", \"b\", \"c\"]\n    // '../../b/c' -> [\"..\", \"..\", \"b\", \"c\"]\n    // '' -> []\n    // '/' -> ['']\n    // './a' -> [\".\", \"a\"]\n    // /./a' -> [\".\", \"a\"] equivalent to './a'\n    if (parts[0] === \"\") {\n        parts.shift();\n    }\n    return parts;\n}\n\n/** @hidden */\nvar $preProcessorFailed = Symbol(\"$preProcessorFailed\");\nvar SnapshotProcessor = /** @class */ (function (_super) {\n    __extends(SnapshotProcessor, _super);\n    function SnapshotProcessor(_subtype, _processors, name) {\n        var _this = _super.call(this, name || _subtype.name) || this;\n        Object.defineProperty(_this, \"_subtype\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: _subtype\n        });\n        Object.defineProperty(_this, \"_processors\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: _processors\n        });\n        return _this;\n    }\n    Object.defineProperty(SnapshotProcessor.prototype, \"flags\", {\n        get: function () {\n            return this._subtype.flags | TypeFlags.SnapshotProcessor;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SnapshotProcessor.prototype, \"describe\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            return \"snapshotProcessor(\" + this._subtype.describe() + \")\";\n        }\n    });\n    Object.defineProperty(SnapshotProcessor.prototype, \"preProcessSnapshot\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (sn) {\n            if (this._processors.preProcessor) {\n                return this._processors.preProcessor.call(null, sn);\n            }\n            return sn;\n        }\n    });\n    Object.defineProperty(SnapshotProcessor.prototype, \"preProcessSnapshotSafe\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (sn) {\n            try {\n                return this.preProcessSnapshot(sn);\n            }\n            catch (e) {\n                return $preProcessorFailed;\n            }\n        }\n    });\n    Object.defineProperty(SnapshotProcessor.prototype, \"postProcessSnapshot\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (sn) {\n            if (this._processors.postProcessor) {\n                return this._processors.postProcessor.call(null, sn);\n            }\n            return sn;\n        }\n    });\n    Object.defineProperty(SnapshotProcessor.prototype, \"_fixNode\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (node) {\n            var _this = this;\n            // the node has to use these methods rather than the original type ones\n            proxyNodeTypeMethods(node.type, this, \"create\");\n            var oldGetSnapshot = node.getSnapshot;\n            node.getSnapshot = function () {\n                return _this.postProcessSnapshot(oldGetSnapshot.call(node));\n            };\n            if (!isUnionType(this._subtype)) {\n                node.getReconciliationType = function () {\n                    return _this;\n                };\n            }\n        }\n    });\n    Object.defineProperty(SnapshotProcessor.prototype, \"instantiate\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (parent, subpath, environment, initialValue) {\n            var processedInitialValue = isStateTreeNode(initialValue)\n                ? initialValue\n                : this.preProcessSnapshot(initialValue);\n            var node = this._subtype.instantiate(parent, subpath, environment, processedInitialValue);\n            this._fixNode(node);\n            return node;\n        }\n    });\n    Object.defineProperty(SnapshotProcessor.prototype, \"reconcile\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (current, newValue, parent, subpath) {\n            var node = this._subtype.reconcile(current, isStateTreeNode(newValue) ? newValue : this.preProcessSnapshot(newValue), parent, subpath);\n            if (node !== current) {\n                this._fixNode(node);\n            }\n            return node;\n        }\n    });\n    Object.defineProperty(SnapshotProcessor.prototype, \"getSnapshot\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (node, applyPostProcess) {\n            if (applyPostProcess === void 0) { applyPostProcess = true; }\n            var sn = this._subtype.getSnapshot(node);\n            return applyPostProcess ? this.postProcessSnapshot(sn) : sn;\n        }\n    });\n    Object.defineProperty(SnapshotProcessor.prototype, \"isValidSnapshot\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (value, context) {\n            var processedSn = this.preProcessSnapshotSafe(value);\n            if (processedSn === $preProcessorFailed) {\n                return typeCheckFailure(context, value, \"Failed to preprocess value\");\n            }\n            return this._subtype.validate(processedSn, context);\n        }\n    });\n    Object.defineProperty(SnapshotProcessor.prototype, \"getSubTypes\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            return this._subtype;\n        }\n    });\n    Object.defineProperty(SnapshotProcessor.prototype, \"is\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (thing) {\n            var value = isType(thing)\n                ? this._subtype\n                : isStateTreeNode(thing)\n                    ? getSnapshot(thing, false)\n                    : this.preProcessSnapshotSafe(thing);\n            if (value === $preProcessorFailed) {\n                return false;\n            }\n            return this._subtype.validate(value, [{ path: \"\", type: this._subtype }]).length === 0;\n        }\n    });\n    Object.defineProperty(SnapshotProcessor.prototype, \"isAssignableFrom\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (type) {\n            return this._subtype.isAssignableFrom(type);\n        }\n    });\n    Object.defineProperty(SnapshotProcessor.prototype, \"isMatchingSnapshotId\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (current, snapshot) {\n            if (!(this._subtype instanceof ComplexType)) {\n                return false;\n            }\n            var processedSn = this.preProcessSnapshot(snapshot);\n            return this._subtype.isMatchingSnapshotId(current, processedSn);\n        }\n    });\n    return SnapshotProcessor;\n}(BaseType));\nfunction proxyNodeTypeMethods(nodeType, snapshotProcessorType) {\n    var e_1, _a;\n    var methods = [];\n    for (var _i = 2; _i < arguments.length; _i++) {\n        methods[_i - 2] = arguments[_i];\n    }\n    try {\n        for (var methods_1 = __values(methods), methods_1_1 = methods_1.next(); !methods_1_1.done; methods_1_1 = methods_1.next()) {\n            var method = methods_1_1.value;\n            nodeType[method] = snapshotProcessorType[method].bind(snapshotProcessorType);\n        }\n    }\n    catch (e_1_1) { e_1 = { error: e_1_1 }; }\n    finally {\n        try {\n            if (methods_1_1 && !methods_1_1.done && (_a = methods_1.return)) _a.call(methods_1);\n        }\n        finally { if (e_1) throw e_1.error; }\n    }\n}\n/**\n * `types.snapshotProcessor` - Runs a pre/post snapshot processor before/after serializing a given type.\n *\n * Example:\n * ```ts\n * const Todo1 = types.model({ text: types.string })\n * // in the backend the text type must be null when empty\n * interface BackendTodo {\n *     text: string | null\n * }\n * const Todo2 = types.snapshotProcessor(Todo1, {\n *     // from snapshot to instance\n *     preProcessor(sn: BackendTodo) {\n *         return {\n *             text: sn.text || \"\";\n *         }\n *     },\n *     // from instance to snapshot\n *     postProcessor(sn): BackendTodo {\n *         return {\n *             text: !sn.text ? null : sn.text\n *         }\n *     }\n * })\n * ```\n *\n * @param type Type to run the processors over.\n * @param processors Processors to run.\n * @param name Type name, or undefined to inherit the inner type one.\n * @returns\n */\nfunction snapshotProcessor(type, processors, name) {\n    assertIsType(type, 1);\n    if (devMode()) {\n        if (processors.postProcessor && typeof processors.postProcessor !== \"function\") {\n            // istanbul ignore next\n            throw fail(\"postSnapshotProcessor must be a function\");\n        }\n        if (processors.preProcessor && typeof processors.preProcessor !== \"function\") {\n            // istanbul ignore next\n            throw fail(\"preSnapshotProcessor must be a function\");\n        }\n    }\n    return new SnapshotProcessor(type, processors, name);\n}\n\nvar needsIdentifierError = \"Map.put can only be used to store complex values that have an identifier type attribute\";\nfunction tryCollectModelTypes(type, modelTypes) {\n    var e_1, _a;\n    var subtypes = type.getSubTypes();\n    if (subtypes === cannotDetermineSubtype) {\n        return false;\n    }\n    if (subtypes) {\n        var subtypesArray = asArray(subtypes);\n        try {\n            for (var subtypesArray_1 = __values(subtypesArray), subtypesArray_1_1 = subtypesArray_1.next(); !subtypesArray_1_1.done; subtypesArray_1_1 = subtypesArray_1.next()) {\n                var subtype = subtypesArray_1_1.value;\n                if (!tryCollectModelTypes(subtype, modelTypes))\n                    return false;\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (subtypesArray_1_1 && !subtypesArray_1_1.done && (_a = subtypesArray_1.return)) _a.call(subtypesArray_1);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n    }\n    if (type instanceof ModelType) {\n        modelTypes.push(type);\n    }\n    return true;\n}\n/**\n * @internal\n * @hidden\n */\nvar MapIdentifierMode;\n(function (MapIdentifierMode) {\n    MapIdentifierMode[MapIdentifierMode[\"UNKNOWN\"] = 0] = \"UNKNOWN\";\n    MapIdentifierMode[MapIdentifierMode[\"YES\"] = 1] = \"YES\";\n    MapIdentifierMode[MapIdentifierMode[\"NO\"] = 2] = \"NO\";\n})(MapIdentifierMode || (MapIdentifierMode = {}));\nvar MSTMap = /** @class */ (function (_super) {\n    __extends(MSTMap, _super);\n    function MSTMap(initialData) {\n        return _super.call(this, initialData, observable.ref.enhancer) || this;\n    }\n    Object.defineProperty(MSTMap.prototype, \"get\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (key) {\n            // maybe this is over-enthousiastic? normalize numeric keys to strings\n            return _super.prototype.get.call(this, \"\" + key);\n        }\n    });\n    Object.defineProperty(MSTMap.prototype, \"has\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (key) {\n            return _super.prototype.has.call(this, \"\" + key);\n        }\n    });\n    Object.defineProperty(MSTMap.prototype, \"delete\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (key) {\n            return _super.prototype.delete.call(this, \"\" + key);\n        }\n    });\n    Object.defineProperty(MSTMap.prototype, \"set\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (key, value) {\n            return _super.prototype.set.call(this, \"\" + key, value);\n        }\n    });\n    Object.defineProperty(MSTMap.prototype, \"put\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (value) {\n            if (!value)\n                throw fail$1(\"Map.put cannot be used to set empty values\");\n            if (isStateTreeNode(value)) {\n                var node = getStateTreeNode(value);\n                if (devMode()) {\n                    if (!node.identifierAttribute) {\n                        throw fail$1(needsIdentifierError);\n                    }\n                }\n                if (node.identifier === null) {\n                    throw fail$1(needsIdentifierError);\n                }\n                this.set(node.identifier, value);\n                return value;\n            }\n            else if (!isMutable(value)) {\n                throw fail$1(\"Map.put can only be used to store complex values\");\n            }\n            else {\n                var mapNode = getStateTreeNode(this);\n                var mapType = mapNode.type;\n                if (mapType.identifierMode !== MapIdentifierMode.YES) {\n                    throw fail$1(needsIdentifierError);\n                }\n                var idAttr = mapType.mapIdentifierAttribute;\n                var id = value[idAttr];\n                if (!isValidIdentifier(id)) {\n                    // try again but this time after creating a node for the value\n                    // since it might be an optional identifier\n                    var newNode = this.put(mapType.getChildType().create(value, mapNode.environment));\n                    return this.put(getSnapshot(newNode));\n                }\n                var key = normalizeIdentifier(id);\n                this.set(key, value);\n                return this.get(key);\n            }\n        }\n    });\n    return MSTMap;\n}(ObservableMap));\n/**\n * @internal\n * @hidden\n */\nvar MapType = /** @class */ (function (_super) {\n    __extends(MapType, _super);\n    function MapType(name, _subType, hookInitializers) {\n        if (hookInitializers === void 0) { hookInitializers = []; }\n        var _this = _super.call(this, name) || this;\n        Object.defineProperty(_this, \"_subType\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: _subType\n        });\n        Object.defineProperty(_this, \"identifierMode\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: MapIdentifierMode.UNKNOWN\n        });\n        Object.defineProperty(_this, \"mapIdentifierAttribute\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: undefined\n        });\n        Object.defineProperty(_this, \"flags\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: TypeFlags.Map\n        });\n        Object.defineProperty(_this, \"hookInitializers\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: []\n        });\n        _this._determineIdentifierMode();\n        _this.hookInitializers = hookInitializers;\n        return _this;\n    }\n    Object.defineProperty(MapType.prototype, \"hooks\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (hooks) {\n            var hookInitializers = this.hookInitializers.length > 0 ? this.hookInitializers.concat(hooks) : [hooks];\n            return new MapType(this.name, this._subType, hookInitializers);\n        }\n    });\n    Object.defineProperty(MapType.prototype, \"instantiate\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (parent, subpath, environment, initialValue) {\n            this._determineIdentifierMode();\n            return createObjectNode(this, parent, subpath, environment, initialValue);\n        }\n    });\n    Object.defineProperty(MapType.prototype, \"_determineIdentifierMode\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            if (this.identifierMode !== MapIdentifierMode.UNKNOWN) {\n                return;\n            }\n            var modelTypes = [];\n            if (tryCollectModelTypes(this._subType, modelTypes)) {\n                var identifierAttribute = modelTypes.reduce(function (current, type) {\n                    if (!type.identifierAttribute)\n                        return current;\n                    if (current && current !== type.identifierAttribute) {\n                        throw fail$1(\"The objects in a map should all have the same identifier attribute, expected '\" + current + \"', but child of type '\" + type.name + \"' declared attribute '\" + type.identifierAttribute + \"' as identifier\");\n                    }\n                    return type.identifierAttribute;\n                }, undefined);\n                if (identifierAttribute) {\n                    this.identifierMode = MapIdentifierMode.YES;\n                    this.mapIdentifierAttribute = identifierAttribute;\n                }\n                else {\n                    this.identifierMode = MapIdentifierMode.NO;\n                }\n            }\n        }\n    });\n    Object.defineProperty(MapType.prototype, \"initializeChildNodes\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (objNode, initialSnapshot) {\n            if (initialSnapshot === void 0) { initialSnapshot = {}; }\n            var subType = objNode.type._subType;\n            var result = {};\n            Object.keys(initialSnapshot).forEach(function (name) {\n                result[name] = subType.instantiate(objNode, name, undefined, initialSnapshot[name]);\n            });\n            return result;\n        }\n    });\n    Object.defineProperty(MapType.prototype, \"createNewInstance\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (childNodes) {\n            return new MSTMap(childNodes);\n        }\n    });\n    Object.defineProperty(MapType.prototype, \"finalizeNewInstance\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (node, instance) {\n            _interceptReads(instance, node.unbox);\n            var type = node.type;\n            type.hookInitializers.forEach(function (initializer) {\n                var hooks = initializer(instance);\n                Object.keys(hooks).forEach(function (name) {\n                    var hook = hooks[name];\n                    var actionInvoker = createActionInvoker(instance, name, hook);\n                    (!devMode() ? addHiddenFinalProp : addHiddenWritableProp)(instance, name, actionInvoker);\n                });\n            });\n            intercept(instance, this.willChange);\n            observe(instance, this.didChange);\n        }\n    });\n    Object.defineProperty(MapType.prototype, \"describe\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            return \"Map<string, \" + this._subType.describe() + \">\";\n        }\n    });\n    Object.defineProperty(MapType.prototype, \"getChildren\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (node) {\n            // return (node.storedValue as ObservableMap<any>).values()\n            return values(node.storedValue);\n        }\n    });\n    Object.defineProperty(MapType.prototype, \"getChildNode\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (node, key) {\n            var childNode = node.storedValue.get(\"\" + key);\n            if (!childNode)\n                throw fail$1(\"Not a child \" + key);\n            return childNode;\n        }\n    });\n    Object.defineProperty(MapType.prototype, \"willChange\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (change) {\n            var node = getStateTreeNode(change.object);\n            var key = change.name;\n            node.assertWritable({ subpath: key });\n            var mapType = node.type;\n            var subType = mapType._subType;\n            switch (change.type) {\n                case \"update\":\n                    {\n                        var newValue = change.newValue;\n                        var oldValue = change.object.get(key);\n                        if (newValue === oldValue)\n                            return null;\n                        typecheckInternal(subType, newValue);\n                        change.newValue = subType.reconcile(node.getChildNode(key), change.newValue, node, key);\n                        mapType.processIdentifier(key, change.newValue);\n                    }\n                    break;\n                case \"add\":\n                    {\n                        typecheckInternal(subType, change.newValue);\n                        change.newValue = subType.instantiate(node, key, undefined, change.newValue);\n                        mapType.processIdentifier(key, change.newValue);\n                    }\n                    break;\n            }\n            return change;\n        }\n    });\n    Object.defineProperty(MapType.prototype, \"processIdentifier\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (expected, node) {\n            if (this.identifierMode === MapIdentifierMode.YES && node instanceof ObjectNode) {\n                var identifier = node.identifier;\n                if (identifier !== expected)\n                    throw fail$1(\"A map of objects containing an identifier should always store the object under their own identifier. Trying to store key '\" + identifier + \"', but expected: '\" + expected + \"'\");\n            }\n        }\n    });\n    Object.defineProperty(MapType.prototype, \"getSnapshot\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (node) {\n            var res = {};\n            node.getChildren().forEach(function (childNode) {\n                res[childNode.subpath] = childNode.snapshot;\n            });\n            return res;\n        }\n    });\n    Object.defineProperty(MapType.prototype, \"processInitialSnapshot\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (childNodes) {\n            var processed = {};\n            Object.keys(childNodes).forEach(function (key) {\n                processed[key] = childNodes[key].getSnapshot();\n            });\n            return processed;\n        }\n    });\n    Object.defineProperty(MapType.prototype, \"didChange\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (change) {\n            var node = getStateTreeNode(change.object);\n            switch (change.type) {\n                case \"update\":\n                    return void node.emitPatch({\n                        op: \"replace\",\n                        path: escapeJsonPath(change.name),\n                        value: change.newValue.snapshot,\n                        oldValue: change.oldValue ? change.oldValue.snapshot : undefined\n                    }, node);\n                case \"add\":\n                    return void node.emitPatch({\n                        op: \"add\",\n                        path: escapeJsonPath(change.name),\n                        value: change.newValue.snapshot,\n                        oldValue: undefined\n                    }, node);\n                case \"delete\":\n                    // a node got deleted, get the old snapshot and make the node die\n                    var oldSnapshot = change.oldValue.snapshot;\n                    change.oldValue.die();\n                    // emit the patch\n                    return void node.emitPatch({\n                        op: \"remove\",\n                        path: escapeJsonPath(change.name),\n                        oldValue: oldSnapshot\n                    }, node);\n            }\n        }\n    });\n    Object.defineProperty(MapType.prototype, \"applyPatchLocally\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (node, subpath, patch) {\n            var target = node.storedValue;\n            switch (patch.op) {\n                case \"add\":\n                case \"replace\":\n                    target.set(subpath, patch.value);\n                    break;\n                case \"remove\":\n                    target.delete(subpath);\n                    break;\n            }\n        }\n    });\n    Object.defineProperty(MapType.prototype, \"applySnapshot\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (node, snapshot) {\n            typecheckInternal(this, snapshot);\n            var target = node.storedValue;\n            var currentKeys = {};\n            Array.from(target.keys()).forEach(function (key) {\n                currentKeys[key] = false;\n            });\n            if (snapshot) {\n                // Don't use target.replace, as it will throw away all existing items first\n                for (var key in snapshot) {\n                    target.set(key, snapshot[key]);\n                    currentKeys[\"\" + key] = true;\n                }\n            }\n            Object.keys(currentKeys).forEach(function (key) {\n                if (currentKeys[key] === false)\n                    target.delete(key);\n            });\n        }\n    });\n    Object.defineProperty(MapType.prototype, \"getChildType\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            return this._subType;\n        }\n    });\n    Object.defineProperty(MapType.prototype, \"isValidSnapshot\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (value, context) {\n            var _this = this;\n            if (!isPlainObject(value)) {\n                return typeCheckFailure(context, value, \"Value is not a plain object\");\n            }\n            return flattenTypeErrors(Object.keys(value).map(function (path) {\n                return _this._subType.validate(value[path], getContextForPath(context, path, _this._subType));\n            }));\n        }\n    });\n    Object.defineProperty(MapType.prototype, \"getDefaultSnapshot\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            return EMPTY_OBJECT;\n        }\n    });\n    Object.defineProperty(MapType.prototype, \"removeChild\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (node, subpath) {\n            node.storedValue.delete(subpath);\n        }\n    });\n    return MapType;\n}(ComplexType));\nMapType.prototype.applySnapshot = action(MapType.prototype.applySnapshot);\n/**\n * `types.map` - Creates a key based collection type who's children are all of a uniform declared type.\n * If the type stored in a map has an identifier, it is mandatory to store the child under that identifier in the map.\n *\n * This type will always produce [observable maps](https://mobx.js.org/api.html#observablemap)\n *\n * Example:\n * ```ts\n * const Todo = types.model({\n *   id: types.identifier,\n *   task: types.string\n * })\n *\n * const TodoStore = types.model({\n *   todos: types.map(Todo)\n * })\n *\n * const s = TodoStore.create({ todos: {} })\n * unprotect(s)\n * s.todos.set(17, { task: \"Grab coffee\", id: 17 })\n * s.todos.put({ task: \"Grab cookie\", id: 18 }) // put will infer key from the identifier\n * console.log(s.todos.get(17).task) // prints: \"Grab coffee\"\n * ```\n *\n * @param subtype\n * @returns\n */\nfunction map(subtype) {\n    return new MapType(\"map<string, \" + subtype.name + \">\", subtype);\n}\n/**\n * Returns if a given value represents a map type.\n *\n * @param type\n * @returns `true` if it is a map type.\n */\nfunction isMapType(type) {\n    return isType(type) && (type.flags & TypeFlags.Map) > 0;\n}\n\n/**\n * @internal\n * @hidden\n */\nvar ArrayType = /** @class */ (function (_super) {\n    __extends(ArrayType, _super);\n    function ArrayType(name, _subType, hookInitializers) {\n        if (hookInitializers === void 0) { hookInitializers = []; }\n        var _this = _super.call(this, name) || this;\n        Object.defineProperty(_this, \"_subType\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: _subType\n        });\n        Object.defineProperty(_this, \"flags\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: TypeFlags.Array\n        });\n        Object.defineProperty(_this, \"hookInitializers\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: []\n        });\n        _this.hookInitializers = hookInitializers;\n        return _this;\n    }\n    Object.defineProperty(ArrayType.prototype, \"hooks\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (hooks) {\n            var hookInitializers = this.hookInitializers.length > 0 ? this.hookInitializers.concat(hooks) : [hooks];\n            return new ArrayType(this.name, this._subType, hookInitializers);\n        }\n    });\n    Object.defineProperty(ArrayType.prototype, \"instantiate\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (parent, subpath, environment, initialValue) {\n            return createObjectNode(this, parent, subpath, environment, initialValue);\n        }\n    });\n    Object.defineProperty(ArrayType.prototype, \"initializeChildNodes\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (objNode, snapshot) {\n            if (snapshot === void 0) { snapshot = []; }\n            var subType = objNode.type._subType;\n            var result = {};\n            snapshot.forEach(function (item, index) {\n                var subpath = \"\" + index;\n                result[subpath] = subType.instantiate(objNode, subpath, undefined, item);\n            });\n            return result;\n        }\n    });\n    Object.defineProperty(ArrayType.prototype, \"createNewInstance\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (childNodes) {\n            return observable.array(convertChildNodesToArray(childNodes), mobxShallow);\n        }\n    });\n    Object.defineProperty(ArrayType.prototype, \"finalizeNewInstance\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (node, instance) {\n            _getAdministration(instance).dehancer = node.unbox;\n            var type = node.type;\n            type.hookInitializers.forEach(function (initializer) {\n                var hooks = initializer(instance);\n                Object.keys(hooks).forEach(function (name) {\n                    var hook = hooks[name];\n                    var actionInvoker = createActionInvoker(instance, name, hook);\n                    (!devMode() ? addHiddenFinalProp : addHiddenWritableProp)(instance, name, actionInvoker);\n                });\n            });\n            intercept(instance, this.willChange);\n            observe(instance, this.didChange);\n        }\n    });\n    Object.defineProperty(ArrayType.prototype, \"describe\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            return this._subType.describe() + \"[]\";\n        }\n    });\n    Object.defineProperty(ArrayType.prototype, \"getChildren\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (node) {\n            return node.storedValue.slice();\n        }\n    });\n    Object.defineProperty(ArrayType.prototype, \"getChildNode\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (node, key) {\n            var index = Number(key);\n            if (index < node.storedValue.length)\n                return node.storedValue[index];\n            throw fail$1(\"Not a child: \" + key);\n        }\n    });\n    Object.defineProperty(ArrayType.prototype, \"willChange\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (change) {\n            var node = getStateTreeNode(change.object);\n            node.assertWritable({ subpath: \"\" + change.index });\n            var subType = node.type._subType;\n            var childNodes = node.getChildren();\n            switch (change.type) {\n                case \"update\":\n                    {\n                        if (change.newValue === change.object[change.index])\n                            return null;\n                        var updatedNodes = reconcileArrayChildren(node, subType, [childNodes[change.index]], [change.newValue], [change.index]);\n                        if (!updatedNodes) {\n                            return null;\n                        }\n                        change.newValue = updatedNodes[0];\n                    }\n                    break;\n                case \"splice\":\n                    {\n                        var index_1 = change.index, removedCount = change.removedCount, added = change.added;\n                        var addedNodes = reconcileArrayChildren(node, subType, childNodes.slice(index_1, index_1 + removedCount), added, added.map(function (_, i) { return index_1 + i; }));\n                        if (!addedNodes) {\n                            return null;\n                        }\n                        change.added = addedNodes;\n                        // update paths of remaining items\n                        for (var i = index_1 + removedCount; i < childNodes.length; i++) {\n                            childNodes[i].setParent(node, \"\" + (i + added.length - removedCount));\n                        }\n                    }\n                    break;\n            }\n            return change;\n        }\n    });\n    Object.defineProperty(ArrayType.prototype, \"getSnapshot\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (node) {\n            return node.getChildren().map(function (childNode) { return childNode.snapshot; });\n        }\n    });\n    Object.defineProperty(ArrayType.prototype, \"processInitialSnapshot\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (childNodes) {\n            var processed = [];\n            Object.keys(childNodes).forEach(function (key) {\n                processed.push(childNodes[key].getSnapshot());\n            });\n            return processed;\n        }\n    });\n    Object.defineProperty(ArrayType.prototype, \"didChange\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (change) {\n            var node = getStateTreeNode(change.object);\n            switch (change.type) {\n                case \"update\":\n                    return void node.emitPatch({\n                        op: \"replace\",\n                        path: \"\" + change.index,\n                        value: change.newValue.snapshot,\n                        oldValue: change.oldValue ? change.oldValue.snapshot : undefined\n                    }, node);\n                case \"splice\":\n                    for (var i = change.removedCount - 1; i >= 0; i--)\n                        node.emitPatch({\n                            op: \"remove\",\n                            path: \"\" + (change.index + i),\n                            oldValue: change.removed[i].snapshot\n                        }, node);\n                    for (var i = 0; i < change.addedCount; i++)\n                        node.emitPatch({\n                            op: \"add\",\n                            path: \"\" + (change.index + i),\n                            value: node.getChildNode(\"\" + (change.index + i)).snapshot,\n                            oldValue: undefined\n                        }, node);\n                    return;\n            }\n        }\n    });\n    Object.defineProperty(ArrayType.prototype, \"applyPatchLocally\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (node, subpath, patch) {\n            var target = node.storedValue;\n            var index = subpath === \"-\" ? target.length : Number(subpath);\n            switch (patch.op) {\n                case \"replace\":\n                    target[index] = patch.value;\n                    break;\n                case \"add\":\n                    target.splice(index, 0, patch.value);\n                    break;\n                case \"remove\":\n                    target.splice(index, 1);\n                    break;\n            }\n        }\n    });\n    Object.defineProperty(ArrayType.prototype, \"applySnapshot\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (node, snapshot) {\n            typecheckInternal(this, snapshot);\n            var target = node.storedValue;\n            target.replace(snapshot);\n        }\n    });\n    Object.defineProperty(ArrayType.prototype, \"getChildType\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            return this._subType;\n        }\n    });\n    Object.defineProperty(ArrayType.prototype, \"isValidSnapshot\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (value, context) {\n            var _this = this;\n            if (!isArray(value)) {\n                return typeCheckFailure(context, value, \"Value is not an array\");\n            }\n            return flattenTypeErrors(value.map(function (item, index) {\n                return _this._subType.validate(item, getContextForPath(context, \"\" + index, _this._subType));\n            }));\n        }\n    });\n    Object.defineProperty(ArrayType.prototype, \"getDefaultSnapshot\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            return EMPTY_ARRAY;\n        }\n    });\n    Object.defineProperty(ArrayType.prototype, \"removeChild\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (node, subpath) {\n            node.storedValue.splice(Number(subpath), 1);\n        }\n    });\n    return ArrayType;\n}(ComplexType));\nArrayType.prototype.applySnapshot = action(ArrayType.prototype.applySnapshot);\n/**\n * `types.array` - Creates an index based collection type who's children are all of a uniform declared type.\n *\n * This type will always produce [observable arrays](https://mobx.js.org/api.html#observablearray)\n *\n * Example:\n * ```ts\n * const Todo = types.model({\n *   task: types.string\n * })\n *\n * const TodoStore = types.model({\n *   todos: types.array(Todo)\n * })\n *\n * const s = TodoStore.create({ todos: [] })\n * unprotect(s) // needed to allow modifying outside of an action\n * s.todos.push({ task: \"Grab coffee\" })\n * console.log(s.todos[0]) // prints: \"Grab coffee\"\n * ```\n *\n * @param subtype\n * @returns\n */\nfunction array(subtype) {\n    assertIsType(subtype, 1);\n    return new ArrayType(subtype.name + \"[]\", subtype);\n}\nfunction reconcileArrayChildren(parent, childType, oldNodes, newValues, newPaths) {\n    var nothingChanged = true;\n    for (var i = 0;; i++) {\n        var hasNewNode = i <= newValues.length - 1;\n        var oldNode = oldNodes[i];\n        var newValue = hasNewNode ? newValues[i] : undefined;\n        var newPath = \"\" + newPaths[i];\n        // for some reason, instead of newValue we got a node, fallback to the storedValue\n        // TODO: https://github.com/mobxjs/mobx-state-tree/issues/340#issuecomment-325581681\n        if (isNode(newValue))\n            newValue = newValue.storedValue;\n        if (!oldNode && !hasNewNode) {\n            // both are empty, end\n            break;\n        }\n        else if (!hasNewNode) {\n            // new one does not exists\n            nothingChanged = false;\n            oldNodes.splice(i, 1);\n            if (oldNode instanceof ObjectNode) {\n                // since it is going to be returned by pop/splice/shift better create it before killing it\n                // so it doesn't end up in an undead state\n                oldNode.createObservableInstanceIfNeeded();\n            }\n            oldNode.die();\n            i--;\n        }\n        else if (!oldNode) {\n            // there is no old node, create it\n            // check if already belongs to the same parent. if so, avoid pushing item in. only swapping can occur.\n            if (isStateTreeNode(newValue) && getStateTreeNode(newValue).parent === parent) {\n                // this node is owned by this parent, but not in the reconcilable set, so it must be double\n                throw fail$1(\"Cannot add an object to a state tree if it is already part of the same or another state tree. Tried to assign an object to '\" + parent.path + \"/\" + newPath + \"', but it lives already at '\" + getStateTreeNode(newValue).path + \"'\");\n            }\n            nothingChanged = false;\n            var newNode = valueAsNode(childType, parent, newPath, newValue);\n            oldNodes.splice(i, 0, newNode);\n        }\n        else if (areSame(oldNode, newValue)) {\n            // both are the same, reconcile\n            oldNodes[i] = valueAsNode(childType, parent, newPath, newValue, oldNode);\n        }\n        else {\n            // nothing to do, try to reorder\n            var oldMatch = undefined;\n            // find a possible candidate to reuse\n            for (var j = i; j < oldNodes.length; j++) {\n                if (areSame(oldNodes[j], newValue)) {\n                    oldMatch = oldNodes.splice(j, 1)[0];\n                    break;\n                }\n            }\n            nothingChanged = false;\n            var newNode = valueAsNode(childType, parent, newPath, newValue, oldMatch);\n            oldNodes.splice(i, 0, newNode);\n        }\n    }\n    return nothingChanged ? null : oldNodes;\n}\n/**\n * Convert a value to a node at given parent and subpath. Attempts to reuse old node if possible and given.\n */\nfunction valueAsNode(childType, parent, subpath, newValue, oldNode) {\n    // ensure the value is valid-ish\n    typecheckInternal(childType, newValue);\n    function getNewNode() {\n        // the new value has a MST node\n        if (isStateTreeNode(newValue)) {\n            var childNode = getStateTreeNode(newValue);\n            childNode.assertAlive(EMPTY_OBJECT);\n            // the node lives here\n            if (childNode.parent !== null && childNode.parent === parent) {\n                childNode.setParent(parent, subpath);\n                return childNode;\n            }\n        }\n        // there is old node and new one is a value/snapshot\n        if (oldNode) {\n            return childType.reconcile(oldNode, newValue, parent, subpath);\n        }\n        // nothing to do, create from scratch\n        return childType.instantiate(parent, subpath, undefined, newValue);\n    }\n    var newNode = getNewNode();\n    if (oldNode && oldNode !== newNode) {\n        if (oldNode instanceof ObjectNode) {\n            // since it is going to be returned by pop/splice/shift better create it before killing it\n            // so it doesn't end up in an undead state\n            oldNode.createObservableInstanceIfNeeded();\n        }\n        oldNode.die();\n    }\n    return newNode;\n}\n/**\n * Check if a node holds a value.\n */\nfunction areSame(oldNode, newValue) {\n    // never consider dead old nodes for reconciliation\n    if (!oldNode.isAlive) {\n        return false;\n    }\n    // the new value has the same node\n    if (isStateTreeNode(newValue)) {\n        var newNode = getStateTreeNode(newValue);\n        return newNode.isAlive && newNode === oldNode;\n    }\n    // the provided value is the snapshot of the old node\n    if (oldNode.snapshot === newValue) {\n        return true;\n    }\n    // Non object nodes don't get reconciled\n    if (!(oldNode instanceof ObjectNode)) {\n        return false;\n    }\n    var oldNodeType = oldNode.getReconciliationType();\n    // new value is a snapshot with the correct identifier\n    return (oldNode.identifier !== null &&\n        oldNode.identifierAttribute &&\n        isPlainObject(newValue) &&\n        oldNodeType.is(newValue) &&\n        oldNodeType.isMatchingSnapshotId(oldNode, newValue));\n}\n/**\n * Returns if a given value represents an array type.\n *\n * @param type\n * @returns `true` if the type is an array type.\n */\nfunction isArrayType(type) {\n    return isType(type) && (type.flags & TypeFlags.Array) > 0;\n}\n\nvar PRE_PROCESS_SNAPSHOT = \"preProcessSnapshot\";\nvar POST_PROCESS_SNAPSHOT = \"postProcessSnapshot\";\nfunction objectTypeToString() {\n    return getStateTreeNode(this).toString();\n}\nvar defaultObjectOptions = {\n    name: \"AnonymousModel\",\n    properties: {},\n    initializers: EMPTY_ARRAY\n};\nfunction toPropertiesObject(declaredProps) {\n    // loop through properties and ensures that all items are types\n    return Object.keys(declaredProps).reduce(function (props, key) {\n        var _a, _b, _c;\n        // warn if user intended a HOOK\n        if (key in Hook)\n            throw fail$1(\"Hook '\" + key + \"' was defined as property. Hooks should be defined as part of the actions\");\n        // the user intended to use a view\n        var descriptor = Object.getOwnPropertyDescriptor(props, key);\n        if (\"get\" in descriptor) {\n            throw fail$1(\"Getters are not supported as properties. Please use views instead\");\n        }\n        // undefined and null are not valid\n        var value = descriptor.value;\n        if (value === null || value === undefined) {\n            throw fail$1(\"The default value of an attribute cannot be null or undefined as the type cannot be inferred. Did you mean `types.maybe(someType)`?\");\n            // its a primitive, convert to its type\n        }\n        else if (isPrimitive(value)) {\n            return Object.assign({}, props, (_a = {},\n                _a[key] = optional(getPrimitiveFactoryFromValue(value), value),\n                _a));\n            // map defaults to empty object automatically for models\n        }\n        else if (value instanceof MapType) {\n            return Object.assign({}, props, (_b = {},\n                _b[key] = optional(value, {}),\n                _b));\n        }\n        else if (value instanceof ArrayType) {\n            return Object.assign({}, props, (_c = {}, _c[key] = optional(value, []), _c));\n            // its already a type\n        }\n        else if (isType(value)) {\n            return props;\n            // its a function, maybe the user wanted a view?\n        }\n        else if (devMode() && typeof value === \"function\") {\n            throw fail$1(\"Invalid type definition for property '\" + key + \"', it looks like you passed a function. Did you forget to invoke it, or did you intend to declare a view / action?\");\n            // no other complex values\n        }\n        else if (devMode() && typeof value === \"object\") {\n            throw fail$1(\"Invalid type definition for property '\" + key + \"', it looks like you passed an object. Try passing another model type or a types.frozen.\");\n            // WTF did you pass in mate?\n        }\n        else {\n            throw fail$1(\"Invalid type definition for property '\" + key + \"', cannot infer a type from a value like '\" + value + \"' (\" + typeof value + \")\");\n        }\n    }, declaredProps);\n}\n/**\n * @internal\n * @hidden\n */\nvar ModelType = /** @class */ (function (_super) {\n    __extends(ModelType, _super);\n    function ModelType(opts) {\n        var _this = _super.call(this, opts.name || defaultObjectOptions.name) || this;\n        Object.defineProperty(_this, \"flags\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: TypeFlags.Object\n        });\n        /*\n         * The original object definition\n         */\n        Object.defineProperty(_this, \"initializers\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(_this, \"properties\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(_this, \"preProcessor\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(_this, \"postProcessor\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(_this, \"propertyNames\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(_this, \"named\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: function (name) {\n                return _this.cloneAndEnhance({ name: name });\n            }\n        });\n        Object.defineProperty(_this, \"props\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: function (properties) {\n                return _this.cloneAndEnhance({ properties: properties });\n            }\n        });\n        Object.defineProperty(_this, \"preProcessSnapshot\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: function (preProcessor) {\n                var currentPreprocessor = _this.preProcessor;\n                if (!currentPreprocessor)\n                    return _this.cloneAndEnhance({ preProcessor: preProcessor });\n                else\n                    return _this.cloneAndEnhance({\n                        preProcessor: function (snapshot) { return currentPreprocessor(preProcessor(snapshot)); }\n                    });\n            }\n        });\n        Object.defineProperty(_this, \"postProcessSnapshot\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: function (postProcessor) {\n                var currentPostprocessor = _this.postProcessor;\n                if (!currentPostprocessor)\n                    return _this.cloneAndEnhance({ postProcessor: postProcessor });\n                else\n                    return _this.cloneAndEnhance({\n                        postProcessor: function (snapshot) { return postProcessor(currentPostprocessor(snapshot)); }\n                    });\n            }\n        });\n        Object.assign(_this, defaultObjectOptions, opts);\n        // ensures that any default value gets converted to its related type\n        _this.properties = toPropertiesObject(_this.properties);\n        freeze(_this.properties); // make sure nobody messes with it\n        _this.propertyNames = Object.keys(_this.properties);\n        _this.identifierAttribute = _this._getIdentifierAttribute();\n        return _this;\n    }\n    Object.defineProperty(ModelType.prototype, \"_getIdentifierAttribute\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            var identifierAttribute = undefined;\n            this.forAllProps(function (propName, propType) {\n                if (propType.flags & TypeFlags.Identifier) {\n                    if (identifierAttribute)\n                        throw fail$1(\"Cannot define property '\" + propName + \"' as object identifier, property '\" + identifierAttribute + \"' is already defined as identifier property\");\n                    identifierAttribute = propName;\n                }\n            });\n            return identifierAttribute;\n        }\n    });\n    Object.defineProperty(ModelType.prototype, \"cloneAndEnhance\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (opts) {\n            return new ModelType({\n                name: opts.name || this.name,\n                properties: Object.assign({}, this.properties, opts.properties),\n                initializers: this.initializers.concat(opts.initializers || []),\n                preProcessor: opts.preProcessor || this.preProcessor,\n                postProcessor: opts.postProcessor || this.postProcessor\n            });\n        }\n    });\n    Object.defineProperty(ModelType.prototype, \"actions\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (fn) {\n            var _this = this;\n            var actionInitializer = function (self) {\n                _this.instantiateActions(self, fn(self));\n                return self;\n            };\n            return this.cloneAndEnhance({ initializers: [actionInitializer] });\n        }\n    });\n    Object.defineProperty(ModelType.prototype, \"instantiateActions\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (self, actions) {\n            // check if return is correct\n            if (!isPlainObject(actions))\n                throw fail$1(\"actions initializer should return a plain object containing actions\");\n            // bind actions to the object created\n            Object.keys(actions).forEach(function (name) {\n                // warn if preprocessor was given\n                if (name === PRE_PROCESS_SNAPSHOT)\n                    throw fail$1(\"Cannot define action '\" + PRE_PROCESS_SNAPSHOT + \"', it should be defined using 'type.preProcessSnapshot(fn)' instead\");\n                // warn if postprocessor was given\n                if (name === POST_PROCESS_SNAPSHOT)\n                    throw fail$1(\"Cannot define action '\" + POST_PROCESS_SNAPSHOT + \"', it should be defined using 'type.postProcessSnapshot(fn)' instead\");\n                var action2 = actions[name];\n                // apply hook composition\n                var baseAction = self[name];\n                if (name in Hook && baseAction) {\n                    var specializedAction_1 = action2;\n                    action2 = function () {\n                        baseAction.apply(null, arguments);\n                        specializedAction_1.apply(null, arguments);\n                    };\n                }\n                // the goal of this is to make sure actions using \"this\" can call themselves,\n                // while still allowing the middlewares to register them\n                var middlewares = action2.$mst_middleware; // make sure middlewares are not lost\n                var boundAction = action2.bind(actions);\n                boundAction.$mst_middleware = middlewares;\n                var actionInvoker = createActionInvoker(self, name, boundAction);\n                actions[name] = actionInvoker;\n                (!devMode() ? addHiddenFinalProp : addHiddenWritableProp)(self, name, actionInvoker);\n            });\n        }\n    });\n    Object.defineProperty(ModelType.prototype, \"volatile\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (fn) {\n            var _this = this;\n            if (typeof fn !== \"function\") {\n                throw fail$1(\"You passed an \" + typeof fn + \" to volatile state as an argument, when function is expected\");\n            }\n            var stateInitializer = function (self) {\n                _this.instantiateVolatileState(self, fn(self));\n                return self;\n            };\n            return this.cloneAndEnhance({ initializers: [stateInitializer] });\n        }\n    });\n    Object.defineProperty(ModelType.prototype, \"instantiateVolatileState\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (self, state) {\n            // check views return\n            if (!isPlainObject(state))\n                throw fail$1(\"volatile state initializer should return a plain object containing state\");\n            set(self, state);\n        }\n    });\n    Object.defineProperty(ModelType.prototype, \"extend\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (fn) {\n            var _this = this;\n            var initializer = function (self) {\n                var _a = fn(self), actions = _a.actions, views = _a.views, state = _a.state, rest = __rest(_a, [\"actions\", \"views\", \"state\"]);\n                for (var key in rest)\n                    throw fail$1(\"The `extend` function should return an object with a subset of the fields 'actions', 'views' and 'state'. Found invalid key '\" + key + \"'\");\n                if (state)\n                    _this.instantiateVolatileState(self, state);\n                if (views)\n                    _this.instantiateViews(self, views);\n                if (actions)\n                    _this.instantiateActions(self, actions);\n                return self;\n            };\n            return this.cloneAndEnhance({ initializers: [initializer] });\n        }\n    });\n    Object.defineProperty(ModelType.prototype, \"views\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (fn) {\n            var _this = this;\n            var viewInitializer = function (self) {\n                _this.instantiateViews(self, fn(self));\n                return self;\n            };\n            return this.cloneAndEnhance({ initializers: [viewInitializer] });\n        }\n    });\n    Object.defineProperty(ModelType.prototype, \"instantiateViews\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (self, views) {\n            // check views return\n            if (!isPlainObject(views))\n                throw fail$1(\"views initializer should return a plain object containing views\");\n            Object.getOwnPropertyNames(views).forEach(function (key) {\n                var _a;\n                // is this a computed property?\n                var descriptor = Object.getOwnPropertyDescriptor(views, key);\n                if (\"get\" in descriptor) {\n                    defineProperty$1(self, key, descriptor);\n                    makeObservable(self, (_a = {}, _a[key] = computed, _a));\n                }\n                else if (typeof descriptor.value === \"function\") {\n                    (!devMode() ? addHiddenFinalProp : addHiddenWritableProp)(self, key, descriptor.value);\n                }\n                else {\n                    throw fail$1(\"A view member should either be a function or getter based property\");\n                }\n            });\n        }\n    });\n    Object.defineProperty(ModelType.prototype, \"instantiate\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (parent, subpath, environment, initialValue) {\n            var value = isStateTreeNode(initialValue)\n                ? initialValue\n                : this.applySnapshotPreProcessor(initialValue);\n            return createObjectNode(this, parent, subpath, environment, value);\n            // Optimization: record all prop- view- and action names after first construction, and generate an optimal base class\n            // that pre-reserves all these fields for fast object-member lookups\n        }\n    });\n    Object.defineProperty(ModelType.prototype, \"initializeChildNodes\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (objNode, initialSnapshot) {\n            if (initialSnapshot === void 0) { initialSnapshot = {}; }\n            var type = objNode.type;\n            var result = {};\n            type.forAllProps(function (name, childType) {\n                result[name] = childType.instantiate(objNode, name, undefined, initialSnapshot[name]);\n            });\n            return result;\n        }\n    });\n    Object.defineProperty(ModelType.prototype, \"createNewInstance\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (childNodes) {\n            return observable.object(childNodes, EMPTY_OBJECT, mobxShallow);\n        }\n    });\n    Object.defineProperty(ModelType.prototype, \"finalizeNewInstance\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (node, instance) {\n            addHiddenFinalProp(instance, \"toString\", objectTypeToString);\n            this.forAllProps(function (name) {\n                _interceptReads(instance, name, node.unbox);\n            });\n            this.initializers.reduce(function (self, fn) { return fn(self); }, instance);\n            intercept(instance, this.willChange);\n            observe(instance, this.didChange);\n        }\n    });\n    Object.defineProperty(ModelType.prototype, \"willChange\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (chg) {\n            // TODO: mobx typings don't seem to take into account that newValue can be set even when removing a prop\n            var change = chg;\n            var node = getStateTreeNode(change.object);\n            var subpath = change.name;\n            node.assertWritable({ subpath: subpath });\n            var childType = node.type.properties[subpath];\n            // only properties are typed, state are stored as-is references\n            if (childType) {\n                typecheckInternal(childType, change.newValue);\n                change.newValue = childType.reconcile(node.getChildNode(subpath), change.newValue, node, subpath);\n            }\n            return change;\n        }\n    });\n    Object.defineProperty(ModelType.prototype, \"didChange\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (chg) {\n            // TODO: mobx typings don't seem to take into account that newValue can be set even when removing a prop\n            var change = chg;\n            var childNode = getStateTreeNode(change.object);\n            var childType = childNode.type.properties[change.name];\n            if (!childType) {\n                // don't emit patches for volatile state\n                return;\n            }\n            var oldChildValue = change.oldValue ? change.oldValue.snapshot : undefined;\n            childNode.emitPatch({\n                op: \"replace\",\n                path: escapeJsonPath(change.name),\n                value: change.newValue.snapshot,\n                oldValue: oldChildValue\n            }, childNode);\n        }\n    });\n    Object.defineProperty(ModelType.prototype, \"getChildren\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (node) {\n            var _this = this;\n            var res = [];\n            this.forAllProps(function (name) {\n                res.push(_this.getChildNode(node, name));\n            });\n            return res;\n        }\n    });\n    Object.defineProperty(ModelType.prototype, \"getChildNode\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (node, key) {\n            if (!(key in this.properties))\n                throw fail$1(\"Not a value property: \" + key);\n            var adm = _getAdministration(node.storedValue, key);\n            var childNode = adm.raw();\n            if (!childNode)\n                throw fail$1(\"Node not available for property \" + key);\n            return childNode;\n        }\n    });\n    Object.defineProperty(ModelType.prototype, \"getSnapshot\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (node, applyPostProcess) {\n            var _this = this;\n            if (applyPostProcess === void 0) { applyPostProcess = true; }\n            var res = {};\n            this.forAllProps(function (name, type) {\n                getAtom(node.storedValue, name).reportObserved();\n                res[name] = _this.getChildNode(node, name).snapshot;\n            });\n            if (applyPostProcess) {\n                return this.applySnapshotPostProcessor(res);\n            }\n            return res;\n        }\n    });\n    Object.defineProperty(ModelType.prototype, \"processInitialSnapshot\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (childNodes) {\n            var processed = {};\n            Object.keys(childNodes).forEach(function (key) {\n                processed[key] = childNodes[key].getSnapshot();\n            });\n            return this.applySnapshotPostProcessor(processed);\n        }\n    });\n    Object.defineProperty(ModelType.prototype, \"applyPatchLocally\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (node, subpath, patch) {\n            if (!(patch.op === \"replace\" || patch.op === \"add\")) {\n                throw fail$1(\"object does not support operation \" + patch.op);\n            }\n            node.storedValue[subpath] = patch.value;\n        }\n    });\n    Object.defineProperty(ModelType.prototype, \"applySnapshot\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (node, snapshot) {\n            var preProcessedSnapshot = this.applySnapshotPreProcessor(snapshot);\n            typecheckInternal(this, preProcessedSnapshot);\n            this.forAllProps(function (name) {\n                node.storedValue[name] = preProcessedSnapshot[name];\n            });\n        }\n    });\n    Object.defineProperty(ModelType.prototype, \"applySnapshotPreProcessor\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (snapshot) {\n            var processor = this.preProcessor;\n            return processor ? processor.call(null, snapshot) : snapshot;\n        }\n    });\n    Object.defineProperty(ModelType.prototype, \"applySnapshotPostProcessor\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (snapshot) {\n            var postProcessor = this.postProcessor;\n            if (postProcessor)\n                return postProcessor.call(null, snapshot);\n            return snapshot;\n        }\n    });\n    Object.defineProperty(ModelType.prototype, \"getChildType\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (propertyName) {\n            assertIsString(propertyName, 1);\n            return this.properties[propertyName];\n        }\n    });\n    Object.defineProperty(ModelType.prototype, \"isValidSnapshot\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (value, context) {\n            var _this = this;\n            var snapshot = this.applySnapshotPreProcessor(value);\n            if (!isPlainObject(snapshot)) {\n                return typeCheckFailure(context, snapshot, \"Value is not a plain object\");\n            }\n            return flattenTypeErrors(this.propertyNames.map(function (key) {\n                return _this.properties[key].validate(snapshot[key], getContextForPath(context, key, _this.properties[key]));\n            }));\n        }\n    });\n    Object.defineProperty(ModelType.prototype, \"forAllProps\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (fn) {\n            var _this = this;\n            this.propertyNames.forEach(function (key) { return fn(key, _this.properties[key]); });\n        }\n    });\n    Object.defineProperty(ModelType.prototype, \"describe\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            var _this = this;\n            // optimization: cache\n            return (\"{ \" +\n                this.propertyNames\n                    .map(function (key) { return key + \": \" + _this.properties[key].describe(); })\n                    .join(\"; \") +\n                \" }\");\n        }\n    });\n    Object.defineProperty(ModelType.prototype, \"getDefaultSnapshot\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            return EMPTY_OBJECT;\n        }\n    });\n    Object.defineProperty(ModelType.prototype, \"removeChild\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (node, subpath) {\n            node.storedValue[subpath] = undefined;\n        }\n    });\n    return ModelType;\n}(ComplexType));\nModelType.prototype.applySnapshot = action(ModelType.prototype.applySnapshot);\n/**\n * `types.model` - Creates a new model type by providing a name, properties, volatile state and actions.\n *\n * See the [model type](/concepts/trees#creating-models) description or the [getting started](intro/getting-started.md#getting-started-1) tutorial.\n */\nfunction model() {\n    var args = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        args[_i] = arguments[_i];\n    }\n    var name = typeof args[0] === \"string\" ? args.shift() : \"AnonymousModel\";\n    var properties = args.shift() || {};\n    return new ModelType({ name: name, properties: properties });\n}\n/**\n * `types.compose` - Composes a new model from one or more existing model types.\n * This method can be invoked in two forms:\n * Given 2 or more model types, the types are composed into a new Type.\n * Given first parameter as a string and 2 or more model types,\n * the types are composed into a new Type with the given name\n */\nfunction compose() {\n    var args = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        args[_i] = arguments[_i];\n    }\n    // TODO: just join the base type names if no name is provided\n    var hasTypename = typeof args[0] === \"string\";\n    var typeName = hasTypename ? args[0] : \"AnonymousModel\";\n    if (hasTypename) {\n        args.shift();\n    }\n    // check all parameters\n    if (devMode()) {\n        args.forEach(function (type, i) {\n            assertArg(type, isModelType, \"mobx-state-tree model type\", hasTypename ? i + 2 : i + 1);\n        });\n    }\n    return args\n        .reduce(function (prev, cur) {\n        return prev.cloneAndEnhance({\n            name: prev.name + \"_\" + cur.name,\n            properties: cur.properties,\n            initializers: cur.initializers,\n            preProcessor: function (snapshot) {\n                return cur.applySnapshotPreProcessor(prev.applySnapshotPreProcessor(snapshot));\n            },\n            postProcessor: function (snapshot) {\n                return cur.applySnapshotPostProcessor(prev.applySnapshotPostProcessor(snapshot));\n            }\n        });\n    })\n        .named(typeName);\n}\n/**\n * Returns if a given value represents a model type.\n *\n * @param type\n * @returns\n */\nfunction isModelType(type) {\n    return isType(type) && (type.flags & TypeFlags.Object) > 0;\n}\n\n// TODO: implement CoreType using types.custom ?\n/**\n * @internal\n * @hidden\n */\nvar CoreType = /** @class */ (function (_super) {\n    __extends(CoreType, _super);\n    function CoreType(name, flags, checker, initializer) {\n        if (initializer === void 0) { initializer = identity; }\n        var _this = _super.call(this, name) || this;\n        Object.defineProperty(_this, \"flags\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: flags\n        });\n        Object.defineProperty(_this, \"checker\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: checker\n        });\n        Object.defineProperty(_this, \"initializer\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: initializer\n        });\n        _this.flags = flags;\n        return _this;\n    }\n    Object.defineProperty(CoreType.prototype, \"describe\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            return this.name;\n        }\n    });\n    Object.defineProperty(CoreType.prototype, \"instantiate\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (parent, subpath, environment, initialValue) {\n            return createScalarNode(this, parent, subpath, environment, initialValue);\n        }\n    });\n    Object.defineProperty(CoreType.prototype, \"createNewInstance\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (snapshot) {\n            return this.initializer(snapshot);\n        }\n    });\n    Object.defineProperty(CoreType.prototype, \"isValidSnapshot\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (value, context) {\n            if (isPrimitive(value) && this.checker(value)) {\n                return typeCheckSuccess();\n            }\n            var typeName = this.name === \"Date\" ? \"Date or a unix milliseconds timestamp\" : this.name;\n            return typeCheckFailure(context, value, \"Value is not a \" + typeName);\n        }\n    });\n    return CoreType;\n}(SimpleType));\n/**\n * `types.string` - Creates a type that can only contain a string value.\n * This type is used for string values by default\n *\n * Example:\n * ```ts\n * const Person = types.model({\n *   firstName: types.string,\n *   lastName: \"Doe\"\n * })\n * ```\n */\n// tslint:disable-next-line:variable-name\nvar string = new CoreType(\"string\", TypeFlags.String, function (v) { return typeof v === \"string\"; });\n/**\n * `types.number` - Creates a type that can only contain a numeric value.\n * This type is used for numeric values by default\n *\n * Example:\n * ```ts\n * const Vector = types.model({\n *   x: types.number,\n *   y: 1.5\n * })\n * ```\n */\n// tslint:disable-next-line:variable-name\nvar number = new CoreType(\"number\", TypeFlags.Number, function (v) { return typeof v === \"number\"; });\n/**\n * `types.integer` - Creates a type that can only contain an integer value.\n * This type is used for integer values by default\n *\n * Example:\n * ```ts\n * const Size = types.model({\n *   width: types.integer,\n *   height: 10\n * })\n * ```\n */\n// tslint:disable-next-line:variable-name\nvar integer = new CoreType(\"integer\", TypeFlags.Integer, function (v) { return isInteger(v); });\n/**\n * `types.boolean` - Creates a type that can only contain a boolean value.\n * This type is used for boolean values by default\n *\n * Example:\n * ```ts\n * const Thing = types.model({\n *   isCool: types.boolean,\n *   isAwesome: false\n * })\n * ```\n */\n// tslint:disable-next-line:variable-name\nvar boolean = new CoreType(\"boolean\", TypeFlags.Boolean, function (v) { return typeof v === \"boolean\"; });\n/**\n * `types.null` - The type of the value `null`\n */\nvar nullType = new CoreType(\"null\", TypeFlags.Null, function (v) { return v === null; });\n/**\n * `types.undefined` - The type of the value `undefined`\n */\nvar undefinedType = new CoreType(\"undefined\", TypeFlags.Undefined, function (v) { return v === undefined; });\nvar _DatePrimitive = new CoreType(\"Date\", TypeFlags.Date, function (v) { return typeof v === \"number\" || v instanceof Date; }, function (v) { return (v instanceof Date ? v : new Date(v)); });\n_DatePrimitive.getSnapshot = function (node) {\n    return node.storedValue.getTime();\n};\n/**\n * `types.Date` - Creates a type that can only contain a javascript Date value.\n *\n * Example:\n * ```ts\n * const LogLine = types.model({\n *   timestamp: types.Date,\n * })\n *\n * LogLine.create({ timestamp: new Date() })\n * ```\n */\nvar DatePrimitive = _DatePrimitive;\n/**\n * @internal\n * @hidden\n */\nfunction getPrimitiveFactoryFromValue(value) {\n    switch (typeof value) {\n        case \"string\":\n            return string;\n        case \"number\":\n            return number; // In the future, isInteger(value) ? integer : number would be interesting, but would be too breaking for now\n        case \"boolean\":\n            return boolean;\n        case \"object\":\n            if (value instanceof Date)\n                return DatePrimitive;\n    }\n    throw fail$1(\"Cannot determine primitive type from value \" + value);\n}\n/**\n * Returns if a given value represents a primitive type.\n *\n * @param type\n * @returns\n */\nfunction isPrimitiveType(type) {\n    return (isType(type) &&\n        (type.flags &\n            (TypeFlags.String |\n                TypeFlags.Number |\n                TypeFlags.Integer |\n                TypeFlags.Boolean |\n                TypeFlags.Date)) >\n            0);\n}\n\n/**\n * @internal\n * @hidden\n */\nvar Literal = /** @class */ (function (_super) {\n    __extends(Literal, _super);\n    function Literal(value) {\n        var _this = _super.call(this, JSON.stringify(value)) || this;\n        Object.defineProperty(_this, \"value\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(_this, \"flags\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: TypeFlags.Literal\n        });\n        _this.value = value;\n        return _this;\n    }\n    Object.defineProperty(Literal.prototype, \"instantiate\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (parent, subpath, environment, initialValue) {\n            return createScalarNode(this, parent, subpath, environment, initialValue);\n        }\n    });\n    Object.defineProperty(Literal.prototype, \"describe\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            return JSON.stringify(this.value);\n        }\n    });\n    Object.defineProperty(Literal.prototype, \"isValidSnapshot\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (value, context) {\n            if (isPrimitive(value) && value === this.value) {\n                return typeCheckSuccess();\n            }\n            return typeCheckFailure(context, value, \"Value is not a literal \" + JSON.stringify(this.value));\n        }\n    });\n    return Literal;\n}(SimpleType));\n/**\n * `types.literal` - The literal type will return a type that will match only the exact given type.\n * The given value must be a primitive, in order to be serialized to a snapshot correctly.\n * You can use literal to match exact strings for example the exact male or female string.\n *\n * Example:\n * ```ts\n * const Person = types.model({\n *     name: types.string,\n *     gender: types.union(types.literal('male'), types.literal('female'))\n * })\n * ```\n *\n * @param value The value to use in the strict equal check\n * @returns\n */\nfunction literal(value) {\n    // check that the given value is a primitive\n    assertArg(value, isPrimitive, \"primitive\", 1);\n    return new Literal(value);\n}\n/**\n * Returns if a given value represents a literal type.\n *\n * @param type\n * @returns\n */\nfunction isLiteralType(type) {\n    return isType(type) && (type.flags & TypeFlags.Literal) > 0;\n}\n\nvar Refinement = /** @class */ (function (_super) {\n    __extends(Refinement, _super);\n    function Refinement(name, _subtype, _predicate, _message) {\n        var _this = _super.call(this, name) || this;\n        Object.defineProperty(_this, \"_subtype\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: _subtype\n        });\n        Object.defineProperty(_this, \"_predicate\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: _predicate\n        });\n        Object.defineProperty(_this, \"_message\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: _message\n        });\n        return _this;\n    }\n    Object.defineProperty(Refinement.prototype, \"flags\", {\n        get: function () {\n            return this._subtype.flags | TypeFlags.Refinement;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Refinement.prototype, \"describe\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            return this.name;\n        }\n    });\n    Object.defineProperty(Refinement.prototype, \"instantiate\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (parent, subpath, environment, initialValue) {\n            // create the child type\n            return this._subtype.instantiate(parent, subpath, environment, initialValue);\n        }\n    });\n    Object.defineProperty(Refinement.prototype, \"isAssignableFrom\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (type) {\n            return this._subtype.isAssignableFrom(type);\n        }\n    });\n    Object.defineProperty(Refinement.prototype, \"isValidSnapshot\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (value, context) {\n            var subtypeErrors = this._subtype.validate(value, context);\n            if (subtypeErrors.length > 0)\n                return subtypeErrors;\n            var snapshot = isStateTreeNode(value) ? getStateTreeNode(value).snapshot : value;\n            if (!this._predicate(snapshot)) {\n                return typeCheckFailure(context, value, this._message(value));\n            }\n            return typeCheckSuccess();\n        }\n    });\n    Object.defineProperty(Refinement.prototype, \"reconcile\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (current, newValue, parent, subpath) {\n            return this._subtype.reconcile(current, newValue, parent, subpath);\n        }\n    });\n    Object.defineProperty(Refinement.prototype, \"getSubTypes\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            return this._subtype;\n        }\n    });\n    return Refinement;\n}(BaseType));\n/**\n * `types.refinement` - Creates a type that is more specific than the base type, e.g. `types.refinement(types.string, value => value.length > 5)` to create a type of strings that can only be longer then 5.\n *\n * @param name\n * @param type\n * @param predicate\n * @returns\n */\nfunction refinement() {\n    var args = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        args[_i] = arguments[_i];\n    }\n    var name = typeof args[0] === \"string\" ? args.shift() : isType(args[0]) ? args[0].name : null;\n    var type = args[0];\n    var predicate = args[1];\n    var message = args[2]\n        ? args[2]\n        : function (v) { return \"Value does not respect the refinement predicate\"; };\n    // ensures all parameters are correct\n    assertIsType(type, [1, 2]);\n    assertIsString(name, 1);\n    assertIsFunction(predicate, [2, 3]);\n    assertIsFunction(message, [3, 4]);\n    return new Refinement(name, type, predicate, message);\n}\n/**\n * Returns if a given value is a refinement type.\n *\n * @param type\n * @returns\n */\nfunction isRefinementType(type) {\n    return (type.flags & TypeFlags.Refinement) > 0;\n}\n\n/**\n * `types.enumeration` - Can be used to create an string based enumeration.\n * (note: this methods is just sugar for a union of string literals)\n *\n * Example:\n * ```ts\n * const TrafficLight = types.model({\n *   color: types.enumeration(\"Color\", [\"Red\", \"Orange\", \"Green\"])\n * })\n * ```\n *\n * @param name descriptive name of the enumeration (optional)\n * @param options possible values this enumeration can have\n * @returns\n */\nfunction enumeration(name, options) {\n    var realOptions = typeof name === \"string\" ? options : name;\n    // check all options\n    if (devMode()) {\n        realOptions.forEach(function (option, i) {\n            assertIsString(option, i + 1);\n        });\n    }\n    var type = union.apply(void 0, __spread(realOptions.map(function (option) { return literal(\"\" + option); })));\n    if (typeof name === \"string\")\n        type.name = name;\n    return type;\n}\n\n/**\n * @internal\n * @hidden\n */\nvar Union = /** @class */ (function (_super) {\n    __extends(Union, _super);\n    function Union(name, _types, options) {\n        var _this = _super.call(this, name) || this;\n        Object.defineProperty(_this, \"_types\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: _types\n        });\n        Object.defineProperty(_this, \"_dispatcher\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(_this, \"_eager\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: true\n        });\n        options = __assign({ eager: true, dispatcher: undefined }, options);\n        _this._dispatcher = options.dispatcher;\n        if (!options.eager)\n            _this._eager = false;\n        return _this;\n    }\n    Object.defineProperty(Union.prototype, \"flags\", {\n        get: function () {\n            var result = TypeFlags.Union;\n            this._types.forEach(function (type) {\n                result |= type.flags;\n            });\n            return result;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Union.prototype, \"isAssignableFrom\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (type) {\n            return this._types.some(function (subType) { return subType.isAssignableFrom(type); });\n        }\n    });\n    Object.defineProperty(Union.prototype, \"describe\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            return \"(\" + this._types.map(function (factory) { return factory.describe(); }).join(\" | \") + \")\";\n        }\n    });\n    Object.defineProperty(Union.prototype, \"instantiate\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (parent, subpath, environment, initialValue) {\n            var type = this.determineType(initialValue, undefined);\n            if (!type)\n                throw fail$1(\"No matching type for union \" + this.describe()); // can happen in prod builds\n            return type.instantiate(parent, subpath, environment, initialValue);\n        }\n    });\n    Object.defineProperty(Union.prototype, \"reconcile\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (current, newValue, parent, subpath) {\n            var type = this.determineType(newValue, current.getReconciliationType());\n            if (!type)\n                throw fail$1(\"No matching type for union \" + this.describe()); // can happen in prod builds\n            return type.reconcile(current, newValue, parent, subpath);\n        }\n    });\n    Object.defineProperty(Union.prototype, \"determineType\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (value, reconcileCurrentType) {\n            // try the dispatcher, if defined\n            if (this._dispatcher) {\n                return this._dispatcher(value);\n            }\n            // find the most accomodating type\n            // if we are using reconciliation try the current node type first (fix for #1045)\n            if (reconcileCurrentType) {\n                if (reconcileCurrentType.is(value)) {\n                    return reconcileCurrentType;\n                }\n                return this._types\n                    .filter(function (t) { return t !== reconcileCurrentType; })\n                    .find(function (type) { return type.is(value); });\n            }\n            else {\n                return this._types.find(function (type) { return type.is(value); });\n            }\n        }\n    });\n    Object.defineProperty(Union.prototype, \"isValidSnapshot\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (value, context) {\n            if (this._dispatcher) {\n                return this._dispatcher(value).validate(value, context);\n            }\n            var allErrors = [];\n            var applicableTypes = 0;\n            for (var i = 0; i < this._types.length; i++) {\n                var type = this._types[i];\n                var errors = type.validate(value, context);\n                if (errors.length === 0) {\n                    if (this._eager)\n                        return typeCheckSuccess();\n                    else\n                        applicableTypes++;\n                }\n                else {\n                    allErrors.push(errors);\n                }\n            }\n            if (applicableTypes === 1)\n                return typeCheckSuccess();\n            return typeCheckFailure(context, value, \"No type is applicable for the union\").concat(flattenTypeErrors(allErrors));\n        }\n    });\n    Object.defineProperty(Union.prototype, \"getSubTypes\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            return this._types;\n        }\n    });\n    return Union;\n}(BaseType));\n/**\n * `types.union` - Create a union of multiple types. If the correct type cannot be inferred unambiguously from a snapshot, provide a dispatcher function of the form `(snapshot) => Type`.\n *\n * @param optionsOrType\n * @param otherTypes\n * @returns\n */\nfunction union(optionsOrType) {\n    var otherTypes = [];\n    for (var _i = 1; _i < arguments.length; _i++) {\n        otherTypes[_i - 1] = arguments[_i];\n    }\n    var options = isType(optionsOrType) ? undefined : optionsOrType;\n    var types = isType(optionsOrType) ? __spread([optionsOrType], otherTypes) : otherTypes;\n    var name = \"(\" + types.map(function (type) { return type.name; }).join(\" | \") + \")\";\n    // check all options\n    if (devMode()) {\n        if (options) {\n            assertArg(options, function (o) { return isPlainObject(o); }, \"object { eager?: boolean, dispatcher?: Function }\", 1);\n        }\n        types.forEach(function (type, i) {\n            assertIsType(type, options ? i + 2 : i + 1);\n        });\n    }\n    return new Union(name, types, options);\n}\n/**\n * Returns if a given value represents a union type.\n *\n * @param type\n * @returns\n */\nfunction isUnionType(type) {\n    return (type.flags & TypeFlags.Union) > 0;\n}\n\n/**\n * @hidden\n * @internal\n */\nvar OptionalValue = /** @class */ (function (_super) {\n    __extends(OptionalValue, _super);\n    function OptionalValue(_subtype, _defaultValue, optionalValues) {\n        var _this = _super.call(this, _subtype.name) || this;\n        Object.defineProperty(_this, \"_subtype\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: _subtype\n        });\n        Object.defineProperty(_this, \"_defaultValue\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: _defaultValue\n        });\n        Object.defineProperty(_this, \"optionalValues\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: optionalValues\n        });\n        return _this;\n    }\n    Object.defineProperty(OptionalValue.prototype, \"flags\", {\n        get: function () {\n            return this._subtype.flags | TypeFlags.Optional;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(OptionalValue.prototype, \"describe\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            return this._subtype.describe() + \"?\";\n        }\n    });\n    Object.defineProperty(OptionalValue.prototype, \"instantiate\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (parent, subpath, environment, initialValue) {\n            if (this.optionalValues.indexOf(initialValue) >= 0) {\n                var defaultInstanceOrSnapshot = this.getDefaultInstanceOrSnapshot();\n                return this._subtype.instantiate(parent, subpath, environment, defaultInstanceOrSnapshot);\n            }\n            return this._subtype.instantiate(parent, subpath, environment, initialValue);\n        }\n    });\n    Object.defineProperty(OptionalValue.prototype, \"reconcile\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (current, newValue, parent, subpath) {\n            return this._subtype.reconcile(current, this.optionalValues.indexOf(newValue) < 0 && this._subtype.is(newValue)\n                ? newValue\n                : this.getDefaultInstanceOrSnapshot(), parent, subpath);\n        }\n    });\n    Object.defineProperty(OptionalValue.prototype, \"getDefaultInstanceOrSnapshot\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            var defaultInstanceOrSnapshot = typeof this._defaultValue === \"function\"\n                ? this._defaultValue()\n                : this._defaultValue;\n            // while static values are already snapshots and checked on types.optional\n            // generator functions must always be rechecked just in case\n            if (typeof this._defaultValue === \"function\") {\n                typecheckInternal(this, defaultInstanceOrSnapshot);\n            }\n            return defaultInstanceOrSnapshot;\n        }\n    });\n    Object.defineProperty(OptionalValue.prototype, \"isValidSnapshot\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (value, context) {\n            // defaulted values can be skipped\n            if (this.optionalValues.indexOf(value) >= 0) {\n                return typeCheckSuccess();\n            }\n            // bounce validation to the sub-type\n            return this._subtype.validate(value, context);\n        }\n    });\n    Object.defineProperty(OptionalValue.prototype, \"isAssignableFrom\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (type) {\n            return this._subtype.isAssignableFrom(type);\n        }\n    });\n    Object.defineProperty(OptionalValue.prototype, \"getSubTypes\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            return this._subtype;\n        }\n    });\n    return OptionalValue;\n}(BaseType));\nfunction checkOptionalPreconditions(type, defaultValueOrFunction) {\n    // make sure we never pass direct instances\n    if (typeof defaultValueOrFunction !== \"function\" && isStateTreeNode(defaultValueOrFunction)) {\n        throw fail$1(\"default value cannot be an instance, pass a snapshot or a function that creates an instance/snapshot instead\");\n    }\n    assertIsType(type, 1);\n    if (devMode()) {\n        // we only check default values if they are passed directly\n        // if they are generator functions they will be checked once they are generated\n        // we don't check generator function results here to avoid generating a node just for type-checking purposes\n        // which might generate side-effects\n        if (typeof defaultValueOrFunction !== \"function\") {\n            typecheckInternal(type, defaultValueOrFunction);\n        }\n    }\n}\n/**\n * `types.optional` - Can be used to create a property with a default value.\n *\n * Depending on the third argument (`optionalValues`) there are two ways of operation:\n * - If the argument is not provided, then if a value is not provided in the snapshot (`undefined` or missing),\n *   it will default to the provided `defaultValue`\n * - If the argument is provided, then if the value in the snapshot matches one of the optional values inside the array then it will\n *   default to the provided `defaultValue`. Additionally, if one of the optional values inside the array is `undefined` then a missing\n *   property is also valid.\n *\n *   Note that it is also possible to include values of the same type as the intended subtype as optional values,\n *   in this case the optional value will be transformed into the `defaultValue` (e.g. `types.optional(types.string, \"unnamed\", [undefined, \"\"])`\n *   will transform the snapshot values `undefined` (and therefore missing) and empty strings into the string `\"unnamed\"` when it gets\n *   instantiated).\n *\n * If `defaultValue` is a function, the function will be invoked for every new instance.\n * Applying a snapshot in which the optional value is one of the optional values (or `undefined`/_not_ present if none are provided) causes the\n * value to be reset.\n *\n * Example:\n * ```ts\n * const Todo = types.model({\n *   title: types.string,\n *   subtitle1: types.optional(types.string, \"\", [null]),\n *   subtitle2: types.optional(types.string, \"\", [null, undefined]),\n *   done: types.optional(types.boolean, false),\n *   created: types.optional(types.Date, () => new Date()),\n * })\n *\n * // if done is missing / undefined it will become false\n * // if created is missing / undefined it will get a freshly generated timestamp\n * // if subtitle1 is null it will default to \"\", but it cannot be missing or undefined\n * // if subtitle2 is null or undefined it will default to \"\"; since it can be undefined it can also be missing\n * const todo = Todo.create({ title: \"Get coffee\", subtitle1: null })\n * ```\n *\n * @param type\n * @param defaultValueOrFunction\n * @param optionalValues an optional array with zero or more primitive values (string, number, boolean, null or undefined)\n *                       that will be converted into the default. `[ undefined ]` is assumed when none is provided\n * @returns\n */\nfunction optional(type, defaultValueOrFunction, optionalValues) {\n    checkOptionalPreconditions(type, defaultValueOrFunction);\n    return new OptionalValue(type, defaultValueOrFunction, optionalValues ? optionalValues : undefinedAsOptionalValues);\n}\nvar undefinedAsOptionalValues = [undefined];\n/**\n * Returns if a value represents an optional type.\n *\n * @template IT\n * @param type\n * @returns\n */\nfunction isOptionalType(type) {\n    return isType(type) && (type.flags & TypeFlags.Optional) > 0;\n}\n\nvar optionalUndefinedType = optional(undefinedType, undefined);\nvar optionalNullType = optional(nullType, null);\n/**\n * `types.maybe` - Maybe will make a type nullable, and also optional.\n * The value `undefined` will be used to represent nullability.\n *\n * @param type\n * @returns\n */\nfunction maybe(type) {\n    assertIsType(type, 1);\n    return union(type, optionalUndefinedType);\n}\n/**\n * `types.maybeNull` - Maybe will make a type nullable, and also optional.\n * The value `null` will be used to represent no value.\n *\n * @param type\n * @returns\n */\nfunction maybeNull(type) {\n    assertIsType(type, 1);\n    return union(type, optionalNullType);\n}\n\nvar Late = /** @class */ (function (_super) {\n    __extends(Late, _super);\n    function Late(name, _definition) {\n        var _this = _super.call(this, name) || this;\n        Object.defineProperty(_this, \"_definition\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: _definition\n        });\n        Object.defineProperty(_this, \"_subType\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        return _this;\n    }\n    Object.defineProperty(Late.prototype, \"flags\", {\n        get: function () {\n            return (this._subType ? this._subType.flags : 0) | TypeFlags.Late;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Late.prototype, \"getSubType\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (mustSucceed) {\n            if (!this._subType) {\n                var t = undefined;\n                try {\n                    t = this._definition();\n                }\n                catch (e) {\n                    if (e instanceof ReferenceError)\n                        // can happen in strict ES5 code when a definition is self refering\n                        t = undefined;\n                    else\n                        throw e;\n                }\n                if (mustSucceed && t === undefined)\n                    throw fail$1(\"Late type seems to be used too early, the definition (still) returns undefined\");\n                if (t) {\n                    if (devMode() && !isType(t))\n                        throw fail$1(\"Failed to determine subtype, make sure types.late returns a type definition.\");\n                    this._subType = t;\n                }\n            }\n            return this._subType;\n        }\n    });\n    Object.defineProperty(Late.prototype, \"instantiate\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (parent, subpath, environment, initialValue) {\n            return this.getSubType(true).instantiate(parent, subpath, environment, initialValue);\n        }\n    });\n    Object.defineProperty(Late.prototype, \"reconcile\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (current, newValue, parent, subpath) {\n            return this.getSubType(true).reconcile(current, newValue, parent, subpath);\n        }\n    });\n    Object.defineProperty(Late.prototype, \"describe\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            var t = this.getSubType(false);\n            return t ? t.name : \"<uknown late type>\";\n        }\n    });\n    Object.defineProperty(Late.prototype, \"isValidSnapshot\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (value, context) {\n            var t = this.getSubType(false);\n            if (!t) {\n                // See #916; the variable the definition closure is pointing to wasn't defined yet, so can't be evaluted yet here\n                return typeCheckSuccess();\n            }\n            return t.validate(value, context);\n        }\n    });\n    Object.defineProperty(Late.prototype, \"isAssignableFrom\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (type) {\n            var t = this.getSubType(false);\n            return t ? t.isAssignableFrom(type) : false;\n        }\n    });\n    Object.defineProperty(Late.prototype, \"getSubTypes\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            var subtype = this.getSubType(false);\n            return subtype ? subtype : cannotDetermineSubtype;\n        }\n    });\n    return Late;\n}(BaseType));\n/**\n * `types.late` - Defines a type that gets implemented later. This is useful when you have to deal with circular dependencies.\n * Please notice that when defining circular dependencies TypeScript isn't smart enough to inference them.\n *\n * Example:\n * ```ts\n *   // TypeScript isn't smart enough to infer self referencing types.\n *  const Node = types.model({\n *       children: types.array(types.late((): IAnyModelType => Node)) // then typecast each array element to Instance<typeof Node>\n *  })\n * ```\n *\n * @param name The name to use for the type that will be returned.\n * @param type A function that returns the type that will be defined.\n * @returns\n */\nfunction late(nameOrType, maybeType) {\n    var name = typeof nameOrType === \"string\" ? nameOrType : \"late(\" + nameOrType.toString() + \")\";\n    var type = typeof nameOrType === \"string\" ? maybeType : nameOrType;\n    // checks that the type is actually a late type\n    if (devMode()) {\n        if (!(typeof type === \"function\" && type.length === 0))\n            throw fail$1(\"Invalid late type, expected a function with zero arguments that returns a type, got: \" +\n                type);\n    }\n    return new Late(name, type);\n}\n/**\n * Returns if a given value represents a late type.\n *\n * @param type\n * @returns\n */\nfunction isLateType(type) {\n    return isType(type) && (type.flags & TypeFlags.Late) > 0;\n}\n\n/**\n * @internal\n * @hidden\n */\nvar Frozen = /** @class */ (function (_super) {\n    __extends(Frozen, _super);\n    function Frozen(subType) {\n        var _this = _super.call(this, subType ? \"frozen(\" + subType.name + \")\" : \"frozen\") || this;\n        Object.defineProperty(_this, \"subType\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: subType\n        });\n        Object.defineProperty(_this, \"flags\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: TypeFlags.Frozen\n        });\n        return _this;\n    }\n    Object.defineProperty(Frozen.prototype, \"describe\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            return \"<any immutable value>\";\n        }\n    });\n    Object.defineProperty(Frozen.prototype, \"instantiate\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (parent, subpath, environment, value) {\n            // create the node\n            return createScalarNode(this, parent, subpath, environment, deepFreeze(value));\n        }\n    });\n    Object.defineProperty(Frozen.prototype, \"isValidSnapshot\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (value, context) {\n            if (!isSerializable(value)) {\n                return typeCheckFailure(context, value, \"Value is not serializable and cannot be frozen\");\n            }\n            if (this.subType)\n                return this.subType.validate(value, context);\n            return typeCheckSuccess();\n        }\n    });\n    return Frozen;\n}(SimpleType));\nvar untypedFrozenInstance = new Frozen();\n/**\n * `types.frozen` - Frozen can be used to store any value that is serializable in itself (that is valid JSON).\n * Frozen values need to be immutable or treated as if immutable. They need be serializable as well.\n * Values stored in frozen will snapshotted as-is by MST, and internal changes will not be tracked.\n *\n * This is useful to store complex, but immutable values like vectors etc. It can form a powerful bridge to parts of your application that should be immutable, or that assume data to be immutable.\n *\n * Note: if you want to store free-form state that is mutable, or not serializeable, consider using volatile state instead.\n *\n * Frozen properties can be defined in three different ways\n * 1. `types.frozen(SubType)` - provide a valid MST type and frozen will check if the provided data conforms the snapshot for that type\n * 2. `types.frozen({ someDefaultValue: true})` - provide a primitive value, object or array, and MST will infer the type from that object, and also make it the default value for the field\n * 3. `types.frozen<TypeScriptType>()` - provide a typescript type, to help in strongly typing the field (design time only)\n *\n * Example:\n * ```ts\n * const GameCharacter = types.model({\n *   name: string,\n *   location: types.frozen({ x: 0, y: 0})\n * })\n *\n * const hero = GameCharacter.create({\n *   name: \"Mario\",\n *   location: { x: 7, y: 4 }\n * })\n *\n * hero.location = { x: 10, y: 2 } // OK\n * hero.location.x = 7 // Not ok!\n * ```\n *\n * ```ts\n * type Point = { x: number, y: number }\n *    const Mouse = types.model({\n *         loc: types.frozen<Point>()\n *    })\n * ```\n *\n * @param defaultValueOrType\n * @returns\n */\nfunction frozen(arg) {\n    if (arguments.length === 0)\n        return untypedFrozenInstance;\n    else if (isType(arg))\n        return new Frozen(arg);\n    else\n        return optional(untypedFrozenInstance, arg);\n}\n/**\n * Returns if a given value represents a frozen type.\n *\n * @param type\n * @returns\n */\nfunction isFrozenType(type) {\n    return isType(type) && (type.flags & TypeFlags.Frozen) > 0;\n}\n\nfunction getInvalidationCause(hook) {\n    switch (hook) {\n        case Hook.beforeDestroy:\n            return \"destroy\";\n        case Hook.beforeDetach:\n            return \"detach\";\n        default:\n            return undefined;\n    }\n}\nvar StoredReference = /** @class */ (function () {\n    function StoredReference(value, targetType) {\n        Object.defineProperty(this, \"targetType\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: targetType\n        });\n        Object.defineProperty(this, \"identifier\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"node\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"resolvedReference\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        if (isValidIdentifier(value)) {\n            this.identifier = value;\n        }\n        else if (isStateTreeNode(value)) {\n            var targetNode = getStateTreeNode(value);\n            if (!targetNode.identifierAttribute)\n                throw fail$1(\"Can only store references with a defined identifier attribute.\");\n            var id = targetNode.unnormalizedIdentifier;\n            if (id === null || id === undefined) {\n                throw fail$1(\"Can only store references to tree nodes with a defined identifier.\");\n            }\n            this.identifier = id;\n        }\n        else {\n            throw fail$1(\"Can only store references to tree nodes or identifiers, got: '\" + value + \"'\");\n        }\n    }\n    Object.defineProperty(StoredReference.prototype, \"updateResolvedReference\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (node) {\n            var normalizedId = normalizeIdentifier(this.identifier);\n            var root = node.root;\n            var lastCacheModification = root.identifierCache.getLastCacheModificationPerId(normalizedId);\n            if (!this.resolvedReference ||\n                this.resolvedReference.lastCacheModification !== lastCacheModification) {\n                var targetType = this.targetType;\n                // reference was initialized with the identifier of the target\n                var target = root.identifierCache.resolve(targetType, normalizedId);\n                if (!target) {\n                    throw new InvalidReferenceError(\"[mobx-state-tree] Failed to resolve reference '\" + this.identifier + \"' to type '\" + this.targetType.name + \"' (from node: \" + node.path + \")\");\n                }\n                this.resolvedReference = {\n                    node: target,\n                    lastCacheModification: lastCacheModification\n                };\n            }\n        }\n    });\n    Object.defineProperty(StoredReference.prototype, \"resolvedValue\", {\n        get: function () {\n            this.updateResolvedReference(this.node);\n            return this.resolvedReference.node.value;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return StoredReference;\n}());\n/**\n * @internal\n * @hidden\n */\nvar InvalidReferenceError = /** @class */ (function (_super) {\n    __extends(InvalidReferenceError, _super);\n    function InvalidReferenceError(m) {\n        var _this = _super.call(this, m) || this;\n        Object.setPrototypeOf(_this, InvalidReferenceError.prototype);\n        return _this;\n    }\n    return InvalidReferenceError;\n}(Error));\n/**\n * @internal\n * @hidden\n */\nvar BaseReferenceType = /** @class */ (function (_super) {\n    __extends(BaseReferenceType, _super);\n    function BaseReferenceType(targetType, onInvalidated) {\n        var _this = _super.call(this, \"reference(\" + targetType.name + \")\") || this;\n        Object.defineProperty(_this, \"targetType\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: targetType\n        });\n        Object.defineProperty(_this, \"onInvalidated\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: onInvalidated\n        });\n        Object.defineProperty(_this, \"flags\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: TypeFlags.Reference\n        });\n        return _this;\n    }\n    Object.defineProperty(BaseReferenceType.prototype, \"describe\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            return this.name;\n        }\n    });\n    Object.defineProperty(BaseReferenceType.prototype, \"isAssignableFrom\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (type) {\n            return this.targetType.isAssignableFrom(type);\n        }\n    });\n    Object.defineProperty(BaseReferenceType.prototype, \"isValidSnapshot\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (value, context) {\n            return isValidIdentifier(value)\n                ? typeCheckSuccess()\n                : typeCheckFailure(context, value, \"Value is not a valid identifier, which is a string or a number\");\n        }\n    });\n    Object.defineProperty(BaseReferenceType.prototype, \"fireInvalidated\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (cause, storedRefNode, referenceId, refTargetNode) {\n            // to actually invalidate a reference we need an alive parent,\n            // since it is a scalar value (immutable-ish) and we need to change it\n            // from the parent\n            var storedRefParentNode = storedRefNode.parent;\n            if (!storedRefParentNode || !storedRefParentNode.isAlive) {\n                return;\n            }\n            var storedRefParentValue = storedRefParentNode.storedValue;\n            if (!storedRefParentValue) {\n                return;\n            }\n            this.onInvalidated({\n                cause: cause,\n                parent: storedRefParentValue,\n                invalidTarget: refTargetNode ? refTargetNode.storedValue : undefined,\n                invalidId: referenceId,\n                replaceRef: function (newRef) {\n                    applyPatch(storedRefNode.root.storedValue, {\n                        op: \"replace\",\n                        value: newRef,\n                        path: storedRefNode.path\n                    });\n                },\n                removeRef: function () {\n                    if (isModelType(storedRefParentNode.type)) {\n                        this.replaceRef(undefined);\n                    }\n                    else {\n                        applyPatch(storedRefNode.root.storedValue, {\n                            op: \"remove\",\n                            path: storedRefNode.path\n                        });\n                    }\n                }\n            });\n        }\n    });\n    Object.defineProperty(BaseReferenceType.prototype, \"addTargetNodeWatcher\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (storedRefNode, referenceId) {\n            var _this = this;\n            // this will make sure the target node becomes created\n            var refTargetValue = this.getValue(storedRefNode);\n            if (!refTargetValue) {\n                return undefined;\n            }\n            var refTargetNode = getStateTreeNode(refTargetValue);\n            var hookHandler = function (_, refTargetNodeHook) {\n                var cause = getInvalidationCause(refTargetNodeHook);\n                if (!cause) {\n                    return;\n                }\n                _this.fireInvalidated(cause, storedRefNode, referenceId, refTargetNode);\n            };\n            var refTargetDetachHookDisposer = refTargetNode.registerHook(Hook.beforeDetach, hookHandler);\n            var refTargetDestroyHookDisposer = refTargetNode.registerHook(Hook.beforeDestroy, hookHandler);\n            return function () {\n                refTargetDetachHookDisposer();\n                refTargetDestroyHookDisposer();\n            };\n        }\n    });\n    Object.defineProperty(BaseReferenceType.prototype, \"watchTargetNodeForInvalidations\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (storedRefNode, identifier, customGetSet) {\n            var _this = this;\n            if (!this.onInvalidated) {\n                return;\n            }\n            var onRefTargetDestroyedHookDisposer;\n            // get rid of the watcher hook when the stored ref node is destroyed\n            // detached is ignored since scalar nodes (where the reference resides) cannot be detached\n            storedRefNode.registerHook(Hook.beforeDestroy, function () {\n                if (onRefTargetDestroyedHookDisposer) {\n                    onRefTargetDestroyedHookDisposer();\n                }\n            });\n            var startWatching = function (sync) {\n                // re-create hook in case the stored ref gets reattached\n                if (onRefTargetDestroyedHookDisposer) {\n                    onRefTargetDestroyedHookDisposer();\n                }\n                // make sure the target node is actually there and initialized\n                var storedRefParentNode = storedRefNode.parent;\n                var storedRefParentValue = storedRefParentNode && storedRefParentNode.storedValue;\n                if (storedRefParentNode && storedRefParentNode.isAlive && storedRefParentValue) {\n                    var refTargetNodeExists = void 0;\n                    if (customGetSet) {\n                        refTargetNodeExists = !!customGetSet.get(identifier, storedRefParentValue);\n                    }\n                    else {\n                        refTargetNodeExists = storedRefNode.root.identifierCache.has(_this.targetType, normalizeIdentifier(identifier));\n                    }\n                    if (!refTargetNodeExists) {\n                        // we cannot change the reference in sync mode\n                        // since we are in the middle of a reconciliation/instantiation and the change would be overwritten\n                        // for those cases just let the wrong reference be assigned and fail upon usage\n                        // (like current references do)\n                        // this means that effectively this code will only run when it is created from a snapshot\n                        if (!sync) {\n                            _this.fireInvalidated(\"invalidSnapshotReference\", storedRefNode, identifier, null);\n                        }\n                    }\n                    else {\n                        onRefTargetDestroyedHookDisposer = _this.addTargetNodeWatcher(storedRefNode, identifier);\n                    }\n                }\n            };\n            if (storedRefNode.state === NodeLifeCycle.FINALIZED) {\n                // already attached, so the whole tree is ready\n                startWatching(true);\n            }\n            else {\n                if (!storedRefNode.isRoot) {\n                    // start watching once the whole tree is ready\n                    storedRefNode.root.registerHook(Hook.afterCreationFinalization, function () {\n                        // make sure to attach it so it can start listening\n                        if (storedRefNode.parent) {\n                            storedRefNode.parent.createObservableInstanceIfNeeded();\n                        }\n                    });\n                }\n                // start watching once the node is attached somewhere / parent changes\n                storedRefNode.registerHook(Hook.afterAttach, function () {\n                    startWatching(false);\n                });\n            }\n        }\n    });\n    return BaseReferenceType;\n}(SimpleType));\n/**\n * @internal\n * @hidden\n */\nvar IdentifierReferenceType = /** @class */ (function (_super) {\n    __extends(IdentifierReferenceType, _super);\n    function IdentifierReferenceType(targetType, onInvalidated) {\n        return _super.call(this, targetType, onInvalidated) || this;\n    }\n    Object.defineProperty(IdentifierReferenceType.prototype, \"getValue\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (storedRefNode) {\n            if (!storedRefNode.isAlive)\n                return undefined;\n            var storedRef = storedRefNode.storedValue;\n            return storedRef.resolvedValue;\n        }\n    });\n    Object.defineProperty(IdentifierReferenceType.prototype, \"getSnapshot\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (storedRefNode) {\n            var ref = storedRefNode.storedValue;\n            return ref.identifier;\n        }\n    });\n    Object.defineProperty(IdentifierReferenceType.prototype, \"instantiate\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (parent, subpath, environment, initialValue) {\n            var identifier = isStateTreeNode(initialValue)\n                ? getIdentifier(initialValue)\n                : initialValue;\n            var storedRef = new StoredReference(initialValue, this.targetType);\n            var storedRefNode = createScalarNode(this, parent, subpath, environment, storedRef);\n            storedRef.node = storedRefNode;\n            this.watchTargetNodeForInvalidations(storedRefNode, identifier, undefined);\n            return storedRefNode;\n        }\n    });\n    Object.defineProperty(IdentifierReferenceType.prototype, \"reconcile\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (current, newValue, parent, subpath) {\n            if (!current.isDetaching && current.type === this) {\n                var compareByValue = isStateTreeNode(newValue);\n                var ref = current.storedValue;\n                if ((!compareByValue && ref.identifier === newValue) ||\n                    (compareByValue && ref.resolvedValue === newValue)) {\n                    current.setParent(parent, subpath);\n                    return current;\n                }\n            }\n            var newNode = this.instantiate(parent, subpath, undefined, newValue);\n            current.die(); // noop if detaching\n            return newNode;\n        }\n    });\n    return IdentifierReferenceType;\n}(BaseReferenceType));\n/**\n * @internal\n * @hidden\n */\nvar CustomReferenceType = /** @class */ (function (_super) {\n    __extends(CustomReferenceType, _super);\n    function CustomReferenceType(targetType, options, onInvalidated) {\n        var _this = _super.call(this, targetType, onInvalidated) || this;\n        Object.defineProperty(_this, \"options\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: options\n        });\n        return _this;\n    }\n    Object.defineProperty(CustomReferenceType.prototype, \"getValue\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (storedRefNode) {\n            if (!storedRefNode.isAlive)\n                return undefined;\n            var referencedNode = this.options.get(storedRefNode.storedValue, storedRefNode.parent ? storedRefNode.parent.storedValue : null);\n            return referencedNode;\n        }\n    });\n    Object.defineProperty(CustomReferenceType.prototype, \"getSnapshot\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (storedRefNode) {\n            return storedRefNode.storedValue;\n        }\n    });\n    Object.defineProperty(CustomReferenceType.prototype, \"instantiate\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (parent, subpath, environment, newValue) {\n            var identifier = isStateTreeNode(newValue)\n                ? this.options.set(newValue, parent ? parent.storedValue : null)\n                : newValue;\n            var storedRefNode = createScalarNode(this, parent, subpath, environment, identifier);\n            this.watchTargetNodeForInvalidations(storedRefNode, identifier, this.options);\n            return storedRefNode;\n        }\n    });\n    Object.defineProperty(CustomReferenceType.prototype, \"reconcile\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (current, newValue, parent, subpath) {\n            var newIdentifier = isStateTreeNode(newValue)\n                ? this.options.set(newValue, current ? current.storedValue : null)\n                : newValue;\n            if (!current.isDetaching &&\n                current.type === this &&\n                current.storedValue === newIdentifier) {\n                current.setParent(parent, subpath);\n                return current;\n            }\n            var newNode = this.instantiate(parent, subpath, undefined, newIdentifier);\n            current.die(); // noop if detaching\n            return newNode;\n        }\n    });\n    return CustomReferenceType;\n}(BaseReferenceType));\n/**\n * `types.reference` - Creates a reference to another type, which should have defined an identifier.\n * See also the [reference and identifiers](https://github.com/mobxjs/mobx-state-tree#references-and-identifiers) section.\n */\nfunction reference(subType, options) {\n    assertIsType(subType, 1);\n    if (devMode()) {\n        if (arguments.length === 2 && typeof arguments[1] === \"string\") {\n            // istanbul ignore next\n            throw fail$1(\"References with base path are no longer supported. Please remove the base path.\");\n        }\n    }\n    var getSetOptions = options ? options : undefined;\n    var onInvalidated = options\n        ? options.onInvalidated\n        : undefined;\n    if (getSetOptions && (getSetOptions.get || getSetOptions.set)) {\n        if (devMode()) {\n            if (!getSetOptions.get || !getSetOptions.set) {\n                throw fail$1(\"reference options must either contain both a 'get' and a 'set' method or none of them\");\n            }\n        }\n        return new CustomReferenceType(subType, {\n            get: getSetOptions.get,\n            set: getSetOptions.set\n        }, onInvalidated);\n    }\n    else {\n        return new IdentifierReferenceType(subType, onInvalidated);\n    }\n}\n/**\n * Returns if a given value represents a reference type.\n *\n * @param type\n * @returns\n */\nfunction isReferenceType(type) {\n    return (type.flags & TypeFlags.Reference) > 0;\n}\n/**\n * `types.safeReference` - A safe reference is like a standard reference, except that it accepts the undefined value by default\n * and automatically sets itself to undefined (when the parent is a model) / removes itself from arrays and maps\n * when the reference it is pointing to gets detached/destroyed.\n *\n * The optional options parameter object accepts a parameter named `acceptsUndefined`, which is set to true by default, so it is suitable\n * for model properties.\n * When used inside collections (arrays/maps), it is recommended to set this option to false so it can't take undefined as value,\n * which is usually the desired in those cases.\n * Additionally, the optional options parameter object accepts a parameter named `onInvalidated`, which will be called when the reference target node that the reference is pointing to is about to be detached/destroyed\n *\n * Strictly speaking it is a `types.maybe(types.reference(X))` (when `acceptsUndefined` is set to true, the default) and\n * `types.reference(X)` (when `acceptsUndefined` is set to false), both of them with a customized `onInvalidated` option.\n *\n * @param subType\n * @param options\n * @returns\n */\nfunction safeReference(subType, options) {\n    var refType = reference(subType, __assign(__assign({}, options), { onInvalidated: function (ev) {\n            if (options && options.onInvalidated) {\n                options.onInvalidated(ev);\n            }\n            ev.removeRef();\n        } }));\n    if (options && options.acceptsUndefined === false) {\n        return refType;\n    }\n    else {\n        return maybe(refType);\n    }\n}\n\nvar BaseIdentifierType = /** @class */ (function (_super) {\n    __extends(BaseIdentifierType, _super);\n    function BaseIdentifierType(name, validType) {\n        var _this = _super.call(this, name) || this;\n        Object.defineProperty(_this, \"validType\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: validType\n        });\n        Object.defineProperty(_this, \"flags\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: TypeFlags.Identifier\n        });\n        return _this;\n    }\n    Object.defineProperty(BaseIdentifierType.prototype, \"instantiate\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (parent, subpath, environment, initialValue) {\n            if (!parent || !(parent.type instanceof ModelType))\n                throw fail$1(\"Identifier types can only be instantiated as direct child of a model type\");\n            return createScalarNode(this, parent, subpath, environment, initialValue);\n        }\n    });\n    Object.defineProperty(BaseIdentifierType.prototype, \"reconcile\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (current, newValue, parent, subpath) {\n            // we don't consider detaching here since identifier are scalar nodes, and scalar nodes cannot be detached\n            if (current.storedValue !== newValue)\n                throw fail$1(\"Tried to change identifier from '\" + current.storedValue + \"' to '\" + newValue + \"'. Changing identifiers is not allowed.\");\n            current.setParent(parent, subpath);\n            return current;\n        }\n    });\n    Object.defineProperty(BaseIdentifierType.prototype, \"isValidSnapshot\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (value, context) {\n            if (typeof value !== this.validType) {\n                return typeCheckFailure(context, value, \"Value is not a valid \" + this.describe() + \", expected a \" + this.validType);\n            }\n            return typeCheckSuccess();\n        }\n    });\n    return BaseIdentifierType;\n}(SimpleType));\n/**\n * @internal\n * @hidden\n */\nvar IdentifierType = /** @class */ (function (_super) {\n    __extends(IdentifierType, _super);\n    function IdentifierType() {\n        var _this = _super.call(this, \"identifier\", \"string\") || this;\n        Object.defineProperty(_this, \"flags\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: TypeFlags.Identifier\n        });\n        return _this;\n    }\n    Object.defineProperty(IdentifierType.prototype, \"describe\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            return \"identifier\";\n        }\n    });\n    return IdentifierType;\n}(BaseIdentifierType));\n/**\n * @internal\n * @hidden\n */\nvar IdentifierNumberType = /** @class */ (function (_super) {\n    __extends(IdentifierNumberType, _super);\n    function IdentifierNumberType() {\n        return _super.call(this, \"identifierNumber\", \"number\") || this;\n    }\n    Object.defineProperty(IdentifierNumberType.prototype, \"getSnapshot\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (node) {\n            return node.storedValue;\n        }\n    });\n    Object.defineProperty(IdentifierNumberType.prototype, \"describe\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            return \"identifierNumber\";\n        }\n    });\n    return IdentifierNumberType;\n}(BaseIdentifierType));\n/**\n * `types.identifier` - Identifiers are used to make references, lifecycle events and reconciling works.\n * Inside a state tree, for each type can exist only one instance for each given identifier.\n * For example there couldn't be 2 instances of user with id 1. If you need more, consider using references.\n * Identifier can be used only as type property of a model.\n * This type accepts as parameter the value type of the identifier field that can be either string or number.\n *\n * Example:\n * ```ts\n *  const Todo = types.model(\"Todo\", {\n *      id: types.identifier,\n *      title: types.string\n *  })\n * ```\n *\n * @returns\n */\nvar identifier = new IdentifierType();\n/**\n * `types.identifierNumber` - Similar to `types.identifier`. This one will serialize from / to a number when applying snapshots\n *\n * Example:\n * ```ts\n *  const Todo = types.model(\"Todo\", {\n *      id: types.identifierNumber,\n *      title: types.string\n *  })\n * ```\n *\n * @returns\n */\nvar identifierNumber = new IdentifierNumberType();\n/**\n * Returns if a given value represents an identifier type.\n *\n * @param type\n * @returns\n */\nfunction isIdentifierType(type) {\n    return isType(type) && (type.flags & TypeFlags.Identifier) > 0;\n}\n/**\n * @internal\n * @hidden\n */\nfunction normalizeIdentifier(id) {\n    return \"\" + id;\n}\n/**\n * @internal\n * @hidden\n */\nfunction isValidIdentifier(id) {\n    return typeof id === \"string\" || typeof id === \"number\";\n}\n/**\n * @internal\n * @hidden\n */\nfunction assertIsValidIdentifier(id, argNumber) {\n    assertArg(id, isValidIdentifier, \"string or number (identifier)\", argNumber);\n}\n\n/**\n * `types.custom` - Creates a custom type. Custom types can be used for arbitrary immutable values, that have a serializable representation. For example, to create your own Date representation, Decimal type etc.\n *\n * The signature of the options is:\n * ```ts\n * export interface CustomTypeOptions<S, T> {\n *     // Friendly name\n *     name: string\n *     // given a serialized value and environment, how to turn it into the target type\n *     fromSnapshot(snapshot: S, env: any): T\n *     // return the serialization of the current value\n *     toSnapshot(value: T): S\n *     // if true, this is a converted value, if false, it's a snapshot\n *     isTargetType(value: T | S): value is T\n *     // a non empty string is assumed to be a validation error\n *     getValidationMessage?(snapshot: S): string\n * }\n * ```\n *\n * Example:\n * ```ts\n * const DecimalPrimitive = types.custom<string, Decimal>({\n *     name: \"Decimal\",\n *     fromSnapshot(value: string) {\n *         return new Decimal(value)\n *     },\n *     toSnapshot(value: Decimal) {\n *         return value.toString()\n *     },\n *     isTargetType(value: string | Decimal): boolean {\n *         return value instanceof Decimal\n *     },\n *     getValidationMessage(value: string): string {\n *         if (/^-?\\d+\\.\\d+$/.test(value)) return \"\" // OK\n *         return `'${value}' doesn't look like a valid decimal number`\n *     }\n * })\n *\n * const Wallet = types.model({\n *     balance: DecimalPrimitive\n * })\n * ```\n *\n * @param options\n * @returns\n */\nfunction custom(options) {\n    return new CustomType(options);\n}\n/**\n * @internal\n * @hidden\n */\nvar CustomType = /** @class */ (function (_super) {\n    __extends(CustomType, _super);\n    function CustomType(options) {\n        var _this = _super.call(this, options.name) || this;\n        Object.defineProperty(_this, \"options\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: options\n        });\n        Object.defineProperty(_this, \"flags\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: TypeFlags.Custom\n        });\n        return _this;\n    }\n    Object.defineProperty(CustomType.prototype, \"describe\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            return this.name;\n        }\n    });\n    Object.defineProperty(CustomType.prototype, \"isValidSnapshot\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (value, context) {\n            if (this.options.isTargetType(value))\n                return typeCheckSuccess();\n            var typeError = this.options.getValidationMessage(value);\n            if (typeError) {\n                return typeCheckFailure(context, value, \"Invalid value for type '\" + this.name + \"': \" + typeError);\n            }\n            return typeCheckSuccess();\n        }\n    });\n    Object.defineProperty(CustomType.prototype, \"getSnapshot\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (node) {\n            return this.options.toSnapshot(node.storedValue);\n        }\n    });\n    Object.defineProperty(CustomType.prototype, \"instantiate\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (parent, subpath, environment, initialValue) {\n            var valueToStore = this.options.isTargetType(initialValue)\n                ? initialValue\n                : this.options.fromSnapshot(initialValue, parent && parent.root.environment);\n            return createScalarNode(this, parent, subpath, environment, valueToStore);\n        }\n    });\n    Object.defineProperty(CustomType.prototype, \"reconcile\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (current, value, parent, subpath) {\n            var isSnapshot = !this.options.isTargetType(value);\n            // in theory customs use scalar nodes which cannot be detached, but still...\n            if (!current.isDetaching) {\n                var unchanged = current.type === this &&\n                    (isSnapshot ? value === current.snapshot : value === current.storedValue);\n                if (unchanged) {\n                    current.setParent(parent, subpath);\n                    return current;\n                }\n            }\n            var valueToStore = isSnapshot\n                ? this.options.fromSnapshot(value, parent.root.environment)\n                : value;\n            var newNode = this.instantiate(parent, subpath, undefined, valueToStore);\n            current.die(); // noop if detaching\n            return newNode;\n        }\n    });\n    return CustomType;\n}(SimpleType));\n\n// we import the types to re-export them inside types.\nvar types = {\n    enumeration: enumeration,\n    model: model,\n    compose: compose,\n    custom: custom,\n    reference: reference,\n    safeReference: safeReference,\n    union: union,\n    optional: optional,\n    literal: literal,\n    maybe: maybe,\n    maybeNull: maybeNull,\n    refinement: refinement,\n    string: string,\n    boolean: boolean,\n    number: number,\n    integer: integer,\n    Date: DatePrimitive,\n    map: map,\n    array: array,\n    frozen: frozen,\n    identifier: identifier,\n    identifierNumber: identifierNumber,\n    late: late,\n    undefined: undefinedType,\n    null: nullType,\n    snapshotProcessor: snapshotProcessor\n};\n\nexport { addDisposer, addMiddleware, applyAction, applyPatch, applySnapshot, cast, castFlowReturn, castToReferenceSnapshot, castToSnapshot, clone, createActionTrackingMiddleware, createActionTrackingMiddleware2, decorate, destroy, detach, escapeJsonPath, flow, getChildType, getEnv, getIdentifier, getLivelinessChecking, getMembers, getNodeId, getParent, getParentOfType, getPath, getPathParts, getPropertyMembers, getRelativePath, getRoot, getRunningActionContext, getSnapshot, getType, hasParent, hasParentOfType, isActionContextChildOf, isActionContextThisOrChildOf, isAlive, isArrayType, isFrozenType, isIdentifierType, isLateType, isLiteralType, isMapType, isModelType, isOptionalType, isPrimitiveType, isProtected, isReferenceType, isRefinementType, isRoot, isStateTreeNode, isType, isUnionType, isValidReference, joinJsonPath, onAction, onPatch, onSnapshot, process$1 as process, protect, recordActions, recordPatches, resolveIdentifier, resolvePath, setLivelinessChecking, setLivelynessChecking, splitJsonPath, toGenerator, toGeneratorFunction, tryReference, tryResolve, typecheck, types, unescapeJsonPath, unprotect, walk };\n","var niceErrors = {\n  0: \"Invalid value for configuration 'enforceActions', expected 'never', 'always' or 'observed'\",\n  1: function _(annotationType, key) {\n    return \"Cannot apply '\" + annotationType + \"' to '\" + key.toString() + \"': Field not found.\";\n  },\n\n  /*\r\n  2(prop) {\r\n      return `invalid decorator for '${prop.toString()}'`\r\n  },\r\n  3(prop) {\r\n      return `Cannot decorate '${prop.toString()}': action can only be used on properties with a function value.`\r\n  },\r\n  4(prop) {\r\n      return `Cannot decorate '${prop.toString()}': computed can only be used on getter properties.`\r\n  },\r\n  */\n  5: \"'keys()' can only be used on observable objects, arrays, sets and maps\",\n  6: \"'values()' can only be used on observable objects, arrays, sets and maps\",\n  7: \"'entries()' can only be used on observable objects, arrays and maps\",\n  8: \"'set()' can only be used on observable objects, arrays and maps\",\n  9: \"'remove()' can only be used on observable objects, arrays and maps\",\n  10: \"'has()' can only be used on observable objects, arrays and maps\",\n  11: \"'get()' can only be used on observable objects, arrays and maps\",\n  12: \"Invalid annotation\",\n  13: \"Dynamic observable objects cannot be frozen. If you're passing observables to 3rd party component/function that calls Object.freeze, pass copy instead: toJS(observable)\",\n  14: \"Intercept handlers should return nothing or a change object\",\n  15: \"Observable arrays cannot be frozen. If you're passing observables to 3rd party component/function that calls Object.freeze, pass copy instead: toJS(observable)\",\n  16: \"Modification exception: the internal structure of an observable array was changed.\",\n  17: function _(index, length) {\n    return \"[mobx.array] Index out of bounds, \" + index + \" is larger than \" + length;\n  },\n  18: \"mobx.map requires Map polyfill for the current browser. Check babel-polyfill or core-js/es6/map.js\",\n  19: function _(other) {\n    return \"Cannot initialize from classes that inherit from Map: \" + other.constructor.name;\n  },\n  20: function _(other) {\n    return \"Cannot initialize map from \" + other;\n  },\n  21: function _(dataStructure) {\n    return \"Cannot convert to map from '\" + dataStructure + \"'\";\n  },\n  22: \"mobx.set requires Set polyfill for the current browser. Check babel-polyfill or core-js/es6/set.js\",\n  23: \"It is not possible to get index atoms from arrays\",\n  24: function _(thing) {\n    return \"Cannot obtain administration from \" + thing;\n  },\n  25: function _(property, name) {\n    return \"the entry '\" + property + \"' does not exist in the observable map '\" + name + \"'\";\n  },\n  26: \"please specify a property\",\n  27: function _(property, name) {\n    return \"no observable property '\" + property.toString() + \"' found on the observable object '\" + name + \"'\";\n  },\n  28: function _(thing) {\n    return \"Cannot obtain atom from \" + thing;\n  },\n  29: \"Expecting some object\",\n  30: \"invalid action stack. did you forget to finish an action?\",\n  31: \"missing option for computed: get\",\n  32: function _(name, derivation) {\n    return \"Cycle detected in computation \" + name + \": \" + derivation;\n  },\n  33: function _(name) {\n    return \"The setter of computed value '\" + name + \"' is trying to update itself. Did you intend to update an _observable_ value, instead of the computed property?\";\n  },\n  34: function _(name) {\n    return \"[ComputedValue '\" + name + \"'] It is not possible to assign a new value to a computed value.\";\n  },\n  35: \"There are multiple, different versions of MobX active. Make sure MobX is loaded only once or use `configure({ isolateGlobalState: true })`\",\n  36: \"isolateGlobalState should be called before MobX is running any reactions\",\n  37: function _(method) {\n    return \"[mobx] `observableArray.\" + method + \"()` mutates the array in-place, which is not allowed inside a derivation. Use `array.slice().\" + method + \"()` instead\";\n  },\n  38: \"'ownKeys()' can only be used on observable objects\",\n  39: \"'defineProperty()' can only be used on observable objects\"\n};\nvar errors = process.env.NODE_ENV !== \"production\" ? niceErrors : {};\nfunction die(error) {\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\n  if (process.env.NODE_ENV !== \"production\") {\n    var e = typeof error === \"string\" ? error : errors[error];\n    if (typeof e === \"function\") e = e.apply(null, args);\n    throw new Error(\"[MobX] \" + e);\n  }\n\n  throw new Error(typeof error === \"number\" ? \"[MobX] minified error nr: \" + error + (args.length ? \" \" + args.map(String).join(\",\") : \"\") + \". Find the full error at: https://github.com/mobxjs/mobx/blob/main/packages/mobx/src/errors.ts\" : \"[MobX] \" + error);\n}\n\nvar mockGlobal = {};\nfunction getGlobal() {\n  if (typeof globalThis !== \"undefined\") {\n    return globalThis;\n  }\n\n  if (typeof window !== \"undefined\") {\n    return window;\n  }\n\n  if (typeof global !== \"undefined\") {\n    return global;\n  }\n\n  if (typeof self !== \"undefined\") {\n    return self;\n  }\n\n  return mockGlobal;\n}\n\nvar assign = Object.assign;\nvar getDescriptor = Object.getOwnPropertyDescriptor;\nvar defineProperty = Object.defineProperty;\nvar objectPrototype = Object.prototype;\nvar EMPTY_ARRAY = [];\nObject.freeze(EMPTY_ARRAY);\nvar EMPTY_OBJECT = {};\nObject.freeze(EMPTY_OBJECT);\nvar hasProxy = typeof Proxy !== \"undefined\";\nvar plainObjectString = /*#__PURE__*/Object.toString();\nfunction assertProxies() {\n  if (!hasProxy) {\n    die(process.env.NODE_ENV !== \"production\" ? \"`Proxy` objects are not available in the current environment. Please configure MobX to enable a fallback implementation.`\" : \"Proxy not available\");\n  }\n}\nfunction warnAboutProxyRequirement(msg) {\n  if (process.env.NODE_ENV !== \"production\" && globalState.verifyProxies) {\n    die(\"MobX is currently configured to be able to run in ES5 mode, but in ES5 MobX won't be able to \" + msg);\n  }\n}\nfunction getNextId() {\n  return ++globalState.mobxGuid;\n}\n/**\r\n * Makes sure that the provided function is invoked at most once.\r\n */\n\nfunction once(func) {\n  var invoked = false;\n  return function () {\n    if (invoked) {\n      return;\n    }\n\n    invoked = true;\n    return func.apply(this, arguments);\n  };\n}\nvar noop = function noop() {};\nfunction isFunction(fn) {\n  return typeof fn === \"function\";\n}\nfunction isStringish(value) {\n  var t = typeof value;\n\n  switch (t) {\n    case \"string\":\n    case \"symbol\":\n    case \"number\":\n      return true;\n  }\n\n  return false;\n}\nfunction isObject(value) {\n  return value !== null && typeof value === \"object\";\n}\nfunction isPlainObject(value) {\n  if (!isObject(value)) {\n    return false;\n  }\n\n  var proto = Object.getPrototypeOf(value);\n\n  if (proto == null) {\n    return true;\n  }\n\n  var protoConstructor = Object.hasOwnProperty.call(proto, \"constructor\") && proto.constructor;\n  return typeof protoConstructor === \"function\" && protoConstructor.toString() === plainObjectString;\n} // https://stackoverflow.com/a/37865170\n\nfunction isGenerator(obj) {\n  var constructor = obj == null ? void 0 : obj.constructor;\n\n  if (!constructor) {\n    return false;\n  }\n\n  if (\"GeneratorFunction\" === constructor.name || \"GeneratorFunction\" === constructor.displayName) {\n    return true;\n  }\n\n  return false;\n}\nfunction addHiddenProp(object, propName, value) {\n  defineProperty(object, propName, {\n    enumerable: false,\n    writable: true,\n    configurable: true,\n    value: value\n  });\n}\nfunction addHiddenFinalProp(object, propName, value) {\n  defineProperty(object, propName, {\n    enumerable: false,\n    writable: false,\n    configurable: true,\n    value: value\n  });\n}\nfunction createInstanceofPredicate(name, theClass) {\n  var propName = \"isMobX\" + name;\n  theClass.prototype[propName] = true;\n  return function (x) {\n    return isObject(x) && x[propName] === true;\n  };\n}\nfunction isES6Map(thing) {\n  return thing instanceof Map;\n}\nfunction isES6Set(thing) {\n  return thing instanceof Set;\n}\nvar hasGetOwnPropertySymbols = typeof Object.getOwnPropertySymbols !== \"undefined\";\n/**\r\n * Returns the following: own enumerable keys and symbols.\r\n */\n\nfunction getPlainObjectKeys(object) {\n  var keys = Object.keys(object); // Not supported in IE, so there are not going to be symbol props anyway...\n\n  if (!hasGetOwnPropertySymbols) {\n    return keys;\n  }\n\n  var symbols = Object.getOwnPropertySymbols(object);\n\n  if (!symbols.length) {\n    return keys;\n  }\n\n  return [].concat(keys, symbols.filter(function (s) {\n    return objectPrototype.propertyIsEnumerable.call(object, s);\n  }));\n} // From Immer utils\n// Returns all own keys, including non-enumerable and symbolic\n\nvar ownKeys = typeof Reflect !== \"undefined\" && Reflect.ownKeys ? Reflect.ownKeys : hasGetOwnPropertySymbols ? function (obj) {\n  return Object.getOwnPropertyNames(obj).concat(Object.getOwnPropertySymbols(obj));\n} :\n/* istanbul ignore next */\nObject.getOwnPropertyNames;\nfunction stringifyKey(key) {\n  if (typeof key === \"string\") {\n    return key;\n  }\n\n  if (typeof key === \"symbol\") {\n    return key.toString();\n  }\n\n  return new String(key).toString();\n}\nfunction toPrimitive(value) {\n  return value === null ? null : typeof value === \"object\" ? \"\" + value : value;\n}\nfunction hasProp(target, prop) {\n  return objectPrototype.hasOwnProperty.call(target, prop);\n} // From Immer utils\n\nvar getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors || function getOwnPropertyDescriptors(target) {\n  // Polyfill needed for Hermes and IE, see https://github.com/facebook/hermes/issues/274\n  var res = {}; // Note: without polyfill for ownKeys, symbols won't be picked up\n\n  ownKeys(target).forEach(function (key) {\n    res[key] = getDescriptor(target, key);\n  });\n  return res;\n};\n\nfunction _defineProperties(target, props) {\n  for (var i = 0; i < props.length; i++) {\n    var descriptor = props[i];\n    descriptor.enumerable = descriptor.enumerable || false;\n    descriptor.configurable = true;\n    if (\"value\" in descriptor) descriptor.writable = true;\n    Object.defineProperty(target, descriptor.key, descriptor);\n  }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n  if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n  if (staticProps) _defineProperties(Constructor, staticProps);\n  Object.defineProperty(Constructor, \"prototype\", {\n    writable: false\n  });\n  return Constructor;\n}\n\nfunction _extends() {\n  _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n\n    return target;\n  };\n\n  return _extends.apply(this, arguments);\n}\n\nfunction _inheritsLoose(subClass, superClass) {\n  subClass.prototype = Object.create(superClass.prototype);\n  subClass.prototype.constructor = subClass;\n\n  _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n  _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n    o.__proto__ = p;\n    return o;\n  };\n\n  return _setPrototypeOf(o, p);\n}\n\nfunction _assertThisInitialized(self) {\n  if (self === void 0) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return self;\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n  if (!o) return;\n  if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n  var n = Object.prototype.toString.call(o).slice(8, -1);\n  if (n === \"Object\" && o.constructor) n = o.constructor.name;\n  if (n === \"Map\" || n === \"Set\") return Array.from(o);\n  if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n  if (len == null || len > arr.length) len = arr.length;\n\n  for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n  return arr2;\n}\n\nfunction _createForOfIteratorHelperLoose(o, allowArrayLike) {\n  var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"];\n  if (it) return (it = it.call(o)).next.bind(it);\n\n  if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n    if (it) o = it;\n    var i = 0;\n    return function () {\n      if (i >= o.length) return {\n        done: true\n      };\n      return {\n        done: false,\n        value: o[i++]\n      };\n    };\n  }\n\n  throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar storedAnnotationsSymbol = /*#__PURE__*/Symbol(\"mobx-stored-annotations\");\n/**\r\n * Creates a function that acts as\r\n * - decorator\r\n * - annotation object\r\n */\n\nfunction createDecoratorAnnotation(annotation) {\n  function decorator(target, property) {\n    storeAnnotation(target, property, annotation);\n  }\n\n  return Object.assign(decorator, annotation);\n}\n/**\r\n * Stores annotation to prototype,\r\n * so it can be inspected later by `makeObservable` called from constructor\r\n */\n\nfunction storeAnnotation(prototype, key, annotation) {\n  if (!hasProp(prototype, storedAnnotationsSymbol)) {\n    addHiddenProp(prototype, storedAnnotationsSymbol, _extends({}, prototype[storedAnnotationsSymbol]));\n  } // @override must override something\n\n\n  if (process.env.NODE_ENV !== \"production\" && isOverride(annotation) && !hasProp(prototype[storedAnnotationsSymbol], key)) {\n    var fieldName = prototype.constructor.name + \".prototype.\" + key.toString();\n    die(\"'\" + fieldName + \"' is decorated with 'override', \" + \"but no such decorated member was found on prototype.\");\n  } // Cannot re-decorate\n\n\n  assertNotDecorated(prototype, annotation, key); // Ignore override\n\n  if (!isOverride(annotation)) {\n    prototype[storedAnnotationsSymbol][key] = annotation;\n  }\n}\n\nfunction assertNotDecorated(prototype, annotation, key) {\n  if (process.env.NODE_ENV !== \"production\" && !isOverride(annotation) && hasProp(prototype[storedAnnotationsSymbol], key)) {\n    var fieldName = prototype.constructor.name + \".prototype.\" + key.toString();\n    var currentAnnotationType = prototype[storedAnnotationsSymbol][key].annotationType_;\n    var requestedAnnotationType = annotation.annotationType_;\n    die(\"Cannot apply '@\" + requestedAnnotationType + \"' to '\" + fieldName + \"':\" + (\"\\nThe field is already decorated with '@\" + currentAnnotationType + \"'.\") + \"\\nRe-decorating fields is not allowed.\" + \"\\nUse '@override' decorator for methods overridden by subclass.\");\n  }\n}\n/**\r\n * Collects annotations from prototypes and stores them on target (instance)\r\n */\n\n\nfunction collectStoredAnnotations(target) {\n  if (!hasProp(target, storedAnnotationsSymbol)) {\n    if (process.env.NODE_ENV !== \"production\" && !target[storedAnnotationsSymbol]) {\n      die(\"No annotations were passed to makeObservable, but no decorated members have been found either\");\n    } // We need a copy as we will remove annotation from the list once it's applied.\n\n\n    addHiddenProp(target, storedAnnotationsSymbol, _extends({}, target[storedAnnotationsSymbol]));\n  }\n\n  return target[storedAnnotationsSymbol];\n}\n\nvar $mobx = /*#__PURE__*/Symbol(\"mobx administration\");\nvar Atom = /*#__PURE__*/function () {\n  // for effective unobserving. BaseAtom has true, for extra optimization, so its onBecomeUnobserved never gets called, because it's not needed\n\n  /**\r\n   * Create a new atom. For debugging purposes it is recommended to give it a name.\r\n   * The onBecomeObserved and onBecomeUnobserved callbacks can be used for resource management.\r\n   */\n  function Atom(name_) {\n    if (name_ === void 0) {\n      name_ = process.env.NODE_ENV !== \"production\" ? \"Atom@\" + getNextId() : \"Atom\";\n    }\n\n    this.name_ = void 0;\n    this.isPendingUnobservation_ = false;\n    this.isBeingObserved_ = false;\n    this.observers_ = new Set();\n    this.diffValue_ = 0;\n    this.lastAccessedBy_ = 0;\n    this.lowestObserverState_ = IDerivationState_.NOT_TRACKING_;\n    this.onBOL = void 0;\n    this.onBUOL = void 0;\n    this.name_ = name_;\n  } // onBecomeObservedListeners\n\n\n  var _proto = Atom.prototype;\n\n  _proto.onBO = function onBO() {\n    if (this.onBOL) {\n      this.onBOL.forEach(function (listener) {\n        return listener();\n      });\n    }\n  };\n\n  _proto.onBUO = function onBUO() {\n    if (this.onBUOL) {\n      this.onBUOL.forEach(function (listener) {\n        return listener();\n      });\n    }\n  }\n  /**\r\n   * Invoke this method to notify mobx that your atom has been used somehow.\r\n   * Returns true if there is currently a reactive context.\r\n   */\n  ;\n\n  _proto.reportObserved = function reportObserved$1() {\n    return reportObserved(this);\n  }\n  /**\r\n   * Invoke this method _after_ this method has changed to signal mobx that all its observers should invalidate.\r\n   */\n  ;\n\n  _proto.reportChanged = function reportChanged() {\n    startBatch();\n    propagateChanged(this);\n    endBatch();\n  };\n\n  _proto.toString = function toString() {\n    return this.name_;\n  };\n\n  return Atom;\n}();\nvar isAtom = /*#__PURE__*/createInstanceofPredicate(\"Atom\", Atom);\nfunction createAtom(name, onBecomeObservedHandler, onBecomeUnobservedHandler) {\n  if (onBecomeObservedHandler === void 0) {\n    onBecomeObservedHandler = noop;\n  }\n\n  if (onBecomeUnobservedHandler === void 0) {\n    onBecomeUnobservedHandler = noop;\n  }\n\n  var atom = new Atom(name); // default `noop` listener will not initialize the hook Set\n\n  if (onBecomeObservedHandler !== noop) {\n    onBecomeObserved(atom, onBecomeObservedHandler);\n  }\n\n  if (onBecomeUnobservedHandler !== noop) {\n    onBecomeUnobserved(atom, onBecomeUnobservedHandler);\n  }\n\n  return atom;\n}\n\nfunction identityComparer(a, b) {\n  return a === b;\n}\n\nfunction structuralComparer(a, b) {\n  return deepEqual(a, b);\n}\n\nfunction shallowComparer(a, b) {\n  return deepEqual(a, b, 1);\n}\n\nfunction defaultComparer(a, b) {\n  if (Object.is) {\n    return Object.is(a, b);\n  }\n\n  return a === b ? a !== 0 || 1 / a === 1 / b : a !== a && b !== b;\n}\n\nvar comparer = {\n  identity: identityComparer,\n  structural: structuralComparer,\n  \"default\": defaultComparer,\n  shallow: shallowComparer\n};\n\nfunction deepEnhancer(v, _, name) {\n  // it is an observable already, done\n  if (isObservable(v)) {\n    return v;\n  } // something that can be converted and mutated?\n\n\n  if (Array.isArray(v)) {\n    return observable.array(v, {\n      name: name\n    });\n  }\n\n  if (isPlainObject(v)) {\n    return observable.object(v, undefined, {\n      name: name\n    });\n  }\n\n  if (isES6Map(v)) {\n    return observable.map(v, {\n      name: name\n    });\n  }\n\n  if (isES6Set(v)) {\n    return observable.set(v, {\n      name: name\n    });\n  }\n\n  if (typeof v === \"function\" && !isAction(v) && !isFlow(v)) {\n    if (isGenerator(v)) {\n      return flow(v);\n    } else {\n      return autoAction(name, v);\n    }\n  }\n\n  return v;\n}\nfunction shallowEnhancer(v, _, name) {\n  if (v === undefined || v === null) {\n    return v;\n  }\n\n  if (isObservableObject(v) || isObservableArray(v) || isObservableMap(v) || isObservableSet(v)) {\n    return v;\n  }\n\n  if (Array.isArray(v)) {\n    return observable.array(v, {\n      name: name,\n      deep: false\n    });\n  }\n\n  if (isPlainObject(v)) {\n    return observable.object(v, undefined, {\n      name: name,\n      deep: false\n    });\n  }\n\n  if (isES6Map(v)) {\n    return observable.map(v, {\n      name: name,\n      deep: false\n    });\n  }\n\n  if (isES6Set(v)) {\n    return observable.set(v, {\n      name: name,\n      deep: false\n    });\n  }\n\n  if (process.env.NODE_ENV !== \"production\") {\n    die(\"The shallow modifier / decorator can only used in combination with arrays, objects, maps and sets\");\n  }\n}\nfunction referenceEnhancer(newValue) {\n  // never turn into an observable\n  return newValue;\n}\nfunction refStructEnhancer(v, oldValue) {\n  if (process.env.NODE_ENV !== \"production\" && isObservable(v)) {\n    die(\"observable.struct should not be used with observable values\");\n  }\n\n  if (deepEqual(v, oldValue)) {\n    return oldValue;\n  }\n\n  return v;\n}\n\nvar OVERRIDE = \"override\";\nvar override = /*#__PURE__*/createDecoratorAnnotation({\n  annotationType_: OVERRIDE,\n  make_: make_,\n  extend_: extend_\n});\nfunction isOverride(annotation) {\n  return annotation.annotationType_ === OVERRIDE;\n}\n\nfunction make_(adm, key) {\n  // Must not be plain object\n  if (process.env.NODE_ENV !== \"production\" && adm.isPlainObject_) {\n    die(\"Cannot apply '\" + this.annotationType_ + \"' to '\" + adm.name_ + \".\" + key.toString() + \"':\" + (\"\\n'\" + this.annotationType_ + \"' cannot be used on plain objects.\"));\n  } // Must override something\n\n\n  if (process.env.NODE_ENV !== \"production\" && !hasProp(adm.appliedAnnotations_, key)) {\n    die(\"'\" + adm.name_ + \".\" + key.toString() + \"' is annotated with '\" + this.annotationType_ + \"', \" + \"but no such annotated member was found on prototype.\");\n  }\n\n  return 0\n  /* Cancel */\n  ;\n}\n\nfunction extend_(adm, key, descriptor, proxyTrap) {\n  die(\"'\" + this.annotationType_ + \"' can only be used with 'makeObservable'\");\n}\n\nfunction createActionAnnotation(name, options) {\n  return {\n    annotationType_: name,\n    options_: options,\n    make_: make_$1,\n    extend_: extend_$1\n  };\n}\n\nfunction make_$1(adm, key, descriptor, source) {\n  var _this$options_;\n\n  // bound\n  if ((_this$options_ = this.options_) != null && _this$options_.bound) {\n    return this.extend_(adm, key, descriptor, false) === null ? 0\n    /* Cancel */\n    : 1\n    /* Break */\n    ;\n  } // own\n\n\n  if (source === adm.target_) {\n    return this.extend_(adm, key, descriptor, false) === null ? 0\n    /* Cancel */\n    : 2\n    /* Continue */\n    ;\n  } // prototype\n\n\n  if (isAction(descriptor.value)) {\n    // A prototype could have been annotated already by other constructor,\n    // rest of the proto chain must be annotated already\n    return 1\n    /* Break */\n    ;\n  }\n\n  var actionDescriptor = createActionDescriptor(adm, this, key, descriptor, false);\n  defineProperty(source, key, actionDescriptor);\n  return 2\n  /* Continue */\n  ;\n}\n\nfunction extend_$1(adm, key, descriptor, proxyTrap) {\n  var actionDescriptor = createActionDescriptor(adm, this, key, descriptor);\n  return adm.defineProperty_(key, actionDescriptor, proxyTrap);\n}\n\nfunction assertActionDescriptor(adm, _ref, key, _ref2) {\n  var annotationType_ = _ref.annotationType_;\n  var value = _ref2.value;\n\n  if (process.env.NODE_ENV !== \"production\" && !isFunction(value)) {\n    die(\"Cannot apply '\" + annotationType_ + \"' to '\" + adm.name_ + \".\" + key.toString() + \"':\" + (\"\\n'\" + annotationType_ + \"' can only be used on properties with a function value.\"));\n  }\n}\n\nfunction createActionDescriptor(adm, annotation, key, descriptor, // provides ability to disable safeDescriptors for prototypes\nsafeDescriptors) {\n  var _annotation$options_, _annotation$options_$, _annotation$options_2, _annotation$options_$2, _annotation$options_3, _annotation$options_4, _adm$proxy_2;\n\n  if (safeDescriptors === void 0) {\n    safeDescriptors = globalState.safeDescriptors;\n  }\n\n  assertActionDescriptor(adm, annotation, key, descriptor);\n  var value = descriptor.value;\n\n  if ((_annotation$options_ = annotation.options_) != null && _annotation$options_.bound) {\n    var _adm$proxy_;\n\n    value = value.bind((_adm$proxy_ = adm.proxy_) != null ? _adm$proxy_ : adm.target_);\n  }\n\n  return {\n    value: createAction((_annotation$options_$ = (_annotation$options_2 = annotation.options_) == null ? void 0 : _annotation$options_2.name) != null ? _annotation$options_$ : key.toString(), value, (_annotation$options_$2 = (_annotation$options_3 = annotation.options_) == null ? void 0 : _annotation$options_3.autoAction) != null ? _annotation$options_$2 : false, // https://github.com/mobxjs/mobx/discussions/3140\n    (_annotation$options_4 = annotation.options_) != null && _annotation$options_4.bound ? (_adm$proxy_2 = adm.proxy_) != null ? _adm$proxy_2 : adm.target_ : undefined),\n    // Non-configurable for classes\n    // prevents accidental field redefinition in subclass\n    configurable: safeDescriptors ? adm.isPlainObject_ : true,\n    // https://github.com/mobxjs/mobx/pull/2641#issuecomment-737292058\n    enumerable: false,\n    // Non-obsevable, therefore non-writable\n    // Also prevents rewriting in subclass constructor\n    writable: safeDescriptors ? false : true\n  };\n}\n\nfunction createFlowAnnotation(name, options) {\n  return {\n    annotationType_: name,\n    options_: options,\n    make_: make_$2,\n    extend_: extend_$2\n  };\n}\n\nfunction make_$2(adm, key, descriptor, source) {\n  var _this$options_;\n\n  // own\n  if (source === adm.target_) {\n    return this.extend_(adm, key, descriptor, false) === null ? 0\n    /* Cancel */\n    : 2\n    /* Continue */\n    ;\n  } // prototype\n  // bound - must annotate protos to support super.flow()\n\n\n  if ((_this$options_ = this.options_) != null && _this$options_.bound && (!hasProp(adm.target_, key) || !isFlow(adm.target_[key]))) {\n    if (this.extend_(adm, key, descriptor, false) === null) {\n      return 0\n      /* Cancel */\n      ;\n    }\n  }\n\n  if (isFlow(descriptor.value)) {\n    // A prototype could have been annotated already by other constructor,\n    // rest of the proto chain must be annotated already\n    return 1\n    /* Break */\n    ;\n  }\n\n  var flowDescriptor = createFlowDescriptor(adm, this, key, descriptor, false, false);\n  defineProperty(source, key, flowDescriptor);\n  return 2\n  /* Continue */\n  ;\n}\n\nfunction extend_$2(adm, key, descriptor, proxyTrap) {\n  var _this$options_2;\n\n  var flowDescriptor = createFlowDescriptor(adm, this, key, descriptor, (_this$options_2 = this.options_) == null ? void 0 : _this$options_2.bound);\n  return adm.defineProperty_(key, flowDescriptor, proxyTrap);\n}\n\nfunction assertFlowDescriptor(adm, _ref, key, _ref2) {\n  var annotationType_ = _ref.annotationType_;\n  var value = _ref2.value;\n\n  if (process.env.NODE_ENV !== \"production\" && !isFunction(value)) {\n    die(\"Cannot apply '\" + annotationType_ + \"' to '\" + adm.name_ + \".\" + key.toString() + \"':\" + (\"\\n'\" + annotationType_ + \"' can only be used on properties with a generator function value.\"));\n  }\n}\n\nfunction createFlowDescriptor(adm, annotation, key, descriptor, bound, // provides ability to disable safeDescriptors for prototypes\nsafeDescriptors) {\n  if (safeDescriptors === void 0) {\n    safeDescriptors = globalState.safeDescriptors;\n  }\n\n  assertFlowDescriptor(adm, annotation, key, descriptor);\n  var value = descriptor.value; // In case of flow.bound, the descriptor can be from already annotated prototype\n\n  if (!isFlow(value)) {\n    value = flow(value);\n  }\n\n  if (bound) {\n    var _adm$proxy_;\n\n    // We do not keep original function around, so we bind the existing flow\n    value = value.bind((_adm$proxy_ = adm.proxy_) != null ? _adm$proxy_ : adm.target_); // This is normally set by `flow`, but `bind` returns new function...\n\n    value.isMobXFlow = true;\n  }\n\n  return {\n    value: value,\n    // Non-configurable for classes\n    // prevents accidental field redefinition in subclass\n    configurable: safeDescriptors ? adm.isPlainObject_ : true,\n    // https://github.com/mobxjs/mobx/pull/2641#issuecomment-737292058\n    enumerable: false,\n    // Non-obsevable, therefore non-writable\n    // Also prevents rewriting in subclass constructor\n    writable: safeDescriptors ? false : true\n  };\n}\n\nfunction createComputedAnnotation(name, options) {\n  return {\n    annotationType_: name,\n    options_: options,\n    make_: make_$3,\n    extend_: extend_$3\n  };\n}\n\nfunction make_$3(adm, key, descriptor) {\n  return this.extend_(adm, key, descriptor, false) === null ? 0\n  /* Cancel */\n  : 1\n  /* Break */\n  ;\n}\n\nfunction extend_$3(adm, key, descriptor, proxyTrap) {\n  assertComputedDescriptor(adm, this, key, descriptor);\n  return adm.defineComputedProperty_(key, _extends({}, this.options_, {\n    get: descriptor.get,\n    set: descriptor.set\n  }), proxyTrap);\n}\n\nfunction assertComputedDescriptor(adm, _ref, key, _ref2) {\n  var annotationType_ = _ref.annotationType_;\n  var get = _ref2.get;\n\n  if (process.env.NODE_ENV !== \"production\" && !get) {\n    die(\"Cannot apply '\" + annotationType_ + \"' to '\" + adm.name_ + \".\" + key.toString() + \"':\" + (\"\\n'\" + annotationType_ + \"' can only be used on getter(+setter) properties.\"));\n  }\n}\n\nfunction createObservableAnnotation(name, options) {\n  return {\n    annotationType_: name,\n    options_: options,\n    make_: make_$4,\n    extend_: extend_$4\n  };\n}\n\nfunction make_$4(adm, key, descriptor) {\n  return this.extend_(adm, key, descriptor, false) === null ? 0\n  /* Cancel */\n  : 1\n  /* Break */\n  ;\n}\n\nfunction extend_$4(adm, key, descriptor, proxyTrap) {\n  var _this$options_$enhanc, _this$options_;\n\n  assertObservableDescriptor(adm, this, key, descriptor);\n  return adm.defineObservableProperty_(key, descriptor.value, (_this$options_$enhanc = (_this$options_ = this.options_) == null ? void 0 : _this$options_.enhancer) != null ? _this$options_$enhanc : deepEnhancer, proxyTrap);\n}\n\nfunction assertObservableDescriptor(adm, _ref, key, descriptor) {\n  var annotationType_ = _ref.annotationType_;\n\n  if (process.env.NODE_ENV !== \"production\" && !(\"value\" in descriptor)) {\n    die(\"Cannot apply '\" + annotationType_ + \"' to '\" + adm.name_ + \".\" + key.toString() + \"':\" + (\"\\n'\" + annotationType_ + \"' cannot be used on getter/setter properties\"));\n  }\n}\n\nvar AUTO = \"true\";\nvar autoAnnotation = /*#__PURE__*/createAutoAnnotation();\nfunction createAutoAnnotation(options) {\n  return {\n    annotationType_: AUTO,\n    options_: options,\n    make_: make_$5,\n    extend_: extend_$5\n  };\n}\n\nfunction make_$5(adm, key, descriptor, source) {\n  var _this$options_3, _this$options_4;\n\n  // getter -> computed\n  if (descriptor.get) {\n    return computed.make_(adm, key, descriptor, source);\n  } // lone setter -> action setter\n\n\n  if (descriptor.set) {\n    // TODO make action applicable to setter and delegate to action.make_\n    var set = createAction(key.toString(), descriptor.set); // own\n\n    if (source === adm.target_) {\n      return adm.defineProperty_(key, {\n        configurable: globalState.safeDescriptors ? adm.isPlainObject_ : true,\n        set: set\n      }) === null ? 0\n      /* Cancel */\n      : 2\n      /* Continue */\n      ;\n    } // proto\n\n\n    defineProperty(source, key, {\n      configurable: true,\n      set: set\n    });\n    return 2\n    /* Continue */\n    ;\n  } // function on proto -> autoAction/flow\n\n\n  if (source !== adm.target_ && typeof descriptor.value === \"function\") {\n    var _this$options_2;\n\n    if (isGenerator(descriptor.value)) {\n      var _this$options_;\n\n      var flowAnnotation = (_this$options_ = this.options_) != null && _this$options_.autoBind ? flow.bound : flow;\n      return flowAnnotation.make_(adm, key, descriptor, source);\n    }\n\n    var actionAnnotation = (_this$options_2 = this.options_) != null && _this$options_2.autoBind ? autoAction.bound : autoAction;\n    return actionAnnotation.make_(adm, key, descriptor, source);\n  } // other -> observable\n  // Copy props from proto as well, see test:\n  // \"decorate should work with Object.create\"\n\n\n  var observableAnnotation = ((_this$options_3 = this.options_) == null ? void 0 : _this$options_3.deep) === false ? observable.ref : observable; // if function respect autoBind option\n\n  if (typeof descriptor.value === \"function\" && (_this$options_4 = this.options_) != null && _this$options_4.autoBind) {\n    var _adm$proxy_;\n\n    descriptor.value = descriptor.value.bind((_adm$proxy_ = adm.proxy_) != null ? _adm$proxy_ : adm.target_);\n  }\n\n  return observableAnnotation.make_(adm, key, descriptor, source);\n}\n\nfunction extend_$5(adm, key, descriptor, proxyTrap) {\n  var _this$options_5, _this$options_6;\n\n  // getter -> computed\n  if (descriptor.get) {\n    return computed.extend_(adm, key, descriptor, proxyTrap);\n  } // lone setter -> action setter\n\n\n  if (descriptor.set) {\n    // TODO make action applicable to setter and delegate to action.extend_\n    return adm.defineProperty_(key, {\n      configurable: globalState.safeDescriptors ? adm.isPlainObject_ : true,\n      set: createAction(key.toString(), descriptor.set)\n    }, proxyTrap);\n  } // other -> observable\n  // if function respect autoBind option\n\n\n  if (typeof descriptor.value === \"function\" && (_this$options_5 = this.options_) != null && _this$options_5.autoBind) {\n    var _adm$proxy_2;\n\n    descriptor.value = descriptor.value.bind((_adm$proxy_2 = adm.proxy_) != null ? _adm$proxy_2 : adm.target_);\n  }\n\n  var observableAnnotation = ((_this$options_6 = this.options_) == null ? void 0 : _this$options_6.deep) === false ? observable.ref : observable;\n  return observableAnnotation.extend_(adm, key, descriptor, proxyTrap);\n}\n\nvar OBSERVABLE = \"observable\";\nvar OBSERVABLE_REF = \"observable.ref\";\nvar OBSERVABLE_SHALLOW = \"observable.shallow\";\nvar OBSERVABLE_STRUCT = \"observable.struct\"; // Predefined bags of create observable options, to avoid allocating temporarily option objects\n// in the majority of cases\n\nvar defaultCreateObservableOptions = {\n  deep: true,\n  name: undefined,\n  defaultDecorator: undefined,\n  proxy: true\n};\nObject.freeze(defaultCreateObservableOptions);\nfunction asCreateObservableOptions(thing) {\n  return thing || defaultCreateObservableOptions;\n}\nvar observableAnnotation = /*#__PURE__*/createObservableAnnotation(OBSERVABLE);\nvar observableRefAnnotation = /*#__PURE__*/createObservableAnnotation(OBSERVABLE_REF, {\n  enhancer: referenceEnhancer\n});\nvar observableShallowAnnotation = /*#__PURE__*/createObservableAnnotation(OBSERVABLE_SHALLOW, {\n  enhancer: shallowEnhancer\n});\nvar observableStructAnnotation = /*#__PURE__*/createObservableAnnotation(OBSERVABLE_STRUCT, {\n  enhancer: refStructEnhancer\n});\nvar observableDecoratorAnnotation = /*#__PURE__*/createDecoratorAnnotation(observableAnnotation);\nfunction getEnhancerFromOptions(options) {\n  return options.deep === true ? deepEnhancer : options.deep === false ? referenceEnhancer : getEnhancerFromAnnotation(options.defaultDecorator);\n}\nfunction getAnnotationFromOptions(options) {\n  var _options$defaultDecor;\n\n  return options ? (_options$defaultDecor = options.defaultDecorator) != null ? _options$defaultDecor : createAutoAnnotation(options) : undefined;\n}\nfunction getEnhancerFromAnnotation(annotation) {\n  var _annotation$options_$, _annotation$options_;\n\n  return !annotation ? deepEnhancer : (_annotation$options_$ = (_annotation$options_ = annotation.options_) == null ? void 0 : _annotation$options_.enhancer) != null ? _annotation$options_$ : deepEnhancer;\n}\n/**\r\n * Turns an object, array or function into a reactive structure.\r\n * @param v the value which should become observable.\r\n */\n\nfunction createObservable(v, arg2, arg3) {\n  // @observable someProp;\n  if (isStringish(arg2)) {\n    storeAnnotation(v, arg2, observableAnnotation);\n    return;\n  } // already observable - ignore\n\n\n  if (isObservable(v)) {\n    return v;\n  } // plain object\n\n\n  if (isPlainObject(v)) {\n    return observable.object(v, arg2, arg3);\n  } // Array\n\n\n  if (Array.isArray(v)) {\n    return observable.array(v, arg2);\n  } // Map\n\n\n  if (isES6Map(v)) {\n    return observable.map(v, arg2);\n  } // Set\n\n\n  if (isES6Set(v)) {\n    return observable.set(v, arg2);\n  } // other object - ignore\n\n\n  if (typeof v === \"object\" && v !== null) {\n    return v;\n  } // anything else\n\n\n  return observable.box(v, arg2);\n}\n\nObject.assign(createObservable, observableDecoratorAnnotation);\nvar observableFactories = {\n  box: function box(value, options) {\n    var o = asCreateObservableOptions(options);\n    return new ObservableValue(value, getEnhancerFromOptions(o), o.name, true, o.equals);\n  },\n  array: function array(initialValues, options) {\n    var o = asCreateObservableOptions(options);\n    return (globalState.useProxies === false || o.proxy === false ? createLegacyArray : createObservableArray)(initialValues, getEnhancerFromOptions(o), o.name);\n  },\n  map: function map(initialValues, options) {\n    var o = asCreateObservableOptions(options);\n    return new ObservableMap(initialValues, getEnhancerFromOptions(o), o.name);\n  },\n  set: function set(initialValues, options) {\n    var o = asCreateObservableOptions(options);\n    return new ObservableSet(initialValues, getEnhancerFromOptions(o), o.name);\n  },\n  object: function object(props, decorators, options) {\n    return extendObservable(globalState.useProxies === false || (options == null ? void 0 : options.proxy) === false ? asObservableObject({}, options) : asDynamicObservableObject({}, options), props, decorators);\n  },\n  ref: /*#__PURE__*/createDecoratorAnnotation(observableRefAnnotation),\n  shallow: /*#__PURE__*/createDecoratorAnnotation(observableShallowAnnotation),\n  deep: observableDecoratorAnnotation,\n  struct: /*#__PURE__*/createDecoratorAnnotation(observableStructAnnotation)\n}; // eslint-disable-next-line\n\nvar observable = /*#__PURE__*/assign(createObservable, observableFactories);\n\nvar COMPUTED = \"computed\";\nvar COMPUTED_STRUCT = \"computed.struct\";\nvar computedAnnotation = /*#__PURE__*/createComputedAnnotation(COMPUTED);\nvar computedStructAnnotation = /*#__PURE__*/createComputedAnnotation(COMPUTED_STRUCT, {\n  equals: comparer.structural\n});\n/**\r\n * Decorator for class properties: @computed get value() { return expr; }.\r\n * For legacy purposes also invokable as ES5 observable created: `computed(() => expr)`;\r\n */\n\nvar computed = function computed(arg1, arg2) {\n  if (isStringish(arg2)) {\n    // @computed\n    return storeAnnotation(arg1, arg2, computedAnnotation);\n  }\n\n  if (isPlainObject(arg1)) {\n    // @computed({ options })\n    return createDecoratorAnnotation(createComputedAnnotation(COMPUTED, arg1));\n  } // computed(expr, options?)\n\n\n  if (process.env.NODE_ENV !== \"production\") {\n    if (!isFunction(arg1)) {\n      die(\"First argument to `computed` should be an expression.\");\n    }\n\n    if (isFunction(arg2)) {\n      die(\"A setter as second argument is no longer supported, use `{ set: fn }` option instead\");\n    }\n  }\n\n  var opts = isPlainObject(arg2) ? arg2 : {};\n  opts.get = arg1;\n  opts.name || (opts.name = arg1.name || \"\");\n  /* for generated name */\n\n  return new ComputedValue(opts);\n};\nObject.assign(computed, computedAnnotation);\ncomputed.struct = /*#__PURE__*/createDecoratorAnnotation(computedStructAnnotation);\n\nvar _getDescriptor$config, _getDescriptor;\n// mobx versions\n\nvar currentActionId = 0;\nvar nextActionId = 1;\nvar isFunctionNameConfigurable = (_getDescriptor$config = (_getDescriptor = /*#__PURE__*/getDescriptor(function () {}, \"name\")) == null ? void 0 : _getDescriptor.configurable) != null ? _getDescriptor$config : false; // we can safely recycle this object\n\nvar tmpNameDescriptor = {\n  value: \"action\",\n  configurable: true,\n  writable: false,\n  enumerable: false\n};\nfunction createAction(actionName, fn, autoAction, ref) {\n  if (autoAction === void 0) {\n    autoAction = false;\n  }\n\n  if (process.env.NODE_ENV !== \"production\") {\n    if (!isFunction(fn)) {\n      die(\"`action` can only be invoked on functions\");\n    }\n\n    if (typeof actionName !== \"string\" || !actionName) {\n      die(\"actions should have valid names, got: '\" + actionName + \"'\");\n    }\n  }\n\n  function res() {\n    return executeAction(actionName, autoAction, fn, ref || this, arguments);\n  }\n\n  res.isMobxAction = true;\n\n  if (isFunctionNameConfigurable) {\n    tmpNameDescriptor.value = actionName;\n    Object.defineProperty(res, \"name\", tmpNameDescriptor);\n  }\n\n  return res;\n}\nfunction executeAction(actionName, canRunAsDerivation, fn, scope, args) {\n  var runInfo = _startAction(actionName, canRunAsDerivation, scope, args);\n\n  try {\n    return fn.apply(scope, args);\n  } catch (err) {\n    runInfo.error_ = err;\n    throw err;\n  } finally {\n    _endAction(runInfo);\n  }\n}\nfunction _startAction(actionName, canRunAsDerivation, // true for autoAction\nscope, args) {\n  var notifySpy_ = process.env.NODE_ENV !== \"production\" && isSpyEnabled() && !!actionName;\n  var startTime_ = 0;\n\n  if (process.env.NODE_ENV !== \"production\" && notifySpy_) {\n    startTime_ = Date.now();\n    var flattenedArgs = args ? Array.from(args) : EMPTY_ARRAY;\n    spyReportStart({\n      type: ACTION,\n      name: actionName,\n      object: scope,\n      arguments: flattenedArgs\n    });\n  }\n\n  var prevDerivation_ = globalState.trackingDerivation;\n  var runAsAction = !canRunAsDerivation || !prevDerivation_;\n  startBatch();\n  var prevAllowStateChanges_ = globalState.allowStateChanges; // by default preserve previous allow\n\n  if (runAsAction) {\n    untrackedStart();\n    prevAllowStateChanges_ = allowStateChangesStart(true);\n  }\n\n  var prevAllowStateReads_ = allowStateReadsStart(true);\n  var runInfo = {\n    runAsAction_: runAsAction,\n    prevDerivation_: prevDerivation_,\n    prevAllowStateChanges_: prevAllowStateChanges_,\n    prevAllowStateReads_: prevAllowStateReads_,\n    notifySpy_: notifySpy_,\n    startTime_: startTime_,\n    actionId_: nextActionId++,\n    parentActionId_: currentActionId\n  };\n  currentActionId = runInfo.actionId_;\n  return runInfo;\n}\nfunction _endAction(runInfo) {\n  if (currentActionId !== runInfo.actionId_) {\n    die(30);\n  }\n\n  currentActionId = runInfo.parentActionId_;\n\n  if (runInfo.error_ !== undefined) {\n    globalState.suppressReactionErrors = true;\n  }\n\n  allowStateChangesEnd(runInfo.prevAllowStateChanges_);\n  allowStateReadsEnd(runInfo.prevAllowStateReads_);\n  endBatch();\n\n  if (runInfo.runAsAction_) {\n    untrackedEnd(runInfo.prevDerivation_);\n  }\n\n  if (process.env.NODE_ENV !== \"production\" && runInfo.notifySpy_) {\n    spyReportEnd({\n      time: Date.now() - runInfo.startTime_\n    });\n  }\n\n  globalState.suppressReactionErrors = false;\n}\nfunction allowStateChanges(allowStateChanges, func) {\n  var prev = allowStateChangesStart(allowStateChanges);\n\n  try {\n    return func();\n  } finally {\n    allowStateChangesEnd(prev);\n  }\n}\nfunction allowStateChangesStart(allowStateChanges) {\n  var prev = globalState.allowStateChanges;\n  globalState.allowStateChanges = allowStateChanges;\n  return prev;\n}\nfunction allowStateChangesEnd(prev) {\n  globalState.allowStateChanges = prev;\n}\n\nvar _Symbol$toPrimitive;\nvar CREATE = \"create\";\n_Symbol$toPrimitive = Symbol.toPrimitive;\nvar ObservableValue = /*#__PURE__*/function (_Atom) {\n  _inheritsLoose(ObservableValue, _Atom);\n\n  function ObservableValue(value, enhancer, name_, notifySpy, equals) {\n    var _this;\n\n    if (name_ === void 0) {\n      name_ = process.env.NODE_ENV !== \"production\" ? \"ObservableValue@\" + getNextId() : \"ObservableValue\";\n    }\n\n    if (notifySpy === void 0) {\n      notifySpy = true;\n    }\n\n    if (equals === void 0) {\n      equals = comparer[\"default\"];\n    }\n\n    _this = _Atom.call(this, name_) || this;\n    _this.enhancer = void 0;\n    _this.name_ = void 0;\n    _this.equals = void 0;\n    _this.hasUnreportedChange_ = false;\n    _this.interceptors_ = void 0;\n    _this.changeListeners_ = void 0;\n    _this.value_ = void 0;\n    _this.dehancer = void 0;\n    _this.enhancer = enhancer;\n    _this.name_ = name_;\n    _this.equals = equals;\n    _this.value_ = enhancer(value, undefined, name_);\n\n    if (process.env.NODE_ENV !== \"production\" && notifySpy && isSpyEnabled()) {\n      // only notify spy if this is a stand-alone observable\n      spyReport({\n        type: CREATE,\n        object: _assertThisInitialized(_this),\n        observableKind: \"value\",\n        debugObjectName: _this.name_,\n        newValue: \"\" + _this.value_\n      });\n    }\n\n    return _this;\n  }\n\n  var _proto = ObservableValue.prototype;\n\n  _proto.dehanceValue = function dehanceValue(value) {\n    if (this.dehancer !== undefined) {\n      return this.dehancer(value);\n    }\n\n    return value;\n  };\n\n  _proto.set = function set(newValue) {\n    var oldValue = this.value_;\n    newValue = this.prepareNewValue_(newValue);\n\n    if (newValue !== globalState.UNCHANGED) {\n      var notifySpy = isSpyEnabled();\n\n      if (process.env.NODE_ENV !== \"production\" && notifySpy) {\n        spyReportStart({\n          type: UPDATE,\n          object: this,\n          observableKind: \"value\",\n          debugObjectName: this.name_,\n          newValue: newValue,\n          oldValue: oldValue\n        });\n      }\n\n      this.setNewValue_(newValue);\n\n      if (process.env.NODE_ENV !== \"production\" && notifySpy) {\n        spyReportEnd();\n      }\n    }\n  };\n\n  _proto.prepareNewValue_ = function prepareNewValue_(newValue) {\n    checkIfStateModificationsAreAllowed(this);\n\n    if (hasInterceptors(this)) {\n      var change = interceptChange(this, {\n        object: this,\n        type: UPDATE,\n        newValue: newValue\n      });\n\n      if (!change) {\n        return globalState.UNCHANGED;\n      }\n\n      newValue = change.newValue;\n    } // apply modifier\n\n\n    newValue = this.enhancer(newValue, this.value_, this.name_);\n    return this.equals(this.value_, newValue) ? globalState.UNCHANGED : newValue;\n  };\n\n  _proto.setNewValue_ = function setNewValue_(newValue) {\n    var oldValue = this.value_;\n    this.value_ = newValue;\n    this.reportChanged();\n\n    if (hasListeners(this)) {\n      notifyListeners(this, {\n        type: UPDATE,\n        object: this,\n        newValue: newValue,\n        oldValue: oldValue\n      });\n    }\n  };\n\n  _proto.get = function get() {\n    this.reportObserved();\n    return this.dehanceValue(this.value_);\n  };\n\n  _proto.intercept_ = function intercept_(handler) {\n    return registerInterceptor(this, handler);\n  };\n\n  _proto.observe_ = function observe_(listener, fireImmediately) {\n    if (fireImmediately) {\n      listener({\n        observableKind: \"value\",\n        debugObjectName: this.name_,\n        object: this,\n        type: UPDATE,\n        newValue: this.value_,\n        oldValue: undefined\n      });\n    }\n\n    return registerListener(this, listener);\n  };\n\n  _proto.raw = function raw() {\n    // used by MST ot get undehanced value\n    return this.value_;\n  };\n\n  _proto.toJSON = function toJSON() {\n    return this.get();\n  };\n\n  _proto.toString = function toString() {\n    return this.name_ + \"[\" + this.value_ + \"]\";\n  };\n\n  _proto.valueOf = function valueOf() {\n    return toPrimitive(this.get());\n  };\n\n  _proto[_Symbol$toPrimitive] = function () {\n    return this.valueOf();\n  };\n\n  return ObservableValue;\n}(Atom);\nvar isObservableValue = /*#__PURE__*/createInstanceofPredicate(\"ObservableValue\", ObservableValue);\n\nvar _Symbol$toPrimitive$1;\n/**\r\n * A node in the state dependency root that observes other nodes, and can be observed itself.\r\n *\r\n * ComputedValue will remember the result of the computation for the duration of the batch, or\r\n * while being observed.\r\n *\r\n * During this time it will recompute only when one of its direct dependencies changed,\r\n * but only when it is being accessed with `ComputedValue.get()`.\r\n *\r\n * Implementation description:\r\n * 1. First time it's being accessed it will compute and remember result\r\n *    give back remembered result until 2. happens\r\n * 2. First time any deep dependency change, propagate POSSIBLY_STALE to all observers, wait for 3.\r\n * 3. When it's being accessed, recompute if any shallow dependency changed.\r\n *    if result changed: propagate STALE to all observers, that were POSSIBLY_STALE from the last step.\r\n *    go to step 2. either way\r\n *\r\n * If at any point it's outside batch and it isn't observed: reset everything and go to 1.\r\n */\n\n_Symbol$toPrimitive$1 = Symbol.toPrimitive;\nvar ComputedValue = /*#__PURE__*/function () {\n  // nodes we are looking at. Our value depends on these nodes\n  // during tracking it's an array with new observed observers\n  // to check for cycles\n  // N.B: unminified as it is used by MST\n\n  /**\r\n   * Create a new computed value based on a function expression.\r\n   *\r\n   * The `name` property is for debug purposes only.\r\n   *\r\n   * The `equals` property specifies the comparer function to use to determine if a newly produced\r\n   * value differs from the previous value. Two comparers are provided in the library; `defaultComparer`\r\n   * compares based on identity comparison (===), and `structuralComparer` deeply compares the structure.\r\n   * Structural comparison can be convenient if you always produce a new aggregated object and\r\n   * don't want to notify observers if it is structurally the same.\r\n   * This is useful for working with vectors, mouse coordinates etc.\r\n   */\n  function ComputedValue(options) {\n    this.dependenciesState_ = IDerivationState_.NOT_TRACKING_;\n    this.observing_ = [];\n    this.newObserving_ = null;\n    this.isBeingObserved_ = false;\n    this.isPendingUnobservation_ = false;\n    this.observers_ = new Set();\n    this.diffValue_ = 0;\n    this.runId_ = 0;\n    this.lastAccessedBy_ = 0;\n    this.lowestObserverState_ = IDerivationState_.UP_TO_DATE_;\n    this.unboundDepsCount_ = 0;\n    this.value_ = new CaughtException(null);\n    this.name_ = void 0;\n    this.triggeredBy_ = void 0;\n    this.isComputing_ = false;\n    this.isRunningSetter_ = false;\n    this.derivation = void 0;\n    this.setter_ = void 0;\n    this.isTracing_ = TraceMode.NONE;\n    this.scope_ = void 0;\n    this.equals_ = void 0;\n    this.requiresReaction_ = void 0;\n    this.keepAlive_ = void 0;\n    this.onBOL = void 0;\n    this.onBUOL = void 0;\n\n    if (!options.get) {\n      die(31);\n    }\n\n    this.derivation = options.get;\n    this.name_ = options.name || (process.env.NODE_ENV !== \"production\" ? \"ComputedValue@\" + getNextId() : \"ComputedValue\");\n\n    if (options.set) {\n      this.setter_ = createAction(process.env.NODE_ENV !== \"production\" ? this.name_ + \"-setter\" : \"ComputedValue-setter\", options.set);\n    }\n\n    this.equals_ = options.equals || (options.compareStructural || options.struct ? comparer.structural : comparer[\"default\"]);\n    this.scope_ = options.context;\n    this.requiresReaction_ = options.requiresReaction;\n    this.keepAlive_ = !!options.keepAlive;\n  }\n\n  var _proto = ComputedValue.prototype;\n\n  _proto.onBecomeStale_ = function onBecomeStale_() {\n    propagateMaybeChanged(this);\n  };\n\n  _proto.onBO = function onBO() {\n    if (this.onBOL) {\n      this.onBOL.forEach(function (listener) {\n        return listener();\n      });\n    }\n  };\n\n  _proto.onBUO = function onBUO() {\n    if (this.onBUOL) {\n      this.onBUOL.forEach(function (listener) {\n        return listener();\n      });\n    }\n  }\n  /**\r\n   * Returns the current value of this computed value.\r\n   * Will evaluate its computation first if needed.\r\n   */\n  ;\n\n  _proto.get = function get() {\n    if (this.isComputing_) {\n      die(32, this.name_, this.derivation);\n    }\n\n    if (globalState.inBatch === 0 && // !globalState.trackingDerivatpion &&\n    this.observers_.size === 0 && !this.keepAlive_) {\n      if (shouldCompute(this)) {\n        this.warnAboutUntrackedRead_();\n        startBatch(); // See perf test 'computed memoization'\n\n        this.value_ = this.computeValue_(false);\n        endBatch();\n      }\n    } else {\n      reportObserved(this);\n\n      if (shouldCompute(this)) {\n        var prevTrackingContext = globalState.trackingContext;\n\n        if (this.keepAlive_ && !prevTrackingContext) {\n          globalState.trackingContext = this;\n        }\n\n        if (this.trackAndCompute()) {\n          propagateChangeConfirmed(this);\n        }\n\n        globalState.trackingContext = prevTrackingContext;\n      }\n    }\n\n    var result = this.value_;\n\n    if (isCaughtException(result)) {\n      throw result.cause;\n    }\n\n    return result;\n  };\n\n  _proto.set = function set(value) {\n    if (this.setter_) {\n      if (this.isRunningSetter_) {\n        die(33, this.name_);\n      }\n\n      this.isRunningSetter_ = true;\n\n      try {\n        this.setter_.call(this.scope_, value);\n      } finally {\n        this.isRunningSetter_ = false;\n      }\n    } else {\n      die(34, this.name_);\n    }\n  };\n\n  _proto.trackAndCompute = function trackAndCompute() {\n    // N.B: unminified as it is used by MST\n    var oldValue = this.value_;\n    var wasSuspended =\n    /* see #1208 */\n    this.dependenciesState_ === IDerivationState_.NOT_TRACKING_;\n    var newValue = this.computeValue_(true);\n    var changed = wasSuspended || isCaughtException(oldValue) || isCaughtException(newValue) || !this.equals_(oldValue, newValue);\n\n    if (changed) {\n      this.value_ = newValue;\n\n      if (process.env.NODE_ENV !== \"production\" && isSpyEnabled()) {\n        spyReport({\n          observableKind: \"computed\",\n          debugObjectName: this.name_,\n          object: this.scope_,\n          type: \"update\",\n          oldValue: oldValue,\n          newValue: newValue\n        });\n      }\n    }\n\n    return changed;\n  };\n\n  _proto.computeValue_ = function computeValue_(track) {\n    this.isComputing_ = true; // don't allow state changes during computation\n\n    var prev = allowStateChangesStart(false);\n    var res;\n\n    if (track) {\n      res = trackDerivedFunction(this, this.derivation, this.scope_);\n    } else {\n      if (globalState.disableErrorBoundaries === true) {\n        res = this.derivation.call(this.scope_);\n      } else {\n        try {\n          res = this.derivation.call(this.scope_);\n        } catch (e) {\n          res = new CaughtException(e);\n        }\n      }\n    }\n\n    allowStateChangesEnd(prev);\n    this.isComputing_ = false;\n    return res;\n  };\n\n  _proto.suspend_ = function suspend_() {\n    if (!this.keepAlive_) {\n      clearObserving(this);\n      this.value_ = undefined; // don't hold on to computed value!\n\n      if (process.env.NODE_ENV !== \"production\" && this.isTracing_ !== TraceMode.NONE) {\n        console.log(\"[mobx.trace] Computed value '\" + this.name_ + \"' was suspended and it will recompute on the next access.\");\n      }\n    }\n  };\n\n  _proto.observe_ = function observe_(listener, fireImmediately) {\n    var _this = this;\n\n    var firstTime = true;\n    var prevValue = undefined;\n    return autorun(function () {\n      // TODO: why is this in a different place than the spyReport() function? in all other observables it's called in the same place\n      var newValue = _this.get();\n\n      if (!firstTime || fireImmediately) {\n        var prevU = untrackedStart();\n        listener({\n          observableKind: \"computed\",\n          debugObjectName: _this.name_,\n          type: UPDATE,\n          object: _this,\n          newValue: newValue,\n          oldValue: prevValue\n        });\n        untrackedEnd(prevU);\n      }\n\n      firstTime = false;\n      prevValue = newValue;\n    });\n  };\n\n  _proto.warnAboutUntrackedRead_ = function warnAboutUntrackedRead_() {\n    if (!(process.env.NODE_ENV !== \"production\")) {\n      return;\n    }\n\n    if (this.isTracing_ !== TraceMode.NONE) {\n      console.log(\"[mobx.trace] Computed value '\" + this.name_ + \"' is being read outside a reactive context. Doing a full recompute.\");\n    }\n\n    if (typeof this.requiresReaction_ === \"boolean\" ? this.requiresReaction_ : globalState.computedRequiresReaction) {\n      console.warn(\"[mobx] Computed value '\" + this.name_ + \"' is being read outside a reactive context. Doing a full recompute.\");\n    }\n  };\n\n  _proto.toString = function toString() {\n    return this.name_ + \"[\" + this.derivation.toString() + \"]\";\n  };\n\n  _proto.valueOf = function valueOf() {\n    return toPrimitive(this.get());\n  };\n\n  _proto[_Symbol$toPrimitive$1] = function () {\n    return this.valueOf();\n  };\n\n  return ComputedValue;\n}();\nvar isComputedValue = /*#__PURE__*/createInstanceofPredicate(\"ComputedValue\", ComputedValue);\n\nvar IDerivationState_;\n\n(function (IDerivationState_) {\n  // before being run or (outside batch and not being observed)\n  // at this point derivation is not holding any data about dependency tree\n  IDerivationState_[IDerivationState_[\"NOT_TRACKING_\"] = -1] = \"NOT_TRACKING_\"; // no shallow dependency changed since last computation\n  // won't recalculate derivation\n  // this is what makes mobx fast\n\n  IDerivationState_[IDerivationState_[\"UP_TO_DATE_\"] = 0] = \"UP_TO_DATE_\"; // some deep dependency changed, but don't know if shallow dependency changed\n  // will require to check first if UP_TO_DATE or POSSIBLY_STALE\n  // currently only ComputedValue will propagate POSSIBLY_STALE\n  //\n  // having this state is second big optimization:\n  // don't have to recompute on every dependency change, but only when it's needed\n\n  IDerivationState_[IDerivationState_[\"POSSIBLY_STALE_\"] = 1] = \"POSSIBLY_STALE_\"; // A shallow dependency has changed since last computation and the derivation\n  // will need to recompute when it's needed next.\n\n  IDerivationState_[IDerivationState_[\"STALE_\"] = 2] = \"STALE_\";\n})(IDerivationState_ || (IDerivationState_ = {}));\n\nvar TraceMode;\n\n(function (TraceMode) {\n  TraceMode[TraceMode[\"NONE\"] = 0] = \"NONE\";\n  TraceMode[TraceMode[\"LOG\"] = 1] = \"LOG\";\n  TraceMode[TraceMode[\"BREAK\"] = 2] = \"BREAK\";\n})(TraceMode || (TraceMode = {}));\n\nvar CaughtException = function CaughtException(cause) {\n  this.cause = void 0;\n  this.cause = cause; // Empty\n};\nfunction isCaughtException(e) {\n  return e instanceof CaughtException;\n}\n/**\r\n * Finds out whether any dependency of the derivation has actually changed.\r\n * If dependenciesState is 1 then it will recalculate dependencies,\r\n * if any dependency changed it will propagate it by changing dependenciesState to 2.\r\n *\r\n * By iterating over the dependencies in the same order that they were reported and\r\n * stopping on the first change, all the recalculations are only called for ComputedValues\r\n * that will be tracked by derivation. That is because we assume that if the first x\r\n * dependencies of the derivation doesn't change then the derivation should run the same way\r\n * up until accessing x-th dependency.\r\n */\n\nfunction shouldCompute(derivation) {\n  switch (derivation.dependenciesState_) {\n    case IDerivationState_.UP_TO_DATE_:\n      return false;\n\n    case IDerivationState_.NOT_TRACKING_:\n    case IDerivationState_.STALE_:\n      return true;\n\n    case IDerivationState_.POSSIBLY_STALE_:\n      {\n        // state propagation can occur outside of action/reactive context #2195\n        var prevAllowStateReads = allowStateReadsStart(true);\n        var prevUntracked = untrackedStart(); // no need for those computeds to be reported, they will be picked up in trackDerivedFunction.\n\n        var obs = derivation.observing_,\n            l = obs.length;\n\n        for (var i = 0; i < l; i++) {\n          var obj = obs[i];\n\n          if (isComputedValue(obj)) {\n            if (globalState.disableErrorBoundaries) {\n              obj.get();\n            } else {\n              try {\n                obj.get();\n              } catch (e) {\n                // we are not interested in the value *or* exception at this moment, but if there is one, notify all\n                untrackedEnd(prevUntracked);\n                allowStateReadsEnd(prevAllowStateReads);\n                return true;\n              }\n            } // if ComputedValue `obj` actually changed it will be computed and propagated to its observers.\n            // and `derivation` is an observer of `obj`\n            // invariantShouldCompute(derivation)\n\n\n            if (derivation.dependenciesState_ === IDerivationState_.STALE_) {\n              untrackedEnd(prevUntracked);\n              allowStateReadsEnd(prevAllowStateReads);\n              return true;\n            }\n          }\n        }\n\n        changeDependenciesStateTo0(derivation);\n        untrackedEnd(prevUntracked);\n        allowStateReadsEnd(prevAllowStateReads);\n        return false;\n      }\n  }\n}\nfunction isComputingDerivation() {\n  return globalState.trackingDerivation !== null; // filter out actions inside computations\n}\nfunction checkIfStateModificationsAreAllowed(atom) {\n  if (!(process.env.NODE_ENV !== \"production\")) {\n    return;\n  }\n\n  var hasObservers = atom.observers_.size > 0; // Should not be possible to change observed state outside strict mode, except during initialization, see #563\n\n  if (!globalState.allowStateChanges && (hasObservers || globalState.enforceActions === \"always\")) {\n    console.warn(\"[MobX] \" + (globalState.enforceActions ? \"Since strict-mode is enabled, changing (observed) observable values without using an action is not allowed. Tried to modify: \" : \"Side effects like changing state are not allowed at this point. Are you trying to modify state from, for example, a computed value or the render function of a React component? You can wrap side effects in 'runInAction' (or decorate functions with 'action') if needed. Tried to modify: \") + atom.name_);\n  }\n}\nfunction checkIfStateReadsAreAllowed(observable) {\n  if (process.env.NODE_ENV !== \"production\" && !globalState.allowStateReads && globalState.observableRequiresReaction) {\n    console.warn(\"[mobx] Observable '\" + observable.name_ + \"' being read outside a reactive context.\");\n  }\n}\n/**\r\n * Executes the provided function `f` and tracks which observables are being accessed.\r\n * The tracking information is stored on the `derivation` object and the derivation is registered\r\n * as observer of any of the accessed observables.\r\n */\n\nfunction trackDerivedFunction(derivation, f, context) {\n  var prevAllowStateReads = allowStateReadsStart(true); // pre allocate array allocation + room for variation in deps\n  // array will be trimmed by bindDependencies\n\n  changeDependenciesStateTo0(derivation);\n  derivation.newObserving_ = new Array(derivation.observing_.length + 100);\n  derivation.unboundDepsCount_ = 0;\n  derivation.runId_ = ++globalState.runId;\n  var prevTracking = globalState.trackingDerivation;\n  globalState.trackingDerivation = derivation;\n  globalState.inBatch++;\n  var result;\n\n  if (globalState.disableErrorBoundaries === true) {\n    result = f.call(context);\n  } else {\n    try {\n      result = f.call(context);\n    } catch (e) {\n      result = new CaughtException(e);\n    }\n  }\n\n  globalState.inBatch--;\n  globalState.trackingDerivation = prevTracking;\n  bindDependencies(derivation);\n  warnAboutDerivationWithoutDependencies(derivation);\n  allowStateReadsEnd(prevAllowStateReads);\n  return result;\n}\n\nfunction warnAboutDerivationWithoutDependencies(derivation) {\n  if (!(process.env.NODE_ENV !== \"production\")) {\n    return;\n  }\n\n  if (derivation.observing_.length !== 0) {\n    return;\n  }\n\n  if (typeof derivation.requiresObservable_ === \"boolean\" ? derivation.requiresObservable_ : globalState.reactionRequiresObservable) {\n    console.warn(\"[mobx] Derivation '\" + derivation.name_ + \"' is created/updated without reading any observable value.\");\n  }\n}\n/**\r\n * diffs newObserving with observing.\r\n * update observing to be newObserving with unique observables\r\n * notify observers that become observed/unobserved\r\n */\n\n\nfunction bindDependencies(derivation) {\n  // invariant(derivation.dependenciesState !== IDerivationState.NOT_TRACKING, \"INTERNAL ERROR bindDependencies expects derivation.dependenciesState !== -1\");\n  var prevObserving = derivation.observing_;\n  var observing = derivation.observing_ = derivation.newObserving_;\n  var lowestNewObservingDerivationState = IDerivationState_.UP_TO_DATE_; // Go through all new observables and check diffValue: (this list can contain duplicates):\n  //   0: first occurrence, change to 1 and keep it\n  //   1: extra occurrence, drop it\n\n  var i0 = 0,\n      l = derivation.unboundDepsCount_;\n\n  for (var i = 0; i < l; i++) {\n    var dep = observing[i];\n\n    if (dep.diffValue_ === 0) {\n      dep.diffValue_ = 1;\n\n      if (i0 !== i) {\n        observing[i0] = dep;\n      }\n\n      i0++;\n    } // Upcast is 'safe' here, because if dep is IObservable, `dependenciesState` will be undefined,\n    // not hitting the condition\n\n\n    if (dep.dependenciesState_ > lowestNewObservingDerivationState) {\n      lowestNewObservingDerivationState = dep.dependenciesState_;\n    }\n  }\n\n  observing.length = i0;\n  derivation.newObserving_ = null; // newObserving shouldn't be needed outside tracking (statement moved down to work around FF bug, see #614)\n  // Go through all old observables and check diffValue: (it is unique after last bindDependencies)\n  //   0: it's not in new observables, unobserve it\n  //   1: it keeps being observed, don't want to notify it. change to 0\n\n  l = prevObserving.length;\n\n  while (l--) {\n    var _dep = prevObserving[l];\n\n    if (_dep.diffValue_ === 0) {\n      removeObserver(_dep, derivation);\n    }\n\n    _dep.diffValue_ = 0;\n  } // Go through all new observables and check diffValue: (now it should be unique)\n  //   0: it was set to 0 in last loop. don't need to do anything.\n  //   1: it wasn't observed, let's observe it. set back to 0\n\n\n  while (i0--) {\n    var _dep2 = observing[i0];\n\n    if (_dep2.diffValue_ === 1) {\n      _dep2.diffValue_ = 0;\n      addObserver(_dep2, derivation);\n    }\n  } // Some new observed derivations may become stale during this derivation computation\n  // so they have had no chance to propagate staleness (#916)\n\n\n  if (lowestNewObservingDerivationState !== IDerivationState_.UP_TO_DATE_) {\n    derivation.dependenciesState_ = lowestNewObservingDerivationState;\n    derivation.onBecomeStale_();\n  }\n}\n\nfunction clearObserving(derivation) {\n  // invariant(globalState.inBatch > 0, \"INTERNAL ERROR clearObserving should be called only inside batch\");\n  var obs = derivation.observing_;\n  derivation.observing_ = [];\n  var i = obs.length;\n\n  while (i--) {\n    removeObserver(obs[i], derivation);\n  }\n\n  derivation.dependenciesState_ = IDerivationState_.NOT_TRACKING_;\n}\nfunction untracked(action) {\n  var prev = untrackedStart();\n\n  try {\n    return action();\n  } finally {\n    untrackedEnd(prev);\n  }\n}\nfunction untrackedStart() {\n  var prev = globalState.trackingDerivation;\n  globalState.trackingDerivation = null;\n  return prev;\n}\nfunction untrackedEnd(prev) {\n  globalState.trackingDerivation = prev;\n}\nfunction allowStateReadsStart(allowStateReads) {\n  var prev = globalState.allowStateReads;\n  globalState.allowStateReads = allowStateReads;\n  return prev;\n}\nfunction allowStateReadsEnd(prev) {\n  globalState.allowStateReads = prev;\n}\n/**\r\n * needed to keep `lowestObserverState` correct. when changing from (2 or 1) to 0\r\n *\r\n */\n\nfunction changeDependenciesStateTo0(derivation) {\n  if (derivation.dependenciesState_ === IDerivationState_.UP_TO_DATE_) {\n    return;\n  }\n\n  derivation.dependenciesState_ = IDerivationState_.UP_TO_DATE_;\n  var obs = derivation.observing_;\n  var i = obs.length;\n\n  while (i--) {\n    obs[i].lowestObserverState_ = IDerivationState_.UP_TO_DATE_;\n  }\n}\n\n/**\r\n * These values will persist if global state is reset\r\n */\n\nvar persistentKeys = [\"mobxGuid\", \"spyListeners\", \"enforceActions\", \"computedRequiresReaction\", \"reactionRequiresObservable\", \"observableRequiresReaction\", \"allowStateReads\", \"disableErrorBoundaries\", \"runId\", \"UNCHANGED\", \"useProxies\"];\nvar MobXGlobals = function MobXGlobals() {\n  this.version = 6;\n  this.UNCHANGED = {};\n  this.trackingDerivation = null;\n  this.trackingContext = null;\n  this.runId = 0;\n  this.mobxGuid = 0;\n  this.inBatch = 0;\n  this.pendingUnobservations = [];\n  this.pendingReactions = [];\n  this.isRunningReactions = false;\n  this.allowStateChanges = false;\n  this.allowStateReads = true;\n  this.enforceActions = true;\n  this.spyListeners = [];\n  this.globalReactionErrorHandlers = [];\n  this.computedRequiresReaction = false;\n  this.reactionRequiresObservable = false;\n  this.observableRequiresReaction = false;\n  this.disableErrorBoundaries = false;\n  this.suppressReactionErrors = false;\n  this.useProxies = true;\n  this.verifyProxies = false;\n  this.safeDescriptors = true;\n};\nvar canMergeGlobalState = true;\nvar isolateCalled = false;\nvar globalState = /*#__PURE__*/function () {\n  var global = /*#__PURE__*/getGlobal();\n\n  if (global.__mobxInstanceCount > 0 && !global.__mobxGlobals) {\n    canMergeGlobalState = false;\n  }\n\n  if (global.__mobxGlobals && global.__mobxGlobals.version !== new MobXGlobals().version) {\n    canMergeGlobalState = false;\n  }\n\n  if (!canMergeGlobalState) {\n    // Because this is a IIFE we need to let isolateCalled a chance to change\n    // so we run it after the event loop completed at least 1 iteration\n    setTimeout(function () {\n      if (!isolateCalled) {\n        die(35);\n      }\n    }, 1);\n    return new MobXGlobals();\n  } else if (global.__mobxGlobals) {\n    global.__mobxInstanceCount += 1;\n\n    if (!global.__mobxGlobals.UNCHANGED) {\n      global.__mobxGlobals.UNCHANGED = {};\n    } // make merge backward compatible\n\n\n    return global.__mobxGlobals;\n  } else {\n    global.__mobxInstanceCount = 1;\n    return global.__mobxGlobals = /*#__PURE__*/new MobXGlobals();\n  }\n}();\nfunction isolateGlobalState() {\n  if (globalState.pendingReactions.length || globalState.inBatch || globalState.isRunningReactions) {\n    die(36);\n  }\n\n  isolateCalled = true;\n\n  if (canMergeGlobalState) {\n    var global = getGlobal();\n\n    if (--global.__mobxInstanceCount === 0) {\n      global.__mobxGlobals = undefined;\n    }\n\n    globalState = new MobXGlobals();\n  }\n}\nfunction getGlobalState() {\n  return globalState;\n}\n/**\r\n * For testing purposes only; this will break the internal state of existing observables,\r\n * but can be used to get back at a stable state after throwing errors\r\n */\n\nfunction resetGlobalState() {\n  var defaultGlobals = new MobXGlobals();\n\n  for (var key in defaultGlobals) {\n    if (persistentKeys.indexOf(key) === -1) {\n      globalState[key] = defaultGlobals[key];\n    }\n  }\n\n  globalState.allowStateChanges = !globalState.enforceActions;\n}\n\nfunction hasObservers(observable) {\n  return observable.observers_ && observable.observers_.size > 0;\n}\nfunction getObservers(observable) {\n  return observable.observers_;\n} // function invariantObservers(observable: IObservable) {\n//     const list = observable.observers\n//     const map = observable.observersIndexes\n//     const l = list.length\n//     for (let i = 0; i < l; i++) {\n//         const id = list[i].__mapid\n//         if (i) {\n//             invariant(map[id] === i, \"INTERNAL ERROR maps derivation.__mapid to index in list\") // for performance\n//         } else {\n//             invariant(!(id in map), \"INTERNAL ERROR observer on index 0 shouldn't be held in map.\") // for performance\n//         }\n//     }\n//     invariant(\n//         list.length === 0 || Object.keys(map).length === list.length - 1,\n//         \"INTERNAL ERROR there is no junk in map\"\n//     )\n// }\n\nfunction addObserver(observable, node) {\n  // invariant(node.dependenciesState !== -1, \"INTERNAL ERROR, can add only dependenciesState !== -1\");\n  // invariant(observable._observers.indexOf(node) === -1, \"INTERNAL ERROR add already added node\");\n  // invariantObservers(observable);\n  observable.observers_.add(node);\n\n  if (observable.lowestObserverState_ > node.dependenciesState_) {\n    observable.lowestObserverState_ = node.dependenciesState_;\n  } // invariantObservers(observable);\n  // invariant(observable._observers.indexOf(node) !== -1, \"INTERNAL ERROR didn't add node\");\n\n}\nfunction removeObserver(observable, node) {\n  // invariant(globalState.inBatch > 0, \"INTERNAL ERROR, remove should be called only inside batch\");\n  // invariant(observable._observers.indexOf(node) !== -1, \"INTERNAL ERROR remove already removed node\");\n  // invariantObservers(observable);\n  observable.observers_[\"delete\"](node);\n\n  if (observable.observers_.size === 0) {\n    // deleting last observer\n    queueForUnobservation(observable);\n  } // invariantObservers(observable);\n  // invariant(observable._observers.indexOf(node) === -1, \"INTERNAL ERROR remove already removed node2\");\n\n}\nfunction queueForUnobservation(observable) {\n  if (observable.isPendingUnobservation_ === false) {\n    // invariant(observable._observers.length === 0, \"INTERNAL ERROR, should only queue for unobservation unobserved observables\");\n    observable.isPendingUnobservation_ = true;\n    globalState.pendingUnobservations.push(observable);\n  }\n}\n/**\r\n * Batch starts a transaction, at least for purposes of memoizing ComputedValues when nothing else does.\r\n * During a batch `onBecomeUnobserved` will be called at most once per observable.\r\n * Avoids unnecessary recalculations.\r\n */\n\nfunction startBatch() {\n  globalState.inBatch++;\n}\nfunction endBatch() {\n  if (--globalState.inBatch === 0) {\n    runReactions(); // the batch is actually about to finish, all unobserving should happen here.\n\n    var list = globalState.pendingUnobservations;\n\n    for (var i = 0; i < list.length; i++) {\n      var observable = list[i];\n      observable.isPendingUnobservation_ = false;\n\n      if (observable.observers_.size === 0) {\n        if (observable.isBeingObserved_) {\n          // if this observable had reactive observers, trigger the hooks\n          observable.isBeingObserved_ = false;\n          observable.onBUO();\n        }\n\n        if (observable instanceof ComputedValue) {\n          // computed values are automatically teared down when the last observer leaves\n          // this process happens recursively, this computed might be the last observabe of another, etc..\n          observable.suspend_();\n        }\n      }\n    }\n\n    globalState.pendingUnobservations = [];\n  }\n}\nfunction reportObserved(observable) {\n  checkIfStateReadsAreAllowed(observable);\n  var derivation = globalState.trackingDerivation;\n\n  if (derivation !== null) {\n    /**\r\n     * Simple optimization, give each derivation run an unique id (runId)\r\n     * Check if last time this observable was accessed the same runId is used\r\n     * if this is the case, the relation is already known\r\n     */\n    if (derivation.runId_ !== observable.lastAccessedBy_) {\n      observable.lastAccessedBy_ = derivation.runId_; // Tried storing newObserving, or observing, or both as Set, but performance didn't come close...\n\n      derivation.newObserving_[derivation.unboundDepsCount_++] = observable;\n\n      if (!observable.isBeingObserved_ && globalState.trackingContext) {\n        observable.isBeingObserved_ = true;\n        observable.onBO();\n      }\n    }\n\n    return true;\n  } else if (observable.observers_.size === 0 && globalState.inBatch > 0) {\n    queueForUnobservation(observable);\n  }\n\n  return false;\n} // function invariantLOS(observable: IObservable, msg: string) {\n//     // it's expensive so better not run it in produciton. but temporarily helpful for testing\n//     const min = getObservers(observable).reduce((a, b) => Math.min(a, b.dependenciesState), 2)\n//     if (min >= observable.lowestObserverState) return // <- the only assumption about `lowestObserverState`\n//     throw new Error(\n//         \"lowestObserverState is wrong for \" +\n//             msg +\n//             \" because \" +\n//             min +\n//             \" < \" +\n//             observable.lowestObserverState\n//     )\n// }\n\n/**\r\n * NOTE: current propagation mechanism will in case of self reruning autoruns behave unexpectedly\r\n * It will propagate changes to observers from previous run\r\n * It's hard or maybe impossible (with reasonable perf) to get it right with current approach\r\n * Hopefully self reruning autoruns aren't a feature people should depend on\r\n * Also most basic use cases should be ok\r\n */\n// Called by Atom when its value changes\n\nfunction propagateChanged(observable) {\n  // invariantLOS(observable, \"changed start\");\n  if (observable.lowestObserverState_ === IDerivationState_.STALE_) {\n    return;\n  }\n\n  observable.lowestObserverState_ = IDerivationState_.STALE_; // Ideally we use for..of here, but the downcompiled version is really slow...\n\n  observable.observers_.forEach(function (d) {\n    if (d.dependenciesState_ === IDerivationState_.UP_TO_DATE_) {\n      if (process.env.NODE_ENV !== \"production\" && d.isTracing_ !== TraceMode.NONE) {\n        logTraceInfo(d, observable);\n      }\n\n      d.onBecomeStale_();\n    }\n\n    d.dependenciesState_ = IDerivationState_.STALE_;\n  }); // invariantLOS(observable, \"changed end\");\n} // Called by ComputedValue when it recalculate and its value changed\n\nfunction propagateChangeConfirmed(observable) {\n  // invariantLOS(observable, \"confirmed start\");\n  if (observable.lowestObserverState_ === IDerivationState_.STALE_) {\n    return;\n  }\n\n  observable.lowestObserverState_ = IDerivationState_.STALE_;\n  observable.observers_.forEach(function (d) {\n    if (d.dependenciesState_ === IDerivationState_.POSSIBLY_STALE_) {\n      d.dependenciesState_ = IDerivationState_.STALE_;\n\n      if (process.env.NODE_ENV !== \"production\" && d.isTracing_ !== TraceMode.NONE) {\n        logTraceInfo(d, observable);\n      }\n    } else if (d.dependenciesState_ === IDerivationState_.UP_TO_DATE_ // this happens during computing of `d`, just keep lowestObserverState up to date.\n    ) {\n      observable.lowestObserverState_ = IDerivationState_.UP_TO_DATE_;\n    }\n  }); // invariantLOS(observable, \"confirmed end\");\n} // Used by computed when its dependency changed, but we don't wan't to immediately recompute.\n\nfunction propagateMaybeChanged(observable) {\n  // invariantLOS(observable, \"maybe start\");\n  if (observable.lowestObserverState_ !== IDerivationState_.UP_TO_DATE_) {\n    return;\n  }\n\n  observable.lowestObserverState_ = IDerivationState_.POSSIBLY_STALE_;\n  observable.observers_.forEach(function (d) {\n    if (d.dependenciesState_ === IDerivationState_.UP_TO_DATE_) {\n      d.dependenciesState_ = IDerivationState_.POSSIBLY_STALE_;\n      d.onBecomeStale_();\n    }\n  }); // invariantLOS(observable, \"maybe end\");\n}\n\nfunction logTraceInfo(derivation, observable) {\n  console.log(\"[mobx.trace] '\" + derivation.name_ + \"' is invalidated due to a change in: '\" + observable.name_ + \"'\");\n\n  if (derivation.isTracing_ === TraceMode.BREAK) {\n    var lines = [];\n    printDepTree(getDependencyTree(derivation), lines, 1); // prettier-ignore\n\n    new Function(\"debugger;\\n/*\\nTracing '\" + derivation.name_ + \"'\\n\\nYou are entering this break point because derivation '\" + derivation.name_ + \"' is being traced and '\" + observable.name_ + \"' is now forcing it to update.\\nJust follow the stacktrace you should now see in the devtools to see precisely what piece of your code is causing this update\\nThe stackframe you are looking for is at least ~6-8 stack-frames up.\\n\\n\" + (derivation instanceof ComputedValue ? derivation.derivation.toString().replace(/[*]\\//g, \"/\") : \"\") + \"\\n\\nThe dependencies for this derivation are:\\n\\n\" + lines.join(\"\\n\") + \"\\n*/\\n    \")();\n  }\n}\n\nfunction printDepTree(tree, lines, depth) {\n  if (lines.length >= 1000) {\n    lines.push(\"(and many more)\");\n    return;\n  }\n\n  lines.push(\"\" + \"\\t\".repeat(depth - 1) + tree.name);\n\n  if (tree.dependencies) {\n    tree.dependencies.forEach(function (child) {\n      return printDepTree(child, lines, depth + 1);\n    });\n  }\n}\n\nvar Reaction = /*#__PURE__*/function () {\n  // nodes we are looking at. Our value depends on these nodes\n  function Reaction(name_, onInvalidate_, errorHandler_, requiresObservable_) {\n    if (name_ === void 0) {\n      name_ = process.env.NODE_ENV !== \"production\" ? \"Reaction@\" + getNextId() : \"Reaction\";\n    }\n\n    this.name_ = void 0;\n    this.onInvalidate_ = void 0;\n    this.errorHandler_ = void 0;\n    this.requiresObservable_ = void 0;\n    this.observing_ = [];\n    this.newObserving_ = [];\n    this.dependenciesState_ = IDerivationState_.NOT_TRACKING_;\n    this.diffValue_ = 0;\n    this.runId_ = 0;\n    this.unboundDepsCount_ = 0;\n    this.isDisposed_ = false;\n    this.isScheduled_ = false;\n    this.isTrackPending_ = false;\n    this.isRunning_ = false;\n    this.isTracing_ = TraceMode.NONE;\n    this.name_ = name_;\n    this.onInvalidate_ = onInvalidate_;\n    this.errorHandler_ = errorHandler_;\n    this.requiresObservable_ = requiresObservable_;\n  }\n\n  var _proto = Reaction.prototype;\n\n  _proto.onBecomeStale_ = function onBecomeStale_() {\n    this.schedule_();\n  };\n\n  _proto.schedule_ = function schedule_() {\n    if (!this.isScheduled_) {\n      this.isScheduled_ = true;\n      globalState.pendingReactions.push(this);\n      runReactions();\n    }\n  };\n\n  _proto.isScheduled = function isScheduled() {\n    return this.isScheduled_;\n  }\n  /**\r\n   * internal, use schedule() if you intend to kick off a reaction\r\n   */\n  ;\n\n  _proto.runReaction_ = function runReaction_() {\n    if (!this.isDisposed_) {\n      startBatch();\n      this.isScheduled_ = false;\n      var prev = globalState.trackingContext;\n      globalState.trackingContext = this;\n\n      if (shouldCompute(this)) {\n        this.isTrackPending_ = true;\n\n        try {\n          this.onInvalidate_();\n\n          if (process.env.NODE_ENV !== \"production\" && this.isTrackPending_ && isSpyEnabled()) {\n            // onInvalidate didn't trigger track right away..\n            spyReport({\n              name: this.name_,\n              type: \"scheduled-reaction\"\n            });\n          }\n        } catch (e) {\n          this.reportExceptionInDerivation_(e);\n        }\n      }\n\n      globalState.trackingContext = prev;\n      endBatch();\n    }\n  };\n\n  _proto.track = function track(fn) {\n    if (this.isDisposed_) {\n      return; // console.warn(\"Reaction already disposed\") // Note: Not a warning / error in mobx 4 either\n    }\n\n    startBatch();\n    var notify = isSpyEnabled();\n    var startTime;\n\n    if (process.env.NODE_ENV !== \"production\" && notify) {\n      startTime = Date.now();\n      spyReportStart({\n        name: this.name_,\n        type: \"reaction\"\n      });\n    }\n\n    this.isRunning_ = true;\n    var prevReaction = globalState.trackingContext; // reactions could create reactions...\n\n    globalState.trackingContext = this;\n    var result = trackDerivedFunction(this, fn, undefined);\n    globalState.trackingContext = prevReaction;\n    this.isRunning_ = false;\n    this.isTrackPending_ = false;\n\n    if (this.isDisposed_) {\n      // disposed during last run. Clean up everything that was bound after the dispose call.\n      clearObserving(this);\n    }\n\n    if (isCaughtException(result)) {\n      this.reportExceptionInDerivation_(result.cause);\n    }\n\n    if (process.env.NODE_ENV !== \"production\" && notify) {\n      spyReportEnd({\n        time: Date.now() - startTime\n      });\n    }\n\n    endBatch();\n  };\n\n  _proto.reportExceptionInDerivation_ = function reportExceptionInDerivation_(error) {\n    var _this = this;\n\n    if (this.errorHandler_) {\n      this.errorHandler_(error, this);\n      return;\n    }\n\n    if (globalState.disableErrorBoundaries) {\n      throw error;\n    }\n\n    var message = process.env.NODE_ENV !== \"production\" ? \"[mobx] Encountered an uncaught exception that was thrown by a reaction or observer component, in: '\" + this + \"'\" : \"[mobx] uncaught error in '\" + this + \"'\";\n\n    if (!globalState.suppressReactionErrors) {\n      console.error(message, error);\n      /** If debugging brought you here, please, read the above message :-). Tnx! */\n    } else if (process.env.NODE_ENV !== \"production\") {\n      console.warn(\"[mobx] (error in reaction '\" + this.name_ + \"' suppressed, fix error of causing action below)\");\n    } // prettier-ignore\n\n\n    if (process.env.NODE_ENV !== \"production\" && isSpyEnabled()) {\n      spyReport({\n        type: \"error\",\n        name: this.name_,\n        message: message,\n        error: \"\" + error\n      });\n    }\n\n    globalState.globalReactionErrorHandlers.forEach(function (f) {\n      return f(error, _this);\n    });\n  };\n\n  _proto.dispose = function dispose() {\n    if (!this.isDisposed_) {\n      this.isDisposed_ = true;\n\n      if (!this.isRunning_) {\n        // if disposed while running, clean up later. Maybe not optimal, but rare case\n        startBatch();\n        clearObserving(this);\n        endBatch();\n      }\n    }\n  };\n\n  _proto.getDisposer_ = function getDisposer_() {\n    var r = this.dispose.bind(this);\n    r[$mobx] = this;\n    return r;\n  };\n\n  _proto.toString = function toString() {\n    return \"Reaction[\" + this.name_ + \"]\";\n  };\n\n  _proto.trace = function trace$1(enterBreakPoint) {\n    if (enterBreakPoint === void 0) {\n      enterBreakPoint = false;\n    }\n\n    trace(this, enterBreakPoint);\n  };\n\n  return Reaction;\n}();\nfunction onReactionError(handler) {\n  globalState.globalReactionErrorHandlers.push(handler);\n  return function () {\n    var idx = globalState.globalReactionErrorHandlers.indexOf(handler);\n\n    if (idx >= 0) {\n      globalState.globalReactionErrorHandlers.splice(idx, 1);\n    }\n  };\n}\n/**\r\n * Magic number alert!\r\n * Defines within how many times a reaction is allowed to re-trigger itself\r\n * until it is assumed that this is gonna be a never ending loop...\r\n */\n\nvar MAX_REACTION_ITERATIONS = 100;\n\nvar reactionScheduler = function reactionScheduler(f) {\n  return f();\n};\n\nfunction runReactions() {\n  // Trampolining, if runReactions are already running, new reactions will be picked up\n  if (globalState.inBatch > 0 || globalState.isRunningReactions) {\n    return;\n  }\n\n  reactionScheduler(runReactionsHelper);\n}\n\nfunction runReactionsHelper() {\n  globalState.isRunningReactions = true;\n  var allReactions = globalState.pendingReactions;\n  var iterations = 0; // While running reactions, new reactions might be triggered.\n  // Hence we work with two variables and check whether\n  // we converge to no remaining reactions after a while.\n\n  while (allReactions.length > 0) {\n    if (++iterations === MAX_REACTION_ITERATIONS) {\n      console.error(process.env.NODE_ENV !== \"production\" ? \"Reaction doesn't converge to a stable state after \" + MAX_REACTION_ITERATIONS + \" iterations.\" + (\" Probably there is a cycle in the reactive function: \" + allReactions[0]) : \"[mobx] cycle in reaction: \" + allReactions[0]);\n      allReactions.splice(0); // clear reactions\n    }\n\n    var remainingReactions = allReactions.splice(0);\n\n    for (var i = 0, l = remainingReactions.length; i < l; i++) {\n      remainingReactions[i].runReaction_();\n    }\n  }\n\n  globalState.isRunningReactions = false;\n}\n\nvar isReaction = /*#__PURE__*/createInstanceofPredicate(\"Reaction\", Reaction);\nfunction setReactionScheduler(fn) {\n  var baseScheduler = reactionScheduler;\n\n  reactionScheduler = function reactionScheduler(f) {\n    return fn(function () {\n      return baseScheduler(f);\n    });\n  };\n}\n\nfunction isSpyEnabled() {\n  return process.env.NODE_ENV !== \"production\" && !!globalState.spyListeners.length;\n}\nfunction spyReport(event) {\n  if (!(process.env.NODE_ENV !== \"production\")) {\n    return;\n  } // dead code elimination can do the rest\n\n\n  if (!globalState.spyListeners.length) {\n    return;\n  }\n\n  var listeners = globalState.spyListeners;\n\n  for (var i = 0, l = listeners.length; i < l; i++) {\n    listeners[i](event);\n  }\n}\nfunction spyReportStart(event) {\n  if (!(process.env.NODE_ENV !== \"production\")) {\n    return;\n  }\n\n  var change = _extends({}, event, {\n    spyReportStart: true\n  });\n\n  spyReport(change);\n}\nvar END_EVENT = {\n  type: \"report-end\",\n  spyReportEnd: true\n};\nfunction spyReportEnd(change) {\n  if (!(process.env.NODE_ENV !== \"production\")) {\n    return;\n  }\n\n  if (change) {\n    spyReport(_extends({}, change, {\n      type: \"report-end\",\n      spyReportEnd: true\n    }));\n  } else {\n    spyReport(END_EVENT);\n  }\n}\nfunction spy(listener) {\n  if (!(process.env.NODE_ENV !== \"production\")) {\n    console.warn(\"[mobx.spy] Is a no-op in production builds\");\n    return function () {};\n  } else {\n    globalState.spyListeners.push(listener);\n    return once(function () {\n      globalState.spyListeners = globalState.spyListeners.filter(function (l) {\n        return l !== listener;\n      });\n    });\n  }\n}\n\nvar ACTION = \"action\";\nvar ACTION_BOUND = \"action.bound\";\nvar AUTOACTION = \"autoAction\";\nvar AUTOACTION_BOUND = \"autoAction.bound\";\nvar DEFAULT_ACTION_NAME = \"<unnamed action>\";\nvar actionAnnotation = /*#__PURE__*/createActionAnnotation(ACTION);\nvar actionBoundAnnotation = /*#__PURE__*/createActionAnnotation(ACTION_BOUND, {\n  bound: true\n});\nvar autoActionAnnotation = /*#__PURE__*/createActionAnnotation(AUTOACTION, {\n  autoAction: true\n});\nvar autoActionBoundAnnotation = /*#__PURE__*/createActionAnnotation(AUTOACTION_BOUND, {\n  autoAction: true,\n  bound: true\n});\n\nfunction createActionFactory(autoAction) {\n  var res = function action(arg1, arg2) {\n    // action(fn() {})\n    if (isFunction(arg1)) {\n      return createAction(arg1.name || DEFAULT_ACTION_NAME, arg1, autoAction);\n    } // action(\"name\", fn() {})\n\n\n    if (isFunction(arg2)) {\n      return createAction(arg1, arg2, autoAction);\n    } // @action\n\n\n    if (isStringish(arg2)) {\n      return storeAnnotation(arg1, arg2, autoAction ? autoActionAnnotation : actionAnnotation);\n    } // action(\"name\") & @action(\"name\")\n\n\n    if (isStringish(arg1)) {\n      return createDecoratorAnnotation(createActionAnnotation(autoAction ? AUTOACTION : ACTION, {\n        name: arg1,\n        autoAction: autoAction\n      }));\n    }\n\n    if (process.env.NODE_ENV !== \"production\") {\n      die(\"Invalid arguments for `action`\");\n    }\n  };\n\n  return res;\n}\n\nvar action = /*#__PURE__*/createActionFactory(false);\nObject.assign(action, actionAnnotation);\nvar autoAction = /*#__PURE__*/createActionFactory(true);\nObject.assign(autoAction, autoActionAnnotation);\naction.bound = /*#__PURE__*/createDecoratorAnnotation(actionBoundAnnotation);\nautoAction.bound = /*#__PURE__*/createDecoratorAnnotation(autoActionBoundAnnotation);\nfunction runInAction(fn) {\n  return executeAction(fn.name || DEFAULT_ACTION_NAME, false, fn, this, undefined);\n}\nfunction isAction(thing) {\n  return isFunction(thing) && thing.isMobxAction === true;\n}\n\n/**\r\n * Creates a named reactive view and keeps it alive, so that the view is always\r\n * updated if one of the dependencies changes, even when the view is not further used by something else.\r\n * @param view The reactive view\r\n * @returns disposer function, which can be used to stop the view from being updated in the future.\r\n */\n\nfunction autorun(view, opts) {\n  var _opts$name, _opts;\n\n  if (opts === void 0) {\n    opts = EMPTY_OBJECT;\n  }\n\n  if (process.env.NODE_ENV !== \"production\") {\n    if (!isFunction(view)) {\n      die(\"Autorun expects a function as first argument\");\n    }\n\n    if (isAction(view)) {\n      die(\"Autorun does not accept actions since actions are untrackable\");\n    }\n  }\n\n  var name = (_opts$name = (_opts = opts) == null ? void 0 : _opts.name) != null ? _opts$name : process.env.NODE_ENV !== \"production\" ? view.name || \"Autorun@\" + getNextId() : \"Autorun\";\n  var runSync = !opts.scheduler && !opts.delay;\n  var reaction;\n\n  if (runSync) {\n    // normal autorun\n    reaction = new Reaction(name, function () {\n      this.track(reactionRunner);\n    }, opts.onError, opts.requiresObservable);\n  } else {\n    var scheduler = createSchedulerFromOptions(opts); // debounced autorun\n\n    var isScheduled = false;\n    reaction = new Reaction(name, function () {\n      if (!isScheduled) {\n        isScheduled = true;\n        scheduler(function () {\n          isScheduled = false;\n\n          if (!reaction.isDisposed_) {\n            reaction.track(reactionRunner);\n          }\n        });\n      }\n    }, opts.onError, opts.requiresObservable);\n  }\n\n  function reactionRunner() {\n    view(reaction);\n  }\n\n  reaction.schedule_();\n  return reaction.getDisposer_();\n}\n\nvar run = function run(f) {\n  return f();\n};\n\nfunction createSchedulerFromOptions(opts) {\n  return opts.scheduler ? opts.scheduler : opts.delay ? function (f) {\n    return setTimeout(f, opts.delay);\n  } : run;\n}\n\nfunction reaction(expression, effect, opts) {\n  var _opts$name2;\n\n  if (opts === void 0) {\n    opts = EMPTY_OBJECT;\n  }\n\n  if (process.env.NODE_ENV !== \"production\") {\n    if (!isFunction(expression) || !isFunction(effect)) {\n      die(\"First and second argument to reaction should be functions\");\n    }\n\n    if (!isPlainObject(opts)) {\n      die(\"Third argument of reactions should be an object\");\n    }\n  }\n\n  var name = (_opts$name2 = opts.name) != null ? _opts$name2 : process.env.NODE_ENV !== \"production\" ? \"Reaction@\" + getNextId() : \"Reaction\";\n  var effectAction = action(name, opts.onError ? wrapErrorHandler(opts.onError, effect) : effect);\n  var runSync = !opts.scheduler && !opts.delay;\n  var scheduler = createSchedulerFromOptions(opts);\n  var firstTime = true;\n  var isScheduled = false;\n  var value;\n  var oldValue;\n  var equals = opts.compareStructural ? comparer.structural : opts.equals || comparer[\"default\"];\n  var r = new Reaction(name, function () {\n    if (firstTime || runSync) {\n      reactionRunner();\n    } else if (!isScheduled) {\n      isScheduled = true;\n      scheduler(reactionRunner);\n    }\n  }, opts.onError, opts.requiresObservable);\n\n  function reactionRunner() {\n    isScheduled = false;\n\n    if (r.isDisposed_) {\n      return;\n    }\n\n    var changed = false;\n    r.track(function () {\n      var nextValue = allowStateChanges(false, function () {\n        return expression(r);\n      });\n      changed = firstTime || !equals(value, nextValue);\n      oldValue = value;\n      value = nextValue;\n    });\n\n    if (firstTime && opts.fireImmediately) {\n      effectAction(value, oldValue, r);\n    } else if (!firstTime && changed) {\n      effectAction(value, oldValue, r);\n    }\n\n    firstTime = false;\n  }\n\n  r.schedule_();\n  return r.getDisposer_();\n}\n\nfunction wrapErrorHandler(errorHandler, baseFn) {\n  return function () {\n    try {\n      return baseFn.apply(this, arguments);\n    } catch (e) {\n      errorHandler.call(this, e);\n    }\n  };\n}\n\nvar ON_BECOME_OBSERVED = \"onBO\";\nvar ON_BECOME_UNOBSERVED = \"onBUO\";\nfunction onBecomeObserved(thing, arg2, arg3) {\n  return interceptHook(ON_BECOME_OBSERVED, thing, arg2, arg3);\n}\nfunction onBecomeUnobserved(thing, arg2, arg3) {\n  return interceptHook(ON_BECOME_UNOBSERVED, thing, arg2, arg3);\n}\n\nfunction interceptHook(hook, thing, arg2, arg3) {\n  var atom = typeof arg3 === \"function\" ? getAtom(thing, arg2) : getAtom(thing);\n  var cb = isFunction(arg3) ? arg3 : arg2;\n  var listenersKey = hook + \"L\";\n\n  if (atom[listenersKey]) {\n    atom[listenersKey].add(cb);\n  } else {\n    atom[listenersKey] = new Set([cb]);\n  }\n\n  return function () {\n    var hookListeners = atom[listenersKey];\n\n    if (hookListeners) {\n      hookListeners[\"delete\"](cb);\n\n      if (hookListeners.size === 0) {\n        delete atom[listenersKey];\n      }\n    }\n  };\n}\n\nvar NEVER = \"never\";\nvar ALWAYS = \"always\";\nvar OBSERVED = \"observed\"; // const IF_AVAILABLE = \"ifavailable\"\n\nfunction configure(options) {\n  if (options.isolateGlobalState === true) {\n    isolateGlobalState();\n  }\n\n  var useProxies = options.useProxies,\n      enforceActions = options.enforceActions;\n\n  if (useProxies !== undefined) {\n    globalState.useProxies = useProxies === ALWAYS ? true : useProxies === NEVER ? false : typeof Proxy !== \"undefined\";\n  }\n\n  if (useProxies === \"ifavailable\") {\n    globalState.verifyProxies = true;\n  }\n\n  if (enforceActions !== undefined) {\n    var ea = enforceActions === ALWAYS ? ALWAYS : enforceActions === OBSERVED;\n    globalState.enforceActions = ea;\n    globalState.allowStateChanges = ea === true || ea === ALWAYS ? false : true;\n  }\n  [\"computedRequiresReaction\", \"reactionRequiresObservable\", \"observableRequiresReaction\", \"disableErrorBoundaries\", \"safeDescriptors\"].forEach(function (key) {\n    if (key in options) {\n      globalState[key] = !!options[key];\n    }\n  });\n  globalState.allowStateReads = !globalState.observableRequiresReaction;\n\n  if (process.env.NODE_ENV !== \"production\" && globalState.disableErrorBoundaries === true) {\n    console.warn(\"WARNING: Debug feature only. MobX will NOT recover from errors when `disableErrorBoundaries` is enabled.\");\n  }\n\n  if (options.reactionScheduler) {\n    setReactionScheduler(options.reactionScheduler);\n  }\n}\n\nfunction extendObservable(target, properties, annotations, options) {\n  if (process.env.NODE_ENV !== \"production\") {\n    if (arguments.length > 4) {\n      die(\"'extendObservable' expected 2-4 arguments\");\n    }\n\n    if (typeof target !== \"object\") {\n      die(\"'extendObservable' expects an object as first argument\");\n    }\n\n    if (isObservableMap(target)) {\n      die(\"'extendObservable' should not be used on maps, use map.merge instead\");\n    }\n\n    if (!isPlainObject(properties)) {\n      die(\"'extendObservable' only accepts plain objects as second argument\");\n    }\n\n    if (isObservable(properties) || isObservable(annotations)) {\n      die(\"Extending an object with another observable (object) is not supported\");\n    }\n  } // Pull descriptors first, so we don't have to deal with props added by administration ($mobx)\n\n\n  var descriptors = getOwnPropertyDescriptors(properties);\n  var adm = asObservableObject(target, options)[$mobx];\n  startBatch();\n\n  try {\n    ownKeys(descriptors).forEach(function (key) {\n      adm.extend_(key, descriptors[key], // must pass \"undefined\" for { key: undefined }\n      !annotations ? true : key in annotations ? annotations[key] : true);\n    });\n  } finally {\n    endBatch();\n  }\n\n  return target;\n}\n\nfunction getDependencyTree(thing, property) {\n  return nodeToDependencyTree(getAtom(thing, property));\n}\n\nfunction nodeToDependencyTree(node) {\n  var result = {\n    name: node.name_\n  };\n\n  if (node.observing_ && node.observing_.length > 0) {\n    result.dependencies = unique(node.observing_).map(nodeToDependencyTree);\n  }\n\n  return result;\n}\n\nfunction getObserverTree(thing, property) {\n  return nodeToObserverTree(getAtom(thing, property));\n}\n\nfunction nodeToObserverTree(node) {\n  var result = {\n    name: node.name_\n  };\n\n  if (hasObservers(node)) {\n    result.observers = Array.from(getObservers(node)).map(nodeToObserverTree);\n  }\n\n  return result;\n}\n\nfunction unique(list) {\n  return Array.from(new Set(list));\n}\n\nvar generatorId = 0;\nfunction FlowCancellationError() {\n  this.message = \"FLOW_CANCELLED\";\n}\nFlowCancellationError.prototype = /*#__PURE__*/Object.create(Error.prototype);\nfunction isFlowCancellationError(error) {\n  return error instanceof FlowCancellationError;\n}\nvar flowAnnotation = /*#__PURE__*/createFlowAnnotation(\"flow\");\nvar flowBoundAnnotation = /*#__PURE__*/createFlowAnnotation(\"flow.bound\", {\n  bound: true\n});\nvar flow = /*#__PURE__*/Object.assign(function flow(arg1, arg2) {\n  // @flow\n  if (isStringish(arg2)) {\n    return storeAnnotation(arg1, arg2, flowAnnotation);\n  } // flow(fn)\n\n\n  if (process.env.NODE_ENV !== \"production\" && arguments.length !== 1) {\n    die(\"Flow expects single argument with generator function\");\n  }\n\n  var generator = arg1;\n  var name = generator.name || \"<unnamed flow>\"; // Implementation based on https://github.com/tj/co/blob/master/index.js\n\n  var res = function res() {\n    var ctx = this;\n    var args = arguments;\n    var runId = ++generatorId;\n    var gen = action(name + \" - runid: \" + runId + \" - init\", generator).apply(ctx, args);\n    var rejector;\n    var pendingPromise = undefined;\n    var promise = new Promise(function (resolve, reject) {\n      var stepId = 0;\n      rejector = reject;\n\n      function onFulfilled(res) {\n        pendingPromise = undefined;\n        var ret;\n\n        try {\n          ret = action(name + \" - runid: \" + runId + \" - yield \" + stepId++, gen.next).call(gen, res);\n        } catch (e) {\n          return reject(e);\n        }\n\n        next(ret);\n      }\n\n      function onRejected(err) {\n        pendingPromise = undefined;\n        var ret;\n\n        try {\n          ret = action(name + \" - runid: \" + runId + \" - yield \" + stepId++, gen[\"throw\"]).call(gen, err);\n        } catch (e) {\n          return reject(e);\n        }\n\n        next(ret);\n      }\n\n      function next(ret) {\n        if (isFunction(ret == null ? void 0 : ret.then)) {\n          // an async iterator\n          ret.then(next, reject);\n          return;\n        }\n\n        if (ret.done) {\n          return resolve(ret.value);\n        }\n\n        pendingPromise = Promise.resolve(ret.value);\n        return pendingPromise.then(onFulfilled, onRejected);\n      }\n\n      onFulfilled(undefined); // kick off the process\n    });\n    promise.cancel = action(name + \" - runid: \" + runId + \" - cancel\", function () {\n      try {\n        if (pendingPromise) {\n          cancelPromise(pendingPromise);\n        } // Finally block can return (or yield) stuff..\n\n\n        var _res = gen[\"return\"](undefined); // eat anything that promise would do, it's cancelled!\n\n\n        var yieldedPromise = Promise.resolve(_res.value);\n        yieldedPromise.then(noop, noop);\n        cancelPromise(yieldedPromise); // maybe it can be cancelled :)\n        // reject our original promise\n\n        rejector(new FlowCancellationError());\n      } catch (e) {\n        rejector(e); // there could be a throwing finally block\n      }\n    });\n    return promise;\n  };\n\n  res.isMobXFlow = true;\n  return res;\n}, flowAnnotation);\nflow.bound = /*#__PURE__*/createDecoratorAnnotation(flowBoundAnnotation);\n\nfunction cancelPromise(promise) {\n  if (isFunction(promise.cancel)) {\n    promise.cancel();\n  }\n}\n\nfunction flowResult(result) {\n  return result; // just tricking TypeScript :)\n}\nfunction isFlow(fn) {\n  return (fn == null ? void 0 : fn.isMobXFlow) === true;\n}\n\nfunction interceptReads(thing, propOrHandler, handler) {\n  var target;\n\n  if (isObservableMap(thing) || isObservableArray(thing) || isObservableValue(thing)) {\n    target = getAdministration(thing);\n  } else if (isObservableObject(thing)) {\n    if (process.env.NODE_ENV !== \"production\" && !isStringish(propOrHandler)) {\n      return die(\"InterceptReads can only be used with a specific property, not with an object in general\");\n    }\n\n    target = getAdministration(thing, propOrHandler);\n  } else if (process.env.NODE_ENV !== \"production\") {\n    return die(\"Expected observable map, object or array as first array\");\n  }\n\n  if (process.env.NODE_ENV !== \"production\" && target.dehancer !== undefined) {\n    return die(\"An intercept reader was already established\");\n  }\n\n  target.dehancer = typeof propOrHandler === \"function\" ? propOrHandler : handler;\n  return function () {\n    target.dehancer = undefined;\n  };\n}\n\nfunction intercept(thing, propOrHandler, handler) {\n  if (isFunction(handler)) {\n    return interceptProperty(thing, propOrHandler, handler);\n  } else {\n    return interceptInterceptable(thing, propOrHandler);\n  }\n}\n\nfunction interceptInterceptable(thing, handler) {\n  return getAdministration(thing).intercept_(handler);\n}\n\nfunction interceptProperty(thing, property, handler) {\n  return getAdministration(thing, property).intercept_(handler);\n}\n\nfunction _isComputed(value, property) {\n  if (property === undefined) {\n    return isComputedValue(value);\n  }\n\n  if (isObservableObject(value) === false) {\n    return false;\n  }\n\n  if (!value[$mobx].values_.has(property)) {\n    return false;\n  }\n\n  var atom = getAtom(value, property);\n  return isComputedValue(atom);\n}\nfunction isComputed(value) {\n  if (process.env.NODE_ENV !== \"production\" && arguments.length > 1) {\n    return die(\"isComputed expects only 1 argument. Use isComputedProp to inspect the observability of a property\");\n  }\n\n  return _isComputed(value);\n}\nfunction isComputedProp(value, propName) {\n  if (process.env.NODE_ENV !== \"production\" && !isStringish(propName)) {\n    return die(\"isComputed expected a property name as second argument\");\n  }\n\n  return _isComputed(value, propName);\n}\n\nfunction _isObservable(value, property) {\n  if (!value) {\n    return false;\n  }\n\n  if (property !== undefined) {\n    if (process.env.NODE_ENV !== \"production\" && (isObservableMap(value) || isObservableArray(value))) {\n      return die(\"isObservable(object, propertyName) is not supported for arrays and maps. Use map.has or array.length instead.\");\n    }\n\n    if (isObservableObject(value)) {\n      return value[$mobx].values_.has(property);\n    }\n\n    return false;\n  } // For first check, see #701\n\n\n  return isObservableObject(value) || !!value[$mobx] || isAtom(value) || isReaction(value) || isComputedValue(value);\n}\n\nfunction isObservable(value) {\n  if (process.env.NODE_ENV !== \"production\" && arguments.length !== 1) {\n    die(\"isObservable expects only 1 argument. Use isObservableProp to inspect the observability of a property\");\n  }\n\n  return _isObservable(value);\n}\nfunction isObservableProp(value, propName) {\n  if (process.env.NODE_ENV !== \"production\" && !isStringish(propName)) {\n    return die(\"expected a property name as second argument\");\n  }\n\n  return _isObservable(value, propName);\n}\n\nfunction keys(obj) {\n  if (isObservableObject(obj)) {\n    return obj[$mobx].keys_();\n  }\n\n  if (isObservableMap(obj) || isObservableSet(obj)) {\n    return Array.from(obj.keys());\n  }\n\n  if (isObservableArray(obj)) {\n    return obj.map(function (_, index) {\n      return index;\n    });\n  }\n\n  die(5);\n}\nfunction values(obj) {\n  if (isObservableObject(obj)) {\n    return keys(obj).map(function (key) {\n      return obj[key];\n    });\n  }\n\n  if (isObservableMap(obj)) {\n    return keys(obj).map(function (key) {\n      return obj.get(key);\n    });\n  }\n\n  if (isObservableSet(obj)) {\n    return Array.from(obj.values());\n  }\n\n  if (isObservableArray(obj)) {\n    return obj.slice();\n  }\n\n  die(6);\n}\nfunction entries(obj) {\n  if (isObservableObject(obj)) {\n    return keys(obj).map(function (key) {\n      return [key, obj[key]];\n    });\n  }\n\n  if (isObservableMap(obj)) {\n    return keys(obj).map(function (key) {\n      return [key, obj.get(key)];\n    });\n  }\n\n  if (isObservableSet(obj)) {\n    return Array.from(obj.entries());\n  }\n\n  if (isObservableArray(obj)) {\n    return obj.map(function (key, index) {\n      return [index, key];\n    });\n  }\n\n  die(7);\n}\nfunction set(obj, key, value) {\n  if (arguments.length === 2 && !isObservableSet(obj)) {\n    startBatch();\n    var _values = key;\n\n    try {\n      for (var _key in _values) {\n        set(obj, _key, _values[_key]);\n      }\n    } finally {\n      endBatch();\n    }\n\n    return;\n  }\n\n  if (isObservableObject(obj)) {\n    obj[$mobx].set_(key, value);\n  } else if (isObservableMap(obj)) {\n    obj.set(key, value);\n  } else if (isObservableSet(obj)) {\n    obj.add(key);\n  } else if (isObservableArray(obj)) {\n    if (typeof key !== \"number\") {\n      key = parseInt(key, 10);\n    }\n\n    if (key < 0) {\n      die(\"Invalid index: '\" + key + \"'\");\n    }\n\n    startBatch();\n\n    if (key >= obj.length) {\n      obj.length = key + 1;\n    }\n\n    obj[key] = value;\n    endBatch();\n  } else {\n    die(8);\n  }\n}\nfunction remove(obj, key) {\n  if (isObservableObject(obj)) {\n    obj[$mobx].delete_(key);\n  } else if (isObservableMap(obj)) {\n    obj[\"delete\"](key);\n  } else if (isObservableSet(obj)) {\n    obj[\"delete\"](key);\n  } else if (isObservableArray(obj)) {\n    if (typeof key !== \"number\") {\n      key = parseInt(key, 10);\n    }\n\n    obj.splice(key, 1);\n  } else {\n    die(9);\n  }\n}\nfunction has(obj, key) {\n  if (isObservableObject(obj)) {\n    return obj[$mobx].has_(key);\n  } else if (isObservableMap(obj)) {\n    return obj.has(key);\n  } else if (isObservableSet(obj)) {\n    return obj.has(key);\n  } else if (isObservableArray(obj)) {\n    return key >= 0 && key < obj.length;\n  }\n\n  die(10);\n}\nfunction get(obj, key) {\n  if (!has(obj, key)) {\n    return undefined;\n  }\n\n  if (isObservableObject(obj)) {\n    return obj[$mobx].get_(key);\n  } else if (isObservableMap(obj)) {\n    return obj.get(key);\n  } else if (isObservableArray(obj)) {\n    return obj[key];\n  }\n\n  die(11);\n}\nfunction apiDefineProperty(obj, key, descriptor) {\n  if (isObservableObject(obj)) {\n    return obj[$mobx].defineProperty_(key, descriptor);\n  }\n\n  die(39);\n}\nfunction apiOwnKeys(obj) {\n  if (isObservableObject(obj)) {\n    return obj[$mobx].ownKeys_();\n  }\n\n  die(38);\n}\n\nfunction observe(thing, propOrCb, cbOrFire, fireImmediately) {\n  if (isFunction(cbOrFire)) {\n    return observeObservableProperty(thing, propOrCb, cbOrFire, fireImmediately);\n  } else {\n    return observeObservable(thing, propOrCb, cbOrFire);\n  }\n}\n\nfunction observeObservable(thing, listener, fireImmediately) {\n  return getAdministration(thing).observe_(listener, fireImmediately);\n}\n\nfunction observeObservableProperty(thing, property, listener, fireImmediately) {\n  return getAdministration(thing, property).observe_(listener, fireImmediately);\n}\n\nfunction cache(map, key, value) {\n  map.set(key, value);\n  return value;\n}\n\nfunction toJSHelper(source, __alreadySeen) {\n  if (source == null || typeof source !== \"object\" || source instanceof Date || !isObservable(source)) {\n    return source;\n  }\n\n  if (isObservableValue(source) || isComputedValue(source)) {\n    return toJSHelper(source.get(), __alreadySeen);\n  }\n\n  if (__alreadySeen.has(source)) {\n    return __alreadySeen.get(source);\n  }\n\n  if (isObservableArray(source)) {\n    var res = cache(__alreadySeen, source, new Array(source.length));\n    source.forEach(function (value, idx) {\n      res[idx] = toJSHelper(value, __alreadySeen);\n    });\n    return res;\n  }\n\n  if (isObservableSet(source)) {\n    var _res = cache(__alreadySeen, source, new Set());\n\n    source.forEach(function (value) {\n      _res.add(toJSHelper(value, __alreadySeen));\n    });\n    return _res;\n  }\n\n  if (isObservableMap(source)) {\n    var _res2 = cache(__alreadySeen, source, new Map());\n\n    source.forEach(function (value, key) {\n      _res2.set(key, toJSHelper(value, __alreadySeen));\n    });\n    return _res2;\n  } else {\n    // must be observable object\n    var _res3 = cache(__alreadySeen, source, {});\n\n    apiOwnKeys(source).forEach(function (key) {\n      if (objectPrototype.propertyIsEnumerable.call(source, key)) {\n        _res3[key] = toJSHelper(source[key], __alreadySeen);\n      }\n    });\n    return _res3;\n  }\n}\n/**\r\n * Recursively converts an observable to it's non-observable native counterpart.\r\n * It does NOT recurse into non-observables, these are left as they are, even if they contain observables.\r\n * Computed and other non-enumerable properties are completely ignored.\r\n * Complex scenarios require custom solution, eg implementing `toJSON` or using `serializr` lib.\r\n */\n\n\nfunction toJS(source, options) {\n  if (process.env.NODE_ENV !== \"production\" && options) {\n    die(\"toJS no longer supports options\");\n  }\n\n  return toJSHelper(source, new Map());\n}\n\nfunction trace() {\n  if (!(process.env.NODE_ENV !== \"production\")) {\n    die(\"trace() is not available in production builds\");\n  }\n\n  var enterBreakPoint = false;\n\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  if (typeof args[args.length - 1] === \"boolean\") {\n    enterBreakPoint = args.pop();\n  }\n\n  var derivation = getAtomFromArgs(args);\n\n  if (!derivation) {\n    return die(\"'trace(break?)' can only be used inside a tracked computed value or a Reaction. Consider passing in the computed value or reaction explicitly\");\n  }\n\n  if (derivation.isTracing_ === TraceMode.NONE) {\n    console.log(\"[mobx.trace] '\" + derivation.name_ + \"' tracing enabled\");\n  }\n\n  derivation.isTracing_ = enterBreakPoint ? TraceMode.BREAK : TraceMode.LOG;\n}\n\nfunction getAtomFromArgs(args) {\n  switch (args.length) {\n    case 0:\n      return globalState.trackingDerivation;\n\n    case 1:\n      return getAtom(args[0]);\n\n    case 2:\n      return getAtom(args[0], args[1]);\n  }\n}\n\n/**\r\n * During a transaction no views are updated until the end of the transaction.\r\n * The transaction will be run synchronously nonetheless.\r\n *\r\n * @param action a function that updates some reactive state\r\n * @returns any value that was returned by the 'action' parameter.\r\n */\n\nfunction transaction(action, thisArg) {\n  if (thisArg === void 0) {\n    thisArg = undefined;\n  }\n\n  startBatch();\n\n  try {\n    return action.apply(thisArg);\n  } finally {\n    endBatch();\n  }\n}\n\nfunction when(predicate, arg1, arg2) {\n  if (arguments.length === 1 || arg1 && typeof arg1 === \"object\") {\n    return whenPromise(predicate, arg1);\n  }\n\n  return _when(predicate, arg1, arg2 || {});\n}\n\nfunction _when(predicate, effect, opts) {\n  var timeoutHandle;\n\n  if (typeof opts.timeout === \"number\") {\n    var error = new Error(\"WHEN_TIMEOUT\");\n    timeoutHandle = setTimeout(function () {\n      if (!disposer[$mobx].isDisposed_) {\n        disposer();\n\n        if (opts.onError) {\n          opts.onError(error);\n        } else {\n          throw error;\n        }\n      }\n    }, opts.timeout);\n  }\n\n  opts.name = process.env.NODE_ENV !== \"production\" ? opts.name || \"When@\" + getNextId() : \"When\";\n  var effectAction = createAction(process.env.NODE_ENV !== \"production\" ? opts.name + \"-effect\" : \"When-effect\", effect); // eslint-disable-next-line\n\n  var disposer = autorun(function (r) {\n    // predicate should not change state\n    var cond = allowStateChanges(false, predicate);\n\n    if (cond) {\n      r.dispose();\n\n      if (timeoutHandle) {\n        clearTimeout(timeoutHandle);\n      }\n\n      effectAction();\n    }\n  }, opts);\n  return disposer;\n}\n\nfunction whenPromise(predicate, opts) {\n  if (process.env.NODE_ENV !== \"production\" && opts && opts.onError) {\n    return die(\"the options 'onError' and 'promise' cannot be combined\");\n  }\n\n  var cancel;\n  var res = new Promise(function (resolve, reject) {\n    var disposer = _when(predicate, resolve, _extends({}, opts, {\n      onError: reject\n    }));\n\n    cancel = function cancel() {\n      disposer();\n      reject(new Error(\"WHEN_CANCELLED\"));\n    };\n  });\n  res.cancel = cancel;\n  return res;\n}\n\nfunction getAdm(target) {\n  return target[$mobx];\n} // Optimization: we don't need the intermediate objects and could have a completely custom administration for DynamicObjects,\n// and skip either the internal values map, or the base object with its property descriptors!\n\n\nvar objectProxyTraps = {\n  has: function has(target, name) {\n    if (process.env.NODE_ENV !== \"production\" && globalState.trackingDerivation) {\n      warnAboutProxyRequirement(\"detect new properties using the 'in' operator. Use 'has' from 'mobx' instead.\");\n    }\n\n    return getAdm(target).has_(name);\n  },\n  get: function get(target, name) {\n    return getAdm(target).get_(name);\n  },\n  set: function set(target, name, value) {\n    var _getAdm$set_;\n\n    if (!isStringish(name)) {\n      return false;\n    }\n\n    if (process.env.NODE_ENV !== \"production\" && !getAdm(target).values_.has(name)) {\n      warnAboutProxyRequirement(\"add a new observable property through direct assignment. Use 'set' from 'mobx' instead.\");\n    } // null (intercepted) -> true (success)\n\n\n    return (_getAdm$set_ = getAdm(target).set_(name, value, true)) != null ? _getAdm$set_ : true;\n  },\n  deleteProperty: function deleteProperty(target, name) {\n    var _getAdm$delete_;\n\n    if (process.env.NODE_ENV !== \"production\") {\n      warnAboutProxyRequirement(\"delete properties from an observable object. Use 'remove' from 'mobx' instead.\");\n    }\n\n    if (!isStringish(name)) {\n      return false;\n    } // null (intercepted) -> true (success)\n\n\n    return (_getAdm$delete_ = getAdm(target).delete_(name, true)) != null ? _getAdm$delete_ : true;\n  },\n  defineProperty: function defineProperty(target, name, descriptor) {\n    var _getAdm$definePropert;\n\n    if (process.env.NODE_ENV !== \"production\") {\n      warnAboutProxyRequirement(\"define property on an observable object. Use 'defineProperty' from 'mobx' instead.\");\n    } // null (intercepted) -> true (success)\n\n\n    return (_getAdm$definePropert = getAdm(target).defineProperty_(name, descriptor)) != null ? _getAdm$definePropert : true;\n  },\n  ownKeys: function ownKeys(target) {\n    if (process.env.NODE_ENV !== \"production\" && globalState.trackingDerivation) {\n      warnAboutProxyRequirement(\"iterate keys to detect added / removed properties. Use 'keys' from 'mobx' instead.\");\n    }\n\n    return getAdm(target).ownKeys_();\n  },\n  preventExtensions: function preventExtensions(target) {\n    die(13);\n  }\n};\nfunction asDynamicObservableObject(target, options) {\n  var _target$$mobx, _target$$mobx$proxy_;\n\n  assertProxies();\n  target = asObservableObject(target, options);\n  return (_target$$mobx$proxy_ = (_target$$mobx = target[$mobx]).proxy_) != null ? _target$$mobx$proxy_ : _target$$mobx.proxy_ = new Proxy(target, objectProxyTraps);\n}\n\nfunction hasInterceptors(interceptable) {\n  return interceptable.interceptors_ !== undefined && interceptable.interceptors_.length > 0;\n}\nfunction registerInterceptor(interceptable, handler) {\n  var interceptors = interceptable.interceptors_ || (interceptable.interceptors_ = []);\n  interceptors.push(handler);\n  return once(function () {\n    var idx = interceptors.indexOf(handler);\n\n    if (idx !== -1) {\n      interceptors.splice(idx, 1);\n    }\n  });\n}\nfunction interceptChange(interceptable, change) {\n  var prevU = untrackedStart();\n\n  try {\n    // Interceptor can modify the array, copy it to avoid concurrent modification, see #1950\n    var interceptors = [].concat(interceptable.interceptors_ || []);\n\n    for (var i = 0, l = interceptors.length; i < l; i++) {\n      change = interceptors[i](change);\n\n      if (change && !change.type) {\n        die(14);\n      }\n\n      if (!change) {\n        break;\n      }\n    }\n\n    return change;\n  } finally {\n    untrackedEnd(prevU);\n  }\n}\n\nfunction hasListeners(listenable) {\n  return listenable.changeListeners_ !== undefined && listenable.changeListeners_.length > 0;\n}\nfunction registerListener(listenable, handler) {\n  var listeners = listenable.changeListeners_ || (listenable.changeListeners_ = []);\n  listeners.push(handler);\n  return once(function () {\n    var idx = listeners.indexOf(handler);\n\n    if (idx !== -1) {\n      listeners.splice(idx, 1);\n    }\n  });\n}\nfunction notifyListeners(listenable, change) {\n  var prevU = untrackedStart();\n  var listeners = listenable.changeListeners_;\n\n  if (!listeners) {\n    return;\n  }\n\n  listeners = listeners.slice();\n\n  for (var i = 0, l = listeners.length; i < l; i++) {\n    listeners[i](change);\n  }\n\n  untrackedEnd(prevU);\n}\n\nfunction makeObservable(target, annotations, options) {\n  var adm = asObservableObject(target, options)[$mobx];\n  startBatch();\n\n  try {\n    var _annotations;\n\n    if (process.env.NODE_ENV !== \"production\" && annotations && target[storedAnnotationsSymbol]) {\n      die(\"makeObservable second arg must be nullish when using decorators. Mixing @decorator syntax with annotations is not supported.\");\n    } // Default to decorators\n\n\n    (_annotations = annotations) != null ? _annotations : annotations = collectStoredAnnotations(target); // Annotate\n\n    ownKeys(annotations).forEach(function (key) {\n      return adm.make_(key, annotations[key]);\n    });\n  } finally {\n    endBatch();\n  }\n\n  return target;\n} // proto[keysSymbol] = new Set<PropertyKey>()\n\nvar keysSymbol = /*#__PURE__*/Symbol(\"mobx-keys\");\nfunction makeAutoObservable(target, overrides, options) {\n  if (process.env.NODE_ENV !== \"production\") {\n    if (!isPlainObject(target) && !isPlainObject(Object.getPrototypeOf(target))) {\n      die(\"'makeAutoObservable' can only be used for classes that don't have a superclass\");\n    }\n\n    if (isObservableObject(target)) {\n      die(\"makeAutoObservable can only be used on objects not already made observable\");\n    }\n  } // Optimization: avoid visiting protos\n  // Assumes that annotation.make_/.extend_ works the same for plain objects\n\n\n  if (isPlainObject(target)) {\n    return extendObservable(target, target, overrides, options);\n  }\n\n  var adm = asObservableObject(target, options)[$mobx]; // Optimization: cache keys on proto\n  // Assumes makeAutoObservable can be called only once per object and can't be used in subclass\n\n  if (!target[keysSymbol]) {\n    var proto = Object.getPrototypeOf(target);\n    var keys = new Set([].concat(ownKeys(target), ownKeys(proto)));\n    keys[\"delete\"](\"constructor\");\n    keys[\"delete\"]($mobx);\n    addHiddenProp(proto, keysSymbol, keys);\n  }\n\n  startBatch();\n\n  try {\n    target[keysSymbol].forEach(function (key) {\n      return adm.make_(key, // must pass \"undefined\" for { key: undefined }\n      !overrides ? true : key in overrides ? overrides[key] : true);\n    });\n  } finally {\n    endBatch();\n  }\n\n  return target;\n}\n\nvar SPLICE = \"splice\";\nvar UPDATE = \"update\";\nvar MAX_SPLICE_SIZE = 10000; // See e.g. https://github.com/mobxjs/mobx/issues/859\n\nvar arrayTraps = {\n  get: function get(target, name) {\n    var adm = target[$mobx];\n\n    if (name === $mobx) {\n      return adm;\n    }\n\n    if (name === \"length\") {\n      return adm.getArrayLength_();\n    }\n\n    if (typeof name === \"string\" && !isNaN(name)) {\n      return adm.get_(parseInt(name));\n    }\n\n    if (hasProp(arrayExtensions, name)) {\n      return arrayExtensions[name];\n    }\n\n    return target[name];\n  },\n  set: function set(target, name, value) {\n    var adm = target[$mobx];\n\n    if (name === \"length\") {\n      adm.setArrayLength_(value);\n    }\n\n    if (typeof name === \"symbol\" || isNaN(name)) {\n      target[name] = value;\n    } else {\n      // numeric string\n      adm.set_(parseInt(name), value);\n    }\n\n    return true;\n  },\n  preventExtensions: function preventExtensions() {\n    die(15);\n  }\n};\nvar ObservableArrayAdministration = /*#__PURE__*/function () {\n  // this is the prop that gets proxied, so can't replace it!\n  function ObservableArrayAdministration(name, enhancer, owned_, legacyMode_) {\n    if (name === void 0) {\n      name = process.env.NODE_ENV !== \"production\" ? \"ObservableArray@\" + getNextId() : \"ObservableArray\";\n    }\n\n    this.owned_ = void 0;\n    this.legacyMode_ = void 0;\n    this.atom_ = void 0;\n    this.values_ = [];\n    this.interceptors_ = void 0;\n    this.changeListeners_ = void 0;\n    this.enhancer_ = void 0;\n    this.dehancer = void 0;\n    this.proxy_ = void 0;\n    this.lastKnownLength_ = 0;\n    this.owned_ = owned_;\n    this.legacyMode_ = legacyMode_;\n    this.atom_ = new Atom(name);\n\n    this.enhancer_ = function (newV, oldV) {\n      return enhancer(newV, oldV, process.env.NODE_ENV !== \"production\" ? name + \"[..]\" : \"ObservableArray[..]\");\n    };\n  }\n\n  var _proto = ObservableArrayAdministration.prototype;\n\n  _proto.dehanceValue_ = function dehanceValue_(value) {\n    if (this.dehancer !== undefined) {\n      return this.dehancer(value);\n    }\n\n    return value;\n  };\n\n  _proto.dehanceValues_ = function dehanceValues_(values) {\n    if (this.dehancer !== undefined && values.length > 0) {\n      return values.map(this.dehancer);\n    }\n\n    return values;\n  };\n\n  _proto.intercept_ = function intercept_(handler) {\n    return registerInterceptor(this, handler);\n  };\n\n  _proto.observe_ = function observe_(listener, fireImmediately) {\n    if (fireImmediately === void 0) {\n      fireImmediately = false;\n    }\n\n    if (fireImmediately) {\n      listener({\n        observableKind: \"array\",\n        object: this.proxy_,\n        debugObjectName: this.atom_.name_,\n        type: \"splice\",\n        index: 0,\n        added: this.values_.slice(),\n        addedCount: this.values_.length,\n        removed: [],\n        removedCount: 0\n      });\n    }\n\n    return registerListener(this, listener);\n  };\n\n  _proto.getArrayLength_ = function getArrayLength_() {\n    this.atom_.reportObserved();\n    return this.values_.length;\n  };\n\n  _proto.setArrayLength_ = function setArrayLength_(newLength) {\n    if (typeof newLength !== \"number\" || isNaN(newLength) || newLength < 0) {\n      die(\"Out of range: \" + newLength);\n    }\n\n    var currentLength = this.values_.length;\n\n    if (newLength === currentLength) {\n      return;\n    } else if (newLength > currentLength) {\n      var newItems = new Array(newLength - currentLength);\n\n      for (var i = 0; i < newLength - currentLength; i++) {\n        newItems[i] = undefined;\n      } // No Array.fill everywhere...\n\n\n      this.spliceWithArray_(currentLength, 0, newItems);\n    } else {\n      this.spliceWithArray_(newLength, currentLength - newLength);\n    }\n  };\n\n  _proto.updateArrayLength_ = function updateArrayLength_(oldLength, delta) {\n    if (oldLength !== this.lastKnownLength_) {\n      die(16);\n    }\n\n    this.lastKnownLength_ += delta;\n\n    if (this.legacyMode_ && delta > 0) {\n      reserveArrayBuffer(oldLength + delta + 1);\n    }\n  };\n\n  _proto.spliceWithArray_ = function spliceWithArray_(index, deleteCount, newItems) {\n    var _this = this;\n\n    checkIfStateModificationsAreAllowed(this.atom_);\n    var length = this.values_.length;\n\n    if (index === undefined) {\n      index = 0;\n    } else if (index > length) {\n      index = length;\n    } else if (index < 0) {\n      index = Math.max(0, length + index);\n    }\n\n    if (arguments.length === 1) {\n      deleteCount = length - index;\n    } else if (deleteCount === undefined || deleteCount === null) {\n      deleteCount = 0;\n    } else {\n      deleteCount = Math.max(0, Math.min(deleteCount, length - index));\n    }\n\n    if (newItems === undefined) {\n      newItems = EMPTY_ARRAY;\n    }\n\n    if (hasInterceptors(this)) {\n      var change = interceptChange(this, {\n        object: this.proxy_,\n        type: SPLICE,\n        index: index,\n        removedCount: deleteCount,\n        added: newItems\n      });\n\n      if (!change) {\n        return EMPTY_ARRAY;\n      }\n\n      deleteCount = change.removedCount;\n      newItems = change.added;\n    }\n\n    newItems = newItems.length === 0 ? newItems : newItems.map(function (v) {\n      return _this.enhancer_(v, undefined);\n    });\n\n    if (this.legacyMode_ || process.env.NODE_ENV !== \"production\") {\n      var lengthDelta = newItems.length - deleteCount;\n      this.updateArrayLength_(length, lengthDelta); // checks if internal array wasn't modified\n    }\n\n    var res = this.spliceItemsIntoValues_(index, deleteCount, newItems);\n\n    if (deleteCount !== 0 || newItems.length !== 0) {\n      this.notifyArraySplice_(index, newItems, res);\n    }\n\n    return this.dehanceValues_(res);\n  };\n\n  _proto.spliceItemsIntoValues_ = function spliceItemsIntoValues_(index, deleteCount, newItems) {\n    if (newItems.length < MAX_SPLICE_SIZE) {\n      var _this$values_;\n\n      return (_this$values_ = this.values_).splice.apply(_this$values_, [index, deleteCount].concat(newItems));\n    } else {\n      // The items removed by the splice\n      var res = this.values_.slice(index, index + deleteCount); // The items that that should remain at the end of the array\n\n      var oldItems = this.values_.slice(index + deleteCount); // New length is the previous length + addition count - deletion count\n\n      this.values_.length += newItems.length - deleteCount;\n\n      for (var i = 0; i < newItems.length; i++) {\n        this.values_[index + i] = newItems[i];\n      }\n\n      for (var _i = 0; _i < oldItems.length; _i++) {\n        this.values_[index + newItems.length + _i] = oldItems[_i];\n      }\n\n      return res;\n    }\n  };\n\n  _proto.notifyArrayChildUpdate_ = function notifyArrayChildUpdate_(index, newValue, oldValue) {\n    var notifySpy = !this.owned_ && isSpyEnabled();\n    var notify = hasListeners(this);\n    var change = notify || notifySpy ? {\n      observableKind: \"array\",\n      object: this.proxy_,\n      type: UPDATE,\n      debugObjectName: this.atom_.name_,\n      index: index,\n      newValue: newValue,\n      oldValue: oldValue\n    } : null; // The reason why this is on right hand side here (and not above), is this way the uglifier will drop it, but it won't\n    // cause any runtime overhead in development mode without NODE_ENV set, unless spying is enabled\n\n    if (process.env.NODE_ENV !== \"production\" && notifySpy) {\n      spyReportStart(change);\n    }\n\n    this.atom_.reportChanged();\n\n    if (notify) {\n      notifyListeners(this, change);\n    }\n\n    if (process.env.NODE_ENV !== \"production\" && notifySpy) {\n      spyReportEnd();\n    }\n  };\n\n  _proto.notifyArraySplice_ = function notifyArraySplice_(index, added, removed) {\n    var notifySpy = !this.owned_ && isSpyEnabled();\n    var notify = hasListeners(this);\n    var change = notify || notifySpy ? {\n      observableKind: \"array\",\n      object: this.proxy_,\n      debugObjectName: this.atom_.name_,\n      type: SPLICE,\n      index: index,\n      removed: removed,\n      added: added,\n      removedCount: removed.length,\n      addedCount: added.length\n    } : null;\n\n    if (process.env.NODE_ENV !== \"production\" && notifySpy) {\n      spyReportStart(change);\n    }\n\n    this.atom_.reportChanged(); // conform: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/observe\n\n    if (notify) {\n      notifyListeners(this, change);\n    }\n\n    if (process.env.NODE_ENV !== \"production\" && notifySpy) {\n      spyReportEnd();\n    }\n  };\n\n  _proto.get_ = function get_(index) {\n    if (index < this.values_.length) {\n      this.atom_.reportObserved();\n      return this.dehanceValue_(this.values_[index]);\n    }\n\n    console.warn(process.env.NODE_ENV !== \"production\" ? \"[mobx] Out of bounds read: \" + index : \"[mobx.array] Attempt to read an array index (\" + index + \") that is out of bounds (\" + this.values_.length + \"). Please check length first. Out of bound indices will not be tracked by MobX\");\n  };\n\n  _proto.set_ = function set_(index, newValue) {\n    var values = this.values_;\n\n    if (index < values.length) {\n      // update at index in range\n      checkIfStateModificationsAreAllowed(this.atom_);\n      var oldValue = values[index];\n\n      if (hasInterceptors(this)) {\n        var change = interceptChange(this, {\n          type: UPDATE,\n          object: this.proxy_,\n          index: index,\n          newValue: newValue\n        });\n\n        if (!change) {\n          return;\n        }\n\n        newValue = change.newValue;\n      }\n\n      newValue = this.enhancer_(newValue, oldValue);\n      var changed = newValue !== oldValue;\n\n      if (changed) {\n        values[index] = newValue;\n        this.notifyArrayChildUpdate_(index, newValue, oldValue);\n      }\n    } else if (index === values.length) {\n      // add a new item\n      this.spliceWithArray_(index, 0, [newValue]);\n    } else {\n      // out of bounds\n      die(17, index, values.length);\n    }\n  };\n\n  return ObservableArrayAdministration;\n}();\nfunction createObservableArray(initialValues, enhancer, name, owned) {\n  if (name === void 0) {\n    name = process.env.NODE_ENV !== \"production\" ? \"ObservableArray@\" + getNextId() : \"ObservableArray\";\n  }\n\n  if (owned === void 0) {\n    owned = false;\n  }\n\n  assertProxies();\n  var adm = new ObservableArrayAdministration(name, enhancer, owned, false);\n  addHiddenFinalProp(adm.values_, $mobx, adm);\n  var proxy = new Proxy(adm.values_, arrayTraps);\n  adm.proxy_ = proxy;\n\n  if (initialValues && initialValues.length) {\n    var prev = allowStateChangesStart(true);\n    adm.spliceWithArray_(0, 0, initialValues);\n    allowStateChangesEnd(prev);\n  }\n\n  return proxy;\n} // eslint-disable-next-line\n\nvar arrayExtensions = {\n  clear: function clear() {\n    return this.splice(0);\n  },\n  replace: function replace(newItems) {\n    var adm = this[$mobx];\n    return adm.spliceWithArray_(0, adm.values_.length, newItems);\n  },\n  // Used by JSON.stringify\n  toJSON: function toJSON() {\n    return this.slice();\n  },\n\n  /*\r\n   * functions that do alter the internal structure of the array, (based on lib.es6.d.ts)\r\n   * since these functions alter the inner structure of the array, the have side effects.\r\n   * Because the have side effects, they should not be used in computed function,\r\n   * and for that reason the do not call dependencyState.notifyObserved\r\n   */\n  splice: function splice(index, deleteCount) {\n    for (var _len = arguments.length, newItems = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n      newItems[_key - 2] = arguments[_key];\n    }\n\n    var adm = this[$mobx];\n\n    switch (arguments.length) {\n      case 0:\n        return [];\n\n      case 1:\n        return adm.spliceWithArray_(index);\n\n      case 2:\n        return adm.spliceWithArray_(index, deleteCount);\n    }\n\n    return adm.spliceWithArray_(index, deleteCount, newItems);\n  },\n  spliceWithArray: function spliceWithArray(index, deleteCount, newItems) {\n    return this[$mobx].spliceWithArray_(index, deleteCount, newItems);\n  },\n  push: function push() {\n    var adm = this[$mobx];\n\n    for (var _len2 = arguments.length, items = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      items[_key2] = arguments[_key2];\n    }\n\n    adm.spliceWithArray_(adm.values_.length, 0, items);\n    return adm.values_.length;\n  },\n  pop: function pop() {\n    return this.splice(Math.max(this[$mobx].values_.length - 1, 0), 1)[0];\n  },\n  shift: function shift() {\n    return this.splice(0, 1)[0];\n  },\n  unshift: function unshift() {\n    var adm = this[$mobx];\n\n    for (var _len3 = arguments.length, items = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n      items[_key3] = arguments[_key3];\n    }\n\n    adm.spliceWithArray_(0, 0, items);\n    return adm.values_.length;\n  },\n  reverse: function reverse() {\n    // reverse by default mutates in place before returning the result\n    // which makes it both a 'derivation' and a 'mutation'.\n    if (globalState.trackingDerivation) {\n      die(37, \"reverse\");\n    }\n\n    this.replace(this.slice().reverse());\n    return this;\n  },\n  sort: function sort() {\n    // sort by default mutates in place before returning the result\n    // which goes against all good practices. Let's not change the array in place!\n    if (globalState.trackingDerivation) {\n      die(37, \"sort\");\n    }\n\n    var copy = this.slice();\n    copy.sort.apply(copy, arguments);\n    this.replace(copy);\n    return this;\n  },\n  remove: function remove(value) {\n    var adm = this[$mobx];\n    var idx = adm.dehanceValues_(adm.values_).indexOf(value);\n\n    if (idx > -1) {\n      this.splice(idx, 1);\n      return true;\n    }\n\n    return false;\n  }\n};\n/**\r\n * Wrap function from prototype\r\n * Without this, everything works as well, but this works\r\n * faster as everything works on unproxied values\r\n */\n\naddArrayExtension(\"concat\", simpleFunc);\naddArrayExtension(\"flat\", simpleFunc);\naddArrayExtension(\"includes\", simpleFunc);\naddArrayExtension(\"indexOf\", simpleFunc);\naddArrayExtension(\"join\", simpleFunc);\naddArrayExtension(\"lastIndexOf\", simpleFunc);\naddArrayExtension(\"slice\", simpleFunc);\naddArrayExtension(\"toString\", simpleFunc);\naddArrayExtension(\"toLocaleString\", simpleFunc); // map\n\naddArrayExtension(\"every\", mapLikeFunc);\naddArrayExtension(\"filter\", mapLikeFunc);\naddArrayExtension(\"find\", mapLikeFunc);\naddArrayExtension(\"findIndex\", mapLikeFunc);\naddArrayExtension(\"flatMap\", mapLikeFunc);\naddArrayExtension(\"forEach\", mapLikeFunc);\naddArrayExtension(\"map\", mapLikeFunc);\naddArrayExtension(\"some\", mapLikeFunc); // reduce\n\naddArrayExtension(\"reduce\", reduceLikeFunc);\naddArrayExtension(\"reduceRight\", reduceLikeFunc);\n\nfunction addArrayExtension(funcName, funcFactory) {\n  if (typeof Array.prototype[funcName] === \"function\") {\n    arrayExtensions[funcName] = funcFactory(funcName);\n  }\n} // Report and delegate to dehanced array\n\n\nfunction simpleFunc(funcName) {\n  return function () {\n    var adm = this[$mobx];\n    adm.atom_.reportObserved();\n    var dehancedValues = adm.dehanceValues_(adm.values_);\n    return dehancedValues[funcName].apply(dehancedValues, arguments);\n  };\n} // Make sure callbacks recieve correct array arg #2326\n\n\nfunction mapLikeFunc(funcName) {\n  return function (callback, thisArg) {\n    var _this2 = this;\n\n    var adm = this[$mobx];\n    adm.atom_.reportObserved();\n    var dehancedValues = adm.dehanceValues_(adm.values_);\n    return dehancedValues[funcName](function (element, index) {\n      return callback.call(thisArg, element, index, _this2);\n    });\n  };\n} // Make sure callbacks recieve correct array arg #2326\n\n\nfunction reduceLikeFunc(funcName) {\n  return function () {\n    var _this3 = this;\n\n    var adm = this[$mobx];\n    adm.atom_.reportObserved();\n    var dehancedValues = adm.dehanceValues_(adm.values_); // #2432 - reduce behavior depends on arguments.length\n\n    var callback = arguments[0];\n\n    arguments[0] = function (accumulator, currentValue, index) {\n      return callback(accumulator, currentValue, index, _this3);\n    };\n\n    return dehancedValues[funcName].apply(dehancedValues, arguments);\n  };\n}\n\nvar isObservableArrayAdministration = /*#__PURE__*/createInstanceofPredicate(\"ObservableArrayAdministration\", ObservableArrayAdministration);\nfunction isObservableArray(thing) {\n  return isObject(thing) && isObservableArrayAdministration(thing[$mobx]);\n}\n\nvar _Symbol$iterator, _Symbol$toStringTag;\nvar ObservableMapMarker = {};\nvar ADD = \"add\";\nvar DELETE = \"delete\"; // just extend Map? See also https://gist.github.com/nestharus/13b4d74f2ef4a2f4357dbd3fc23c1e54\n// But: https://github.com/mobxjs/mobx/issues/1556\n\n_Symbol$iterator = Symbol.iterator;\n_Symbol$toStringTag = Symbol.toStringTag;\nvar ObservableMap = /*#__PURE__*/function () {\n  // hasMap, not hashMap >-).\n  function ObservableMap(initialData, enhancer_, name_) {\n    var _this = this;\n\n    if (enhancer_ === void 0) {\n      enhancer_ = deepEnhancer;\n    }\n\n    if (name_ === void 0) {\n      name_ = process.env.NODE_ENV !== \"production\" ? \"ObservableMap@\" + getNextId() : \"ObservableMap\";\n    }\n\n    this.enhancer_ = void 0;\n    this.name_ = void 0;\n    this[$mobx] = ObservableMapMarker;\n    this.data_ = void 0;\n    this.hasMap_ = void 0;\n    this.keysAtom_ = void 0;\n    this.interceptors_ = void 0;\n    this.changeListeners_ = void 0;\n    this.dehancer = void 0;\n    this.enhancer_ = enhancer_;\n    this.name_ = name_;\n\n    if (!isFunction(Map)) {\n      die(18);\n    }\n\n    this.keysAtom_ = createAtom(process.env.NODE_ENV !== \"production\" ? this.name_ + \".keys()\" : \"ObservableMap.keys()\");\n    this.data_ = new Map();\n    this.hasMap_ = new Map();\n    allowStateChanges(true, function () {\n      _this.merge(initialData);\n    });\n  }\n\n  var _proto = ObservableMap.prototype;\n\n  _proto.has_ = function has_(key) {\n    return this.data_.has(key);\n  };\n\n  _proto.has = function has(key) {\n    var _this2 = this;\n\n    if (!globalState.trackingDerivation) {\n      return this.has_(key);\n    }\n\n    var entry = this.hasMap_.get(key);\n\n    if (!entry) {\n      var newEntry = entry = new ObservableValue(this.has_(key), referenceEnhancer, process.env.NODE_ENV !== \"production\" ? this.name_ + \".\" + stringifyKey(key) + \"?\" : \"ObservableMap.key?\", false);\n      this.hasMap_.set(key, newEntry);\n      onBecomeUnobserved(newEntry, function () {\n        return _this2.hasMap_[\"delete\"](key);\n      });\n    }\n\n    return entry.get();\n  };\n\n  _proto.set = function set(key, value) {\n    var hasKey = this.has_(key);\n\n    if (hasInterceptors(this)) {\n      var change = interceptChange(this, {\n        type: hasKey ? UPDATE : ADD,\n        object: this,\n        newValue: value,\n        name: key\n      });\n\n      if (!change) {\n        return this;\n      }\n\n      value = change.newValue;\n    }\n\n    if (hasKey) {\n      this.updateValue_(key, value);\n    } else {\n      this.addValue_(key, value);\n    }\n\n    return this;\n  };\n\n  _proto[\"delete\"] = function _delete(key) {\n    var _this3 = this;\n\n    checkIfStateModificationsAreAllowed(this.keysAtom_);\n\n    if (hasInterceptors(this)) {\n      var change = interceptChange(this, {\n        type: DELETE,\n        object: this,\n        name: key\n      });\n\n      if (!change) {\n        return false;\n      }\n    }\n\n    if (this.has_(key)) {\n      var notifySpy = isSpyEnabled();\n      var notify = hasListeners(this);\n\n      var _change = notify || notifySpy ? {\n        observableKind: \"map\",\n        debugObjectName: this.name_,\n        type: DELETE,\n        object: this,\n        oldValue: this.data_.get(key).value_,\n        name: key\n      } : null;\n\n      if (process.env.NODE_ENV !== \"production\" && notifySpy) {\n        spyReportStart(_change);\n      } // TODO fix type\n\n\n      transaction(function () {\n        var _this3$hasMap_$get;\n\n        _this3.keysAtom_.reportChanged();\n\n        (_this3$hasMap_$get = _this3.hasMap_.get(key)) == null ? void 0 : _this3$hasMap_$get.setNewValue_(false);\n\n        var observable = _this3.data_.get(key);\n\n        observable.setNewValue_(undefined);\n\n        _this3.data_[\"delete\"](key);\n      });\n\n      if (notify) {\n        notifyListeners(this, _change);\n      }\n\n      if (process.env.NODE_ENV !== \"production\" && notifySpy) {\n        spyReportEnd();\n      }\n\n      return true;\n    }\n\n    return false;\n  };\n\n  _proto.updateValue_ = function updateValue_(key, newValue) {\n    var observable = this.data_.get(key);\n    newValue = observable.prepareNewValue_(newValue);\n\n    if (newValue !== globalState.UNCHANGED) {\n      var notifySpy = isSpyEnabled();\n      var notify = hasListeners(this);\n      var change = notify || notifySpy ? {\n        observableKind: \"map\",\n        debugObjectName: this.name_,\n        type: UPDATE,\n        object: this,\n        oldValue: observable.value_,\n        name: key,\n        newValue: newValue\n      } : null;\n\n      if (process.env.NODE_ENV !== \"production\" && notifySpy) {\n        spyReportStart(change);\n      } // TODO fix type\n\n\n      observable.setNewValue_(newValue);\n\n      if (notify) {\n        notifyListeners(this, change);\n      }\n\n      if (process.env.NODE_ENV !== \"production\" && notifySpy) {\n        spyReportEnd();\n      }\n    }\n  };\n\n  _proto.addValue_ = function addValue_(key, newValue) {\n    var _this4 = this;\n\n    checkIfStateModificationsAreAllowed(this.keysAtom_);\n    transaction(function () {\n      var _this4$hasMap_$get;\n\n      var observable = new ObservableValue(newValue, _this4.enhancer_, process.env.NODE_ENV !== \"production\" ? _this4.name_ + \".\" + stringifyKey(key) : \"ObservableMap.key\", false);\n\n      _this4.data_.set(key, observable);\n\n      newValue = observable.value_; // value might have been changed\n\n      (_this4$hasMap_$get = _this4.hasMap_.get(key)) == null ? void 0 : _this4$hasMap_$get.setNewValue_(true);\n\n      _this4.keysAtom_.reportChanged();\n    });\n    var notifySpy = isSpyEnabled();\n    var notify = hasListeners(this);\n    var change = notify || notifySpy ? {\n      observableKind: \"map\",\n      debugObjectName: this.name_,\n      type: ADD,\n      object: this,\n      name: key,\n      newValue: newValue\n    } : null;\n\n    if (process.env.NODE_ENV !== \"production\" && notifySpy) {\n      spyReportStart(change);\n    } // TODO fix type\n\n\n    if (notify) {\n      notifyListeners(this, change);\n    }\n\n    if (process.env.NODE_ENV !== \"production\" && notifySpy) {\n      spyReportEnd();\n    }\n  };\n\n  _proto.get = function get(key) {\n    if (this.has(key)) {\n      return this.dehanceValue_(this.data_.get(key).get());\n    }\n\n    return this.dehanceValue_(undefined);\n  };\n\n  _proto.dehanceValue_ = function dehanceValue_(value) {\n    if (this.dehancer !== undefined) {\n      return this.dehancer(value);\n    }\n\n    return value;\n  };\n\n  _proto.keys = function keys() {\n    this.keysAtom_.reportObserved();\n    return this.data_.keys();\n  };\n\n  _proto.values = function values() {\n    var self = this;\n    var keys = this.keys();\n    return makeIterable({\n      next: function next() {\n        var _keys$next = keys.next(),\n            done = _keys$next.done,\n            value = _keys$next.value;\n\n        return {\n          done: done,\n          value: done ? undefined : self.get(value)\n        };\n      }\n    });\n  };\n\n  _proto.entries = function entries() {\n    var self = this;\n    var keys = this.keys();\n    return makeIterable({\n      next: function next() {\n        var _keys$next2 = keys.next(),\n            done = _keys$next2.done,\n            value = _keys$next2.value;\n\n        return {\n          done: done,\n          value: done ? undefined : [value, self.get(value)]\n        };\n      }\n    });\n  };\n\n  _proto[_Symbol$iterator] = function () {\n    return this.entries();\n  };\n\n  _proto.forEach = function forEach(callback, thisArg) {\n    for (var _iterator = _createForOfIteratorHelperLoose(this), _step; !(_step = _iterator()).done;) {\n      var _step$value = _step.value,\n          key = _step$value[0],\n          value = _step$value[1];\n      callback.call(thisArg, value, key, this);\n    }\n  }\n  /** Merge another object into this object, returns this. */\n  ;\n\n  _proto.merge = function merge(other) {\n    var _this5 = this;\n\n    if (isObservableMap(other)) {\n      other = new Map(other);\n    }\n\n    transaction(function () {\n      if (isPlainObject(other)) {\n        getPlainObjectKeys(other).forEach(function (key) {\n          return _this5.set(key, other[key]);\n        });\n      } else if (Array.isArray(other)) {\n        other.forEach(function (_ref) {\n          var key = _ref[0],\n              value = _ref[1];\n          return _this5.set(key, value);\n        });\n      } else if (isES6Map(other)) {\n        if (other.constructor !== Map) {\n          die(19, other);\n        }\n\n        other.forEach(function (value, key) {\n          return _this5.set(key, value);\n        });\n      } else if (other !== null && other !== undefined) {\n        die(20, other);\n      }\n    });\n    return this;\n  };\n\n  _proto.clear = function clear() {\n    var _this6 = this;\n\n    transaction(function () {\n      untracked(function () {\n        for (var _iterator2 = _createForOfIteratorHelperLoose(_this6.keys()), _step2; !(_step2 = _iterator2()).done;) {\n          var key = _step2.value;\n\n          _this6[\"delete\"](key);\n        }\n      });\n    });\n  };\n\n  _proto.replace = function replace(values) {\n    var _this7 = this;\n\n    // Implementation requirements:\n    // - respect ordering of replacement map\n    // - allow interceptors to run and potentially prevent individual operations\n    // - don't recreate observables that already exist in original map (so we don't destroy existing subscriptions)\n    // - don't _keysAtom.reportChanged if the keys of resulting map are indentical (order matters!)\n    // - note that result map may differ from replacement map due to the interceptors\n    transaction(function () {\n      // Convert to map so we can do quick key lookups\n      var replacementMap = convertToMap(values);\n      var orderedData = new Map(); // Used for optimization\n\n      var keysReportChangedCalled = false; // Delete keys that don't exist in replacement map\n      // if the key deletion is prevented by interceptor\n      // add entry at the beginning of the result map\n\n      for (var _iterator3 = _createForOfIteratorHelperLoose(_this7.data_.keys()), _step3; !(_step3 = _iterator3()).done;) {\n        var key = _step3.value;\n\n        // Concurrently iterating/deleting keys\n        // iterator should handle this correctly\n        if (!replacementMap.has(key)) {\n          var deleted = _this7[\"delete\"](key); // Was the key removed?\n\n\n          if (deleted) {\n            // _keysAtom.reportChanged() was already called\n            keysReportChangedCalled = true;\n          } else {\n            // Delete prevented by interceptor\n            var value = _this7.data_.get(key);\n\n            orderedData.set(key, value);\n          }\n        }\n      } // Merge entries\n\n\n      for (var _iterator4 = _createForOfIteratorHelperLoose(replacementMap.entries()), _step4; !(_step4 = _iterator4()).done;) {\n        var _step4$value = _step4.value,\n            _key = _step4$value[0],\n            _value = _step4$value[1];\n\n        // We will want to know whether a new key is added\n        var keyExisted = _this7.data_.has(_key); // Add or update value\n\n\n        _this7.set(_key, _value); // The addition could have been prevent by interceptor\n\n\n        if (_this7.data_.has(_key)) {\n          // The update could have been prevented by interceptor\n          // and also we want to preserve existing values\n          // so use value from _data map (instead of replacement map)\n          var _value2 = _this7.data_.get(_key);\n\n          orderedData.set(_key, _value2); // Was a new key added?\n\n          if (!keyExisted) {\n            // _keysAtom.reportChanged() was already called\n            keysReportChangedCalled = true;\n          }\n        }\n      } // Check for possible key order change\n\n\n      if (!keysReportChangedCalled) {\n        if (_this7.data_.size !== orderedData.size) {\n          // If size differs, keys are definitely modified\n          _this7.keysAtom_.reportChanged();\n        } else {\n          var iter1 = _this7.data_.keys();\n\n          var iter2 = orderedData.keys();\n          var next1 = iter1.next();\n          var next2 = iter2.next();\n\n          while (!next1.done) {\n            if (next1.value !== next2.value) {\n              _this7.keysAtom_.reportChanged();\n\n              break;\n            }\n\n            next1 = iter1.next();\n            next2 = iter2.next();\n          }\n        }\n      } // Use correctly ordered map\n\n\n      _this7.data_ = orderedData;\n    });\n    return this;\n  };\n\n  _proto.toString = function toString() {\n    return \"[object ObservableMap]\";\n  };\n\n  _proto.toJSON = function toJSON() {\n    return Array.from(this);\n  };\n\n  /**\r\n   * Observes this object. Triggers for the events 'add', 'update' and 'delete'.\r\n   * See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/observe\r\n   * for callback details\r\n   */\n  _proto.observe_ = function observe_(listener, fireImmediately) {\n    if (process.env.NODE_ENV !== \"production\" && fireImmediately === true) {\n      die(\"`observe` doesn't support fireImmediately=true in combination with maps.\");\n    }\n\n    return registerListener(this, listener);\n  };\n\n  _proto.intercept_ = function intercept_(handler) {\n    return registerInterceptor(this, handler);\n  };\n\n  _createClass(ObservableMap, [{\n    key: \"size\",\n    get: function get() {\n      this.keysAtom_.reportObserved();\n      return this.data_.size;\n    }\n  }, {\n    key: _Symbol$toStringTag,\n    get: function get() {\n      return \"Map\";\n    }\n  }]);\n\n  return ObservableMap;\n}(); // eslint-disable-next-line\n\nvar isObservableMap = /*#__PURE__*/createInstanceofPredicate(\"ObservableMap\", ObservableMap);\n\nfunction convertToMap(dataStructure) {\n  if (isES6Map(dataStructure) || isObservableMap(dataStructure)) {\n    return dataStructure;\n  } else if (Array.isArray(dataStructure)) {\n    return new Map(dataStructure);\n  } else if (isPlainObject(dataStructure)) {\n    var map = new Map();\n\n    for (var key in dataStructure) {\n      map.set(key, dataStructure[key]);\n    }\n\n    return map;\n  } else {\n    return die(21, dataStructure);\n  }\n}\n\nvar _Symbol$iterator$1, _Symbol$toStringTag$1;\nvar ObservableSetMarker = {};\n_Symbol$iterator$1 = Symbol.iterator;\n_Symbol$toStringTag$1 = Symbol.toStringTag;\nvar ObservableSet = /*#__PURE__*/function () {\n  function ObservableSet(initialData, enhancer, name_) {\n    if (enhancer === void 0) {\n      enhancer = deepEnhancer;\n    }\n\n    if (name_ === void 0) {\n      name_ = process.env.NODE_ENV !== \"production\" ? \"ObservableSet@\" + getNextId() : \"ObservableSet\";\n    }\n\n    this.name_ = void 0;\n    this[$mobx] = ObservableSetMarker;\n    this.data_ = new Set();\n    this.atom_ = void 0;\n    this.changeListeners_ = void 0;\n    this.interceptors_ = void 0;\n    this.dehancer = void 0;\n    this.enhancer_ = void 0;\n    this.name_ = name_;\n\n    if (!isFunction(Set)) {\n      die(22);\n    }\n\n    this.atom_ = createAtom(this.name_);\n\n    this.enhancer_ = function (newV, oldV) {\n      return enhancer(newV, oldV, name_);\n    };\n\n    if (initialData) {\n      this.replace(initialData);\n    }\n  }\n\n  var _proto = ObservableSet.prototype;\n\n  _proto.dehanceValue_ = function dehanceValue_(value) {\n    if (this.dehancer !== undefined) {\n      return this.dehancer(value);\n    }\n\n    return value;\n  };\n\n  _proto.clear = function clear() {\n    var _this = this;\n\n    transaction(function () {\n      untracked(function () {\n        for (var _iterator = _createForOfIteratorHelperLoose(_this.data_.values()), _step; !(_step = _iterator()).done;) {\n          var value = _step.value;\n\n          _this[\"delete\"](value);\n        }\n      });\n    });\n  };\n\n  _proto.forEach = function forEach(callbackFn, thisArg) {\n    for (var _iterator2 = _createForOfIteratorHelperLoose(this), _step2; !(_step2 = _iterator2()).done;) {\n      var value = _step2.value;\n      callbackFn.call(thisArg, value, value, this);\n    }\n  };\n\n  _proto.add = function add(value) {\n    var _this2 = this;\n\n    checkIfStateModificationsAreAllowed(this.atom_);\n\n    if (hasInterceptors(this)) {\n      var change = interceptChange(this, {\n        type: ADD,\n        object: this,\n        newValue: value\n      });\n\n      if (!change) {\n        return this;\n      } // ideally, value = change.value would be done here, so that values can be\n      // changed by interceptor. Same applies for other Set and Map api's.\n\n    }\n\n    if (!this.has(value)) {\n      transaction(function () {\n        _this2.data_.add(_this2.enhancer_(value, undefined));\n\n        _this2.atom_.reportChanged();\n      });\n      var notifySpy = process.env.NODE_ENV !== \"production\" && isSpyEnabled();\n      var notify = hasListeners(this);\n\n      var _change = notify || notifySpy ? {\n        observableKind: \"set\",\n        debugObjectName: this.name_,\n        type: ADD,\n        object: this,\n        newValue: value\n      } : null;\n\n      if (notifySpy && process.env.NODE_ENV !== \"production\") {\n        spyReportStart(_change);\n      }\n\n      if (notify) {\n        notifyListeners(this, _change);\n      }\n\n      if (notifySpy && process.env.NODE_ENV !== \"production\") {\n        spyReportEnd();\n      }\n    }\n\n    return this;\n  };\n\n  _proto[\"delete\"] = function _delete(value) {\n    var _this3 = this;\n\n    if (hasInterceptors(this)) {\n      var change = interceptChange(this, {\n        type: DELETE,\n        object: this,\n        oldValue: value\n      });\n\n      if (!change) {\n        return false;\n      }\n    }\n\n    if (this.has(value)) {\n      var notifySpy = process.env.NODE_ENV !== \"production\" && isSpyEnabled();\n      var notify = hasListeners(this);\n\n      var _change2 = notify || notifySpy ? {\n        observableKind: \"set\",\n        debugObjectName: this.name_,\n        type: DELETE,\n        object: this,\n        oldValue: value\n      } : null;\n\n      if (notifySpy && process.env.NODE_ENV !== \"production\") {\n        spyReportStart(_change2);\n      }\n\n      transaction(function () {\n        _this3.atom_.reportChanged();\n\n        _this3.data_[\"delete\"](value);\n      });\n\n      if (notify) {\n        notifyListeners(this, _change2);\n      }\n\n      if (notifySpy && process.env.NODE_ENV !== \"production\") {\n        spyReportEnd();\n      }\n\n      return true;\n    }\n\n    return false;\n  };\n\n  _proto.has = function has(value) {\n    this.atom_.reportObserved();\n    return this.data_.has(this.dehanceValue_(value));\n  };\n\n  _proto.entries = function entries() {\n    var nextIndex = 0;\n    var keys = Array.from(this.keys());\n    var values = Array.from(this.values());\n    return makeIterable({\n      next: function next() {\n        var index = nextIndex;\n        nextIndex += 1;\n        return index < values.length ? {\n          value: [keys[index], values[index]],\n          done: false\n        } : {\n          done: true\n        };\n      }\n    });\n  };\n\n  _proto.keys = function keys() {\n    return this.values();\n  };\n\n  _proto.values = function values() {\n    this.atom_.reportObserved();\n    var self = this;\n    var nextIndex = 0;\n    var observableValues = Array.from(this.data_.values());\n    return makeIterable({\n      next: function next() {\n        return nextIndex < observableValues.length ? {\n          value: self.dehanceValue_(observableValues[nextIndex++]),\n          done: false\n        } : {\n          done: true\n        };\n      }\n    });\n  };\n\n  _proto.replace = function replace(other) {\n    var _this4 = this;\n\n    if (isObservableSet(other)) {\n      other = new Set(other);\n    }\n\n    transaction(function () {\n      if (Array.isArray(other)) {\n        _this4.clear();\n\n        other.forEach(function (value) {\n          return _this4.add(value);\n        });\n      } else if (isES6Set(other)) {\n        _this4.clear();\n\n        other.forEach(function (value) {\n          return _this4.add(value);\n        });\n      } else if (other !== null && other !== undefined) {\n        die(\"Cannot initialize set from \" + other);\n      }\n    });\n    return this;\n  };\n\n  _proto.observe_ = function observe_(listener, fireImmediately) {\n    // ... 'fireImmediately' could also be true?\n    if (process.env.NODE_ENV !== \"production\" && fireImmediately === true) {\n      die(\"`observe` doesn't support fireImmediately=true in combination with sets.\");\n    }\n\n    return registerListener(this, listener);\n  };\n\n  _proto.intercept_ = function intercept_(handler) {\n    return registerInterceptor(this, handler);\n  };\n\n  _proto.toJSON = function toJSON() {\n    return Array.from(this);\n  };\n\n  _proto.toString = function toString() {\n    return \"[object ObservableSet]\";\n  };\n\n  _proto[_Symbol$iterator$1] = function () {\n    return this.values();\n  };\n\n  _createClass(ObservableSet, [{\n    key: \"size\",\n    get: function get() {\n      this.atom_.reportObserved();\n      return this.data_.size;\n    }\n  }, {\n    key: _Symbol$toStringTag$1,\n    get: function get() {\n      return \"Set\";\n    }\n  }]);\n\n  return ObservableSet;\n}(); // eslint-disable-next-line\n\nvar isObservableSet = /*#__PURE__*/createInstanceofPredicate(\"ObservableSet\", ObservableSet);\n\nvar descriptorCache = /*#__PURE__*/Object.create(null);\nvar REMOVE = \"remove\";\nvar ObservableObjectAdministration = /*#__PURE__*/function () {\n  function ObservableObjectAdministration(target_, values_, name_, // Used anytime annotation is not explicitely provided\n  defaultAnnotation_) {\n    if (values_ === void 0) {\n      values_ = new Map();\n    }\n\n    if (defaultAnnotation_ === void 0) {\n      defaultAnnotation_ = autoAnnotation;\n    }\n\n    this.target_ = void 0;\n    this.values_ = void 0;\n    this.name_ = void 0;\n    this.defaultAnnotation_ = void 0;\n    this.keysAtom_ = void 0;\n    this.changeListeners_ = void 0;\n    this.interceptors_ = void 0;\n    this.proxy_ = void 0;\n    this.isPlainObject_ = void 0;\n    this.appliedAnnotations_ = void 0;\n    this.pendingKeys_ = void 0;\n    this.target_ = target_;\n    this.values_ = values_;\n    this.name_ = name_;\n    this.defaultAnnotation_ = defaultAnnotation_;\n    this.keysAtom_ = new Atom(process.env.NODE_ENV !== \"production\" ? this.name_ + \".keys\" : \"ObservableObject.keys\"); // Optimization: we use this frequently\n\n    this.isPlainObject_ = isPlainObject(this.target_);\n\n    if (process.env.NODE_ENV !== \"production\" && !isAnnotation(this.defaultAnnotation_)) {\n      die(\"defaultAnnotation must be valid annotation\");\n    }\n\n    if (process.env.NODE_ENV !== \"production\") {\n      // Prepare structure for tracking which fields were already annotated\n      this.appliedAnnotations_ = {};\n    }\n  }\n\n  var _proto = ObservableObjectAdministration.prototype;\n\n  _proto.getObservablePropValue_ = function getObservablePropValue_(key) {\n    return this.values_.get(key).get();\n  };\n\n  _proto.setObservablePropValue_ = function setObservablePropValue_(key, newValue) {\n    var observable = this.values_.get(key);\n\n    if (observable instanceof ComputedValue) {\n      observable.set(newValue);\n      return true;\n    } // intercept\n\n\n    if (hasInterceptors(this)) {\n      var change = interceptChange(this, {\n        type: UPDATE,\n        object: this.proxy_ || this.target_,\n        name: key,\n        newValue: newValue\n      });\n\n      if (!change) {\n        return null;\n      }\n\n      newValue = change.newValue;\n    }\n\n    newValue = observable.prepareNewValue_(newValue); // notify spy & observers\n\n    if (newValue !== globalState.UNCHANGED) {\n      var notify = hasListeners(this);\n      var notifySpy = process.env.NODE_ENV !== \"production\" && isSpyEnabled();\n\n      var _change = notify || notifySpy ? {\n        type: UPDATE,\n        observableKind: \"object\",\n        debugObjectName: this.name_,\n        object: this.proxy_ || this.target_,\n        oldValue: observable.value_,\n        name: key,\n        newValue: newValue\n      } : null;\n\n      if (process.env.NODE_ENV !== \"production\" && notifySpy) {\n        spyReportStart(_change);\n      }\n      observable.setNewValue_(newValue);\n\n      if (notify) {\n        notifyListeners(this, _change);\n      }\n\n      if (process.env.NODE_ENV !== \"production\" && notifySpy) {\n        spyReportEnd();\n      }\n    }\n\n    return true;\n  };\n\n  _proto.get_ = function get_(key) {\n    if (globalState.trackingDerivation && !hasProp(this.target_, key)) {\n      // Key doesn't exist yet, subscribe for it in case it's added later\n      this.has_(key);\n    }\n\n    return this.target_[key];\n  }\n  /**\r\n   * @param {PropertyKey} key\r\n   * @param {any} value\r\n   * @param {Annotation|boolean} annotation true - use default annotation, false - copy as is\r\n   * @param {boolean} proxyTrap whether it's called from proxy trap\r\n   * @returns {boolean|null} true on success, false on failure (proxyTrap + non-configurable), null when cancelled by interceptor\r\n   */\n  ;\n\n  _proto.set_ = function set_(key, value, proxyTrap) {\n    if (proxyTrap === void 0) {\n      proxyTrap = false;\n    }\n\n    // Don't use .has(key) - we care about own\n    if (hasProp(this.target_, key)) {\n      // Existing prop\n      if (this.values_.has(key)) {\n        // Observable (can be intercepted)\n        return this.setObservablePropValue_(key, value);\n      } else if (proxyTrap) {\n        // Non-observable - proxy\n        return Reflect.set(this.target_, key, value);\n      } else {\n        // Non-observable\n        this.target_[key] = value;\n        return true;\n      }\n    } else {\n      // New prop\n      return this.extend_(key, {\n        value: value,\n        enumerable: true,\n        writable: true,\n        configurable: true\n      }, this.defaultAnnotation_, proxyTrap);\n    }\n  } // Trap for \"in\"\n  ;\n\n  _proto.has_ = function has_(key) {\n    if (!globalState.trackingDerivation) {\n      // Skip key subscription outside derivation\n      return key in this.target_;\n    }\n\n    this.pendingKeys_ || (this.pendingKeys_ = new Map());\n    var entry = this.pendingKeys_.get(key);\n\n    if (!entry) {\n      entry = new ObservableValue(key in this.target_, referenceEnhancer, process.env.NODE_ENV !== \"production\" ? this.name_ + \".\" + stringifyKey(key) + \"?\" : \"ObservableObject.key?\", false);\n      this.pendingKeys_.set(key, entry);\n    }\n\n    return entry.get();\n  }\n  /**\r\n   * @param {PropertyKey} key\r\n   * @param {Annotation|boolean} annotation true - use default annotation, false - ignore prop\r\n   */\n  ;\n\n  _proto.make_ = function make_(key, annotation) {\n    if (annotation === true) {\n      annotation = this.defaultAnnotation_;\n    }\n\n    if (annotation === false) {\n      return;\n    }\n\n    assertAnnotable(this, annotation, key);\n\n    if (!(key in this.target_)) {\n      var _this$target_$storedA;\n\n      // Throw on missing key, except for decorators:\n      // Decorator annotations are collected from whole prototype chain.\n      // When called from super() some props may not exist yet.\n      // However we don't have to worry about missing prop,\n      // because the decorator must have been applied to something.\n      if ((_this$target_$storedA = this.target_[storedAnnotationsSymbol]) != null && _this$target_$storedA[key]) {\n        return; // will be annotated by subclass constructor\n      } else {\n        die(1, annotation.annotationType_, this.name_ + \".\" + key.toString());\n      }\n    }\n\n    var source = this.target_;\n\n    while (source && source !== objectPrototype) {\n      var descriptor = getDescriptor(source, key);\n\n      if (descriptor) {\n        var outcome = annotation.make_(this, key, descriptor, source);\n\n        if (outcome === 0\n        /* Cancel */\n        ) {\n          return;\n        }\n\n        if (outcome === 1\n        /* Break */\n        ) {\n          break;\n        }\n      }\n\n      source = Object.getPrototypeOf(source);\n    }\n\n    recordAnnotationApplied(this, annotation, key);\n  }\n  /**\r\n   * @param {PropertyKey} key\r\n   * @param {PropertyDescriptor} descriptor\r\n   * @param {Annotation|boolean} annotation true - use default annotation, false - copy as is\r\n   * @param {boolean} proxyTrap whether it's called from proxy trap\r\n   * @returns {boolean|null} true on success, false on failure (proxyTrap + non-configurable), null when cancelled by interceptor\r\n   */\n  ;\n\n  _proto.extend_ = function extend_(key, descriptor, annotation, proxyTrap) {\n    if (proxyTrap === void 0) {\n      proxyTrap = false;\n    }\n\n    if (annotation === true) {\n      annotation = this.defaultAnnotation_;\n    }\n\n    if (annotation === false) {\n      return this.defineProperty_(key, descriptor, proxyTrap);\n    }\n\n    assertAnnotable(this, annotation, key);\n    var outcome = annotation.extend_(this, key, descriptor, proxyTrap);\n\n    if (outcome) {\n      recordAnnotationApplied(this, annotation, key);\n    }\n\n    return outcome;\n  }\n  /**\r\n   * @param {PropertyKey} key\r\n   * @param {PropertyDescriptor} descriptor\r\n   * @param {boolean} proxyTrap whether it's called from proxy trap\r\n   * @returns {boolean|null} true on success, false on failure (proxyTrap + non-configurable), null when cancelled by interceptor\r\n   */\n  ;\n\n  _proto.defineProperty_ = function defineProperty_(key, descriptor, proxyTrap) {\n    if (proxyTrap === void 0) {\n      proxyTrap = false;\n    }\n\n    try {\n      startBatch(); // Delete\n\n      var deleteOutcome = this.delete_(key);\n\n      if (!deleteOutcome) {\n        // Failure or intercepted\n        return deleteOutcome;\n      } // ADD interceptor\n\n\n      if (hasInterceptors(this)) {\n        var change = interceptChange(this, {\n          object: this.proxy_ || this.target_,\n          name: key,\n          type: ADD,\n          newValue: descriptor.value\n        });\n\n        if (!change) {\n          return null;\n        }\n\n        var newValue = change.newValue;\n\n        if (descriptor.value !== newValue) {\n          descriptor = _extends({}, descriptor, {\n            value: newValue\n          });\n        }\n      } // Define\n\n\n      if (proxyTrap) {\n        if (!Reflect.defineProperty(this.target_, key, descriptor)) {\n          return false;\n        }\n      } else {\n        defineProperty(this.target_, key, descriptor);\n      } // Notify\n\n\n      this.notifyPropertyAddition_(key, descriptor.value);\n    } finally {\n      endBatch();\n    }\n\n    return true;\n  } // If original descriptor becomes relevant, move this to annotation directly\n  ;\n\n  _proto.defineObservableProperty_ = function defineObservableProperty_(key, value, enhancer, proxyTrap) {\n    if (proxyTrap === void 0) {\n      proxyTrap = false;\n    }\n\n    try {\n      startBatch(); // Delete\n\n      var deleteOutcome = this.delete_(key);\n\n      if (!deleteOutcome) {\n        // Failure or intercepted\n        return deleteOutcome;\n      } // ADD interceptor\n\n\n      if (hasInterceptors(this)) {\n        var change = interceptChange(this, {\n          object: this.proxy_ || this.target_,\n          name: key,\n          type: ADD,\n          newValue: value\n        });\n\n        if (!change) {\n          return null;\n        }\n\n        value = change.newValue;\n      }\n\n      var cachedDescriptor = getCachedObservablePropDescriptor(key);\n      var descriptor = {\n        configurable: globalState.safeDescriptors ? this.isPlainObject_ : true,\n        enumerable: true,\n        get: cachedDescriptor.get,\n        set: cachedDescriptor.set\n      }; // Define\n\n      if (proxyTrap) {\n        if (!Reflect.defineProperty(this.target_, key, descriptor)) {\n          return false;\n        }\n      } else {\n        defineProperty(this.target_, key, descriptor);\n      }\n\n      var observable = new ObservableValue(value, enhancer, process.env.NODE_ENV !== \"production\" ? this.name_ + \".\" + key.toString() : \"ObservableObject.key\", false);\n      this.values_.set(key, observable); // Notify (value possibly changed by ObservableValue)\n\n      this.notifyPropertyAddition_(key, observable.value_);\n    } finally {\n      endBatch();\n    }\n\n    return true;\n  } // If original descriptor becomes relevant, move this to annotation directly\n  ;\n\n  _proto.defineComputedProperty_ = function defineComputedProperty_(key, options, proxyTrap) {\n    if (proxyTrap === void 0) {\n      proxyTrap = false;\n    }\n\n    try {\n      startBatch(); // Delete\n\n      var deleteOutcome = this.delete_(key);\n\n      if (!deleteOutcome) {\n        // Failure or intercepted\n        return deleteOutcome;\n      } // ADD interceptor\n\n\n      if (hasInterceptors(this)) {\n        var change = interceptChange(this, {\n          object: this.proxy_ || this.target_,\n          name: key,\n          type: ADD,\n          newValue: undefined\n        });\n\n        if (!change) {\n          return null;\n        }\n      }\n\n      options.name || (options.name = process.env.NODE_ENV !== \"production\" ? this.name_ + \".\" + key.toString() : \"ObservableObject.key\");\n      options.context = this.proxy_ || this.target_;\n      var cachedDescriptor = getCachedObservablePropDescriptor(key);\n      var descriptor = {\n        configurable: globalState.safeDescriptors ? this.isPlainObject_ : true,\n        enumerable: false,\n        get: cachedDescriptor.get,\n        set: cachedDescriptor.set\n      }; // Define\n\n      if (proxyTrap) {\n        if (!Reflect.defineProperty(this.target_, key, descriptor)) {\n          return false;\n        }\n      } else {\n        defineProperty(this.target_, key, descriptor);\n      }\n\n      this.values_.set(key, new ComputedValue(options)); // Notify\n\n      this.notifyPropertyAddition_(key, undefined);\n    } finally {\n      endBatch();\n    }\n\n    return true;\n  }\n  /**\r\n   * @param {PropertyKey} key\r\n   * @param {PropertyDescriptor} descriptor\r\n   * @param {boolean} proxyTrap whether it's called from proxy trap\r\n   * @returns {boolean|null} true on success, false on failure (proxyTrap + non-configurable), null when cancelled by interceptor\r\n   */\n  ;\n\n  _proto.delete_ = function delete_(key, proxyTrap) {\n    if (proxyTrap === void 0) {\n      proxyTrap = false;\n    }\n\n    // No such prop\n    if (!hasProp(this.target_, key)) {\n      return true;\n    } // Intercept\n\n\n    if (hasInterceptors(this)) {\n      var change = interceptChange(this, {\n        object: this.proxy_ || this.target_,\n        name: key,\n        type: REMOVE\n      }); // Cancelled\n\n      if (!change) {\n        return null;\n      }\n    } // Delete\n\n\n    try {\n      var _this$pendingKeys_, _this$pendingKeys_$ge;\n\n      startBatch();\n      var notify = hasListeners(this);\n      var notifySpy = process.env.NODE_ENV !== \"production\" && isSpyEnabled();\n      var observable = this.values_.get(key); // Value needed for spies/listeners\n\n      var value = undefined; // Optimization: don't pull the value unless we will need it\n\n      if (!observable && (notify || notifySpy)) {\n        var _getDescriptor;\n\n        value = (_getDescriptor = getDescriptor(this.target_, key)) == null ? void 0 : _getDescriptor.value;\n      } // delete prop (do first, may fail)\n\n\n      if (proxyTrap) {\n        if (!Reflect.deleteProperty(this.target_, key)) {\n          return false;\n        }\n      } else {\n        delete this.target_[key];\n      } // Allow re-annotating this field\n\n\n      if (process.env.NODE_ENV !== \"production\") {\n        delete this.appliedAnnotations_[key];\n      } // Clear observable\n\n\n      if (observable) {\n        this.values_[\"delete\"](key); // for computed, value is undefined\n\n        if (observable instanceof ObservableValue) {\n          value = observable.value_;\n        } // Notify: autorun(() => obj[key]), see #1796\n\n\n        propagateChanged(observable);\n      } // Notify \"keys/entries/values\" observers\n\n\n      this.keysAtom_.reportChanged(); // Notify \"has\" observers\n      // \"in\" as it may still exist in proto\n\n      (_this$pendingKeys_ = this.pendingKeys_) == null ? void 0 : (_this$pendingKeys_$ge = _this$pendingKeys_.get(key)) == null ? void 0 : _this$pendingKeys_$ge.set(key in this.target_); // Notify spies/listeners\n\n      if (notify || notifySpy) {\n        var _change2 = {\n          type: REMOVE,\n          observableKind: \"object\",\n          object: this.proxy_ || this.target_,\n          debugObjectName: this.name_,\n          oldValue: value,\n          name: key\n        };\n\n        if (process.env.NODE_ENV !== \"production\" && notifySpy) {\n          spyReportStart(_change2);\n        }\n\n        if (notify) {\n          notifyListeners(this, _change2);\n        }\n\n        if (process.env.NODE_ENV !== \"production\" && notifySpy) {\n          spyReportEnd();\n        }\n      }\n    } finally {\n      endBatch();\n    }\n\n    return true;\n  }\n  /**\r\n   * Observes this object. Triggers for the events 'add', 'update' and 'delete'.\r\n   * See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/observe\r\n   * for callback details\r\n   */\n  ;\n\n  _proto.observe_ = function observe_(callback, fireImmediately) {\n    if (process.env.NODE_ENV !== \"production\" && fireImmediately === true) {\n      die(\"`observe` doesn't support the fire immediately property for observable objects.\");\n    }\n\n    return registerListener(this, callback);\n  };\n\n  _proto.intercept_ = function intercept_(handler) {\n    return registerInterceptor(this, handler);\n  };\n\n  _proto.notifyPropertyAddition_ = function notifyPropertyAddition_(key, value) {\n    var _this$pendingKeys_2, _this$pendingKeys_2$g;\n\n    var notify = hasListeners(this);\n    var notifySpy = process.env.NODE_ENV !== \"production\" && isSpyEnabled();\n\n    if (notify || notifySpy) {\n      var change = notify || notifySpy ? {\n        type: ADD,\n        observableKind: \"object\",\n        debugObjectName: this.name_,\n        object: this.proxy_ || this.target_,\n        name: key,\n        newValue: value\n      } : null;\n\n      if (process.env.NODE_ENV !== \"production\" && notifySpy) {\n        spyReportStart(change);\n      }\n\n      if (notify) {\n        notifyListeners(this, change);\n      }\n\n      if (process.env.NODE_ENV !== \"production\" && notifySpy) {\n        spyReportEnd();\n      }\n    }\n\n    (_this$pendingKeys_2 = this.pendingKeys_) == null ? void 0 : (_this$pendingKeys_2$g = _this$pendingKeys_2.get(key)) == null ? void 0 : _this$pendingKeys_2$g.set(true); // Notify \"keys/entries/values\" observers\n\n    this.keysAtom_.reportChanged();\n  };\n\n  _proto.ownKeys_ = function ownKeys_() {\n    this.keysAtom_.reportObserved();\n    return ownKeys(this.target_);\n  };\n\n  _proto.keys_ = function keys_() {\n    // Returns enumerable && own, but unfortunately keysAtom will report on ANY key change.\n    // There is no way to distinguish between Object.keys(object) and Reflect.ownKeys(object) - both are handled by ownKeys trap.\n    // We can either over-report in Object.keys(object) or under-report in Reflect.ownKeys(object)\n    // We choose to over-report in Object.keys(object), because:\n    // - typically it's used with simple data objects\n    // - when symbolic/non-enumerable keys are relevant Reflect.ownKeys works as expected\n    this.keysAtom_.reportObserved();\n    return Object.keys(this.target_);\n  };\n\n  return ObservableObjectAdministration;\n}();\nfunction asObservableObject(target, options) {\n  var _options$name;\n\n  if (process.env.NODE_ENV !== \"production\" && options && isObservableObject(target)) {\n    die(\"Options can't be provided for already observable objects.\");\n  }\n\n  if (hasProp(target, $mobx)) {\n    if (process.env.NODE_ENV !== \"production\" && !(getAdministration(target) instanceof ObservableObjectAdministration)) {\n      die(\"Cannot convert '\" + getDebugName(target) + \"' into observable object:\" + \"\\nThe target is already observable of different type.\" + \"\\nExtending builtins is not supported.\");\n    }\n\n    return target;\n  }\n\n  if (process.env.NODE_ENV !== \"production\" && !Object.isExtensible(target)) {\n    die(\"Cannot make the designated object observable; it is not extensible\");\n  }\n\n  var name = (_options$name = options == null ? void 0 : options.name) != null ? _options$name : process.env.NODE_ENV !== \"production\" ? (isPlainObject(target) ? \"ObservableObject\" : target.constructor.name) + \"@\" + getNextId() : \"ObservableObject\";\n  var adm = new ObservableObjectAdministration(target, new Map(), String(name), getAnnotationFromOptions(options));\n  addHiddenProp(target, $mobx, adm);\n  return target;\n}\nvar isObservableObjectAdministration = /*#__PURE__*/createInstanceofPredicate(\"ObservableObjectAdministration\", ObservableObjectAdministration);\n\nfunction getCachedObservablePropDescriptor(key) {\n  return descriptorCache[key] || (descriptorCache[key] = {\n    get: function get() {\n      return this[$mobx].getObservablePropValue_(key);\n    },\n    set: function set(value) {\n      return this[$mobx].setObservablePropValue_(key, value);\n    }\n  });\n}\n\nfunction isObservableObject(thing) {\n  if (isObject(thing)) {\n    return isObservableObjectAdministration(thing[$mobx]);\n  }\n\n  return false;\n}\nfunction recordAnnotationApplied(adm, annotation, key) {\n  var _adm$target_$storedAn;\n\n  if (process.env.NODE_ENV !== \"production\") {\n    adm.appliedAnnotations_[key] = annotation;\n  } // Remove applied decorator annotation so we don't try to apply it again in subclass constructor\n\n\n  (_adm$target_$storedAn = adm.target_[storedAnnotationsSymbol]) == null ? true : delete _adm$target_$storedAn[key];\n}\n\nfunction assertAnnotable(adm, annotation, key) {\n  // Valid annotation\n  if (process.env.NODE_ENV !== \"production\" && !isAnnotation(annotation)) {\n    die(\"Cannot annotate '\" + adm.name_ + \".\" + key.toString() + \"': Invalid annotation.\");\n  }\n  /*\r\n  // Configurable, not sealed, not frozen\r\n  // Possibly not needed, just a little better error then the one thrown by engine.\r\n  // Cases where this would be useful the most (subclass field initializer) are not interceptable by this.\r\n  if (__DEV__) {\r\n      const configurable = getDescriptor(adm.target_, key)?.configurable\r\n      const frozen = Object.isFrozen(adm.target_)\r\n      const sealed = Object.isSealed(adm.target_)\r\n      if (!configurable || frozen || sealed) {\r\n          const fieldName = `${adm.name_}.${key.toString()}`\r\n          const requestedAnnotationType = annotation.annotationType_\r\n          let error = `Cannot apply '${requestedAnnotationType}' to '${fieldName}':`\r\n          if (frozen) {\r\n              error += `\\nObject is frozen.`\r\n          }\r\n          if (sealed) {\r\n              error += `\\nObject is sealed.`\r\n          }\r\n          if (!configurable) {\r\n              error += `\\nproperty is not configurable.`\r\n              // Mention only if caused by us to avoid confusion\r\n              if (hasProp(adm.appliedAnnotations!, key)) {\r\n                  error += `\\nTo prevent accidental re-definition of a field by a subclass, `\r\n                  error += `all annotated fields of non-plain objects (classes) are not configurable.`\r\n              }\r\n          }\r\n          die(error)\r\n      }\r\n  }\r\n  */\n  // Not annotated\n\n\n  if (process.env.NODE_ENV !== \"production\" && !isOverride(annotation) && hasProp(adm.appliedAnnotations_, key)) {\n    var fieldName = adm.name_ + \".\" + key.toString();\n    var currentAnnotationType = adm.appliedAnnotations_[key].annotationType_;\n    var requestedAnnotationType = annotation.annotationType_;\n    die(\"Cannot apply '\" + requestedAnnotationType + \"' to '\" + fieldName + \"':\" + (\"\\nThe field is already annotated with '\" + currentAnnotationType + \"'.\") + \"\\nRe-annotating fields is not allowed.\" + \"\\nUse 'override' annotation for methods overridden by subclass.\");\n  }\n}\n\nvar ENTRY_0 = /*#__PURE__*/createArrayEntryDescriptor(0);\n/**\r\n * This array buffer contains two lists of properties, so that all arrays\r\n * can recycle their property definitions, which significantly improves performance of creating\r\n * properties on the fly.\r\n */\n\n\nvar OBSERVABLE_ARRAY_BUFFER_SIZE = 0; // Typescript workaround to make sure ObservableArray extends Array\n\nvar StubArray = function StubArray() {};\n\nfunction inherit(ctor, proto) {\n  if (Object.setPrototypeOf) {\n    Object.setPrototypeOf(ctor.prototype, proto);\n  } else if (ctor.prototype.__proto__ !== undefined) {\n    ctor.prototype.__proto__ = proto;\n  } else {\n    ctor.prototype = proto;\n  }\n}\n\ninherit(StubArray, Array.prototype); // Weex proto freeze protection was here,\n// but it is unclear why the hack is need as MobX never changed the prototype\n// anyway, so removed it in V6\n\nvar LegacyObservableArray = /*#__PURE__*/function (_StubArray, _Symbol$toStringTag, _Symbol$iterator) {\n  _inheritsLoose(LegacyObservableArray, _StubArray);\n\n  function LegacyObservableArray(initialValues, enhancer, name, owned) {\n    var _this;\n\n    if (name === void 0) {\n      name = process.env.NODE_ENV !== \"production\" ? \"ObservableArray@\" + getNextId() : \"ObservableArray\";\n    }\n\n    if (owned === void 0) {\n      owned = false;\n    }\n\n    _this = _StubArray.call(this) || this;\n    var adm = new ObservableArrayAdministration(name, enhancer, owned, true);\n    adm.proxy_ = _assertThisInitialized(_this);\n    addHiddenFinalProp(_assertThisInitialized(_this), $mobx, adm);\n\n    if (initialValues && initialValues.length) {\n      var prev = allowStateChangesStart(true); // @ts-ignore\n\n      _this.spliceWithArray(0, 0, initialValues);\n\n      allowStateChangesEnd(prev);\n    }\n\n    {\n      // Seems that Safari won't use numeric prototype setter untill any * numeric property is\n      // defined on the instance. After that it works fine, even if this property is deleted.\n      Object.defineProperty(_assertThisInitialized(_this), \"0\", ENTRY_0);\n    }\n\n    return _this;\n  }\n\n  var _proto = LegacyObservableArray.prototype;\n\n  _proto.concat = function concat() {\n    this[$mobx].atom_.reportObserved();\n\n    for (var _len = arguments.length, arrays = new Array(_len), _key = 0; _key < _len; _key++) {\n      arrays[_key] = arguments[_key];\n    }\n\n    return Array.prototype.concat.apply(this.slice(), //@ts-ignore\n    arrays.map(function (a) {\n      return isObservableArray(a) ? a.slice() : a;\n    }));\n  };\n\n  _proto[_Symbol$iterator] = function () {\n    var self = this;\n    var nextIndex = 0;\n    return makeIterable({\n      next: function next() {\n        return nextIndex < self.length ? {\n          value: self[nextIndex++],\n          done: false\n        } : {\n          done: true,\n          value: undefined\n        };\n      }\n    });\n  };\n\n  _createClass(LegacyObservableArray, [{\n    key: \"length\",\n    get: function get() {\n      return this[$mobx].getArrayLength_();\n    },\n    set: function set(newLength) {\n      this[$mobx].setArrayLength_(newLength);\n    }\n  }, {\n    key: _Symbol$toStringTag,\n    get: function get() {\n      return \"Array\";\n    }\n  }]);\n\n  return LegacyObservableArray;\n}(StubArray, Symbol.toStringTag, Symbol.iterator);\n\nObject.entries(arrayExtensions).forEach(function (_ref) {\n  var prop = _ref[0],\n      fn = _ref[1];\n\n  if (prop !== \"concat\") {\n    addHiddenProp(LegacyObservableArray.prototype, prop, fn);\n  }\n});\n\nfunction createArrayEntryDescriptor(index) {\n  return {\n    enumerable: false,\n    configurable: true,\n    get: function get() {\n      return this[$mobx].get_(index);\n    },\n    set: function set(value) {\n      this[$mobx].set_(index, value);\n    }\n  };\n}\n\nfunction createArrayBufferItem(index) {\n  defineProperty(LegacyObservableArray.prototype, \"\" + index, createArrayEntryDescriptor(index));\n}\n\nfunction reserveArrayBuffer(max) {\n  if (max > OBSERVABLE_ARRAY_BUFFER_SIZE) {\n    for (var index = OBSERVABLE_ARRAY_BUFFER_SIZE; index < max + 100; index++) {\n      createArrayBufferItem(index);\n    }\n\n    OBSERVABLE_ARRAY_BUFFER_SIZE = max;\n  }\n}\nreserveArrayBuffer(1000);\nfunction createLegacyArray(initialValues, enhancer, name) {\n  return new LegacyObservableArray(initialValues, enhancer, name);\n}\n\nfunction getAtom(thing, property) {\n  if (typeof thing === \"object\" && thing !== null) {\n    if (isObservableArray(thing)) {\n      if (property !== undefined) {\n        die(23);\n      }\n\n      return thing[$mobx].atom_;\n    }\n\n    if (isObservableSet(thing)) {\n      return thing[$mobx];\n    }\n\n    if (isObservableMap(thing)) {\n      if (property === undefined) {\n        return thing.keysAtom_;\n      }\n\n      var observable = thing.data_.get(property) || thing.hasMap_.get(property);\n\n      if (!observable) {\n        die(25, property, getDebugName(thing));\n      }\n\n      return observable;\n    }\n\n\n    if (isObservableObject(thing)) {\n      if (!property) {\n        return die(26);\n      }\n\n      var _observable = thing[$mobx].values_.get(property);\n\n      if (!_observable) {\n        die(27, property, getDebugName(thing));\n      }\n\n      return _observable;\n    }\n\n    if (isAtom(thing) || isComputedValue(thing) || isReaction(thing)) {\n      return thing;\n    }\n  } else if (isFunction(thing)) {\n    if (isReaction(thing[$mobx])) {\n      // disposer function\n      return thing[$mobx];\n    }\n  }\n\n  die(28);\n}\nfunction getAdministration(thing, property) {\n  if (!thing) {\n    die(29);\n  }\n\n  if (property !== undefined) {\n    return getAdministration(getAtom(thing, property));\n  }\n\n  if (isAtom(thing) || isComputedValue(thing) || isReaction(thing)) {\n    return thing;\n  }\n\n  if (isObservableMap(thing) || isObservableSet(thing)) {\n    return thing;\n  }\n\n  if (thing[$mobx]) {\n    return thing[$mobx];\n  }\n\n  die(24, thing);\n}\nfunction getDebugName(thing, property) {\n  var named;\n\n  if (property !== undefined) {\n    named = getAtom(thing, property);\n  } else if (isAction(thing)) {\n    return thing.name;\n  } else if (isObservableObject(thing) || isObservableMap(thing) || isObservableSet(thing)) {\n    named = getAdministration(thing);\n  } else {\n    // valid for arrays as well\n    named = getAtom(thing);\n  }\n\n  return named.name_;\n}\n\nvar toString = objectPrototype.toString;\nfunction deepEqual(a, b, depth) {\n  if (depth === void 0) {\n    depth = -1;\n  }\n\n  return eq(a, b, depth);\n} // Copied from https://github.com/jashkenas/underscore/blob/5c237a7c682fb68fd5378203f0bf22dce1624854/underscore.js#L1186-L1289\n// Internal recursive comparison function for `isEqual`.\n\nfunction eq(a, b, depth, aStack, bStack) {\n  // Identical objects are equal. `0 === -0`, but they aren't identical.\n  // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).\n  if (a === b) {\n    return a !== 0 || 1 / a === 1 / b;\n  } // `null` or `undefined` only equal to itself (strict comparison).\n\n\n  if (a == null || b == null) {\n    return false;\n  } // `NaN`s are equivalent, but non-reflexive.\n\n\n  if (a !== a) {\n    return b !== b;\n  } // Exhaust primitive checks\n\n\n  var type = typeof a;\n\n  if (type !== \"function\" && type !== \"object\" && typeof b != \"object\") {\n    return false;\n  } // Compare `[[Class]]` names.\n\n\n  var className = toString.call(a);\n\n  if (className !== toString.call(b)) {\n    return false;\n  }\n\n  switch (className) {\n    // Strings, numbers, regular expressions, dates, and booleans are compared by value.\n    case \"[object RegExp]\": // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')\n\n    case \"[object String]\":\n      // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n      // equivalent to `new String(\"5\")`.\n      return \"\" + a === \"\" + b;\n\n    case \"[object Number]\":\n      // `NaN`s are equivalent, but non-reflexive.\n      // Object(NaN) is equivalent to NaN.\n      if (+a !== +a) {\n        return +b !== +b;\n      } // An `egal` comparison is performed for other numeric values.\n\n\n      return +a === 0 ? 1 / +a === 1 / b : +a === +b;\n\n    case \"[object Date]\":\n    case \"[object Boolean]\":\n      // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n      // millisecond representations. Note that invalid dates with millisecond representations\n      // of `NaN` are not equivalent.\n      return +a === +b;\n\n    case \"[object Symbol]\":\n      return typeof Symbol !== \"undefined\" && Symbol.valueOf.call(a) === Symbol.valueOf.call(b);\n\n    case \"[object Map]\":\n    case \"[object Set]\":\n      // Maps and Sets are unwrapped to arrays of entry-pairs, adding an incidental level.\n      // Hide this extra level by increasing the depth.\n      if (depth >= 0) {\n        depth++;\n      }\n\n      break;\n  } // Unwrap any wrapped objects.\n\n\n  a = unwrap(a);\n  b = unwrap(b);\n  var areArrays = className === \"[object Array]\";\n\n  if (!areArrays) {\n    if (typeof a != \"object\" || typeof b != \"object\") {\n      return false;\n    } // Objects with different constructors are not equivalent, but `Object`s or `Array`s\n    // from different frames are.\n\n\n    var aCtor = a.constructor,\n        bCtor = b.constructor;\n\n    if (aCtor !== bCtor && !(isFunction(aCtor) && aCtor instanceof aCtor && isFunction(bCtor) && bCtor instanceof bCtor) && \"constructor\" in a && \"constructor\" in b) {\n      return false;\n    }\n  }\n\n  if (depth === 0) {\n    return false;\n  } else if (depth < 0) {\n    depth = -1;\n  } // Assume equality for cyclic structures. The algorithm for detecting cyclic\n  // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n  // Initializing stack of traversed objects.\n  // It's done here since we only need them for objects and arrays comparison.\n\n\n  aStack = aStack || [];\n  bStack = bStack || [];\n  var length = aStack.length;\n\n  while (length--) {\n    // Linear search. Performance is inversely proportional to the number of\n    // unique nested structures.\n    if (aStack[length] === a) {\n      return bStack[length] === b;\n    }\n  } // Add the first object to the stack of traversed objects.\n\n\n  aStack.push(a);\n  bStack.push(b); // Recursively compare objects and arrays.\n\n  if (areArrays) {\n    // Compare array lengths to determine if a deep comparison is necessary.\n    length = a.length;\n\n    if (length !== b.length) {\n      return false;\n    } // Deep compare the contents, ignoring non-numeric properties.\n\n\n    while (length--) {\n      if (!eq(a[length], b[length], depth - 1, aStack, bStack)) {\n        return false;\n      }\n    }\n  } else {\n    // Deep compare objects.\n    var keys = Object.keys(a);\n    var key;\n    length = keys.length; // Ensure that both objects contain the same number of properties before comparing deep equality.\n\n    if (Object.keys(b).length !== length) {\n      return false;\n    }\n\n    while (length--) {\n      // Deep compare each member\n      key = keys[length];\n\n      if (!(hasProp(b, key) && eq(a[key], b[key], depth - 1, aStack, bStack))) {\n        return false;\n      }\n    }\n  } // Remove the first object from the stack of traversed objects.\n\n\n  aStack.pop();\n  bStack.pop();\n  return true;\n}\n\nfunction unwrap(a) {\n  if (isObservableArray(a)) {\n    return a.slice();\n  }\n\n  if (isES6Map(a) || isObservableMap(a)) {\n    return Array.from(a.entries());\n  }\n\n  if (isES6Set(a) || isObservableSet(a)) {\n    return Array.from(a.entries());\n  }\n\n  return a;\n}\n\nfunction makeIterable(iterator) {\n  iterator[Symbol.iterator] = getSelf;\n  return iterator;\n}\n\nfunction getSelf() {\n  return this;\n}\n\nfunction isAnnotation(thing) {\n  return (// Can be function\n    thing instanceof Object && typeof thing.annotationType_ === \"string\" && isFunction(thing.make_) && isFunction(thing.extend_)\n  );\n}\n\n/**\r\n * (c) Michel Weststrate 2015 - 2020\r\n * MIT Licensed\r\n *\r\n * Welcome to the mobx sources! To get a global overview of how MobX internally works,\r\n * this is a good place to start:\r\n * https://medium.com/@mweststrate/becoming-fully-reactive-an-in-depth-explanation-of-mobservable-55995262a254#.xvbh6qd74\r\n *\r\n * Source folders:\r\n * ===============\r\n *\r\n * - api/     Most of the public static methods exposed by the module can be found here.\r\n * - core/    Implementation of the MobX algorithm; atoms, derivations, reactions, dependency trees, optimizations. Cool stuff can be found here.\r\n * - types/   All the magic that is need to have observable objects, arrays and values is in this folder. Including the modifiers like `asFlat`.\r\n * - utils/   Utility stuff.\r\n *\r\n */\n[\"Symbol\", \"Map\", \"Set\"].forEach(function (m) {\n  var g = getGlobal();\n\n  if (typeof g[m] === \"undefined\") {\n    die(\"MobX requires global '\" + m + \"' to be available or polyfilled\");\n  }\n});\n\nif (typeof __MOBX_DEVTOOLS_GLOBAL_HOOK__ === \"object\") {\n  // See: https://github.com/andykog/mobx-devtools/\n  __MOBX_DEVTOOLS_GLOBAL_HOOK__.injectMobx({\n    spy: spy,\n    extras: {\n      getDebugName: getDebugName\n    },\n    $mobx: $mobx\n  });\n}\n\nexport { $mobx, FlowCancellationError, ObservableMap, ObservableSet, Reaction, allowStateChanges as _allowStateChanges, runInAction as _allowStateChangesInsideComputed, allowStateReadsEnd as _allowStateReadsEnd, allowStateReadsStart as _allowStateReadsStart, autoAction as _autoAction, _endAction, getAdministration as _getAdministration, getGlobalState as _getGlobalState, interceptReads as _interceptReads, isComputingDerivation as _isComputingDerivation, resetGlobalState as _resetGlobalState, _startAction, action, autorun, comparer, computed, configure, createAtom, apiDefineProperty as defineProperty, entries, extendObservable, flow, flowResult, get, getAtom, getDebugName, getDependencyTree, getObserverTree, has, intercept, isAction, isObservableValue as isBoxedObservable, isComputed, isComputedProp, isFlow, isFlowCancellationError, isObservable, isObservableArray, isObservableMap, isObservableObject, isObservableProp, isObservableSet, keys, makeAutoObservable, makeObservable, observable, observe, onBecomeObserved, onBecomeUnobserved, onReactionError, override, apiOwnKeys as ownKeys, reaction, remove, runInAction, set, spy, toJS, trace, transaction, untracked, values, when };\n//# sourceMappingURL=mobx.esm.js.map\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc');  // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","/**\n * Expose `pathToRegexp`.\n */\nmodule.exports = pathToRegexp\nmodule.exports.parse = parse\nmodule.exports.compile = compile\nmodule.exports.tokensToFunction = tokensToFunction\nmodule.exports.tokensToRegExp = tokensToRegExp\n\n/**\n * Default configs.\n */\nvar DEFAULT_DELIMITER = '/'\n\n/**\n * The main path matching regexp utility.\n *\n * @type {RegExp}\n */\nvar PATH_REGEXP = new RegExp([\n  // Match escaped characters that would otherwise appear in future matches.\n  // This allows the user to escape special characters that won't transform.\n  '(\\\\\\\\.)',\n  // Match Express-style parameters and un-named parameters with a prefix\n  // and optional suffixes. Matches appear as:\n  //\n  // \":test(\\\\d+)?\" => [\"test\", \"\\d+\", undefined, \"?\"]\n  // \"(\\\\d+)\"  => [undefined, undefined, \"\\d+\", undefined]\n  '(?:\\\\:(\\\\w+)(?:\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))?|\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))([+*?])?'\n].join('|'), 'g')\n\n/**\n * Parse a string for the raw tokens.\n *\n * @param  {string}  str\n * @param  {Object=} options\n * @return {!Array}\n */\nfunction parse (str, options) {\n  var tokens = []\n  var key = 0\n  var index = 0\n  var path = ''\n  var defaultDelimiter = (options && options.delimiter) || DEFAULT_DELIMITER\n  var whitelist = (options && options.whitelist) || undefined\n  var pathEscaped = false\n  var res\n\n  while ((res = PATH_REGEXP.exec(str)) !== null) {\n    var m = res[0]\n    var escaped = res[1]\n    var offset = res.index\n    path += str.slice(index, offset)\n    index = offset + m.length\n\n    // Ignore already escaped sequences.\n    if (escaped) {\n      path += escaped[1]\n      pathEscaped = true\n      continue\n    }\n\n    var prev = ''\n    var name = res[2]\n    var capture = res[3]\n    var group = res[4]\n    var modifier = res[5]\n\n    if (!pathEscaped && path.length) {\n      var k = path.length - 1\n      var c = path[k]\n      var matches = whitelist ? whitelist.indexOf(c) > -1 : true\n\n      if (matches) {\n        prev = c\n        path = path.slice(0, k)\n      }\n    }\n\n    // Push the current path onto the tokens.\n    if (path) {\n      tokens.push(path)\n      path = ''\n      pathEscaped = false\n    }\n\n    var repeat = modifier === '+' || modifier === '*'\n    var optional = modifier === '?' || modifier === '*'\n    var pattern = capture || group\n    var delimiter = prev || defaultDelimiter\n\n    tokens.push({\n      name: name || key++,\n      prefix: prev,\n      delimiter: delimiter,\n      optional: optional,\n      repeat: repeat,\n      pattern: pattern\n        ? escapeGroup(pattern)\n        : '[^' + escapeString(delimiter === defaultDelimiter ? delimiter : (delimiter + defaultDelimiter)) + ']+?'\n    })\n  }\n\n  // Push any remaining characters.\n  if (path || index < str.length) {\n    tokens.push(path + str.substr(index))\n  }\n\n  return tokens\n}\n\n/**\n * Compile a string to a template function for the path.\n *\n * @param  {string}             str\n * @param  {Object=}            options\n * @return {!function(Object=, Object=)}\n */\nfunction compile (str, options) {\n  return tokensToFunction(parse(str, options))\n}\n\n/**\n * Expose a method for transforming tokens into the path function.\n */\nfunction tokensToFunction (tokens) {\n  // Compile all the tokens into regexps.\n  var matches = new Array(tokens.length)\n\n  // Compile all the patterns before compilation.\n  for (var i = 0; i < tokens.length; i++) {\n    if (typeof tokens[i] === 'object') {\n      matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$')\n    }\n  }\n\n  return function (data, options) {\n    var path = ''\n    var encode = (options && options.encode) || encodeURIComponent\n\n    for (var i = 0; i < tokens.length; i++) {\n      var token = tokens[i]\n\n      if (typeof token === 'string') {\n        path += token\n        continue\n      }\n\n      var value = data ? data[token.name] : undefined\n      var segment\n\n      if (Array.isArray(value)) {\n        if (!token.repeat) {\n          throw new TypeError('Expected \"' + token.name + '\" to not repeat, but got array')\n        }\n\n        if (value.length === 0) {\n          if (token.optional) continue\n\n          throw new TypeError('Expected \"' + token.name + '\" to not be empty')\n        }\n\n        for (var j = 0; j < value.length; j++) {\n          segment = encode(value[j], token)\n\n          if (!matches[i].test(segment)) {\n            throw new TypeError('Expected all \"' + token.name + '\" to match \"' + token.pattern + '\"')\n          }\n\n          path += (j === 0 ? token.prefix : token.delimiter) + segment\n        }\n\n        continue\n      }\n\n      if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n        segment = encode(String(value), token)\n\n        if (!matches[i].test(segment)) {\n          throw new TypeError('Expected \"' + token.name + '\" to match \"' + token.pattern + '\", but got \"' + segment + '\"')\n        }\n\n        path += token.prefix + segment\n        continue\n      }\n\n      if (token.optional) continue\n\n      throw new TypeError('Expected \"' + token.name + '\" to be ' + (token.repeat ? 'an array' : 'a string'))\n    }\n\n    return path\n  }\n}\n\n/**\n * Escape a regular expression string.\n *\n * @param  {string} str\n * @return {string}\n */\nfunction escapeString (str) {\n  return str.replace(/([.+*?=^!:${}()[\\]|/\\\\])/g, '\\\\$1')\n}\n\n/**\n * Escape the capturing group by escaping special characters and meaning.\n *\n * @param  {string} group\n * @return {string}\n */\nfunction escapeGroup (group) {\n  return group.replace(/([=!:$/()])/g, '\\\\$1')\n}\n\n/**\n * Get the flags for a regexp from the options.\n *\n * @param  {Object} options\n * @return {string}\n */\nfunction flags (options) {\n  return options && options.sensitive ? '' : 'i'\n}\n\n/**\n * Pull out keys from a regexp.\n *\n * @param  {!RegExp} path\n * @param  {Array=}  keys\n * @return {!RegExp}\n */\nfunction regexpToRegexp (path, keys) {\n  if (!keys) return path\n\n  // Use a negative lookahead to match only capturing groups.\n  var groups = path.source.match(/\\((?!\\?)/g)\n\n  if (groups) {\n    for (var i = 0; i < groups.length; i++) {\n      keys.push({\n        name: i,\n        prefix: null,\n        delimiter: null,\n        optional: false,\n        repeat: false,\n        pattern: null\n      })\n    }\n  }\n\n  return path\n}\n\n/**\n * Transform an array into a regexp.\n *\n * @param  {!Array}  path\n * @param  {Array=}  keys\n * @param  {Object=} options\n * @return {!RegExp}\n */\nfunction arrayToRegexp (path, keys, options) {\n  var parts = []\n\n  for (var i = 0; i < path.length; i++) {\n    parts.push(pathToRegexp(path[i], keys, options).source)\n  }\n\n  return new RegExp('(?:' + parts.join('|') + ')', flags(options))\n}\n\n/**\n * Create a path regexp from string input.\n *\n * @param  {string}  path\n * @param  {Array=}  keys\n * @param  {Object=} options\n * @return {!RegExp}\n */\nfunction stringToRegexp (path, keys, options) {\n  return tokensToRegExp(parse(path, options), keys, options)\n}\n\n/**\n * Expose a function for taking tokens and returning a RegExp.\n *\n * @param  {!Array}  tokens\n * @param  {Array=}  keys\n * @param  {Object=} options\n * @return {!RegExp}\n */\nfunction tokensToRegExp (tokens, keys, options) {\n  options = options || {}\n\n  var strict = options.strict\n  var start = options.start !== false\n  var end = options.end !== false\n  var delimiter = options.delimiter || DEFAULT_DELIMITER\n  var endsWith = [].concat(options.endsWith || []).map(escapeString).concat('$').join('|')\n  var route = start ? '^' : ''\n\n  // Iterate over the tokens and create our regexp string.\n  for (var i = 0; i < tokens.length; i++) {\n    var token = tokens[i]\n\n    if (typeof token === 'string') {\n      route += escapeString(token)\n    } else {\n      var capture = token.repeat\n        ? '(?:' + token.pattern + ')(?:' + escapeString(token.delimiter) + '(?:' + token.pattern + '))*'\n        : token.pattern\n\n      if (keys) keys.push(token)\n\n      if (token.optional) {\n        if (!token.prefix) {\n          route += '(' + capture + ')?'\n        } else {\n          route += '(?:' + escapeString(token.prefix) + '(' + capture + '))?'\n        }\n      } else {\n        route += escapeString(token.prefix) + '(' + capture + ')'\n      }\n    }\n  }\n\n  if (end) {\n    if (!strict) route += '(?:' + escapeString(delimiter) + ')?'\n\n    route += endsWith === '$' ? '$' : '(?=' + endsWith + ')'\n  } else {\n    var endToken = tokens[tokens.length - 1]\n    var isEndDelimited = typeof endToken === 'string'\n      ? endToken[endToken.length - 1] === delimiter\n      : endToken === undefined\n\n    if (!strict) route += '(?:' + escapeString(delimiter) + '(?=' + endsWith + '))?'\n    if (!isEndDelimited) route += '(?=' + escapeString(delimiter) + '|' + endsWith + ')'\n  }\n\n  return new RegExp(route, flags(options))\n}\n\n/**\n * Normalize the given path string, returning a regular expression.\n *\n * An empty array can be passed in for the keys, which will hold the\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\n *\n * @param  {(string|RegExp|Array)} path\n * @param  {Array=}                keys\n * @param  {Object=}               options\n * @return {!RegExp}\n */\nfunction pathToRegexp (path, keys, options) {\n  if (path instanceof RegExp) {\n    return regexpToRegexp(path, keys)\n  }\n\n  if (Array.isArray(path)) {\n    return arrayToRegexp(/** @type {!Array} */ (path), keys, options)\n  }\n\n  return stringToRegexp(/** @type {string} */ (path), keys, options)\n}\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","import Cookies from \"js-cookie\";\nconst ylDomain = \"youngliving.com\";\nconst cookieName = \"YL-SLO\";\nlet intervalCreated = false;\nlet intervalId = 0;\nlet initialCookiePresent;\nlet initialUserId;\nlet sessionChangeCallback;\nexport function establishUniversalDomainSession(userId) {\n    createDomainLevelCookie(userId);\n}\n//Set the interval and hit the cookie check to trigger the state change engine...\nexport function onUniversalSessionStatusChange({ onSessionChangeCallback }) {\n    sessionChangeCallback = onSessionChangeCallback;\n    setCookieCheckInterval();\n}\nexport function revokeUniversalDomainSession() {\n    removeCookieOnLogout();\n}\nfunction setCookieCheckInterval() {\n    if (intervalCreated) {\n        return;\n    }\n    intervalCreated = true;\n    const userId = Cookies.get(cookieName);\n    initialCookiePresent = userId != undefined;\n    sessionChangeCallback(initialCookiePresent, userId != 'true' ? userId : undefined);\n    intervalId = window.setInterval(() => {\n        return checkCookie();\n    }, 1000);\n}\nfunction checkCookie() {\n    const userId = Cookies.get(cookieName);\n    const hasCookie = userId != undefined;\n    if (initialCookiePresent != hasCookie || userId != initialUserId) {\n        initialCookiePresent = hasCookie;\n        initialUserId = userId;\n        sessionChangeCallback(initialCookiePresent, userId != 'true' ? userId : undefined);\n    }\n    else {\n        return;\n    }\n}\nfunction removeCookieOnLogout() {\n    Cookies.remove(cookieName, { path: '/', domain: ylDomain });\n    initialCookiePresent = false;\n}\nfunction createDomainLevelCookie(userId) {\n    Cookies.set(cookieName, userId || 'true', { path: '/', domain: ylDomain });\n    initialCookiePresent = true;\n}\n","import { establishUniversalDomainSession, revokeUniversalDomainSession } from '@yl/sso-single-logout';\n\nimport { AuthenticationToken } from '../../external/shared/api/EnrollmentClient.generated';\n\nconst authTokenKey = 'authToken';\n\nexport function getVoAuthToken(): AuthenticationToken | undefined {\n  const tokenString = localStorage.getItem(authTokenKey);\n  return tokenString ? JSON.parse(tokenString) : undefined;\n}\n\nexport function isExpired(authenticationToken: AuthenticationToken) {\n  const expires = new Date(authenticationToken.expireDate);\n  const now = new Date();\n  return expires < now;\n}\n\nexport function setupVoAuthentication(authenticationToken: AuthenticationToken) {\n  localStorage.setItem(authTokenKey, JSON.stringify(authenticationToken));\n  establishUniversalDomainSession(authenticationToken.memberId.toString());\n}\n\nexport function removeVoAuthentication(): AuthenticationToken | undefined {\n  const authToken = getVoAuthToken();\n  localStorage.removeItem(authTokenKey);\n  revokeUniversalDomainSession();\n  return authToken;\n}\n","import { Instance, types } from 'mobx-state-tree';\n\nexport function removeCurrentCookieConsent() {\n  sessionStorage.removeItem('cookie-consent-accepted');\n}\n\nexport const CookieWarningModalStore = types\n  .model('CookieWarningModalStore', {\n    showModal: types.boolean\n  })\n  .views(self => ({\n    get show(): boolean {\n      return self.showModal && sessionStorage.getItem('cookie-consent-accepted') === null;\n    }\n  }))\n  .actions(self => ({\n    close(): void {\n      sessionStorage.setItem('cookie-consent-accepted', 'true');\n      self.showModal = false;\n    }\n  }));\n\nexport type CookieWarningModalStore = Instance<typeof CookieWarningModalStore>;\n","import { SnapshotIn, types, Instance } from 'mobx-state-tree';\n\nexport enum EnrollmentConfigTag {\n  Phase1 = 'Phase1',\n  Phase2 = 'Phase2',\n  Phase2PC = 'Phase2PC',\n  SocialLink = 'SocialLink',\n  Phase2CreatorMode = 'Phase2CreatorMode',\n  Simplified = 'Simplified',\n  SimplifiedCheckout = 'SimplifiedCheckout',\n  Phase2EarlyBilling = 'Phase2EarlyBilling'\n}\n\nexport const EnrollmentStatus = types.model('EnrollmentStatus', {\n  enrollmentId: types.string,\n  storeId: types.number,\n  tag: types.maybe(types.enumeration<EnrollmentConfigTag>(Object.values(EnrollmentConfigTag))),\n  /** IsoCode2 */\n  countryIso: types.string,\n  socialLinkHasExpired: types.boolean,\n  countryIso3:types.optional(types.string,'')\n});\n\nexport interface EnrollmentStatusFromServer extends SnapshotIn<typeof EnrollmentStatus> {\n  locale: string;\n  currentStep: number;\n}\n\nexport type EnrollmentStatus = Instance<typeof EnrollmentStatus>;\n","import axios from 'axios';\n\nimport { enrollmentResource } from '../../infrastructure/http/EnrollmentResource';\nimport { Redirector } from '../../infrastructure/redirecting/Redirector';\nimport { EnrollmentRedirect } from '../root/EnrollmentRedirect';\nimport { getLinkParams } from './LinkParams';\nimport { removeCurrentCookieConsent } from '../cookie-warning/CookieWarningModalStore';\nimport { EnrollmentStatusFromServer } from './EnrollmentStatus';\nimport { removeVoAuthentication } from '../authentication/VoAuthentication';\nimport { detectLocale, languageDetector } from '../../external/shared/localization/languageDetector';\nimport { errorModalStore } from '../../external/shared/error-handling/ErrorModalStore';\n\nfunction getCartIdToUse(enrollmentId: string | null | undefined) {\n  const cartQuantity = localStorage.getItem('shopping-cart-quantity');\n  const cart = localStorage.getItem('shoppingCartId');\n  if (cartQuantity == null || cart == null || (enrollmentId != null && cart === enrollmentId)) {\n    return null;\n  }\n\n  return parseInt(cartQuantity, 10) <= 0 ? null : JSON.parse(cart);\n}\n\nexport function getCurrentEnrollmentId() {\n  return sessionStorage.getItem('enrollment-id');\n}\n\nexport function removeCurrentEnrollmentId() {\n  sessionStorage.removeItem('enrollment-id');\n}\n\nexport async function createInitialEnrollmentStatus(): Promise<EnrollmentStatusFromServer> {\n  const redirectData = EnrollmentRedirect.getRedirectData();\n\n  if (redirectData?.socialLinkId) {\n    const socialLinkResponse = await enrollmentResource.post<EnrollmentStatusFromServer>(\n      `social-links/${redirectData.socialLinkId}/enrollment-status`\n    );\n    return socialLinkResponse.data;\n  }\n\n  const enrollmentId = getCurrentEnrollmentId();\n  const linkParams = getLinkParams();\n  const locale = detectLocale();\n  const cartId = getCartIdToUse(enrollmentId);\n  const response = await enrollmentResource.post<EnrollmentStatusFromServer>('enrollment-status', {\n    enrollmentId,\n    locale,\n    cartId,\n    tag: redirectData?.phase,\n    countryIso: redirectData?.countryIsoCode,\n    enrollerId: linkParams?.enrollerid,\n    sponsorId: linkParams?.sponsorid\n  });\n\n  return response.data;\n}\n\nexport async function getNextEnrollmentStatus(enrollmentId: string) {\n  const response = await enrollmentResource.post<EnrollmentStatusFromServer>('enrollment-status', { enrollmentId });\n  return response.data;\n}\n\nfunction cleanupClientStorages() {\n  localStorage.removeItem('shopping-cart-quantity');\n  localStorage.removeItem('shoppingCartId');\n  localStorage.removeItem('i18nextLng');\n  sessionStorage.removeItem('country-iso-code');\n  EnrollmentRedirect.removeRedirectData();\n  removeVoAuthentication();\n}\n\nexport function persistEnrollmentStatus(enrollmentStatus: EnrollmentStatusFromServer) {\n  cleanupClientStorages();\n  sessionStorage.setItem('enrollment-id', enrollmentStatus.enrollmentId);\n  languageDetector.cacheUserLanguage(enrollmentStatus.locale);\n}\n\nexport function cancelEnrollment(\n  enrollmentId?: string | null,\n  toRoot?: boolean,\n  country?: string,\n  language?: string,\n  tag?: string\n) {\n  removeCurrentEnrollmentId();\n  removeCurrentCookieConsent();\n  cleanupClientStorages();\n\n  const entries = Object.entries({ toRoot, country, language, tag })\n    .filter(([_, value]) => !!value)\n    .map(([key, value]) => [key, value!.toString()]);\n\n  const searchParams = new URLSearchParams(entries).toString();\n\n  Redirector.redirect(`/apps/enrollment/cancel/${enrollmentId || ''}${searchParams ? '?' + searchParams : ''}`);\n}\n\nexport async function createInitialEnrollmentStatusOrRedirect(): Promise<EnrollmentStatusFromServer | undefined> {\n  try {\n    return await createInitialEnrollmentStatus();\n  } catch (error) {\n    console.error(error);\n    if (axios.isAxiosError(error) && error.response?.status === 400) {\n      errorModalStore.close();\n      const { countryIsoCode, phase } = EnrollmentRedirect.getRedirectData() ?? {};\n      cancelEnrollment(getCurrentEnrollmentId(), false, countryIsoCode, detectLocale(), phase);\n      return undefined;\n    }\n    throw error;\n  }\n}\n","import { history } from '@yl/react-router';\nimport { differenceInDays } from 'date-fns';\n\ninterface LinkParams {\n  sponsorid?: string;\n  enrollerid?: string;\n  dateCaptures?: number;\n}\n\nexport function getLinkParams(): LinkParams | undefined {\n  if (!localStorage.link_params) {\n    return undefined;\n  }\n  const linkParams = JSON.parse(localStorage.link_params);\n  const dateCaptured = new Date(linkParams.dateCaptured);\n  const today = new Date();\n  if (differenceInDays(today, dateCaptured) > 7) {\n    return undefined;\n  }\n  return linkParams;\n}\n\nexport function collectLinkParams() {\n  const params = new URLSearchParams(history.location.search);\n\n  // noinspection SpellCheckingInspection\n  const linkParams: LinkParams = {\n    sponsorid: params.get('sponsorid') ?? undefined,\n    enrollerid: params.get('enrollerid') ?? undefined,\n    dateCaptures: new Date().getTime()\n  };\n\n  if (linkParams.sponsorid || linkParams.enrollerid) {\n    localStorage.link_params = JSON.stringify(linkParams);\n  }\n}\n","import { Redirector } from '../../infrastructure/redirecting/Redirector';\nimport { baseURL } from '../../infrastructure/http/EnrollmentResource';\nimport { getCurrentEnrollmentId } from '../customer-enrollment-status/EnrollmentStatusManager';\nimport { EnrollmentConfigTag } from '../customer-enrollment-status/EnrollmentStatus';\n\nexport const EnrollmentRedirect = {\n  getRedirectData(): RedirectViewModel | undefined {\n    const redirectData = localStorage.getItem('redirectData');\n    return redirectData ? (JSON.parse(redirectData) as RedirectViewModel) : undefined;\n  },\n\n  setRedirectData(redirectData: RedirectViewModel) {\n    localStorage.setItem('redirectData', JSON.stringify(redirectData));\n  },\n\n  removeRedirectData(): void {\n    localStorage.removeItem('redirectData');\n  },\n\n  validatePathAndRedirectIfNecessary(): void {\n    const redirectData = this.getRedirectData();\n\n    if (redirectData?.enabled) {\n      const currentPath = window.location.pathname;\n      if (!currentPath.includes(redirectData.url)) {\n        Redirector.redirect(redirectData.url);\n      }\n    } else if (!getCurrentEnrollmentId()) {\n      if (process.env.NODE_ENV === 'development') {\n        this.setRedirectData({\n          enabled: true,\n          url: baseURL,\n          countryIsoCode: 'GB',\n          phase: EnrollmentConfigTag.Phase2\n        });\n      }\n      Redirector.redirect('/vo/#/enroll/start');\n    }\n  },\n\n  applyUrlSearchParams() {\n    const params = new URLSearchParams(window.location.search);\n    const redirectData = this.getRedirectData();\n    if (redirectData) {\n      const tag = params.get('tag');\n      const country = params.get('country') || params.get('countryIsoCode');\n      if (tag || country) {\n        this.setRedirectData({\n          ...redirectData,\n          phase: (tag ?? redirectData.phase) as EnrollmentConfigTag,\n          countryIsoCode: country ?? redirectData.countryIsoCode\n        });\n      }\n    }\n  }\n};\n\nexport interface RedirectViewModel {\n  enabled: boolean;\n  url: string;\n  phase?: EnrollmentConfigTag;\n  socialLinkId?: string;\n  countryIsoCode?: string;\n  countryIsoCode3?:string;\n}\n","import { SnapshotIn } from 'mobx-state-tree';\nimport { enrollmentResource } from '../../infrastructure/http/EnrollmentResource';\nimport { Currency } from '../../reference/Currency';\nimport { EnrollmentStep } from '../enrollment-process/steps-management/model/EnrollmentStep';\nimport { StoreLanguage } from '../locale-management/locale-manager/StoreLanguage';\nimport { EnrollmentConfigTag } from './EnrollmentStatus';\n\nexport interface StoreSpecificConfig {\n  currency: SnapshotIn<Currency>;\n  steps: SnapshotIn<EnrollmentStep>[];\n  languages: SnapshotIn<StoreLanguage>[];\n}\n\nexport async function getStoreSpecificConfiguration(storeId: number, tag: EnrollmentConfigTag | undefined) {\n  const response = await enrollmentResource.get<StoreSpecificConfig>(`/enrollment-process/store/${storeId}`, {\n    params: { tag }\n  });\n  return response.data;\n}\n","import {\n  createInitialEnrollmentStatusOrRedirect,\n  persistEnrollmentStatus\n} from './app/customer-enrollment-status/EnrollmentStatusManager';\nimport { getStoreSpecificConfiguration } from './app/customer-enrollment-status/StoreSpecificConfig';\nimport { collectLinkParams } from './app/customer-enrollment-status/LinkParams';\nimport { errorModalStore } from './external/shared/error-handling/ErrorModalStore';\nimport { EnrollmentRedirect } from './app/root/EnrollmentRedirect';\nimport { disableBackForwardCache } from './app/routing/disableBackForwardCache';\nimport { sendHistoryEventsToAnalytics } from './infrastructure/analytics/gtm-support';\nimport { EnrollmentStatusFromServer } from './app/customer-enrollment-status/EnrollmentStatus';\n\ntry {\n  EnrollmentRedirect.validatePathAndRedirectIfNecessary();\n  EnrollmentRedirect.applyUrlSearchParams();\n  collectLinkParams();\n  disableBackForwardCache();\n  sendHistoryEventsToAnalytics();\n} catch (error) {\n  errorModalStore.showError();\n}\n\nexport async function bootstrapData(enrollmentStatus?: EnrollmentStatusFromServer) {\n  enrollmentStatus ??= await createInitialEnrollmentStatusOrRedirect();\n  if (!enrollmentStatus) return undefined;\n  const storeSpecificConfig = await getStoreSpecificConfiguration(enrollmentStatus.storeId, enrollmentStatus.tag);\n  persistEnrollmentStatus(enrollmentStatus);\n  return { enrollmentStatus, storeSpecificConfig };\n}\n\nexport const dataPromise = bootstrapData();\n\nimport('./bootstrapReact' /* webpackChunkName: 'bootstrapReact' */);\n","export function disableBackForwardCache() {\n  window.addEventListener('pageshow', event => {\n    if (event.persisted) {\n      window.location.reload();\n    }\n  });\n  window.addEventListener('unload', () => undefined);\n}\n","//----------------------\n// <auto-generated>\n//     Generated using the NSwag toolchain v13.18.2.0 (NJsonSchema v10.8.0.0 (Newtonsoft.Json v13.0.0.0)) (http://NSwag.org)\n// </auto-generated>\n//----------------------\n\n/* tslint:disable */\n/* eslint-disable */\n// ReSharper disable InconsistentNaming\n\nimport type { AxiosError, AxiosInstance, AxiosRequestConfig, AxiosResponse, CancelToken } from 'axios';\nimport { ApiClientBase } from './ApiClientBase';\n\nexport class FeatureFlagClient extends ApiClientBase {\n    private instance: AxiosInstance;\n    private baseUrl: string;\n    protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n    constructor(baseUrl?: string, instance?: AxiosInstance) {\n\n        super();\n\n        this.instance = instance ? instance : axios.create();\n\n        this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\n\n    }\n\n    getEnabledFeatures(features: string | undefined , cancelToken?: CancelToken | undefined): Promise<string[]> {\n        let url_ = this.baseUrl + \"/api/common/features?\";\n        if (features === null)\n            throw new Error(\"The parameter 'features' cannot be null.\");\n        else if (features !== undefined)\n            url_ += \"features=\" + encodeURIComponent(\"\" + features) + \"&\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            method: \"GET\",\n            url: url_,\n            headers: {\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processGetEnabledFeatures(_response);\n        });\n    }\n\n    protected processGetEnabledFeatures(response: AxiosResponse): Promise<string[]> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<string[]>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<string[]>(null as any);\n    }\n}\n\nexport class HealthStatusClient extends ApiClientBase {\n    private instance: AxiosInstance;\n    private baseUrl: string;\n    protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n    constructor(baseUrl?: string, instance?: AxiosInstance) {\n\n        super();\n\n        this.instance = instance ? instance : axios.create();\n\n        this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\n\n    }\n\n    getHealthStatus(  cancelToken?: CancelToken | undefined): Promise<FileResponse | null> {\n        let url_ = this.baseUrl + \"/api/common/health-status\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            responseType: \"blob\",\n            method: \"GET\",\n            url: url_,\n            headers: {\n                \"Accept\": \"application/octet-stream\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processGetHealthStatus(_response);\n        });\n    }\n\n    protected processGetHealthStatus(response: AxiosResponse): Promise<FileResponse | null> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200 || status === 206) {\n            const contentDisposition = response.headers ? response.headers[\"content-disposition\"] : undefined;\n            let fileNameMatch = contentDisposition ? /filename\\*=(?:(\\\\?['\"])(.*?)\\1|(?:[^\\s]+'.*?')?([^;\\n]*))/g.exec(contentDisposition) : undefined;\n            let fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[3] || fileNameMatch[2] : undefined;\n            if (fileName) {\n                fileName = decodeURIComponent(fileName);\n            } else {\n                fileNameMatch = contentDisposition ? /filename=\"?([^\"]*?)\"?(;|$)/g.exec(contentDisposition) : undefined;\n                fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[1] : undefined;\n            }\n            return Promise.resolve({ fileName: fileName, status: status, data: new Blob([response.data], { type: response.headers[\"content-type\"] }), headers: _headers });\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<FileResponse | null>(null as any);\n    }\n\n    getHealthDeep(  cancelToken?: CancelToken | undefined): Promise<FileResponse | null> {\n        let url_ = this.baseUrl + \"/api/common/health/deep\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            responseType: \"blob\",\n            method: \"GET\",\n            url: url_,\n            headers: {\n                \"Accept\": \"application/octet-stream\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processGetHealthDeep(_response);\n        });\n    }\n\n    protected processGetHealthDeep(response: AxiosResponse): Promise<FileResponse | null> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200 || status === 206) {\n            const contentDisposition = response.headers ? response.headers[\"content-disposition\"] : undefined;\n            let fileNameMatch = contentDisposition ? /filename\\*=(?:(\\\\?['\"])(.*?)\\1|(?:[^\\s]+'.*?')?([^;\\n]*))/g.exec(contentDisposition) : undefined;\n            let fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[3] || fileNameMatch[2] : undefined;\n            if (fileName) {\n                fileName = decodeURIComponent(fileName);\n            } else {\n                fileNameMatch = contentDisposition ? /filename=\"?([^\"]*?)\"?(;|$)/g.exec(contentDisposition) : undefined;\n                fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[1] : undefined;\n            }\n            return Promise.resolve({ fileName: fileName, status: status, data: new Blob([response.data], { type: response.headers[\"content-type\"] }), headers: _headers });\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<FileResponse | null>(null as any);\n    }\n}\n\nexport class BuildVersionClient extends ApiClientBase {\n    private instance: AxiosInstance;\n    private baseUrl: string;\n    protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n    constructor(baseUrl?: string, instance?: AxiosInstance) {\n\n        super();\n\n        this.instance = instance ? instance : axios.create();\n\n        this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\n\n    }\n\n    buildVersion(  cancelToken?: CancelToken | undefined): Promise<YlAssembliesVersionInfo[]> {\n        let url_ = this.baseUrl + \"/api/common/build-version\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            method: \"GET\",\n            url: url_,\n            headers: {\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processBuildVersion(_response);\n        });\n    }\n\n    protected processBuildVersion(response: AxiosResponse): Promise<YlAssembliesVersionInfo[]> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<YlAssembliesVersionInfo[]>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<YlAssembliesVersionInfo[]>(null as any);\n    }\n}\n\nexport class ContentfulLabelsClient extends ApiClientBase {\n    private instance: AxiosInstance;\n    private baseUrl: string;\n    protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n    constructor(baseUrl?: string, instance?: AxiosInstance) {\n\n        super();\n\n        this.instance = instance ? instance : axios.create();\n\n        this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\n\n    }\n\n    getTranslations(namespace: string, lang: string , cancelToken?: CancelToken | undefined): Promise<{ [key: string]: string; }> {\n        let url_ = this.baseUrl + \"/translations/{namespace}/{lang}\";\n        if (namespace === undefined || namespace === null)\n            throw new Error(\"The parameter 'namespace' must be defined.\");\n        url_ = url_.replace(\"{namespace}\", encodeURIComponent(\"\" + namespace));\n        if (lang === undefined || lang === null)\n            throw new Error(\"The parameter 'lang' must be defined.\");\n        url_ = url_.replace(\"{lang}\", encodeURIComponent(\"\" + lang));\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            method: \"GET\",\n            url: url_,\n            headers: {\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processGetTranslations(_response);\n        });\n    }\n\n    protected processGetTranslations(response: AxiosResponse): Promise<{ [key: string]: string; }> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<{ [key: string]: string; }>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<{ [key: string]: string; }>(null as any);\n    }\n}\n\nexport class StripeRedirectClient extends ApiClientBase {\n    private instance: AxiosInstance;\n    private baseUrl: string;\n    protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n    constructor(baseUrl?: string, instance?: AxiosInstance) {\n\n        super();\n\n        this.instance = instance ? instance : axios.create();\n\n        this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\n\n    }\n\n    handle3dsRedirection(  cancelToken?: CancelToken | undefined): Promise<FileResponse | null> {\n        let url_ = this.baseUrl + \"/stripe/three-d-secure-redirect\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            responseType: \"blob\",\n            method: \"GET\",\n            url: url_,\n            headers: {\n                \"Accept\": \"application/octet-stream\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processHandle3dsRedirection(_response);\n        });\n    }\n\n    protected processHandle3dsRedirection(response: AxiosResponse): Promise<FileResponse | null> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200 || status === 206) {\n            const contentDisposition = response.headers ? response.headers[\"content-disposition\"] : undefined;\n            let fileNameMatch = contentDisposition ? /filename\\*=(?:(\\\\?['\"])(.*?)\\1|(?:[^\\s]+'.*?')?([^;\\n]*))/g.exec(contentDisposition) : undefined;\n            let fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[3] || fileNameMatch[2] : undefined;\n            if (fileName) {\n                fileName = decodeURIComponent(fileName);\n            } else {\n                fileNameMatch = contentDisposition ? /filename=\"?([^\"]*?)\"?(;|$)/g.exec(contentDisposition) : undefined;\n                fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[1] : undefined;\n            }\n            return Promise.resolve({ fileName: fileName, status: status, data: new Blob([response.data], { type: response.headers[\"content-type\"] }), headers: _headers });\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<FileResponse | null>(null as any);\n    }\n}\n\nexport class OrderPaymentStatusClient extends ApiClientBase {\n    private instance: AxiosInstance;\n    private baseUrl: string;\n    protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n    constructor(baseUrl?: string, instance?: AxiosInstance) {\n\n        super();\n\n        this.instance = instance ? instance : axios.create();\n\n        this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\n\n    }\n\n    checkOrderPaymentStatusInShoppingAPI(orderId: string , cancelToken?: CancelToken | undefined): Promise<PaymentStatusViewModel> {\n        let url_ = this.baseUrl + \"/api/order-payment-status/{orderId}\";\n        if (orderId === undefined || orderId === null)\n            throw new Error(\"The parameter 'orderId' must be defined.\");\n        url_ = url_.replace(\"{orderId}\", encodeURIComponent(\"\" + orderId));\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            method: \"GET\",\n            url: url_,\n            headers: {\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processCheckOrderPaymentStatusInShoppingAPI(_response);\n        });\n    }\n\n    protected processCheckOrderPaymentStatusInShoppingAPI(response: AxiosResponse): Promise<PaymentStatusViewModel> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<PaymentStatusViewModel>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<PaymentStatusViewModel>(null as any);\n    }\n}\n\nexport class ShoppingAPIRegistrationClient extends ApiClientBase {\n    private instance: AxiosInstance;\n    private baseUrl: string;\n    protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n    constructor(baseUrl?: string, instance?: AxiosInstance) {\n\n        super();\n\n        this.instance = instance ? instance : axios.create();\n\n        this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\n\n    }\n\n    signUpInShopping(  cancelToken?: CancelToken | undefined): Promise<void> {\n        let url_ = this.baseUrl + \"/api/shopping-sign-up\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            method: \"GET\",\n            url: url_,\n            headers: {\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processSignUpInShopping(_response);\n        });\n    }\n\n    protected processSignUpInShopping(response: AxiosResponse): Promise<void> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            return Promise.resolve<void>(null as any);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<void>(null as any);\n    }\n}\n\nexport class VoucherAvailabilityClient extends ApiClientBase {\n    private instance: AxiosInstance;\n    private baseUrl: string;\n    protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n    constructor(baseUrl?: string, instance?: AxiosInstance) {\n\n        super();\n\n        this.instance = instance ? instance : axios.create();\n\n        this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\n\n    }\n\n    validateAndApplyVoucher(code: string , cancelToken?: CancelToken | undefined): Promise<PromoVoucherEntryResponseViewModel> {\n        let url_ = this.baseUrl + \"/api/validate-and-apply-voucher/{code}\";\n        if (code === undefined || code === null)\n            throw new Error(\"The parameter 'code' must be defined.\");\n        url_ = url_.replace(\"{code}\", encodeURIComponent(\"\" + code));\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            method: \"GET\",\n            url: url_,\n            headers: {\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processValidateAndApplyVoucher(_response);\n        });\n    }\n\n    protected processValidateAndApplyVoucher(response: AxiosResponse): Promise<PromoVoucherEntryResponseViewModel> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<PromoVoucherEntryResponseViewModel>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<PromoVoucherEntryResponseViewModel>(null as any);\n    }\n}\n\nexport class EnrollmentConfigurationClient extends ApiClientBase {\n    private instance: AxiosInstance;\n    private baseUrl: string;\n    protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n    constructor(baseUrl?: string, instance?: AxiosInstance) {\n\n        super();\n\n        this.instance = instance ? instance : axios.create();\n\n        this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\n\n    }\n\n    getEnrollmentConfigsForCountry(countryIsoCode: string , cancelToken?: CancelToken | undefined): Promise<EnrollmentConfigResponse> {\n        let url_ = this.baseUrl + \"/api/enrollment-config/{countryIsoCode}/tags\";\n        if (countryIsoCode === undefined || countryIsoCode === null)\n            throw new Error(\"The parameter 'countryIsoCode' must be defined.\");\n        url_ = url_.replace(\"{countryIsoCode}\", encodeURIComponent(\"\" + countryIsoCode));\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            method: \"GET\",\n            url: url_,\n            headers: {\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processGetEnrollmentConfigsForCountry(_response);\n        });\n    }\n\n    protected processGetEnrollmentConfigsForCountry(response: AxiosResponse): Promise<EnrollmentConfigResponse> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<EnrollmentConfigResponse>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<EnrollmentConfigResponse>(null as any);\n    }\n}\n\nexport class DocumentsClient extends ApiClientBase {\n    private instance: AxiosInstance;\n    private baseUrl: string;\n    protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n    constructor(baseUrl?: string, instance?: AxiosInstance) {\n\n        super();\n\n        this.instance = instance ? instance : axios.create();\n\n        this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\n\n    }\n\n    getDocuments(  cancelToken?: CancelToken | undefined): Promise<FileResponse | null> {\n        let url_ = this.baseUrl + \"/api/documents\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            responseType: \"blob\",\n            method: \"GET\",\n            url: url_,\n            headers: {\n                \"Accept\": \"application/octet-stream\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processGetDocuments(_response);\n        });\n    }\n\n    protected processGetDocuments(response: AxiosResponse): Promise<FileResponse | null> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200 || status === 206) {\n            const contentDisposition = response.headers ? response.headers[\"content-disposition\"] : undefined;\n            let fileNameMatch = contentDisposition ? /filename\\*=(?:(\\\\?['\"])(.*?)\\1|(?:[^\\s]+'.*?')?([^;\\n]*))/g.exec(contentDisposition) : undefined;\n            let fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[3] || fileNameMatch[2] : undefined;\n            if (fileName) {\n                fileName = decodeURIComponent(fileName);\n            } else {\n                fileNameMatch = contentDisposition ? /filename=\"?([^\"]*?)\"?(;|$)/g.exec(contentDisposition) : undefined;\n                fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[1] : undefined;\n            }\n            return Promise.resolve({ fileName: fileName, status: status, data: new Blob([response.data], { type: response.headers[\"content-type\"] }), headers: _headers });\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<FileResponse | null>(null as any);\n    }\n\n    uploadDocuments(files: FileParameter[] | undefined , cancelToken?: CancelToken | undefined): Promise<FileResponse | null> {\n        let url_ = this.baseUrl + \"/api/documents\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        const content_ = new FormData();\n        if (files === null || files === undefined)\n            throw new Error(\"The parameter 'files' cannot be null.\");\n        else\n            files.forEach(item_ => content_.append(\"files\", item_.data, item_.fileName ? item_.fileName : \"files\") );\n\n        let options_: AxiosRequestConfig = {\n            data: content_,\n            responseType: \"blob\",\n            method: \"POST\",\n            url: url_,\n            headers: {\n                \"Accept\": \"application/octet-stream\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processUploadDocuments(_response);\n        });\n    }\n\n    protected processUploadDocuments(response: AxiosResponse): Promise<FileResponse | null> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200 || status === 206) {\n            const contentDisposition = response.headers ? response.headers[\"content-disposition\"] : undefined;\n            let fileNameMatch = contentDisposition ? /filename\\*=(?:(\\\\?['\"])(.*?)\\1|(?:[^\\s]+'.*?')?([^;\\n]*))/g.exec(contentDisposition) : undefined;\n            let fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[3] || fileNameMatch[2] : undefined;\n            if (fileName) {\n                fileName = decodeURIComponent(fileName);\n            } else {\n                fileNameMatch = contentDisposition ? /filename=\"?([^\"]*?)\"?(;|$)/g.exec(contentDisposition) : undefined;\n                fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[1] : undefined;\n            }\n            return Promise.resolve({ fileName: fileName, status: status, data: new Blob([response.data], { type: response.headers[\"content-type\"] }), headers: _headers });\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<FileResponse | null>(null as any);\n    }\n\n    deleteDocument(originalFileName: string , cancelToken?: CancelToken | undefined): Promise<FileResponse | null> {\n        let url_ = this.baseUrl + \"/api/documents/{originalFileName}\";\n        if (originalFileName === undefined || originalFileName === null)\n            throw new Error(\"The parameter 'originalFileName' must be defined.\");\n        url_ = url_.replace(\"{originalFileName}\", encodeURIComponent(\"\" + originalFileName));\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            responseType: \"blob\",\n            method: \"DELETE\",\n            url: url_,\n            headers: {\n                \"Accept\": \"application/octet-stream\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processDeleteDocument(_response);\n        });\n    }\n\n    protected processDeleteDocument(response: AxiosResponse): Promise<FileResponse | null> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200 || status === 206) {\n            const contentDisposition = response.headers ? response.headers[\"content-disposition\"] : undefined;\n            let fileNameMatch = contentDisposition ? /filename\\*=(?:(\\\\?['\"])(.*?)\\1|(?:[^\\s]+'.*?')?([^;\\n]*))/g.exec(contentDisposition) : undefined;\n            let fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[3] || fileNameMatch[2] : undefined;\n            if (fileName) {\n                fileName = decodeURIComponent(fileName);\n            } else {\n                fileNameMatch = contentDisposition ? /filename=\"?([^\"]*?)\"?(;|$)/g.exec(contentDisposition) : undefined;\n                fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[1] : undefined;\n            }\n            return Promise.resolve({ fileName: fileName, status: status, data: new Blob([response.data], { type: response.headers[\"content-type\"] }), headers: _headers });\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<FileResponse | null>(null as any);\n    }\n}\n\nexport class CountriesClient extends ApiClientBase {\n    private instance: AxiosInstance;\n    private baseUrl: string;\n    protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n    constructor(baseUrl?: string, instance?: AxiosInstance) {\n\n        super();\n\n        this.instance = instance ? instance : axios.create();\n\n        this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\n\n    }\n\n    getCountriesAndLanguages(  cancelToken?: CancelToken | undefined): Promise<CountriesAndLanguagesViewModel> {\n        let url_ = this.baseUrl + \"/api/countries/all-countries\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            method: \"GET\",\n            url: url_,\n            headers: {\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processGetCountriesAndLanguages(_response);\n        });\n    }\n\n    protected processGetCountriesAndLanguages(response: AxiosResponse): Promise<CountriesAndLanguagesViewModel> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<CountriesAndLanguagesViewModel>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<CountriesAndLanguagesViewModel>(null as any);\n    }\n\n    getCountries(locale: string , cancelToken?: CancelToken | undefined): Promise<CountriesViewModel> {\n        let url_ = this.baseUrl + \"/api/countries/all-countries/{locale}\";\n        if (locale === undefined || locale === null)\n            throw new Error(\"The parameter 'locale' must be defined.\");\n        url_ = url_.replace(\"{locale}\", encodeURIComponent(\"\" + locale));\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            method: \"GET\",\n            url: url_,\n            headers: {\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processGetCountries(_response);\n        });\n    }\n\n    protected processGetCountries(response: AxiosResponse): Promise<CountriesViewModel> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<CountriesViewModel>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<CountriesViewModel>(null as any);\n    }\n\n    getLanguages(isoCode: string , cancelToken?: CancelToken | undefined): Promise<LanguageViewModel[]> {\n        let url_ = this.baseUrl + \"/api/countries/languages/{isoCode}\";\n        if (isoCode === undefined || isoCode === null)\n            throw new Error(\"The parameter 'isoCode' must be defined.\");\n        url_ = url_.replace(\"{isoCode}\", encodeURIComponent(\"\" + isoCode));\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            method: \"GET\",\n            url: url_,\n            headers: {\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processGetLanguages(_response);\n        });\n    }\n\n    protected processGetLanguages(response: AxiosResponse): Promise<LanguageViewModel[]> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<LanguageViewModel[]>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<LanguageViewModel[]>(null as any);\n    }\n\n    getAllSuburbs(  cancelToken?: CancelToken | undefined): Promise<SuburbModel[]> {\n        let url_ = this.baseUrl + \"/api/countries/all-suburbs\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            method: \"GET\",\n            url: url_,\n            headers: {\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processGetAllSuburbs(_response);\n        });\n    }\n\n    protected processGetAllSuburbs(response: AxiosResponse): Promise<SuburbModel[]> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<SuburbModel[]>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<SuburbModel[]>(null as any);\n    }\n\n    getStatesFromPostalCode(countryIso2: string, postalCode: string , cancelToken?: CancelToken | undefined): Promise<StateViewModel[]> {\n        let url_ = this.baseUrl + \"/api/countries/{countryIso2}/postalCodes/{postalCode}/states\";\n        if (countryIso2 === undefined || countryIso2 === null)\n            throw new Error(\"The parameter 'countryIso2' must be defined.\");\n        url_ = url_.replace(\"{countryIso2}\", encodeURIComponent(\"\" + countryIso2));\n        if (postalCode === undefined || postalCode === null)\n            throw new Error(\"The parameter 'postalCode' must be defined.\");\n        url_ = url_.replace(\"{postalCode}\", encodeURIComponent(\"\" + postalCode));\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            method: \"GET\",\n            url: url_,\n            headers: {\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processGetStatesFromPostalCode(_response);\n        });\n    }\n\n    protected processGetStatesFromPostalCode(response: AxiosResponse): Promise<StateViewModel[]> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<StateViewModel[]>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<StateViewModel[]>(null as any);\n    }\n\n    getAllCities(iso2Code: string , cancelToken?: CancelToken | undefined): Promise<CityModel[]> {\n        let url_ = this.baseUrl + \"/api/countries/{iso2Code}/cities\";\n        if (iso2Code === undefined || iso2Code === null)\n            throw new Error(\"The parameter 'iso2Code' must be defined.\");\n        url_ = url_.replace(\"{iso2Code}\", encodeURIComponent(\"\" + iso2Code));\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            method: \"GET\",\n            url: url_,\n            headers: {\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processGetAllCities(_response);\n        });\n    }\n\n    protected processGetAllCities(response: AxiosResponse): Promise<CityModel[]> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<CityModel[]>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<CityModel[]>(null as any);\n    }\n\n    getCitiesByCountryAndState(countryIso2: string, state: string , cancelToken?: CancelToken | undefined): Promise<CityModel[]> {\n        let url_ = this.baseUrl + \"/api/countries/{countryIso2}/states/{state}/cities\";\n        if (countryIso2 === undefined || countryIso2 === null)\n            throw new Error(\"The parameter 'countryIso2' must be defined.\");\n        url_ = url_.replace(\"{countryIso2}\", encodeURIComponent(\"\" + countryIso2));\n        if (state === undefined || state === null)\n            throw new Error(\"The parameter 'state' must be defined.\");\n        url_ = url_.replace(\"{state}\", encodeURIComponent(\"\" + state));\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            method: \"GET\",\n            url: url_,\n            headers: {\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processGetCitiesByCountryAndState(_response);\n        });\n    }\n\n    protected processGetCitiesByCountryAndState(response: AxiosResponse): Promise<CityModel[]> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<CityModel[]>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<CityModel[]>(null as any);\n    }\n\n    getCitiesFromPostalCode(countryIso2: string, postalCode: string , cancelToken?: CancelToken | undefined): Promise<CityModel[]> {\n        let url_ = this.baseUrl + \"/api/countries/{countryIso2}/postalCodes/{postalCode}/cities\";\n        if (countryIso2 === undefined || countryIso2 === null)\n            throw new Error(\"The parameter 'countryIso2' must be defined.\");\n        url_ = url_.replace(\"{countryIso2}\", encodeURIComponent(\"\" + countryIso2));\n        if (postalCode === undefined || postalCode === null)\n            throw new Error(\"The parameter 'postalCode' must be defined.\");\n        url_ = url_.replace(\"{postalCode}\", encodeURIComponent(\"\" + postalCode));\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            method: \"GET\",\n            url: url_,\n            headers: {\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processGetCitiesFromPostalCode(_response);\n        });\n    }\n\n    protected processGetCitiesFromPostalCode(response: AxiosResponse): Promise<CityModel[]> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<CityModel[]>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<CityModel[]>(null as any);\n    }\n\n    getZipCodeFromCityAndState(city: string, state: string, countryIso2: string , cancelToken?: CancelToken | undefined): Promise<ZipCodeViewModel[]> {\n        let url_ = this.baseUrl + \"/api/countries/{countryIso2}/states/{state}/cities/{city}\";\n        if (city === undefined || city === null)\n            throw new Error(\"The parameter 'city' must be defined.\");\n        url_ = url_.replace(\"{city}\", encodeURIComponent(\"\" + city));\n        if (state === undefined || state === null)\n            throw new Error(\"The parameter 'state' must be defined.\");\n        url_ = url_.replace(\"{state}\", encodeURIComponent(\"\" + state));\n        if (countryIso2 === undefined || countryIso2 === null)\n            throw new Error(\"The parameter 'countryIso2' must be defined.\");\n        url_ = url_.replace(\"{countryIso2}\", encodeURIComponent(\"\" + countryIso2));\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            method: \"GET\",\n            url: url_,\n            headers: {\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processGetZipCodeFromCityAndState(_response);\n        });\n    }\n\n    protected processGetZipCodeFromCityAndState(response: AxiosResponse): Promise<ZipCodeViewModel[]> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<ZipCodeViewModel[]>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<ZipCodeViewModel[]>(null as any);\n    }\n}\n\nexport class CompleteEnrollmentClient extends ApiClientBase {\n    private instance: AxiosInstance;\n    private baseUrl: string;\n    protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n    constructor(baseUrl?: string, instance?: AxiosInstance) {\n\n        super();\n\n        this.instance = instance ? instance : axios.create();\n\n        this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\n\n    }\n\n    completeEnrollment(  cancelToken?: CancelToken | undefined): Promise<IEnrollmentCompletedViewModel> {\n        let url_ = this.baseUrl + \"/api/complete-enrollment\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            method: \"GET\",\n            url: url_,\n            headers: {\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processCompleteEnrollment(_response);\n        });\n    }\n\n    protected processCompleteEnrollment(response: AxiosResponse): Promise<IEnrollmentCompletedViewModel> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<IEnrollmentCompletedViewModel>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<IEnrollmentCompletedViewModel>(null as any);\n    }\n}\n\nexport class AddressVerificationClient extends ApiClientBase {\n    private instance: AxiosInstance;\n    private baseUrl: string;\n    protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n    constructor(baseUrl?: string, instance?: AxiosInstance) {\n\n        super();\n\n        this.instance = instance ? instance : axios.create();\n\n        this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\n\n    }\n\n    verifyAddress(form: AddressEntryForm , cancelToken?: CancelToken | undefined): Promise<AddressVerificationResponse> {\n        let url_ = this.baseUrl + \"/api/address-verification\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        const content_ = JSON.stringify(form);\n\n        let options_: AxiosRequestConfig = {\n            data: content_,\n            method: \"POST\",\n            url: url_,\n            headers: {\n                \"Content-Type\": \"application/json\",\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processVerifyAddress(_response);\n        });\n    }\n\n    protected processVerifyAddress(response: AxiosResponse): Promise<AddressVerificationResponse> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<AddressVerificationResponse>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<AddressVerificationResponse>(null as any);\n    }\n}\n\nexport class ViesVatVerificationClient extends ApiClientBase {\n    private instance: AxiosInstance;\n    private baseUrl: string;\n    protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n    constructor(baseUrl?: string, instance?: AxiosInstance) {\n\n        super();\n\n        this.instance = instance ? instance : axios.create();\n\n        this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\n\n    }\n\n    verifyTaxId(form: TaxIdEntryForm , cancelToken?: CancelToken | undefined): Promise<ViesVatVerificationResponse> {\n        let url_ = this.baseUrl + \"/api/taxid-verification\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        const content_ = JSON.stringify(form);\n\n        let options_: AxiosRequestConfig = {\n            data: content_,\n            method: \"POST\",\n            url: url_,\n            headers: {\n                \"Content-Type\": \"application/json\",\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processVerifyTaxId(_response);\n        });\n    }\n\n    protected processVerifyTaxId(response: AxiosResponse): Promise<ViesVatVerificationResponse> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<ViesVatVerificationResponse>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<ViesVatVerificationResponse>(null as any);\n    }\n}\n\nexport class AccountsAPIRedirectLogClient extends ApiClientBase {\n    private instance: AxiosInstance;\n    private baseUrl: string;\n    protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n    constructor(baseUrl?: string, instance?: AxiosInstance) {\n\n        super();\n\n        this.instance = instance ? instance : axios.create();\n\n        this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\n\n    }\n\n    log(redirectLog: Enrollment2RedirectLogViewModel , cancelToken?: CancelToken | undefined): Promise<void> {\n        let url_ = this.baseUrl + \"/api/redirect-log\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        const content_ = JSON.stringify(redirectLog);\n\n        let options_: AxiosRequestConfig = {\n            data: content_,\n            method: \"POST\",\n            url: url_,\n            headers: {\n                \"Content-Type\": \"application/json\",\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processLog(_response);\n        });\n    }\n\n    protected processLog(response: AxiosResponse): Promise<void> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            return Promise.resolve<void>(null as any);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<void>(null as any);\n    }\n}\n\nexport class TokenClient extends ApiClientBase {\n    private instance: AxiosInstance;\n    private baseUrl: string;\n    protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n    constructor(baseUrl?: string, instance?: AxiosInstance) {\n\n        super();\n\n        this.instance = instance ? instance : axios.create();\n\n        this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\n\n    }\n\n    getDevAuthToken(  cancelToken?: CancelToken | undefined): Promise<AuthenticationToken> {\n        let url_ = this.baseUrl + \"/api/token/dev-token\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            method: \"GET\",\n            url: url_,\n            headers: {\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processGetDevAuthToken(_response);\n        });\n    }\n\n    protected processGetDevAuthToken(response: AxiosResponse): Promise<AuthenticationToken> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<AuthenticationToken>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<AuthenticationToken>(null as any);\n    }\n\n    reissue(  cancelToken?: CancelToken | undefined): Promise<AuthenticationToken> {\n        let url_ = this.baseUrl + \"/api/token/reissue\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            method: \"POST\",\n            url: url_,\n            headers: {\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processReissue(_response);\n        });\n    }\n\n    protected processReissue(response: AxiosResponse): Promise<AuthenticationToken> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<AuthenticationToken>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<AuthenticationToken>(null as any);\n    }\n}\n\nexport class EnrollmentAgreementsClient extends ApiClientBase {\n    private instance: AxiosInstance;\n    private baseUrl: string;\n    protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n    constructor(baseUrl?: string, instance?: AxiosInstance) {\n\n        super();\n\n        this.instance = instance ? instance : axios.create();\n\n        this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\n\n    }\n\n    getExceliaAgreement(request: ExceliaErRequest , cancelToken?: CancelToken | undefined): Promise<ExceliaAgreementViewModel> {\n        let url_ = this.baseUrl + \"/api/generate-excelia-agreement\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        const content_ = JSON.stringify(request);\n\n        let options_: AxiosRequestConfig = {\n            data: content_,\n            method: \"POST\",\n            url: url_,\n            headers: {\n                \"Content-Type\": \"application/json\",\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processGetExceliaAgreement(_response);\n        });\n    }\n\n    protected processGetExceliaAgreement(response: AxiosResponse): Promise<ExceliaAgreementViewModel> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<ExceliaAgreementViewModel>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<ExceliaAgreementViewModel>(null as any);\n    }\n\n    saveExceliaAgreement(form: SendToExceliaFormModel , cancelToken?: CancelToken | undefined): Promise<boolean> {\n        let url_ = this.baseUrl + \"/api/save-excelia-agreement\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        const content_ = JSON.stringify(form);\n\n        let options_: AxiosRequestConfig = {\n            data: content_,\n            method: \"POST\",\n            url: url_,\n            headers: {\n                \"Content-Type\": \"application/json\",\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processSaveExceliaAgreement(_response);\n        });\n    }\n\n    protected processSaveExceliaAgreement(response: AxiosResponse): Promise<boolean> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<boolean>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<boolean>(null as any);\n    }\n}\n\nexport class TranslationClient extends ApiClientBase {\n    private instance: AxiosInstance;\n    private baseUrl: string;\n    protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n    constructor(baseUrl?: string, instance?: AxiosInstance) {\n\n        super();\n\n        this.instance = instance ? instance : axios.create();\n\n        this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\n\n    }\n\n    lookupRomanTranslation(name: string , cancelToken?: CancelToken | undefined): Promise<string> {\n        let url_ = this.baseUrl + \"/api/kana-look-up/{name}\";\n        if (name === undefined || name === null)\n            throw new Error(\"The parameter 'name' must be defined.\");\n        url_ = url_.replace(\"{name}\", encodeURIComponent(\"\" + name));\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            method: \"GET\",\n            url: url_,\n            headers: {\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processLookupRomanTranslation(_response);\n        });\n    }\n\n    protected processLookupRomanTranslation(response: AxiosResponse): Promise<string> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<string>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<string>(null as any);\n    }\n}\n\nexport class SocialLinkClient extends ApiClientBase {\n    private instance: AxiosInstance;\n    private baseUrl: string;\n    protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n    constructor(baseUrl?: string, instance?: AxiosInstance) {\n\n        super();\n\n        this.instance = instance ? instance : axios.create();\n\n        this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\n\n    }\n\n    startCreatorModeEnrollment(form: StartCreatorModeForm , cancelToken?: CancelToken | undefined): Promise<EnrollmentStatusViewModel> {\n        let url_ = this.baseUrl + \"/api/social-links/creator-mode\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        const content_ = JSON.stringify(form);\n\n        let options_: AxiosRequestConfig = {\n            data: content_,\n            method: \"POST\",\n            url: url_,\n            headers: {\n                \"Content-Type\": \"application/json\",\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processStartCreatorModeEnrollment(_response);\n        });\n    }\n\n    protected processStartCreatorModeEnrollment(response: AxiosResponse): Promise<EnrollmentStatusViewModel> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<EnrollmentStatusViewModel>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<EnrollmentStatusViewModel>(null as any);\n    }\n\n    getSocialLinkConfig(countryIso: string | undefined , cancelToken?: CancelToken | undefined): Promise<SocialLinkConfigViewModel> {\n        let url_ = this.baseUrl + \"/api/social-links/config?\";\n        if (countryIso === null)\n            throw new Error(\"The parameter 'countryIso' cannot be null.\");\n        else if (countryIso !== undefined)\n            url_ += \"countryIso=\" + encodeURIComponent(\"\" + countryIso) + \"&\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            method: \"GET\",\n            url: url_,\n            headers: {\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processGetSocialLinkConfig(_response);\n        });\n    }\n\n    protected processGetSocialLinkConfig(response: AxiosResponse): Promise<SocialLinkConfigViewModel> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<SocialLinkConfigViewModel>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<SocialLinkConfigViewModel>(null as any);\n    }\n\n    validateSocialLinkNameIsUnique(name: string , cancelToken?: CancelToken | undefined): Promise<boolean> {\n        let url_ = this.baseUrl + \"/api/social-links/validate-name/{name}\";\n        if (name === undefined || name === null)\n            throw new Error(\"The parameter 'name' must be defined.\");\n        url_ = url_.replace(\"{name}\", encodeURIComponent(\"\" + name));\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            method: \"POST\",\n            url: url_,\n            headers: {\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processValidateSocialLinkNameIsUnique(_response);\n        });\n    }\n\n    protected processValidateSocialLinkNameIsUnique(response: AxiosResponse): Promise<boolean> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<boolean>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<boolean>(null as any);\n    }\n\n    getSocialLinks(searchText: string | undefined, includingArchiveLinks: boolean | undefined , cancelToken?: CancelToken | undefined): Promise<SocialLinkViewModel[]> {\n        let url_ = this.baseUrl + \"/api/social-links?\";\n        if (searchText === null)\n            throw new Error(\"The parameter 'searchText' cannot be null.\");\n        else if (searchText !== undefined)\n            url_ += \"searchText=\" + encodeURIComponent(\"\" + searchText) + \"&\";\n        if (includingArchiveLinks === null)\n            throw new Error(\"The parameter 'includingArchiveLinks' cannot be null.\");\n        else if (includingArchiveLinks !== undefined)\n            url_ += \"includingArchiveLinks=\" + encodeURIComponent(\"\" + includingArchiveLinks) + \"&\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            method: \"GET\",\n            url: url_,\n            headers: {\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processGetSocialLinks(_response);\n        });\n    }\n\n    protected processGetSocialLinks(response: AxiosResponse): Promise<SocialLinkViewModel[]> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<SocialLinkViewModel[]>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<SocialLinkViewModel[]>(null as any);\n    }\n\n    createSocialLink(  cancelToken?: CancelToken | undefined): Promise<SocialLinkViewModel> {\n        let url_ = this.baseUrl + \"/api/social-links\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            method: \"POST\",\n            url: url_,\n            headers: {\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processCreateSocialLink(_response);\n        });\n    }\n\n    protected processCreateSocialLink(response: AxiosResponse): Promise<SocialLinkViewModel> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<SocialLinkViewModel>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<SocialLinkViewModel>(null as any);\n    }\n\n    createSocialLinkEnrollment(linkId: string , cancelToken?: CancelToken | undefined): Promise<EnrollmentStatusViewModel> {\n        let url_ = this.baseUrl + \"/api/social-links/{linkId}/enrollment-status\";\n        if (linkId === undefined || linkId === null)\n            throw new Error(\"The parameter 'linkId' must be defined.\");\n        url_ = url_.replace(\"{linkId}\", encodeURIComponent(\"\" + linkId));\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            method: \"POST\",\n            url: url_,\n            headers: {\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processCreateSocialLinkEnrollment(_response);\n        });\n    }\n\n    protected processCreateSocialLinkEnrollment(response: AxiosResponse): Promise<EnrollmentStatusViewModel> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<EnrollmentStatusViewModel>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<EnrollmentStatusViewModel>(null as any);\n    }\n\n    updateSocialLink(linkId: string, form: UpdateSocialLinkForm , cancelToken?: CancelToken | undefined): Promise<SocialLinkViewModel> {\n        let url_ = this.baseUrl + \"/api/social-links/{linkId}\";\n        if (linkId === undefined || linkId === null)\n            throw new Error(\"The parameter 'linkId' must be defined.\");\n        url_ = url_.replace(\"{linkId}\", encodeURIComponent(\"\" + linkId));\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        const content_ = JSON.stringify(form);\n\n        let options_: AxiosRequestConfig = {\n            data: content_,\n            method: \"PUT\",\n            url: url_,\n            headers: {\n                \"Content-Type\": \"application/json\",\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processUpdateSocialLink(_response);\n        });\n    }\n\n    protected processUpdateSocialLink(response: AxiosResponse): Promise<SocialLinkViewModel> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<SocialLinkViewModel>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<SocialLinkViewModel>(null as any);\n    }\n\n    addSocialLinkShareStatus(linkId: string, status: ShareStatus , cancelToken?: CancelToken | undefined): Promise<void> {\n        let url_ = this.baseUrl + \"/api/social-links/{linkId}/share-statuses/{status}\";\n        if (linkId === undefined || linkId === null)\n            throw new Error(\"The parameter 'linkId' must be defined.\");\n        url_ = url_.replace(\"{linkId}\", encodeURIComponent(\"\" + linkId));\n        if (status === undefined || status === null)\n            throw new Error(\"The parameter 'status' must be defined.\");\n        url_ = url_.replace(\"{status}\", encodeURIComponent(\"\" + status));\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            method: \"POST\",\n            url: url_,\n            headers: {\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processAddSocialLinkShareStatus(_response);\n        });\n    }\n\n    protected processAddSocialLinkShareStatus(response: AxiosResponse): Promise<void> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            return Promise.resolve<void>(null as any);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<void>(null as any);\n    }\n\n    getSocialLinkItems(linkId: string , cancelToken?: CancelToken | undefined): Promise<SocialLinkItemsViewModel> {\n        let url_ = this.baseUrl + \"/api/social-links/{linkId}/items\";\n        if (linkId === undefined || linkId === null)\n            throw new Error(\"The parameter 'linkId' must be defined.\");\n        url_ = url_.replace(\"{linkId}\", encodeURIComponent(\"\" + linkId));\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            method: \"GET\",\n            url: url_,\n            headers: {\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processGetSocialLinkItems(_response);\n        });\n    }\n\n    protected processGetSocialLinkItems(response: AxiosResponse): Promise<SocialLinkItemsViewModel> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<SocialLinkItemsViewModel>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<SocialLinkItemsViewModel>(null as any);\n    }\n}\n\nexport class SocialLinkRedirectClient extends ApiClientBase {\n    private instance: AxiosInstance;\n    private baseUrl: string;\n    protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n    constructor(baseUrl?: string, instance?: AxiosInstance) {\n\n        super();\n\n        this.instance = instance ? instance : axios.create();\n\n        this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\n\n    }\n\n    startSocialLinkEnrollment(templateId: string , cancelToken?: CancelToken | undefined): Promise<FileResponse | null> {\n        let url_ = this.baseUrl + \"/social-links/{templateId}\";\n        if (templateId === undefined || templateId === null)\n            throw new Error(\"The parameter 'templateId' must be defined.\");\n        url_ = url_.replace(\"{templateId}\", encodeURIComponent(\"\" + templateId));\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            responseType: \"blob\",\n            method: \"GET\",\n            url: url_,\n            headers: {\n                \"Accept\": \"application/octet-stream\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processStartSocialLinkEnrollment(_response);\n        });\n    }\n\n    protected processStartSocialLinkEnrollment(response: AxiosResponse): Promise<FileResponse | null> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200 || status === 206) {\n            const contentDisposition = response.headers ? response.headers[\"content-disposition\"] : undefined;\n            let fileNameMatch = contentDisposition ? /filename\\*=(?:(\\\\?['\"])(.*?)\\1|(?:[^\\s]+'.*?')?([^;\\n]*))/g.exec(contentDisposition) : undefined;\n            let fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[3] || fileNameMatch[2] : undefined;\n            if (fileName) {\n                fileName = decodeURIComponent(fileName);\n            } else {\n                fileNameMatch = contentDisposition ? /filename=\"?([^\"]*?)\"?(;|$)/g.exec(contentDisposition) : undefined;\n                fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[1] : undefined;\n            }\n            return Promise.resolve({ fileName: fileName, status: status, data: new Blob([response.data], { type: response.headers[\"content-type\"] }), headers: _headers });\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<FileResponse | null>(null as any);\n    }\n}\n\nexport class AvailableShippingMethodsClient extends ApiClientBase {\n    private instance: AxiosInstance;\n    private baseUrl: string;\n    protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n    constructor(baseUrl?: string, instance?: AxiosInstance) {\n\n        super();\n\n        this.instance = instance ? instance : axios.create();\n\n        this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\n\n    }\n\n    getShippingMethods(address: AddressEntryForm , cancelToken?: CancelToken | undefined): Promise<ShippingMethodsViewModel> {\n        let url_ = this.baseUrl + \"/api/shipping-methods\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        const content_ = JSON.stringify(address);\n\n        let options_: AxiosRequestConfig = {\n            data: content_,\n            method: \"POST\",\n            url: url_,\n            headers: {\n                \"Content-Type\": \"application/json\",\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processGetShippingMethods(_response);\n        });\n    }\n\n    protected processGetShippingMethods(response: AxiosResponse): Promise<ShippingMethodsViewModel> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<ShippingMethodsViewModel>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<ShippingMethodsViewModel>(null as any);\n    }\n\n    getAusPostConfiguration(  cancelToken?: CancelToken | undefined): Promise<AusPostConfigurationModel> {\n        let url_ = this.baseUrl + \"/api/aus-post-configuration\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            method: \"GET\",\n            url: url_,\n            headers: {\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processGetAusPostConfiguration(_response);\n        });\n    }\n\n    protected processGetAusPostConfiguration(response: AxiosResponse): Promise<AusPostConfigurationModel> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<AusPostConfigurationModel>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<AusPostConfigurationModel>(null as any);\n    }\n}\n\nexport class ShippingCountryChangeClient extends ApiClientBase {\n    private instance: AxiosInstance;\n    private baseUrl: string;\n    protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n    constructor(baseUrl?: string, instance?: AxiosInstance) {\n\n        super();\n\n        this.instance = instance ? instance : axios.create();\n\n        this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\n\n    }\n\n    getViewModelFor(isoCode: string , cancelToken?: CancelToken | undefined): Promise<AddressEntryViewModel> {\n        let url_ = this.baseUrl + \"/api/address-entry/{isoCode}\";\n        if (isoCode === undefined || isoCode === null)\n            throw new Error(\"The parameter 'isoCode' must be defined.\");\n        url_ = url_.replace(\"{isoCode}\", encodeURIComponent(\"\" + isoCode));\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            method: \"GET\",\n            url: url_,\n            headers: {\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processGetViewModelFor(_response);\n        });\n    }\n\n    protected processGetViewModelFor(response: AxiosResponse): Promise<AddressEntryViewModel> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<AddressEntryViewModel>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<AddressEntryViewModel>(null as any);\n    }\n}\n\nexport class EnrollmentTransferClient extends ApiClientBase {\n    private instance: AxiosInstance;\n    private baseUrl: string;\n    protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n    constructor(baseUrl?: string, instance?: AxiosInstance) {\n\n        super();\n\n        this.instance = instance ? instance : axios.create();\n\n        this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\n\n    }\n\n    addGuestAccountInfo(customerInformation: CustomerInformationFormModel , cancelToken?: CancelToken | undefined): Promise<void> {\n        let url_ = this.baseUrl + \"/api/transfer/guest-account\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        const content_ = JSON.stringify(customerInformation);\n\n        let options_: AxiosRequestConfig = {\n            data: content_,\n            method: \"POST\",\n            url: url_,\n            headers: {\n                \"Content-Type\": \"application/json\",\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processAddGuestAccountInfo(_response);\n        });\n    }\n\n    protected processAddGuestAccountInfo(response: AxiosResponse): Promise<void> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            return Promise.resolve<void>(null as any);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<void>(null as any);\n    }\n}\n\nexport class ProductInfoClient extends ApiClientBase {\n    private instance: AxiosInstance;\n    private baseUrl: string;\n    protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n    constructor(baseUrl?: string, instance?: AxiosInstance) {\n\n        super();\n\n        this.instance = instance ? instance : axios.create();\n\n        this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\n\n    }\n\n    getViewModel(culture: string, partNumber: string , cancelToken?: CancelToken | undefined): Promise<ProductInfoViewModel> {\n        let url_ = this.baseUrl + \"/api/product-info/{culture}/{partNumber}\";\n        if (culture === undefined || culture === null)\n            throw new Error(\"The parameter 'culture' must be defined.\");\n        url_ = url_.replace(\"{culture}\", encodeURIComponent(\"\" + culture));\n        if (partNumber === undefined || partNumber === null)\n            throw new Error(\"The parameter 'partNumber' must be defined.\");\n        url_ = url_.replace(\"{partNumber}\", encodeURIComponent(\"\" + partNumber));\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            method: \"GET\",\n            url: url_,\n            headers: {\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processGetViewModel(_response);\n        });\n    }\n\n    protected processGetViewModel(response: AxiosResponse): Promise<ProductInfoViewModel> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<ProductInfoViewModel>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<ProductInfoViewModel>(null as any);\n    }\n}\n\nexport class MeoKitClient extends ApiClientBase {\n    private instance: AxiosInstance;\n    private baseUrl: string;\n    protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n    constructor(baseUrl?: string, instance?: AxiosInstance) {\n\n        super();\n\n        this.instance = instance ? instance : axios.create();\n\n        this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\n\n    }\n\n    getViewModel(selectedKitId: number | null | undefined , cancelToken?: CancelToken | undefined): Promise<MeoCartItemViewModel[]> {\n        let url_ = this.baseUrl + \"/api/update-meo-cart?\";\n        if (selectedKitId !== undefined && selectedKitId !== null)\n            url_ += \"selectedKitId=\" + encodeURIComponent(\"\" + selectedKitId) + \"&\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            method: \"PUT\",\n            url: url_,\n            headers: {\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processGetViewModel(_response);\n        });\n    }\n\n    protected processGetViewModel(response: AxiosResponse): Promise<MeoCartItemViewModel[]> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<MeoCartItemViewModel[]>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<MeoCartItemViewModel[]>(null as any);\n    }\n\n    getEnrollmentOrderChoices(  cancelToken?: CancelToken | undefined): Promise<EnrollmentOrderChoices> {\n        let url_ = this.baseUrl + \"/api/read-enrollment-order-choices\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            method: \"GET\",\n            url: url_,\n            headers: {\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processGetEnrollmentOrderChoices(_response);\n        });\n    }\n\n    protected processGetEnrollmentOrderChoices(response: AxiosResponse): Promise<EnrollmentOrderChoices> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<EnrollmentOrderChoices>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<EnrollmentOrderChoices>(null as any);\n    }\n}\n\nexport class CustomizationRedirectClient extends ApiClientBase {\n    private instance: AxiosInstance;\n    private baseUrl: string;\n    protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n    constructor(baseUrl?: string, instance?: AxiosInstance) {\n\n        super();\n\n        this.instance = instance ? instance : axios.create();\n\n        this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\n\n    }\n\n    getViewModelForCurrentOrderSelections(  cancelToken?: CancelToken | undefined): Promise<AddProductsRedirectViewModel> {\n        let url_ = this.baseUrl + \"/api/order-customization-redirect-url\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            method: \"GET\",\n            url: url_,\n            headers: {\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processGetViewModelForCurrentOrderSelections(_response);\n        });\n    }\n\n    protected processGetViewModelForCurrentOrderSelections(response: AxiosResponse): Promise<AddProductsRedirectViewModel> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<AddProductsRedirectViewModel>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<AddProductsRedirectViewModel>(null as any);\n    }\n\n    getViewModelForErOrderSelections(  cancelToken?: CancelToken | undefined): Promise<AddProductsRedirectViewModel> {\n        let url_ = this.baseUrl + \"/api/er-customization-redirect-url\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            method: \"GET\",\n            url: url_,\n            headers: {\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processGetViewModelForErOrderSelections(_response);\n        });\n    }\n\n    protected processGetViewModelForErOrderSelections(response: AxiosResponse): Promise<AddProductsRedirectViewModel> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<AddProductsRedirectViewModel>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<AddProductsRedirectViewModel>(null as any);\n    }\n\n    getViewModelForErPskOrderSelections(  cancelToken?: CancelToken | undefined): Promise<AddProductsRedirectViewModel> {\n        let url_ = this.baseUrl + \"/api/er-customization-with-psk-redirect-url\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            method: \"GET\",\n            url: url_,\n            headers: {\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processGetViewModelForErPskOrderSelections(_response);\n        });\n    }\n\n    protected processGetViewModelForErPskOrderSelections(response: AxiosResponse): Promise<AddProductsRedirectViewModel> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<AddProductsRedirectViewModel>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<AddProductsRedirectViewModel>(null as any);\n    }\n}\n\nexport class VoOrderReturnClient extends ApiClientBase {\n    private instance: AxiosInstance;\n    private baseUrl: string;\n    protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n    constructor(baseUrl?: string, instance?: AxiosInstance) {\n\n        super();\n\n        this.instance = instance ? instance : axios.create();\n\n        this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\n\n    }\n\n    submitEnrollmentOrder(form: OrderReturnFormModel , cancelToken?: CancelToken | undefined): Promise<string> {\n        let url_ = this.baseUrl + \"/api/enrollment-order-return\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        const content_ = JSON.stringify(form);\n\n        let options_: AxiosRequestConfig = {\n            data: content_,\n            method: \"POST\",\n            url: url_,\n            headers: {\n                \"Content-Type\": \"application/json\",\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processSubmitEnrollmentOrder(_response);\n        });\n    }\n\n    protected processSubmitEnrollmentOrder(response: AxiosResponse): Promise<string> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<string>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<string>(null as any);\n    }\n}\n\nexport class MissingTranslationClient extends ApiClientBase {\n    private instance: AxiosInstance;\n    private baseUrl: string;\n    protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n    constructor(baseUrl?: string, instance?: AxiosInstance) {\n\n        super();\n\n        this.instance = instance ? instance : axios.create();\n\n        this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\n\n    }\n\n    createMissingTranslation(lang: string, ns: string, translations: { [key: string]: string; } | undefined , cancelToken?: CancelToken | undefined): Promise<FileResponse | null> {\n        let url_ = this.baseUrl + \"/missing-translations/{ns}/{lang}\";\n        if (lang === undefined || lang === null)\n            throw new Error(\"The parameter 'lang' must be defined.\");\n        url_ = url_.replace(\"{lang}\", encodeURIComponent(\"\" + lang));\n        if (ns === undefined || ns === null)\n            throw new Error(\"The parameter 'ns' must be defined.\");\n        url_ = url_.replace(\"{ns}\", encodeURIComponent(\"\" + ns));\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        const content_ = new FormData();\n        if (translations === null || translations === undefined)\n            throw new Error(\"The parameter 'translations' cannot be null.\");\n        else\n            content_.append(\"translations\", JSON.stringify(translations));\n\n        let options_: AxiosRequestConfig = {\n            data: content_,\n            responseType: \"blob\",\n            method: \"POST\",\n            url: url_,\n            headers: {\n                \"Accept\": \"application/octet-stream\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processCreateMissingTranslation(_response);\n        });\n    }\n\n    protected processCreateMissingTranslation(response: AxiosResponse): Promise<FileResponse | null> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200 || status === 206) {\n            const contentDisposition = response.headers ? response.headers[\"content-disposition\"] : undefined;\n            let fileNameMatch = contentDisposition ? /filename\\*=(?:(\\\\?['\"])(.*?)\\1|(?:[^\\s]+'.*?')?([^;\\n]*))/g.exec(contentDisposition) : undefined;\n            let fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[3] || fileNameMatch[2] : undefined;\n            if (fileName) {\n                fileName = decodeURIComponent(fileName);\n            } else {\n                fileNameMatch = contentDisposition ? /filename=\"?([^\"]*?)\"?(;|$)/g.exec(contentDisposition) : undefined;\n                fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[1] : undefined;\n            }\n            return Promise.resolve({ fileName: fileName, status: status, data: new Blob([response.data], { type: response.headers[\"content-type\"] }), headers: _headers });\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<FileResponse | null>(null as any);\n    }\n\n    addToContentful(lang: string, ns: string, values: { [key: string]: string; } , cancelToken?: CancelToken | undefined): Promise<void> {\n        let url_ = this.baseUrl + \"/api/missing-translations/{ns}/{lang}\";\n        if (lang === undefined || lang === null)\n            throw new Error(\"The parameter 'lang' must be defined.\");\n        url_ = url_.replace(\"{lang}\", encodeURIComponent(\"\" + lang));\n        if (ns === undefined || ns === null)\n            throw new Error(\"The parameter 'ns' must be defined.\");\n        url_ = url_.replace(\"{ns}\", encodeURIComponent(\"\" + ns));\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        const content_ = JSON.stringify(values);\n\n        let options_: AxiosRequestConfig = {\n            data: content_,\n            method: \"PUT\",\n            url: url_,\n            headers: {\n                \"Content-Type\": \"application/json\",\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processAddToContentful(_response);\n        });\n    }\n\n    protected processAddToContentful(response: AxiosResponse): Promise<void> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            return Promise.resolve<void>(null as any);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<void>(null as any);\n    }\n\n    moveTranslationContentful(form: CopyTranslationsToNamespaceForm , cancelToken?: CancelToken | undefined): Promise<void> {\n        let url_ = this.baseUrl + \"/api/missing-translations/copy-translation\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        const content_ = JSON.stringify(form);\n\n        let options_: AxiosRequestConfig = {\n            data: content_,\n            method: \"POST\",\n            url: url_,\n            headers: {\n                \"Content-Type\": \"application/json\",\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processMoveTranslationContentful(_response);\n        });\n    }\n\n    protected processMoveTranslationContentful(response: AxiosResponse): Promise<void> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            return Promise.resolve<void>(null as any);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<void>(null as any);\n    }\n\n    getMissingTranslations(  cancelToken?: CancelToken | undefined): Promise<MissingTranslationsViewModel> {\n        let url_ = this.baseUrl + \"/missing-translations\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            method: \"GET\",\n            url: url_,\n            headers: {\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processGetMissingTranslations(_response);\n        });\n    }\n\n    protected processGetMissingTranslations(response: AxiosResponse): Promise<MissingTranslationsViewModel> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<MissingTranslationsViewModel>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<MissingTranslationsViewModel>(null as any);\n    }\n}\n\nexport class GeolocationClient extends ApiClientBase {\n    private instance: AxiosInstance;\n    private baseUrl: string;\n    protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n    constructor(baseUrl?: string, instance?: AxiosInstance) {\n\n        super();\n\n        this.instance = instance ? instance : axios.create();\n\n        this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\n\n    }\n\n    getViewModel(countryIsoCode: string, postalCode: string , cancelToken?: CancelToken | undefined): Promise<LatamAddressViewModel> {\n        let url_ = this.baseUrl + \"/api/latam-address/{countryIsoCode}/{postalCode}\";\n        if (countryIsoCode === undefined || countryIsoCode === null)\n            throw new Error(\"The parameter 'countryIsoCode' must be defined.\");\n        url_ = url_.replace(\"{countryIsoCode}\", encodeURIComponent(\"\" + countryIsoCode));\n        if (postalCode === undefined || postalCode === null)\n            throw new Error(\"The parameter 'postalCode' must be defined.\");\n        url_ = url_.replace(\"{postalCode}\", encodeURIComponent(\"\" + postalCode));\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            method: \"GET\",\n            url: url_,\n            headers: {\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processGetViewModel(_response);\n        });\n    }\n\n    protected processGetViewModel(response: AxiosResponse): Promise<LatamAddressViewModel> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<LatamAddressViewModel>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<LatamAddressViewModel>(null as any);\n    }\n\n    getAddressInfoFromJapanesePostalCode(postalCode: string , cancelToken?: CancelToken | undefined): Promise<JapanAddressLookupViewModel> {\n        let url_ = this.baseUrl + \"/api/zip-to-address-japan/{postalCode}\";\n        if (postalCode === undefined || postalCode === null)\n            throw new Error(\"The parameter 'postalCode' must be defined.\");\n        url_ = url_.replace(\"{postalCode}\", encodeURIComponent(\"\" + postalCode));\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            method: \"GET\",\n            url: url_,\n            headers: {\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processGetAddressInfoFromJapanesePostalCode(_response);\n        });\n    }\n\n    protected processGetAddressInfoFromJapanesePostalCode(response: AxiosResponse): Promise<JapanAddressLookupViewModel> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<JapanAddressLookupViewModel>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<JapanAddressLookupViewModel>(null as any);\n    }\n}\n\nexport class CmsFooterRepositoryClient extends ApiClientBase {\n    private instance: AxiosInstance;\n    private baseUrl: string;\n    protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n    constructor(baseUrl?: string, instance?: AxiosInstance) {\n\n        super();\n\n        this.instance = instance ? instance : axios.create();\n\n        this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\n\n    }\n\n    getCmsFooter(locale: string , cancelToken?: CancelToken | undefined): Promise<CmsFooterViewModel> {\n        let url_ = this.baseUrl + \"/api/cmsfooter/{locale}\";\n        if (locale === undefined || locale === null)\n            throw new Error(\"The parameter 'locale' must be defined.\");\n        url_ = url_.replace(\"{locale}\", encodeURIComponent(\"\" + locale));\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            method: \"GET\",\n            url: url_,\n            headers: {\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processGetCmsFooter(_response);\n        });\n    }\n\n    protected processGetCmsFooter(response: AxiosResponse): Promise<CmsFooterViewModel> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<CmsFooterViewModel>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<CmsFooterViewModel>(null as any);\n    }\n}\n\nexport class StepModulesClient extends ApiClientBase {\n    private instance: AxiosInstance;\n    private baseUrl: string;\n    protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n    constructor(baseUrl?: string, instance?: AxiosInstance) {\n\n        super();\n\n        this.instance = instance ? instance : axios.create();\n\n        this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\n\n    }\n\n    getViewModels(stepId: number, module: number | null | undefined , cancelToken?: CancelToken | undefined): Promise<StepModulesViewModel> {\n        let url_ = this.baseUrl + \"/api/steps/{stepId}?\";\n        if (stepId === undefined || stepId === null)\n            throw new Error(\"The parameter 'stepId' must be defined.\");\n        url_ = url_.replace(\"{stepId}\", encodeURIComponent(\"\" + stepId));\n        if (module !== undefined && module !== null)\n            url_ += \"module=\" + encodeURIComponent(\"\" + module) + \"&\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            method: \"GET\",\n            url: url_,\n            headers: {\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processGetViewModels(_response);\n        });\n    }\n\n    protected processGetViewModels(response: AxiosResponse): Promise<StepModulesViewModel> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<StepModulesViewModel>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<StepModulesViewModel>(null as any);\n    }\n\n    saveModuleData(form: StepModulesFormModel , cancelToken?: CancelToken | undefined): Promise<EnrollmentModules[]> {\n        let url_ = this.baseUrl + \"/api/steps/save\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        const content_ = JSON.stringify(form);\n\n        let options_: AxiosRequestConfig = {\n            data: content_,\n            method: \"POST\",\n            url: url_,\n            headers: {\n                \"Content-Type\": \"application/json\",\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processSaveModuleData(_response);\n        });\n    }\n\n    protected processSaveModuleData(response: AxiosResponse): Promise<EnrollmentModules[]> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<EnrollmentModules[]>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<EnrollmentModules[]>(null as any);\n    }\n}\n\nexport class EnrollmentProcessClient extends ApiClientBase {\n    private instance: AxiosInstance;\n    private baseUrl: string;\n    protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n    constructor(baseUrl?: string, instance?: AxiosInstance) {\n\n        super();\n\n        this.instance = instance ? instance : axios.create();\n\n        this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\n\n    }\n\n    getEnrollmentConfigViewModel(storeId: number, tag: string | undefined , cancelToken?: CancelToken | undefined): Promise<EnrollmentConfigViewModel> {\n        let url_ = this.baseUrl + \"/api/enrollment-process/store/{storeId}?\";\n        if (storeId === undefined || storeId === null)\n            throw new Error(\"The parameter 'storeId' must be defined.\");\n        url_ = url_.replace(\"{storeId}\", encodeURIComponent(\"\" + storeId));\n        if (tag === null)\n            throw new Error(\"The parameter 'tag' cannot be null.\");\n        else if (tag !== undefined)\n            url_ += \"tag=\" + encodeURIComponent(\"\" + tag) + \"&\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            method: \"GET\",\n            url: url_,\n            headers: {\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processGetEnrollmentConfigViewModel(_response);\n        });\n    }\n\n    protected processGetEnrollmentConfigViewModel(response: AxiosResponse): Promise<EnrollmentConfigViewModel> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<EnrollmentConfigViewModel>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<EnrollmentConfigViewModel>(null as any);\n    }\n}\n\nexport class SponsorEnrollerClient extends ApiClientBase {\n    private instance: AxiosInstance;\n    private baseUrl: string;\n    protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n    constructor(baseUrl?: string, instance?: AxiosInstance) {\n\n        super();\n\n        this.instance = instance ? instance : axios.create();\n\n        this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\n\n    }\n\n    validateSponsorAndEnroller(sponsorId: number | undefined, enrollerId: number | undefined , cancelToken?: CancelToken | undefined): Promise<UplineValidationStatus> {\n        let url_ = this.baseUrl + \"/api/sponsor-enroller-validation?\";\n        if (sponsorId === null)\n            throw new Error(\"The parameter 'sponsorId' cannot be null.\");\n        else if (sponsorId !== undefined)\n            url_ += \"sponsorId=\" + encodeURIComponent(\"\" + sponsorId) + \"&\";\n        if (enrollerId === null)\n            throw new Error(\"The parameter 'enrollerId' cannot be null.\");\n        else if (enrollerId !== undefined)\n            url_ += \"enrollerId=\" + encodeURIComponent(\"\" + enrollerId) + \"&\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            method: \"GET\",\n            url: url_,\n            headers: {\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processValidateSponsorAndEnroller(_response);\n        });\n    }\n\n    protected processValidateSponsorAndEnroller(response: AxiosResponse): Promise<UplineValidationStatus> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<UplineValidationStatus>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<UplineValidationStatus>(null as any);\n    }\n\n    validateGaiyoshomen(gaiyoshomenCode: string | undefined , cancelToken?: CancelToken | undefined): Promise<boolean> {\n        let url_ = this.baseUrl + \"/api/gaiyoshomen-validation?\";\n        if (gaiyoshomenCode === null)\n            throw new Error(\"The parameter 'gaiyoshomenCode' cannot be null.\");\n        else if (gaiyoshomenCode !== undefined)\n            url_ += \"gaiyoshomenCode=\" + encodeURIComponent(\"\" + gaiyoshomenCode) + \"&\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            method: \"GET\",\n            url: url_,\n            headers: {\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processValidateGaiyoshomen(_response);\n        });\n    }\n\n    protected processValidateGaiyoshomen(response: AxiosResponse): Promise<boolean> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<boolean>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<boolean>(null as any);\n    }\n}\n\nexport class EmailCheckClient extends ApiClientBase {\n    private instance: AxiosInstance;\n    private baseUrl: string;\n    protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n    constructor(baseUrl?: string, instance?: AxiosInstance) {\n\n        super();\n\n        this.instance = instance ? instance : axios.create();\n\n        this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\n\n    }\n\n    checkIfEmailIsTaken(form: EmailTakenFormModel , cancelToken?: CancelToken | undefined): Promise<boolean> {\n        let url_ = this.baseUrl + \"/api/account/email-taken\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        const content_ = JSON.stringify(form);\n\n        let options_: AxiosRequestConfig = {\n            data: content_,\n            method: \"POST\",\n            url: url_,\n            headers: {\n                \"Content-Type\": \"application/json\",\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processCheckIfEmailIsTaken(_response);\n        });\n    }\n\n    protected processCheckIfEmailIsTaken(response: AxiosResponse): Promise<boolean> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<boolean>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<boolean>(null as any);\n    }\n}\n\nexport class TaxCheckClient extends ApiClientBase {\n    private instance: AxiosInstance;\n    private baseUrl: string;\n    protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n    constructor(baseUrl?: string, instance?: AxiosInstance) {\n\n        super();\n\n        this.instance = instance ? instance : axios.create();\n\n        this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\n\n    }\n\n    checkIfTaxIdTaken(formModel: TaxIdTakenFormModel , cancelToken?: CancelToken | undefined): Promise<boolean> {\n        let url_ = this.baseUrl + \"/api/account/tax-id-taken\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        const content_ = JSON.stringify(formModel);\n\n        let options_: AxiosRequestConfig = {\n            data: content_,\n            method: \"POST\",\n            url: url_,\n            headers: {\n                \"Content-Type\": \"application/json\",\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processCheckIfTaxIdTaken(_response);\n        });\n    }\n\n    protected processCheckIfTaxIdTaken(response: AxiosResponse): Promise<boolean> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<boolean>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<boolean>(null as any);\n    }\n\n    checkIfGovernmentIdTaken(formModel: GovernmentIdTakenFormModel , cancelToken?: CancelToken | undefined): Promise<boolean> {\n        let url_ = this.baseUrl + \"/api/account/gov-id-taken\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        const content_ = JSON.stringify(formModel);\n\n        let options_: AxiosRequestConfig = {\n            data: content_,\n            method: \"POST\",\n            url: url_,\n            headers: {\n                \"Content-Type\": \"application/json\",\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processCheckIfGovernmentIdTaken(_response);\n        });\n    }\n\n    protected processCheckIfGovernmentIdTaken(response: AxiosResponse): Promise<boolean> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<boolean>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<boolean>(null as any);\n    }\n}\n\nexport class AccountCredentialClient extends ApiClientBase {\n    private instance: AxiosInstance;\n    private baseUrl: string;\n    protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n    constructor(baseUrl?: string, instance?: AxiosInstance) {\n\n        super();\n\n        this.instance = instance ? instance : axios.create();\n\n        this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\n\n    }\n\n    saveAccountCredentials(form: AccountCredentialForm , cancelToken?: CancelToken | undefined): Promise<void> {\n        let url_ = this.baseUrl + \"/api/account/save-creds\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        const content_ = JSON.stringify(form);\n\n        let options_: AxiosRequestConfig = {\n            data: content_,\n            method: \"POST\",\n            url: url_,\n            headers: {\n                \"Content-Type\": \"application/json\",\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processSaveAccountCredentials(_response);\n        });\n    }\n\n    protected processSaveAccountCredentials(response: AxiosResponse): Promise<void> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            return Promise.resolve<void>(null as any);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<void>(null as any);\n    }\n\n    checkUserName(formModel: UserNameTakenFormModel , cancelToken?: CancelToken | undefined): Promise<boolean> {\n        let url_ = this.baseUrl + \"/api/account/verify-username\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        const content_ = JSON.stringify(formModel);\n\n        let options_: AxiosRequestConfig = {\n            data: content_,\n            method: \"POST\",\n            url: url_,\n            headers: {\n                \"Content-Type\": \"application/json\",\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processCheckUserName(_response);\n        });\n    }\n\n    protected processCheckUserName(response: AxiosResponse): Promise<boolean> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<boolean>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<boolean>(null as any);\n    }\n\n    deleteAccountCredentials(  cancelToken?: CancelToken | undefined): Promise<void> {\n        let url_ = this.baseUrl + \"/api/delete-user-credentials\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            method: \"POST\",\n            url: url_,\n            headers: {\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processDeleteAccountCredentials(_response);\n        });\n    }\n\n    protected processDeleteAccountCredentials(response: AxiosResponse): Promise<void> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            return Promise.resolve<void>(null as any);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<void>(null as any);\n    }\n}\n\nexport class EnrollmentStatusClient extends ApiClientBase {\n    private instance: AxiosInstance;\n    private baseUrl: string;\n    protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n    constructor(baseUrl?: string, instance?: AxiosInstance) {\n\n        super();\n\n        this.instance = instance ? instance : axios.create();\n\n        this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\n\n    }\n\n    getStatus(form: EnrollmentStatusFormModel , cancelToken?: CancelToken | undefined): Promise<EnrollmentStatusViewModel> {\n        let url_ = this.baseUrl + \"/api/enrollment-status\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        const content_ = JSON.stringify(form);\n\n        let options_: AxiosRequestConfig = {\n            data: content_,\n            method: \"POST\",\n            url: url_,\n            headers: {\n                \"Content-Type\": \"application/json\",\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processGetStatus(_response);\n        });\n    }\n\n    protected processGetStatus(response: AxiosResponse): Promise<EnrollmentStatusViewModel> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<EnrollmentStatusViewModel>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<EnrollmentStatusViewModel>(null as any);\n    }\n\n    updateLocale(locale: string , cancelToken?: CancelToken | undefined): Promise<FileResponse | null> {\n        let url_ = this.baseUrl + \"/api/enrollment-status/locale/{locale}\";\n        if (locale === undefined || locale === null)\n            throw new Error(\"The parameter 'locale' must be defined.\");\n        url_ = url_.replace(\"{locale}\", encodeURIComponent(\"\" + locale));\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            responseType: \"blob\",\n            method: \"POST\",\n            url: url_,\n            headers: {\n                \"Accept\": \"application/octet-stream\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processUpdateLocale(_response);\n        });\n    }\n\n    protected processUpdateLocale(response: AxiosResponse): Promise<FileResponse | null> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200 || status === 206) {\n            const contentDisposition = response.headers ? response.headers[\"content-disposition\"] : undefined;\n            let fileNameMatch = contentDisposition ? /filename\\*=(?:(\\\\?['\"])(.*?)\\1|(?:[^\\s]+'.*?')?([^;\\n]*))/g.exec(contentDisposition) : undefined;\n            let fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[3] || fileNameMatch[2] : undefined;\n            if (fileName) {\n                fileName = decodeURIComponent(fileName);\n            } else {\n                fileNameMatch = contentDisposition ? /filename=\"?([^\"]*?)\"?(;|$)/g.exec(contentDisposition) : undefined;\n                fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[1] : undefined;\n            }\n            return Promise.resolve({ fileName: fileName, status: status, data: new Blob([response.data], { type: response.headers[\"content-type\"] }), headers: _headers });\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<FileResponse | null>(null as any);\n    }\n}\n\nexport class CancellationClient extends ApiClientBase {\n    private instance: AxiosInstance;\n    private baseUrl: string;\n    protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n    constructor(baseUrl?: string, instance?: AxiosInstance) {\n\n        super();\n\n        this.instance = instance ? instance : axios.create();\n\n        this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\n\n    }\n\n    cancelEnrollment(enrollmentId: string | null | undefined, country: string | undefined, toRoot: boolean | undefined, language: string | undefined, tag: string | undefined , cancelToken?: CancelToken | undefined): Promise<FileResponse | null> {\n        let url_ = this.baseUrl + \"/cancel?\";\n        if (enrollmentId !== undefined && enrollmentId !== null)\n            url_ += \"enrollmentId=\" + encodeURIComponent(\"\" + enrollmentId) + \"&\";\n        if (country === null)\n            throw new Error(\"The parameter 'country' cannot be null.\");\n        else if (country !== undefined)\n            url_ += \"country=\" + encodeURIComponent(\"\" + country) + \"&\";\n        if (toRoot === null)\n            throw new Error(\"The parameter 'toRoot' cannot be null.\");\n        else if (toRoot !== undefined)\n            url_ += \"toRoot=\" + encodeURIComponent(\"\" + toRoot) + \"&\";\n        if (language === null)\n            throw new Error(\"The parameter 'language' cannot be null.\");\n        else if (language !== undefined)\n            url_ += \"language=\" + encodeURIComponent(\"\" + language) + \"&\";\n        if (tag === null)\n            throw new Error(\"The parameter 'tag' cannot be null.\");\n        else if (tag !== undefined)\n            url_ += \"tag=\" + encodeURIComponent(\"\" + tag) + \"&\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            responseType: \"blob\",\n            method: \"GET\",\n            url: url_,\n            headers: {\n                \"Accept\": \"application/octet-stream\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processCancelEnrollment(_response);\n        });\n    }\n\n    protected processCancelEnrollment(response: AxiosResponse): Promise<FileResponse | null> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200 || status === 206) {\n            const contentDisposition = response.headers ? response.headers[\"content-disposition\"] : undefined;\n            let fileNameMatch = contentDisposition ? /filename\\*=(?:(\\\\?['\"])(.*?)\\1|(?:[^\\s]+'.*?')?([^;\\n]*))/g.exec(contentDisposition) : undefined;\n            let fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[3] || fileNameMatch[2] : undefined;\n            if (fileName) {\n                fileName = decodeURIComponent(fileName);\n            } else {\n                fileNameMatch = contentDisposition ? /filename=\"?([^\"]*?)\"?(;|$)/g.exec(contentDisposition) : undefined;\n                fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[1] : undefined;\n            }\n            return Promise.resolve({ fileName: fileName, status: status, data: new Blob([response.data], { type: response.headers[\"content-type\"] }), headers: _headers });\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<FileResponse | null>(null as any);\n    }\n}\n\nexport class CaptchaClient extends ApiClientBase {\n    private instance: AxiosInstance;\n    private baseUrl: string;\n    protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n    constructor(baseUrl?: string, instance?: AxiosInstance) {\n\n        super();\n\n        this.instance = instance ? instance : axios.create();\n\n        this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\n\n    }\n\n    validateToken(captchaForm: CaptchaForm , cancelToken?: CancelToken | undefined): Promise<boolean> {\n        let url_ = this.baseUrl + \"/api/captcha/validate-token\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        const content_ = JSON.stringify(captchaForm);\n\n        let options_: AxiosRequestConfig = {\n            data: content_,\n            method: \"POST\",\n            url: url_,\n            headers: {\n                \"Content-Type\": \"application/json\",\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processValidateToken(_response);\n        });\n    }\n\n    protected processValidateToken(response: AxiosResponse): Promise<boolean> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<boolean>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<boolean>(null as any);\n    }\n}\n\nexport class CacheClient extends ApiClientBase {\n    private instance: AxiosInstance;\n    private baseUrl: string;\n    protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n    constructor(baseUrl?: string, instance?: AxiosInstance) {\n\n        super();\n\n        this.instance = instance ? instance : axios.create();\n\n        this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\n\n    }\n\n    clearCache(  cancelToken?: CancelToken | undefined): Promise<void> {\n        let url_ = this.baseUrl + \"/api/clear-cache\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            method: \"GET\",\n            url: url_,\n            headers: {\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processClearCache(_response);\n        });\n    }\n\n    protected processClearCache(response: AxiosResponse): Promise<void> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            return Promise.resolve<void>(null as any);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<void>(null as any);\n    }\n}\n\nexport class VirtualWalletClient extends ApiClientBase {\n    private instance: AxiosInstance;\n    private baseUrl: string;\n    protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n    constructor(baseUrl?: string, instance?: AxiosInstance) {\n\n        super();\n\n        this.instance = instance ? instance : axios.create();\n\n        this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\n\n    }\n\n    getAuthorizationToken(type: VirtualWalletType , cancelToken?: CancelToken | undefined): Promise<string> {\n        let url_ = this.baseUrl + \"/api/virtual-wallet/auth-token/{type}\";\n        if (type === undefined || type === null)\n            throw new Error(\"The parameter 'type' must be defined.\");\n        url_ = url_.replace(\"{type}\", encodeURIComponent(\"\" + type));\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            method: \"GET\",\n            url: url_,\n            headers: {\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processGetAuthorizationToken(_response);\n        });\n    }\n\n    protected processGetAuthorizationToken(response: AxiosResponse): Promise<string> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<string>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<string>(null as any);\n    }\n\n    savePaymentToken(token: string , cancelToken?: CancelToken | undefined): Promise<void> {\n        let url_ = this.baseUrl + \"/api/virtual-wallet/payment-token\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        const content_ = JSON.stringify(token);\n\n        let options_: AxiosRequestConfig = {\n            data: content_,\n            method: \"PUT\",\n            url: url_,\n            headers: {\n                \"Content-Type\": \"application/json\",\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processSavePaymentToken(_response);\n        });\n    }\n\n    protected processSavePaymentToken(response: AxiosResponse): Promise<void> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            return Promise.resolve<void>(null as any);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<void>(null as any);\n    }\n\n    savePaymentId(paymentId: string , cancelToken?: CancelToken | undefined): Promise<void> {\n        let url_ = this.baseUrl + \"/api/virtual-wallet/payment-id\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        const content_ = JSON.stringify(paymentId);\n\n        let options_: AxiosRequestConfig = {\n            data: content_,\n            method: \"PUT\",\n            url: url_,\n            headers: {\n                \"Content-Type\": \"application/json\",\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processSavePaymentId(_response);\n        });\n    }\n\n    protected processSavePaymentId(response: AxiosResponse): Promise<void> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            return Promise.resolve<void>(null as any);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<void>(null as any);\n    }\n\n    addVirtualWallet(type: VirtualWalletType, identifier: string , cancelToken?: CancelToken | undefined): Promise<void> {\n        let url_ = this.baseUrl + \"/api/virtual-wallet/payment-methods/{type}\";\n        if (type === undefined || type === null)\n            throw new Error(\"The parameter 'type' must be defined.\");\n        url_ = url_.replace(\"{type}\", encodeURIComponent(\"\" + type));\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        const content_ = JSON.stringify(identifier);\n\n        let options_: AxiosRequestConfig = {\n            data: content_,\n            method: \"POST\",\n            url: url_,\n            headers: {\n                \"Content-Type\": \"application/json\",\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processAddVirtualWallet(_response);\n        });\n    }\n\n    protected processAddVirtualWallet(response: AxiosResponse): Promise<void> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            return Promise.resolve<void>(null as any);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<void>(null as any);\n    }\n}\n\nexport class PlacetopayClient extends ApiClientBase {\n    private instance: AxiosInstance;\n    private baseUrl: string;\n    protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n    constructor(baseUrl?: string, instance?: AxiosInstance) {\n\n        super();\n\n        this.instance = instance ? instance : axios.create();\n\n        this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\n\n    }\n\n    completeEnrollment(paymentResult: PlaceToPayPaymentResult , cancelToken?: CancelToken | undefined): Promise<PaymentStatusViewModel> {\n        let url_ = this.baseUrl + \"/api/placetopay/complete-enrollment\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        const content_ = JSON.stringify(paymentResult);\n\n        let options_: AxiosRequestConfig = {\n            data: content_,\n            method: \"POST\",\n            url: url_,\n            headers: {\n                \"Content-Type\": \"application/json\",\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processCompleteEnrollment(_response);\n        });\n    }\n\n    protected processCompleteEnrollment(response: AxiosResponse): Promise<PaymentStatusViewModel> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<PaymentStatusViewModel>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<PaymentStatusViewModel>(null as any);\n    }\n}\n\nexport class PayPalClient extends ApiClientBase {\n    private instance: AxiosInstance;\n    private baseUrl: string;\n    protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n    constructor(baseUrl?: string, instance?: AxiosInstance) {\n\n        super();\n\n        this.instance = instance ? instance : axios.create();\n\n        this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\n\n    }\n\n    getExpressCheckoutToken(  cancelToken?: CancelToken | undefined): Promise<string> {\n        let url_ = this.baseUrl + \"/api/paypal/express-checkout-token\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            method: \"GET\",\n            url: url_,\n            headers: {\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processGetExpressCheckoutToken(_response);\n        });\n    }\n\n    protected processGetExpressCheckoutToken(response: AxiosResponse): Promise<string> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<string>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<string>(null as any);\n    }\n\n    addPayPalPayment(formModel: AddPayPalFormModel , cancelToken?: CancelToken | undefined): Promise<string> {\n        let url_ = this.baseUrl + \"/api/paypal/add-payment\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        const content_ = JSON.stringify(formModel);\n\n        let options_: AxiosRequestConfig = {\n            data: content_,\n            method: \"POST\",\n            url: url_,\n            headers: {\n                \"Content-Type\": \"application/json\",\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processAddPayPalPayment(_response);\n        });\n    }\n\n    protected processAddPayPalPayment(response: AxiosResponse): Promise<string> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<string>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<string>(null as any);\n    }\n}\n\nexport class CreditCardClient extends ApiClientBase {\n    private instance: AxiosInstance;\n    private baseUrl: string;\n    protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n    constructor(baseUrl?: string, instance?: AxiosInstance) {\n\n        super();\n\n        this.instance = instance ? instance : axios.create();\n\n        this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\n\n    }\n\n    getTransactionStatus(transactionId: string, paymentMethodIdentity: string | null | undefined , cancelToken?: CancelToken | undefined): Promise<TransactionStatusViewModel> {\n        let url_ = this.baseUrl + \"/api/credit-card/transaction-status/{transactionId}?\";\n        if (transactionId === undefined || transactionId === null)\n            throw new Error(\"The parameter 'transactionId' must be defined.\");\n        url_ = url_.replace(\"{transactionId}\", encodeURIComponent(\"\" + transactionId));\n        if (paymentMethodIdentity !== undefined && paymentMethodIdentity !== null)\n            url_ += \"paymentMethodIdentity=\" + encodeURIComponent(\"\" + paymentMethodIdentity) + \"&\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            method: \"GET\",\n            url: url_,\n            headers: {\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processGetTransactionStatus(_response);\n        });\n    }\n\n    protected processGetTransactionStatus(response: AxiosResponse): Promise<TransactionStatusViewModel> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<TransactionStatusViewModel>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<TransactionStatusViewModel>(null as any);\n    }\n\n    validateCreditCard(creditCartPreValidationForm: CreditCartPreValidationForm , cancelToken?: CancelToken | undefined): Promise<ValidateCreditCardAsyncResponseViewModel> {\n        let url_ = this.baseUrl + \"/api/credit-card/validate-async\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        const content_ = JSON.stringify(creditCartPreValidationForm);\n\n        let options_: AxiosRequestConfig = {\n            data: content_,\n            method: \"POST\",\n            url: url_,\n            headers: {\n                \"Content-Type\": \"application/json\",\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processValidateCreditCard(_response);\n        });\n    }\n\n    protected processValidateCreditCard(response: AxiosResponse): Promise<ValidateCreditCardAsyncResponseViewModel> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<ValidateCreditCardAsyncResponseViewModel>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<ValidateCreditCardAsyncResponseViewModel>(null as any);\n    }\n\n    saveClientJsonValue(values: string , cancelToken?: CancelToken | undefined): Promise<void> {\n        let url_ = this.baseUrl + \"/api/credit-card/client-json-value\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        const content_ = JSON.stringify(values);\n\n        let options_: AxiosRequestConfig = {\n            data: content_,\n            method: \"POST\",\n            url: url_,\n            headers: {\n                \"Content-Type\": \"application/json\",\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processSaveClientJsonValue(_response);\n        });\n    }\n\n    protected processSaveClientJsonValue(response: AxiosResponse): Promise<void> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            return Promise.resolve<void>(null as any);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<void>(null as any);\n    }\n\n    associateCvvWithCreditCard(model: AssociateCvvWithCreditCardFormModel , cancelToken?: CancelToken | undefined): Promise<void> {\n        let url_ = this.baseUrl + \"/api/credit-card/associate-cvv\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        const content_ = JSON.stringify(model);\n\n        let options_: AxiosRequestConfig = {\n            data: content_,\n            method: \"POST\",\n            url: url_,\n            headers: {\n                \"Content-Type\": \"application/json\",\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processAssociateCvvWithCreditCard(_response);\n        });\n    }\n\n    protected processAssociateCvvWithCreditCard(response: AxiosResponse): Promise<void> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            return Promise.resolve<void>(null as any);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<void>(null as any);\n    }\n\n    resolveNextGateway(cardTypeName: string | undefined , cancelToken?: CancelToken | undefined): Promise<PaymentMethodProviderType | null> {\n        let url_ = this.baseUrl + \"/api/credit-card/resolve-next-gateway?\";\n        if (cardTypeName === null)\n            throw new Error(\"The parameter 'cardTypeName' cannot be null.\");\n        else if (cardTypeName !== undefined)\n            url_ += \"cardTypeName=\" + encodeURIComponent(\"\" + cardTypeName) + \"&\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            method: \"GET\",\n            url: url_,\n            headers: {\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processResolveNextGateway(_response);\n        });\n    }\n\n    protected processResolveNextGateway(response: AxiosResponse): Promise<PaymentMethodProviderType | null> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<PaymentMethodProviderType | null>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<PaymentMethodProviderType | null>(null as any);\n    }\n\n    getEncryptionKey(  cancelToken?: CancelToken | undefined): Promise<string> {\n        let url_ = this.baseUrl + \"/api/credit-card/encryption-key\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            method: \"GET\",\n            url: url_,\n            headers: {\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processGetEncryptionKey(_response);\n        });\n    }\n\n    protected processGetEncryptionKey(response: AxiosResponse): Promise<string> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<string>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<string>(null as any);\n    }\n\n    getStripe3DSParams(  cancelToken?: CancelToken | undefined): Promise<Stripe3DSTransactionResponse> {\n        let url_ = this.baseUrl + \"/api/credit-card/stripe/three-d-secure\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            method: \"GET\",\n            url: url_,\n            headers: {\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processGetStripe3DSParams(_response);\n        });\n    }\n\n    protected processGetStripe3DSParams(response: AxiosResponse): Promise<Stripe3DSTransactionResponse> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<Stripe3DSTransactionResponse>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<Stripe3DSTransactionResponse>(null as any);\n    }\n\n    getStripe3DSResult(paymentIntentId: string , cancelToken?: CancelToken | undefined): Promise<Stripe3DSResultResponse> {\n        let url_ = this.baseUrl + \"/api/credit-card/stripe/three-d-secure/{paymentIntentId}\";\n        if (paymentIntentId === undefined || paymentIntentId === null)\n            throw new Error(\"The parameter 'paymentIntentId' must be defined.\");\n        url_ = url_.replace(\"{paymentIntentId}\", encodeURIComponent(\"\" + paymentIntentId));\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            method: \"GET\",\n            url: url_,\n            headers: {\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processGetStripe3DSResult(_response);\n        });\n    }\n\n    protected processGetStripe3DSResult(response: AxiosResponse): Promise<Stripe3DSResultResponse> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<Stripe3DSResultResponse>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<Stripe3DSResultResponse>(null as any);\n    }\n\n    getDoku3DSParams(  cancelToken?: CancelToken | undefined): Promise<ThreeDsCreditCardResponse> {\n        let url_ = this.baseUrl + \"/api/credit-card/doku/three-d-secure\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            method: \"GET\",\n            url: url_,\n            headers: {\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processGetDoku3DSParams(_response);\n        });\n    }\n\n    protected processGetDoku3DSParams(response: AxiosResponse): Promise<ThreeDsCreditCardResponse> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<ThreeDsCreditCardResponse>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<ThreeDsCreditCardResponse>(null as any);\n    }\n\n    getDoku3DSResult(  cancelToken?: CancelToken | undefined): Promise<Get3DSValidationDetailResponse> {\n        let url_ = this.baseUrl + \"/api/credit-card/doku/three-d-secure/result\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            method: \"GET\",\n            url: url_,\n            headers: {\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processGetDoku3DSResult(_response);\n        });\n    }\n\n    protected processGetDoku3DSResult(response: AxiosResponse): Promise<Get3DSValidationDetailResponse> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<Get3DSValidationDetailResponse>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<Get3DSValidationDetailResponse>(null as any);\n    }\n}\n\nexport class InstallmentClient extends ApiClientBase {\n    private instance: AxiosInstance;\n    private baseUrl: string;\n    protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n    constructor(baseUrl?: string, instance?: AxiosInstance) {\n\n        super();\n\n        this.instance = instance ? instance : axios.create();\n\n        this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\n\n    }\n\n    getAvailableInstallments(  cancelToken?: CancelToken | undefined): Promise<PaymentInstallment[]> {\n        let url_ = this.baseUrl + \"/api/installments\";\n        url_ = url_.replace(/[?&]$/, \"\");\n\n        let options_: AxiosRequestConfig = {\n            method: \"GET\",\n            url: url_,\n            headers: {\n                \"Accept\": \"application/json\"\n            },\n            cancelToken\n        };\n\n        return this.transformOptions(options_).then(transformedOptions_ => {\n            return this.instance.request(transformedOptions_);\n        }).catch((_error: any) => {\n            if (isAxiosError(_error) && _error.response) {\n                return _error.response;\n            } else {\n                throw _error;\n            }\n        }).then((_response: AxiosResponse) => {\n            return this.processGetAvailableInstallments(_response);\n        });\n    }\n\n    protected processGetAvailableInstallments(response: AxiosResponse): Promise<PaymentInstallment[]> {\n        const status = response.status;\n        let _headers: any = {};\n        if (response.headers && typeof response.headers === \"object\") {\n            for (let k in response.headers) {\n                if (response.headers.hasOwnProperty(k)) {\n                    _headers[k] = response.headers[k];\n                }\n            }\n        }\n        if (status === 200) {\n            const _responseText = response.data;\n            let result200: any = null;\n            let resultData200  = _responseText;\n            result200 = JSON.parse(resultData200);\n            return Promise.resolve<PaymentInstallment[]>(result200);\n\n        } else if (status !== 200 && status !== 204) {\n            const _responseText = response.data;\n            return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n        }\n        return Promise.resolve<PaymentInstallment[]>(null as any);\n    }\n}\n\nexport interface YlAssembliesVersionInfo {\n    name: string;\n    fullVersion: string;\n    version: string;\n    gitHash: string;\n    semVer: string;\n}\n\nexport interface PaymentStatusViewModel {\n    paymentStatus: OrderPaymentStatus;\n    token: AuthenticationToken;\n}\n\nexport enum OrderPaymentStatus {\n    Failed = \"Failed\",\n    Successful = \"Successful\",\n    Pending = \"Pending\",\n    Unknown = \"Unknown\",\n}\n\nexport interface AuthenticationToken {\n    userId: string;\n    userName: string;\n    displayName: string;\n    memberId: number;\n    email: string;\n    isDistributor: boolean;\n    createdDate: string;\n    expireDate: string;\n    rememberMe: boolean;\n    signature: string;\n    country: string;\n    culture: string;\n    claims: string[];\n    customerType: CustomerTypeModel;\n    rank?: number | undefined;\n    profileImageLink: string;\n    spoofingBy: string;\n    storeId: number;\n    version?: number | undefined;\n    stringForSigning: string;\n}\n\nexport interface CustomerTypeModel {\n    id: number;\n    name: string;\n}\n\nexport interface PromoVoucherEntryResponseViewModel {\n    appliedPaymentsReview: AppliedPaymentsReviewViewModel;\n    available: boolean;\n}\n\nexport interface AppliedPaymentsReviewViewModel {\n    paymentDescription: string;\n    amount: number;\n    voucherAmount?: number | undefined;\n    selectedPaymentIdentifier: string;\n    paymentType?: EnrollmentPaymentType | undefined;\n    paymentMethodProviderType?: PaymentMethodProviderType | undefined;\n    creditCardData: CreditCard;\n    installment: PaymentInstallment;\n}\n\nexport enum EnrollmentPaymentType {\n    CreditCard = \"CreditCard\",\n    WireTransfer = \"WireTransfer\",\n    PayPal = \"PayPal\",\n    Sepa = \"Sepa\",\n    Placetopay = \"Placetopay\",\n    Ideal = \"Ideal\",\n    Eft = \"Eft\",\n    Payflex = \"Payflex\",\n    VirtualWalletIdeal = \"VirtualWalletIdeal\",\n    VirtualWalletPaypal = \"VirtualWalletPaypal\",\n    Cod = \"Cod\",\n}\n\nexport enum PaymentMethodProviderType {\n    None = \"None\",\n    SprintAsia = \"SprintAsia\",\n    Doku = \"Doku\",\n    Braintree = \"Braintree\",\n    Orbital = \"Orbital\",\n    CyberSource = \"CyberSource\",\n    Stripe = \"Stripe\",\n    Ideal = \"Ideal\",\n    Paypal = \"Paypal\",\n    ApplePay = \"ApplePay\",\n    Nuvei = \"Nuvei\",\n    SecurePay = \"SecurePay\",\n    Mercadopago = \"Mercadopago\",\n    Sony = \"Sony\",\n}\n\nexport interface CreditCard {\n    displayOnly: boolean;\n    identity?: string | undefined;\n    name: string;\n    obfuscatedNumber: string;\n    cardType: CreditCardType;\n    cvv: string;\n    expirationMonth: number;\n    expirationYear: number;\n    tokenExToken: string;\n}\n\nexport interface CreditCardType {\n    id: number;\n    value: CreditCardTypes;\n    name: string;\n    regex: string;\n}\n\nexport enum CreditCardTypes {\n    NotSet = \"NotSet\",\n    Visa = \"Visa\",\n    MasterCard = \"MasterCard\",\n    AMEX = \"AMEX\",\n    Discover = \"Discover\",\n    DinersClub = \"DinersClub\",\n    JCB = \"JCB\",\n    UnionPay = \"UnionPay\",\n    MIR = \"MIR\",\n    Elo = \"Elo\",\n    Hipercard = \"Hipercard\",\n}\n\nexport interface PaymentInstallment {\n    totalAmount: number;\n    installmentAmount: number;\n    installmentNumber: number;\n    installmentKey: string;\n    installmentPlanId: number;\n}\n\nexport interface EnrollmentConfigResponse {\n    tags: string[];\n}\n\nexport interface CountriesAndLanguagesViewModel {\n    countries: CountryModel[];\n}\n\nexport interface CountryModel {\n    isoCode2: string;\n    isoCode3: string;\n    name: string;\n    defaultCultureId: string;\n    languages: LanguageModel[];\n}\n\nexport interface LanguageModel {\n    localeCode: string;\n    localName: string;\n}\n\nexport interface CountriesViewModel {\n    countries: CountryViewModel[];\n}\n\nexport interface CountryViewModel {\n    isoCode3: string;\n    isoCode2: string;\n    name: string;\n    states: StateViewModel[];\n}\n\nexport interface StateViewModel {\n    id: number;\n    name: string;\n    abbreviation: string;\n}\n\nexport interface LanguageViewModel {\n    localeCode: string;\n    label: string;\n    englishName: string;\n    localName: string;\n}\n\nexport interface SuburbModel {\n    stateAbbreviation: string;\n    name: string;\n    sortOrder: number;\n    postalCode: string;\n}\n\nexport interface CityModel {\n    name: string;\n}\n\nexport interface ZipCodeViewModel {\n    zipCode: string;\n}\n\nexport interface IEnrollmentCompletedViewModel {\n    confirmationPageUrl: string;\n    token: AuthenticationToken;\n    analyticsEventData: CompletionAnalyticsEventData;\n    shouldPoll: boolean;\n}\n\nexport interface CompletionAnalyticsEventData {\n    sponsorId: string;\n    enrollerId: string;\n    memberType: string;\n    paymentType: string;\n    currencyCode: string;\n    orderId: string;\n    revenue: string;\n    tax: string;\n    shipping: string;\n    products: ProductAnalyticsEventData[];\n    hasEr: boolean;\n}\n\nexport interface ProductAnalyticsEventData {\n    name: string;\n    id: string;\n    price: string;\n    quantity: string;\n}\n\nexport interface AddressVerificationResponse {\n    isValid: boolean;\n    originalAddress: AddressEntryChoice;\n    recommendations: AddressEntryChoice[];\n}\n\nexport interface AddressEntryChoice {\n    id: number;\n    addressForm: AddressEntryForm;\n    address: DisplayableAddressViewModel;\n}\n\nexport interface AddressEntryForm {\n    street1: string;\n    houseNumber: string;\n    interiorNumber: string;\n    neighborhood: string;\n    street2: string;\n    street3: string;\n    city: string;\n    stateProv: string;\n    postalCode: string;\n    country: string;\n    phoneNumber: string;\n    recipient: string;\n    isWillCall: boolean;\n    isPickupPoint: boolean;\n    isShiptoShop: boolean;\n    isValidated?: boolean | undefined;\n    locationId?: string | undefined;\n}\n\nexport interface DisplayableAddressViewModel {\n    lines: string[];\n}\n\nexport interface ViesVatVerificationResponse {\n    isValid: boolean;\n    finishedValidation: boolean;\n    name: string;\n    address: string;\n}\n\nexport interface TaxIdEntryForm {\n    taxIdTypeId: number;\n    taxId: string;\n    businessName: string;\n    businessLicenseId: string;\n    mexicoCurpId: string;\n    contextId: string;\n    isGSTRegistered: boolean;\n    businessAddress: AddressEntryForm;\n    noInputProvided: boolean;\n}\n\nexport interface Enrollment2RedirectLogViewModel {\n    url: string;\n    step: string;\n}\n\nexport interface ExceliaAgreementViewModel {\n    document: string;\n    customerLegacyId: number;\n}\n\nexport interface ExceliaErRequest {\n    obfuscatedAccountNumber: string;\n    accountName: string;\n    expireDate: string;\n    commercialAgreementAccepted: boolean;\n}\n\nexport interface SendToExceliaFormModel {\n    creditCardInfo: CreditCardFormModel;\n    needsAcceptAndAuth: boolean;\n    agreementKinds: AgreementKind[];\n    customerLegacyId: number;\n}\n\nexport interface CreditCardFormModel {\n    identity: string;\n    obfuscatedAccountNumber: string;\n    encryptedCardNumber: string;\n    encryptedCvv: string;\n    expMonth: number;\n    expYear: number;\n    nameOnCard: string;\n    validationPaymentTransactionId: string;\n    paymentMethodProviderType?: PaymentMethodProviderType | undefined;\n    clientJsonValue: string;\n}\n\nexport enum AgreementKind {\n    GST = \"GST\",\n    Member = \"Member\",\n    ER = \"ER\",\n    DirectDeposit = \"DirectDeposit\",\n    Boost = \"Boost\",\n    Professional = \"Professional\",\n    PoliciesAndProcedures = \"PoliciesAndProcedures\",\n    ConsentLetter = \"ConsentLetter\",\n    PreferredCustomer = \"PreferredCustomer\",\n    PWS = \"PWS\",\n    Excelia = \"Excelia\",\n    ChinaBusinessBuilder = \"ChinaBusinessBuilder\",\n    PrivacyPolicy = \"PrivacyPolicy\",\n    TaxForms = \"TaxForms\",\n    BrandPartner = \"BrandPartner\",\n}\n\nexport interface EnrollmentStatusViewModel {\n    enrollmentId: string;\n    currentStep: number;\n    locale: string;\n    storeId: number;\n    tag: string;\n    countryIso: string;\n    isShielded: boolean;\n    shieldAccessCode: string;\n    socialLinkHasExpired: boolean;\n    countryIso3?: string | undefined;\n}\n\nexport interface StartCreatorModeForm {\n    linkName: string;\n    enrollerId: number;\n    hideEnrollerLastName: boolean;\n    sponsorId: number;\n    hideSponsorLastName: boolean;\n    locale: string;\n    countryIso: string;\n    creatorLocale: string;\n    countryIso3?: string | undefined;\n}\n\nexport interface SocialLinkConfigViewModel {\n    availableCountries: CountryModel[];\n}\n\nexport interface SocialLinkViewModel {\n    id: string;\n    name: string;\n    category: string;\n    ownerId: number;\n    createdDateUtc: string;\n    shareStatuses: { [key in keyof typeof ShareStatus]?: number; };\n    isArchived: boolean;\n    enrollerId?: number | undefined;\n    enrollerName: string;\n    hideEnrollerLastName: boolean;\n    sponsorId?: number | undefined;\n    sponsorName: string;\n    hideSponsorLastName: boolean;\n    locale: string;\n    countryIso: string;\n    hasTemporaryUnavailableItems: boolean;\n    hasUnavailableItems: boolean;\n}\n\nexport enum ShareStatus {\n    Facebook = \"Facebook\",\n    Twitter = \"Twitter\",\n    Pinterest = \"Pinterest\",\n    LinkedIn = \"LinkedIn\",\n    Clipboard = \"Clipboard\",\n}\n\nexport interface UpdateSocialLinkForm {\n    name: string;\n    category: string;\n    isArchived: boolean;\n}\n\nexport interface SocialLinkItemsViewModel {\n    starterKit: EnrollmentOrderItemViewModel;\n    additionalItems: EnrollmentOrderItemViewModel[];\n    erKit: EnrollmentOrderItemViewModel;\n    erAdditionalItems: EnrollmentOrderItemViewModel[];\n}\n\nexport interface EnrollmentOrderItemViewModel {\n    partNumber: string;\n    legacyId: number;\n    name: string;\n    pointValue: number;\n    priceWithTax: number;\n    imageUrl: string;\n    largeImageUrl: string;\n    description: string;\n    shortDescription: string;\n    howToUse: string;\n    ingredients: string;\n    isPromotional: boolean;\n    inStock: boolean;\n    storeId: number;\n    quantity: number;\n    priceWithTaxTotal: number;\n    itemStatusModel: ItemStatusModel;\n    status: ItemStatusAvailability;\n}\n\nexport interface ItemStatusModel {\n    id: number;\n    name: string;\n}\n\nexport enum ItemStatusAvailability {\n    Available = \"Available\",\n    TemporaryUnavailable = \"TemporaryUnavailable\",\n    Unavailable = \"Unavailable\",\n}\n\nexport interface ShippingMethodsViewModel {\n    shippingMethods: ShippingMethodViewModel[];\n    isInRestrictedArea: boolean;\n    isAddressSet: boolean;\n}\n\nexport interface ShippingMethodViewModel {\n    id: number;\n    name: string;\n    willCallAddress: AddressEntryForm;\n    isWillCall: boolean;\n    isAusPost: boolean;\n    isPickupPoint: boolean;\n    carrierId?: number | undefined;\n    carrierName: string;\n    rate: number;\n    estimatedDelivery: string;\n    deliveryTimes: DeliveryTimeViewModel[];\n}\n\nexport interface DeliveryTimeViewModel {\n    id: number;\n    name: string;\n}\n\nexport interface AusPostConfigurationModel {\n    apiKey: string;\n    apiSecret: string;\n    googleApiKey: string;\n    merchantId: string;\n    emailInputId: string;\n}\n\nexport interface AddressEntryViewModel {\n    form: AddressFormModel;\n    data: AddressEntryForm;\n    fieldRegularExpression: string;\n    postalCodeValidation: ZipCodeValidationViewModel;\n    phoneValidation: PhoneValidationViewModel;\n    storeId: number;\n    shouldValidateAddress: boolean;\n    shouldConfirmAddress: boolean;\n    inEditMode: boolean;\n    isShippingRestricted: boolean;\n    shippingRestrictedStates: string[];\n}\n\nexport interface AddressFormModel {\n    rows: AddressRow[];\n}\n\nexport interface AddressRow {\n    formFields: ComponentField[];\n}\n\nexport interface ComponentField {\n    id: string;\n    fieldType: FieldType;\n    labelKey: string;\n    name: string;\n    inputType: InputType;\n    required: boolean;\n    disabled: boolean;\n    maxLength?: number | undefined;\n    minLength?: number | undefined;\n    size: number;\n    formatRegexForReplace: string;\n}\n\nexport enum FieldType {\n    Input = \"Input\",\n    Select = \"Select\",\n    Radio = \"Radio\",\n    Check = \"Check\",\n    TextArea = \"TextArea\",\n}\n\nexport enum InputType {\n    CheckBox = \"CheckBox\",\n    Hidden = \"Hidden\",\n    Password = \"Password\",\n    Radio = \"Radio\",\n    Text = \"Text\",\n}\n\nexport interface ZipCodeValidationViewModel {\n    allowedCharactersRegEx: string;\n    validRegEx: string;\n}\n\nexport interface PhoneValidationViewModel {\n    phoneRegularExpression: string;\n    internationalMode: boolean;\n}\n\nexport interface CustomerInformationFormModel {\n    enrollmentId: string;\n    legacyId: number;\n    firstName: string;\n    middleName: string;\n    lastName: string;\n    email: string;\n    country: string;\n    language: string;\n    tag: string;\n    dateOfBirth?: string | undefined;\n    gender: number;\n    primaryPhone: string;\n    secondaryPhone: string;\n    storeId: number;\n    username: string;\n    credentials: UserCredentialHash;\n    referrer: ReferrerModel;\n    address: ReceivedAddressModel;\n    receiveEmail: boolean;\n    taxInformation: ReceivedTaxInformation;\n}\n\nexport interface UserCredentialHash {\n    hash: string;\n    salt: string;\n    credentialOptions: CredentialOptions;\n}\n\nexport interface CredentialOptions {\n    hashIterations: number;\n    hashLength: number;\n}\n\nexport interface ReferrerModel {\n    information: string;\n    sponsorId?: number | undefined;\n    enrollerId?: number | undefined;\n    gaiyoshomenValidationCode: string;\n}\n\nexport interface ReceivedAddressModel {\n    street1: string;\n    street2: string;\n    street3: string;\n    city: string;\n    stateProv: string;\n    postalCode: string;\n    countryIsoCode: string;\n    name: string;\n    addressVerificationStatus: AddressVerificationStatus;\n    qasLatitude: string;\n    qasLongitude: string;\n}\n\nexport enum AddressVerificationStatus {\n    Unverified = \"Unverified\",\n    Overridden = \"Overridden\",\n    Verified = \"Verified\",\n}\n\nexport interface ReceivedTaxInformation {\n    taxIdTypeId?: number | undefined;\n    taxId: string;\n    curpId: string;\n    taxBusinessName: string;\n    taxBusinessLicenseId: string;\n    contextId: string;\n    isGSTRegistered: boolean;\n    isOptOut: boolean;\n}\n\nexport interface ProductInfoViewModel {\n    name: string;\n    imageUrl: string;\n    largeImageUrl: string;\n    description: string;\n    shortDescription: string;\n    howToUse: string;\n    ingredients: string;\n    partNumber: string;\n    weight?: number | undefined;\n}\n\nexport interface MeoCartItemViewModel {\n    name: string;\n    partNumber: string;\n    quantity: number;\n    price: number;\n    itemPV: number;\n}\n\nexport interface EnrollmentOrderChoices {\n    enrollmentKitItemId?: number | undefined;\n    erKitItemId?: number | undefined;\n    isEnrollingInEr?: boolean | undefined;\n    erAgreementAccepted?: boolean | undefined;\n    isErAgreementDismissed?: boolean | undefined;\n    usePremiumStarterKitAsErOrder?: boolean | undefined;\n    useFirsErOrderAsTemplate?: boolean | undefined;\n    usePremiumStarterKitAsMeoOrder?: boolean | undefined;\n    customErType?: CustomErType | undefined;\n    customErItems: LineItem[];\n    additionalOrderItems: LineItem[];\n}\n\nexport enum CustomErType {\n    Custom = \"Custom\",\n    Psk = \"Psk\",\n}\n\nexport interface LineItem {\n    id: number;\n    quantity: number;\n    isPromotional: boolean;\n    isStarterKit: boolean;\n}\n\nexport interface AddProductsRedirectViewModel {\n    redirectUrl: string;\n}\n\nexport interface OrderReturnFormModel {\n    enrollmentId: string;\n    items: OrderReturnItem[];\n    isCustomEr: boolean;\n}\n\nexport interface OrderReturnItem {\n    itemId: number;\n    quantity: number;\n    isPromotional: boolean;\n    isStarterKit: boolean;\n}\n\nexport interface CopyTranslationsToNamespaceForm {\n    toNamespace: string;\n    translations: CopyTranslationForm[];\n}\n\nexport interface CopyTranslationForm {\n    fromNamespace: string;\n    fromLabel: string;\n    toLabel: string;\n}\n\nexport interface MissingTranslationsViewModel {\n    languages: MissingLanguageTranslations[];\n}\n\nexport interface MissingLanguageTranslations {\n    language: string;\n    translations: MissingTranslation[];\n}\n\nexport interface MissingTranslation {\n    label: string;\n    value: string;\n    namespace: string;\n    language: string;\n}\n\nexport interface LatamAddressViewModel {\n    state: string;\n    city: string;\n    municipality: string;\n    street: string;\n    neighborhood: string;\n    localityCode: string;\n}\n\nexport interface JapanAddressLookupViewModel {\n    found: boolean;\n    prefecture: string;\n    city: string;\n    street1: string;\n}\n\nexport interface CmsFooterViewModel {\n    topLinks: FooterLink[];\n    mainLinks: FooterLink[];\n    partnerLinks: FooterLink[];\n    socialLinks: FooterLink[];\n    bottomLinks: FooterLink[];\n    contactInfo: FooterContactInfo;\n    copyright: string;\n}\n\nexport interface FooterLink {\n    text: string;\n    url: string;\n    title: string;\n    imageUrl: string;\n    icon: string;\n}\n\nexport interface FooterContactInfo {\n    title: string;\n    address: string;\n    contactOptions: FooterLink[];\n}\n\nexport interface StepModulesViewModel {\n    enrollmentKitSelection: EnrollmentKitSelectionViewModel;\n    erKitSelection: ErKitSelectionViewModel;\n    socialLinkErKitSelection: ErKitSelectionViewModel;\n    classicErKitSelection: ErKitSelectionViewModel;\n    meoKitSelection: MeoCartItemSummaryViewModel;\n    nameEntry: NameEntryViewModel;\n    ageEntry: AgeEntryViewModel;\n    studentEntry: StudentEntryViewModel;\n    governmentEntry: GovernmentEntryViewModel;\n    documentsUploadEntry: DocumentsUploadEntryViewModel;\n    customerTypeEntry: CustomerTypeEntryViewModel;\n    coApplicantEntry: CoApplicantEntryViewModel;\n    addressEntry: AddressEntryViewModel;\n    emailEntry: EmailEntryViewModel;\n    phoneEntry: PhoneEntryViewModel;\n    accountCredentialsEntry: AccountCredentialsEntryViewModel;\n    pinEntry: PinEntryViewModel;\n    taxIdEntry: TaxIdEntryViewModel;\n    sponsorEnrollerEntry: SponsorEnrollerEntryViewModel;\n    memberAgreementEntry: MemberAgreementViewModel;\n    gstAgreementEntry: GstAgreementViewModel;\n    shippingMethodSelection: ShippingMethodSelectionViewModel;\n    shippingAddressEntry: ShippingAddressEntryViewModel;\n    billingEntry: BillingEntryViewModel;\n    orderSummary: OrderSummaryViewModel;\n    membershipReview: MembershipReviewViewModel;\n    referrerReview: ReferrerReviewViewModel;\n    personalInfoReview: PersonalInfoReviewViewModel;\n    shippingAndBillingReview: ShippingAndBillingReviewViewModel;\n    orderTotalReview: OrderTotalReviewViewModel;\n    orderReturnPolicyReview: OrderReturnPolicyViewModel;\n    memberAgreementOrderReview: MemberAgreementOrderReview;\n    appliedPaymentsReview: AppliedPaymentsReviewViewModel;\n    promoVoucherEntry: PromoVoucherEntryViewModel;\n    genderEntry: GenderEntryViewModel;\n    confirmMemberInfoEntry: ConfirmMemberInfoEntryViewModel;\n    taxFormsAgreementEntry: TaxFormsAgreementViewModel;\n    completeEnrollmentProcessor: CompleteEnrollmentViewModel;\n    shareYoungLivingEntry: ShareYoungLivingViewModel;\n    preferencesEntry: PreferencesEntryViewModel;\n    directMarketingAgreementEntry: DirectMarketingAgreementViewModel;\n    privacyPolicyAgreementEntry: PrivacyPolicyAgreementViewModel;\n    exceliaAgreementEntry: ExceliaAgreementViewModel;\n    captchaEntry: CaptchaViewModel;\n    socialLinkEntry: SocialLinkEntryViewModel;\n    socialLinkCreatorEntry: SocialLinkCreatorEntryViewModel;\n    threeDSecureEntry: ThreeDSecureEntryViewModel;\n    completedModules: EnrollmentModules[];\n    activeModuleGroup?: number | undefined;\n    showWelcome: boolean;\n    showShippingMessage: boolean;\n    showCookieWarning: boolean;\n    isGlobalNfr: boolean;\n    showWarning: boolean;\n    showReturnPolicy: boolean;\n    earlyEnrollment: boolean;\n    redirectToStepOne: boolean;\n    allowCompletionWithoutOrder: boolean;\n    showDataProtectionSection: boolean;\n    orderReviewAgreementEnabled: boolean;\n    weightValueForPSKEnabled: boolean;\n    isShipToShopEnabled: boolean;\n    shipToShopUrl: string;\n    useNewSLMode: boolean;\n    isRetailCustomerbenefitsToollTipEnabled: boolean;\n    isFlagPriceEnabled: boolean;\n}\n\nexport interface EnrollmentKitSelectionViewModel {\n    currentTab: number;\n    displayStyle: StarterKitDisplayStyle;\n    tabs: StarterKitTab[];\n    baseKit: StarterKitBaseViewModel;\n    selectedKit?: number | undefined;\n    additionalOrderItems: number[];\n    requireStarterKit: boolean;\n    minimumErPv: number;\n    isMeoEnabled: boolean;\n    minimumEnrollmentOrderPv: number;\n    additionalOrderItemsTotalPv: number;\n    allowToBypassMeoRequirementWithPSK: boolean;\n}\n\nexport enum StarterKitDisplayStyle {\n    Tabbed = \"Tabbed\",\n    Standard = \"Standard\",\n}\n\nexport interface StarterKitTab {\n    id: number;\n    tabType: StarterKitTabType;\n    displayStyle: StarterKitTabStyle;\n    productKits: ProductKit[];\n    show: boolean;\n}\n\nexport enum StarterKitTabType {\n    Popular = \"Popular\",\n    Premium = \"Premium\",\n    Specialty = \"Specialty\",\n    Basic = \"Basic\",\n    Other = \"Other\",\n    Unknown = \"Unknown\",\n}\n\nexport enum StarterKitTabStyle {\n    Classic = \"Classic\",\n    Dynamic = \"Dynamic\",\n    Grid = \"Grid\",\n    Basic = \"Basic\",\n}\n\nexport interface ProductKit {\n    partNumber: string;\n    description: string;\n    largeImageUrl: string;\n    smallImageUrl: string;\n    title: string;\n    listItems: string[];\n    details: string[];\n    itemId: number;\n    price: number;\n    pointValue: number;\n    upgradeComponent: UpgradeComponentInfo;\n}\n\nexport interface UpgradeComponentInfo {\n    partNumber: string;\n    title: string;\n    largeImageUrl: string;\n    smallImageUrl: string;\n}\n\nexport interface StarterKitBaseViewModel {\n    name: string;\n    image: string;\n    imageLarge: string;\n    price: number;\n}\n\nexport interface ErKitSelectionViewModel {\n    enrollEssentialRewards?: boolean | undefined;\n    usePremiumKitAsErOrder?: boolean | undefined;\n    useFirsErOrderAsTemplate?: boolean | undefined;\n    selectedKit?: number | undefined;\n    erKits: ProductKit[];\n    customErType?: CustomErType | undefined;\n    canCustomizeErKit: boolean;\n    canUsePskToAutoEnrollInEr: boolean;\n    canCustomizeErWithPsk: boolean;\n    erUpsellEnabled: boolean;\n    useErSingleQuestion: boolean;\n    isEnableForErAgreement: boolean;\n    erAgreementAccepted?: boolean | undefined;\n    isErAgreementDismissed?: boolean | undefined;\n    scrollText: string;\n    agreementId?: string | undefined;\n    isErAgreementDismissible?: boolean | undefined;\n    text: string;\n}\n\nexport interface MeoCartItemSummaryViewModel {\n    meoCartItems: MeoCartItemViewModel[];\n}\n\nexport interface NameEntryViewModel {\n    form: ModuleFormViewModel;\n    data: NameEntryForm;\n    useTranslation: boolean;\n}\n\nexport interface ModuleFormViewModel {\n    formFields: ComponentField[];\n}\n\nexport interface NameEntryForm {\n    firstName: string;\n    middleName: string;\n    lastName: string;\n    lastNameKana: string;\n    firstNameKana: string;\n    lastNameRomaji: string;\n    firstNameRomaji: string;\n}\n\nexport interface AgeEntryViewModel {\n    birthYear?: number | undefined;\n    birthMonth?: number | undefined;\n    birthDay?: number | undefined;\n    confirmUserAtLeast18: boolean;\n    requiredMinimumAge?: number | undefined;\n    isRequired: boolean;\n    isAgeCheckBoxSelected?: boolean | undefined;\n}\n\nexport interface StudentEntryViewModel {\n    isStudent?: boolean | undefined;\n}\n\nexport interface GovernmentEntryViewModel {\n    governmentId: string;\n}\n\nexport interface DocumentsUploadEntryViewModel {\n    selectedFiles: DocumentInfoModel[];\n    uploadedFiles: DocumentInfoModel[];\n}\n\nexport interface DocumentInfoModel {\n    name: string;\n    originalName: string;\n}\n\nexport interface CustomerTypeEntryViewModel {\n    availableChoices: EnrollmentCustomerType[];\n    currentType: EnrollmentCustomerType;\n    isSwitched: boolean;\n}\n\nexport enum EnrollmentCustomerType {\n    PreferredCustomer = \"PreferredCustomer\",\n    Distributor = \"Distributor\",\n}\n\nexport interface CoApplicantEntryViewModel {\n    form: ModuleFormViewModel;\n    data: CoApplicantEntryForm;\n}\n\nexport interface CoApplicantEntryForm {\n    hasCoApplicant: boolean;\n    firstName: string;\n    middleName: string;\n    lastName: string;\n}\n\nexport interface EmailEntryViewModel {\n    email: string;\n    emailRegularExpression: string;\n}\n\nexport interface PhoneEntryViewModel {\n    phoneRegularExpression: string;\n    form: ModuleFormViewModel;\n    data: PhoneEntryForm;\n    config: PhoneEntryConfigViewModel;\n    internationalMode: boolean;\n}\n\nexport interface PhoneEntryForm {\n    primaryPhone: string;\n    secondaryPhone: string;\n}\n\nexport interface PhoneEntryConfigViewModel {\n    minLength: number;\n    maxLength: number;\n    phonePrefix: string;\n}\n\nexport interface AccountCredentialsEntryViewModel {\n    userName: string;\n    existingAccount: boolean;\n    userNameRegularExpression: string;\n    passwordRegularExpression: string;\n    reservedUserName: string;\n    isUsernameRequired: boolean;\n}\n\nexport interface PinEntryViewModel {\n    pinRegularExpression: string;\n    existingAccount: boolean;\n}\n\nexport interface TaxIdEntryViewModel {\n    taxIdContexts: TaxIdContextViewModel[];\n    selectedContext: string;\n    shouldRequireUserInput: boolean;\n    enteredTaxId: string;\n    businessName: string;\n    isGSTRegistered?: boolean | undefined;\n    selectedTaxIdTypeId?: number | undefined;\n    hasMultipleEntries: boolean;\n    defaultToIndividual: boolean;\n}\n\nexport interface TaxIdContextViewModel {\n    id: string;\n    renderer: TaxIdContextRenderer;\n    context: TaxIdTypeContext;\n    entries: TaxIdEntryOption[];\n    selectedEntryId: number;\n}\n\nexport enum TaxIdContextRenderer {\n    IndividualOptOut = \"IndividualOptOut\",\n    IndividualStandard = \"IndividualStandard\",\n    IndividualMexico = \"IndividualMexico\",\n    IndividualMultiple = \"IndividualMultiple\",\n    BusinessStandard = \"BusinessStandard\",\n    BusinessMexico = \"BusinessMexico\",\n    BusinessMultiple = \"BusinessMultiple\",\n    BusinessEU = \"BusinessEU\",\n    Unknown = \"Unknown\",\n}\n\nexport enum TaxIdTypeContext {\n    Individual = \"Individual\",\n    Business = \"Business\",\n    Unknown = \"Unknown\",\n}\n\nexport interface TaxIdEntryOption {\n    taxIdTypeId: number;\n    individual: IndividualEntryViewModel;\n    business: BusinessEntryViewModel;\n    mexicoCurp: MexicoCurpViewModel;\n}\n\nexport interface IndividualEntryViewModel {\n    regularExpression: string;\n    isRequired: boolean;\n    isUniqueRequired: boolean;\n    taxId: string;\n    taxIdTypeId: number;\n    name: string;\n    mask: string;\n    canCollect: boolean;\n}\n\nexport interface BusinessEntryViewModel {\n    businessName: string;\n    taxId: string;\n    taxIdTypeId: number;\n    businessLicense: string;\n    isRequired: boolean;\n    isUniqueRequired: boolean;\n    showBusinessName: boolean;\n    requireBusinessName: boolean;\n    showBusinessLicenseId: boolean;\n    requireBusinessLicense: boolean;\n    name: string;\n    mask: string;\n    regularExpression: string;\n    canCollect: boolean;\n    isGSTRegistered: boolean;\n    enableViesVerification: boolean;\n}\n\nexport interface MexicoCurpViewModel {\n    individual: IndividualEntryViewModel;\n    curpId: string;\n    curpIdRegExp: string;\n    isRequired: boolean;\n}\n\nexport interface SponsorEnrollerEntryViewModel {\n    enrollerName: string;\n    enrollerFirstName: string;\n    enrollerLastName: string;\n    hideEnrollerLastName: boolean;\n    sponsorName: string;\n    sponsorFirstName: string;\n    sponsorLastName: string;\n    hideSponsorLastName: boolean;\n    sponsorId?: number | undefined;\n    enrollerId?: number | undefined;\n    wasReferred?: boolean | undefined;\n    sponsorEnrollerRequired: boolean;\n    consentedToPlacementProgram: boolean;\n    requirePlacementProgramConsent: boolean;\n    gaiyoshomenCode: string;\n    includeGaiyoshomen: boolean;\n    excludeSponsor: boolean;\n}\n\nexport interface MemberAgreementViewModel {\n    text: string;\n    scrollText: string;\n    previouslyAcceptedThisAgreement: boolean;\n    documents: EnrollmentAgreementDocumentResponse[];\n}\n\nexport interface EnrollmentAgreementDocumentResponse {\n    url: string;\n    description: string;\n}\n\nexport interface GstAgreementViewModel {\n    text: string;\n    agreementAccepted: boolean;\n}\n\nexport interface ShippingMethodSelectionViewModel {\n    isInRestrictedArea: boolean;\n    selectedShippingMethod?: number | undefined;\n    selectedDeliveryTimeId?: number | undefined;\n    hasDangerousGoods: boolean;\n    hasCbdGoods: boolean;\n    shippingMethods: ShippingMethodViewModel[];\n    itemsRestrictedByLocation: ItemRestrictedByLocationViewModel[];\n    noShippingItems: boolean;\n    noShippingMethods: boolean;\n    showDgWarning: boolean;\n}\n\nexport interface ItemRestrictedByLocationViewModel {\n    id: number;\n    name: string;\n}\n\nexport interface ShippingAddressEntryViewModel {\n    sameAsPrimaryAddress: boolean;\n    form: AddressFormModel;\n    fieldRegularExpression: string;\n    postalCodeValidation: ZipCodeValidationViewModel;\n    phoneValidation: PhoneValidationViewModel;\n    storeId: number;\n    shippingAddress: AddressEntryForm;\n    primaryAddress: AddressEntryForm;\n    willCallAddress: AddressEntryForm;\n    pickupPointAddress: AddressEntryForm;\n    ausPostAddress: AddressEntryForm;\n    shipToShopAddress: AddressEntryForm;\n    shouldValidateAddress: boolean;\n    askIfSameAsPrimaryAddress: boolean;\n    triggerCountryChangeAlert: boolean;\n    isShippingCountryRestricted: boolean;\n    shippingRestrictedStates: string[];\n}\n\nexport interface BillingEntryViewModel {\n    selectedPaymentType?: EnrollmentPaymentType | undefined;\n    creditCardData: CreditCard;\n    creditCardConfig: CreditCardConfigViewModel;\n    sepaData: Sepa;\n    wireTransferData: WireTransferFormModel;\n    userEmail: string;\n    userPhoneNumber: string;\n    userShippingAddress: AddressEntryForm;\n    billingAddressEntry: BillingAddressEntryViewModel;\n    availablePaymentMethods: EnrollmentPaymentType[];\n    payPalEnvironment: string;\n    shouldCollectBillingAddress: boolean;\n    installmentEntry: InstallmentEntryViewModel;\n}\n\nexport interface CreditCardConfigViewModel {\n    showRefundWarning: boolean;\n    requireCvv: boolean;\n    cardTypes: CreditCardType[];\n}\n\nexport interface Sepa {\n    displayOnly: boolean;\n    firstNameOnAccount: string;\n    lastNameOnAccount: string;\n    iban: string;\n    agreementAccepted: boolean;\n}\n\nexport interface WireTransferFormModel {\n    bankOption: string;\n}\n\nexport interface BillingAddressEntryViewModel {\n    sameAsShippingAddress: boolean;\n    form: AddressFormModel;\n    fieldRegularExpression: string;\n    postalCodeValidation: ZipCodeValidationViewModel;\n    storeId: number;\n    billingAddress: AddressEntryForm;\n}\n\nexport interface InstallmentEntryViewModel {\n    enabledPaymentTypes: EnrollmentPaymentType[];\n    selectedInstallment?: number | undefined;\n    availableInstallments: PaymentInstallment[];\n}\n\nexport interface OrderSummaryViewModel {\n    externalReferenceId: string;\n    essentialRewardItems: OrderItemViewModel[];\n    enrollmentItems: OrderItemViewModel[];\n    editStepNumber: number;\n    hideEditStepButton: boolean;\n    isMeoEnabled: boolean;\n    usePremiumStarterKitAsErOrder?: boolean | undefined;\n    orderWeight?: number | undefined;\n}\n\nexport interface OrderItemViewModel {\n    name: string;\n    imageUrl: string;\n    partNumber: string;\n    quantity: number;\n    price: number;\n    totalPrice: number;\n    isPromotional: boolean;\n    weight?: number | undefined;\n    totalWeight?: number | undefined;\n}\n\nexport interface MembershipReviewViewModel {\n    customerType: CustomerType;\n    sponsorId?: number | undefined;\n    sponsorName: string;\n    enrollerId?: number | undefined;\n    enrollerName: string;\n    hasReferrer: boolean;\n}\n\nexport enum CustomerType {\n    Unknown = \"Unknown\",\n    WholeSale = \"WholeSale\",\n    Distributor = \"Distributor\",\n    Retail = \"Retail\",\n    Professional = \"Professional\",\n    Employee = \"Employee\",\n}\n\nexport interface ReferrerReviewViewModel {\n    sponsorId?: number | undefined;\n    sponsorName: string;\n    sponsorFirstName: string;\n    sponsorLastName: string;\n    hideSponsorLastName: boolean;\n    enrollerId?: number | undefined;\n    enrollerName: string;\n    enrollerFirstName: string;\n    enrollerLastName: string;\n    hideEnrollerLastName: boolean;\n    editStepNumber: number;\n    hasReferrer: boolean;\n    gaiyoshomenCode: string;\n}\n\nexport interface PersonalInfoReviewViewModel {\n    firstName: string;\n    middleName: string;\n    lastName: string;\n    primaryAddress: DisplayableAddressViewModel;\n    email: string;\n    primaryPhone: string;\n    taxId: string;\n    editStepNumber: number;\n}\n\nexport interface ShippingAndBillingReviewViewModel {\n    shippingMethod: string;\n    shippingAddress: DisplayableAddressViewModel;\n    userShippingAddress: AddressEntryForm;\n    billingAddress: AddressEntryForm;\n    editStepNumber: number;\n}\n\nexport interface OrderTotalReviewViewModel {\n    subtotal: number;\n    shipping: number;\n    taxTotal: number;\n    total: number;\n    pvTotal: number;\n    taxableAmount: number;\n    salesTax: number;\n    shippingTax: number;\n}\n\nexport interface OrderReturnPolicyViewModel {\n    acceptReview: boolean;\n}\n\nexport interface MemberAgreementOrderReview {\n    agreementdirectMarketing: boolean;\n    termsAndConditionsAgreement: boolean;\n    confirmAccuracyAgreement: boolean;\n}\n\nexport interface PromoVoucherEntryViewModel {\n    voucherCode?: number | undefined;\n}\n\nexport interface GenderEntryViewModel {\n    selectedGender?: Gender | undefined;\n    required: boolean;\n    showOnlyBaseGenders: boolean;\n}\n\nexport enum Gender {\n    Male = \"Male\",\n    Female = \"Female\",\n    NonBinary = \"NonBinary\",\n    Unspecified = \"Unspecified\",\n}\n\nexport interface ConfirmMemberInfoEntryViewModel {\n    confirmed?: boolean | undefined;\n}\n\nexport interface TaxFormsAgreementViewModel {\n    text: string;\n    documents: EnrollmentAgreementDocumentResponse[];\n}\n\nexport interface CompleteEnrollmentViewModel {\n    reviewPageStepNumber: number;\n    editPaymentStepNumber: number;\n    requireCvvForPurchase: boolean;\n}\n\nexport interface ShareYoungLivingViewModel {\n    modules: EnrollmentModules[];\n    isSharingYoungLiving?: boolean | undefined;\n}\n\nexport enum EnrollmentModules {\n    EnrollmentKitSelection = \"EnrollmentKitSelection\",\n    ErKitSelection = \"ErKitSelection\",\n    ClassicErKitSelection = \"ClassicErKitSelection\",\n    AddProducts = \"AddProducts\",\n    NameEntry = \"NameEntry\",\n    AgeEntry = \"AgeEntry\",\n    CoApplicantEntry = \"CoApplicantEntry\",\n    AddressEntry = \"AddressEntry\",\n    EmailEntry = \"EmailEntry\",\n    PhoneEntry = \"PhoneEntry\",\n    AccountCredentials = \"AccountCredentials\",\n    PinEntry = \"PinEntry\",\n    TaxIdEntry = \"TaxIdEntry\",\n    SponsorEnroller = \"SponsorEnroller\",\n    ShippingMethodSelection = \"ShippingMethodSelection\",\n    ShippingAddressEntry = \"ShippingAddressEntry\",\n    BillingEntry = \"BillingEntry\",\n    OrderSummary = \"OrderSummary\",\n    MembershipReview = \"MembershipReview\",\n    PersonalInfoReview = \"PersonalInfoReview\",\n    ShippingAndBillingReview = \"ShippingAndBillingReview\",\n    OrderTotalReview = \"OrderTotalReview\",\n    AppliedPaymentsReview = \"AppliedPaymentsReview\",\n    PromoVoucherEntry = \"PromoVoucherEntry\",\n    GenderEntry = \"GenderEntry\",\n    AddressValidator = \"AddressValidator\",\n    MemberAgreement = \"MemberAgreement\",\n    GstAgreement = \"GstAgreement\",\n    TaxFormsAgreement = \"TaxFormsAgreement\",\n    Agreements = \"Agreements\",\n    CompleteEnrollment = \"CompleteEnrollment\",\n    CompleteNoPurchaseEnrollment = \"CompleteNoPurchaseEnrollment\",\n    ShippingNotice = \"ShippingNotice\",\n    ShareYoungLiving = \"ShareYoungLiving\",\n    PreferencesEntry = \"PreferencesEntry\",\n    ReferrerReview = \"ReferrerReview\",\n    ContinueEnrollment = \"ContinueEnrollment\",\n    DirectMarketingAgreementEntry = \"DirectMarketingAgreementEntry\",\n    MeoKitSelection = \"MeoKitSelection\",\n    SocialLinkEntry = \"SocialLinkEntry\",\n    VisitMainsite = \"VisitMainsite\",\n    CreateSocialLinkButton = \"CreateSocialLinkButton\",\n    SocialLinkCreatorBanner = \"SocialLinkCreatorBanner\",\n    SocialLinkErKitSelection = \"SocialLinkErKitSelection\",\n    PrivacyPolicyAgreementEntry = \"PrivacyPolicyAgreementEntry\",\n    ExceliaAgreementEntry = \"ExceliaAgreementEntry\",\n    CaptchaEntry = \"CaptchaEntry\",\n    ErSimplifiedUpsellEntry = \"ErSimplifiedUpsellEntry\",\n    ConfirmMemberInfoEntry = \"ConfirmMemberInfoEntry\",\n    StudentEntry = \"StudentEntry\",\n    CustomerTypeEntry = \"CustomerTypeEntry\",\n    ReviewTopBanner = \"ReviewTopBanner\",\n    GovernmentEntry = \"GovernmentEntry\",\n    DocumentsUploadEntry = \"DocumentsUploadEntry\",\n}\n\nexport interface PreferencesEntryViewModel {\n    receiveEmail: boolean;\n}\n\nexport interface DirectMarketingAgreementViewModel {\n    agreementAccepted: boolean;\n}\n\nexport interface PrivacyPolicyAgreementViewModel {\n    text: string;\n    documents: EnrollmentAgreementDocumentResponse[];\n}\n\nexport interface CaptchaViewModel {\n    publicKey: string;\n}\n\nexport interface SocialLinkEntryViewModel {\n    referrerReview: ReferrerReviewViewModel;\n    enrollmentOrderInfo: EnrollmentOrderInfoViewModel;\n    isMeoMarket: boolean;\n    minimumEnrollmentOrderPv: number;\n}\n\nexport interface EnrollmentOrderInfoViewModel {\n    starterKit: ProductKit;\n    additionalItems: EnrollmentOrderItemViewModel[];\n    unavailableAdditionalItems: EnrollmentOrderItemViewModel[];\n    erKit: ProductKit;\n    erAdditionalItems: EnrollmentOrderItemViewModel[];\n    isEnrollingInEr?: boolean | undefined;\n    minimumErPv: number;\n    starterKitPv: number;\n    additionalItemsTotalPv: number;\n    erAdditionalItemsTotalPv: number;\n    usePremiumStarterKitAsErOrder?: boolean | undefined;\n    usePremiumStarterKitAsMeoOrder?: boolean | undefined;\n    useFirsErOrderAsTemplate?: boolean | undefined;\n    customErType?: CustomErType | undefined;\n}\n\nexport interface SocialLinkCreatorEntryViewModel {\n    authToken: AuthenticationToken;\n    creatorLocale: string;\n    linkName: string;\n    templateId?: string | undefined;\n}\n\nexport interface ThreeDSecureEntryViewModel {\n    config: ThreeDSecureConfigViewModel;\n}\n\nexport interface ThreeDSecureConfigViewModel {\n    addCard3dsEnabled: boolean;\n    braintree3dsEnabled: boolean;\n    cybersource3dsEnabled: boolean;\n    chase3dsEnabled: boolean;\n    doku3dsEnabled: boolean;\n    sony3dsEnabled: boolean;\n    stripe3dsEnabled: boolean;\n    nuvei3dsEnabled: boolean;\n    multiple3dsEnabled: boolean;\n}\n\nexport interface StepModulesFormModel {\n    enrollmentId: string;\n    socialLinkEntry: SocialLinkEntryForm;\n    enrollmentKitSelection: EnrollmentKitSelectionForm;\n    accountCredentialsEntry: AccountCredentialForm;\n    erKitSelection: ErKitSelectionForm;\n    socialLinkErKitSelection: ErKitSelectionForm;\n    classicErKitSelection: ErKitSelectionForm;\n    nameEntry: NameEntryForm;\n    addressEntry: AddressEntryForm;\n    shippingAddressEntry: ShippingAddressEntryForm;\n    coApplicantEntry: CoApplicantEntryForm;\n    billingEntry: BillingEntryForm;\n    phoneEntry: PhoneEntryForm;\n    emailEntry: EmailEntryForm;\n    pinEntry: PinEntryForm;\n    studentEntry: StudentEntryForm;\n    governmentEntry: GovernmentEntryForm;\n    documentsUploadEntry: DocumentsUploadEntryForm;\n    genderEntry: GenderEntryForm;\n    shippingMethodSelection: ShippingMethodSelectionForm;\n    sponsorEnrollerEntry: SponsorEnrollerEntryForm;\n    ageEntry: AgeEntryForm;\n    memberAgreementEntry: MemberAgreementForm;\n    taxIdEntry: TaxIdEntryForm;\n    taxFormsAgreementEntry: TaxFormsAgreementEntryForm;\n    gstAgreementEntry: GstAgreementForm;\n    shareYoungLivingEntry: ShareYoungingLivingForm;\n    preferencesEntry: PreferencesEntryForm;\n    directMarketingAgreementEntry: DirectMarketingAgreementForm;\n    privacyPolicyAgreementEntry: PrivacyPolicyAgreementForm;\n    exceliaAgreementEntry: ExceliaAgreementForm;\n    confirmMemberInfoEntry: ConfirmMemberInfoEntryForm;\n    customerTypeEntry: CustomerTypeEntryForm;\n}\n\nexport interface SocialLinkEntryForm {\n}\n\nexport interface EnrollmentKitSelectionForm {\n    selectedKitId?: number | undefined;\n}\n\nexport interface AccountCredentialForm {\n    userName: string;\n    password: string;\n    isUsernameRequired: boolean;\n}\n\nexport interface ErKitSelectionForm {\n    usePremiumKitAsErOrder: boolean;\n    useFirsErOrderAsTemplate?: boolean | undefined;\n    selectedKitId?: number | undefined;\n    isEnrollingInEr?: boolean | undefined;\n    customErType?: CustomErType | undefined;\n    erAgreementAccepted?: boolean | undefined;\n    isErAgreementDismissed?: boolean | undefined;\n}\n\nexport interface ShippingAddressEntryForm {\n    sameAsPrimaryAddress: boolean;\n    address: AddressEntryForm;\n    isUsingWillCall: boolean;\n    isUsingPickupPoint: boolean;\n    isAusPost: boolean;\n    isShiptoShop: boolean;\n}\n\nexport interface BillingEntryForm {\n    paymentType?: EnrollmentPaymentType | undefined;\n    installment: PaymentInstallment;\n    creditCard: CreditCardFormModel;\n    sepa: SepaFormModel;\n    wireTransfer: WireTransferFormModel;\n    billingAddress: BillingAddressFormModel;\n    requestId: string;\n    deviceData: string;\n}\n\nexport interface SepaFormModel {\n    firstNameOnAccount: string;\n    lastNameOnAccount: string;\n    iban: string;\n    agreementAccepted: boolean;\n}\n\nexport interface BillingAddressFormModel {\n    street1: string;\n    street2: string;\n    street3: string;\n    city: string;\n    country: string;\n    stateProv: string;\n    postalCode: string;\n}\n\nexport interface EmailEntryForm {\n    email: string;\n}\n\nexport interface PinEntryForm {\n    pin: string;\n}\n\nexport interface StudentEntryForm {\n    isStudent?: boolean | undefined;\n}\n\nexport interface GovernmentEntryForm {\n    governmentId: string;\n}\n\nexport interface DocumentsUploadEntryForm {\n    uploadedDocumets: DocumentInfoModel[];\n}\n\nexport interface GenderEntryForm {\n    gender?: Gender | undefined;\n}\n\nexport interface ShippingMethodSelectionForm {\n    shippingId: number;\n    deliveryTimeId?: number | undefined;\n    willCallAddress: AddressEntryForm;\n    ausPostAddress: AddressEntryForm;\n    shipToShopAddress: AddressEntryForm;\n}\n\nexport interface SponsorEnrollerEntryForm {\n    wasReferred: boolean;\n    sponsorId: number;\n    enrollerId: number;\n    consentedToPlacementProgram: boolean;\n    gaiyoshomenCode: string;\n}\n\nexport interface AgeEntryForm {\n    birthdate?: string | undefined;\n    isAgeCheckBoxSelected?: boolean | undefined;\n}\n\nexport interface MemberAgreementForm {\n    agreementAccepted: boolean;\n}\n\nexport interface TaxFormsAgreementEntryForm {\n    isAccepted: boolean;\n}\n\nexport interface GstAgreementForm {\n    agreementAccepted: boolean;\n}\n\nexport interface ShareYoungingLivingForm {\n    isSharingYoungLiving: boolean;\n}\n\nexport interface PreferencesEntryForm {\n    receiveEmail: boolean;\n}\n\nexport interface DirectMarketingAgreementForm {\n    agreementAccepted: boolean;\n}\n\nexport interface PrivacyPolicyAgreementForm {\n    agreementAccepted: boolean;\n}\n\nexport interface ExceliaAgreementForm {\n    agreementAccepted: boolean;\n}\n\nexport interface ConfirmMemberInfoEntryForm {\n    confirmed?: boolean | undefined;\n}\n\nexport interface CustomerTypeEntryForm {\n    selectedType: EnrollmentCustomerType;\n}\n\nexport interface EnrollmentConfigViewModel {\n    currency: CurrencyViewModel;\n    storeId: number;\n    stepStyle: StepStyle;\n    steps: EnrollmentStepViewModel[];\n    languages: StoreLanguage[];\n}\n\nexport interface CurrencyViewModel {\n    code: string;\n    symbol: string;\n}\n\nexport enum StepStyle {\n    Standard = \"Standard\",\n    Accordion = \"Accordion\",\n}\n\nexport interface EnrollmentStepViewModel {\n    label: string;\n    id: number;\n    layout: StepLayout;\n    navigation: StepNavigationViewModel;\n    layoutModuleGroups: LayoutGroupViewModel[];\n}\n\nexport enum StepLayout {\n    Standard = \"Standard\",\n    TwoColumn = \"TwoColumn\",\n    ReviewPage = \"ReviewPage\",\n    Accordion = \"Accordion\",\n    PaymentFailure = \"PaymentFailure\",\n}\n\nexport interface StepNavigationViewModel {\n    nextLabel: string;\n    previousLabel: string;\n    justify: string;\n    nextStepModule?: EnrollmentModules | undefined;\n    previousStepModule?: EnrollmentModules | undefined;\n    hideNavigation: boolean;\n}\n\nexport interface LayoutGroupViewModel {\n    label: string;\n    modules: EnrollmentModules[];\n}\n\nexport interface StoreLanguage {\n    isoCode2: string;\n    locale: string;\n    languageIso: string;\n}\n\nexport interface UplineValidationStatus {\n    enrollerName: string;\n    enrollerFirstName: string;\n    enrollerLastName: string;\n    enrollerStatus: UplineValidationStatuses;\n    sponsorName: string;\n    sponsorFirstName: string;\n    sponsorLastName: string;\n    sponsorStatus: UplineValidationStatuses;\n    isValid: boolean;\n}\n\nexport enum UplineValidationStatuses {\n    NotChecked = \"NotChecked\",\n    Valid = \"Valid\",\n    NotAHuman = \"NotAHuman\",\n    HasntSignedDA = \"HasntSignedDA\",\n    NoTaxId = \"NoTaxId\",\n    NotFound = \"NotFound\",\n    NotInUplineOfSponsor = \"NotInUplineOfSponsor\",\n    Inactive = \"Inactive\",\n    NotValidCustomerType = \"NotValidCustomerType\",\n    NotAllowed = \"NotAllowed\",\n    UnknownCountry = \"UnknownCountry\",\n}\n\nexport interface EmailTakenFormModel {\n    email: string;\n}\n\nexport interface TaxIdTakenFormModel {\n    taxId: string;\n    taxIdTypeId: number;\n}\n\nexport interface GovernmentIdTakenFormModel {\n    taxId: string;\n    isGovernmentId: boolean;\n}\n\nexport interface UserNameTakenFormModel {\n    userName: string;\n}\n\nexport interface EnrollmentStatusFormModel {\n    enrollmentId?: string | undefined;\n    locale: string;\n    tag: string;\n    cartId?: string | undefined;\n    countryIso: string;\n    sponsorId?: number | undefined;\n    enrollerId?: number | undefined;\n    doNotUpdate: boolean;\n    countryIso3: string;\n}\n\nexport interface CaptchaForm {\n    token: string;\n}\n\nexport enum VirtualWalletType {\n    NotSet = \"NotSet\",\n    Paypal = \"Paypal\",\n    Venmo = \"Venmo\",\n    ApplePay = \"ApplePay\",\n    GooglePay = \"GooglePay\",\n    IDeal = \"iDeal\",\n}\n\nexport interface PlaceToPayPaymentResult {\n    alternateOrderId: string;\n    processorTransactionId: string;\n    status: PlaceToPayStatus;\n}\n\nexport enum PlaceToPayStatus {\n    OK = \"OK\",\n    FAILED = \"FAILED\",\n    APPROVED = \"APPROVED\",\n    APPROVED_PARTIAL = \"APPROVED_PARTIAL\",\n    PARTIAL_EXPIRED = \"PARTIAL_EXPIRED\",\n    REJECTED = \"REJECTED\",\n    PENDING = \"PENDING\",\n    PENDING_VALIDATION = \"PENDING_VALIDATION\",\n    REFUNDED = \"REFUNDED\",\n}\n\nexport interface AddPayPalFormModel {\n    token: string;\n}\n\nexport interface TransactionStatusViewModel {\n    id: string;\n    status: ValidateCreditCardAsyncStatus;\n}\n\nexport enum ValidateCreditCardAsyncStatus {\n    Failed = \"Failed\",\n    Pending = \"Pending\",\n    Succeed = \"Succeed\",\n}\n\nexport interface ValidateCreditCardAsyncResponseViewModel {\n    paymentMethodIdentity: string;\n    transactionId: string;\n    validateCreditCardAsyncStatus: ValidateCreditCardAsyncStatus;\n    redirectionUrl: string;\n    paymentMethodProviderType?: PaymentMethodProviderType | undefined;\n}\n\nexport interface CreditCartPreValidationForm {\n    creditCard: CreditCardFormModel;\n    merchantSiteUrl: string;\n    requestId: string;\n}\n\nexport interface AssociateCvvWithCreditCardFormModel {\n    encryptedCvv: string;\n}\n\nexport interface Stripe3DSTransactionResponse {\n    is3DSSupported: boolean;\n    acsUrl: string;\n    returnUrl: string;\n    paymentIntentId: string;\n    status: string;\n    shouldPerform3DS: boolean;\n}\n\nexport interface Stripe3DSResultResponse {\n    status: string;\n    success: boolean;\n}\n\nexport interface ThreeDsCreditCardResponse {\n    responseCode: string;\n    responseMessage: string;\n    cardType: string;\n    acsUrl: string;\n    termUrl: string;\n    paReq: string;\n    md: string;\n    eci: string;\n}\n\nexport interface DokuResponse {\n    success: boolean;\n    requestLog: RequestLog;\n    responseCode: string;\n    bankApprovalCode: string;\n}\n\nexport interface Get3DSValidationDetailResponse extends DokuResponse {\n}\n\nexport interface RequestLog {\n    exception: string;\n    rawResponse: string;\n    rawRequest: string;\n    url: string;\n}\n\nexport interface FileParameter {\n    data: any;\n    fileName: string;\n}\n\nexport interface FileResponse {\n    data: Blob;\n    status: number;\n    fileName?: string;\n    headers?: { [name: string]: any };\n}\n\nexport class ApiException extends Error {\n    message: string;\n    status: number;\n    response: string;\n    headers: { [key: string]: any; };\n    result: any;\n\n    constructor(message: string, status: number, response: string, headers: { [key: string]: any; }, result: any) {\n        super();\n\n        this.message = message;\n        this.status = status;\n        this.response = response;\n        this.headers = headers;\n        this.result = result;\n    }\n\n    protected isApiException = true;\n\n    static isApiException(obj: any): obj is ApiException {\n        return obj.isApiException === true;\n    }\n}\n\nfunction throwException(message: string, status: number, response: string, headers: { [key: string]: any; }, result?: any): any {\n    if (result !== null && result !== undefined)\n        throw result;\n    else\n        throw new ApiException(message, status, response, headers, null);\n}\n\nfunction isAxiosError(obj: any | undefined): obj is AxiosError {\n    return obj && obj.isAxiosError === true;\n}\n\n/* eslint-disable @typescript-eslint/no-unused-vars */\n\nconst axios = {\n  create: () => {\n    throw new Error(\n      'To support lazy loading, axios dependency is stubbed. ' +\n        'Please create axios instance manually and pass to the constructor instead.'\n    );\n  }\n};","import { AxiosRequestConfig } from 'axios';\n\nexport const ylRequestIdHeaderKey = 'YL-Request-Id';\n\nexport class ApiClientBase {\n  protected transformOptions(options: AxiosRequestConfig) {\n    options.transformResponse = (data: any) => data;\n    return Promise.resolve(options);\n  }\n}\n","import { makeAutoObservable, when } from 'mobx';\n\nimport { configureMobx } from '../utils/configureMobx';\n\nexport class ErrorModalStore {\n  constructor() {\n    configureMobx();\n    makeAutoObservable(this);\n  }\n\n  errorId: string | boolean = false;\n\n  get shortErrorId(): string | undefined {\n    if (typeof this.errorId === 'string') {\n      return /((\\d|\\w)+)-/.exec(this.errorId)?.[1];\n    }\n    return undefined;\n  }\n\n  async showError(requestId?: string) {\n    this.errorId ||= requestId || true;\n    await when(() => !this.errorId);\n  }\n\n  close() {\n    this.errorId = false;\n  }\n}\n\nexport const errorModalStore = new ErrorModalStore();\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]+$/;\n\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\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\n  if (opt.domain) {\n    if (!fieldContentRegExp.test(opt.domain)) {\n      throw new TypeError('option domain is invalid');\n    }\n\n    str += \"; Domain=\".concat(opt.domain);\n  }\n\n  if (opt.path) {\n    if (!fieldContentRegExp.test(opt.path)) {\n      throw new TypeError('option path is invalid');\n    }\n\n    str += \"; Path=\".concat(opt.path);\n  }\n\n  if (opt.expires) {\n    if (typeof opt.expires.toUTCString !== 'function') {\n      throw new TypeError('option expires is invalid');\n    }\n\n    str += \"; Expires=\".concat(opt.expires.toUTCString());\n  }\n\n  if (opt.httpOnly) str += '; HttpOnly';\n  if (opt.secure) str += '; Secure';\n\n  if (opt.sameSite) {\n    var sameSite = typeof opt.sameSite === 'string' ? opt.sameSite.toLowerCase() : opt.sameSite;\n\n    switch (sameSite) {\n      case true:\n        str += '; SameSite=Strict';\n        break;\n\n      case 'lax':\n        str += '; SameSite=Lax';\n        break;\n\n      case 'strict':\n        str += '; SameSite=Strict';\n        break;\n\n      case 'none':\n        str += '; SameSite=None';\n        break;\n\n      default:\n        throw new TypeError('option sameSite is invalid');\n    }\n  }\n\n  return str;\n};\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\n    if (minutes) {\n      cookieOptions.expires = new Date();\n      cookieOptions.expires.setTime(cookieOptions.expires.getTime() + minutes * 60 * 1000);\n    }\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\n    for (var i = 0; i < ca.length; i++) {\n      var c = ca[i];\n\n      while (c.charAt(0) === ' ') {\n        c = c.substring(1, c.length);\n      }\n\n      if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length);\n    }\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\n    if (options.lookupCookie && typeof document !== 'undefined') {\n      var c = cookie.read(options.lookupCookie);\n      if (c) found = c;\n    }\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\n    if (typeof window !== 'undefined') {\n      var search = window.location.search;\n\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\n      var query = search.substring(1);\n      var params = query.split('&');\n\n      for (var i = 0; i < params.length; i++) {\n        var pos = params[i].indexOf('=');\n\n        if (pos > 0) {\n          var key = params[i].substring(0, pos);\n\n          if (key === options.lookupQuerystring) {\n            found = params[i].substring(pos + 1);\n          }\n        }\n      }\n    }\n\n    return found;\n  }\n};\n\nvar hasLocalStorageSupport = null;\n\nvar localStorageAvailable = function localStorageAvailable() {\n  if (hasLocalStorageSupport !== null) return hasLocalStorageSupport;\n\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\n  return hasLocalStorageSupport;\n};\n\nvar localStorage = {\n  name: 'localStorage',\n  lookup: function lookup(options) {\n    var found;\n\n    if (options.lookupLocalStorage && localStorageAvailable()) {\n      var lng = window.localStorage.getItem(options.lookupLocalStorage);\n      if (lng) found = lng;\n    }\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;\n\nvar sessionStorageAvailable = function sessionStorageAvailable() {\n  if (hasSessionStorageSupport !== null) return hasSessionStorageSupport;\n\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\n  return hasSessionStorageSupport;\n};\n\nvar sessionStorage = {\n  name: 'sessionStorage',\n  lookup: function lookup(options) {\n    var found;\n\n    if (options.lookupSessionStorage && sessionStorageAvailable()) {\n      var lng = window.sessionStorage.getItem(options.lookupSessionStorage);\n      if (lng) found = lng;\n    }\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\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\n      if (navigator.userLanguage) {\n        found.push(navigator.userLanguage);\n      }\n\n      if (navigator.language) {\n        found.push(navigator.language);\n      }\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\n    if (htmlTag && typeof htmlTag.getAttribute === 'function') {\n      found = htmlTag.getAttribute('lang');\n    }\n\n    return found;\n  }\n};\n\nvar path = {\n  name: 'path',\n  lookup: function lookup(options) {\n    var found;\n\n    if (typeof window !== 'undefined') {\n      var language = window.location.pathname.match(/\\/([a-zA-Z-]*)/g);\n\n      if (language instanceof Array) {\n        if (typeof options.lookupFromPathIndex === 'number') {\n          if (typeof language[options.lookupFromPathIndex] !== 'string') {\n            return undefined;\n          }\n\n          found = language[options.lookupFromPathIndex].replace('/', '');\n        } else {\n          found = language[0].replace('/', '');\n        }\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; // 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\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); // if there is no match (null) return undefined\n\n    if (!language) return undefined; // return the given group match\n\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'] // cookieMinutes: 10,\n    // cookieDomain: 'myDomain'\n\n  };\n}\n\nvar Browser = /*#__PURE__*/function () {\n  function Browser(services) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    _classCallCheck(this, Browser);\n\n    this.type = 'languageDetector';\n    this.detectors = {};\n    this.init(services, options);\n  }\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()); // backwards compatibility\n\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\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\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\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\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\n  return Browser;\n}();\n\nBrowser.type = 'languageDetector';\n\nexport { Browser as default };\n","import LanguageDetector, { CustomDetector, DetectorOptions } from 'i18next-browser-languagedetector';\n\nclass UrlSearchParamsDetector implements CustomDetector {\n  readonly name = 'UrlSearchParamsDetector';\n  readonly keys = ['culture', 'locale', 'language'];\n  readonly localeRegularExpression = /^[a-z]{2}-[A-Z]{2}$/;\n\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  lookup(options: DetectorOptions): string | string[] | undefined {\n    const params = new URLSearchParams(window.location.search);\n    return Array.from(params.entries())\n      .filter(([key, value]) => this.keys.includes(key) && value && this.localeRegularExpression.test(value))\n      .map(([, value]) => value) as string[];\n  }\n}\n\nconst urlSearchParamsDetector = new UrlSearchParamsDetector();\n\nexport const languageDetector = new LanguageDetector(\n  { languageUtils: {} },\n  {\n    order: [urlSearchParamsDetector.name, 'cookie', 'localStorage', 'sessionStorage', 'navigator', 'htmlTag'],\n    lookupCookie: 'culture',\n    caches: ['cookie']\n  }\n);\n\nlanguageDetector.addDetector(new UrlSearchParamsDetector());\n\nexport function detectLocale() {\n  const detected = languageDetector.detect();\n  return Array.isArray(detected) ? detected[0] : detected;\n}\n","import { configure } from 'mobx';\n\nlet configured = false;\n\nexport const configureMobx = () => {\n  // prettier-ignore\n  // eslint-disable-next-line no-prototype-builtins\n  if (!new class { x: any }().hasOwnProperty('x')) throw new Error('Transpiler is not configured correctly');\n\n  // Important if multiple versions of mobx are ever loaded.\n  if (!configured) {\n    configure({ isolateGlobalState: true });\n    configured = true;\n  }\n};\n","import { history } from '@yl/react-router';\n\ndeclare global {\n  interface Window {\n    dataLayer: any[];\n  }\n}\n\nexport const dataLayer = window.dataLayer;\n\nexport function sendHistoryEventsToAnalytics() {\n  history.listen(() => {\n    dataLayer.push({\n      event: 'content-view',\n      'content-name': history.location.pathname\n    });\n  });\n}\nexport type ECommerceStatus =\n  | 'successful-payment'\n  | 'pending-payment'\n  | 'failed-payment'\n  | 'failed-request'\n  | 'failed-unknown'\n  | 'early-enrollment-completed';\n\nexport function publishECommerceCompletionEvent(status: ECommerceStatus, data?: CompletionAnalyticsEventData) {\n  let event;\n  if (data) {\n    event = data.hasEr ? 'New Member Enrollment With ER' : 'New Member Enrollment Without ER';\n  }\n  dataLayer.push({\n    event,\n    status,\n    sponsorId: data ? data.sponsorId : undefined,\n    enrollerId: data ? data.enrollerId : undefined,\n    memberType: data ? data.memberType : undefined,\n    paymentType: data ? data.paymentType : undefined,\n    ecommerce: {\n      currencyCode: data ? data.currencyCode : undefined,\n      purchase: {\n        actionField: {\n          coupon: '',\n          affiliation: event,\n          id: data ? data.orderId : undefined,\n          revenue: data ? data.revenue : undefined,\n          tax: data ? data.tax : undefined,\n          shipping: data ? data.shipping : undefined\n        },\n        products: data ? data.products : undefined\n      }\n    }\n  });\n}\n\nexport interface CompletionAnalyticsEventData {\n  hasEr: boolean;\n  enrollerId: string;\n  sponsorId: string;\n  revenue: string;\n  shipping: string;\n  orderId: string;\n  tax: string;\n  currencyCode: string;\n  memberType: string;\n  paymentType: string;\n  products: ECommerceProduct[];\n}\n\nexport type AnalyticEventTypes = 'content-view';\n\nexport type EnrollmentCompletionEventType = 'New Member Enrollment With ER' | 'New Member Enrollment Without ER';\n\nexport type AnalyticsPaymentType = 'CreditCard';\n\nexport type RecursivePartial<T> = {\n  [P in keyof T]?: T[P] extends (infer U)[]\n    ? RecursivePartial<U>[]\n    : T[P] extends object\n    ? RecursivePartial<T[P]>\n    : T[P];\n};\n\nexport type ECommerceAnalyticsEventPartial = RecursivePartial<ECommerceAnalyticsEvent>;\n\nexport interface ECommerceActionField {\n  coupon: string;\n  affiliation: EnrollmentCompletionEventType;\n  id: string;\n  revenue: string;\n  tax: string;\n  shipping: string;\n}\n\nexport interface ECommerceProduct {\n  name: string;\n  id: string;\n  price: string;\n  quantity: string;\n}\n\nexport interface ECommercePurchase {\n  actionField: ECommerceActionField;\n}\n\nexport interface ECommerceAnalyticsEvent {\n  currencyCode: string;\n  purchase: ECommercePurchase;\n}\n\nexport interface EnrollmentAnalyticsEvent {\n  event: EnrollmentCompletionEventType;\n  sponsorId: string;\n  enrollerId: string;\n  memberType: string;\n  paymentType: AnalyticsPaymentType;\n  ecommerce: ECommerceAnalyticsEvent;\n}\n","import axios, { AxiosInstance } from 'axios';\nimport {\n  addYlRequestIdInterceptor,\n  addEnrollmentIdInterceptor,\n  addMarketShieldInterceptor,\n  addRetryInterceptor,\n  addRedirectInterceptor\n} from './interceptors';\n\nexport const baseURL = '/apps/enrollment';\n\nexport const enrollmentResource = axios.create({\n  baseURL: `${baseURL}/api`\n});\n\nexport const enrollmentClient = axios.create({ baseURL: YL_BASE_URL });\n\nfunction setupInterceptors(instance: AxiosInstance) {\n  addEnrollmentIdInterceptor(instance);\n  addYlRequestIdInterceptor(instance);\n  addMarketShieldInterceptor(instance);\n  addRetryInterceptor(instance);\n  addRedirectInterceptor(instance);\n}\n\nsetupInterceptors(enrollmentClient);\nsetupInterceptors(enrollmentResource);\n","import axiosStatic, { AxiosInstance, AxiosRequestConfig } from 'axios';\nimport cookies from 'browser-cookies';\nimport md5 from 'md5';\nimport { v4 as uuidv4 } from 'uuid';\nimport utf8 from 'utf8';\n\nimport { errorModalStore } from '../../external/shared/error-handling/ErrorModalStore';\nimport { Redirector } from '../redirecting/Redirector';\nimport { baseURL } from './EnrollmentResource';\nimport { getCurrentEnrollmentId } from '../../app/customer-enrollment-status/EnrollmentStatusManager';\nimport { getVoAuthToken, setupVoAuthentication } from '../../app/authentication/VoAuthentication';\nimport { TokenClient } from '../../external/shared/api/EnrollmentClient.generated';\n\nexport function addEnrollmentIdInterceptor(axios: AxiosInstance) {\n  axios.interceptors.request.use(config => {\n    const currentEnrollmentId = getCurrentEnrollmentId();\n    if (currentEnrollmentId) {\n      config.headers ||= {};\n      config.headers['YL-EnrollmentId'] = currentEnrollmentId;\n    }\n    return config;\n  });\n}\n\nexport function addYlRequestIdInterceptor(axios: AxiosInstance) {\n  axios.interceptors.request.use(config => {\n    config.headers ||= {};\n    config.headers['YL-Request-Id'] = uuidv4();\n    return config;\n  });\n  axios.interceptors.response.use(undefined, error => {\n    if (!axiosStatic.isCancel(error)) {\n      const requestId = error.response?.headers['yl-request-id'] || error.config?.headers['YL-Request-Id'];\n      errorModalStore.showError(requestId);\n    }\n    return Promise.reject(error);\n  });\n}\n\nexport function addMarketShieldInterceptor(axios: AxiosInstance) {\n  axios.interceptors.response.use(response => {\n    if (response?.data?.isShielded) {\n      const storedAccess = cookies.get('ms-axs');\n\n      let verified = false;\n      if (storedAccess) {\n        const encryptedHash = md5(response.data.shieldAccessCode);\n\n        if (storedAccess === encryptedHash) {\n          verified = true;\n        }\n      }\n\n      if (!verified) {\n        Redirector.redirect('/vo/#/market-shield');\n      }\n    }\n\n    return response;\n  });\n}\n\nexport function addRetryInterceptor(axios: AxiosInstance) {\n  axios.interceptors.response.use(undefined, error => {\n    if (error.config && error.response?.status === 502 && (error.config.num502Retries || 0) < 10) {\n      const config = error.config;\n      config.num502Retries = config.num502Retries || 0;\n      config.num502Retries++;\n      config.url = config.url.replace(config.baseURL, '');\n      return axios.request(error.config);\n    }\n    return Promise.reject(error);\n  });\n}\n\nexport function addRedirectInterceptor(axios: AxiosInstance) {\n  axios.interceptors.response.use(\n    response => {\n      if (response?.data?.redirectToStepOne) {\n        Redirector.redirect(baseURL);\n      }\n      return response;\n    },\n    error => {\n      if (error?.response?.status === 303) {\n        return Redirector.redirect(baseURL);\n      }\n      return Promise.reject(error);\n    }\n  );\n}\n\nexport function addVoAuthTokenInterceptor(axios: AxiosInstance) {\n  axios.interceptors.request.use(config => {\n    const token = getVoAuthToken();\n    config.headers ||= {};\n    config.headers.AuthToken = btoa(utf8.encode(JSON.stringify(token)));\n    return config;\n  });\n  const tokenClient = new TokenClient('', axios);\n  axios.interceptors.response.use(undefined, async error => {\n    if (error?.response?.status === 401 && error?.response?.data?.reason === 'Reissue') {\n      const token = await tokenClient.reissue((error.config as AxiosRequestConfig).cancelToken);\n      setupVoAuthentication(token);\n      return axios.request(error.config);\n    }\n    throw error;\n  });\n}\n","export const Redirector = {\n  redirect(url: string) {\n    window.location.href = url;\n  }\n};\n","/** @license React v17.0.2\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var l=require(\"object-assign\"),n=60103,p=60106;exports.Fragment=60107;exports.StrictMode=60108;exports.Profiler=60114;var q=60109,r=60110,t=60112;exports.Suspense=60113;var u=60115,v=60116;\nif(\"function\"===typeof Symbol&&Symbol.for){var w=Symbol.for;n=w(\"react.element\");p=w(\"react.portal\");exports.Fragment=w(\"react.fragment\");exports.StrictMode=w(\"react.strict_mode\");exports.Profiler=w(\"react.profiler\");q=w(\"react.provider\");r=w(\"react.context\");t=w(\"react.forward_ref\");exports.Suspense=w(\"react.suspense\");u=w(\"react.memo\");v=w(\"react.lazy\")}var x=\"function\"===typeof Symbol&&Symbol.iterator;\nfunction y(a){if(null===a||\"object\"!==typeof a)return null;a=x&&a[x]||a[\"@@iterator\"];return\"function\"===typeof a?a:null}function z(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;c<arguments.length;c++)b+=\"&args[]=\"+encodeURIComponent(arguments[c]);return\"Minified React error #\"+a+\"; visit \"+b+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"}\nvar A={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},B={};function C(a,b,c){this.props=a;this.context=b;this.refs=B;this.updater=c||A}C.prototype.isReactComponent={};C.prototype.setState=function(a,b){if(\"object\"!==typeof a&&\"function\"!==typeof a&&null!=a)throw Error(z(85));this.updater.enqueueSetState(this,a,b,\"setState\")};C.prototype.forceUpdate=function(a){this.updater.enqueueForceUpdate(this,a,\"forceUpdate\")};\nfunction D(){}D.prototype=C.prototype;function E(a,b,c){this.props=a;this.context=b;this.refs=B;this.updater=c||A}var F=E.prototype=new D;F.constructor=E;l(F,C.prototype);F.isPureReactComponent=!0;var G={current:null},H=Object.prototype.hasOwnProperty,I={key:!0,ref:!0,__self:!0,__source:!0};\nfunction J(a,b,c){var e,d={},k=null,h=null;if(null!=b)for(e in void 0!==b.ref&&(h=b.ref),void 0!==b.key&&(k=\"\"+b.key),b)H.call(b,e)&&!I.hasOwnProperty(e)&&(d[e]=b[e]);var g=arguments.length-2;if(1===g)d.children=c;else if(1<g){for(var f=Array(g),m=0;m<g;m++)f[m]=arguments[m+2];d.children=f}if(a&&a.defaultProps)for(e in g=a.defaultProps,g)void 0===d[e]&&(d[e]=g[e]);return{$$typeof:n,type:a,key:k,ref:h,props:d,_owner:G.current}}\nfunction K(a,b){return{$$typeof:n,type:a.type,key:b,ref:a.ref,props:a.props,_owner:a._owner}}function L(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===n}function escape(a){var b={\"=\":\"=0\",\":\":\"=2\"};return\"$\"+a.replace(/[=:]/g,function(a){return b[a]})}var M=/\\/+/g;function N(a,b){return\"object\"===typeof a&&null!==a&&null!=a.key?escape(\"\"+a.key):b.toString(36)}\nfunction O(a,b,c,e,d){var k=typeof a;if(\"undefined\"===k||\"boolean\"===k)a=null;var h=!1;if(null===a)h=!0;else switch(k){case \"string\":case \"number\":h=!0;break;case \"object\":switch(a.$$typeof){case n:case p:h=!0}}if(h)return h=a,d=d(h),a=\"\"===e?\".\"+N(h,0):e,Array.isArray(d)?(c=\"\",null!=a&&(c=a.replace(M,\"$&/\")+\"/\"),O(d,b,c,\"\",function(a){return a})):null!=d&&(L(d)&&(d=K(d,c+(!d.key||h&&h.key===d.key?\"\":(\"\"+d.key).replace(M,\"$&/\")+\"/\")+a)),b.push(d)),1;h=0;e=\"\"===e?\".\":e+\":\";if(Array.isArray(a))for(var g=\n0;g<a.length;g++){k=a[g];var f=e+N(k,g);h+=O(k,b,c,f,d)}else if(f=y(a),\"function\"===typeof f)for(a=f.call(a),g=0;!(k=a.next()).done;)k=k.value,f=e+N(k,g++),h+=O(k,b,c,f,d);else if(\"object\"===k)throw b=\"\"+a,Error(z(31,\"[object Object]\"===b?\"object with keys {\"+Object.keys(a).join(\", \")+\"}\":b));return h}function P(a,b,c){if(null==a)return a;var e=[],d=0;O(a,e,\"\",\"\",function(a){return b.call(c,a,d++)});return e}\nfunction Q(a){if(-1===a._status){var b=a._result;b=b();a._status=0;a._result=b;b.then(function(b){0===a._status&&(b=b.default,a._status=1,a._result=b)},function(b){0===a._status&&(a._status=2,a._result=b)})}if(1===a._status)return a._result;throw a._result;}var R={current:null};function S(){var a=R.current;if(null===a)throw Error(z(321));return a}var T={ReactCurrentDispatcher:R,ReactCurrentBatchConfig:{transition:0},ReactCurrentOwner:G,IsSomeRendererActing:{current:!1},assign:l};\nexports.Children={map:P,forEach:function(a,b,c){P(a,function(){b.apply(this,arguments)},c)},count:function(a){var b=0;P(a,function(){b++});return b},toArray:function(a){return P(a,function(a){return a})||[]},only:function(a){if(!L(a))throw Error(z(143));return a}};exports.Component=C;exports.PureComponent=E;exports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=T;\nexports.cloneElement=function(a,b,c){if(null===a||void 0===a)throw Error(z(267,a));var e=l({},a.props),d=a.key,k=a.ref,h=a._owner;if(null!=b){void 0!==b.ref&&(k=b.ref,h=G.current);void 0!==b.key&&(d=\"\"+b.key);if(a.type&&a.type.defaultProps)var g=a.type.defaultProps;for(f in b)H.call(b,f)&&!I.hasOwnProperty(f)&&(e[f]=void 0===b[f]&&void 0!==g?g[f]:b[f])}var f=arguments.length-2;if(1===f)e.children=c;else if(1<f){g=Array(f);for(var m=0;m<f;m++)g[m]=arguments[m+2];e.children=g}return{$$typeof:n,type:a.type,\nkey:d,ref:k,props:e,_owner:h}};exports.createContext=function(a,b){void 0===b&&(b=null);a={$$typeof:r,_calculateChangedBits:b,_currentValue:a,_currentValue2:a,_threadCount:0,Provider:null,Consumer:null};a.Provider={$$typeof:q,_context:a};return a.Consumer=a};exports.createElement=J;exports.createFactory=function(a){var b=J.bind(null,a);b.type=a;return b};exports.createRef=function(){return{current:null}};exports.forwardRef=function(a){return{$$typeof:t,render:a}};exports.isValidElement=L;\nexports.lazy=function(a){return{$$typeof:v,_payload:{_status:-1,_result:a},_init:Q}};exports.memo=function(a,b){return{$$typeof:u,type:a,compare:void 0===b?null:b}};exports.useCallback=function(a,b){return S().useCallback(a,b)};exports.useContext=function(a,b){return S().useContext(a,b)};exports.useDebugValue=function(){};exports.useEffect=function(a,b){return S().useEffect(a,b)};exports.useImperativeHandle=function(a,b,c){return S().useImperativeHandle(a,b,c)};\nexports.useLayoutEffect=function(a,b){return S().useLayoutEffect(a,b)};exports.useMemo=function(a,b){return S().useMemo(a,b)};exports.useReducer=function(a,b,c){return S().useReducer(a,b,c)};exports.useRef=function(a){return S().useRef(a)};exports.useState=function(a){return S().useState(a)};exports.version=\"17.0.2\";\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react.production.min.js');\n} else {\n  module.exports = require('./cjs/react.development.js');\n}\n","/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nvar getRandomValues;\nvar rnds8 = new Uint8Array(16);\nexport default function rng() {\n  // lazy load so that environments that need to polyfill have a chance to do so\n  if (!getRandomValues) {\n    // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation. Also,\n    // find the complete implementation of crypto (msCrypto) on IE11.\n    getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);\n\n    if (!getRandomValues) {\n      throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n    }\n  }\n\n  return getRandomValues(rnds8);\n}","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n  return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nvar byteToHex = [];\n\nfor (var i = 0; i < 256; ++i) {\n  byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr) {\n  var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n  // Note: Be careful editing this code!  It's been tuned for performance\n  // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n  var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID.  If this throws, it's likely due to one\n  // of the following:\n  // - One or more input array values don't map to a hex octet (leading to\n  // \"undefined\" in the uuid)\n  // - Invalid input values for the RFC `version` or `variant` fields\n\n  if (!validate(uuid)) {\n    throw TypeError('Stringified UUID is invalid');\n  }\n\n  return uuid;\n}\n\nexport default stringify;","import rng from './rng.js';\nimport stringify from './stringify.js';\n\nfunction v4(options, buf, offset) {\n  options = options || {};\n  var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n  rnds[6] = rnds[6] & 0x0f | 0x40;\n  rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n  if (buf) {\n    offset = offset || 0;\n\n    for (var i = 0; i < 16; ++i) {\n      buf[offset + i] = rnds[i];\n    }\n\n    return buf;\n  }\n\n  return stringify(rnds);\n}\n\nexport default v4;","var _typeof = require(\"./typeof.js\")[\"default\"];\nfunction _regeneratorRuntime() {\n  \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */\n  module.exports = _regeneratorRuntime = function _regeneratorRuntime() {\n    return exports;\n  }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n  var exports = {},\n    Op = Object.prototype,\n    hasOwn = Op.hasOwnProperty,\n    $Symbol = \"function\" == typeof Symbol ? Symbol : {},\n    iteratorSymbol = $Symbol.iterator || \"@@iterator\",\n    asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\",\n    toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n  function define(obj, key, value) {\n    return Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: !0,\n      configurable: !0,\n      writable: !0\n    }), obj[key];\n  }\n  try {\n    define({}, \"\");\n  } catch (err) {\n    define = function define(obj, key, value) {\n      return obj[key] = value;\n    };\n  }\n  function wrap(innerFn, outerFn, self, tryLocsList) {\n    var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator,\n      generator = Object.create(protoGenerator.prototype),\n      context = new Context(tryLocsList || []);\n    return generator._invoke = function (innerFn, self, context) {\n      var state = \"suspendedStart\";\n      return function (method, arg) {\n        if (\"executing\" === state) throw new Error(\"Generator is already running\");\n        if (\"completed\" === state) {\n          if (\"throw\" === method) throw arg;\n          return doneResult();\n        }\n        for (context.method = method, context.arg = arg;;) {\n          var delegate = context.delegate;\n          if (delegate) {\n            var delegateResult = maybeInvokeDelegate(delegate, context);\n            if (delegateResult) {\n              if (delegateResult === ContinueSentinel) continue;\n              return delegateResult;\n            }\n          }\n          if (\"next\" === context.method) context.sent = context._sent = context.arg;else if (\"throw\" === context.method) {\n            if (\"suspendedStart\" === state) throw state = \"completed\", context.arg;\n            context.dispatchException(context.arg);\n          } else \"return\" === context.method && context.abrupt(\"return\", context.arg);\n          state = \"executing\";\n          var record = tryCatch(innerFn, self, context);\n          if (\"normal\" === record.type) {\n            if (state = context.done ? \"completed\" : \"suspendedYield\", record.arg === ContinueSentinel) continue;\n            return {\n              value: record.arg,\n              done: context.done\n            };\n          }\n          \"throw\" === record.type && (state = \"completed\", context.method = \"throw\", context.arg = record.arg);\n        }\n      };\n    }(innerFn, self, context), generator;\n  }\n  function tryCatch(fn, obj, arg) {\n    try {\n      return {\n        type: \"normal\",\n        arg: fn.call(obj, arg)\n      };\n    } catch (err) {\n      return {\n        type: \"throw\",\n        arg: err\n      };\n    }\n  }\n  exports.wrap = wrap;\n  var ContinueSentinel = {};\n  function Generator() {}\n  function GeneratorFunction() {}\n  function GeneratorFunctionPrototype() {}\n  var IteratorPrototype = {};\n  define(IteratorPrototype, iteratorSymbol, function () {\n    return this;\n  });\n  var getProto = Object.getPrototypeOf,\n    NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n  NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype);\n  var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype);\n  function defineIteratorMethods(prototype) {\n    [\"next\", \"throw\", \"return\"].forEach(function (method) {\n      define(prototype, method, function (arg) {\n        return this._invoke(method, arg);\n      });\n    });\n  }\n  function AsyncIterator(generator, PromiseImpl) {\n    function invoke(method, arg, resolve, reject) {\n      var record = tryCatch(generator[method], generator, arg);\n      if (\"throw\" !== record.type) {\n        var result = record.arg,\n          value = result.value;\n        return value && \"object\" == _typeof(value) && hasOwn.call(value, \"__await\") ? PromiseImpl.resolve(value.__await).then(function (value) {\n          invoke(\"next\", value, resolve, reject);\n        }, function (err) {\n          invoke(\"throw\", err, resolve, reject);\n        }) : PromiseImpl.resolve(value).then(function (unwrapped) {\n          result.value = unwrapped, resolve(result);\n        }, function (error) {\n          return invoke(\"throw\", error, resolve, reject);\n        });\n      }\n      reject(record.arg);\n    }\n    var previousPromise;\n    this._invoke = function (method, arg) {\n      function callInvokeWithMethodAndArg() {\n        return new PromiseImpl(function (resolve, reject) {\n          invoke(method, arg, resolve, reject);\n        });\n      }\n      return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();\n    };\n  }\n  function maybeInvokeDelegate(delegate, context) {\n    var method = delegate.iterator[context.method];\n    if (undefined === method) {\n      if (context.delegate = null, \"throw\" === context.method) {\n        if (delegate.iterator[\"return\"] && (context.method = \"return\", context.arg = undefined, maybeInvokeDelegate(delegate, context), \"throw\" === context.method)) return ContinueSentinel;\n        context.method = \"throw\", context.arg = new TypeError(\"The iterator does not provide a 'throw' method\");\n      }\n      return ContinueSentinel;\n    }\n    var record = tryCatch(method, delegate.iterator, context.arg);\n    if (\"throw\" === record.type) return context.method = \"throw\", context.arg = record.arg, context.delegate = null, ContinueSentinel;\n    var info = record.arg;\n    return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, \"return\" !== context.method && (context.method = \"next\", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = \"throw\", context.arg = new TypeError(\"iterator result is not an object\"), context.delegate = null, ContinueSentinel);\n  }\n  function pushTryEntry(locs) {\n    var entry = {\n      tryLoc: locs[0]\n    };\n    1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry);\n  }\n  function resetTryEntry(entry) {\n    var record = entry.completion || {};\n    record.type = \"normal\", delete record.arg, entry.completion = record;\n  }\n  function Context(tryLocsList) {\n    this.tryEntries = [{\n      tryLoc: \"root\"\n    }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0);\n  }\n  function values(iterable) {\n    if (iterable) {\n      var iteratorMethod = iterable[iteratorSymbol];\n      if (iteratorMethod) return iteratorMethod.call(iterable);\n      if (\"function\" == typeof iterable.next) return iterable;\n      if (!isNaN(iterable.length)) {\n        var i = -1,\n          next = function next() {\n            for (; ++i < iterable.length;) {\n              if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next;\n            }\n            return next.value = undefined, next.done = !0, next;\n          };\n        return next.next = next;\n      }\n    }\n    return {\n      next: doneResult\n    };\n  }\n  function doneResult() {\n    return {\n      value: undefined,\n      done: !0\n    };\n  }\n  return GeneratorFunction.prototype = GeneratorFunctionPrototype, define(Gp, \"constructor\", GeneratorFunctionPrototype), define(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, \"GeneratorFunction\"), exports.isGeneratorFunction = function (genFun) {\n    var ctor = \"function\" == typeof genFun && genFun.constructor;\n    return !!ctor && (ctor === GeneratorFunction || \"GeneratorFunction\" === (ctor.displayName || ctor.name));\n  }, exports.mark = function (genFun) {\n    return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, \"GeneratorFunction\")), genFun.prototype = Object.create(Gp), genFun;\n  }, exports.awrap = function (arg) {\n    return {\n      __await: arg\n    };\n  }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n    return this;\n  }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n    void 0 === PromiseImpl && (PromiseImpl = Promise);\n    var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl);\n    return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) {\n      return result.done ? result.value : iter.next();\n    });\n  }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, \"Generator\"), define(Gp, iteratorSymbol, function () {\n    return this;\n  }), define(Gp, \"toString\", function () {\n    return \"[object Generator]\";\n  }), exports.keys = function (object) {\n    var keys = [];\n    for (var key in object) {\n      keys.push(key);\n    }\n    return keys.reverse(), function next() {\n      for (; keys.length;) {\n        var key = keys.pop();\n        if (key in object) return next.value = key, next.done = !1, next;\n      }\n      return next.done = !0, next;\n    };\n  }, exports.values = values, Context.prototype = {\n    constructor: Context,\n    reset: function reset(skipTempReset) {\n      if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) {\n        \"t\" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined);\n      }\n    },\n    stop: function stop() {\n      this.done = !0;\n      var rootRecord = this.tryEntries[0].completion;\n      if (\"throw\" === rootRecord.type) throw rootRecord.arg;\n      return this.rval;\n    },\n    dispatchException: function dispatchException(exception) {\n      if (this.done) throw exception;\n      var context = this;\n      function handle(loc, caught) {\n        return record.type = \"throw\", record.arg = exception, context.next = loc, caught && (context.method = \"next\", context.arg = undefined), !!caught;\n      }\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i],\n          record = entry.completion;\n        if (\"root\" === entry.tryLoc) return handle(\"end\");\n        if (entry.tryLoc <= this.prev) {\n          var hasCatch = hasOwn.call(entry, \"catchLoc\"),\n            hasFinally = hasOwn.call(entry, \"finallyLoc\");\n          if (hasCatch && hasFinally) {\n            if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0);\n            if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc);\n          } else if (hasCatch) {\n            if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0);\n          } else {\n            if (!hasFinally) throw new Error(\"try statement without catch or finally\");\n            if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc);\n          }\n        }\n      }\n    },\n    abrupt: function abrupt(type, arg) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.tryLoc <= this.prev && hasOwn.call(entry, \"finallyLoc\") && this.prev < entry.finallyLoc) {\n          var finallyEntry = entry;\n          break;\n        }\n      }\n      finallyEntry && (\"break\" === type || \"continue\" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null);\n      var record = finallyEntry ? finallyEntry.completion : {};\n      return record.type = type, record.arg = arg, finallyEntry ? (this.method = \"next\", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record);\n    },\n    complete: function complete(record, afterLoc) {\n      if (\"throw\" === record.type) throw record.arg;\n      return \"break\" === record.type || \"continue\" === record.type ? this.next = record.arg : \"return\" === record.type ? (this.rval = this.arg = record.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel;\n    },\n    finish: function finish(finallyLoc) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel;\n      }\n    },\n    \"catch\": function _catch(tryLoc) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.tryLoc === tryLoc) {\n          var record = entry.completion;\n          if (\"throw\" === record.type) {\n            var thrown = record.arg;\n            resetTryEntry(entry);\n          }\n          return thrown;\n        }\n      }\n      throw new Error(\"illegal catch attempt\");\n    },\n    delegateYield: function delegateYield(iterable, resultName, nextLoc) {\n      return this.delegate = {\n        iterator: values(iterable),\n        resultName: resultName,\n        nextLoc: nextLoc\n      }, \"next\" === this.method && (this.arg = undefined), ContinueSentinel;\n    }\n  }, exports;\n}\nmodule.exports = _regeneratorRuntime, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _typeof(obj) {\n  \"@babel/helpers - typeof\";\n\n  return (module.exports = _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  }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports), _typeof(obj);\n}\nmodule.exports = _typeof, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","// TODO(Babel 8): Remove this file.\n\nvar runtime = require(\"../helpers/regeneratorRuntime\")();\nmodule.exports = runtime;\n\n// Copied from https://github.com/facebook/regenerator/blob/main/packages/runtime/runtime.js#L736=\ntry {\n  regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n  if (typeof globalThis === \"object\") {\n    globalThis.regeneratorRuntime = runtime;\n  } else {\n    Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n  }\n}\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++) {\n    arr2[i] = arr[i];\n  }\n  return arr2;\n}","export default function _arrayWithHoles(arr) {\n  if (Array.isArray(arr)) return arr;\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}","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n  try {\n    var info = gen[key](arg);\n    var value = info.value;\n  } catch (error) {\n    reject(error);\n    return;\n  }\n  if (info.done) {\n    resolve(value);\n  } else {\n    Promise.resolve(value).then(_next, _throw);\n  }\n}\nexport default function _asyncToGenerator(fn) {\n  return function () {\n    var self = this,\n      args = arguments;\n    return new Promise(function (resolve, reject) {\n      var gen = fn.apply(self, args);\n      function _next(value) {\n        asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n      }\n      function _throw(err) {\n        asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n      }\n      _next(undefined);\n    });\n  };\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}","function _defineProperties(target, props) {\n  for (var i = 0; i < props.length; i++) {\n    var descriptor = props[i];\n    descriptor.enumerable = descriptor.enumerable || false;\n    descriptor.configurable = true;\n    if (\"value\" in descriptor) descriptor.writable = true;\n    Object.defineProperty(target, descriptor.key, descriptor);\n  }\n}\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 getPrototypeOf from \"./getPrototypeOf.js\";\nimport isNativeReflectConstruct from \"./isNativeReflectConstruct.js\";\nimport possibleConstructorReturn from \"./possibleConstructorReturn.js\";\nexport default function _createSuper(Derived) {\n  var hasNativeReflectConstruct = isNativeReflectConstruct();\n  return function _createSuperInternal() {\n    var Super = getPrototypeOf(Derived),\n      result;\n    if (hasNativeReflectConstruct) {\n      var NewTarget = getPrototypeOf(this).constructor;\n      result = Reflect.construct(Super, arguments, NewTarget);\n    } else {\n      result = Super.apply(this, arguments);\n    }\n    return possibleConstructorReturn(this, result);\n  };\n}","export default function _defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n  return obj;\n}","export default function _extends() {\n  _extends = Object.assign ? Object.assign.bind() : function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n    return target;\n  };\n  return _extends.apply(this, arguments);\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 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}","export default function _isNativeReflectConstruct() {\n  if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n  if (Reflect.construct.sham) return false;\n  if (typeof Proxy === \"function\") return true;\n  try {\n    Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n    return true;\n  } catch (e) {\n    return false;\n  }\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 defineProperty from \"./defineProperty.js\";\nfunction ownKeys(object, enumerableOnly) {\n  var keys = Object.keys(object);\n  if (Object.getOwnPropertySymbols) {\n    var symbols = Object.getOwnPropertySymbols(object);\n    enumerableOnly && (symbols = symbols.filter(function (sym) {\n      return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n    })), keys.push.apply(keys, symbols);\n  }\n  return keys;\n}\nexport default function _objectSpread2(target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = null != arguments[i] ? arguments[i] : {};\n    i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n      defineProperty(target, key, source[key]);\n    }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n      Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n    });\n  }\n  return target;\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 _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 arrayWithHoles from \"./arrayWithHoles.js\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableRest from \"./nonIterableRest.js\";\nexport default function _slicedToArray(arr, i) {\n  return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}","export default function _iterableToArrayLimit(arr, i) {\n  var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n  if (_i == null) return;\n  var _arr = [];\n  var _n = true;\n  var _d = false;\n  var _s, _e;\n  try {\n    for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n      _arr.push(_s.value);\n      if (i && _arr.length === i) break;\n    }\n  } catch (err) {\n    _d = true;\n    _e = err;\n  } finally {\n    try {\n      if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n    } finally {\n      if (_d) throw _e;\n    }\n  }\n  return _arr;\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 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}","import setPrototypeOf from \"./setPrototypeOf.js\";\nimport isNativeReflectConstruct from \"./isNativeReflectConstruct.js\";\nexport default function _construct(Parent, args, Class) {\n  if (isNativeReflectConstruct()) {\n    _construct = Reflect.construct.bind();\n  } else {\n    _construct = function _construct(Parent, args, Class) {\n      var a = [null];\n      a.push.apply(a, args);\n      var Constructor = Function.bind.apply(Parent, a);\n      var instance = new Constructor();\n      if (Class) setPrototypeOf(instance, Class.prototype);\n      return instance;\n    };\n  }\n  return _construct.apply(null, arguments);\n}","import getPrototypeOf from \"./getPrototypeOf.js\";\nimport setPrototypeOf from \"./setPrototypeOf.js\";\nimport isNativeFunction from \"./isNativeFunction.js\";\nimport construct from \"./construct.js\";\nexport default function _wrapNativeSuper(Class) {\n  var _cache = typeof Map === \"function\" ? new Map() : undefined;\n  _wrapNativeSuper = function _wrapNativeSuper(Class) {\n    if (Class === null || !isNativeFunction(Class)) return Class;\n    if (typeof Class !== \"function\") {\n      throw new TypeError(\"Super expression must either be null or a function\");\n    }\n    if (typeof _cache !== \"undefined\") {\n      if (_cache.has(Class)) return _cache.get(Class);\n      _cache.set(Class, Wrapper);\n    }\n    function Wrapper() {\n      return construct(Class, arguments, getPrototypeOf(this).constructor);\n    }\n    Wrapper.prototype = Object.create(Class.prototype, {\n      constructor: {\n        value: Wrapper,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }\n    });\n    return setPrototypeOf(Wrapper, Class);\n  };\n  return _wrapNativeSuper(Class);\n}","export default function _isNativeFunction(fn) {\n  return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}"],"sourceRoot":""}