tungsten 0.2.1 → 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/tungsten/_icons.js +1 -1
- data/app/assets/stylesheets/tungsten/form/_form-diff.scss +1 -1
- data/lib/tungsten/version.rb +1 -1
- data/public/code-0.2.2.js +25046 -0
- data/public/code-0.2.2.js.gz +0 -0
- data/public/{tungsten-0.2.1.css → tungsten-0.2.2.css} +149 -529
- data/public/tungsten-0.2.2.css.gz +0 -0
- data/public/tungsten-0.2.2.js +14788 -0
- data/public/tungsten-0.2.2.js.gz +0 -0
- metadata +8 -10
- data/public/code-0.2.1.js +0 -95
- data/public/code-0.2.1.js.gz +0 -0
- data/public/code-0.2.1.map.json +0 -1
- data/public/tungsten-0.2.1.css.gz +0 -0
- data/public/tungsten-0.2.1.js +0 -907
- data/public/tungsten-0.2.1.js.gz +0 -0
- data/public/tungsten-0.2.1.map.json +0 -1
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/compose-form-up/lib/diff.js","node_modules/compose-form-up/lib/get-label.js","node_modules/compose-form-up/lib/input-change.js","node_modules/compose-form-up/lib/reset.js","node_modules/compose-form-up/lib/validation.js","app/assets/javascripts/tungsten/_esvg.js","app/assets/javascripts/tungsten/_icons.js","app/assets/javascripts/tungsten/enhancements/flash-messages.js","app/assets/javascripts/tungsten/enhancements/form-submit-helpers.js","app/assets/javascripts/tungsten/enhancements/input-number-only.js","app/assets/javascripts/tungsten/enhancements/input-unit.js","app/assets/javascripts/tungsten/enhancements/link-here.js","app/assets/javascripts/tungsten/enhancements/textarea-expand.js","app/assets/javascripts/tungsten/modules/clipboard.js","app/assets/javascripts/tungsten/modules/notify.js","app/assets/javascripts/tungsten/modules/unit-converter.js","app/assets/javascripts/tungsten/tungsten.js","node_modules/bean/bean.js","node_modules/component-emitter/index.js","node_modules/compose-dialog/index.js","node_modules/compose-event/index.js","node_modules/compose-event/lib/animation-events.js","node_modules/compose-event/lib/bubble-form-events.js","node_modules/compose-event/lib/callback-manager.js","node_modules/compose-event/lib/debounce.js","node_modules/compose-event/lib/delay.js","node_modules/compose-event/lib/media.js","node_modules/compose-event/lib/optimized-event-manager.js","node_modules/compose-event/lib/page.js","node_modules/compose-event/lib/repeat.js","node_modules/compose-event/lib/resize.js","node_modules/compose-event/lib/scroll.js","node_modules/compose-event/lib/shims/custom-event.js","node_modules/compose-event/lib/submit.js","node_modules/compose-event/lib/tap-events.js","node_modules/compose-event/lib/throttle.js","node_modules/compose-form-up/index.js","node_modules/compose-form-up/lib/progressive.js","node_modules/compose-form-up/lib/selector.js","node_modules/compose-form-up/node_modules/compose-toolbox/index.js","node_modules/compose-form-up/node_modules/compose-toolbox/lib/ease.js","node_modules/compose-form-up/node_modules/compose-toolbox/lib/fromtop.js","node_modules/compose-form-up/node_modules/compose-toolbox/lib/scrollto.js","node_modules/compose-form-up/node_modules/compose-toolbox/lib/shims/_classlist.js","node_modules/compose-form-up/node_modules/compose-toolbox/lib/shims/_object.assign.js","node_modules/compose-form-up/node_modules/compose-toolbox/lib/time.js","node_modules/compose-slider/index.js","node_modules/compose-slider/lib/object.assign.js","node_modules/compose-time-toggle/index.js","node_modules/compose-time-toggle/lib/date-to-html.js","node_modules/compose-time-toggle/lib/timeago.js","node_modules/compose-time-toggle/lib/toggle.js","node_modules/compose-toggler/index.js","node_modules/compose-toolbox/index.js","node_modules/keymaster/keymaster.js","node_modules/luxon/build/cjs-browser/luxon.js","node_modules/superagent/lib/client.js","node_modules/superagent/lib/is-object.js","node_modules/superagent/lib/request-base.js","node_modules/superagent/lib/request.js"],"names":["dasherize","input","replace","use","name","options","id","symbol","svgs","parent","parentElement","prefix","dataset","base","symbolClass","svg","document","createRange","createContextualFragment","firstChild","setAttribute","trim","getAttribute","width","height","scale","console","error","names","_step","_iterator","querySelectorAll","Symbol","iterator","_iteratorNormalCompletion","next","done","value","esvg","window","Turbolinks","addEventListener","event","module","exports","embed","querySelector","insertAdjacentHTML","readyState","Event","require","notify","change","flash","classList","add","type","innerHTML","toolbox","on","message","target","submitMessage","button","disableOnSubmit","disableWith","disabled","elements","each","el","buttonText","enabledText","preventDefault","stopImmediatePropagation","delay","body","fakeSubmit","ev","CustomEvent","bubbles","cancelable","dispatchEvent","submit","onpageshow","remove","numberInputOnly","key","keyCode","numberKeys","numPadKeys","decimals","modifiers","alt","shift","inputKey","command","stopPropagation","setup","unitKey","String","Math","random","split","setupInput","setupSelect","select","nextElementSibling","setValue","style","paddingRight","offsetWidth","offsetLeft","randID","toString","substring","checked","units","selectId","unit","selected","wrapper","getClosest","forEach","defaultInput","restoreDefault","convert","unitChange","unitSelect","formUp","Array","prototype","call","node","RegExp","matchUrl","test","location","pathname","autoSizeTextarea","textarea","contains","offset","offsetHeight","clientHeight","newHeight","scrollHeight","maxHeight","innerHeight","textareas","currentTarget","clipboard","copy","copyTrigger","copyElement","copyTarget","execCommand","blur","setTimeout","err","alert","show","merge","defaultsByType","clearTimeout","autoDismissTimeout","messageEl","dismiss","template","lastChild","typeIcon","iconsByType","closeIcon","class","msg","outerHTML","dismissAfter","keyOne","one","callback","cb","timeout","afterAnimation","parentNode","removeChild","success","progress","form-action","shortUnit","aliases","longUnit","size","pluralize","charAt","toUpperCase","slice","alias","toLowerCase","val","num","as","to","unitsTable","long","bit","byte","kilobyte","megabyte","gigabyte","terabyte","b","B","KB","MB","GB","TB","timeToggle","toggler","dialog","ajax","scroll","disablePointer","timeago","diff","watch","Tungsten","form","context","definition","define","amd","this","selectorEngine","win","old","namespaceRegex","nameRegex","addEvent","doc","root","documentElement","W3C_MODEL","eventSupport","ONE","str2arr","s","d","isString","o","isFunction","isObject","buildOptions","originalDefaults","maybeOptions","defaults","hasOwnProperty","nativeEvents","hash","events","i","length","customEvents","isAncestor","element","container","compareDocumentPosition","nodeType","check","related","relatedTarget","mouseenter","condition","mouseleave","mousewheel","navigator","userAgent","commonProps","mouseProps","concat","mouseWheelProps","keyProps","textProps","touchProps","messageProps","stateProps","overOutRegex","typeFixers","reg","fix","newEvent","which","rightClick","pos","x","y","pageX","pageY","clientX","clientY","scrollLeft","scrollTop","typeFixerMap","isNative","arguments","ownerDocument","parentWindow","originalEvent","isBean","l","p","props","fixer","srcElement","returnValue","cancelBubble","stop","stopped","isImmediatePropagationStopped","clone","ne","targetElement","RegEntry","wrappedHandler","fn","args","eargs","apply","findTarget","eventElement","__beanDel","ft","handler","original","namespaces","customType","once","removeListener","eventType","inNamespaces","checkNamespaces","j","c","matches","checkElement","checkOriginal","checkHandler","registry","map","forAll","pfx","list","all","t","substr","has","get","entries","entry","push","put","del","splice","removed","setSelectorEngine","e","r","Error","rootListener","propertyName","listeners","listener","custom","useCapture","attachEvent","detachEvent","rm","originalFn","orgType","handlers","delegate","selector","array","match","fireListener","evt","createEvent","fireEvent","createEventObject","off","typeSpec","k","isTypeStr","defaultOpts","opts","indexOf","types","first","undefined","delfn","fire","from","beanDel","bean","noConflict","cleanup","CollectGarbage","Emitter","obj","mixin","_callbacks","removeAllListeners","removeEventListener","callbacks","emit","len","hasListeners","title","focusedEl","activeElement","dialogEl","dialogTemplate","addText","addButtons","insertAdjacentElement","listen","onShow","continueAction","cancelAction","tab","keyOn","setScope","descriptionEl","description","removeAttribute","continue","follow","continueButton","buttonTemplate","destructive","appendChild","cancel","cancelButton","focusable","last","focused","focus","childOf","triggerButton","close","onDismiss","href","onConfirm","deleteScope","onClose","html","wrap","extractOptions","if","dialogIf","dialogFollow","dialogTitle","dialogDescription","dialogSubmit","dialogContinue","dialogCancel","confirm","dialogConfirm","dialogDestructive","createElement","ready","setEvent","animationEvent","transform","isEmpty","join","registerType","transformArgs","arg","keys","scope","unbind","checkStart","getComputedStyle","getPropertyValue","time","delayedEvent","transformedArgs","newEvents","objEvents","touchstart","tap","a","Object","page","debounce","throttle","repeat","bubbleFormEvents","resize","callbackManager","media","formBubbling","keyOff","camelCaseEventTypes","animationstart","animationend","animationiteration","lowerCaseEventTypes","getAnimationEventTypes","prefixes","animationName","transformAnimationEvents","cssAnimEventTypes","env","supported","formEls","fireBubble","detail","triggered","defaultPrevented","tagName","bubbleOn","bubbleOff","Manager","new","manager","start","toggle","bool","enabled","now","Date","pickFunction","found","candidate","wait","max","leading","trailing","leadingFn","trailingFn","queued","handle","lastCalled","lastInvoked","leadingBlocked","invoke","callType","addToQueue","requestAnimationFrame","loop","removeFromQueue","cancelAnimationFrame","maxPassed","waitReached","debounced","argsStart","queueDelay","complete","parseQuery","query","dimension","result","min","limit","toPx","minWidth","maxWidth","minHeight","matchMedia","addListener","optimizedEventManager","run","running","started","readyAlready","changed","disableAnimation","head","pointerEvents","params","initCustomEvent","Tap","e1","e2","timeout_id","endEvents","touches","validation","progressive","getLabel","inputChange","validate","invalidateField","reset","formCallbacks","registeredForms","newForm","currentStep","steps","stepIndex","nextStep","active","forward","showStep","index","Number","step","direction","disable","revisit","disableOtherFieldsets","firstInput","setNav","nav","enableFieldsets","fieldset","trigger","formEl","fireCallbacks","getCallbacks","formData","filter","Callback","formSelector","watching","nextSelector","backSelector","luxon","scrollTo","fromTop","ease","getNext","matchesSelector","msMatchesSelector","mozMatchesSelector","webkitMatchesSelector","oMatchesSelector","wordCount","str","count","collection","rootEl","FormData","fields","field","append","inOutQuad","inOutCubic","inOutQuint","ts","tc","inOutCirc","sqrt","default","round","getBoundingClientRect","top","pageYOffset","move","amount","position","duration","currentTime","animateScroll","self","testElement","createMethod","method","DOMTokenList","token","_toggle","force","view","elemCtrProto","Element","objCtr","strTrim","arrIndexOf","item","DOMEx","code","DOMException","checkTokenAndGetIndex","ClassList","elem","trimmedClasses","classes","_updateClassName","classListProto","classListGetter","tokens","iter","updated","defineProperty","classListPropDesc","enumerable","configurable","ex","number","__defineGetter__","assign","TypeError","output","source","nextKey","isBefore","date","end","parse","DateTime","isAfter","isBetween","date1","date2","isValid","parsedDate","formats","millis","isNaN","unshift","toISO","format","prettyPrint","zone","setZone","sliders","listening","Slider","refresh","slider","setLabels","setInput","setFill","setState","isTrusted","ranges","data","initialValue","labels","externalLabels","extractData","extractValues","getLabels","values","segments","camelCase","inputClass","inputExists","getLineLabels","mark","getData","label","delimiter","external","labelCount","objectSize","lineLabels","containerHTML","templateHTML","previousSibling","fills","labelTemplate","labelHTML","positionLabel","labelMeta","altKey","meta","attributes","nodeName","nodeValue","getChange","initial","labelElements","internalSelector","externalSelector","stateElements","sliderState","sliderIndex","fill","offsetParent","inputs","labelEls","labelAtIndex","set","object","group","TimeToggle","dateToHTML","DateToHTML","getDate","local","dateString","utc","getUTCFullYear","mo","pad","getUTCMonth","getUTCDate","h","getUTCHours","m","getUTCMinutes","getUTCSeconds","getFullYear","getMonth","getHours","getMinutes","getSeconds","timezone","getTimezoneOffset","tz","Timeago","timeEls","datetime","timeagoStyle","browserSupport","say","just_now","minute_ago","minutes_ago","hour_ago","hours_ago","yesterday","days_ago","last_week","weeks_ago","secs","getTime","mins","floor","hours","days","weeks","Toggle","nextTime","init","toggleEl","mode","setContent","dateHTML","dateTextNode","Toggler","checkboxSelector","radioSelector","selectSelector","hashChange","anchor","getSelectFromOption","selectedIndex","triggerToggling","toggleCheckboxes","setupSelects","setupRadios","actions","selectedOptions","action","dispatch","setClass","selectors","sel","settings","classnames","classname","triggerTogglerEventsOnChildren","state","toggleAction","fullyShow","focusEl","animate","hide","fullyHide","getLeafNodes","hasChildNodes","getElementsByTagName","children","eventName","leafChildNodes","checkboxes","radio","togglerActive","radioName","siblings","parentForm","showSelectors","dataAttributes","addClassSelectors","addClass","removeClass","option","attr","global","compareArray","a1","a2","updateModifierKey","_mods","modifierMap","modifiersMatch","_downKeys","_MODIFIERS","assignKey","_handlers","getScope","mods","clearModifier","resetModifiers","getKeys","getMods","shortcut","unbindKey","multipleKeys","isPressed","getPressedKeyCodes","_scope","mi","previousKey","16","18","17","91","⇧","⌥","⌃","ctrl","control","⌘","_MAP","backspace","clear","enter","return","esc","escape","space","left","up","right","down","delete","home","pageup","pagedown",",",".","/","`","-","=",";","'","[","]","\\","charCodeAt","isUndefined","isNumber","isDate","hasIntl","Intl","DateTimeFormat","hasFormatToParts","formatToParts","maybeArray","thing","isArray","bestBy","arr","by","compare","reduce","best","pair","pick","numberBetween","bottom","floorMod","n","padStart","parseMillis","fraction","NaN","f","parseFloat","roundTo","digits","factor","pow","isLeapYear","year","daysInYear","daysInMonth","month","modMonth","modYear","weeksInWeekYear","weekYear","p1","p2","untruncateYear","parseZoneInfo","offsetFormat","locale","timeZone","intlOpts","hour12","day","hour","minute","modified","timeZoneName","intl","parsed","find","without","signedOffset","offHourStr","offMinuteStr","offHour","parseInt","offMin","normalizeObject","normalizer","ignoreUnknown","normalized","u","v","mapped","timeObject","stringify","JSON","sort","months","monthsNarrow","monthsShort","monthsLong","weekdays","weekdaysNarrow","weekdaysShort","weekdaysLong","eras","erasNarrow","erasShort","erasLong","meridiemForDateTime","dt","meridiems","weekdayForDateTime","weekday","monthForDateTime","eraForDateTime","formatString","knownFormat","filtered","DATE_SHORT","DATE_MED","DATE_FULL","DATE_HUGE","TIME_SIMPLE","TIME_WITH_SECONDS","TIME_WITH_SHORT_OFFSET","TIME_WITH_LONG_OFFSET","TIME_24_SIMPLE","TIME_24_WITH_SECONDS","TIME_24_WITH_SHORT_OFFSET","TIME_24_WITH_LONG_OFFSET","DATETIME_SHORT","DATETIME_MED","DATETIME_FULL","DATETIME_HUGE","DATETIME_SHORT_WITH_SECONDS","DATETIME_MED_WITH_SECONDS","DATETIME_FULL_WITH_SECONDS","DATETIME_HUGE_WITH_SECONDS","makeDTF","dtfCache","second","hackyOffset","dtf","formatted","exec","fMonth","fDay","partsOffset","filled","_formatted$i","typeToPos","hoursMinutesOffset","z","trunc","fixed","minutes","abs","sign","normalizeZone","defaultZone","Zone","lowered","LocalZone","instance","FixedOffsetZone","utcInstance","IANAZone","parseGMTOffset","isValidSpecifier","parseSpecifier","InvalidZone","_typeof","stringifyTokens","splits","tokenToString","_isArray","_i","_ref","literal","systemLocale","sysLocaleCache","computedSys","resolvedOptions","intlConfigString","numberingSystem","outputCalendar","mapMonths","ms","mapWeekdays","listStuff","loc","defaultOK","englishFn","intlFn","listingMode","supportsFastNumbers","startsWith","combineRegexes","_len","regexes","_key","full","combineExtractors","_len2","extractors","_key2","mergedVals","mergedZone","cursor","_ex","_len3","patterns","_key3","_ref3","_ref2","regex","extractor","simpleParse","_len4","_key4","ret","extractISOYmd","extractISOTime","millisecond","extractISOOffset","fullOffset","extractIANAZone","extractISODuration","yearStr","monthStr","dayStr","hourStr","minuteStr","secondStr","millisecondsStr","weekStr","years","seconds","milliseconds","fromStrings","weekdayStr","extractRFC2822","obsOffset","milOffset","obsOffsets","preprocessRFC2822","extractRFC1123Or850","extractASCII","parseISODate","isoYmdRegex","isoTimeExtensionRegex","isoWeekRegex","extractISOWeekData","isoOrdinalRegex","extractISOOrdinalData","isoTimeRegex","parseRFC2822Date","rfc2822","parseHTTPDate","rfc1123","rfc850","ascii","parseISODuration","isoDuration","parseSQL","sqlYmdRegex","sqlTimeExtensionRegex","sqlTimeRegex","dur","alts","conf","conversionAccuracy","Duration","isHighOrderNegative","orderedUnits","matrix","fromMap","fromUnit","toMap","toUnit","conv","added","normalizeValues","vals","reverseUnits","previous","current","friendlyDuration","fromMillis","fromObject","InvalidArgumentError","validateStartEnd","dayDiff","earlier","later","utcDayStart","toUTC","keepLocalTime","startOf","valueOf","highOrderDiffs","differs","results","lowestOrder","highWater","differ","_cursor$plus","delta","plus","_highWater$minus","minus","_diff","_highOrderDiffs","remainingMillis","lowerOrderUnits","_cursor$plus2","_Duration$fromMillis","shiftTo","intUnit","post","deser","fixListRegex","stripInsensitivities","oneOf","strings","startIndex","findIndex","groups","simple","_ref4","unitForToken","two","three","four","oneOrTwo","oneToThree","twoToFour","_ref5","invalidReason","MISSING_FTP","buildRegex","matchIndex","dateTimeFromMatches","toField","Z","G","S","explainFromTokens","Formatter","parseFormat","disqualifyingUnit","_buildRegex","regexString","_match","rawMatches","_ref6","parseFromTokens","_explainFromTokens","dayOfWeek","js","UTC","getUTCDay","computeOrdinal","leapLadder","nonLeapLadder","uncomputeOrdinal","ordinal","table","month0","gregorianToWeek","gregObj","weekNumber","weekToGregorian","weekData","weekdayOfJan4","yearInDays","_uncomputeOrdinal","gregorianToOrdinal","gregData","ordinalToGregorian","ordinalData","_uncomputeOrdinal2","hasInvalidWeekData","validYear","validWeek","validWeekday","hasInvalidOrdinalData","validOrdinal","hasInvalidGregorianData","validMonth","validDay","hasInvalidTimeData","validHour","validMinute","validSecond","validMillisecond","possiblyCachedWeekData","clone$1","inst","fixOffset","localTS","utcGuess","o2","o3","tsToObj","getUTCMilliseconds","objToLocalTS","setUTCFullYear","objToTS","adjustTime","oPre","quarters","millisToAdd","_fixOffset","parseDataToDateTime","parsedZone","interpretationZone","invalid","UNPARSABLE$1","toTechFormat","create","Locale","allowZ","forceSimple","formatDateTimeFromString","toTechTimeFormat","_ref$suppressSeconds","suppressSeconds","_ref$suppressMillisec","suppressMilliseconds","_ref$includeOffset","includeOffset","_ref$includeZone","includeZone","_ref$spaceZone","spaceZone","fmt","normalizeUnit","weeknumber","weeksnumber","weeknumbers","weekyear","weekyears","InvalidUnitError","quickDT","orderedUnits$1","defaultUnitValues","tsNow","Settings","offsetProvis","_objToTS","friendlyDateTime","dateTimeish","fromJSDate","d2","constructor","classCallCheck","Constructor","createClass","defineProperties","descriptor","writable","protoProps","staticProps","inherits","subClass","superClass","setPrototypeOf","__proto__","possibleConstructorReturn","ReferenceError","LuxonError","_Error","InvalidDateTimeError","_LuxonError","reason","InvalidIntervalError","_LuxonError2","InvalidDurationError","_LuxonError3","ConflictingSpecificationError","_LuxonError4","_LuxonError5","_LuxonError6","ZoneIsAbstractError","_LuxonError7","offsetName","equals","otherZone","singleton","_Zone","_this","zoneName","valid","isValidZone","specifier","fYear","fHour","fMinute","fSecond","asUTC","asTS","singleton$1","singleton$2","defaultLocale","defaultNumberingSystem","defaultOutputCalendar","throwOnInvalid","resetCaches","resetCache","tokenToObject","D","DD","DDD","DDDD","tt","ttt","tttt","T","TT","TTT","TTTT","ff","fff","ffff","F","FF","FFF","FFFF","formatOpts","systemLoc","currentFull","bracketed","formatWithSystemDefault","redefaultToSystem","dtFormatter","formatDateTime","formatDateTimeParts","padTo","numberFormatter","knownEnglish","string","extract","formatOffset","isOffsetFixed","RangeError","meridiem","standalone","maybeMacro","macro","era","outputCal","offsetNameShort","offsetNameLong","quarter","formatDurationFromString","_this2","tokenToField","realTokens","collapsed","lildur","SimpleNumberFormatter","PolyDateFormatter","universal","realIntlOpts","toJSDate","tokenFormat","numbering","specifiedLocale","weekdaysCache","monthsCache","meridiemCache","eraCache","fastNumbersCached","fromOpts","defaultToEN","hasFTP","isActuallyEn","hasNoWeirdness","getOwnPropertyNames","redefaultToEN","formatStr","_this3","_this4","df","matching","fastNumbers","useGrouping","minimumIntegerDigits","maximumFractionDigits","NumberFormat","other","offsetRegex","isoTimeBaseRegex","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","INVALID","UNPARSABLE","lowOrderMatrix","casualMatrix","daysInYearAccurate","daysInMonthAccurate","accurateMatrix","reverse","config","accurate","fromISO","text","_parseISODuration","week","toFormat","toObject","includeConfig","norm","normalize","negate","toJSON","inspect","_iterator2","_isArray2","_i2","reconfigure","neg","built","accumulated","lastUnit","_iterator3","_isArray3","_i3","own","ak","negated","_iterator4","_isArray4","_i4","_iterator5","_isArray5","_i5","INVALID$1","Interval","fromDateTimes","builtStart","builtEnd","after","before","_string$split","toDuration","hasSame","dateTime","splitAt","dateTimes","sorted","splitBy","divideEqually","numberOfParts","overlaps","abutsStart","abutsEnd","engulfs","intersection","union","intervals","_intervals$sort$reduc","sofar","final","xor","_Array$prototype","currentCount","ends","flattened","difference","dateFormat","_ref4$separator","separator","Info","hasDST","proto","isValidIANAZone","_ref$locale","_ref$numberingSystem","_ref$outputCalendar","monthsFormat","_ref2$locale","_ref2$numberingSystem","_ref2$outputCalendar","_ref3$locale","_ref3$numberingSystem","weekdaysFormat","_ref4$locale","_ref4$numberingSystem","_ref5$locale","_ref6$locale","features","intlTokens","zones","INVALID$2","INVALID_INPUT","UNSUPPORTED_ZONE","defaultWeekUnitValues","defaultOrdinalUnitValues","orderedWeekUnits","orderedOrdinalUnits","unchanged","zoneToUse","containsOrdinal","containsGregorYear","containsGregorMD","containsGregor","definiteWeekDef","useWeekData","defaultValues","objNow","foundFirst","higherOrderInvalid","gregorian","_objToTS2","tsFinal","offsetFinal","_parseISODate","fromRFC2822","_parseRFC2822Date","fromHTTP","_parseHTTPDate","fromFormat","_options$locale","_options$numberingSys","localeToUse","_parseFromTokens","fromString","fromSQL","_parseSQL","resolvedLocaleOpts","_Formatter$create$res","calendar","toLocal","_ref4$keepLocalTime","_ref4$keepCalendarTim","keepCalendarTime","setLocale","settingWeekStuff","mixed","_objToTS3","normalizedUnit","q","ceil","endOf","_startOf$plus","toLocaleString","toLocaleParts","toISODate","toISOTime","toISOWeekDate","_ref6$suppressMillise","_ref6$suppressSeconds","_ref6$includeOffset","toRFC2822","toHTTP","toSQLDate","toSQLTime","_ref7","_ref7$includeOffset","_ref7$includeZone","toSQL","toMillis","otherDateTime","otherIsLater","diffed","diffNow","until","inputMs","fromFormatExplain","_options$locale2","_options$numberingSys2","fromStringExplain","noop","serialize","pairs","pushEncodedKeyValuePair","subkey","encodeURIComponent","parseString","decodeURIComponent","parseHeader","line","lines","pop","isJSON","mime","parts","Response","req","xhr","responseType","responseText","statusText","_setStatusProperties","status","header","headers","getAllResponseHeaders","getResponseHeader","_setHeaderProperties","_parseBody","response","Request","url","_query","_header","res","rawResponse","statusCode","new_err","request","warn","requestBase","bind","getXHR","XMLHttpRequest","protocol","ActiveXObject","serializeObject","json","xml","urlencoded","form-data","application/x-www-form-urlencoded","application/json","ct","statusType","info","ok","clientError","serverError","toError","accepted","noContent","badRequest","unauthorized","notAcceptable","notFound","forbidden","_responseType","accept","auth","user","pass","btoa","username","password","attach","file","filename","_getFormData","_formData","_callback","crossDomainError","crossDomain","_timeoutError","_timeout","_appendQueryString","_data","onreadystatechange","timedout","_aborted","handleProgress","total","percent","loaded","onprogress","upload","_timer","abort","open","_withCredentials","withCredentials","_isHost","contentType","_serializer","setRequestHeader","send","patch","_parser","then","resolve","reject","_fullfilledPromise","Promise","innerResolve","innerReject","catch","getHeader","unset","redirects","_maxRedirects","RequestConstructor"],"mappings":"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AIlBsC,QAAOC,QAAUkc;;ACjBjB,GAAI6F,YAAazhB,QAAS,oBACtB0hB,YAAc1hB,QAAS,qBACvB2hB,SAAW3hB,QAAS,mBACpB4K,KAAO5K,QAAS,cAChB4hB,YAAc5hB,QAAS,qBAC3BA,SAAS,eAETP,OAAOC,SAELmiB,SAAUJ,WAAWI,SACrBC,gBAAiBL,WAAWK,gBAC5B7iB,KAAMyiB,YAAYziB,KAClB0iB,SAAUA,SACV/W,KAAMA,KACNgX,YAAaA;;ApCdf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AmCvFA,QAASG,SAEPC,eAAkB/iB,SAClBgjB,mBAIF,QAASC,SAASnX,GAoChB,QAASoX,KAAmB,MAAOC,GAAOC,GAC1C,QAASC,KAAmB,MAAOF,GAAOC,EAAY,GACtD,QAASE,KAAmB,MAAOJ,OAAkBA,IAAcnhB,SAGnE,QAASwhB,KACPC,EAAUJ,EAAY,GASxB,QAASI,GAAWC,GAElBA,EAAQC,OAAQD,EAGhB,IAAIE,GAAOR,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AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AmCtEAziB,OAAOC,QAAU;;AlCAjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AmCrUAM,QAAS,yBACT,IAAI+G,OAAW/G,QAAS,8BACpBR,MAAWQ,QAAS,iBACpBikB,MAAWjkB,QAAS,SACpBib,KAAWlU,MAAM/G,QAAS,cAAgBikB,OAC1CC,SAAWlkB,QAAS,kBACpBmkB,QAAWnkB,QAAS,iBACpBokB,KAAWpkB,QAAS,cAEpBQ,SAEFhB,MAAOA,MACP0kB,SAAUA,SACVC,QAASA,QACTpd,MAAOA,MACPqd,KAAMA,KACNnJ,KAAMA,KAGN1W,WAAY,SAAWpD,EAAIsT,GACzB,KAAQtT,GAAMA,IAAOrD,SAAUqD,EAAKA,EAAGiH,WACrC,GAAK5H,QAAQ2R,QAAShR,EAAIsT,GAAa,MAAOtT,EAEhD,QAAO,GAGTwX,QAAS,SAAWxX,EAAI5D,GACtB,KAAQ4D,GAAMA,IAAOrD,SAAUqD,EAAKA,EAAGiH,WACrC,GAAKjH,GAAM5D,EAAS,OAAO,CAE7B,QAAO,GAIT8mB,QAAS,SAAUljB,EAAIsT,GACrB,KAAQtT,GAAMA,IAA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","file":"bundle.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})","var toolbox = require( 'compose-toolbox' ),\n Event = toolbox.event,\n getLabel = require( './get-label'),\n inputChange = require( './input-change' ),\n Selector = require( './selector' )\n\nfunction diffForm( event ) {\n var form = event.currentTarget\n\n var diffs = [],\n diffEl = document.querySelector( form.dataset.diffTarget )\n\n if ( diffEl == null ) { return }\n\n initDiffIds( form )\n\n toolbox.each( form.querySelectorAll( '.changed-value' ), function( el ) {\n var diff = diffInput( el )\n\n // Only show one input diff per label\n // If diffs already contains this label, do not add it.\n if ( !diffs.find( d => d.label == diff.label ) ) diffs.push( diff )\n })\n\n if ( diffs.length == 0 ) \n diffEl.innerHTML = ''\n else \n diffEl.innerHTML = `<table class='input-diffs'>${ diffs.map( diffRow ).join('') }</table>`\n\n toggleDiffEls( form )\n}\n\nfunction toggleDiffEls( form ) {\n var diffEl = document.querySelector( form.dataset.diffTarget )\n if ( diffEl ) {\n\n var elementsToToggle = toolbox.slice( document.querySelectorAll( diffEl.dataset.hideWhenEmpty ))\n elementsToToggle.push( diffEl )\n\n toolbox.each( elementsToToggle, el => {\n el.classList.toggle( 'form-diff-hidden', diffEl.children.length == 0 )\n })\n }\n}\n\n// Create a diff table row\nfunction diffRow ( diff ) {\n\n var row = `<tr class='input-diff ${diff['class'] || ''}' data-diff-name='${diff.name}'>`\n\n // Add label and diff note\n row += `<td class='input-diff-label'><span>${diff.label}</span>`\n if (diff.note) row += ` <span class='diff-note'>${diff.note}</span>`\n row += \"</td>\"\n\n // Add initial value code cell\n row += diffCell( diff.initial, 'initial' )\n\n // Add arrow marker\n row += \"<td class='input-diff-marker'><span>→</span></td>\"\n\n // Add current value code cell\n row += diffCell( diff.value, 'value' )\n row += `<td class='input-diff-undo'><span><button class='form-diff-button' type='button' aria-label='Reset input' data-reset-input='${diff.selector}'>✕</button></span></td>`\n\n return row + \"</tr>\"\n}\n\nfunction diffCell (value, name) {\n var tdClass = `input-diff-${name}`\n if ( !value || value == 'no selection' ) tdClass += ' null-value'\n\n return `<td class='${tdClass}'><code>${( value || 'null' )}</code></td>`\n}\n\n// Add unique ids for each input in a form\nfunction initDiffIds( form ) {\n if ( form.dataset.diffIds ) return\n\n toolbox.each( form.querySelectorAll( Selector ), ( el, index ) => {\n el.dataset.formDiffId = `form-diff-${randID()}-${index}`\n })\n\n form.dataset.diffIds = true\n}\n\nfunction randID () {\n return Math.random().toString(36).substring(3)\n}\n\n// Returns: { input: input element, initial: 'old value', value: 'new value' }\nfunction diffInput( input ) {\n var diff = {\n initial: [],\n value: [],\n name: [],\n selector: []\n },\n inputs\n\n var label = toolbox.getClosest( input, 'label' )\n var form = toolbox.getClosest( input, 'form' )\n\n if ( label ) {\n // Get text label from the first input in a label\n diff.label = getLabel.text( label.querySelector( Selector ) )\n\n // When there are multiple inputs under a single label\n // Group those input values in the form diff and treat\n // them as a single value\n var labelInputs = toolbox.slice( label.querySelectorAll( Selector ) )\n\n // If multiple inputs are under a single label, use those\n // otherwise use input as an array (to simplify this)\n inputs = ( labelInputs.length > 0 ) ? labelInputs : [ input ]\n } else {\n inputs = [ input ]\n }\n\n diff.label = diff.label || getLabel.text( input ) || input.getAttribute( 'name' )\n\n toolbox.each( inputs, input => {\n\n if ( input.type == 'range' && input.dataset.values ) {\n diff.initial.push( input.dataset.values.split(',')[input.dataset.initialValue] )\n diff.value.push( input.dataset.values.split(',')[input.value] )\n\n // Get select label names (rather than values) if present\n } else if ( input.tagName == 'SELECT' ) {\n\n // Show option labels instead of values if present\n var options = {}\n toolbox.each(input.children, o => {\n options[o.value] = o.value ? o.text : 'no selection'\n })\n\n diff.initial.push( options[ input.dataset.initialValue ] || input.dataset.initialValue )\n diff.value.push( options[ input.value ] || input.value )\n\n // Get radio label names (rather than values) if present\n } else if ( input.type == 'radio' ) {\n\n diff.label = getLabel.legend( input ) || diff.label\n\n var radioInputs = form.querySelectorAll( `input[name=\"${input.name}\"]` )\n var radioInitial, radioValue\n\n radioInputs.forEach( radio => {\n if ( radio.dataset.initialValue == 'true' ) radioInitial = getLabel.text( radio )\n if ( radio.checked ) diff.value.push( getLabel.text( radio ) )\n })\n\n diff.initial.push( radioInitial || 'no selection' )\n\n // Track checked state for checkboxes (rather than value)\n } else if ( input.type == 'checkbox' ) {\n diff.initial.push( input.dataset.initialValue )\n diff.value.push( input.checked )\n } else {\n diff.initial.push( input.dataset.initialValue )\n diff.value.push( input.value )\n }\n\n diff.note = input.dataset.diffNote\n diff['class'] = input.dataset.diffClass\n diff.name.push( input.name )\n diff.selector.push( input.dataset.formDiffId )\n })\n\n diff.initial = diff.initial.join(' ')\n diff.value = diff.value.join(' ')\n diff.name = diff.name.join(' ')\n diff.selector = diff.selector.map( s => `[data-form-diff-id=\"${s}\"]` ).join(', ')\n\n return diff\n}\n\n\nfunction watch () {\n Event.change(()=> {\n inputChange.watch()\n Event.on( document, 'change', 'form', Event.debounce( diffForm, 100 ) )\n\n // Hide empty form-diffs\n toolbox.each( document.querySelectorAll( 'form[data-diff-target]' ), toggleDiffEls )\n\n if ( !document.querySelector( '#form-diff-hidden' ) )\n document.head.insertAdjacentHTML('beforeend', '<style id=\"form-diff-hidden\">.form-diff-hidden{ display: none }</style>')\n })\n}\n\nmodule.exports = {\n watch: watch\n}\n","var toolbox = require( 'compose-toolbox' )\nvar Selector = require( './selector' )\n\nfunction getInput ( input ) {\n if ( typeof input == 'string' ) input = document.querySelector( input )\n return input\n}\n\nfunction getLabel ( input ) {\n\n input = getInput( input )\n if (!input) return\n\n // Label wraps input\n var label = toolbox.getClosest( input, 'label' ) || document.querySelector( `label[for=\"${input.id}\"]` )\n\n return label\n}\n\nfunction getAriaLabel( input ) {\n input = getInput( input ); if (!input) return\n var label = input.getAttribute('aria-label')\n var labelledBy = input.getAttribute( 'aria-labelledby' )\n\n if ( !label && labelledBy ) {\n\n // aria-labelledby='someID anotherID' must read multiple elements text content.\n // This creates a selector (prepending the '#' before each) to find the labels.\n //\n var selector = labelledBy.split(' ').map( name => '#'+name )\n\n var labelText = Array.prototype.map.call( selector, s => { \n var el = document.querySelector( s )\n if ( el ) return el.textContent\n else return false\n }).filter( e => e != false )\n\n if ( labelText ) label = labelText.join(' ')\n }\n\n return label\n}\n\n// Are inputs in a fieldset with a legend?\n// Use that as the label text\nfunction getLegendText ( input ) {\n input = getInput( input ); if (!input) return\n var legendText\n\n var fieldset = toolbox.getClosest( input, 'fieldset' )\n\n if ( fieldset ) {\n var legend = fieldset.querySelector( 'legend' )\n if ( legend ) legendText = legend.textContent.trim()\n }\n\n return legendText\n}\n\n\nfunction getLabelText ( input ) {\n input = getInput( input ); if (!input) return\n\n var label = getLabel( input )\n\n // Grab text from input aria-label, aria-labelledby\n var labelText = getAriaLabel( input )\n\n // Use or label.textContent, or input placeholder=\"\"\n if ( !labelText ) {\n if (label) labelText = label.textContent\n\n else labelText = input.getAttribute( 'placeholder' )\n }\n\n if ( labelText ) return labelText.trim()\n}\n\ngetLabel.text = getLabelText\ngetLabel.legend = getLegendText\n\nmodule.exports = getLabel\n","var toolbox = require( 'compose-toolbox' ),\n Event = toolbox.event,\n getLabel = require( './get-label' ),\n inputSelectors = require( './selector' ),\n watching = false\n\nfunction inputInit( input ) {\n input.classList.toggle( 'empty', !input.value.trim().length )\n if ( input.type == 'radio' || input.type == 'checkbox' ) {\n input.dataset.initialValue = input.checked\n } else {\n input.dataset.initialValue = input.value\n }\n}\n\nfunction inputChange( input ) {\n // Allow calling from event handler\n var input = ( input.target || input )\n\n // If element is empty (or contains only whitespace)\n // Add empty class\n input.classList.toggle( 'empty', !input.value.trim().length )\n\n changeClasses( input )\n\n var form = toolbox.getClosest( input, 'form' )\n if ( form ) {\n Event.fire( form, 'change' )\n }\n}\n\nfunction changeClasses( input, recursive ) {\n var changed\n var defaulted\n\n if ( input.type == 'radio' && !recursive ) {\n var form = toolbox.getClosest( input, 'form' )\n if ( form ) {\n return Array.prototype.forEach.call( form.querySelectorAll( `[name='${input.name}']` ), e => {\n changeClasses( e, true )\n })\n } \n } else if ( input.type == 'checkbox' || input.type == 'radio' ) {\n changed = String( input.checked ) != input.dataset.initialValue\n } else {\n changed = input.value != input.dataset.initialValue\n }\n\n input.classList.toggle( 'changed-value', changed )\n \n // Remove all defaulted value classnames on an input change\n input.classList.remove( 'defaulted-value' )\n\n var label = getLabel( input )\n\n if ( label ) {\n var hasChangedInputs = label.querySelector( '.changed-value' ) || input.classList.contains( 'changed-value' )\n label.classList.toggle( 'input-changed-value', hasChangedInputs )\n\n // Remove all defaulted value classnames on an input change\n toolbox.each( label.querySelectorAll( '.defaulted-value' ), el => el.classList.remove( 'defaulted-value' ) )\n label.classList.remove( 'input-defaulted-value' )\n }\n}\n\n\nfunction watch () {\n if ( watching ) { return }\n // Initialize input state\n Event.change( function() {\n toolbox.each( document.querySelectorAll( inputSelectors ), inputInit )\n })\n\n // Set input state on input\n Event.on( document, 'input', inputSelectors, inputChange )\n\n // Form.reset() doesn't fire input events. This ensures those events are fired.\n Event.on( document, 'click', '[type=reset]', resetForm )\n\n watching = true\n}\n\n\nfunction resetForm(event) {\n var form = toolbox.getClosest(event.target, 'form')\n\n Event.delay( function() {\n toolbox.each(form.querySelectorAll('input.input-changed, select.input-changed, textarea.input-changed '), function( el ) {\n Event.fire( el, 'input' )\n })\n }, 100 )\n}\n\nmodule.exports = {\n watch: watch\n}\n","var Event = require( 'compose-event' ),\n toolbox = require( 'compose-toolbox' ),\n getLabel = require( './get-label' )\n\nfunction resetValue( event ) {\n event.preventDefault()\n\n var inputs = document.querySelectorAll( event.currentTarget.dataset.resetInput )\n\n toolbox.each( inputs, i => {\n setValue( i, i.dataset.initialValue )\n })\n}\n\nfunction setValue(input, value) {\n // Trigger event watchers that the input was changed.\n if ( input.value != value ) {\n input.value = value\n Event.fire( input, 'input' )\n\n var form = toolbox.getClosest( input, 'form' )\n Event.fire( form, 'change' )\n }\n}\n\nfunction restoreDefault( event ) {\n event.preventDefault()\n\n var targets = document.querySelectorAll( event.currentTarget.dataset.restoreDefault )\n\n toolbox.each( targets, el => {\n\n // Restore to default a single element\n if ( el.dataset.default ) {\n setDefault( el )\n } else if ( el.children.length > 0 ) {\n\n // Restore all inputs to default when\n // data-restore-default points to a parent element\n toolbox.each( el.querySelectorAll( '[data-default]' ), setDefault )\n }\n })\n}\n\nfunction setDefault( el ) {\n if ( el.type == 'radio' || el.type == 'checkbox' ) {\n el.checked = true\n Event.fire( el, 'input' )\n } else {\n setValue( el, el.dataset.default )\n }\n\n el.classList.add( 'defaulted-value' )\n\n var label = getLabel( el )\n if (label) label.classList.add( 'input-defaulted-value' )\n}\n\nfunction resetForm(event) {\n var form = toolbox.getClosest( event.target, 'form' )\n Event.delay( function() {\n toolbox.each( form.querySelectorAll( '.changed-value' ), function( el ) {\n Event.fire( el, 'input' )\n })\n }, 100)\n}\n\nEvent.on( document, 'click', '[data-reset-input]', resetValue )\nEvent.on( document, 'click', '[data-restore-default]', restoreDefault )\nEvent.on( document, 'click', '[type=reset]', resetForm )\n","// Dependencies\nvar toolbox = require( 'compose-toolbox' ),\n Event = toolbox.event,\n tTime = toolbox.time,\n getClosest = toolbox.getClosest,\n wordCount = toolbox.wordCount,\n textSelectors = '[required]';\n\n// Does this browser support HTML5 validation?\nfunction supported () {\n\n return typeof document.createElement( 'input' ).checkValidity === 'function'\n\n}\n\nvar invalidHandler = Event.callback.new( function( event ) { \n event.preventDefault() \n event.stopPropagation() \n})\n\n// Watch for events ( if validation is suported )\nEvent.ready( function(){\n\n if ( supported() ) { \n\n Event.bubbleFormEvents()\n\n document.addEventListener( 'invalid', invalidHandler, true )\n\n Event.on( document.body, 'click', '[type=submit]', submit )\n\n Event.on( document, 'validate', 'form', function( event ) { \n validateForm( event.target )\n })\n\n // Ensure all required inputs have aria-requrired attributes\n toolbox.slice( document.querySelectorAll( '[required]' ) ).forEach( function( element ) { \n element.setAttribute( 'aria-required', true )\n })\n\n // Watch input events\n Event.on( document, 'blur', '[required]', checkValidation )\n Event.on( document, 'keydown', '[required]', Event.debounce( checkValidation, 200 ) )\n Event.on( document, 'input', 'select[required]', Event.debounce( checkValidation, 200 ) )\n Event.on( document, 'change', '[type=checkbox][required]', checkValidation )\n\n }\n})\n\nfunction validateForm ( form ) {\n\n // Scoped variables\n var inputs = form.querySelectorAll( '[required]' ),\n invalidInput;\n\n toolbox.slice( inputs ).some( function( input ) {\n\n // if invalid\n if ( !getClosest( input, '[disabled]' ) && !checkInput( input ) ) {\n invalidInput = input\n return true\n }\n })\n\n if ( invalidInput ) { \n\n // Show validation message\n focus( invalidInput )\n showMessage( invalidInput )\n\n return false\n }\n\n // The form is valid, skip it\n else { \n return true \n }\n\n}\n\n// Handler for validation events\nvar checkValidation = Event.callback.new( function( event ) {\n\n if ( checkInput( event.target, event.type ) ) {\n\n // Remove any pre-existing validation message\n hideMessage( event.target )\n }\n\n})\n\n\nfunction checkInput ( input, event ) {\n\n var el = statusEl( input ),\n valid = isValid( input ),\n neutral = event == 'keydown' && !valid;\n\n // Don't trigger invalid style while typing\n if ( neutral && input == document.activeElement ) {\n\n el.classList.remove( 'invalid', 'valid' )\n input.setAttribute( 'aria-invalid', false )\n\n } else {\n\n el.classList.toggle( 'invalid', !valid )\n el.classList.toggle( 'valid', valid )\n input.setAttribute( 'aria-invalid', valid )\n\n }\n\n return valid\n\n}\n\n// Is an input valid?\nfunction isValid ( input ) {\n\n // If element only contains whitespace, strip value\n if ( !input.value.replace( /\\s/g, '' ).length )\n input.value = ''\n\n // Set a custom validation message for word count\n var message = checkValue( input ) || checkLength( input ) || checkTime( input ) || ''\n input.setCustomValidity( message )\n\n var valid = input.checkValidity()\n\n return valid\n\n}\n\n\nfunction checkValue( input ) {\n if ( input.dataset.invalidValue ) {\n\n // Does input value == invalid value? (case insensitive)\n var regexp = escapedRegex( input.dataset.invalidValue, 'i' )\n\n if ( input.value.match( regexp ) ) {\n\n // Remove any standard custom message\n input.dataset.cachedMessage = input.dataset.message\n input.dataset.message = ''\n\n return input.dataset.invalidValueMessage || \"Value '\"+input.value+\"' is not permitted\"\n\n // If not invalid value reset standard validation message\n } else if ( input.dataset.cachedMessage ) {\n\n input.dataset.message = input.dataset.cachedMessage\n input.dataset.cachedMessage = ''\n\n }\n }\n}\n\nfunction escapedRegex( input, options ) {\n var str = input.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&')\n return new RegExp( \"^\" + str + '$', options )\n}\n\nfunction checkLength ( input ) {\n return checkCount( input, 'min' )\n || checkCount( input, 'max' )\n}\n\n// Test custom validation for maximum or minimum words present\nfunction checkCount ( input, limit ) {\n\n var goal = input.dataset[ limit + 'Words' ]\n\n if ( goal ) {\n var phrasing = ( limit == 'min' ) ? 'at least ' : 'no more than ',\n valid = ( limit == 'min' ) ? ( goal <= wordCount(input.value) ) : ( wordCount(input.value) <= goal )\n\n // Return a custom error message\n if ( input.value && !valid )\n return 'Please write ' + phrasing + goal + ' words.'\n }\n\n\n}\n\n// Test custom validation for maximum and minimum time\nfunction checkTime ( input ) {\n var before = input.dataset.beforeTime,\n after = input.dataset.afterTime\n\n if ( before || after || input.dataset.validateTime ) {\n var zone = input.dataset.zone || 'utc',\n options = { zone: zone },\n timeValue = tTime.parse( input.value, options ),\n err = '',\n isAfter, afterTime, isBefore, beforeTime\n\n // Enure that the time value is actually \n if ( !timeValue ) return \"Please enter a valid date string: YYYY-MM-DD HH:MM:SS\"\n\n if ( before ) {\n beforeTime = tTime.parse( before )\n\n if ( !beforeTime ) {\n err = `data-before-time='${before}' is not a valid date string`\n console.error( err )\n return err\n }\n }\n\n if ( after ) {\n afterTime = tTime.parse( after )\n\n if ( !afterTime ) {\n err = `data-after-time='${after}' is not a valid date string`\n console.error( err )\n return err\n }\n }\n\n if ( beforeTime && afterTime ) {\n if ( !tTime.isBetween( timeValue, afterTime, beforeTime ) ) {\n return \"Please enter a time between \"+formatDate( afterTime, options )+\" and \"+formatDate( beforeTime, options )\n }\n } \n\n else if ( afterTime ) {\n if ( !tTime.isAfter( timeValue, afterTime ) ) { \n return \"Please enter a time after \"+formatDate( afterTime, options )\n }\n }\n\n else if ( beforeTime ) {\n if ( !tTime.isBefore( timeValue, beforeTime ) ) { \n return \"Please enter a time before \"+formatDate( beforeTime, options )\n }\n }\n }\n}\n\nfunction formatDate( date, options ) {\n return tTime.prettyPrint( date, options ).replace( ' Z', '')\n}\n\n\n// If input is nested in a label, treat the label as the\n// target for assigning status (class names and messages).\nfunction statusEl ( input ) {\n\n return getClosest( input, 'label' ) || input\n\n}\n\n// Focus() if invalid element is not hidden\n// or Focus its immediate sibling (mostly used for upload buttons)\nfunction focus ( el ) {\n\n el = ( el.style.display !== 'none' ) ? el : el.nextSibling\n el.focus()\n\n}\n\n// Submission validation handler function\nfunction submit ( event ) {\n\n var form = ( event.target.tagName == \"FORM\" ) ? event.target : getClosest( event.target, 'form')\n\n // Skip validation if no invalid inputs found\n if ( !validateForm( form ) ) {\n\n // Pause keydown/blur triggers for the next second to avoid neutral empty style\n checkValidation.stop()\n Event.delay( checkValidation.start, 500 )\n\n // Stop the submission event\n event.preventDefault()\n event.stopImmediatePropagation()\n\n }\n\n}\n\nfunction invalidateField ( el, message ) {\n if ( el && el.value ) {\n el.dataset.invalidValue = el.value\n if ( message )\n el.dataset.invalidValueMessage = message\n }\n}\n\nfunction hideMessage ( el ) {\n\n var form = getClosest( el, 'form' ),\n msg = form.querySelector( '.validation-message' )\n\n if ( msg ) msg.parentNode.removeChild( msg )\n\n}\n\n\n// Validation message handler function\nfunction showMessage ( el ) {\n\n //hideMessage( el )\n\n var label = getClosest( el, 'label' ),\n message = el.dataset.message || el.validationMessage\n\n if ( label ) {\n var existingMessage = label.querySelector( '.validation-message-text' )\n\n if ( !existingMessage ) {\n label.insertAdjacentHTML( 'beforeend', '<span class=\"validation-message\"><span class=\"validation-message-text\" role=\"alert\">' + message + '</span></span>' )\n\n } else if ( existingMessage.textContent != message ) {\n existingMessage.innerHTML = message\n }\n }\n\n}\n\n// Public API\nmodule.exports = {\n validate: validateForm,\n invalidateField: invalidateField\n}\n","(function(){\n var names\n\n function attr( source, name ){\n if (typeof source == 'object')\n return name+'=\"'+source.getAttribute(name)+'\" '\n else\n return name+'=\"'+source+'\" ' }\n\n function dasherize( input ) {\n return input.replace(/[\\W,_]/g, '-').replace(/-{2,}/g, '-')\n }\n\n function svgName( name ) {\n return \"svg-\"+dasherize( name )\n }\n\n function use( name, options ) {\n options = options || {}\n var id = dasherize( name )\n var symbol = svgs()[id]\n\n if ( symbol ) {\n var parent = symbol.parentElement\n var prefix = parent.dataset.prefix\n var base = parent.dataset.symbolClass\n\n var svg = document.createRange().createContextualFragment( '<svg><use xlink:href=\"#' + prefix + '-' + id + '\"/></svg>' ).firstChild;\n svg.setAttribute( 'class', base + ' ' + prefix + '-' + id + ' ' + ( options.class || '' ).trim() )\n svg.setAttribute( 'viewBox', symbol.getAttribute( 'viewBox' ) )\n\n if ( !( options.width || options.height || options.scale ) ) {\n\n svg.setAttribute('width', symbol.getAttribute('width'))\n svg.setAttribute('height', symbol.getAttribute('height'))\n\n } else {\n\n if ( options.width ) svg.setAttribute( 'width', options.width )\n if ( options.height ) svg.setAttribute( 'height', options.height )\n }\n\n return svg\n } else {\n console.error('Cannot find \"'+name+'\" svg symbol. Ensure that svg scripts are loaded')\n }\n }\n\n function svgs(){\n if ( !names ) {\n names = {}\n for( var symbol of document.querySelectorAll( 'svg[id^=esvg] symbol' ) ) {\n names[symbol.dataset.name] = symbol\n }\n }\n return names\n }\n\n var esvg = {\n svgs: svgs,\n use: use\n }\n\n // Handle Turbolinks page change events\n if ( window.Turbolinks ) {\n document.addEventListener( \"turbolinks:load\", function( event ) { names = null; esvg.svgs() })\n }\n\n if( typeof( module ) != 'undefined' ) { module.exports = esvg }\n else window.esvg = esvg\n\n})()","(function(){\n\n function embed() {\n if (!document.querySelector('#esvg-svg-icons')) {\n document.querySelector('body').insertAdjacentHTML('afterbegin', '<svg id=\"esvg-svg-icons\" data-symbol-class=\"svg-symbol\" data-prefix=\"svg\" version=\"1.1\" style=\"height:0;position:absolute\"><symbol id=\"svg-angle-down\" data-name=\"angle-down\" viewBox=\"0 0 27 15\" width=\"27\" height=\"15\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" stroke-linejoin=\"round\" stroke-miterlimit=\"1.414\"><path d=\"M25.304.005c.092.012.116.012.206.036.135.037.263.097.377.177.348.244.545.665.508 1.088-.01.104-.032.207-.068.305-.048.132-.12.254-.21.36-.02.028-.046.053-.07.08l-12 12c-.025.022-.05.047-.077.07-.08.067-.17.123-.264.168-.32.148-.695.148-1.014 0-.095-.045-.184-.1-.264-.17-.027-.02-.052-.046-.077-.07l-12-12C.29 1.98.27 1.966.217 1.89c-.08-.114-.14-.242-.176-.377C-.08 1.066.074.578.428.28.535.19.658.12.788.073.92.025 1.06 0 1.2 0c.246 0 .49.076.69.217.076.053.09.072.16.134l11.15 11.153L24.352.35l.078-.07c.073-.056.09-.073.17-.12.122-.07.255-.118.393-.142.093-.016.116-.014.21-.018l.104.005z\" fill-rule=\"nonzero\"/></symbol><symbol id=\"svg-arrow-down-circle\" data-name=\"arrow-down-circle\" viewBox=\"0 0 33 33\" width=\"33\" height=\"33\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" stroke-linejoin=\"round\" stroke-miterlimit=\"1.414\"><circle cx=\"16.024\" cy=\"16.024\" r=\"16.024\" fill-opacity=\".149\"/><path d=\"M22.218 18.943l-5.243 5.243c-.226.282-.558.48-.95.48-.006 0-.01-.006-.018-.006-.008 0-.013.005-.02.005-.315 0-.63-.12-.87-.36l-5.36-5.362c-.483-.48-.483-1.26 0-1.738.478-.48 1.255-.48 1.737 0l3.3 3.3V9.323c0-.678.55-1.23 1.23-1.23.68 0 1.23.552 1.23 1.23V20.43l3.226-3.225c.48-.48 1.26-.48 1.738 0 .48.48.48 1.258 0 1.738\" fill-rule=\"nonzero\"/></symbol><symbol id=\"svg-arrow-up-circle\" data-name=\"arrow-up-circle\" viewBox=\"0 0 33 33\" width=\"33\" height=\"33\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" stroke-linejoin=\"round\" stroke-miterlimit=\"1.414\"><circle cx=\"16.024\" cy=\"16.024\" r=\"16.024\" fill-opacity=\".149\"/><path d=\"M22.294 14.798c-.24.24-.556.36-.87.36-.315 0-.627-.12-.868-.36l-3.303-3.305V22.68c0 .677-.548 1.23-1.23 1.23-.678 0-1.228-.553-1.228-1.23V11.57l-3.227 3.228c-.482.48-1.26.48-1.738 0-.482-.48-.482-1.258 0-1.737l5.243-5.247c.226-.282.56-.48.95-.48.008 0 .013.006.02.006.008 0 .013-.006.02-.006.327 0 .64.13.868.36l5.364 5.367c.48.48.48 1.26 0 1.738\" fill-rule=\"nonzero\"/></symbol><symbol id=\"svg-backup\" data-name=\"backup\" viewBox=\"0 0 32 32\" width=\"32\" height=\"32\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" stroke-linejoin=\"round\" stroke-miterlimit=\"1.414\"><path d=\"M16.04 23.89c-.905.073-1.812.11-2.706.11C8.047 24 2.484 22.656 0 20.483v2.85c0 3.364 5.856 6 13.334 6 1.358 0 2.66-.088 3.888-.25C16.452 27.787 16 26.28 16 24.667c0-.263.015-.522.04-.778zm-2.707-1.223c1.004 0 1.988-.047 2.943-.13.556-2.19 1.943-4.045 3.807-5.213-2.15.436-4.49.676-6.75.676C8.047 18 2.483 16.656 0 14.483V18c0 2.113 5.947 4.667 13.333 4.667zm0-6c6.106 0 11.5-1.683 13.334-3.44V8.893C23.82 10.807 18.377 12 13.333 12 8.047 12 2.483 10.656 0 8.483V12c0 2.113 5.947 4.667 13.333 4.667zm0-6c6.106 0 11.5-1.683 13.334-3.438V6c0-3.364-5.858-6-13.334-6S0 2.636 0 6c0 2.113 5.948 4.667 13.333 4.667z\" fill-opacity=\".502\"/><path d=\"M28 25.333h-2.667V28c0 .368-.3.667-.666.667-.368 0-.667-.3-.667-.667v-2.667h-2.667c-.368 0-.666-.298-.666-.666 0-.368.298-.667.666-.667H24v-2.667c0-.368.3-.666.667-.666.366 0 .666.298.666.666V24H28c.367 0 .667.3.667.667 0 .368-.3.666-.667.666m-3.333-8c-4.044 0-7.334 3.29-7.334 7.334S20.623 32 24.667 32C28.71 32 32 28.71 32 24.667c0-4.044-3.29-7.334-7.333-7.334\" fill-rule=\"nonzero\"/></symbol><symbol id=\"svg-buttons\" data-name=\"buttons\" viewBox=\"0 0 468 234\" width=\"468\" height=\"234\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" stroke-linejoin=\"round\" stroke-miterlimit=\"1.414\"><path fill=\"#c3cddb\" d=\"M326.9 41c1.6 0 3 1.4 3 3v29.8c0 1.6-1.4 3-3 3H140.8c-1.6 0-3-1.4-3-3V44c0-1.6 1.4-3 3-3h186.1m0-5H140.8c-4.4 0-8 3.6-8 8v29.8c0 4.4 3.6 8 8 8h186.1c4.4 0 8-3.6 8-8V44c0-4.4-3.6-8-8-8z\"/><path fill=\"#8c9ba5\" d=\"M198.7 54.1h70.2v9.6h-70.2z\"/><path fill=\"#dd2f41\" d=\"M327.4 94.1H140.6c-4.2 0-7.7 3.5-7.7 7.7v30.4c0 4.2 3.5 7.7 7.7 7.7h186.7c4.2 0 7.7-3.5 7.7-7.7v-30.4c.1-4.2-3.4-7.7-7.6-7.7zm-58.6 27.7h-70.2v-9.6h70.2v9.6z\"/><path fill=\"#297adf\" d=\"M327.1 152.2H140.9c-4.4 0-7.9 3.6-7.9 7.9V190c0 4.4 3.6 7.9 7.9 7.9h186.2c4.4 0 7.9-3.6 7.9-7.9v-29.9c.1-4.3-3.5-7.9-7.9-7.9zm-58.3 27.6h-70.2v-9.6h70.2v9.6z\"/></symbol><symbol id=\"svg-cards\" data-name=\"cards\" viewBox=\"0 0 468 234\" width=\"468\" height=\"234\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" stroke-linejoin=\"round\" stroke-miterlimit=\"1.414\"><path fill=\"#d6dde7\" d=\"M405.9 36H258.5c-4.5 0-8.1 3.6-8.1 8.1v145.8c0 4.5 3.6 8.1 8.1 8.1h147.4c4.5 0 8.1-3.6 8.1-8.1V44.1c0-4.5-3.6-8.1-8.1-8.1zm-150.4 8.1c0-1.6 1.4-3 3-3h147.4c1.6 0 3 1.4 3 3V156H255.5V44.1zM209.6 40.7c1.6 0 3 1.4 3 3v146.1c0 1.6-1.4 3-3 3H61.9c-1.6 0-3-1.4-3-3v-146c0-1.6 1.4-3 3-3h147.7m0-5.1H61.9c-4.5 0-8.1 3.7-8.1 8.1v146.1c0 4.5 3.7 8.1 8.1 8.1h147.7c4.5 0 8.1-3.7 8.1-8.1V43.8c.1-4.5-3.6-8.1-8.1-8.1z\"/><path fill=\"#fff\" d=\"M401.5 187.1h-53.6c-1.9 0-3.5-1.6-3.5-3.5v-12.7c0-1.9 1.6-3.5 3.5-3.5h53.6c1.9 0 3.5 1.6 3.5 3.5v12.7c0 1.9-1.6 3.5-3.5 3.5z\"/></symbol><symbol id=\"svg-check-circle\" data-name=\"check-circle\" viewBox=\"0 0 32 32\" width=\"32\" height=\"32\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" stroke-linejoin=\"round\" stroke-miterlimit=\"1.414\"><circle cx=\"16\" cy=\"16\" r=\"16\" fill-opacity=\".149\"/><path d=\"M24.925 12.745l-10.22 11.2-7.59-7.588c-.48-.483-.48-1.255 0-1.732.477-.483 1.252-.483 1.732 0l5.776 5.775 8.49-9.307c.457-.502 1.233-.536 1.733-.08.5.455.534 1.232.08 1.732\" fill-rule=\"nonzero\"/></symbol><symbol id=\"svg-cluster\" data-name=\"cluster\" viewBox=\"0 0 32 32\" width=\"32\" height=\"32\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" stroke-linejoin=\"round\" stroke-miterlimit=\"1.414\"><path d=\"M16 32c-.056 0-.113-.002-.17-.005-.112-.007-.224-.02-.335-.04-.332-.06-.653-.18-.942-.354-.13-.078-.256-.167-.373-.266-.055-.047-.108-.096-.16-.147C9.604 26.8 5.2 22.397.813 17.98c-.076-.077-.148-.158-.214-.243-.127-.16-.236-.335-.324-.52-.09-.184-.157-.38-.203-.58C.023 16.43 0 16.215 0 16c0-.214.024-.43.073-.638.046-.2.114-.395.203-.58.088-.184.197-.358.323-.52.065-.084.137-.165.213-.242C5.2 9.604 9.603 5.2 14.02.813c.077-.076.158-.148.243-.214.16-.127.335-.236.52-.324.184-.09.38-.157.58-.203C15.57.023 15.785 0 16 0c.214 0 .43.024.638.073.2.046.395.114.58.203.184.088.358.197.52.323.084.065.165.137.242.213C22.396 5.2 26.8 9.603 31.187 14.02c.076.077.148.158.214.243.127.16.236.335.324.52.09.184.157.38.203.58.05.208.073.423.073.637 0 .214-.024.43-.073.638-.046.2-.114.395-.203.58-.088.184-.197.358-.323.52-.065.084-.137.165-.213.242-4.388 4.416-8.79 8.82-13.207 13.207-.052.05-.105.1-.16.147-.117.1-.242.188-.373.267-.275.166-.578.282-.892.345-.11.022-.223.038-.335.046-.05.005-.102.008-.152.01H16zm0-1.883c.055 0 .11-.005.164-.014.107-.02.21-.057.305-.112.068-.04.13-.087.187-.143 4.412-4.384 8.84-8.755 13.195-13.195.026-.027.052-.056.075-.087.042-.054.077-.113.106-.176.05-.112.08-.234.083-.356.005-.145-.023-.29-.083-.423-.03-.062-.064-.12-.106-.175-.023-.03-.05-.06-.075-.087-4.358-4.442-8.758-8.842-13.2-13.2-.027-.026-.056-.052-.087-.075-.054-.042-.113-.077-.176-.106-.112-.05-.234-.08-.356-.083-.145-.005-.29.023-.423.083-.06.028-.117.062-.17.102-.033.024-.063.05-.092.078-4.442 4.358-8.842 8.758-13.2 13.2l-.08.09c-.04.055-.073.112-.1.173-.06.133-.09.28-.084.424.004.122.032.244.083.355.03.062.064.12.106.175.023.03.05.06.075.087 4.358 4.442 8.758 8.842 13.2 13.2.055.053.116.1.183.14.088.05.184.087.284.106.056.012.112.018.17.02H16z\" fill-opacity=\".502\" fill-rule=\"nonzero\"/><path d=\"M17.482 26.93l-.847.846c-.17.17-.397.263-.635.263s-.466-.095-.635-.264l-11.14-11.14c-.17-.17-.264-.398-.264-.636s.095-.466.264-.635l11.14-11.14c.17-.17.398-.264.636-.264s.466.095.635.264l4.05 4.05v5.456c-.104.03-.205.064-.303.106-.27.116-.517.283-.725.49-.2.195-.362.426-.48.68-.102.22-.17.454-.2.695-.033.248-.025.5.022.745.04.213.11.42.21.614.122.244.288.466.487.654.193.18.416.33.658.438.2.09.412.15.628.18.11.015.22.022.328.023h.062c.11-.004.218-.014.326-.032.215-.036.425-.102.622-.195.243-.115.466-.273.656-.463s.348-.414.464-.657c.095-.2.162-.416.197-.636.038-.24.04-.488.002-.73-.038-.24-.112-.472-.22-.69-.123-.248-.292-.475-.494-.666-.214-.2-.465-.362-.738-.472-.08-.032-.164-.06-.25-.084V9.528l5.838 5.837c.17.17.263.397.263.635s-.095.466-.264.635l-6.64 6.64-4.508-4.51v-6.51c.13-.036.258-.083.38-.14.243-.116.466-.274.657-.464.187-.186.342-.405.457-.643.097-.2.164-.415.2-.634.042-.246.043-.5.005-.745-.036-.24-.11-.472-.218-.69-.125-.248-.293-.475-.496-.666-.214-.2-.465-.362-.737-.472-.144-.058-.294-.1-.447-.13-.15-.027-.306-.04-.46-.04-.15.003-.298.02-.444.05-.156.03-.31.08-.456.142-.27.116-.516.283-.725.49-.198.195-.36.426-.48.68-.102.218-.17.454-.2.695-.032.247-.024.5.023.744.04.214.11.422.21.615.12.24.283.46.478.645.195.186.422.338.668.448.106.047.216.087.328.118v6.768c.002.05 0 .06.01.11.016.09.05.176.104.25.028.04.037.048.07.084l4.693 4.694-1.88 1.88-6.962-6.962v-.81c.13-.036.258-.084.38-.142.244-.115.467-.273.657-.463s.348-.414.464-.657c.094-.2.16-.416.196-.636.038-.24.04-.488.002-.73-.037-.24-.11-.472-.218-.69-.124-.248-.293-.475-.495-.666-.214-.2-.465-.362-.738-.472-.144-.057-.293-.1-.446-.13-.15-.027-.305-.04-.46-.038-.154.002-.307.018-.458.05-.15.032-.3.08-.44.14-.27.116-.518.283-.726.49-.198.195-.362.426-.48.68-.102.22-.17.454-.2.695-.033.248-.025.5.022.745.043.223.118.44.223.64.125.238.29.455.487.638.19.178.41.323.647.43.107.046.217.086.33.117v1.07c0 .04 0 .05.005.09.012.088.044.173.092.25.017.024.035.048.054.07l.03.033 7.146 7.146zm-6.7-9.83c.055 0 .11-.005.166-.014.096-.014.19-.042.278-.08.103-.047.2-.11.283-.184.09-.08.168-.176.228-.28.05-.093.09-.19.114-.293.03-.13.035-.26.02-.39-.015-.11-.046-.217-.092-.318-.055-.12-.133-.23-.227-.324-.098-.096-.213-.174-.34-.228-.13-.057-.274-.087-.418-.09-.145 0-.29.025-.423.08-.125.05-.24.123-.34.215-.097.09-.178.2-.237.317-.05.1-.083.205-.1.313-.02.13-.018.262.007.39.02.1.055.2.102.29.053.102.123.196.204.277.087.085.187.156.297.21.09.042.183.073.28.09.055.01.11.015.167.017h.03zm10.53 0c.056 0 .112-.005.167-.014.095-.014.19-.042.277-.08.107-.05.206-.114.293-.192.087-.08.16-.172.22-.273.05-.09.087-.185.11-.285.032-.13.04-.264.022-.396-.014-.11-.045-.217-.09-.318-.056-.12-.134-.23-.228-.324-.098-.096-.213-.174-.34-.228-.13-.057-.274-.087-.418-.09-.145 0-.29.025-.423.08-.126.05-.24.123-.34.215-.097.09-.178.2-.237.317-.05.1-.083.205-.1.313-.02.13-.018.262.007.39.02.106.058.208.108.302.058.105.13.2.218.283.082.077.176.142.278.19.09.044.183.075.28.092.055.01.11.015.167.017h.028zM16 11.084c.056 0 .112-.004.168-.013.096-.014.19-.042.278-.08.103-.047.198-.11.283-.184.09-.08.167-.176.227-.282.05-.09.09-.185.112-.285.03-.128.037-.263.02-.395-.014-.11-.044-.217-.09-.317-.056-.12-.133-.23-.228-.324-.097-.096-.213-.174-.34-.23-.13-.055-.274-.085-.418-.087-.144-.002-.29.024-.423.078-.124.05-.24.124-.338.216-.097.092-.178.2-.237.318-.05.1-.083.204-.1.313-.02.13-.02.263.007.39.02.106.057.208.108.303.057.107.133.205.222.287.08.076.173.14.272.187.09.044.188.075.288.092.053.008.106.013.16.015H16z\"/></symbol><symbol id=\"svg-color-wheel\" data-name=\"color-wheel\" viewBox=\"0 0 468 234\" width=\"468\" height=\"234\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" stroke-linejoin=\"round\" stroke-miterlimit=\"1.414\"><path fill=\"#2ac84f\" d=\"M306.8 81.8c-7.9-16.1-20.9-29.1-37-37-.8.8-1.4 1.8-1.9 2.8l-11.3 26.2-11.2 26.2c-2.1 4.8 1.4 8.2 6.2 6.2l26.2-11.3L304 83.6c1-.4 2-1.1 2.8-1.8z\"/><path fill=\"#59a702\" d=\"M310.6 91.1c-1.1 0-2.2.3-3.3.7l-26.5 10.6-26.5 10.6c-4.9 1.9-4.9 6.8 0 8.7l26.5 10.6 26.5 10.6c1.1.4 2.2.6 3.3.7 2.8-8.2 4.3-17 4.3-26.2s-1.5-18.1-4.3-26.3z\"/><path fill=\"#efc102\" d=\"M306.8 152.7c-.8-.8-1.8-1.4-2.8-1.9l-26.2-11.3-26.2-11.3c-4.8-2.1-8.2 1.4-6.2 6.2l11.3 26.2 11.3 26.2c.5 1.1 1.1 2 1.9 2.8 15.9-7.8 29-20.8 36.9-36.9z\"/><path fill=\"#f69524\" d=\"M234.3 197.9c9.2 0 18-1.5 26.2-4.3 0-1.1-.3-2.2-.7-3.3l-10.6-26.5-10.6-26.5c-1.9-4.9-6.8-4.9-8.7 0l-10.6 26.5-10.6 26.5c-.4 1.1-.6 2.2-.7 3.3 8.3 2.8 17.1 4.3 26.3 4.3z\"/><path fill=\"#f96623\" d=\"M217.1 128.3l-26.2 11.3-26.2 11.3c-1.1.5-2 1.1-2.8 1.9 7.9 16.1 20.9 29.1 37 37 .8-.8 1.4-1.8 1.9-2.8l11.3-26.2 11.3-26.2c1.9-4.9-1.5-8.3-6.3-6.3z\"/><path fill=\"#a81d27\" d=\"M214.3 112.9l-26.5-10.6-26.5-10.6c-1.1-.4-2.2-.6-3.3-.7-2.8 8.2-4.3 17-4.3 26.2s1.5 18 4.3 26.2c1.1 0 2.2-.3 3.3-.7l26.5-10.6 26.5-10.6c4.8-1.8 4.8-6.7 0-8.6z\"/><path fill=\"#a346ce\" d=\"M161.8 81.8c.8.8 1.8 1.4 2.8 1.9L190.8 95l26.2 11.3c4.8 2.1 8.2-1.4 6.2-6.2L212 73.8l-11.3-26.2c-.5-1.1-1.1-2-1.9-2.8-16 7.8-29.1 20.9-37 37z\"/><path fill=\"#297adf\" d=\"M234.3 36.6c-9.2 0-18 1.5-26.2 4.3 0 1.1.3 2.2.7 3.3l10.6 26.5L230 97.2c1.9 4.9 6.8 4.9 8.7 0l10.6-26.5 10.6-26.5c.4-1.1.6-2.2.7-3.3-8.3-2.8-17.1-4.3-26.3-4.3z\"/></symbol><symbol id=\"svg-copy\" data-name=\"copy\" viewBox=\"0 0 32 32\" width=\"32\" height=\"32\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" stroke-linejoin=\"round\" stroke-miterlimit=\"1.414\"><g fill-rule=\"nonzero\"><path d=\"M22.667 4.667c0-.368-.3-.667-.667-.667h-3.333v10.495c1.208-.64 2.562-1.032 4-1.127v-8.7zM4 25.333V4H.667C.3 4 0 4.3 0 4.667V26c0 1.837 1.496 3.333 3.333 3.333h12.02c-.878-1.165-1.517-2.52-1.818-4H4z\" fill-opacity=\".302\"/><path d=\"M14 12H7.333c-.368 0-.666.3-.666.667 0 .368.298.666.666.666H14c.368 0 .667-.298.667-.666 0-.368-.3-.667-.667-.667M14 14.667H7.333c-.368 0-.666.298-.666.666 0 .368.298.667.666.667H14c.368 0 .667-.3.667-.667 0-.368-.3-.666-.667-.666M14.667 18c0-.368-.3-.667-.667-.667H7.333c-.368 0-.666.3-.666.667 0 .368.298.667.666.667H14c.368 0 .667-.3.667-.667M7.333 20c-.368 0-.666.3-.666.667 0 .368.298.666.666.666h4c.368 0 .667-.298.667-.666 0-.368-.3-.667-.667-.667h-4z\" fill-opacity=\".502\"/><path d=\"M6 9.333h10.667c.368 0 .666-.298.666-.666V3.333c0-.368-.298-.666-.666-.666h-2.06C14.33 1.115 13.087 0 11.333 0 9.687 0 8.363 1 8.06 2.667H6c-.368 0-.667.298-.667.666v5.334c0 .368.3.666.667.666\" fill-opacity=\".302\"/><path d=\"M26.97 24H24v2.97c0 .367-.3.666-.667.666-.368 0-.666-.3-.666-.667V24h-2.97c-.368 0-.666-.3-.666-.667 0-.368.3-.666.667-.666h2.97v-2.97c0-.37.298-.666.666-.666.368 0 .667.298.667.667v2.97h2.97c.367 0 .666.298.666.666 0 .368-.3.667-.667.667m-3.637-9.333c-4.78 0-8.666 3.888-8.666 8.666 0 4.78 3.886 8.667 8.666 8.667S32 28.112 32 23.333c0-4.778-3.888-8.666-8.667-8.666\"/></g></symbol><symbol id=\"svg-deployment\" data-name=\"deployment\" viewBox=\"0 0 176 201\" width=\"176\" height=\"201\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" stroke-linejoin=\"round\" stroke-miterlimit=\"1.414\"><path d=\"M88 5.985l82.272 47.5v95L88 195.985l-82.272-47.5v-95L88 5.985z\"/></symbol><symbol id=\"svg-dialog\" data-name=\"dialog\" viewBox=\"0 0 468 234\" width=\"468\" height=\"234\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" stroke-linejoin=\"round\" stroke-miterlimit=\"1.414\"><path fill=\"#d6dde7\" d=\"M349.1 197.3H118.9c-1.8 0-3.3-1.5-3.3-3.3V39.4c0-1.8 1.5-3.3 3.3-3.3h230.2c1.8 0 3.3 1.5 3.3 3.3V194c0 1.8-1.5 3.3-3.3 3.3z\"/><path fill=\"#fff\" d=\"M177.8 170.8c-3 0-5.5-2.5-5.5-5.5V63.7c0-3 2.5-5.5 5.5-5.5h112.4c3 0 5.5 2.5 5.5 5.5v101.6c0 3-2.5 5.5-5.5 5.5H177.8z\"/><path fill=\"#d6dde7\" d=\"M290.2 60.7c1.6 0 3 1.4 3 3v101.6c0 1.6-1.4 3-3 3H177.8c-1.6 0-3-1.4-3-3V63.7c0-1.6 1.4-3 3-3h112.4m0-5H177.8c-4.4 0-8 3.6-8 8v101.6c0 4.4 3.6 8 8 8h112.4c4.4 0 8-3.6 8-8V63.7c0-4.4-3.6-8-8-8z\"/><path fill=\"#297adf\" d=\"M260.4 158.2h-52.9c-1.9 0-3.5-1.6-3.5-3.5v-12.5c0-1.9 1.6-3.5 3.5-3.5h52.9c1.9 0 3.5 1.6 3.5 3.5v12.5c0 1.9-1.5 3.5-3.5 3.5z\"/></symbol><symbol id=\"svg-dice\" data-name=\"dice\" viewBox=\"0 0 45 32\" width=\"45\" height=\"32\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" stroke-linejoin=\"round\" stroke-miterlimit=\"1.414\"><path d=\"M30.762 10.232c1.183.684 1.59 2.2.906 3.382l-9.9 17.148c-.683 1.183-2.2 1.59-3.382.906l-17.148-9.9c-1.183-.684-1.59-2.2-.906-3.382l9.9-17.148c.684-1.183 2.2-1.59 3.382-.906l17.148 9.9z\" fill-opacity=\".149\"/><path d=\"M22.13 5.25c.02-.002.04-.002.06-.002h19.803c1.366 0 2.475 1.11 2.475 2.475v19.802c0 1.366-1.11 2.475-2.475 2.475H22.208l2.44-4.23c.273.11.57.17.88.17 1.29 0 2.34-1.047 2.34-2.338 0-.75-.354-1.416-.902-1.844l4.702-8.144c.683-1.183.277-2.698-.906-3.382L22.13 5.25zm16.35 16.013c1.29 0 2.34 1.048 2.34 2.34 0 1.29-1.05 2.338-2.34 2.338-1.29 0-2.34-1.047-2.34-2.338 0-1.29 1.05-2.34 2.34-2.34zm0-11.956c1.29 0 2.34 1.048 2.34 2.34 0 1.29-1.05 2.338-2.34 2.338-1.29 0-2.34-1.048-2.34-2.34 0-1.29 1.05-2.338 2.34-2.338zM19.712 22.345c1.118.645 1.502 2.077.857 3.196-.647 1.12-2.08 1.502-3.197.857-1.118-.646-1.502-2.078-.856-3.196.645-1.117 2.077-1.5 3.195-.855zM17.093 13.93c1.118.645 1.502 2.077.856 3.195-.647 1.118-2.078 1.502-3.197.857-1.118-.646-1.5-2.078-.856-3.196.646-1.118 2.078-1.502 3.196-.856zM14.473 5.514c1.118.646 1.502 2.078.856 3.196-.646 1.118-2.078 1.502-3.196.856-1.118-.645-1.502-2.077-.856-3.195.645-1.118 2.077-1.5 3.195-.856z\"/></symbol><symbol id=\"svg-download\" data-name=\"download\" viewBox=\"0 0 33 32\" width=\"33\" height=\"32\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" stroke-linejoin=\"round\" stroke-miterlimit=\"1.414\"><path fill=\"none\" d=\"M0 0h32.978v32H0z\"/><path d=\"M15.5 28.627V16.92c.005-.1.015-.195.045-.29.08-.262.27-.48.515-.6.113-.054.23-.08.355-.095.074-.003.074-.003.148 0 .124.014.24.04.355.095.245.12.435.338.515.6.03.095.04.19.044.29v11.707l2.54-2.54.043-.04c.12-.1.25-.176.4-.216.13-.034.267-.042.4-.023.326.048.613.262.752.56.04.087.068.18.082.275.014.094.014.19 0 .286-.02.133-.066.26-.137.376-.03.05-.065.093-.102.138-1.38 1.462-2.842 2.844-4.264 4.266l-.03.03c-.052.048-.11.09-.17.126-.027.016-.055.03-.084.044-.108.05-.225.08-.344.09-.097.007-.196 0-.293-.022-.097-.022-.19-.06-.275-.108-.075-.043-.145-.097-.206-.158-1.45-1.37-2.82-2.818-4.227-4.227-.107-.112-.19-.24-.24-.387-.11-.332-.032-.707.2-.968.064-.07.138-.134.22-.184.15-.092.315-.136.49-.147.057 0 .057 0 .114.004.058.007.114.016.17.03.17.046.316.136.443.256l2.54 2.54zm10.424-4.984h-4.52c-.036-.002-.072-.002-.107-.006-.142-.015-.28-.062-.403-.136-.09-.054-.174-.124-.243-.206-.258-.305-.307-.748-.12-1.102.05-.094.116-.18.194-.254.13-.123.293-.21.467-.248.094-.02.12-.018.214-.023h4.444c.43-.075.854-.197 1.264-.348 1.132-.42 2.194-1.103 2.908-2.09.165-.23.31-.47.433-.724.287-.59.45-1.234.516-1.886.037-.383.045-.77.015-1.155-.033-.436-.117-.868-.25-1.285-.37-1.173-1.124-2.212-2.122-2.932-.48-.348-1.017-.62-1.583-.802-.42-.135-.857-.22-1.297-.257-.232-.02-.463-.022-.696-.016l-.103-.002c-.09-.012-.115-.01-.204-.037-.2-.058-.378-.18-.505-.345-.056-.073-.064-.095-.108-.176-.054-.113-.11-.224-.168-.335-.347-.65-.77-1.255-1.27-1.796-.6-.647-1.297-1.2-2.064-1.634-.824-.465-1.727-.79-2.66-.952-.792-.14-1.604-.164-2.403-.076-.8.088-1.588.292-2.33.604-.875.368-1.685.885-2.388 1.52-.775.702-1.418 1.546-1.887 2.48-.343.683-.593 1.414-.74 2.165-.07.373-.116.748-.14 1.127l-.013.104c-.008.035-.014.07-.024.104-.018.067-.045.133-.078.195-.133.248-.373.43-.65.495-.067.016-.137.024-.207.025-.035 0-.07-.003-.106-.004-.137-.02-.272-.048-.408-.068-.496-.063-.996-.043-1.483.073-1.008.242-1.902.874-2.468 1.74-.173.264-.315.55-.42.846-.11.308-.182.628-.215.953-.04.392-.025.794.03 1.184.075.536.243 1.06.54 1.517.09.14.19.27.3.393.632.704 1.546 1.09 2.458 1.275.34.07.692.116 1.04.12h5.17l.107.005c.094.015.118.015.21.046.168.056.32.16.436.295.07.082.125.175.165.274.04.1.063.204.07.31.018.363-.168.715-.478.9-.123.075-.26.122-.403.137-.035.004-.07.004-.107.006-1.744 0-3.49.014-5.233 0-.42-.012-.836-.057-1.247-.134-1.186-.223-2.346-.7-3.253-1.512-.167-.15-.324-.31-.47-.48-.177-.203-.337-.42-.48-.65-.397-.64-.645-1.363-.764-2.106-.047-.296-.074-.594-.084-.894-.01-.296-.003-.592.027-.887.047-.455.145-.905.292-1.338.338-.99.94-1.883 1.723-2.575.656-.578 1.436-1.01 2.274-1.26.61-.184 1.25-.265 1.888-.25l.06-.344c.067-.326.144-.648.238-.967.198-.665.462-1.31.788-1.923.66-1.243 1.576-2.348 2.672-3.23.883-.713 1.882-1.278 2.947-1.668.702-.256 1.43-.436 2.172-.536.337-.047.676-.074 1.017-.088.16-.005.323-.008.485-.007.918.012 1.83.137 2.715.385 1.845.518 3.527 1.556 4.828 2.963.575.622 1.068 1.313 1.48 2.053l.004.006c.092.005.185.01.277.018.102.008.202.018.302.03.23.03.46.065.687.114.57.12 1.128.308 1.657.556 1.148.54 2.155 1.364 2.912 2.38.57.768.998 1.64 1.252 2.562.277 1.007.338 2.06.218 3.097-.097.834-.322 1.654-.69 2.41-.173.356-.377.696-.608 1.016-.154.212-.32.415-.495.61-.903.992-2.076 1.712-3.33 2.176-.553.205-1.128.367-1.712.458-.047.006-.046.006-.093.01l-.068.003z\"/></symbol><symbol id=\"svg-feedback\" data-name=\"feedback\" viewBox=\"0 0 468 234\" width=\"468\" height=\"234\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" stroke-linejoin=\"round\" stroke-miterlimit=\"1.414\"><g fill=\"#f96623\"><path fill-opacity=\".48\" d=\"M315.294 144.15l-4.098 10.1L250.69 129.7l4.097-10.1z\"/><path d=\"M217.264 104.368l-4.1 10.1-60.506-24.553 4.1-10.1z\"/><path fill-opacity=\".24\" d=\"M206.906 198.23l-10.1-4.098 24.553-60.507 10.1 4.098z\"/><path fill-opacity=\".72\" d=\"M246.706 100.272l-10.1-4.098 24.553-60.507 10.098 4.098z\"/><path fill-opacity=\".36\" d=\"M272.328 193.588l-10.04 4.245-25.428-60.148 10.04-4.244z\"/><path fill-opacity=\".84\" d=\"M231.086 96.223l-10.04 4.244-25.428-60.148 10.04-4.245z\"/><path fill-opacity=\".12\" d=\"M157.39 155.246l-4.246-10.04 60.148-25.428 4.244 10.04z\"/><path fill-opacity=\".6\" d=\"M254.762 114.076l-4.245-10.04 60.148-25.428 4.244 10.04z\"/></g></symbol><symbol id=\"svg-gear-circle\" data-name=\"gear-circle\" viewBox=\"0 0 33 33\" width=\"33\" height=\"33\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" stroke-linejoin=\"round\" stroke-miterlimit=\"1.414\"><circle cx=\"16.024\" cy=\"16.024\" r=\"16.024\" fill-opacity=\".149\"/><g fill-rule=\"nonzero\"><path d=\"M24.253 6.97c.168.045.32.117.445.24.054.052.064.068.11.128 1.096 1.71 2.035 3.514 3.05 5.272.04.077.074.15.095.236.07.277.004.578-.175.8-.073.09-.16.16-.257.22l-1.64.95c.022.154.034.308.048.464.013.193.023.385.026.58.003.423-.023.842-.07 1.263v.013l1.64.95.072.044c.07.053.13.107.186.174.16.2.23.464.192.718-.013.086-.04.164-.073.244-.932 1.803-2.025 3.52-3.04 5.277-.046.073-.094.14-.156.2-.206.2-.5.294-.783.25-.114-.018-.216-.06-.318-.113l-1.635-.95c-.13.098-.262.188-.396.28-.19.123-.19.122-.384.242-.39.23-.787.435-1.2.623l-.013.006v1.91l-.004.084c-.013.086-.028.167-.06.248-.092.24-.285.432-.525.525-.08.03-.162.046-.247.058-2.03.094-4.062.004-6.094.004-.086-.005-.168-.012-.25-.036-.277-.078-.504-.286-.607-.552-.042-.11-.057-.218-.063-.333V25.08c-.142-.06-.282-.128-.422-.195-.203-.102-.203-.1-.404-.207-.404-.222-.79-.464-1.168-.73l-.027-.02-1.66.952-.074.038c-.08.033-.16.06-.245.073-.253.04-.517-.032-.716-.193-.07-.054-.122-.117-.175-.185C6.14 22.905 5.2 21.1 4.185 19.34c-.052-.1-.094-.203-.11-.318-.045-.282.048-.576.247-.78.06-.064.128-.11.2-.157l1.642-.948c-.02-.156-.033-.31-.046-.467-.014-.23-.014-.23-.023-.46-.006-.464.018-.922.07-1.382v-.014l-1.64-.947-.07-.046c-.07-.052-.13-.106-.186-.173-.162-.2-.232-.465-.193-.718.014-.087.04-.165.074-.245.935-1.803 2.03-3.518 3.047-5.276.062-.098.13-.184.22-.257.222-.18.523-.245.8-.176.084.02.16.056.235.096l1.652.95c.07-.052.143-.102.214-.152.19-.128.19-.128.385-.252.454-.278.92-.523 1.407-.743l.014-.006V4.96l.004-.085c.012-.085.027-.166.06-.247.09-.24.285-.433.524-.526.08-.03.162-.046.248-.058 2.028-.094 4.062-.004 6.093-.004.115.006.224.02.332.062.267.104.474.33.553.607.023.084.03.166.035.252V6.87c.142.06.28.13.42.196.202.102.2.102.4.208.4.224.782.466 1.154.733l.02.014 1.628-.946.076-.04c.138-.055.266-.08.414-.084.085.007.085.006.17.02zm-2.23 14.94c.118.025.22.06.325.115l1.38.8 2.08-3.607-1.39-.802c-.064-.04-.082-.05-.14-.1-.153-.132-.26-.313-.3-.51-.018-.087-.02-.17-.017-.258.028-.216.07-.43.098-.645.04-.37.067-.74.055-1.11-.015-.44-.068-.87-.143-1.304l-.01-.086c-.003-.088-.002-.17.016-.257.04-.198.147-.38.3-.51.058-.052.076-.06.14-.1l1.388-.803-2.08-3.605-1.375.798c-.07.035-.085.046-.158.072-.19.067-.402.07-.594.006-.084-.028-.157-.07-.232-.115-.123-.092-.24-.194-.362-.29-.348-.262-.71-.502-1.093-.71-.382-.21-.78-.386-1.187-.542l-.078-.034c-.066-.037-.084-.044-.145-.09-.16-.12-.277-.29-.332-.483-.024-.082-.03-.165-.035-.25V5.88h-4.168V7.49c-.004.086-.012.168-.036.252-.056.192-.174.363-.333.483-.06.045-.08.052-.145.09-.2.086-.402.16-.602.245-.745.337-1.446.748-2.072 1.276l-.07.052c-.074.047-.147.088-.23.116-.192.065-.404.064-.595-.003-.073-.024-.09-.035-.157-.07L8.33 9.125l-2.086 3.608 1.387.802c.066.04.083.05.142.1.153.132.26.314.3.512.018.087.02.17.016.258-.02.154-.05.307-.073.46-.058.43-.09.862-.08 1.297.01.437.065.868.14 1.297l.01.086c.004.077.007.096 0 .172-.023.202-.113.393-.253.54-.06.062-.13.11-.203.158l-1.39.802 2.084 3.61 1.403-.805c.078-.04.154-.075.24-.096.196-.048.407-.03.59.053.072.032.087.044.152.085.12.092.236.192.356.286.3.226.61.433.938.618.44.25.9.455 1.37.636l.08.034c.065.037.083.044.143.09.16.12.278.29.332.482.023.084.03.166.035.253v1.606h4.168v-1.607c.004-.087.01-.17.035-.253.055-.19.172-.363.332-.483.06-.045.078-.052.144-.09.197-.085.4-.16.598-.245.455-.207.895-.44 1.31-.716.26-.173.506-.362.745-.56l.07-.054c.064-.04.08-.052.15-.083.108-.05.218-.068.335-.078.086 0 .086 0 .172.01z\"/><path d=\"M16.148 11.052c.698.026 1.378.18 2.01.484.533.257 1.02.613 1.43 1.042.41.43.74.934.97 1.48.19.45.313.93.363 1.415.052.498.027 1.005-.074 1.495-.314 1.533-1.372 2.853-2.797 3.497-.598.27-1.247.418-1.902.434-.658.016-1.32-.1-1.932-.34-.553-.22-1.066-.54-1.506-.938-.44-.4-.805-.876-1.075-1.403-.22-.432-.377-.896-.462-1.373-.08-.452-.1-.916-.052-1.374.06-.565.215-1.12.462-1.632.43-.89 1.13-1.643 1.987-2.137.637-.366 1.342-.573 2.073-.638.17-.01.336-.016.505-.013zm-.206 1.84c-.437.016-.863.112-1.257.302-.81.39-1.428 1.138-1.652 2.01-.09.354-.118.725-.08 1.088.032.33.12.652.255.954.153.34.37.65.632.91.263.264.573.48.912.632.374.17.78.26 1.19.27.413.012.826-.06 1.21-.21.347-.138.668-.338.944-.59.275-.248.504-.548.673-.878.137-.27.234-.56.288-.857.06-.336.063-.68.012-1.018-.14-.92-.71-1.743-1.514-2.207-.4-.23-.84-.358-1.297-.4-.107-.005-.212-.008-.318-.007z\"/></g></symbol><symbol id=\"svg-gear\" data-name=\"gear\" viewBox=\"0 0 32 33\" width=\"32\" height=\"33\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" stroke-linejoin=\"round\" stroke-miterlimit=\"1.414\"><path d=\"M23.018 1.842c.258.022.51.08.746.185.198.088.386.2.553.338.132.106.25.227.355.36.336.432.486.97.495 1.51.007.384-.054.762-.14 1.135l-.584 2.148.02.02.02.02 2.14-.583.198-.046c.2-.04.402-.074.606-.088.42-.03.85.01 1.246.157.27.1.522.25.736.442.397.36.668.867.74 1.4.037.26.025.524-.03.78-.095.444-.313.85-.583 1.212-.125.166-.262.322-.403.474l-1.572 1.56.008.03.01.035c.716.19 1.426.4 2.148.567.09.026.09.026.18.055.195.065.385.137.57.227.36.176.698.41.962.716.174.2.315.428.41.676.208.54.203 1.165-.016 1.702-.09.224-.22.432-.377.615-.286.334-.66.58-1.055.76-.22.102-.45.18-.68.252l-2.142.566-.01.036-.008.03 1.567 1.554c.07.073.07.073.138.147.136.153.265.31.38.48.235.35.415.74.487 1.157.05.285.045.577-.016.86-.112.524-.418 1.012-.84 1.342-.193.15-.41.265-.64.345-.412.144-.858.17-1.29.128-.243-.023-.48-.068-.716-.123l-2.147-.583-.02.02-.02.02.583 2.142c.025.1.024.1.047.198.04.2.072.4.087.605.027.4-.007.81-.14 1.19-.092.27-.233.524-.42.742-.36.424-.888.713-1.44.79-.26.035-.525.023-.78-.032-.655-.14-1.208-.54-1.69-.988l-1.555-1.57-.03.01-.038.01-.563 2.132c-.03.098-.028.097-.06.194-.053.16-.11.32-.18.474-.19.415-.452.802-.804 1.094-.205.17-.44.305-.69.395-.506.18-1.083.173-1.586-.015-.246-.093-.475-.23-.674-.4-.36-.31-.616-.718-.8-1.15-.083-.19-.15-.387-.21-.585l-.566-2.14-.036-.01-.03-.01-1.555 1.568c-.073.07-.073.07-.147.138-.127.113-.257.22-.395.32-.354.253-.754.452-1.185.536-.28.054-.57.058-.852.006-.528-.097-1.024-.39-1.366-.804-.168-.204-.298-.438-.385-.687-.156-.446-.175-.927-.12-1.394.025-.206.066-.41.112-.612l.585-2.148-.02-.02-.02-.02-2.14.582-.198.046c-.166.034-.333.063-.502.08-.434.043-.88.015-1.296-.128-.27-.093-.524-.234-.742-.42-.423-.362-.713-.89-.79-1.442-.033-.24-.025-.484.02-.722.126-.677.537-1.25.997-1.745l1.57-1.56-.01-.03-.008-.036-2.134-.563-.194-.058c-.193-.065-.384-.138-.568-.227-.38-.185-.73-.434-1-.76-.17-.205-.306-.438-.395-.69-.186-.525-.173-1.127.038-1.644.1-.242.242-.466.417-.66.446-.496 1.07-.774 1.696-.968l2.142-.565.01-.035.008-.03-1.566-1.555-.14-.148c-.413-.467-.76-1.015-.865-1.64-.045-.262-.045-.532.003-.794.098-.527.392-1.024.807-1.365.203-.167.435-.296.683-.383.414-.145.86-.172 1.293-.13.242.022.48.068.716.122l2.147.585.02-.022.02-.02-.584-2.14c-.025-.1-.025-.1-.047-.2-.04-.2-.074-.4-.088-.604-.03-.42.01-.85.157-1.246.092-.25.228-.484.4-.687.35-.406.852-.69 1.38-.777.26-.044.527-.04.786.01.43.08.83.28 1.184.532.198.14.38.3.56.464l1.558 1.57.03-.008.036-.01.563-2.136.06-.193c.053-.16.11-.32.182-.474.18-.398.426-.77.757-1.057.232-.2.502-.358.794-.452.492-.158 1.044-.146 1.528.036.246.092.474.23.674.4.358.31.615.717.8 1.148.082.19.148.387.21.585l.565 2.142.035.01.032.008 1.553-1.566.148-.14c.453-.4.98-.738 1.58-.854.16-.03.32-.043.48-.043.062 0 .06 0 .123.005zm-6.932 7.48c.34.006.678.033 1.013.09.595.098 1.177.278 1.724.533 1.24.58 2.288 1.543 2.97 2.73.354.615.61 1.286.75 1.98.153.75.177 1.522.07 2.278-.094.68-.295 1.345-.593 1.964-.336.7-.797 1.34-1.353 1.883-.595.582-1.3 1.05-2.066 1.375-.794.336-1.65.513-2.513.525-.865.01-1.73-.146-2.536-.463-.774-.306-1.49-.76-2.1-1.327-.588-.548-1.076-1.2-1.434-1.92-.306-.614-.515-1.276-.618-1.954-.115-.755-.1-1.53.042-2.28.134-.696.38-1.37.726-1.99.654-1.172 1.664-2.133 2.865-2.73.59-.293 1.223-.498 1.872-.605.278-.045.56-.072.84-.084.115-.004.23-.005.344-.005z\" fill-opacity=\".149\"/><path d=\"M23.018 1.842c.258.022.51.08.746.185.198.088.386.2.553.338.132.106.25.227.355.36.336.432.486.97.495 1.51.007.384-.054.762-.14 1.135l-.584 2.148.02.02.02.02 2.14-.583.198-.046c.2-.04.402-.074.606-.088.42-.03.85.01 1.246.157.27.1.522.25.736.442.397.36.668.867.74 1.4.037.26.025.524-.03.78-.095.444-.313.85-.583 1.212-.125.166-.262.322-.403.474l-1.572 1.56.008.03.01.035c.716.19 1.426.4 2.148.567.09.026.09.026.18.055.195.065.385.137.57.227.36.176.698.41.962.716.174.2.315.428.41.676.208.54.203 1.165-.016 1.702-.09.224-.22.432-.377.615-.286.334-.66.58-1.055.76-.22.102-.45.18-.68.252l-2.142.566-.01.036-.008.03 1.567 1.554c.07.073.07.073.138.147.136.153.265.31.38.48.235.35.415.74.487 1.157.05.285.045.577-.016.86-.112.524-.418 1.012-.84 1.342-.193.15-.41.265-.64.345-.412.144-.858.17-1.29.128-.243-.023-.48-.068-.716-.123l-2.147-.583-.02.02-.02.02.583 2.142c.025.1.024.1.047.198.04.2.072.4.087.605.027.4-.007.81-.14 1.19-.092.27-.233.524-.42.742-.36.424-.888.713-1.44.79-.26.035-.525.023-.78-.032-.655-.14-1.208-.54-1.69-.988l-1.555-1.57-.03.01-.038.01-.563 2.132c-.03.098-.028.097-.06.194-.053.16-.11.32-.18.474-.19.415-.452.802-.804 1.094-.205.17-.44.305-.69.395-.506.18-1.083.173-1.586-.015-.246-.093-.475-.23-.674-.4-.36-.31-.616-.718-.8-1.15-.083-.19-.15-.387-.21-.585l-.566-2.14-.036-.01-.03-.01-1.555 1.568c-.073.07-.073.07-.147.138-.127.113-.257.22-.395.32-.354.253-.754.452-1.185.536-.28.054-.57.058-.852.006-.528-.097-1.024-.39-1.366-.804-.168-.204-.298-.438-.385-.687-.156-.446-.175-.927-.12-1.394.025-.206.066-.41.112-.612l.585-2.148-.02-.02-.02-.02-2.14.582-.198.046c-.166.034-.333.063-.502.08-.434.043-.88.015-1.296-.128-.27-.093-.524-.234-.742-.42-.423-.362-.713-.89-.79-1.442-.033-.24-.025-.484.02-.722.126-.677.537-1.25.997-1.745l1.57-1.56-.01-.03-.008-.036-2.134-.563-.194-.058c-.193-.065-.384-.138-.568-.227-.38-.185-.73-.434-1-.76-.17-.205-.306-.438-.395-.69-.186-.525-.173-1.127.038-1.644.1-.242.242-.466.417-.66.446-.496 1.07-.774 1.696-.968l2.142-.565.01-.035.008-.03-1.566-1.555-.14-.148c-.413-.467-.76-1.015-.865-1.64-.045-.262-.045-.532.003-.794.098-.527.392-1.024.807-1.365.203-.167.435-.296.683-.383.414-.145.86-.172 1.293-.13.242.022.48.068.716.122l2.147.585.02-.022.02-.02-.584-2.14c-.025-.1-.025-.1-.047-.2-.04-.2-.074-.4-.088-.604-.03-.42.01-.85.157-1.246.092-.25.228-.484.4-.687.35-.406.852-.69 1.38-.777.26-.044.527-.04.786.01.43.08.83.28 1.184.532.198.14.38.3.56.464l1.558 1.57.03-.008.036-.01.563-2.136.06-.193c.053-.16.11-.32.182-.474.18-.398.426-.77.757-1.057.232-.2.502-.358.794-.452.492-.158 1.044-.146 1.528.036.246.092.474.23.674.4.358.31.615.717.8 1.148.082.19.148.387.21.585l.565 2.142.035.01.032.008 1.553-1.566.148-.14c.453-.4.98-.738 1.58-.854.16-.03.32-.043.48-.043.062 0 .06 0 .123.005zM12.783 25.575l.1.026c.126.04.252.08.38.117.21.06.423.11.638.158l.1.027c.086.034.11.04.188.087.147.09.27.22.348.372.043.082.046.105.075.192l.7 2.647c.024.084.05.167.082.248.022.057.045.114.07.17.017.036.03.062.05.098.015.03.03.057.047.087.065.11.153.235.277.286.068.027.147.032.22.024.05-.006.1-.022.144-.048.056-.033.104-.08.146-.13.06-.072.112-.154.156-.238.08-.156.14-.322.188-.49l.7-2.654c.03-.087.032-.11.075-.192.095-.184.25-.334.44-.42.143-.068.303-.09.456-.126.128-.03.127-.03.254-.064.17-.047.336-.097.502-.15l.1-.027c.092-.014.114-.02.207-.02.173.004.344.056.49.15.077.05.092.067.16.13l1.93 1.944c.062.058.127.116.194.17.048.04.096.078.146.113.03.022.06.04.09.06.03.02.057.036.087.053.11.062.25.127.382.108.074-.01.145-.045.204-.09.042-.03.077-.068.102-.113.032-.056.05-.12.06-.184.018-.094.02-.19.017-.285-.008-.174-.04-.347-.08-.516l-.726-2.662c-.02-.09-.03-.112-.033-.204-.01-.208.05-.416.17-.586.092-.128.218-.226.332-.332l.274-.27.27-.29.074-.07c.072-.057.088-.075.168-.12.15-.08.324-.12.495-.113.093.004.115.013.204.032l2.653.72c.085.02.17.037.256.05.06.01.12.02.182.025.036.003.073.006.11.007.032.002.066.003.1.002.126-.002.28-.015.384-.096.058-.046.102-.113.132-.18.02-.048.032-.098.03-.15 0-.064-.017-.128-.04-.19-.03-.09-.077-.173-.128-.253-.094-.148-.21-.28-.33-.408l-1.95-1.935c-.062-.068-.08-.083-.13-.16-.112-.175-.163-.386-.145-.592.008-.092.017-.114.04-.203.04-.126.08-.253.117-.38.058-.21.11-.423.158-.637l.028-.1c.034-.084.04-.108.087-.186.09-.148.22-.27.372-.35.082-.04.105-.044.192-.073l2.648-.698c.083-.025.166-.052.247-.083l.168-.07.1-.05c.03-.015.056-.03.086-.048.11-.065.235-.153.285-.276.027-.07.032-.15.023-.222-.005-.05-.02-.1-.047-.145-.033-.057-.08-.104-.128-.146-.073-.062-.155-.112-.24-.156-.155-.08-.32-.14-.49-.188l-2.653-.7c-.088-.028-.11-.032-.193-.074-.184-.096-.334-.252-.42-.44-.067-.143-.09-.303-.126-.455-.03-.125-.064-.25-.1-.377-.037-.127-.075-.254-.116-.38l-.026-.1c-.013-.09-.02-.114-.018-.206.003-.173.055-.343.148-.49.05-.076.068-.09.13-.16L27.78 10c.058-.065.116-.13.17-.196.04-.048.077-.096.113-.146.02-.03.042-.06.06-.09.018-.027.038-.06.053-.087.062-.11.127-.25.11-.38-.01-.072-.044-.138-.084-.196-.03-.045-.072-.084-.12-.11-.057-.032-.12-.05-.184-.062-.094-.017-.19-.02-.286-.015-.176.007-.348.04-.518.08l-2.66.726c-.088.02-.11.028-.202.032-.207.01-.415-.05-.585-.17-.075-.052-.09-.07-.154-.136l-.27-.29c-.153-.153-.31-.304-.47-.45l-.072-.074c-.056-.072-.073-.088-.118-.168-.083-.152-.123-.325-.115-.497.004-.09.013-.113.032-.203l.722-2.654c.02-.085.037-.17.05-.255.01-.06.018-.12.024-.18.004-.038.006-.07.008-.11v-.1c0-.127-.014-.28-.096-.385-.044-.056-.107-.097-.17-.127-.05-.024-.105-.038-.16-.037-.065 0-.13.016-.19.037-.09.033-.173.078-.254.13-.148.094-.28.21-.408.33l-1.933 1.948c-.068.062-.082.08-.16.13-.174.11-.384.163-.59.145-.092-.008-.114-.018-.202-.04-.126-.04-.252-.08-.38-.116-.21-.058-.423-.11-.638-.157l-.1-.027c-.085-.034-.11-.04-.188-.087-.148-.09-.27-.22-.35-.373-.042-.082-.045-.105-.074-.193L16.692 2.8c-.025-.084-.052-.166-.083-.248l-.07-.168c-.024-.05-.048-.097-.074-.144-.016-.03-.03-.054-.048-.08-.065-.1-.148-.21-.263-.252-.066-.025-.142-.03-.21-.02-.052.004-.1.02-.146.046-.056.033-.103.08-.144.128-.062.073-.113.155-.157.24-.082.156-.14.32-.19.49l-.7 2.655c-.028.088-.03.11-.074.193-.095.185-.252.335-.44.422-.144.066-.304.088-.457.123-.127.032-.253.064-.378.1-.128.036-.255.075-.38.115l-.1.025c-.092.013-.114.02-.206.018-.172-.003-.342-.055-.487-.148-.078-.05-.093-.068-.16-.13L10 4.222c-.064-.06-.128-.117-.196-.172-.047-.038-.095-.076-.145-.11-.03-.022-.062-.043-.093-.063-.028-.018-.056-.035-.085-.05-.112-.063-.25-.128-.382-.11-.07.01-.138.044-.196.084-.047.033-.084.073-.112.122-.032.056-.05.12-.06.182-.017.094-.02.19-.015.285.007.174.04.346.08.515l.727 2.66c.02.09.027.112.032.204.01.206-.05.413-.17.582-.052.076-.07.09-.135.155l-.287.27c-.155.154-.305.31-.45.47l-.075.073c-.072.057-.088.075-.17.12-.15.082-.324.123-.496.115-.092-.004-.115-.013-.204-.032L4.914 8.8c-.084-.02-.17-.037-.255-.05-.06-.01-.12-.02-.182-.025l-.11-.008h-.1c-.13 0-.287.015-.394.103-.052.042-.09.102-.12.163-.023.05-.036.104-.035.16 0 .064.016.128.038.19.032.088.078.173.13.254.094.148.208.28.33.407l1.947 1.934c.062.068.08.083.13.16.112.175.163.384.145.59-.008.092-.018.114-.04.203-.04.127-.08.254-.117.382-.058.21-.11.423-.157.638L6.1 14c-.035.085-.04.108-.088.187-.09.147-.22.27-.373.35-.083.04-.106.045-.194.073l-2.647.698c-.084.025-.166.052-.247.083l-.17.07c-.034.017-.065.032-.098.05-.03.016-.057.03-.087.048-.11.066-.236.154-.286.277-.028.07-.034.15-.025.223.005.05.02.1.047.144.033.056.08.103.13.145.072.06.154.112.24.156.154.08.32.138.488.187l2.655.7c.087.03.11.033.192.076.183.095.333.25.42.44.067.143.09.303.124.455.032.127.065.253.1.378.037.128.075.255.115.38l.025.1c.013.092.02.115.018.206-.003.173-.055.343-.148.488-.05.077-.068.092-.13.16l-1.943 1.93c-.06.064-.117.128-.172.195-.04.048-.076.096-.11.146-.023.03-.043.06-.063.09-.018.03-.035.058-.05.087-.063.112-.128.25-.11.382.01.07.044.138.083.196.032.045.072.084.12.11.057.032.12.05.183.06.094.018.19.02.285.016.176-.008.35-.04.52-.083l2.66-.72c.09-.02.112-.03.204-.033.206-.01.413.05.583.17.075.052.09.07.154.135.088.097.178.192.27.287.153.155.31.305.47.453l.072.073c.057.072.074.088.118.17.083.15.123.323.115.495-.004.093-.013.115-.032.204L8.8 27.087c-.02.084-.037.17-.05.254-.01.06-.02.122-.024.183-.004.037-.007.074-.008.11-.002.035-.002.066-.002.1.003.128.016.28.098.386.046.058.112.102.18.132.047.02.098.032.15.03.064 0 .128-.016.188-.038.09-.033.175-.078.255-.13.148-.094.28-.208.407-.33l1.935-1.95c.067-.06.082-.08.16-.13.115-.073.248-.122.384-.14.092-.01.115-.007.207-.004l.103.015zM16.086 9.32c.34.008.678.035 1.013.09.595.1 1.177.28 1.724.535 1.24.58 2.288 1.543 2.97 2.73.354.615.61 1.286.75 1.98.153.75.177 1.522.07 2.278-.094.68-.295 1.345-.593 1.964-.336.7-.797 1.34-1.353 1.883-.595.582-1.3 1.05-2.066 1.375-.794.336-1.65.513-2.513.525-.865.01-1.73-.146-2.536-.463-.774-.306-1.49-.76-2.1-1.327-.588-.548-1.076-1.2-1.434-1.92-.306-.614-.515-1.276-.618-1.954-.115-.755-.1-1.53.042-2.28.134-.696.38-1.37.726-1.99.654-1.172 1.664-2.133 2.865-2.73.59-.293 1.223-.498 1.872-.605.278-.045.56-.072.84-.084.115-.004.23-.005.344-.005zm-.148 1.884c-.68.012-1.348.16-1.964.447-.54.253-1.034.608-1.446 1.04-.386.405-.7.877-.925 1.39-.198.453-.325.937-.375 1.43-.055.545-.018 1.1.112 1.633.092.38.23.747.414 1.092.515.975 1.364 1.756 2.38 2.186.57.243 1.186.37 1.804.377.622.008 1.243-.103 1.82-.332.558-.22 1.072-.544 1.51-.952.423-.394.774-.863 1.032-1.38.21-.423.356-.876.433-1.34.087-.524.087-1.06 0-1.584-.074-.447-.212-.882-.408-1.29-.47-.974-1.27-1.775-2.245-2.244-.612-.295-1.278-.45-1.955-.47-.062-.002-.125-.003-.187-.002z\" fill-rule=\"nonzero\"/></symbol><symbol id=\"svg-heart-circle\" data-name=\"heart-circle\" viewBox=\"0 0 33 33\" width=\"33\" height=\"33\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" stroke-linejoin=\"round\" stroke-miterlimit=\"1.414\"><circle cx=\"16.024\" cy=\"16.024\" r=\"16.024\" fill-opacity=\".149\"/><path d=\"M11.228 6.83c.45.027.894.1 1.326.234 1.488.46 2.712 1.564 3.47 2.912.08-.146.172-.287.263-.427.49-.72 1.086-1.355 1.816-1.83.545-.357 1.15-.617 1.785-.762.565-.13 1.15-.166 1.727-.112.482.046.958.155 1.413.32.416.152.815.353 1.186.594.934.607 1.685 1.475 2.174 2.473.358.732.576 1.527.66 2.336.04.374.056.753.034 1.13-.044.792-.254 1.57-.55 2.304-.44 1.098-1.07 2.116-1.77 3.068-1.223 1.67-2.673 3.174-4.192 4.577-1.256 1.16-2.568 2.265-3.944 3.282l-.07.048c-.258.144-.545.194-.83.106-.085-.025-.16-.063-.236-.106-.177-.12-.346-.253-.517-.383-1.207-.932-2.376-1.913-3.497-2.948C10.3 22.56 9.173 21.415 8.15 20.18c-.7-.848-1.355-1.74-1.905-2.693-.41-.71-.762-1.46-.998-2.244-.15-.503-.252-1.02-.282-1.546-.018-.323-.01-.648.018-.97.08-.96.346-1.906.81-2.753.443-.812 1.065-1.524 1.817-2.064.397-.285.83-.52 1.285-.7.578-.226 1.183-.35 1.802-.385.178-.006.354-.006.53 0zm9.778 2.024c-.31.012-.615.058-.912.15-.224.07-.44.162-.646.275-1.17.64-1.877 1.87-2.267 3.106-.065.206-.12.414-.172.624l-.026.086c-.067.17-.16.32-.3.44-.4.342-1.016.315-1.385-.06-.107-.11-.178-.238-.234-.38-.055-.186-.1-.375-.153-.562-.377-1.234-1.023-2.467-2.154-3.163-.153-.093-.312-.177-.477-.247-.367-.155-.76-.245-1.155-.265-.336-.018-.674.015-1 .093-.28.068-.55.167-.805.295-.833.418-1.49 1.13-1.88 1.973-.228.492-.365 1.024-.422 1.563-.042.407-.044.816.02 1.22.104.646.344 1.267.633 1.852.446.902 1.02 1.738 1.638 2.53.806 1.03 1.7 1.992 2.636 2.908 1.277 1.253 2.635 2.42 4.043 3.524l.036.027c1.015-.783 1.997-1.613 2.945-2.478.787-.717 1.55-1.46 2.276-2.24.978-1.05 1.903-2.167 2.65-3.395.47-.777.887-1.617 1.075-2.512.098-.474.11-.953.06-1.433-.054-.506-.177-1.005-.38-1.47-.35-.803-.937-1.496-1.693-1.94-.248-.148-.513-.266-.788-.353-.324-.103-.657-.155-.995-.166h-.17z\" fill-rule=\"nonzero\"/></symbol><symbol id=\"svg-icons\" data-name=\"icons\" viewBox=\"0 0 468 234\" width=\"468\" height=\"234\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" stroke-linejoin=\"round\" stroke-miterlimit=\"1.414\"><path fill=\"#f0f3f6\" d=\"M334.8 119s-50.5 62.4-112.8 62.4S109.3 119 109.3 119s50.5-62.4 112.8-62.4S334.8 119 334.8 119z\"/><path fill=\"#d6dde7\" d=\"M222.1 183.9c-18.1 0-47-5.5-81.3-31.7-20.4-15.6-32.9-31-33.5-31.6L106 119l1.3-1.6c.5-.6 13-16 33.5-31.6 34.3-26.2 63.1-31.7 81.3-31.7 18.1 0 47 5.5 81.3 31.7 20.4 15.6 32.9 31 33.5 31.6l1.3 1.6-1.3 1.6c-.5.6-13 16-33.5 31.6-34.4 26.2-63.2 31.7-81.3 31.7zM112.6 119c8.3 9.6 54.6 59.9 109.5 59.9s101.2-50.3 109.5-59.9c-8.3-9.6-54.6-59.9-109.5-59.9S120.9 109.4 112.6 119z\"/><path fill=\"#59a702\" d=\"M222.1 69.4c-27 0-49 21.9-49 49s21.9 49 49 49c27 0 49-21.9 49-49s-22-49-49-49zm11.5 40.9c-6.4 0-11.5-5.2-11.5-11.5s5.2-11.5 11.5-11.5c6.4 0 11.5 5.2 11.5 11.5s-5.2 11.5-11.5 11.5z\"/><path fill=\"#549103\" d=\"M233.6 110.3c-6.4 0-11.5-5.2-11.5-11.5 0-.6.1-1.3.2-1.9h-.2c-11.9 0-21.5 9.6-21.5 21.5s9.6 21.5 21.5 21.5 21.5-9.6 21.5-21.5c0-3.8-1-7.4-2.8-10.6-2 1.6-4.5 2.5-7.2 2.5z\"/></symbol><symbol id=\"svg-inputs\" data-name=\"inputs\" viewBox=\"0 0 468 234\" width=\"468\" height=\"234\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" stroke-linejoin=\"round\" stroke-miterlimit=\"1.414\"><path fill=\"#297adf\" d=\"M278.9 64.2h-89.8c-29.1 0-52.8 23.8-52.8 52.8 0 29.1 23.8 52.8 52.8 52.8h89.8c29.1 0 52.8-23.8 52.8-52.8 0-29.1-23.7-52.8-52.8-52.8zm-.8 95.8c-23.3 0-42.2-18.9-42.2-42.2 0-23.3 18.9-42.2 42.2-42.2 23.3 0 42.2 18.9 42.2 42.2 0 23.3-18.9 42.2-42.2 42.2z\"/></symbol><symbol id=\"svg-lock-circle\" data-name=\"lock-circle\" viewBox=\"0 0 32 32\" width=\"32\" height=\"32\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" stroke-linejoin=\"round\" stroke-miterlimit=\"1.414\"><circle cx=\"16\" cy=\"16\" r=\"16\" fill-opacity=\".149\"/><path d=\"M9.558 11.134c0-.338.007-.676.01-1.014.03-.753.17-1.492.446-2.194.668-1.696 2.063-3.057 3.775-3.683.658-.24 1.345-.362 2.044-.388.166-.002.165-.002.332 0 .7.026 1.386.147 2.045.388 1.712.626 3.108 1.987 3.776 3.683.277.702.416 1.44.445 2.194.005.338.01.676.013 1.014.634.02 1.27.044 1.903.07.077.01.15.02.223.046.24.083.44.267.542.5.042.095.062.192.074.294.18 4.31.004 8.627.004 12.94-.005.103-.017.202-.05.3-.083.24-.267.44-.5.542-.095.042-.192.062-.294.075-5.534.23-11.078.004-16.617.004-.103-.004-.2-.016-.3-.05-.24-.083-.44-.266-.542-.5-.042-.095-.062-.19-.074-.293-.18-4.31-.004-8.627-.004-12.94.005-.103.017-.2.05-.3.083-.24.267-.44.5-.542.095-.04.192-.062.294-.074.634-.026 1.27-.05 1.904-.07zm13.794 1.905H8.648v11.026h14.704V13.04zm-8.303 5.247c-.57-.347-.92-.992-.886-1.667.01-.183.046-.365.11-.538.07-.195.176-.378.31-.54.15-.18.334-.332.54-.444.244-.132.507-.2.782-.22.095-.002.094-.002.188 0 .275.02.538.088.78.22.208.112.394.264.544.445.132.16.237.344.31.54.062.172.098.354.108.537.034.682-.324 1.333-.902 1.677.023 1.03.043 2.06-.018 3.085-.015.147-.057.287-.136.413-.218.35-.656.514-1.05.392-.105-.032-.204-.083-.29-.15-.097-.074-.18-.168-.24-.274-.066-.118-.103-.246-.116-.38-.06-1.03-.073-2.065-.035-3.096zm5.54-7.204c.003-.305.007-.61.003-.917-.022-.575-.134-1.138-.36-1.67-.522-1.234-1.586-2.2-2.867-2.6-.517-.16-1.062-.227-1.603-.2-.496.026-.986.13-1.448.313-.516.202-.994.5-1.404.873-.436.397-.796.878-1.052 1.41-.283.588-.426 1.223-.45 1.873-.005.306 0 .612.002.917 3.06-.07 6.12-.07 9.18 0z\"/></symbol><symbol id=\"svg-logo\" data-name=\"logo\" viewBox=\"0 0 54 32\" width=\"54\" height=\"32\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" stroke-linejoin=\"round\" stroke-miterlimit=\"1.414\"><path d=\"M32.207 25.946L21.72 32l-11.234-6.486L0 19.46V6.485L11.235 0 21.72 6.054 32.207 0 43.44 6.486l10.487 6.055v12.974L42.693 32l-10.486-6.054zm.66-1.343V14.27l9.054 5.19.003 10.378-9.055-5.235zm-20.884.046V14.27l9.085 5.218.002 10.44-9.086-5.28zM1.498 18.594V8.215l8.988 5.19v10.38l-8.988-5.19zM21.72 7.785l8.99 5.188-8.99 5.19-8.988-5.19 8.99-5.19zm20.973 0l8.988 5.188-8.987 5.19-8.99-5.19 8.99-5.19zM11.235 1.728l8.988 5.19-8.988 5.188-8.99-5.19 8.99-5.188zm20.97 0l8.99 5.19-8.99 5.188-8.987-5.19 8.988-5.188z\"/><path d=\"M1.437 18.643L1.442 8.11l19.652 11.35.01 10.545L1.436 18.643zm31.37 6l.03-10.464 9.147 5.243-.01 10.582-9.168-5.363z\" fill-opacity=\".345\"/></symbol><symbol id=\"svg-message-circle\" data-name=\"message-circle\" viewBox=\"0 0 33 33\" width=\"33\" height=\"33\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" stroke-linejoin=\"round\" stroke-miterlimit=\"1.414\"><circle cx=\"16.024\" cy=\"16.024\" r=\"16.024\" fill-opacity=\".149\"/><path d=\"M17.342 23.582l-3.53 3.53-.066.06c-.12.088-.245.155-.392.185-.38.076-.778-.112-.96-.455-.072-.133-.1-.272-.107-.42v-2.9c-.087 0-.174-.002-.26-.003l-.41-.022c-.333-.03-.665-.072-.994-.14-.64-.132-1.266-.344-1.856-.63-1.33-.643-2.473-1.658-3.273-2.9-.457-.713-.8-1.496-1.012-2.314-.203-.783-.284-1.597-.243-2.405.043-.864.228-1.718.546-2.52.357-.9.877-1.73 1.527-2.446.692-.76 1.53-1.388 2.455-1.836.71-.343 1.47-.58 2.248-.7.335-.05.672-.077 1.01-.09 2.665-.034 5.33-.034 7.996 0 .338.013.674.04 1.01.09.778.12 1.54.357 2.248.7.926.448 1.763 1.075 2.454 1.836.65.715 1.17 1.547 1.527 2.445.32.802.505 1.656.55 2.52.04.807-.04 1.62-.244 2.404-.212.818-.556 1.6-1.013 2.313-.87 1.353-2.146 2.434-3.627 3.063-.668.283-1.374.475-2.094.567-.336.043-.672.06-1.01.065h-2.48zm.123-5.826c.128.01.25.04.364.1.097.05.186.12.26.203.267.305.29.767.058 1.1-.055.078-.122.146-.198.203-.143.106-.31.16-.485.175-2.205.06-4.412.06-6.617 0-.176-.014-.342-.07-.485-.175-.326-.242-.448-.69-.29-1.063.037-.088.088-.17.15-.24.074-.084.163-.154.26-.205.115-.06.237-.09.365-.1 2.205-.058 4.412-.058 6.617 0zm3.747-2.847c.18.017.35.075.493.19.373.293.447.846.166 1.228-.07.096-.16.178-.263.24-.122.07-.255.107-.395.12-3.457.117-6.92.117-10.376 0-.18-.017-.35-.075-.494-.19-.372-.293-.447-.846-.165-1.228.07-.096.16-.178.264-.24.123-.07.255-.107.396-.12 3.457-.117 6.92-.117 10.376 0zm0-2.85c.14.015.273.05.395.123.103.06.193.143.264.24.282.38.208.934-.165 1.228-.144.115-.312.173-.493.192-3.457.115-6.92.115-10.376 0-.18-.02-.35-.077-.494-.19-.372-.295-.447-.848-.165-1.23.07-.096.16-.178.264-.24.123-.07.255-.107.396-.12 3.457-.117 6.92-.117 10.376 0z\"/></symbol><symbol id=\"svg-messages\" data-name=\"messages\" viewBox=\"0 0 468 234\" width=\"468\" height=\"234\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" stroke-linejoin=\"round\" stroke-miterlimit=\"1.414\"><path fill=\"#d6dde7\" class=\"st0\" d=\"M349.1 197.3H118.9c-1.8 0-3.3-1.5-3.3-3.3V39.4c0-1.8 1.5-3.3 3.3-3.3h230.2c1.8 0 3.3 1.5 3.3 3.3V194c0 1.8-1.5 3.3-3.3 3.3z\"/><path fill=\"#59a702\" d=\"M327.1 80.3H140.6c-2.1 0-3.8-1.7-3.8-3.8V36h194.1v40.5c0 2.1-1.7 3.8-3.8 3.8z\"/><path fill=\"#549103\" d=\"M140.6 80.3h40.5V36h-44.3v40.5c0 2.1 1.7 3.8 3.8 3.8z\"/><circle fill=\"#7bc117\" cx=\"307.7\" cy=\"58.1\" r=\"11.8\"/></symbol><symbol id=\"svg-no-circle\" data-name=\"no-circle\" viewBox=\"0 0 32 32\" width=\"32\" height=\"32\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" stroke-linejoin=\"round\" stroke-miterlimit=\"1.414\"><circle cx=\"16\" cy=\"16\" r=\"16\" fill-opacity=\".149\"/><path d=\"M16.288 3.93c.48.018.958.052 1.434.12 1.2.174 2.37.53 3.463 1.053 2.135 1.02 3.95 2.69 5.153 4.727.596 1.01 1.042 2.104 1.32 3.242.272 1.12.384 2.28.33 3.43-.06 1.254-.318 2.495-.76 3.67-1.17 3.098-3.644 5.633-6.713 6.877-1.43.58-2.97.878-4.515.878-1.544 0-3.084-.3-4.515-.88-2.284-.925-4.256-2.57-5.59-4.642-.555-.866-1-1.805-1.315-2.785-.355-1.1-.55-2.25-.577-3.404-.028-1.154.11-2.31.412-3.425.318-1.18.82-2.31 1.48-3.34 1.2-1.866 2.92-3.39 4.92-4.347 1.092-.524 2.264-.88 3.463-1.052.476-.068.954-.102 1.434-.12.29-.003.288-.003.576 0zM23.67 9.8L9.874 23.597c.736.59 1.556 1.074 2.432 1.43 1.17.474 2.432.718 3.695.718s2.524-.244 3.695-.72c2.51-1.017 4.536-3.09 5.49-5.625.363-.96.573-1.976.622-3 .05-1.023-.062-2.053-.33-3.04-.26-.966-.67-1.89-1.21-2.73-.183-.288-.383-.565-.596-.83zM22.13 8.256c-.58-.465-1.213-.865-1.885-1.186-.894-.427-1.852-.718-2.833-.86-.39-.056-.78-.083-1.175-.098-.235-.003-.234-.003-.47 0-.394.015-.785.042-1.175.1-.98.14-1.94.43-2.833.86-1.637.783-3.044 2.03-4.025 3.557-.54.84-.95 1.764-1.21 2.73-.246.912-.36 1.86-.338 2.803.023.946.182 1.888.472 2.788.26.802.62 1.57 1.076 2.276.184.287.384.564.597.83l13.798-13.8z\"/></symbol><symbol id=\"svg-panel\" data-name=\"panel\" viewBox=\"0 0 468 234\" width=\"468\" height=\"234\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" stroke-linejoin=\"round\" stroke-miterlimit=\"1.414\"><path fill=\"#d6dde7\" d=\"M371.4 41c1.6 0 3 1.4 3 3v56c0 1.6-1.4 3-3 3H96.6c-1.6 0-3-1.4-3-3V44c0-1.6 1.4-3 3-3h274.8m0-5H96.6c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h274.8c4.4 0 8-3.6 8-8V44c0-4.4-3.6-8-8-8zM371.4 198H96.6c-4.4 0-8-3.6-8-8v-56c0-4.4 3.6-8 8-8h274.8c4.4 0 8 3.6 8 8v56c0 4.4-3.6 8-8 8z\"/></symbol><symbol id=\"svg-pencil-circle\" data-name=\"pencil-circle\" viewBox=\"0 0 33 33\" width=\"33\" height=\"33\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" stroke-linejoin=\"round\" stroke-miterlimit=\"1.414\"><circle cx=\"16.024\" cy=\"16.024\" r=\"16.024\" fill-opacity=\".149\"/><path d=\"M7.925 18.165c3.857-4.193 8.057-8.058 12.086-12.087.123-.112.256-.198.417-.24.07-.02.088-.02.16-.03.08-.002.08-.002.162 0 .07.01.088.01.158.03.134.035.248.1.357.185 1.634 1.497 3.137 3.132 4.704 4.7.055.06.106.12.147.192.136.236.16.526.068.782-.037.104-.094.192-.16.28-3.865 4.216-8.087 8.09-12.132 12.135l-.022.02c-.07.066-.15.12-.237.16-.022.012-.044.022-.067.032-2.164.718-4.384 1.256-6.577 1.882-.137.033-.27.047-.41.024-.357-.06-.654-.332-.746-.684-.035-.136-.033-.27-.013-.408.53-2.22 1.252-4.39 1.878-6.582.006-.02.013-.037.02-.055.034-.095.084-.186.148-.267l.016-.02.017-.02c.008-.01.016-.02.025-.028zm.16 5.796l3.335-.952c-.81-.77-1.616-1.546-2.39-2.35l-.944 3.303zm5.185-1.852l7.013-7.013-3.33-3.33-7.032 7.03c1.14 1.082 2.28 2.164 3.35 3.313zm4.996-11.658l3.33 3.33L24 11.38l-3.332-3.332-2.402 2.402z\"/></symbol><symbol id=\"svg-plus-circle\" data-name=\"plus-circle\" viewBox=\"0 0 32 32\" width=\"32\" height=\"32\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" stroke-linejoin=\"round\" stroke-miterlimit=\"1.414\"><circle cx=\"16\" cy=\"16\" r=\"16\" fill-opacity=\".149\"/><path d=\"M23.24 17.376h-5.792v5.792c0 .8-.65 1.448-1.448 1.448-.8 0-1.448-.648-1.448-1.448v-5.792H8.76c-.8 0-1.448-.65-1.448-1.448 0-.8.65-1.448 1.448-1.448h5.792V8.688c0-.8.65-1.448 1.448-1.448.8 0 1.448.65 1.448 1.448v5.792h5.792c.8 0 1.448.65 1.448 1.448 0 .8-.65 1.448-1.448 1.448\" fill-rule=\"nonzero\"/></symbol><symbol id=\"svg-progress-bars\" data-name=\"progress-bars\" viewBox=\"0 0 468 234\" width=\"468\" height=\"234\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" stroke-linejoin=\"round\" stroke-miterlimit=\"1.414\"><path fill=\"#dfe3e6\" d=\"M401.6 129.5H66.4c-6.9 0-12.5-5.6-12.5-12.5s5.6-12.5 12.5-12.5h335.3c6.9 0 12.5 5.6 12.5 12.5-.1 6.9-5.7 12.5-12.6 12.5z\"/><path fill=\"#efc102\" d=\"M333.4 129.5h-267c-6.9 0-12.5-5.6-12.5-12.5s5.6-12.5 12.5-12.5h267c6.9 0 12.5 5.6 12.5 12.5-.1 6.9-5.7 12.5-12.5 12.5z\"/></symbol><symbol id=\"svg-progress-circle\" data-name=\"progress-circle\" viewBox=\"0 0 32 32\" width=\"32\" height=\"32\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" stroke-linejoin=\"round\" stroke-miterlimit=\"1.414\"><circle cx=\"16\" cy=\"16\" r=\"16\" fill-opacity=\".149\"/><g fill-rule=\"nonzero\"><path d=\"M16 21.288c-.58 0-1.048.47-1.048 1.048v3.52c0 .58.47 1.05 1.048 1.05.578 0 1.048-.47 1.048-1.05v-3.52c0-.58-.47-1.048-1.048-1.048\" fill-opacity=\".502\"/><path d=\"M25.955 14.9l-3.458-.008c-.597.013-1.05.467-1.05 1.046-.002.58.467 1.05 1.046 1.05l3.458.007h.003c.577 0 1.046-.468 1.048-1.046 0-.58-.467-1.05-1.045-1.05\" fill-opacity=\".251\"/><path d=\"M16.025 2.832h-.003c-.577 0-1.045.468-1.047 1.046l-.01 5.46c-.002.58.466 1.05 1.044 1.05h.002c.578 0 1.046-.467 1.047-1.045l.01-5.46c.002-.58-.466-1.05-1.045-1.05\"/><path d=\"M13.75 20.81c-.536-.223-1.148.03-1.37.565l-1.375 3.298c-.223.534.03 1.147.563 1.37.133.054.27.082.403.082.412 0 .8-.243.97-.647l1.373-3.297c.224-.533-.028-1.147-.562-1.37\" fill-opacity=\".6\"/><path d=\"M19.604 21.393c-.22-.537-.833-.79-1.367-.572-.535.22-.79.833-.57 1.37l1.354 3.298c.168.406.56.65.97.65.133 0 .27-.024.398-.078.536-.22.79-.833.572-1.367l-1.356-3.3z\" fill-opacity=\".4\"/><path d=\"M9.5 16.964h.002c.578 0 1.046-.468 1.048-1.046 0-.58-.467-1.05-1.046-1.05L6.05 14.86h-.003C5.47 14.86 5 15.33 5 15.908c-.003.578.465 1.05 1.045 1.05l3.455.007z\" fill-opacity=\".902\"/><path d=\"M21.075 13.83c.166.405.557.65.97.65.132 0 .267-.026.398-.08l3.158-1.296c.535-.22.79-.833.57-1.366-.22-.535-.83-.793-1.367-.57l-3.158 1.294c-.536.22-.79.833-.57 1.367\" fill-opacity=\".2\"/><path d=\"M10.992 17.99c-.22-.536-.83-.794-1.367-.57l-3.228 1.332c-.535.22-.79.833-.57 1.366.167.405.558.65.97.65.13 0 1.557-.558 1.688-.613l1.938-.798c.535-.22.79-.833.57-1.367\" fill-opacity=\".8\"/><path d=\"M21.28 19.75c-.407-.408-1.07-.41-1.48-.002-.41.41-.412 1.072-.002 1.482l2.482 2.49c.205.204.475.308.743.308s.535-.103.74-.306c.41-.41.41-1.07.003-1.482l-2.485-2.49z\" fill-opacity=\".349\"/><path d=\"M19.902 12.04c.205.205.474.308.743.308.268 0 .536-.102.74-.305l2.405-2.397c.41-.41.412-1.072.002-1.482-.408-.41-1.07-.41-1.48-.003l-2.405 2.398c-.412.41-.412 1.07-.005 1.482\" fill-opacity=\".149\"/><path d=\"M18.13 10.813c.132.054.27.08.403.08.41 0 .8-.242.968-.645l1.292-3.107c.223-.532-.03-1.145-.564-1.368-.535-.222-1.15.032-1.37.565l-1.292 3.106c-.222.534.03 1.147.564 1.37\" fill-opacity=\".102\"/><path d=\"M13.176 6.326c-.22-.535-.834-.793-1.368-.57-.534.222-.79.834-.57 1.37l1.287 3.115c.166.406.556.65.97.65.13 0 .267-.025.397-.08.536-.22.79-.833.57-1.367l-1.286-3.117zM10.626 12.015c.204.205.473.308.742.308.267 0 .535-.102.74-.305.41-.41.41-1.073.002-1.482l-2.393-2.4c-.41-.41-1.072-.41-1.48-.002-.412.41-.413 1.07-.005 1.482l2.394 2.4z\"/><path d=\"M12.186 19.73c-.41-.412-1.072-.413-1.482-.004L8.208 22.21c-.41.41-.41 1.072-.002 1.482.204.206.472.308.743.308.265 0 .533-.1.737-.305l2.495-2.485c.41-.408.41-1.07.004-1.48\" fill-opacity=\".702\"/><path d=\"M25.59 18.787l-3.214-1.338c-.534-.223-1.148.03-1.37.563-.222.535.03 1.148.565 1.37l3.214 1.34c.13.054.268.08.403.08.41 0 .8-.243.967-.644.223-.537-.03-1.15-.564-1.373\" fill-opacity=\".302\"/><path d=\"M6.407 13.07l3.16 1.314c.13.054.267.08.4.08.41 0 .8-.243.968-.646.223-.533-.03-1.146-.564-1.37l-3.156-1.314c-.535-.222-1.15.03-1.37.564-.223.535.03 1.148.563 1.37\"/></g></symbol><symbol id=\"svg-progress\" data-name=\"progress\" viewBox=\"0 0 32 32\" width=\"32\" height=\"32\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" stroke-linejoin=\"round\" stroke-miterlimit=\"1.414\"><circle cx=\"16\" cy=\"16\" r=\"16\" fill=\"none\"/><g fill-rule=\"nonzero\"><path d=\"M16 22.915c-.758 0-1.37.613-1.37 1.37v4.605c0 .756.612 1.37 1.37 1.37.756 0 1.37-.614 1.37-1.37v-4.605c0-.757-.614-1.37-1.37-1.37\" fill-opacity=\".502\"/><path d=\"M29.018 14.56l-4.522-.008c-.78.016-1.373.61-1.373 1.367-.002.756.61 1.37 1.368 1.372l4.522.01h.003c.755 0 1.367-.612 1.37-1.37 0-.755-.61-1.37-1.367-1.37\" fill-opacity=\".251\"/><path d=\"M16.033.242h-.002c-.754 0-1.367.61-1.37 1.367l-.015 5.68c0 .755.61 1.37 1.367 1.372h.003c.756 0 1.37-.61 1.37-1.368l.016-5.68c.003-.757-.61-1.37-1.367-1.372\"/><path d=\"M13.06 22.29c-.703-.292-1.503.04-1.795.738L9.468 27.34c-.29.7.04 1.5.736 1.79.174.074.352.11.528.11.537 0 1.045-.318 1.266-.846l1.796-4.31c.292-.7-.037-1.503-.735-1.793\" fill-opacity=\".6\"/><path d=\"M20.713 23.052c-.287-.702-1.09-1.035-1.788-.748-.7.287-1.035 1.09-.747 1.79l1.773 4.313c.22.53.73.85 1.27.85.172 0 .35-.032.52-.1.7-.29 1.033-1.09.747-1.79l-1.774-4.315z\" fill-opacity=\".4\"/><path d=\"M7.5 17.26h.003c.755 0 1.368-.61 1.37-1.367 0-.758-.61-1.372-1.367-1.373l-4.518-.01h-.003c-.756 0-1.37.612-1.37 1.368-.003.757.61 1.372 1.367 1.373l4.52.01z\" fill-opacity=\".902\"/><path d=\"M22.636 13.162c.218.53.73.85 1.267.85.174 0 .35-.034.522-.105l4.13-1.694c.698-.287 1.033-1.09.744-1.786-.29-.7-1.088-1.037-1.79-.745l-4.13 1.692c-.7.287-1.032 1.09-.744 1.788\" fill-opacity=\".2\"/><path d=\"M9.45 18.602c-.287-.7-1.085-1.04-1.787-.745l-4.22 1.74c-.7.29-1.033 1.09-.745 1.788.217.53.728.85 1.267.85.172 0 2.036-.73 2.208-.8l2.534-1.045c.7-.288 1.033-1.09.744-1.788\" fill-opacity=\".8\"/><path d=\"M22.906 20.904c-.533-.534-1.4-.537-1.937-.002-.537.534-.54 1.4-.004 1.937l3.246 3.255c.27.267.62.402.97.402.352 0 .7-.134.97-.4.536-.534.537-1.4.003-1.937l-3.25-3.256z\" fill-opacity=\".349\"/><path d=\"M21.103 10.822c.267.268.62.402.97.402.352 0 .7-.133.97-.398l3.144-3.135c.536-.534.538-1.4.003-1.937-.535-.535-1.4-.537-1.938-.004L21.11 8.883c-.54.535-.54 1.4-.007 1.938\" fill-opacity=\".149\"/><path d=\"M18.786 9.217c.173.07.35.106.526.106.536 0 1.047-.318 1.266-.844l1.69-4.064c.29-.697-.04-1.5-.74-1.79-.7-.29-1.5.04-1.792.738l-1.69 4.06c-.29.7.04 1.5.74 1.793\" fill-opacity=\".102\"/><path d=\"M12.307 3.35c-.29-.7-1.09-1.037-1.79-.744-.698.288-1.032 1.09-.743 1.79l1.682 4.074c.216.528.727.848 1.267.848.173 0 .35-.033.52-.105.7-.287 1.034-1.09.746-1.787L12.306 3.35zM8.973 10.79c.267.267.618.4.97.4.35 0 .7-.132.967-.397.536-.535.54-1.403.003-1.938l-3.13-3.137c-.533-.537-1.4-.538-1.936-.004-.537.535-.54 1.4-.004 1.938l3.13 3.137z\"/><path d=\"M11.012 20.876c-.536-.537-1.402-.538-1.937-.004l-3.265 3.25c-.535.533-.537 1.4-.002 1.936.267.27.618.403.97.403.35 0 .7-.13.967-.398l3.263-3.25c.536-.533.537-1.4.004-1.936\" fill-opacity=\".702\"/><path d=\"M28.54 19.645l-4.203-1.75c-.697-.29-1.5.04-1.79.738-.29.698.04 1.5.738 1.792l4.202 1.75c.17.07.35.106.526.106.537 0 1.045-.317 1.264-.842.292-.7-.038-1.502-.737-1.793\" fill-opacity=\".302\"/><path d=\"M3.456 12.167l4.13 1.72c.172.07.35.105.526.105.537 0 1.047-.318 1.264-.846.292-.697-.038-1.498-.737-1.79l-4.13-1.72c-.698-.29-1.5.04-1.79.74-.292.698.038 1.5.736 1.79\"/></g></symbol><symbol id=\"svg-question-circle\" data-name=\"question-circle\" viewBox=\"0 0 32 32\" width=\"32\" height=\"32\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" stroke-linejoin=\"round\" stroke-miterlimit=\"1.414\"><circle cx=\"16\" cy=\"16\" r=\"16\" fill-opacity=\".149\"/><path d=\"M17.46 17.292v3.053c0 .807-.653 1.46-1.46 1.46-.807 0-1.46-.653-1.46-1.46v-4.33c0-.804.653-1.46 1.46-1.46 1.584 0 2.87-1.284 2.87-2.868 0-1.584-1.286-2.87-2.87-2.87s-2.87 1.286-2.87 2.87c0 .806-.654 1.46-1.46 1.46-.81 0-1.462-.654-1.462-1.46 0-3.194 2.598-5.792 5.792-5.792s5.792 2.598 5.792 5.792c0 2.69-1.84 4.956-4.33 5.605M16 25.398c-.798 0-1.444-.643-1.444-1.444 0-.795.646-1.438 1.444-1.438.798 0 1.444.643 1.444 1.438 0 .8-.646 1.444-1.444 1.444\" fill-rule=\"nonzero\"/></symbol><symbol id=\"svg-refresh-circle\" data-name=\"refresh-circle\" viewBox=\"0 0 33 33\" width=\"33\" height=\"33\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" stroke-linejoin=\"round\" stroke-miterlimit=\"1.414\"><circle cx=\"16.024\" cy=\"16.024\" r=\"16.024\" fill-opacity=\".149\"/><path d=\"M25.628 10.107l-1.048 4.12c-.012.046-.044.086-.064.135-.172.46-.638.794-1.13.794-.033 0-.065-.01-.1-.012-.032-.003-.06-.008-.09-.013-.038-.006-.077-.004-.114-.013l-4.117-1.05c-.66-.168-1.06-.836-.893-1.497.17-.663.836-1.062 1.502-.89l1.462.37c-.506-.614-1.122-1.137-1.842-1.53-1.47-.81-3.17-.99-4.775-.526-1.613.47-2.945 1.538-3.75 3.01-.81 1.47-1 3.168-.526 4.777.967 3.327 4.46 5.247 7.785 4.276.655-.185 1.338.185 1.525.838.193.654-.182 1.336-.838 1.53-.813.235-1.632.35-2.44.35-3.79 0-7.29-2.486-8.402-6.302-.653-2.246-.392-4.608.732-6.656 1.125-2.046 2.98-3.533 5.224-4.19 2.242-.65 4.604-.393 6.65.73 1.015.56 1.893 1.298 2.598 2.173l.26-1.03c.17-.662.842-1.064 1.5-.89.658.166 1.058.837.89 1.497\" fill-rule=\"nonzero\"/></symbol><symbol id=\"svg-restore\" data-name=\"restore\" viewBox=\"0 0 33 33\" width=\"33\" height=\"33\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" stroke-linejoin=\"round\" stroke-miterlimit=\"1.414\"><circle cx=\"16.024\" cy=\"16.024\" r=\"16.024\" fill=\"none\"/><path d=\"M24.34 7.216c-2.384-2.223-5.49-3.388-8.75-3.273-3.396.12-6.64 1.703-8.9 4.348-1.456 1.707-2.397 3.723-2.777 5.888l-1.456-2.193c-.356-.535-1.076-.68-1.612-.325-.535.354-.682 1.076-.325 1.61l3.478 5.24c.415.658 1.42.695 1.9.057l4.02-4.575c.423-.483.375-1.217-.107-1.642-.482-.422-1.216-.374-1.64.107l-1.982 2.256c.295-1.81 1.06-3.496 2.27-4.91 1.838-2.152 4.467-3.44 7.212-3.536 2.638-.096 5.154.85 7.085 2.65 1.93 1.8 3.044 4.244 3.136 6.883.094 2.638-.846 5.153-2.647 7.085-1.8 1.93-4.246 3.044-6.884 3.136-.643.023-1.145.56-1.123 1.203.023.628.538 1.122 1.163 1.122h.04c3.26-.114 6.28-1.49 8.503-3.874 2.225-2.385 3.387-5.494 3.272-8.75-.114-3.26-1.49-6.28-3.874-8.504\" fill-rule=\"nonzero\"/></symbol><symbol id=\"svg-search-circle\" data-name=\"search-circle\" viewBox=\"0 0 33 33\" width=\"33\" height=\"33\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" stroke-linejoin=\"round\" stroke-miterlimit=\"1.414\"><circle cx=\"16.024\" cy=\"16.024\" r=\"16.024\" fill-opacity=\".149\"/><path d=\"M7.716 13.77c0-3.362 2.738-6.102 6.105-6.102 3.363 0 6.1 2.74 6.1 6.103 0 3.365-2.737 6.105-6.1 6.105-3.366 0-6.104-2.74-6.104-6.104m18.19 10.785l-5.88-5.882c1.073-1.353 1.74-3.042 1.74-4.902 0-4.38-3.564-7.948-7.945-7.948-4.383 0-7.95 3.567-7.95 7.95 0 4.382 3.567 7.95 7.95 7.95 1.857 0 3.548-.67 4.9-1.744l5.883 5.882c.18.18.415.27.652.27.236 0 .472-.09.65-.27.363-.358.363-.943 0-1.305\" fill-rule=\"nonzero\"/></symbol><symbol id=\"svg-section\" data-name=\"section\" viewBox=\"0 0 468 234\" width=\"468\" height=\"234\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" stroke-linejoin=\"round\" stroke-miterlimit=\"1.414\"><path fill=\"#f69524\" d=\"M228.9 112.3h-76.1V55.9c0-10.9 8.8-19.7 19.7-19.7h56.4v76.1z\"/><path fill=\"#d6dde7\" d=\"M228.9 197.8h-56.6c-10.8 0-19.5-8.7-19.5-19.5v-56.6h76.1v76.1zM315.2 112.3h-76.1V36.2H296c10.6 0 19.2 8.6 19.2 19.2v56.9zM295.7 197.8h-56.6v-76.1h76.1v56.6c0 10.7-8.7 19.5-19.5 19.5z\"/></symbol><symbol id=\"svg-sliders\" data-name=\"sliders\" viewBox=\"0 0 468 234\" width=\"468\" height=\"234\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" stroke-linejoin=\"round\" stroke-miterlimit=\"1.414\"><circle fill=\"#297adf\" cx=\"164.6\" cy=\"117\" r=\"6.6\"/><path fill=\"#297adf\" d=\"M145.7 117c0-1.7.3-3.4.7-5H80.2c-2-5-6.8-8.5-12.5-8.5-7.5 0-13.5 6-13.5 13.5s6 13.5 13.5 13.5c5.7 0 10.5-3.5 12.5-8.5h66.2c-.5-1.6-.7-3.3-.7-5z\"/><path fill=\"#d6dde7\" d=\"M400.3 103.5c-5.7 0-10.5 3.5-12.5 8.5H246.5c-2-5-6.8-8.5-12.5-8.5s-10.5 3.5-12.5 8.5h-38.6c-2.2-8-9.5-13.9-18.2-13.9-10.4 0-18.9 8.5-18.9 18.9 0 10.4 8.5 18.9 18.9 18.9 8.7 0 16-5.9 18.2-13.9h38.6c2 5 6.8 8.5 12.5 8.5s10.5-3.5 12.5-8.5h141.3c2 5 6.8 8.5 12.5 8.5 7.5 0 13.5-6 13.5-13.5s-6-13.5-13.5-13.5zm-235.7 27.4c-7.7 0-13.9-6.2-13.9-13.9s6.2-13.9 13.9-13.9 13.9 6.2 13.9 13.9-6.2 13.9-13.9 13.9zm18.9-12.3c0-.5.1-1.1.1-1.6s0-1.1-.1-1.6c0 .5.1 1.1.1 1.6s-.1 1.1-.1 1.6zm-.2 1.4c0-.2.1-.5.1-.7 0 .3-.1.5-.1.7zm0-6c0 .2.1.5.1.7 0-.3-.1-.5-.1-.7z\"/></symbol><symbol id=\"svg-star-circle\" data-name=\"star-circle\" viewBox=\"0 0 33 33\" width=\"33\" height=\"33\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" stroke-linejoin=\"round\" stroke-miterlimit=\"1.414\"><circle cx=\"16.024\" cy=\"16.024\" r=\"16.024\" fill-opacity=\".149\"/><path d=\"M16.08 5.155c.28.025.535.142.71.367.053.067.09.137.126.213l2.607 6.106h6.06l.082.005c.17.022.325.07.466.17.376.263.512.773.317 1.188-.06.13-.15.233-.254.328l-5.213 4.342 2.63 7.014.025.08c.04.167.048.33.004.5-.118.445-.554.75-1.014.708-.172-.016-.323-.08-.467-.174l-6.136-4.38L9.89 26l-.072.046c-.15.08-.307.13-.48.132-.462.002-.87-.34-.947-.796-.028-.17-.004-.333.05-.496l2.628-7.014-5.213-4.34-.062-.057c-.096-.104-.175-.215-.224-.35-.16-.43.02-.926.418-1.156.15-.087.308-.122.478-.13h6.062l2.632-6.108.036-.074c.042-.072.086-.14.144-.2.155-.167.354-.258.576-.296.082-.007.082-.007.164-.007zm-2.045 8.02c-.035.072-.072.14-.12.205-.13.168-.316.29-.522.343-.08.02-.156.026-.236.03h-4.05l3.706 3.084.062.057c.058.063.11.125.154.2.097.17.14.37.123.567-.01.087-.03.166-.057.247l-1.768 4.717 4.14-2.955.072-.047c.076-.04.15-.076.233-.098.19-.052.397-.043.583.025.08.03.15.072.223.12l4.14 2.954-1.768-4.717-.026-.08c-.02-.083-.034-.164-.035-.25 0-.197.06-.393.175-.554.05-.07.107-.128.17-.186l3.705-3.084h-4.05l-.078-.004c-.08-.01-.157-.024-.234-.05-.26-.09-.45-.283-.566-.528l-1.98-4.637c-.665 1.547-1.33 3.093-1.997 4.64z\" fill-rule=\"nonzero\"/></symbol><symbol id=\"svg-status-completed\" data-name=\"status-completed\" viewBox=\"0 0 32 32\" width=\"32\" height=\"32\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" stroke-linejoin=\"round\" stroke-miterlimit=\"1.414\"><path d=\"M24.965 12.802l-10.267 11.25-7.626-7.62c-.48-.486-.48-1.262 0-1.742.482-.484 1.26-.484 1.74 0l5.805 5.802 8.53-9.35c.46-.503 1.24-.538 1.74-.08s.538 1.238.078 1.74M16 0C7.178 0 0 7.178 0 16s7.178 16 16 16 16-7.178 16-16S24.822 0 16 0\" fill-rule=\"nonzero\"/></symbol><symbol id=\"svg-status-failed\" data-name=\"status-failed\" viewBox=\"0 0 33 32\" width=\"33\" height=\"32\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" stroke-linejoin=\"round\" stroke-miterlimit=\"1.414\"><path d=\"M16.217 26.67c-.754 0-1.362-.61-1.362-1.36 0-.752.608-1.36 1.362-1.36.75 0 1.36.608 1.36 1.36 0 .75-.61 1.36-1.36 1.36M14.97 13.06c0-.688.558-1.247 1.247-1.247.688 0 1.247.56 1.247 1.247v8.163c0 .69-.56 1.248-1.247 1.248-.69 0-1.248-.557-1.248-1.248v-8.163zm17.423 17.32L17.65.89c-.026-.05-.06-.08-.086-.126-.192-.312-.477-.54-.816-.66 0 0 .003-.004.005-.004C16.58.04 16.403 0 16.217 0c-.567 0-1.063.294-1.348.76-.025.043-.058.076-.08.118L.133 30.194c-.195.386-.175.846.052 1.212.23.37.63.594 1.063.594H31.21c.69 0 1.247-.56 1.247-1.247 0-.13-.027-.252-.064-.372\" fill-rule=\"nonzero\"/></symbol><symbol id=\"svg-status-partial\" data-name=\"status-partial\" viewBox=\"0 0 32 32\" width=\"32\" height=\"32\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" stroke-linejoin=\"round\" stroke-miterlimit=\"1.414\"><path d=\"M16 0C7.178 0 0 7.178 0 16s7.178 16 16 16 16-7.178 16-16S24.822 0 16 0zm.013 2.472v27.055l.102.01c1.764-.014 3.52-.375 5.147-1.064 1.555-.658 2.982-1.61 4.19-2.79 1.168-1.142 2.13-2.492 2.82-3.97.566-1.21.95-2.5 1.135-3.82.207-1.478.17-2.99-.11-4.454-.24-1.25-.66-2.463-1.24-3.594-1.32-2.57-3.46-4.69-6.05-5.977-1.19-.594-2.468-1.007-3.78-1.226-.565-.095-1.133-.147-1.703-.173-.17-.004-.34-.015-.51.002z\"/><path d=\"M16.013 2.472v27.055l.102.01c1.764-.014 3.52-.375 5.147-1.064 1.555-.658 2.982-1.61 4.19-2.79 1.168-1.142 2.13-2.492 2.82-3.97.566-1.21.95-2.5 1.135-3.82.207-1.478.17-2.99-.11-4.454-.24-1.25-.66-2.463-1.24-3.594-1.32-2.57-3.46-4.69-6.05-5.977-1.19-.594-2.468-1.007-3.78-1.226-.565-.095-1.133-.147-1.703-.173-.17-.004-.34-.015-.51.002z\" fill-opacity=\".149\"/></symbol><symbol id=\"svg-status-pending\" data-name=\"status-pending\" viewBox=\"0 0 32 32\" width=\"32\" height=\"32\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" stroke-linejoin=\"round\" stroke-miterlimit=\"1.414\"><path d=\"M20 18.666h-6.666V8c0-.736.596-1.332 1.332-1.332C15.404 6.668 16 7.264 16 8v8h4c.738 0 1.334.596 1.334 1.334 0 .74-.596 1.332-1.334 1.332M16 0C7.178 0 0 7.178 0 16s7.178 16 16 16 16-7.178 16-16S24.822 0 16 0\" fill-rule=\"nonzero\"/></symbol><symbol id=\"svg-sync-circle\" data-name=\"sync-circle\" viewBox=\"0 0 33 33\" width=\"33\" height=\"33\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" stroke-linejoin=\"round\" stroke-miterlimit=\"1.414\"><circle cx=\"16.024\" cy=\"16.024\" r=\"16.024\" fill-opacity=\".149\"/><path d=\"M25.754 19.267c-1.384 3.912-5.102 6.538-9.254 6.538-2.776 0-5.45-1.168-7.36-3.014v.833c0 .68-.547 1.227-1.227 1.227-.677 0-1.227-.547-1.227-1.227v-4.77c0-.678.55-1.228 1.227-1.228h4.77c.68 0 1.228.55 1.228 1.227 0 .678-.547 1.227-1.226 1.227h-2.668c1.41 1.958 3.88 3.27 6.484 3.27 3.114 0 5.905-1.97 6.943-4.903.223-.638.922-.974 1.565-.748.638.225.972.93.746 1.567M6.294 12.78c1.383-3.91 5.1-6.537 9.254-6.537 2.775 0 5.453 1.17 7.36 3.018v-.835c0-.675.547-1.227 1.227-1.227.677 0 1.227.552 1.227 1.227v4.77c0 .68-.55 1.227-1.227 1.227h-4.77c-.678 0-1.228-.547-1.228-1.227 0-.677.55-1.227 1.227-1.227h2.667c-1.407-1.956-3.88-3.27-6.482-3.27-3.115 0-5.905 1.97-6.94 4.902-.18.503-.653.818-1.157.818-.136 0-.273-.02-.408-.07-.64-.227-.975-.927-.75-1.567\" fill-rule=\"nonzero\"/></symbol><symbol id=\"svg-tables\" data-name=\"tables\" viewBox=\"0 0 468 234\" width=\"468\" height=\"234\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" stroke-linejoin=\"round\" stroke-miterlimit=\"1.414\"><path fill=\"#c3cddb\" d=\"M366.6 197.9c4.4 0 8.1-3.6 8.1-8.1V44.2c0-4.4-3.6-8.1-8.1-8.1H101.4c-4.4 0-8.1 3.6-8.1 8.1V189.8c0 4.4 3.6 8.1 8.1 8.1h265.2zm3-153.7v43.6h-86.2V41.2h83.2c1.6 0 3 1.4 3 3zm-180 43.6V41.2h88.7v46.6h-88.7zm88.8 5.1V142h-88.7V92.9h88.7zm-180-48.7c0-1.6 1.4-3 3-3h83.2v46.6H98.4V44.2zm0 48.7h86.2V142H98.4V92.9zm3 99.9c-1.6 0-3-1.4-3-3V147h86.2v45.8h-83.2zm88.2 0V147h88.7v45.8h-88.7zm180-3c0 1.6-1.4 3-3 3h-83.2V147h86.2v42.8zm0-47.8h-86.2V92.9h86.2V142z\"/><path fill=\"#a346ce\" d=\"M369.6 44.2v43.6h-86.2V41.2h83.2c1.6 0 3 1.4 3 3zM189.6 41.2h88.7v46.6h-88.7zM98.4 44.2c0-1.6 1.4-3 3-3h83.2v46.6H98.4V44.2z\"/></symbol><symbol id=\"svg-text\" data-name=\"text\" viewBox=\"0 0 468 234\" width=\"468\" height=\"234\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" stroke-linejoin=\"round\" stroke-miterlimit=\"1.414\"><path fill=\"#297adf\" d=\"M228 172.7l-8.3-21.8h-52.1l-8.3 21.8h-22.6l44.6-113.5h24.9l44.6 113.5H228zm-34.3-93.4l-20.4 54.1h40.9l-20.5-54.1zM313.5 172.7v-8.9c-6.1 7-15.7 10.9-26.6 10.9-13.4 0-28.6-9-28.6-27.2 0-18.9 15.1-26.7 28.6-26.7 11.1 0 20.6 3.6 26.6 10.6v-12.3c0-9.5-7.8-15.3-19.2-15.3-9.2 0-17.2 3.4-24.3 10.4l-7.3-12.4c9.5-9 21.4-13.3 34.6-13.3 18.2 0 34.2 7.7 34.2 29.8v54.5h-18zm0-18.7v-12.4c-4.1-5.6-11.7-8.5-19.6-8.5-10 0-17.5 5.8-17.5 14.8 0 8.9 7.5 14.6 17.5 14.6 7.8 0 15.5-2.9 19.6-8.5z\"/></symbol><symbol id=\"svg-thumbs-up-circle\" data-name=\"thumbs-up-circle\" viewBox=\"0 0 32 32\" width=\"32\" height=\"32\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" stroke-linejoin=\"round\" stroke-miterlimit=\"1.414\"><circle cx=\"16\" cy=\"16\" r=\"16\" fill-opacity=\".149\"/><path d=\"M23.07 18.6c.78 0 1.413.634 1.413 1.415 0 .78-.632 1.414-1.413 1.414h-.943c.78 0 1.414.632 1.414 1.413 0 .78-.632 1.414-1.413 1.414H16c-3.77 0-2.828-1.886-10.37-1.886V13.89h2.83c3.298 0 7.07-3.037 7.07-7.54 0-1.49 2.827-1.68 2.827 1.148 0 1.885-.943 5.45-.943 5.45h7.54c.782 0 1.415.633 1.415 1.413s-.634 1.413-1.415 1.413h-.943c.782 0 1.414.634 1.414 1.414 0 .782-.632 1.414-1.414 1.414h-.942\" fill-rule=\"nonzero\"/></symbol><symbol id=\"svg-time\" data-name=\"time\" viewBox=\"0 0 468 234\" width=\"468\" height=\"234\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" stroke-linejoin=\"round\" stroke-miterlimit=\"1.414\"><circle fill=\"#c3cddb\" cx=\"234\" cy=\"117\" r=\"80.8\"/><path fill=\"#fff\" d=\"M261.1 148.1c-1 0-2-.4-2.8-1.2l-27.1-27.1c-.8-.8-1.2-1.8-1.2-2.8V56.2c0-2.2 1.8-4 4-4s4 1.8 4 4v59.2l25.9 25.9c1.6 1.6 1.6 4.1 0 5.7-.8.7-1.8 1.1-2.8 1.1z\"/></symbol><symbol id=\"svg-validation\" data-name=\"validation\" viewBox=\"0 0 468 234\" width=\"468\" height=\"234\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" stroke-linejoin=\"round\" stroke-miterlimit=\"1.414\"><path fill=\"#dd2f41\" d=\"M332 69.7H136c-4.4 0-8 3.6-8 8v83.2c0 1.9 1.5 3.4 3.4 3.4h205.2c1.9 0 3.4-1.5 3.4-3.4V77.7c0-4.4-3.6-8-8-8zm-141.7 75.5h-52.1v-9.3h52.1v9.3zM335 111.8H133V77.7c0-1.6 1.4-3 3-3h196c1.6 0 3 1.4 3 3v34.1z\"/></symbol><symbol id=\"svg-warning-circle\" data-name=\"warning-circle\" viewBox=\"0 0 33 33\" width=\"33\" height=\"33\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" stroke-linejoin=\"round\" stroke-miterlimit=\"1.414\"><circle cx=\"16.024\" cy=\"16.024\" r=\"16.024\" fill-opacity=\".149\"/><path d=\"M16.898 17.985c0 .493-.4.892-.892.892s-.89-.4-.89-.892V13.12c0-.49.398-.89.89-.89s.892.4.892.89v4.865zm-.892 3.242c-.446 0-.81-.364-.81-.81 0-.45.364-.81.81-.81.448 0 .81.36.81.81 0 .446-.362.81-.81.81m9.614 1.837L16.803 5.43c-.303-.605-1.29-.605-1.594 0L6.293 23.26c-.14.276-.125.604.04.866.16.264.448.425.757.425h17.867c.492 0 .892-.4.892-.89 0-.23-.087-.44-.23-.596\" fill-rule=\"nonzero\"/></symbol><symbol id=\"svg-x-circle\" data-name=\"x-circle\" viewBox=\"0 0 32 32\" width=\"32\" height=\"32\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" stroke-linejoin=\"round\" stroke-miterlimit=\"1.414\"><circle cx=\"16\" cy=\"16\" r=\"16\" fill-opacity=\".149\"/><path d=\"M23.484 21.68c.478.477.478 1.254 0 1.732-.24.24-.554.36-.868.36-.31 0-.625-.12-.865-.36L16 17.662l-5.75 5.75c-.24.24-.555.36-.866.36-.314 0-.628-.12-.868-.36-.478-.478-.478-1.255 0-1.733l5.752-5.752-5.752-5.75c-.478-.477-.478-1.253 0-1.73.478-.48 1.255-.48 1.735 0L16 14.195l5.75-5.75c.48-.48 1.256-.48 1.734 0s.478 1.255 0 1.733l-5.752 5.748 5.752 5.75z\" fill-rule=\"nonzero\"/></symbol></svg>')\n }\n }\n\n // If DOM is already ready, embed SVGs\n if (document.readyState == 'interactive') { embed() }\n\n // Handle Turbolinks page change events\n if ( window.Turbolinks ) {\n document.addEventListener(\"turbolinks:load\", function(event) { embed() })\n }\n\n // Handle standard DOM ready events\n document.addEventListener(\"DOMContentLoaded\", function(event) { embed() })\n})()","var Event = require('compose-event')\nvar notify = require('../modules/notify')\n\n// If a page has an element .form-flash, trigger a notification\n//\nEvent.change(function(){\n var flash = document.querySelector('.flash-message:not(.fired)')\n if (flash) {\n flash.classList.add('hidden','fired')\n notify(flash.dataset.type, flash.innerHTML.trim())\n }\n})\n\n","var toolbox = require( 'compose-toolbox' )\nvar Event = toolbox.event\nvar notify = require( '../modules/notify' )\n\n\n// Handle submit behaviors:\n// - disable button on submit\n// - submit messages\n//\nEvent.on( document, 'submit', function(event) {\n\n // Send form messages\n // Look for an element with the data-submit-message or use the form itself\n var message = ( event.target.querySelector('[data-submit-message]') || event.target ).dataset.submitMessage\n if ( message ) notify( 'form-action', message )\n\n var button = event.target.querySelector('[type=submit]')\n if ( button.dataset.disableOnSubmit == 'false' ) return\n\n if (!button.dataset.disableWith) button.dataset.disableOnSubmit = true\n button.disabled = true\n\n // Look for elements with disable-with text and replace the text\n var elements = event.target.querySelectorAll('[data-disable-with]')\n\n toolbox.each( elements, function( el ) {\n var buttonText = el.querySelector('.button-text') || el\n\n el.dataset.enabledText = buttonText.innerHTML\n buttonText.innerHTML = el.dataset.disableWith\n })\n\n\n event.preventDefault()\n event.stopImmediatePropagation()\n\n // This allows the submit functions to occur\n toolbox.event.delay( function() {\n document.body.classList.add('modal')\n })\n\n if ( document.body.dataset.fakeSubmit ) {\n var ev = new CustomEvent('fake-submit', { bubbles: true, cancelable: true })\n event.target.dispatchEvent( ev ) \n } else {\n event.target.submit()\n }\n\n})\n\n// When a back button is used:\n// - Disabled buttons remain disabled\n// - Progress notifications remain active\n//\n// This renables buttons and hides notifications.\nwindow.onpageshow = function(event) {\n\n document.body.classList.remove('modal')\n \n var button = document.querySelector('[data-disable-with][disabled],[data-disable-on-submit][disabled]')\n if ( button ) button.disabled = false\n\n if ( button && button.dataset.enabledText ) {\n var buttonText = button.querySelector('.button-text') || button\n buttonText.innerHTML = button.dataset.enabledText\n }\n\n // Dismiss leftover progress notifications\n if ( document.querySelector( '.notification.form-action' ) ) {\n notify.remove()\n }\n}\n","var Event = require('compose-event')\n\nfunction numberInputOnly(event) {\n var key = event.keyCode,\n numberKeys = ( 47 < key && key < 58 ),\n numPadKeys = ( 95 < key && key < 106 ),\n decimals = ( key == 110 || key == 190 ),\n modifiers = ( Event.key.alt || Event.key.shift ),\n inputKey = !(( key < 46 && key != 32 ) || Event.key.command ),\n numInput = (( numberKeys || numPadKeys || decimals ) && !( modifiers && 47 < key ) )\n\n if ( !numInput && inputKey ) {\n event.preventDefault()\n event.stopPropagation()\n }\n}\n\n// Prevent non numeric input on input type of number\nEvent.on( document, 'keydown', 'input[type=number]', numberInputOnly )\n","var toolbox = require('compose-toolbox'),\n Event = toolbox.event,\n convert = require('../modules/unit-converter'),\n formUp = require( 'compose-form-up' )\n\nfunction setup(el) {\n el.dataset.unitKey = String(Math.random()).split('.')[1]\n\n el.parentElement.insertAdjacentHTML( 'afterend', setupInput(el) )\n el.insertAdjacentHTML( 'afterend', setupSelect(el) )\n\n var select = el.nextElementSibling\n\n setValue(el)\n // Add some padding between input entry and select, based on width of select\n el.style.paddingRight = (el.offsetWidth - select.offsetLeft + 10) + 'px'\n}\n\nfunction randID () {\n return Math.random().toString(36).substring(3)\n}\n\nfunction setupSelect(el) {\n var units = ['B', 'KB', 'MB', 'GB', 'TB'],\n selectId = `unit-select-${randID()}`,\n select = `<span class='unit-select'><select id='${selectId}' tabindex='-1' aria-label='units' data-default='${el.dataset.unit}' data-initial-value='${el.dataset.unit}' data-unit-select='${el.dataset.unitKey}'>`,\n selected = el.dataset.unit,\n wrapper = toolbox.getClosest( el, 'label' ),\n checked\n\n units.forEach(function(unit) {\n checked = ( (selected == unit) ? ' selected' : '' )\n select += `<option${checked}>${unit}</option>`\n })\n\n if ( wrapper ) {\n var defaultInput = wrapper.querySelector('[data-restore-default]')\n if ( defaultInput ) defaultInput.dataset.restoreDefault += `, #${selectId}`\n }\n\n select = select + \"</select></span>\"\n\n return select\n}\n\nfunction setupInput(el) {\n name = el.name\n el.name = name + '_value'\n return '<input data-unit-input=\"'+el.dataset.unitKey+'\" type=\"hidden\" name=\"'+name+'\">'\n}\n\nfunction setValue(el) {\n el = el.target || el\n var input = document.querySelector('[data-unit-input=\"'+el.dataset.unitKey+'\"]')\n var select = document.querySelector('[data-unit-select=\"'+el.dataset.unitKey+'\"]')\n input.value = convert(el.value, select.value, el.dataset.unit).value\n}\n\nfunction unitChange(event) {\n var unitKey = event.target.dataset.unitSelect\n var el = document.querySelector('[data-unit-key=\"'+unitKey+'\"]')\n setValue(el)\n}\n\nEvent.change( function() {\n toolbox.each( document.querySelectorAll( '[data-unit]' ), setup )\n})\n\nEvent.on(document, 'input', '[data-unit]', setValue)\nEvent.on(document, 'input', '[data-unit-select]', unitChange)\n","var Event = require('compose-event')\n\nEvent.change(function(){\n Array.prototype.forEach.call(document.querySelectorAll('[data-match-url]'), function(node){\n var matcher = node.getAttribute('data-match-url')\n if (matcher && new RegExp(node.dataset.matchUrl, \"i\").test(location.pathname)) {\n node.classList.add('here')\n }\n })\n})\n\n","var Event = require( 'compose-event' )\n\nfunction autoSizeTextarea( textarea ) {\n var parent = textarea.parentElement\n\n if ( textarea.value == '' ) return\n if ( parent.classList.contains('input-wrapper') ) {\n\n parent.style.height = textarea.style.height\n var offset = textarea.offsetHeight - textarea.clientHeight\n textarea.style.height = 'auto'\n var newHeight = ( textarea.scrollHeight + offset )\n var maxHeight = window.innerHeight * .95\n\n if ( newHeight < maxHeight )\n textarea.style.height = newHeight + 'px'\n else\n textarea.style.height = maxHeight + 'px'\n\n parent.style.height = 'auto'\n }\n}\n\nEvent.change(function(){\n var textareas = document.querySelectorAll('textarea')\n Event.delay( function(){ Array.prototype.forEach.call(textareas, autoSizeTextarea) } )\n})\n\nEvent.on(document, 'keyup toggler:show', 'textarea', function(event){\n autoSizeTextarea(event.currentTarget)\n})\n\n\n","var event = require( 'compose-toolbox' ).event\n\n// Public API function\nvar clipboard = function() {\n\n // Listen for click events\n event.on( document, 'click', '[data-copy-target]', copy )\n\n // Copy to clipboard handler\n function copy( event ) {\n\n // Assignment\n var copyTrigger = event.currentTarget,\n copyElement = document.querySelector( copyTrigger.dataset.copyTarget )\n\n // Prevent default behavior\n event.preventDefault()\n\n // Is the element selectable?\n if ( copyElement && copyElement.select ) {\n\n // Select text\n copyElement.select();\n\n // Give it a try\n try {\n\n // Copy text\n document.execCommand( 'copy' )\n\n // Blur the element\n copyElement.blur()\n\n // Trigger copied state\n copyTrigger.classList.add( 'copied' )\n\n // Remove copied state after a couple seconds\n setTimeout( function() {\n copyTrigger.classList.remove( 'copied' )\n }, 2000 )\n\n // If it borks\n } catch ( err ) {\n\n // Go nuclear\n alert( 'please press Ctrl/Cmd+C to copy' )\n\n }\n\n }\n\n }\n}\n\nmodule.exports = clipboard\n","var Event = require( 'compose-event' ),\n toolbox = require( 'compose-toolbox' ),\n esvg = require( '../_esvg' ),\n\n defaultsByType = {\n success: { dismissAfter: 3500 },\n },\n\n iconsByType = {\n message: \"message-circle\",\n error: \"no-circle\",\n progress: \"progress-circle\",\n 'form-action': \"progress-circle\",\n success: \"thumbs-up-circle\",\n },\n\n autoDismissTimeout,\n messageEl,\n\n template = '\\\n<div class=\"notification\">\\\n <div class=\"notification-content\">\\\n <div class=\"notification-message\" role=\"alert\"></div>\\\n <button class=\"notification-close\" href=\"#\" role=\"button\" aria-label=\"close message\">\\\n </button>\\\n </div>\\\n</div>\\\n'\n\nfunction notify (type, message, options) {\n\n if ( !options && typeof message == 'object' ) {\n options = message\n message = type\n type = 'message'\n }\n\n if ( !message ) {\n message = type\n type = 'message'\n }\n\n return show( type, message, toolbox.merge( defaultsByType[type], options || {} ) )\n}\n\nfunction show ( type, message, options ) {\n\n clearTimeout( autoDismissTimeout )\n if ( messageEl ) return dismiss( function(){ show( type, message, options ) })\n\n document.body.insertAdjacentHTML( 'beforeend', template )\n messageEl = document.body.lastChild\n var typeIcon = esvg.use( iconsByType[type] || type )\n var closeIcon = esvg.use( 'x-circle', { 'scale': true, 'class': 'close-icon' } )\n\n var msg = messageEl.querySelector( '.notification-message' )\n msg.innerHTML = message\n\n if ( typeIcon ) msg.insertAdjacentHTML( 'beforebegin', \"<span class='notification-type-icon'>\" + typeIcon.outerHTML + \"</span>\" )\n if ( closeIcon ) messageEl.querySelector( '.notification-close' ).innerHTML = closeIcon.outerHTML\n\n if ( type ) {\n\n messageEl.classList.add( type )\n\n if ( options && options.dismissAfter ){\n autoDismissTimeout = window.setTimeout( dismiss, options.dismissAfter )\n }\n }\n\n messageEl = document.body.lastChild\n\n Event.keyOne( 'esc', dismiss )\n Event.one( messageEl, 'click', '.notification-close', dismiss )\n\n return {\n dismiss: dismiss\n }\n}\n\nfunction dismiss ( callback ) {\n\n if ( document.querySelector('.notification') == null ) { return }\n\n clearTimeout( autoDismissTimeout )\n\n var cb\n\n if ( typeof callback == 'function' ) {\n cb = function() { remove(); callback() }\n } else {\n cb = remove;\n }\n\n var timeout = window.setTimeout( cb, 500 )\n\n Event.one( messageEl, 'animationstart', function() {\n clearTimeout( timeout )\n\n Event.afterAnimation( messageEl, cb )\n })\n\n messageEl.classList.add( 'dismiss' )\n}\n\nfunction remove () {\n messageEl = document.querySelector('body > .notification')\n\n if (messageEl) {\n messageEl.parentNode.removeChild( messageEl )\n }\n messageEl = null\n}\n\nnotify.dismiss = dismiss\nnotify.remove = remove\n\nmodule.exports = notify\n","const unitsTable = {\n bit: 1,\n byte: 8,\n kilobyte: 1000 * 8,\n megabyte: 1000 * 1000 * 8,\n gigabyte: 1000 * 1000 * 1000 * 8,\n terabyte: 1000 * 1000 * 1000 * 1000 * 8 \n}\nconst aliases = {\n b: 'bit',\n B: 'byte',\n KB: 'kilobyte',\n MB: 'megabyte',\n GB: 'gigabyte',\n TB: 'terabyte'\n}\n\nfunction shortUnit(unit) {\n for (let key in aliases) {\n if (aliases[key] == unit) unit = key\n }\n\n return unit\n}\nfunction longUnit(size, unit) {\n return pluralize(size, unit.charAt(0).toUpperCase() + unit.slice(1))\n}\n\nfunction alias(unit) {\n return aliases[unit] || unit.toLowerCase()\n}\n\nfunction pluralize(val, unit) {\n if ( val != 1 ) unit += 's'\n return unit\n}\n\nfunction convert(num, as, to) {\n var to = alias(to),\n base = unitsTable[alias(as)],\n target = unitsTable[to]\n var num = (num * base / target)\n \n \n var conversion = { \n value: num,\n unit: shortUnit(to),\n long: longUnit(num, to)\n }\n return conversion\n}\n\nmodule.exports = convert\n","// Icons must come before event registrations\nrequire( './_icons' ) // Import svg icons (from Esvg)\nvar esvg = require( './_esvg' )\n\nvar toolbox = require( 'compose-toolbox' )\nvar timeToggle = require( 'compose-time-toggle' ) // Switch time elements between local and UTC\nvar toggler = require( 'compose-toggler' )\nvar formUp = require( 'compose-form-up' )\nvar dialog = require( 'compose-dialog' )\nvar ajax = require( 'superagent' )\nvar clipboard = require( './modules/clipboard' )\nvar notify = require( './modules/notify' )\nvar event = toolbox.event\n\nevent.scroll.disablePointer() // disable pointer events on scroll for performance (to avoid extra repaints)\nclipboard();\n\nrequire( 'compose-slider' ) // Our slider (range input) component\nrequire( './enhancements/flash-messages' )\nrequire( './enhancements/form-submit-helpers' )\nrequire( './enhancements/input-number-only' )\nrequire( './enhancements/input-unit' )\nrequire( './enhancements/link-here' )\nrequire( './enhancements/textarea-expand' )\n\nevent.change( timeToggle.timeago.setup )\nformUp.diff.watch()\n\n// Public API object\nwindow.Tungsten = module.exports = toolbox.merge( {\n ajax : ajax,\n form : formUp,\n toggler : toggler,\n clipboard : clipboard,\n notify : notify,\n esvg : esvg,\n timeToggle : timeToggle,\n dialog : dialog\n}, toolbox )\n","/*!\n * Bean - copyright (c) Jacob Thornton 2011-2012\n * https://github.com/fat/bean\n * MIT license\n */\n(function (name, context, definition) {\n if (typeof module != 'undefined' && module.exports) module.exports = definition()\n else if (typeof define == 'function' && define.amd) define(definition)\n else context[name] = definition()\n})('bean', this, function (name, context) {\n name = name || 'bean'\n context = context || this\n\n var win = window\n , old = context[name]\n , namespaceRegex = /[^\\.]*(?=\\..*)\\.|.*/\n , nameRegex = /\\..*/\n , addEvent = 'addEventListener'\n , removeEvent = 'removeEventListener'\n , doc = document || {}\n , root = doc.documentElement || {}\n , W3C_MODEL = root[addEvent]\n , eventSupport = W3C_MODEL ? addEvent : 'attachEvent'\n , ONE = {} // singleton for quick matching making add() do one()\n\n , slice = Array.prototype.slice\n , str2arr = function (s, d) { return s.split(d || ' ') }\n , isString = function (o) { return typeof o == 'string' }\n , isFunction = function (o) { return typeof o == 'function' }\n , isObject = function (o) { return typeof o == 'object' }\n\n // Try to build an options object. If any key in `maybeOptions`\n // matches a key in `defaults`, it will be copied into a clone\n // of `defaults`, thus overriding the default.\n , buildOptions = function (originalDefaults, maybeOptions) {\n var defaults = {}\n\n for (var key in originalDefaults) {\n if (originalDefaults.hasOwnProperty(key)) {\n defaults[key] = originalDefaults[key];\n }\n }\n\n if (!isObject(maybeOptions)) {\n return defaults;\n }\n\n for (key in defaults) {\n if (defaults.hasOwnProperty(key) && maybeOptions.hasOwnProperty(key)) {\n defaults[key] = maybeOptions[key]\n }\n }\n\n return defaults\n }\n\n // events that we consider to be 'native', anything not in this list will\n // be treated as a custom event\n , standardNativeEvents =\n 'click dblclick mouseup mousedown contextmenu ' + // mouse buttons\n 'mousewheel mousemultiwheel DOMMouseScroll ' + // mouse wheel\n 'mouseover mouseout mousemove selectstart selectend ' + // mouse movement\n 'keydown keypress keyup ' + // keyboard\n 'orientationchange ' + // mobile\n 'focus blur change reset select submit ' + // form elements\n 'load unload beforeunload resize move DOMContentLoaded ' + // window\n 'readystatechange message ' + // window\n 'error abort scroll ' // misc\n // element.fireEvent('onXYZ'... is not forgiving if we try to fire an event\n // that doesn't actually exist, so make sure we only do these on newer browsers\n , w3cNativeEvents =\n 'show ' + // mouse buttons\n 'input invalid ' + // form elements\n 'touchstart touchmove touchend touchcancel ' + // touch\n 'gesturestart gesturechange gestureend ' + // gesture\n 'textinput ' + // TextEvent\n 'readystatechange pageshow pagehide popstate ' + // window\n 'hashchange offline online ' + // window\n 'afterprint beforeprint ' + // printing\n 'dragstart dragenter dragover dragleave drag drop dragend ' + // dnd\n 'loadstart progress suspend emptied stalled loadmetadata ' + // media\n 'loadeddata canplay canplaythrough playing waiting seeking ' + // media\n 'seeked ended durationchange timeupdate play pause ratechange ' + // media\n 'volumechange cuechange ' + // media\n 'checking noupdate downloading cached updateready obsolete ' // appcache\n\n // convert to a hash for quick lookups\n , nativeEvents = (function (hash, events, i) {\n for (i = 0; i < events.length; i++) events[i] && (hash[events[i]] = 1)\n return hash\n }({}, str2arr(standardNativeEvents + (W3C_MODEL ? w3cNativeEvents : ''))))\n\n // custom events are events that we *fake*, they are not provided natively but\n // we can use native events to generate them\n , customEvents = (function () {\n var isAncestor = 'compareDocumentPosition' in root\n ? function (element, container) {\n return container.compareDocumentPosition && (container.compareDocumentPosition(element) & 16) === 16\n }\n : 'contains' in root\n ? function (element, container) {\n container = container.nodeType === 9 || container === window ? root : container\n return container !== element && container.contains(element)\n }\n : function (element, container) {\n while (element = element.parentNode) if (element === container) return 1\n return 0\n }\n , check = function (event) {\n var related = event.relatedTarget\n return !related\n ? related == null\n : (related !== this && related.prefix !== 'xul' && !/document/.test(this.toString())\n && !isAncestor(related, this))\n }\n\n return {\n mouseenter: { base: 'mouseover', condition: check }\n , mouseleave: { base: 'mouseout', condition: check }\n , mousewheel: { base: /Firefox/.test(navigator.userAgent) ? 'DOMMouseScroll' : 'mousewheel' }\n }\n }())\n\n // we provide a consistent Event object across browsers by taking the actual DOM\n // event object and generating a new one from its properties.\n , Event = (function () {\n // a whitelist of properties (for different event types) tells us what to check for and copy\n var commonProps = str2arr('altKey attrChange attrName bubbles cancelable ctrlKey currentTarget ' +\n 'detail eventPhase getModifierState isTrusted metaKey relatedNode relatedTarget shiftKey ' +\n 'srcElement target timeStamp type view which propertyName path')\n , mouseProps = commonProps.concat(str2arr('button buttons clientX clientY dataTransfer ' +\n 'fromElement offsetX offsetY pageX pageY screenX screenY toElement movementX movementY region'))\n , mouseWheelProps = mouseProps.concat(str2arr('wheelDelta wheelDeltaX wheelDeltaY wheelDeltaZ ' +\n 'axis')) // 'axis' is FF specific\n , keyProps = commonProps.concat(str2arr('char charCode key keyCode keyIdentifier ' +\n 'keyLocation location isComposing code'))\n , textProps = commonProps.concat(str2arr('data'))\n , touchProps = commonProps.concat(str2arr('touches targetTouches changedTouches scale rotation'))\n , messageProps = commonProps.concat(str2arr('data origin source'))\n , stateProps = commonProps.concat(str2arr('state'))\n , overOutRegex = /over|out/\n // some event types need special handling and some need special properties, do that all here\n , typeFixers = [\n { // key events\n reg: /key/i\n , fix: function (event, newEvent) {\n newEvent.keyCode = event.keyCode || event.which\n return keyProps\n }\n }\n , { // mouse events\n reg: /click|mouse(?!(.*wheel|scroll))|menu|drag|drop/i\n , fix: function (event, newEvent, type) {\n newEvent.rightClick = event.which === 3 || event.button === 2\n newEvent.pos = { x: 0, y: 0 }\n if (event.pageX || event.pageY) {\n newEvent.clientX = event.pageX\n newEvent.clientY = event.pageY\n } else if (event.clientX || event.clientY) {\n newEvent.clientX = event.clientX + doc.body.scrollLeft + root.scrollLeft\n newEvent.clientY = event.clientY + doc.body.scrollTop + root.scrollTop\n }\n if (overOutRegex.test(type)) {\n newEvent.relatedTarget = event.relatedTarget\n || event[(type == 'mouseover' ? 'from' : 'to') + 'Element']\n }\n return mouseProps\n }\n }\n , { // mouse wheel events\n reg: /mouse.*(wheel|scroll)/i\n , fix: function () { return mouseWheelProps }\n }\n , { // TextEvent\n reg: /^text/i\n , fix: function () { return textProps }\n }\n , { // touch and gesture events\n reg: /^touch|^gesture/i\n , fix: function () { return touchProps }\n }\n , { // message events\n reg: /^message$/i\n , fix: function () { return messageProps }\n }\n , { // popstate events\n reg: /^popstate$/i\n , fix: function () { return stateProps }\n }\n , { // everything else\n reg: /.*/\n , fix: function () { return commonProps }\n }\n ]\n , typeFixerMap = {} // used to map event types to fixer functions (above), a basic cache mechanism\n\n , Event = function (event, element, isNative) {\n if (!arguments.length) return\n event = event || ((element.ownerDocument || element.document || element).parentWindow || win).event\n this.originalEvent = event\n this.isNative = isNative\n this.isBean = true\n\n if (!event) return\n\n var type = event.type\n , target = event.target || event.srcElement\n , i, l, p, props, fixer\n\n this.target = target && target.nodeType === 3 ? target.parentNode : target\n\n if (isNative) { // we only need basic augmentation on custom events, the rest expensive & pointless\n fixer = typeFixerMap[type]\n if (!fixer) { // haven't encountered this event type before, map a fixer function for it\n for (i = 0, l = typeFixers.length; i < l; i++) {\n if (typeFixers[i].reg.test(type)) { // guaranteed to match at least one, last is .*\n typeFixerMap[type] = fixer = typeFixers[i].fix\n break\n }\n }\n }\n\n props = fixer(event, this, type)\n for (i = props.length; i--;) {\n if (!((p = props[i]) in this) && p in event) this[p] = event[p]\n }\n }\n }\n\n // preventDefault() and stopPropagation() are a consistent interface to those functions\n // on the DOM, stop() is an alias for both of them together\n Event.prototype.preventDefault = function () {\n if (this.originalEvent.preventDefault) this.originalEvent.preventDefault()\n else this.originalEvent.returnValue = false\n }\n Event.prototype.stopPropagation = function () {\n if (this.originalEvent.stopPropagation) this.originalEvent.stopPropagation()\n else this.originalEvent.cancelBubble = true\n }\n Event.prototype.stop = function () {\n this.preventDefault()\n this.stopPropagation()\n this.stopped = true\n }\n // stopImmediatePropagation() has to be handled internally because we manage the event list for\n // each element\n // note that originalElement may be a Bean#Event object in some situations\n Event.prototype.stopImmediatePropagation = function () {\n if (this.originalEvent.stopImmediatePropagation) this.originalEvent.stopImmediatePropagation()\n this.isImmediatePropagationStopped = function () { return true }\n }\n Event.prototype.isImmediatePropagationStopped = function () {\n return this.originalEvent.isImmediatePropagationStopped && this.originalEvent.isImmediatePropagationStopped()\n }\n Event.prototype.clone = function (currentTarget) {\n //TODO: this is ripe for optimisation, new events are *expensive*\n // improving this will speed up delegated events\n var ne = new Event(this, this.element, this.isNative)\n ne.currentTarget = currentTarget\n return ne\n }\n\n return Event\n }())\n\n // if we're in old IE we can't do onpropertychange on doc or win so we use doc.documentElement for both\n , targetElement = function (element, isNative) {\n return !W3C_MODEL && !isNative && (element === doc || element === win) ? root : element\n }\n\n /**\n * Bean maintains an internal registry for event listeners. We don't touch elements, objects\n * or functions to identify them, instead we store everything in the registry.\n * Each event listener has a RegEntry object, we have one 'registry' for the whole instance.\n */\n , RegEntry = (function () {\n // each handler is wrapped so we can handle delegation and custom events\n var wrappedHandler = function (element, fn, condition, args) {\n var call = function (event, eargs) {\n return fn.apply(element, args ? slice.call(eargs, event ? 0 : 1).concat(args) : eargs)\n }\n , findTarget = function (event, eventElement) {\n return fn.__beanDel ? fn.__beanDel.ft(event.target, element) : eventElement\n }\n , handler = condition\n ? function (event) {\n var target = findTarget(event, this) // deleated event\n if (condition.apply(target, arguments)) {\n if (event) event.currentTarget = target\n return call(event, arguments)\n }\n }\n : function (event) {\n if (fn.__beanDel) event = event.clone(findTarget(event)) // delegated event, fix the fix\n return call(event, arguments)\n }\n handler.__beanDel = fn.__beanDel\n return handler\n }\n\n , RegEntry = function (element, type, handler, original, namespaces, args, root) {\n var customType = customEvents[type]\n , isNative\n\n if (type == 'unload') {\n // self clean-up\n handler = once(removeListener, element, type, handler, original)\n }\n\n if (customType) {\n if (customType.condition) {\n handler = wrappedHandler(element, handler, customType.condition, args)\n }\n type = customType.base || type\n }\n\n this.isNative = isNative = nativeEvents[type] && !!element[eventSupport]\n this.customType = !W3C_MODEL && !isNative && type\n this.element = element\n this.type = type\n this.original = original\n this.namespaces = namespaces\n this.eventType = W3C_MODEL || isNative ? type : 'propertychange'\n this.target = targetElement(element, isNative)\n this[eventSupport] = !!this.target[eventSupport]\n this.root = root\n this.handler = wrappedHandler(element, handler, null, args)\n }\n\n // given a list of namespaces, is our entry in any of them?\n RegEntry.prototype.inNamespaces = function (checkNamespaces) {\n var i, j, c = 0\n if (!checkNamespaces) return true\n if (!this.namespaces) return false\n for (i = checkNamespaces.length; i--;) {\n for (j = this.namespaces.length; j--;) {\n if (checkNamespaces[i] == this.namespaces[j]) c++\n }\n }\n return checkNamespaces.length === c\n }\n\n // match by element, original fn (opt), handler fn (opt)\n RegEntry.prototype.matches = function (checkElement, checkOriginal, checkHandler) {\n return this.element === checkElement &&\n (!checkOriginal || this.original === checkOriginal) &&\n (!checkHandler || this.handler === checkHandler)\n }\n\n return RegEntry\n }())\n\n , registry = (function () {\n // our map stores arrays by event type, just because it's better than storing\n // everything in a single array.\n // uses '$' as a prefix for the keys for safety and 'r' as a special prefix for\n // rootListeners so we can look them up fast\n var map = {}\n\n // generic functional search of our registry for matching listeners,\n // `fn` returns false to break out of the loop\n , forAll = function (element, type, original, handler, root, fn) {\n var pfx = root ? 'r' : '$'\n if (!type || type == '*') {\n // search the whole registry\n for (var t in map) {\n if (t.charAt(0) == pfx) {\n forAll(element, t.substr(1), original, handler, root, fn)\n }\n }\n } else {\n var i = 0, l, list = map[pfx + type], all = element == '*'\n if (!list) return\n for (l = list.length; i < l; i++) {\n if ((all || list[i].matches(element, original, handler)) && !fn(list[i], list, i, type)) return\n }\n }\n }\n\n , has = function (element, type, original, root) {\n // we're not using forAll here simply because it's a bit slower and this\n // needs to be fast\n var i, list = map[(root ? 'r' : '$') + type]\n if (list) {\n for (i = list.length; i--;) {\n if (!list[i].root && list[i].matches(element, original, null)) return true\n }\n }\n return false\n }\n\n , get = function (element, type, original, root) {\n var entries = []\n forAll(element, type, original, null, root, function (entry) {\n return entries.push(entry)\n })\n return entries\n }\n\n , put = function (entry) {\n var has = !entry.root && !this.has(entry.element, entry.type, null, false)\n , key = (entry.root ? 'r' : '$') + entry.type\n ;(map[key] || (map[key] = [])).push(entry)\n return has\n }\n\n , del = function (entry) {\n forAll(entry.element, entry.type, null, entry.handler, entry.root, function (entry, list, i) {\n list.splice(i, 1)\n entry.removed = true\n if (list.length === 0) delete map[(entry.root ? 'r' : '$') + entry.type]\n return false\n })\n }\n\n // dump all entries, used for onunload\n , entries = function () {\n var t, entries = []\n for (t in map) {\n if (t.charAt(0) == '$') entries = entries.concat(map[t])\n }\n return entries\n }\n\n return { has: has, get: get, put: put, del: del, entries: entries }\n }())\n\n // we need a selector engine for delegated events, use querySelectorAll if it exists\n // but for older browsers we need Qwery, Sizzle or similar\n , selectorEngine\n , setSelectorEngine = function (e) {\n if (!arguments.length) {\n selectorEngine = doc.querySelectorAll\n ? function (s, r) {\n return r.querySelectorAll(s)\n }\n : function () {\n throw new Error('Bean: No selector engine installed') // eeek\n }\n } else {\n selectorEngine = e\n }\n }\n\n // we attach this listener to each DOM event that we need to listen to, only once\n // per event type per DOM element\n , rootListener = function (event, type) {\n if (!W3C_MODEL && type && event && event.propertyName != '_on' + type) return\n\n var listeners = registry.get(this, type || event.type, null, false)\n , l = listeners.length\n , i = 0\n\n event = new Event(event, this, true)\n if (type) event.type = type\n\n // iterate through all handlers registered for this type, calling them unless they have\n // been removed by a previous handler or stopImmediatePropagation() has been called\n for (; i < l && !event.isImmediatePropagationStopped(); i++) {\n if (!listeners[i].removed) listeners[i].handler.call(this, event)\n }\n }\n\n // add and remove listeners to DOM elements\n , listener = W3C_MODEL\n ? function (element, type, add, custom, useCapture) {\n // new browsers\n element[add ? addEvent : removeEvent](type, rootListener, useCapture)\n }\n : function (element, type, add, custom /*, useCapture */) {\n // IE8 and below, use attachEvent/detachEvent and we have to piggy-back propertychange events\n // to simulate event bubbling etc.\n var entry\n if (add) {\n registry.put(entry = new RegEntry(\n element\n , custom || type\n , function (event) { // handler\n rootListener.call(element, event, custom)\n }\n , rootListener\n , null\n , null\n , true // is root\n ))\n if (custom && element['_on' + custom] == null) element['_on' + custom] = 0\n entry.target.attachEvent('on' + entry.eventType, entry.handler)\n } else {\n entry = registry.get(element, custom || type, rootListener, true)[0]\n if (entry) {\n entry.target.detachEvent('on' + entry.eventType, entry.handler)\n registry.del(entry)\n }\n }\n }\n\n , once = function (rm, element, type, fn, originalFn) {\n // wrap the handler in a handler that does a remove as well\n return function () {\n fn.apply(this, arguments)\n rm(element, type, originalFn)\n }\n }\n\n , removeListener = function (element, orgType, handler, namespaces, useCapture) {\n var type = orgType && orgType.replace(nameRegex, '')\n , handlers = registry.get(element, type, null, false)\n , removed = {}\n , i, l\n\n for (i = 0, l = handlers.length; i < l; i++) {\n if ((!handler || handlers[i].original === handler) && handlers[i].inNamespaces(namespaces)) {\n // TODO: this is problematic, we have a registry.get() and registry.del() that\n // both do registry searches so we waste cycles doing this. Needs to be rolled into\n // a single registry.forAll(fn) that removes while finding, but the catch is that\n // we'll be splicing the arrays that we're iterating over. Needs extra tests to\n // make sure we don't screw it up. @rvagg\n registry.del(handlers[i])\n if (!removed[handlers[i].eventType] && handlers[i][eventSupport])\n removed[handlers[i].eventType] = { t: handlers[i].eventType, c: handlers[i].type }\n }\n }\n // check each type/element for removed listeners and remove the rootListener where it's no longer needed\n for (i in removed) {\n if (!registry.has(element, removed[i].t, null, false)) {\n // last listener of this type, remove the rootListener\n listener(element, removed[i].t, false, removed[i].c, useCapture)\n }\n }\n }\n\n // set up a delegate helper using the given selector, wrap the handler function\n , delegate = function (selector, fn) {\n //TODO: findTarget (therefore $) is called twice, once for match and once for\n // setting e.currentTarget, fix this so it's only needed once\n var findTarget = function (target, root) {\n var i, array = isString(selector) ? selectorEngine(selector, root) : selector\n for (; target && target !== root; target = target.parentNode) {\n for (i = array.length; i--;) {\n if (array[i] === target) return target\n }\n }\n }\n , handler = function (e) {\n var match = findTarget(e.target, this)\n if (match) fn.apply(match, arguments)\n }\n\n // __beanDel isn't pleasant but it's a private function, not exposed outside of Bean\n handler.__beanDel = {\n ft : findTarget // attach it here for customEvents to use too\n , selector : selector\n }\n return handler\n }\n\n , fireListener = W3C_MODEL ? function (isNative, type, element) {\n // modern browsers, do a proper dispatchEvent()\n var evt = doc.createEvent(isNative ? 'HTMLEvents' : 'UIEvents')\n evt[isNative ? 'initEvent' : 'initUIEvent'](type, true, true, win, 1)\n element.dispatchEvent(evt)\n } : function (isNative, type, element) {\n // old browser use onpropertychange, just increment a custom property to trigger the event\n element = targetElement(element, isNative)\n isNative ? element.fireEvent('on' + type, doc.createEventObject()) : element['_on' + type]++\n }\n\n /**\n * Public API: off(), on(), add(), (remove()), one(), fire(), clone()\n */\n\n /**\n * off(element[, eventType(s)[, handler ], options])\n */\n , off = function (element, typeSpec, fn) {\n var isTypeStr = isString(typeSpec),\n defaultOpts = {\n useCapture: false\n }\n , opts = buildOptions(defaultOpts, arguments[arguments.length - 1])\n , k, type, namespaces, i\n\n if (isTypeStr && typeSpec.indexOf(' ') > 0) {\n // off(el, 't1 t2 t3', fn) or off(el, 't1 t2 t3')\n typeSpec = str2arr(typeSpec)\n for (i = typeSpec.length; i--;)\n off(element, typeSpec[i], fn)\n return element\n }\n\n type = isTypeStr && typeSpec.replace(nameRegex, '')\n if (type && customEvents[type]) type = customEvents[type].base\n\n if (!typeSpec || isTypeStr) {\n // off(el) or off(el, t1.ns) or off(el, .ns) or off(el, .ns1.ns2.ns3)\n if (namespaces = isTypeStr && typeSpec.replace(namespaceRegex, '')) namespaces = str2arr(namespaces, '.')\n removeListener(element, type, fn, namespaces, opts.useCapture)\n } else if (isFunction(typeSpec)) {\n // off(el, fn)\n removeListener(element, null, typeSpec, null, opts.useCapture)\n } else {\n // off(el, { t1: fn1, t2, fn2 })\n for (k in typeSpec) {\n if (typeSpec.hasOwnProperty(k)) off(element, k, typeSpec[k])\n }\n }\n\n return element\n }\n\n /**\n * on(element, eventType(s)[, selector], handler[, args ], [options])\n */\n , on = function(element, events, selector, fn) {\n var defaultOpts = {\n useCapture: false\n },\n originalFn, type, types, i, args, entry, first, opts\n\n //TODO: the undefined check means you can't pass an 'args' argument, fix this perhaps?\n if (selector === undefined && typeof events == 'object') {\n //TODO: this can't handle delegated events\n for (type in events) {\n if (events.hasOwnProperty(type)) {\n on.call(this, element, type, events[type])\n }\n }\n return\n }\n\n if (!isFunction(selector)) {\n // delegated event\n originalFn = fn\n args = slice.call(arguments, 4)\n fn = delegate(selector, originalFn, selectorEngine)\n } else {\n args = slice.call(arguments, 3)\n fn = originalFn = selector\n }\n\n opts = buildOptions(defaultOpts, args[args.length - 1])\n types = str2arr(events)\n\n // special case for one(), wrap in a self-removing handler\n if (this === ONE) {\n fn = once(off, element, events, fn, originalFn)\n }\n\n for (i = types.length; i--;) {\n // add new handler to the registry and check if it's the first for this element/type\n first = registry.put(entry = new RegEntry(\n element\n , types[i].replace(nameRegex, '') // event type\n , fn\n , originalFn\n , str2arr(types[i].replace(namespaceRegex, ''), '.') // namespaces\n , args\n , false // not root\n ))\n if (entry[eventSupport] && first) {\n // first event of this type on this element, add root listener\n listener(element, entry.eventType, true, entry.customType, opts.useCapture)\n }\n }\n\n return element\n }\n\n /**\n * add(element[, selector], eventType(s), handler[, args ])\n *\n * Deprecated: kept (for now) for backward-compatibility\n */\n , add = function (element, events, fn, delfn, options) {\n return on.apply(\n null\n , !isString(fn)\n ? slice.call(arguments)\n : [ element, fn, events, delfn ].concat(arguments.length > 3 ? slice.call(arguments, 4) : [])\n )\n }\n\n /**\n * one(element, eventType(s)[, selector], handler[, args ])\n */\n , one = function () {\n return on.apply(ONE, arguments)\n }\n\n /**\n * fire(element, eventType(s)[, args ])\n *\n * The optional 'args' argument must be an array, if no 'args' argument is provided\n * then we can use the browser's DOM event system, otherwise we trigger handlers manually\n */\n , fire = function (element, type, args) {\n var types = str2arr(type)\n , i, j, l, names, handlers\n\n for (i = types.length; i--;) {\n type = types[i].replace(nameRegex, '')\n if (names = types[i].replace(namespaceRegex, '')) names = str2arr(names, '.')\n if (!names && !args && element[eventSupport]) {\n fireListener(nativeEvents[type], type, element)\n } else {\n // non-native event, either because of a namespace, arguments or a non DOM element\n // iterate over all listeners and manually 'fire'\n handlers = registry.get(element, type, null, false)\n args = [false].concat(args)\n for (j = 0, l = handlers.length; j < l; j++) {\n if (handlers[j].inNamespaces(names)) {\n handlers[j].handler.apply(element, args)\n }\n }\n }\n }\n return element\n }\n\n /**\n * clone(dstElement, srcElement[, eventType ])\n *\n * TODO: perhaps for consistency we should allow the same flexibility in type specifiers?\n */\n , clone = function (element, from, type) {\n var handlers = registry.get(from, type, null, false)\n , l = handlers.length\n , i = 0\n , args, beanDel\n\n for (; i < l; i++) {\n if (handlers[i].original) {\n args = [ element, handlers[i].type ]\n if (beanDel = handlers[i].handler.__beanDel) args.push(beanDel.selector)\n args.push(handlers[i].original)\n on.apply(null, args)\n }\n }\n return element\n }\n\n , bean = {\n 'on' : on\n , 'add' : add\n , 'one' : one\n , 'off' : off\n , 'remove' : off\n , 'clone' : clone\n , 'fire' : fire\n , 'Event' : Event\n , 'setSelectorEngine' : setSelectorEngine\n , 'noConflict' : function () {\n context[name] = old\n return this\n }\n }\n\n // for IE, clean up on unload to avoid leaks\n if (win.attachEvent) {\n var cleanup = function () {\n var i, entries = registry.entries()\n for (i in entries) {\n if (entries[i].type && entries[i].type !== 'unload') off(entries[i].element, entries[i].type)\n }\n win.detachEvent('onunload', cleanup)\n win.CollectGarbage && win.CollectGarbage()\n }\n win.attachEvent('onunload', cleanup)\n }\n\n // initialize selector engine to internal default (qSA or throw Error)\n setSelectorEngine()\n\n return bean\n});\n","\r\n/**\r\n * Expose `Emitter`.\r\n */\r\n\r\nif (typeof module !== 'undefined') {\r\n module.exports = Emitter;\r\n}\r\n\r\n/**\r\n * Initialize a new `Emitter`.\r\n *\r\n * @api public\r\n */\r\n\r\nfunction Emitter(obj) {\r\n if (obj) return mixin(obj);\r\n};\r\n\r\n/**\r\n * Mixin the emitter properties.\r\n *\r\n * @param {Object} obj\r\n * @return {Object}\r\n * @api private\r\n */\r\n\r\nfunction mixin(obj) {\r\n for (var key in Emitter.prototype) {\r\n obj[key] = Emitter.prototype[key];\r\n }\r\n return obj;\r\n}\r\n\r\n/**\r\n * Listen on the given `event` with `fn`.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.on =\r\nEmitter.prototype.addEventListener = function(event, fn){\r\n this._callbacks = this._callbacks || {};\r\n (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\r\n .push(fn);\r\n return this;\r\n};\r\n\r\n/**\r\n * Adds an `event` listener that will be invoked a single\r\n * time then automatically removed.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.once = function(event, fn){\r\n function on() {\r\n this.off(event, on);\r\n fn.apply(this, arguments);\r\n }\r\n\r\n on.fn = fn;\r\n this.on(event, on);\r\n return this;\r\n};\r\n\r\n/**\r\n * Remove the given callback for `event` or all\r\n * registered callbacks.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.off =\r\nEmitter.prototype.removeListener =\r\nEmitter.prototype.removeAllListeners =\r\nEmitter.prototype.removeEventListener = function(event, fn){\r\n this._callbacks = this._callbacks || {};\r\n\r\n // all\r\n if (0 == arguments.length) {\r\n this._callbacks = {};\r\n return this;\r\n }\r\n\r\n // specific event\r\n var callbacks = this._callbacks['$' + event];\r\n if (!callbacks) return this;\r\n\r\n // remove all handlers\r\n if (1 == arguments.length) {\r\n delete this._callbacks['$' + event];\r\n return this;\r\n }\r\n\r\n // remove specific handler\r\n var cb;\r\n for (var i = 0; i < callbacks.length; i++) {\r\n cb = callbacks[i];\r\n if (cb === fn || cb.fn === fn) {\r\n callbacks.splice(i, 1);\r\n break;\r\n }\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * Emit `event` with the given args.\r\n *\r\n * @param {String} event\r\n * @param {Mixed} ...\r\n * @return {Emitter}\r\n */\r\n\r\nEmitter.prototype.emit = function(event){\r\n this._callbacks = this._callbacks || {};\r\n var args = [].slice.call(arguments, 1)\r\n , callbacks = this._callbacks['$' + event];\r\n\r\n if (callbacks) {\r\n callbacks = callbacks.slice(0);\r\n for (var i = 0, len = callbacks.length; i < len; ++i) {\r\n callbacks[i].apply(this, args);\r\n }\r\n }\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * Return array of callbacks for `event`.\r\n *\r\n * @param {String} event\r\n * @return {Array}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.listeners = function(event){\r\n this._callbacks = this._callbacks || {};\r\n return this._callbacks['$' + event] || [];\r\n};\r\n\r\n/**\r\n * Check if this emitter has `event` handlers.\r\n *\r\n * @param {String} event\r\n * @return {Boolean}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.hasListeners = function(event){\r\n return !! this.listeners(event).length;\r\n};\r\n","var toolbox = require('compose-toolbox'),\n Event = toolbox.event,\n options = {},\n wrap = document.createElement('div'),\n dialogEl,\n focusedEl,\n defaults = {\n onShow: function(){},\n onClose: function(){},\n buttonTemplate: '<button role=\"button\" class=\"button\"></button>',\n dialogTemplate: '<div role=\"dialog\" class=\"dialog\" aria-labelledby=\"dialog-title\" aria-describedby=\"dialog-description\">\\\n <div class=\"dialog-card\">\\\n <header class=\"dialog-header\">\\\n <h2 class=\"dialog-title\" id=\"dialog-title\"></h2>\\\n </header>\\\n <p class=\"dialog-description\" id=\"dialog-description\"></p>\\\n <div class=\"dialog-response\">\\\n <div class=\"dialog-actions\"></div>\\\n </div>\\\n </div>\\\n</div>'}\n\nfunction show( opts ) {\n if ( typeof opts != 'object' ) { return console.error('Invalid options passed for Dialog', opts) }\n\n if ( !opts.title ) { return console.error('Dialog must have a title', opts) }\n\n focusedEl = document.activeElement\n options = opts\n dialogEl = template( defaults.dialogTemplate )\n\n addText()\n addButtons()\n\n document.body.insertAdjacentElement( 'afterbegin', dialogEl )\n\n listen()\n\n defaults.onShow()\n}\n\nfunction listen() {\n\n Event.on( dialogEl, 'click', '.dialog-continue', continueAction )\n Event.on( dialogEl, 'click', '.dialog-cancel', cancelAction )\n Event.afterAnimation( dialogEl, tab, true )\n\n Event.keyOn( 'tab', 'dialog', tab )\n Event.keyOne( 'enter', 'dialog', continueAction )\n Event.keyOne( 'esc', 'dialog', cancelAction )\n\n Event.key.setScope( 'dialog' )\n}\n\n// Add title and description from options\nfunction addText() {\n\n // Add title\n dialogEl.querySelector( '#dialog-title' ).innerHTML = options.title\n\n // Add optional description\n var descriptionEl = dialogEl.querySelector( '#dialog-description' )\n\n if ( options.description ) {\n descriptionEl.innerHTML = options.description\n } else {\n descriptionEl.parentElement.removeChild( descriptionEl )\n dialogEl.removeAttribute( 'aria-labelledby' )\n }\n\n}\n\n// Add Cancel and Continue buttons (if necessary)\nfunction addButtons() {\n\n if ( options.continue || options.follow || options.submit ) {\n\n var continueButton = template( defaults.buttonTemplate )\n continueButton.classList.add( 'dialog-continue' )\n if ( options.destructive ) { continueButton.classList.add( 'destructive' ) }\n continueButton.innerHTML = options.continue || 'Continue'\n\n dialogEl.querySelector('.dialog-actions').appendChild( continueButton )\n\n options.cancel = options.cancel || 'Cancel'\n }\n\n var cancelButton = template( defaults.buttonTemplate )\n\n cancelButton.classList.add( 'dialog-cancel' )\n cancelButton.innerHTML = options.cancel || ( options.continue ? 'Cancel' : 'OK' )\n\n dialogEl.querySelector('.dialog-actions').appendChild( cancelButton )\n\n}\n\n// In a modal window, `tab` must cycle between elements in the modal.\nfunction tab( event ) {\n\n // Find all focusable elements in the dialog card\n var focusable = dialogEl.querySelectorAll('input:not([type=hidden]), textarea, select, button'),\n last = focusable[focusable.length - 1],\n focused = document.activeElement\n\n // If focused on the last focusable element, tab to the first element.\n if ( focused == last ) {\n if ( event ){ event.preventDefault() }\n focusable[0].focus()\n }\n\n // Focus on the last element if the focused element is not a child of the dialog\n if ( !focused || !toolbox.childOf( focused, dialogEl ) ) {\n last.focus()\n }\n}\n\nfunction triggerButton( selector ) {\n var button = dialogEl.querySelector( selector )\n\n button.focus()\n button.classList.add( 'active' )\n}\n\nfunction cancelAction (event) {\n if (event){ event.preventDefault() }\n\n triggerButton( '.dialog-cancel' )\n\n close( options.onDismiss )\n}\n\nfunction continueAction ( event ) {\n if ( event ){ event.preventDefault() }\n\n triggerButton( '.dialog-continue' )\n\n close( function() {\n if ( options.submit ) {\n\n // Is it an element or a string\n var form = ( options.submit.nodeType ? options.submit : document.querySelector(options.submit) )\n\n Event.submit( form )\n\n } else if ( options.follow ) {\n if( options.follow.match(/^https?:\\/\\//) )\n window.location = options.follow\n else\n window.location.href = options.follow\n }\n\n if ( options.onConfirm ) options.onConfirm()\n })\n}\n\nfunction close( callback ){\n dialogEl.classList.add( 'dismiss' )\n\n Event.afterAnimation( dialogEl, function( event ) {\n if ( callback ) { callback() }\n remove()\n }, true)\n}\n\n\nfunction remove(){\n\n // Remove all event listeners\n Event.key.deleteScope( 'dialog' )\n Event.off( dialogEl, 'click' )\n\n // Remove the element\n document.body.removeChild( dialogEl )\n\n // Fire on close callback\n defaults.onClose()\n\n // Return focus to the focused element before the dialog was shown\n focusedEl.focus()\n}\n\nfunction template( html ) {\n wrap.innerHTML = html\n var el = wrap.firstChild\n wrap.removeChild( el )\n return el\n}\n\n// Get all options from data-dialog-*\nfunction extractOptions( el ) {\n var opts = {\n if: el.dataset.dialogIf,\n follow: el.dataset.dialogFollow,\n title: el.dataset.dialogTitle,\n description: el.dataset.dialogDescription,\n submit: el.dataset.dialogSubmit,\n continue: el.dataset.dialogContinue,\n cancel: el.dataset.dialogCancel,\n confirm: el.dataset.dialogConfirm,\n destructive: el.dataset.dialogDestructive\n }\n\n if ( opts.confirm ) {\n opts.continue = opts.continue || el.innerHTML\n opts.submit = opts.submit || toolbox.getClosest( el, 'form' )\n }\n\n return opts\n}\n\nEvent.ready(function() {\n\n // Trigger is called when a DOM element with data-trigger=dialog is clicked\n // The data attributes are used as options for configuring a dialog\n //\n Event.on( document, 'click', '[data-dialog-title]', function(event){\n var opts = extractOptions( event.currentTarget )\n if ( !opts.if || document.querySelector(opts.if) ) {\n event.preventDefault()\n event.stopImmediatePropagation()\n show( opts )\n }\n })\n})\n\nmodule.exports = {\n show: show,\n cancel: cancelAction,\n continue: continueAction,\n defaults: defaults\n}\n","require( './lib/shims/custom-event' )\n\nvar bean = require( 'bean' )\nvar key = require( 'keymaster' ) \nvar animationEvent = require( './lib/animation-events' )\nvar page = require( './lib/page' )\nvar tap = require( './lib/tap-events' )\nvar debounce = require( './lib/debounce' )\nvar throttle = require( './lib/throttle' )\nvar delay = require( './lib/delay' )\nvar repeat = require( './lib/repeat' )\nvar bubbleFormEvents = require( './lib/bubble-form-events' )\nvar submit = require( './lib/submit' )\nvar scroll = require( './lib/scroll' )\nvar resize = require( './lib/resize' )\nvar callbackManager = require( './lib/callback-manager' )\nvar media = require( './lib/media' )\n\nvar slice = Array.prototype.slice\nvar formBubbling = false\n\nmodule.exports = {\n\n // DOM events\n on: on,\n off: off,\n one: one,\n fire: fire,\n clone: bean.clone,\n ready: page.ready,\n change: page.change,\n afterAnimation: afterAnimation,\n\n // Media query events\n media: media,\n\n // Keyboard events\n key: key,\n keyOn: key,\n keyOff: key.unbind,\n keyOne: keyOne,\n\n // Timing utilities\n debounce: debounce,\n throttle: throttle,\n delay: delay,\n repeat: repeat,\n\n // Optimized Event Managers\n scroll: scroll,\n resize: resize,\n\n callbackManager: callbackManager,\n callback: callbackManager.callback,\n\n // Bubbling fix\n bubbleFormEvents: bubbleFormEvents,\n\n submit: submit\n}\n\n// Bean doesn't account for cross-browser support on animation events\n// So rather than pass through events to bean, we process them to add\n// vendor prefixes or remove events if browsers do not suppor them\n//\nfunction on () {\n setEvent( 'on', slice.call( arguments ) )\n}\n\nfunction off () {\n setEvent( 'off', slice.call( arguments ) )\n}\n\nfunction one () {\n setEvent( 'one', slice.call( arguments ) )\n}\n\nfunction fire () {\n\n args = slice.call( arguments )\n var el = args[0]\n var events = []\n\n args[1].split(' ').forEach( function( event ) {\n\n var event = animationEvent.transform( event )\n if ( !isEmpty( event ) ) events.push( event )\n\n })\n\n if ( !isEmpty( events ) ) {\n\n args[1] = events.join( ' ' )\n bean.fire.apply( this, args )\n\n }\n}\n\nfunction setEvent( registerType, args ) {\n\n transformArgs( args ).forEach( function( arg ) {\n bean[ registerType ].apply( null, arg )\n })\n\n}\n\n// Add support for unbinding a key event after it is called\n//\nfunction keyOne ( keys, scope, fn ) {\n\n if ( typeof scope == 'function' ) {\n fn = scope\n scope = 'all'\n }\n\n key( keys, scope, function( event ) {\n key.unbind( keys, scope )\n fn( event )\n })\n}\n\nfunction afterAnimation( el, callback, checkStart ) {\n var hasAnimation = !!window.getComputedStyle( el ).getPropertyValue( 'animation-duration' )\n\n if ( hasAnimation ) {\n \n // If element is not animating after delay, fire callback\n if ( checkStart ) {\n\n var time = ((typeof checkStart == \"number\") ? checkStart : 20),\n delayedEvent = delay( callback, time )\n\n // Delay with requestAnimationFrame to fire callback only after \n // at least one animation frame has passed\n\n one( el, 'animationstart', function(event) {\n // cancel delayed fire\n delayedEvent.stop()\n\n // watch for animation to finish\n one( el, 'animationend', callback )\n })\n\n\n } else {\n one( el, 'animationend', callback )\n }\n } else {\n callback()\n }\n}\n\n// Transform event arguments to handle tap event and cross-browser animation events\n// Returns an array of events to be registered individually\n//\nfunction transformArgs( args ) {\n\n var transformedArgs = []\n var newEvents = {}\n var element = args.shift() // retrieve element\n var events = args.shift()\n\n // detect event delegate selector\n if ( typeof args[0] != 'function' ) {\n var delegate = args.shift()\n }\n\n // convert event strings to object based events for code simplification\n // example: arguments ('hover focus', function) would become ({ 'hover focus': function })\n if ( typeof events == 'string' ) {\n var objEvents = {}\n objEvents[events] = args.shift()\n events = objEvents\n }\n\n // Walk through each key in the events object and add vendor prefixes to 'animation' events\n // and wrap callback in the tap function for all 'tap' events.\n //\n for ( event in events ) {\n\n if ( events.hasOwnProperty( event ) ) {\n var callback = events[event]\n\n // Events can be registered as space separated groups like \"hover focus\"\n // This handles each event independantly\n //\n event.split(' ').forEach( function( e ){\n\n // If it is an animation event, vendor prefix it, or fire the callback according to browser support\n e = animationEvent.transform( e )\n\n if ( isEmpty( e ) ) {\n // If it's empty, it has been removed since animation events are not supported.\n // In that case, trigger the event immediately\n callback()\n\n } else if ( e.match( /tap/ ) ) {\n\n // If it's a tap event, wrap the callback and set the event to 'touchstart'\n // Tap isn't a real native event, but this wrapper lets us simulate what a\n // native tap event would be.\n //\n newEvents.touchstart = tap( callback )\n } else {\n newEvents[ e ] = callback\n }\n })\n }\n }\n\n for ( event in newEvents ) {\n var a = []\n a.push( element, event )\n\n if ( delegate ) a.push( delegate )\n\n a.push( newEvents[ event ] )\n transformedArgs.push( a.concat( args ) )\n }\n\n return transformedArgs\n}\n\n\nfunction isEmpty( obj ) {\n\n var hasOwnProperty = Object.prototype.hasOwnProperty\n\n if ( obj == null || obj.length === 0 ) return true\n\n if ( 0 < obj.length ) return false\n\n for (var key in obj) {\n if ( hasOwnProperty.call( obj, key ) ) return false\n }\n\n return true;\n}\n","var cssAnimEventTypes = getAnimationEventTypes()\nvar supported = cssAnimEventTypes.animationstart !== undefined\n\nmodule.exports = {\n transform: transformAnimationEvents\n}\n\nfunction camelCaseEventTypes(prefix) {\n prefix = prefix || '';\n\n return {\n animationstart: prefix + 'AnimationStart',\n animationend: prefix + 'AnimationEnd',\n animationiteration: prefix + 'AnimationIteration'\n };\n}\n\nfunction lowerCaseEventTypes(prefix) {\n prefix = prefix || '';\n\n return {\n animationstart: prefix + 'animationstart',\n animationend: prefix + 'animationend',\n animationiteration: prefix + 'animationiteration'\n };\n}\n\n/**\n * @return {Object} Animation event types {animationstart, animationend, animationiteration}\n */\n\nfunction getAnimationEventTypes() {\n var prefixes = ['webkit', 'Moz', 'O', ''];\n var style = document.documentElement.style;\n\n // browser compliant\n if (undefined !== style.animationName) {\n return lowerCaseEventTypes();\n }\n\n for (var i = 0, len = prefixes.length, prefix; i < len; i++) {\n prefix = prefixes[i];\n\n if (undefined !== style[prefix + 'AnimationName']) {\n // Webkit\n if (0 === i) {\n return camelCaseEventTypes(prefix.toLowerCase());\n }\n // Mozilla\n else if (1 === i) {\n return lowerCaseEventTypes();\n }\n // Opera\n else if (2 === i) {\n return lowerCaseEventTypes(prefix.toLowerCase());\n }\n }\n }\n\n return {};\n}\n\n\n// Adds necessary add vendor prefixes or camelCased event names\n//\nfunction transformAnimationEvents (event) {\n if (!event.match(/animation/i)) {\n return event\n } else {\n if (cssAnimEventTypes[event]) {\n return cssAnimEventTypes[event]\n } else {\n if(window.env != 'test') {\n console.error('\"' + event + '\" is not a supported animation event')\n }\n return ''\n }\n }\n}\n","var Event = require( 'bean' ),\n page = require( './page' ),\n formEls;\n\nvar formBubbling = false\n\nvar fireBubble = function ( event ) {\n if ( event.detail && event.detail.triggered ) { return false }\n\n var ev = new CustomEvent( event.type, { bubbles: true, cancelable: true, detail: { triggered: true } } )\n\n // Stop only 'submit' events. Stopping blur or foucs events seems to break FireFox input interactions.\n if ( event.type == 'submit' ) event.stopImmediatePropagation()\n\n event.target.dispatchEvent( ev )\n\n // Prevent default on original event if custom event is prevented\n if ( ev.defaultPrevented ) event.preventDefault() \n}\n\n// Simplify setting the event type based on the element\nvar eventType = function ( el ) {\n return ( el.tagName == 'FORM' ) ? 'submit' : 'focus blur'\n}\n\n// Add event listeners\nvar bubbleOn = function ( el ) {\n Event.on( el, eventType( el ), fireBubble )\n}\n\n// Remove event listeners\nvar bubbleOff = function ( el ) {\n Event.off( el, eventType( el ), fireBubble )\n}\n\n// Add/Remove event listeners\nvar bubbleFormEvents = function () {\n if ( formBubbling ) { return } \n page.change( function() {\n\n // Remove listeners from previous page\n if ( formEls ) Array.prototype.forEach.call( formEls, bubbleOff )\n\n // Add new listeners to this page\n formEls = document.querySelectorAll( 'form, input' )\n\n Array.prototype.forEach.call( formEls, bubbleOn )\n })\n\n var formBubbling = true\n}\n\nmodule.exports = bubbleFormEvents\n","var Manager = {\n new: function() {\n var manager = {\n\n callbacks: [],\n\n add: function( fn ) {\n\n var cb = Manager.callback.new( fn )\n manager.callbacks.push( cb )\n \n return cb\n\n },\n\n stop: function() {\n manager.callbacks.forEach( function( cb ) { cb.stop() } )\n },\n\n start: function() {\n manager.callbacks.forEach( function( cb ) { cb.start() } )\n },\n\n toggle: function( bool ) {\n manager.callbacks.forEach( function( cb ) { cb.toggle( bool ) } )\n },\n\n remove: function() {\n manager.callbacks = []\n },\n\n fire: function() {\n var args = Array.prototype.slice.call( arguments )\n manager.callbacks.forEach( function( fn ) { fn.apply( this, args ) } )\n }\n }\n\n return manager\n },\n\n callback: {\n new: function( fn ) {\n var cb = function() {\n if ( cb.enabled ) { fn.apply( fn, arguments ) }\n }\n\n cb.stop = function() { cb.enabled = false }\n cb.start = function() { cb.enabled = true }\n cb.toggle = function( bool ) {\n cb.enabled = ( 0 in arguments ) ? bool : !cb.enabled\n }\n cb.enabled = true\n\n return cb\n }\n }\n}\n\nmodule.exports = Manager\n","var now = function() {\n return Date.now()\n}\n\nvar pickFunction = function() {\n var found\n Array.prototype.forEach.call( arguments, function( candidate ) {\n if ( typeof( candidate ) == 'function' && !found ) { found = candidate }\n })\n\n return found\n}\n\nvar debounce = function( fn, wait, options ) {\n\n // Allow options passed as the first argument\n if ( typeof( fn ) == 'object' ) { options = fn } \n\n // Options won't be null\n else { options = options || {} }\n\n wait = options.wait || wait || 0\n\n var max = options.max || false,\n leading = ( ( 'leading' in options ) ? options.leading : false ),\n trailing = ( ( 'trailing' in options ) ? options.trailing : true ),\n \n // Grab functions from options or default to first argument\n leadingFn = pickFunction( options.leading, options.trailing, options.callback, fn ),\n trailingFn = pickFunction( options.trailing, options.leading, options.callback, fn ),\n\n // State tracking vars\n args, // Track arguments passed to debounced callback\n queued = false, // Has a callback been added to the animation loop?\n handle = {}, // Object for tracking functions and callbacks\n lastCalled = 0, // Keep a timer for debouncing\n lastInvoked = 0, // Keep a timer for max\n leadingBlocked = false; // Track leading, throttling subsequent leading calls\n\n // Queue the function with requestAnimationFrame\n var invoke = function( callType ) {\n\n lastCalled = now()\n lastInvoked = now()\n queued = false\n leadingBlocked = true\n\n if ( callType === 'leading' ) {\n leadingFn.apply( leadingFn, args ) }\n else {\n trailingFn.apply( trailingFn, args ) }\n\n }\n\n // Load the loop into the animation queue\n var addToQueue = function () {\n\n if ( !queued ) {\n queued = true\n handle.value = requestAnimationFrame( loop ) // Add to browser's animation queue\n }\n\n }\n\n // Remove from animation queue and reset debounce \n var removeFromQueue = function() {\n\n if ( \"value\" in handle ) {\n cancelAnimationFrame( handle.value )\n queued = false\n lastCalled = 0\n lastInvoked = 0\n leadingBlocked = false\n }\n \n }\n\n // prevent infinite debouncing ( if options.max is set )\n var maxPassed = function() {\n return ( max && now() - lastInvoked >= max )\n }\n\n var waitReached = function() {\n return ( now() - lastCalled ) >= wait\n }\n\n // This gets loaded into the animation queue and determines whether to ivoke the debounced function\n var loop = function () {\n \n // Loop was executed so it's no longer in the animation queue\n queued = false\n \n if ( leading && !leadingBlocked ) {\n invoke( 'leading' )\n }\n\n // If function has been called to frequently to execute\n else if ( maxPassed() ) {\n\n if ( leading ) { invoke( 'leading' ) }\n else { invoke( 'trailing' ) }\n\n } \n \n // If function hasn't been called since last wait\n else if ( waitReached() ) {\n\n // If trailing it's safe to invoke\n if ( trailing ) { invoke( 'trailing' ) }\n\n // If leading, it's safe to remove block\n if ( leading ) { leadingBlocked = false }\n \n } else {\n addToQueue()\n }\n\n }\n\n // A wrapper function for queueing up function calls\n //\n var debounced = function() {\n lastCalled = now()\n args = arguments\n addToQueue()\n }\n\n debounced.stop = removeFromQueue\n\n return debounced\n}\n\nmodule.exports = debounce\n","var now = function() {\n return Date.now()\n}\n\nvar delay = function ( fn, wait ) {\n\n var argsStart = ( wait != null ) ? 2 : 1;\n var handle = {}\n\n handle.args = Array.prototype.slice.call( arguments, argsStart )\n handle.wait = wait || 0\n handle.start = now()\n\n handle.stop = function () {\n if ( \"value\" in handle ) {\n cancelAnimationFrame( handle.value );\n }\n }\n\n handle.loop = function () {\n\n // If wait limit has been reached\n if ( now() - handle.start >= handle.wait ) {\n fn.apply( fn, handle.args )\n\n // If repeat is set and is not 0\n if ( !!handle.repeat ) {\n handle.repeat = handle.repeat - 1\n handle.start = now()\n queueDelay( handle )\n } else if ( handle.repeat === 0 && handle.complete ) {\n handle.complete()\n }\n\n } else {\n queueDelay( handle )\n }\n\n }\n\n\n return queueDelay( handle )\n}\n\nvar queueDelay = function ( handle ) {\n handle.value = requestAnimationFrame( handle.loop )\n return handle\n}\n\nmodule.exports = delay\n","// This simplifies common uses for window.matchMedia \n// namely, adding listeners for width and height queries\n\nfunction parseQuery( query, dimension ) {\n var result = {}\n\n if ( typeof( query ) === 'string' ) { return query }\n\n result.min = size( query.min, 'min-' + dimension )\n result.max = size( query.max, 'max-' + dimension )\n\n if ( result.min && result.max )\n result.query = result.min + ' and ' + result.max\n\n return result.query || result.min || result.max\n}\n\nfunction size( num, limit ) {\n return ( num ) ? '('+limit+': ' + toPx( num ) + ')' : null\n}\n\nfunction toPx( width ) {\n if ( typeof( width ) === 'number' ) { return width + 'px'}\n return width\n}\n\nvar media = {\n\n width: function( query, fn ) {\n return media.listen( parseQuery( query, 'width' ), fn )\n },\n\n minWidth: function( size, fn ) { return media.width( { min: size }, fn ) },\n maxWidth: function( size, fn ) { return media.width( { max: size }, fn ) },\n\n height: function( query, fn ) {\n return media.listen( parseQuery( query, 'height' ), fn )\n },\n\n minHeight: function( size, fn ) { return media.height( { min: size }, fn ) },\n maxHeight: function( size, fn ) { return media.height( { max: size }, fn ) },\n\n listen: function( query, fn ) {\n var match = window.matchMedia( query )\n\n if ( fn ) {\n fn( match )\n match.addListener( fn )\n }\n\n return match\n }\n\n}\n\n\nmodule.exports = media\n","var Event = require( 'bean' )\nvar callbackManager = require( './callback-manager' )\nvar throttle = require( './throttle' )\nvar debounce = require( './debounce' )\n\nvar optimizedEventManager = {\n new: function( name ) {\n\n // Create a new callback manager\n var manager = {\n run: callbackManager.new(),\n start: callbackManager.new(),\n stop: callbackManager.new()\n }\n\n // run callbacks when event happens (at paint-ready frames)\n var running = throttle( manager.run.fire )\n\n // fire callbacks when event starts (at paint-ready frames)\n var started = debounce({\n leading: manager.start.fire,\n trailing: false,\n wait: 150\n })\n\n // fire callbacks when event starts (at paint-ready frames)\n var stopped = debounce( manager.stop.fire, 150 )\n\n Event.on( window, name, function() {\n running()\n started()\n stopped()\n })\n\n // Public API\n var run = function ( fn ) { return manager.run.add( fn ) }\n run.start = function ( fn ) { return manager.start.add( fn ) }\n run.stop = function ( fn ) { return manager.stop.add( fn ) }\n\n // Add custom events for to run optimized listeners. ( name -> Name )\n run( function() { Event.fire( window, 'optimized' + name[0].toUpperCase() + name.substring(1) ) } )\n run.start( function() { Event.fire( window, name + 'Start' ) } )\n run.stop( function() { Event.fire( window, name + 'Stop' ) } )\n\n return run\n }\n}\n\nmodule.exports = optimizedEventManager\n","var Event = require( 'bean' )\nvar callbackManager = require( './callback-manager' )\n\n// Create a new page event manager\nvar manager = {\n ready: callbackManager.new(),\n change: callbackManager.new(),\n readyAlready: false,\n changed: false,\n}\n\nmanager.ready.add( function(){\n manager.readyAlready = true \n})\n\nmanager.ready.add( function(){ \n if ( !window.Turbolinks && !manager.changed ) { \n manager.changed = true \n manager.change.fire()\n }\n})\n\nvar ready = function ( fn ) {\n if ( manager.readyAlready ) { fn() }\n return manager.ready.add( fn ) }\n\nvar change = function( fn ) {\n if ( manager.changed ) { fn() }\n return manager.change.add( fn ) }\n\n// Make it easy to trigger ready callbacks\nready.fire = function () {\n manager.ready.fire()\n // Be sure ready can only be fired once\n manager.ready.stop() }\n\n// Make it easy to trigger change callbacks\nchange.fire = function () {\n manager.change.fire() }\n\nEvent.on( document, 'DOMContentLoaded', ready.fire )\nEvent.on( document, 'page:change turbolinks:load', change.fire ) // Support custom and rails turbolinks page load events\n\nmodule.exports = {\n ready: ready,\n change: change\n}\n","var delay = require( './delay' )\n\nvar repeat = function( fn, wait, limit ) {\n\n var argsStart = 1,\n handle = delay ( fn, wait );\n\n if ( limit != null ) { argsStart = 3 }\n else if ( wait != null ) { argsStart = 2 }\n\n // Enable repeat ( -1 will repeat forever )\n handle.repeat = limit || -1\n handle.args = Array.prototype.slice.call( arguments, argsStart )\n handle.stop = handle.cancel\n\n return handle\n}\n\nmodule.exports = repeat\n","var manager = require( './optimized-event-manager' )\nvar resize = manager.new( 'resize' )\n\n// Pause animations during resizing for better performance\nresize.disableAnimation = function() {\n var style = '<style id=\"fullstop\">.no-animation *, .no-animation *:after, .no-animation *:before {\\\n transition: none !important; animation: none !important\\\n }</style>'\n\n // Inject style for easy classname manipulation\n if ( !document.querySelector('style#fullstop') ) { \n document.head.insertAdjacentHTML('beforeend', style)\n }\n\n resize.start( function() { document.body.classList.add( 'no-animation' ) } )\n resize.stop( function() { document.body.classList.remove( 'no-animation' ) } )\n}\n\nmodule.exports = resize\n","var manager = require( './optimized-event-manager' )\nvar scroll = manager.new( 'scroll' )\n\nscroll.disablePointer = function() {\n\n // Disable pointer interaction\n scroll.start( function() {\n document.documentElement.style.pointerEvents = 'none'\n })\n\n // Enable pointer interaction\n scroll.stop( function() {\n document.documentElement.style.pointerEvents = ''\n })\n}\n\nmodule.exports = scroll\n","// Custom Event Polyfill\n(function () {\n\n if ( typeof window.CustomEvent === \"function\" ) return false;\n\n function CustomEvent ( event, params ) {\n params = params || { bubbles: false, cancelable: false, detail: undefined };\n var evt = document.createEvent( 'CustomEvent' );\n evt.initCustomEvent( event, params.bubbles, params.cancelable, params.detail );\n return evt;\n }\n\n CustomEvent.prototype = window.Event.prototype;\n\n window.CustomEvent = CustomEvent;\n})()\n","// Manually trigger a cancelable form submit event.\nfunction submit( form ) {\n if ( !form.tagName || form.tagName != 'FORM' ) {\n return console.error( 'Trigger this event on a form element' )\n }\n\n var ev = new CustomEvent( 'submit', { bubbles: true, cancelable: true, detail: { triggered: true } } )\n form.dispatchEvent( ev )\n\n // Submit form unless event default is prevented\n if ( !ev.defaultPrevented ) form.submit()\n}\n\nmodule.exports = submit\n","var endEvents = [\n 'touchend'\n]\n\nmodule.exports = Tap\n\n// default tap timeout in ms\nTap.timeout = 200\n\nfunction Tap(callback, options) {\n options = options || {}\n // if the user holds his/her finger down for more than 200ms,\n // then it's not really considered a tap.\n // however, you can make this configurable.\n var timeout = options.timeout || Tap.timeout\n\n // to keep track of the original listener\n listener.handler = callback\n\n return listener\n\n // el.addEventListener('touchstart', listener)\n function listener(e1) {\n // tap should only happen with a single finger\n if (!e1.touches || e1.touches.length > 1) return\n\n var el = e1.target\n var context = this\n var args = arguments;\n\n var timeout_id = setTimeout(cleanup, timeout)\n\n el.addEventListener('touchmove', cleanup)\n\n endEvents.forEach(function (event) {\n el.addEventListener(event, done)\n })\n\n function done(e2) {\n // since touchstart is added on the same tick\n // and because of bubbling,\n // it'll execute this on the same touchstart.\n // this filters out the same touchstart event.\n if (e1 === e2) return\n\n cleanup()\n\n // already handled\n if (e2.defaultPrevented) return\n\n // overwrite these functions so that they all to both start and events.\n var preventDefault = e1.preventDefault\n var stopPropagation = e1.stopPropagation\n\n e1.stopPropagation = function () {\n stopPropagation.call(e1)\n stopPropagation.call(e2)\n }\n\n e1.preventDefault = function () {\n preventDefault.call(e1)\n preventDefault.call(e2)\n }\n\n // calls the handler with the `end` event,\n // but i don't think it matters.\n callback.apply(context, args)\n }\n\n // cleanup end events\n // to cancel the tap, just run this early\n function cleanup(e2) {\n // if it's the same event as the origin,\n // then don't actually cleanup.\n // hit issues with this - don't remember\n if (e1 === e2) return\n\n clearTimeout(timeout_id)\n\n el.removeEventListener('touchmove', cleanup)\n\n endEvents.forEach(function (event) {\n el.removeEventListener(event, done)\n })\n }\n }\n}\n","var debounce = require( './debounce' )\n\nvar throttle = function( fn, wait, options ) {\n\n if ( typeof( fn ) == 'object' ) { options = fn; fn = undefined } \n else { options = options || {} }\n\n options.wait = options.wait || wait || 0\n options.max = options.max || options.wait\n options.callback = options.callback || fn\n options.leading = true\n options.trailing = true\n\n return debounce(options)\n}\n\n\nmodule.exports = throttle\n","var validation = require( './lib/validation' )\nvar progressive = require( './lib/progressive' )\nvar getLabel = require( './lib/get-label' )\nvar diff = require( './lib/diff' )\nvar inputChange = require( './lib/input-change' )\nrequire( './lib/reset' )\n\nmodule.exports = {\n\n validate: validation.validate,\n invalidateField: validation.invalidateField,\n next: progressive.next,\n getLabel: getLabel,\n diff: diff,\n inputChange: inputChange\n\n}\n","var toolbox = require( 'compose-toolbox' ),\n Event = toolbox.event,\n Callback = toolbox.event.callback,\n formSelector = 'form.progressive',\n watching = false,\n formCallbacks,\n registeredForms\n\n// Remove any existing callbacks and registered forms\nfunction reset () {\n\n formCallbacks = { next: [] }\n registeredForms = []\n\n}\n\nfunction newForm( form ) {\n\n if ( !form ) return\n\n var steps = toolbox.slice( form.querySelectorAll( '.form-step' ) ),\n stepIndex = 0,\n navItems = ''\n\n if ( steps.length == 0 ) return\n\n\n steps.forEach( function( step, index ) { \n\n // disable all steps but the current step\n step.disabled = step != currentStep()\n step.dataset.step = index\n\n })\n\n if ( form.dataset.nav ) {\n var nav = '<nav class=\"progressive-form-nav\">'\n\n steps.forEach( function( step, index ) {\n nav += '<a href=\"#\" class=\"progressive-form-nav-item\" data-step=\"'+( index + 1 )+'\">'\n nav += step.dataset.nav || \"Step \" + ( index + 1 )\n nav += '</a> '\n })\n\n nav += '</nav>'\n\n form.insertAdjacentHTML( 'afterbegin', nav )\n }\n\n show()\n\n function previousStep () { return steps[ stepIndex - 1] }\n function currentStep () { return steps[ stepIndex ] }\n function nextStep () { return steps[ stepIndex + 1] }\n function active () { return currentStep() && !currentStep().disabled }\n \n // Move to next fieldset\n function forward () {\n showStep( stepIndex + 1 )\n }\n\n // Move to next fieldset\n function back () {\n showStep( stepIndex - 1 )\n }\n\n // Accepts a step index\n function showStep ( index ) {\n\n index = Number( index )\n\n // Get the step from the index\n var step = steps[ index ]\n\n // Don't go to a non-existant step, or the current step\n if ( step && step != currentStep() ) {\n\n var direction = ( stepIndex < index ) ? 'forward' : 'reverse'\n\n // If a step is currently active\n // dismiss it before going to the specified step\n if ( active() ) {\n return dismiss( function() { showStep( index ) }, direction )\n }\n\n stepIndex = index\n\n show( direction )\n\n }\n }\n \n // Hide a completed step and move to the next\n function dismiss ( callback, direction ) {\n direction = direction || 'forward'\n\n currentStep().classList.remove( 'active', 'enter' )\n currentStep().classList.add( 'exit' )\n currentStep().dataset.direction = direction\n\n Event.afterAnimation( currentStep(), function() {\n disable()\n\n if ( typeof callback === 'function' ) callback()\n\n }, 20)\n\n }\n\n function revisit ( callback, direction ) {\n\n if ( !active() ) {\n direction = direction || 'reverse'\n\n currentStep().classList.remove( 'exit', 'completed' )\n currentStep().classList.add( 'active', 'enter' )\n currentStep().dataset.direction = direction\n\n disableOtherFieldsets()\n\n Event.afterAnimation( currentStep(), function() {\n if ( typeof callback === 'function' ) callback()\n }, 20)\n }\n }\n\n // Show the form-step\n function show ( direction ) {\n\n disableOtherFieldsets()\n currentStep().classList.remove( 'completed' )\n currentStep().dataset.direction = direction\n currentStep().classList.add( 'active', 'enter' )\n\n // focus on the first input\n var firstInput = currentStep().querySelector( 'input:not([hidden]), textarea, select' )\n if ( firstInput ) firstInput.focus()\n\n setNav()\n\n }\n\n // Disable a form step after it has been hidden\n function disable () {\n\n currentStep().disabled = true\n currentStep().classList.add( 'completed' )\n currentStep().classList.remove( 'enter', 'exit' )\n\n }\n\n function setNav () {\n toolbox.each( form.querySelectorAll( 'nav [data-step]' ), function ( nav ) {\n\n if ( nav.dataset.step < stepIndex + 1 ) {\n nav.classList.remove( 'here', 'next' )\n nav.classList.add( 'previous', 'completed' )\n }\n\n if ( nav.dataset.step == stepIndex + 1 ) {\n nav.classList.remove( 'previous', 'next' )\n nav.classList.add( 'here' )\n }\n\n if ( nav.dataset.step > stepIndex + 1 ) {\n nav.classList.remove( 'previous', 'here' )\n nav.classList.add( 'next' )\n }\n\n })\n }\n\n function enableFieldsets ( form ) {\n toolbox.each( form.querySelectorAll( 'fieldset.form-step[disabled]' ), function( fieldset ) {\n fieldset.disabled = false \n })\n }\n\n function disableOtherFieldsets ( ) {\n steps.forEach( function( fieldset ) {\n fieldset.disabled = fieldset != currentStep() \n })\n }\n\n registeredForms.push( function( event, trigger ) {\n var target = event.currentTarget\n\n if ( trigger === 'show-step' ) {\n event.preventDefault()\n\n if ( toolbox.matches( target, '.previous, .completed, .completed + a' ) )\n showStep( target.dataset.step - 1 )\n\n } else if ( trigger === 'next' ) {\n\n // Continue if submit was triggered on this form\n // and no invalid fields are found\n\n var formEl = ( target.tagName == \"FORM\" ) ? target : toolbox.getClosest( target, 'form')\n\n if ( form == formEl && !currentStep().querySelector( ':invalid' ) ) {\n\n // Get the function which triggers callbacks\n var fireCallbacks = getCallbacks( form )\n\n // This is the last stop, be sure all fieldsets are enabled!\n if ( !nextStep() ) enableFieldsets( form )\n else disableOtherFieldsets( form )\n\n // If there are callbacks, let them handle this!\n if ( fireCallbacks ) {\n\n // Since there are callbacks, stop the submission event\n event.preventDefault()\n\n fireCallbacks( event, {\n fieldset: currentStep(), // Valid fieldset element\n form: form, // Parent form element\n forward: forward, // Call forward() to move to the next fieldset\n dismiss: dismiss, // Hide and disable current step\n revisit: revisit, // Revisit current disabled step\n showStep: showStep, // Show a specific step by index (0 based)\n complete: !nextStep(), // is this is the final form step?\n formData: toolbox.formData( currentStep() ) // pass FormData for current fieldset\n })\n }\n\n // No callbacks? If there's a next step, stop submission and proceed\n else if ( nextStep() ) {\n event.preventDefault() \n forward()\n }\n }\n }\n })\n}\n\nfunction fire ( event, type ) {\n registeredForms.forEach( function( fn ) { fn( event, type ) })\n}\n\n\n// Returns a function which triggers callbacks\nfunction getCallbacks ( form, type ) {\n\n type = type || 'next'\n var callbacks = [], cb;\n\n formCallbacks[ type ].forEach( function( test ) {\n if ( cb = test( form ) ) {\n callbacks.push( cb )\n }\n })\n\n // Return a function which can trigger all callbacks\n // or returns fallse if none are called\n\n if ( callbacks.length )\n return function() {\n var args = toolbox.slice( arguments )\n\n callbacks.forEach( function( callback ) {\n callback.apply( callback, args ) }) }\n\n else return false\n}\n\nfunction next ( el, callback ) {\n on( el, 'next', callback )\n}\n\nfunction on ( el, event, callback ) {\n\n // Accept events list as an object e.g. { next: callback }\n if ( typeof event === 'object' ) {\n for ( type in event ) {\n on( el, type, event[ type ] )\n }\n }\n\n else if ( formCallbacks[ event ] ) {\n\n // Only allow access to a callback if the form matches\n var filter = function( form ) {\n if ( form == el ) return callback\n }\n\n // Add the test wrapper function to the callback list\n formCallbacks[ event ].push( filter )\n }\n}\n\nEvent.ready( function(){\n reset()\n\n // Add bubbling so we can listen for submission\n Event.bubbleFormEvents()\n\n var nextSelector = formSelector + ' [type=submit], ' + formSelector + ' .next-step'\n var backSelector = formSelector + ' .back-step'\n var navSelector = '.progressive-form-nav-item[data-step]'\n\n Event.on( document, 'click', nextSelector , fire, 'next' )\n Event.on( document, 'click', backSelector , fire, 'back' )\n Event.on( document, 'click', navSelector , fire, 'show-step' )\n// insert core styling for hiding disabled and completed form-steps\n document.head.insertAdjacentHTML( 'beforeend', \"<style>\\\n.form-step[disabled], .form-step.completed {\\\n position: absolute !important;\\\n top: -9999px !important;\\\n left: -9999px !important;\\\n left: 0 !important;\\\n right: 0 !important; }\\\n</style>\" )\n\n Event.change( function() {\n reset()\n\n toolbox.each( document.querySelectorAll( formSelector ), function( el ) {\n newForm( el )\n })\n })\n})\n\nmodule.exports = {\n next: next,\n new: newForm\n}\n","module.exports = 'input:not([type=hidden]), select, textarea'\n","// Shims\nrequire( './lib/shims/_classlist' )\nvar merge = require( './lib/shims/_object.assign' ),\n event = require( 'compose-event' ),\n luxon = require( 'luxon' ),\n time = merge(require( './lib/time' ), luxon),\n scrollTo = require( './lib/scrollto' ),\n fromTop = require( './lib/fromtop' ),\n ease = require( './lib/ease' )\n\nvar toolbox = {\n\n event: event,\n scrollTo: scrollTo,\n fromTop: fromTop,\n merge: merge,\n ease: ease,\n time: time,\n\n // Get closest DOM element up the tree that matches a given selector\n getClosest: function ( el, selector ) {\n for ( ; el && el !== document; el = el.parentNode ) {\n if ( toolbox.matches( el, selector ) ) return el\n }\n return false\n },\n\n childOf: function ( el, parent ) {\n for ( ; el && el !== document; el = el.parentNode ) {\n if ( el == parent ) return true;\n }\n return false\n },\n\n // Get next DOM element that matches a given selector\n getNext: function( el, selector ) {\n for ( ; el && el !== document; el = el.parentNode ) {\n if ( el.querySelector( selector ) ) return el.querySelector( selector );\n }\n return false;\n },\n\n // Matches selector function\n // @reference https://developer.mozilla.org/en-US/docs/Web/API/Element/matches\n matches: function ( el, selector ) {\n return ( el.matches || el.matchesSelector || el.msMatchesSelector || el.mozMatchesSelector || el.webkitMatchesSelector || el.oMatchesSelector ).call( el, selector );\n },\n\n wordCount: function( str ) {\n var matches = str.match( /\\S+/g );\n return matches ? matches.length : 0;\n },\n\n // Easy access to slice for converting objects into arrays of values.\n slice: function( obj, count ) {\n return Array.prototype.slice.call( obj, count )\n },\n\n each: function( collection, callback ) {\n return Array.prototype.forEach.call( collection, callback )\n },\n\n formData: function( rootEl ) {\n var formData = new FormData(),\n fields = rootEl.querySelectorAll( 'input[name]' )\n\n // Loop over fields\n toolbox.each( fields, function( field ) {\n // Append current field’s name/value to new formData object\n formData.append( field.name, field.value );\n })\n\n // Then return said formData object\n return formData;\n }\n\n}\n\n\nmodule.exports = toolbox\n","// easing functions http://gizma.com/easing/\nvar ease = {\n\n inOutQuad: function (t, b, c, d) {\n t /= d/2\n if (t < 1) { return c/2*t*t + b }\n t--\n return -c/2 * (t*(t-2) - 1) + b\n },\n\n inOutCubic: function (t, b, c, d) {\n\tt /= d/2;\n\tif (t < 1) return c/2*t*t*t + b;\n\tt -= 2;\n\treturn c/2*(t*t*t + 2) + b;\n },\n\n inOutQuint: function(t, b, c, d) {\n var ts = (t/=d)*t,\n tc = ts*t;\n return b+c*(6*tc*ts + -15*ts*ts + 10*tc);\n },\n\n inOutCirc: function (t, b, c, d) {\n t /= d/2;\n if (t < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;\n t -= 2;\n return c/2 * (Math.sqrt(1 - t*t) + 1) + b;\n }\n\n}\n\nease.default = ease.inOutQuad\n\nmodule.exports = ease\n","module.exports = function( el ) {\n return Math.round( el.getBoundingClientRect().top + window.pageYOffset );\n}\n","var ease = require( './ease' )\nvar fromTop = require( './fromtop' )\n\nfunction move(amount) {\n\n // Scroll all because document.scrollingElement is still expiremental\n document.documentElement.scrollTop = amount;\n document.body.parentNode.scrollTop = amount;\n document.body.scrollTop = amount;\n\n}\n\nfunction position() {\n return document.documentElement.scrollTop || document.body.parentNode.scrollTop || document.body.scrollTop;\n}\n\nfunction scrollTo(to, callback, duration) {\n\n // Making args flexible\n //\n // Allow for element or y-coordinates\n if( typeof( to ) === 'object' ) { to = fromTop( to ) }\n\n // Accept duration as the second argument\n if( typeof( callback ) === 'number' ) { duration = callback; callback = null }\n\n // Default duration = 500\n duration = ( typeof( duration ) === 'undefined' ) ? 500 : duration\n\n var start = position(),\n change = to - start,\n currentTime = 0,\n increment = 20;\n\n\n var animateScroll = function() {\n\n // increment the time\n currentTime += increment\n\n // find the value with the quadratic in-out easing function\n var val = ease.default(currentTime, start, change, duration)\n\n // move the document.body\n move(val);\n\n // do the animation unless its over\n if ( currentTime < duration ) {\n requestAnimationFrame( animateScroll )\n } else {\n if ( callback && typeof( callback ) === 'function') {\n callback()\n }\n }\n }\n\n animateScroll()\n}\n\nmodule.exports = scrollTo\n","/**\n * ClassList polyfill\n * Cross-browser full element.classList implementation\n * @source http://purl.eligrey.com/github/classList.js/blob/master/classList.js\n * @author Eli Grey - http://eligrey.com\n * @license MIT\n **/\n\nif ( 'document' in self ) {\n\n // Full polyfill for browsers with no classList support\n if ( !( 'classList' in document.createElement( '_' ) ) ) {\n\n ( function( view ) {\n\n 'use strict';\n\n if ( !( 'Element' in view ) ) return;\n\n var\n classListProp = 'classList',\n protoProp = 'prototype',\n elemCtrProto = view.Element[ protoProp ],\n objCtr = Object,\n\n strTrim = String[ protoProp ].trim || function() {\n return this.replace( /^\\s+|\\s+$/g, '' );\n },\n\n arrIndexOf = Array[ protoProp ].indexOf || function( item ) {\n for ( var i = 0; i < this.length; i++ ) {\n if ( i in this && this[ i ] === item ) {\n return i;\n }\n }\n return -1;\n },\n\n DOMEx = function( type, message ) {\n this.name = type;\n this.code = DOMException[ type ];\n this.message = message;\n },\n\n checkTokenAndGetIndex = function( classList, token ) {\n if ( token === '' ) {\n throw new DOMEx(\n 'SYNTAX_ERR',\n 'An invalid or illegal string was specified'\n );\n }\n if ( /\\s/.test( token ) ) {\n throw new DOMEx(\n 'INVALID_CHARACTER_ERR',\n 'String contains an invalid character'\n );\n }\n return arrIndexOf.call( classList, token );\n },\n\n ClassList = function( elem ) {\n var trimmedClasses = strTrim.call( elem.getAttribute( 'class' ) || '' ),\n classes = trimmedClasses ? trimmedClasses.split( /\\s+/ ) : [];\n\n for ( var i = 0; i < classes.length; i++ ) {\n this.push( classes[ i ] );\n }\n\n this._updateClassName = function() {\n elem.setAttribute( 'class', this.toString() );\n };\n },\n\n classListProto = ClassList[ protoProp ] = [],\n\n classListGetter = function() {\n return new ClassList( this );\n };\n\n DOMEx[ protoProp ] = Error[ protoProp ];\n\n classListProto.item = function( i ) {\n return this[ i ] || null;\n };\n\n classListProto.contains = function( token ) {\n token += '';\n return checkTokenAndGetIndex( this, token ) !== -1;\n };\n\n classListProto.add = function() {\n var\n tokens = arguments,\n iter = 0,\n len = tokens.length,\n updated = false,\n token;\n\n do {\n token = tokens[ iter ] + '';\n if ( checkTokenAndGetIndex( this, token ) === -1 ) {\n this.push( token );\n updated = true;\n }\n }\n\n while ( ++iter < len );\n\n if ( updated ) {\n this._updateClassName();\n }\n };\n\n classListProto.remove = function() {\n var\n tokens = arguments,\n iter = 0,\n len = tokens.length,\n updated = false,\n token,\n index;\n\n do {\n token = tokens[ iter ] + '';\n index = checkTokenAndGetIndex( this, token );\n\n while ( index !== -1 ) {\n this.splice( index, 1 );\n updated = true;\n index = checkTokenAndGetIndex( this, token );\n }\n }\n\n while ( ++iter < len );\n\n if ( updated ) {\n this._updateClassName();\n }\n };\n\n classListProto.toggle = function( token, force ) {\n token += '';\n\n var\n result = this.contains( token ),\n method = result ? force !== true && 'remove' : force !== false && 'add';\n\n if ( method ) {\n this[ method ]( token );\n }\n\n if ( force === true || force === false ) {\n return force;\n } else {\n return !result;\n }\n };\n\n classListProto.toString = function() {\n return this.join( ' ' );\n };\n\n if ( objCtr.defineProperty ) {\n var classListPropDesc = {\n get : classListGetter,\n enumerable : true,\n configurable : true\n };\n\n try {\n objCtr.defineProperty( elemCtrProto, classListProp, classListPropDesc );\n }\n\n catch ( ex ) {\n if ( ex.number === -0x7FF5EC54 ) {\n classListPropDesc.enumerable = false;\n objCtr.defineProperty( elemCtrProto, classListProp, classListPropDesc );\n }\n }\n\n } else if ( objCtr[ protoProp ].__defineGetter__ ) {\n elemCtrProto.__defineGetter__( classListProp, classListGetter );\n }\n\n }( self ));\n\n } else {\n\n ( function() {\n\n 'use strict';\n\n var testElement = document.createElement( '_' );\n\n testElement.classList.add( 'c1', 'c2' );\n\n if ( !testElement.classList.contains( 'c2' ) ) {\n var createMethod = function( method ) {\n var original = DOMTokenList.prototype[ method ];\n\n DOMTokenList.prototype[ method ] = function( token ) {\n var i, len = arguments.length;\n\n for ( i = 0; i < len; i++ ) {\n token = arguments[ i ];\n original.call( this, token );\n }\n };\n };\n createMethod( 'add' );\n createMethod( 'remove' );\n }\n\n testElement.classList.toggle( 'c3', false );\n\n if ( testElement.classList.contains( 'c3' ) ) {\n var _toggle = DOMTokenList.prototype.toggle;\n\n DOMTokenList.prototype.toggle = function( token, force ) {\n if ( 1 in arguments && !this.contains( token ) === !force ) {\n return force;\n } else {\n return _toggle.call( this, token );\n }\n };\n\n }\n\n testElement = null;\n\n }());\n\n }\n}\n","/**\n * Object.assign polyfill\n * Cross-browser full Object.assign implementation\n * @source https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign#Polyfill\n * @license MIT\n **/\n\nif ( typeof Object.assign != 'function' ) {\n ( function() {\n Object.assign = function( target ) {\n 'use strict';\n if ( target === undefined || target === null ) {\n throw new TypeError( 'Cannot convert undefined or null to object' );\n }\n\n var output = Object( target );\n for ( var index = 1; index < arguments.length; index++ ) {\n var source = arguments[ index ];\n if ( source !== undefined && source !== null ) {\n for ( var nextKey in source ) {\n if ( Object.prototype.hasOwnProperty.call( source, nextKey ) ) {\n output[ nextKey ] = source[ nextKey ];\n }\n }\n }\n }\n return output;\n };\n })();\n}\n\n// Make it easy to merge objects without overwriting the original objects\nvar merge = function() {\n var args = [{}].concat( Array.prototype.slice.call( arguments ) )\n return Object.assign.apply( this, args )\n}\n\nmodule.exports = merge\n","var DateTime = require( 'luxon' ).DateTime\n\nfunction isBefore( date, end ) {\n end = parse( end )\n date = parse( date )\n return date == DateTime.min( end, date )\n}\n\nfunction isAfter( date, start ) {\n start = parse( start )\n date = parse( date )\n return date == DateTime.max( start, date )\n}\n\nfunction isBetween( date, date1, date2 ) {\n date = parse( date )\n date1 = parse( date1 )\n date2 = parse( date2 )\n\n if ( date.isValid && date1.isValid && date2.isValid ) {\n // Determine start and end dates (to allow any order in args)\n var start = DateTime.min( date1, date2 )\n var end = DateTime.max( date1, date2 )\n\n return DateTime.max( start, date ) == DateTime.min( date, end )\n } else {\n return false\n }\n}\n\nfunction parse( date, options ) {\n var formats = [ \"ISO\", \"SQL\", \"HTTP\", \"RFC2822\" ],\n parsedDate\n\n options = options || {}\n\n if ( options.millis && !isNaN( date ) ) {\n date = Number( date )\n formats.unshift('Millis')\n }\n\n if ( typeof date == 'object' ) {\n \n // Is already a DateTime object\n if ( date.toISO ) return date\n else formats.unshift( 'Object' )\n\n // Parse string formats\n }\n\n formats.forEach( function( format ) {\n if (( !parsedDate || !parsedDate.isValid ) && DateTime['from'+format] ) {\n parsedDate = DateTime['from'+format]( date, options )\n }\n })\n\n return parsedDate.isValid ? parsedDate : false\n}\n\n// Remove insignificant digits\nfunction prettyPrint( date, options ) {\n date = parse( date, options )\n\n if (options && options.zone) date = date.setZone(options.zone)\n\n if ( date ) {\n return date.toISO().replace('T', ' ').replace('.000',' ').replace(':00 ',' ')\n } else {\n return \"Unparseable date string\" \n }\n}\n\nmodule.exports = {\n isBefore: isBefore,\n isAfter: isAfter,\n isBetween: isBetween,\n parse: parse,\n prettyPrint: prettyPrint\n}\n","require ('./lib/object.assign')\n\nvar Event = require('compose-event')\n// Improves the utility and user interface for range inputs\n\nvar sliders = []\nvar listening\n\nvar Slider = {\n // When a slider is changed, update the associated label and input.\n change: function(event) {\n self.refresh(event.currentTarget)\n },\n\n // Update labels and inputs\n refresh: function (slider) {\n self.setLabels(slider)\n self.setInput(slider)\n self.setFill(slider)\n self.setState(slider)\n },\n \n // Some browsers don't focus when a slider input is changed, this lets us force focus.\n focus: function(event){\n if ( event.isTrusted ) { // Do not focus on \"artificially triggered\" events\n event.currentTarget.focus()\n }\n },\n \n // Inject slider templates into the DOM\n setup: function(){\n\n if (!listening) {\n Event.on(document, \"input toggler:show\", \"[type=range]\", self.change, { useCapture: true })\n Event.on(document, \"click change input\", \"[type=range]\", self.focus, { useCapture: true })\n listening = true\n }\n\n var ranges = document.querySelectorAll('[type=range]:not(.slider-input)')\n\n Array.prototype.forEach.call(ranges, function(slider){\n\n var data = self.data(slider)\n sliders.push(data)\n\n slider.dataset.id = data.id\n slider.dataset.initialValue = slider.value\n\n // Inject template and set inputs\n slider = self.template(slider)\n self.refresh(slider)\n\n })\n },\n\n data: function(el) {\n var data = {\n // Assign an incremental ID to track this slider with its data\n id: sliders.length,\n min: Number(el.getAttribute('min')) || 0,\n max: Number(el.getAttribute('max')) || 100,\n labels: {},\n externalLabels: {}\n }\n\n // Gets dataset as a hash\n Object.assign(data, self.extractData(el))\n\n data = self.extractValues(data)\n data = self.getLabels(data)\n\n if (data.values)\n data.max = (data.min + data.values.length - 1)\n\n data.segments = data.max - data.min + 1\n\n for (var key in data) {\n if(key.match(/-/)){\n data[this.camelCase(key)] = data[key]\n delete data[key]\n }\n }\n\n // Allow data-input or name attribute to set value for hidden input.\n //\n if (!data.input && el.getAttribute('name')) {\n data.input = el.getAttribute('name')\n el.removeAttribute('name')\n }\n\n if (data.input) {\n // Generate a class name for querying later (because some name attributes contain illegal characters for queries)\n data.inputClass = data.input.replace(/\\W/g,'-')\n data.inputExists = self.inputExists(el, data)\n }\n\n data = self.getLineLabels(data)\n\n if (data.mark) { \n data.mark = data.mark.split(',').map(Number)\n }\n\n return data\n },\n\n getData: function(slider) {\n if (typeof slider != 'string' && slider.dataset) {\n slider = slider.dataset.id\n }\n return sliders[slider]\n },\n\n extractValues: function(data) {\n if (data.values) { \n data.values = data.values.split(',').map(self.trim)\n } else {\n data.values = []\n for (var i = data.min; i <= data.max; i++ ) {\n data.values.push(i)\n }\n }\n\n return data\n },\n\n // Convert dataset strings into hashes of arrays\n // examples:\n // - data-label='one,two,three' => data.labels.default = ['one','two','three']\n // - data.external-label-awesome='one;two;three' => data.externalLabels.awesome = ['one','two','three']\n //\n // If labels have not been disabled (data-label='false') and there are no data labels,\n // an array of values is set to data.labels.default\n //\n getLabels: function(data) {\n if (data.label && data.label.match(/false|none/))\n data.label = false\n\n // Unless labels have been disabed with data-label='false'\n for (var val in data) {\n // Ignore non-native methods injected by some wayward lib\n if (!data.hasOwnProperty(val)) { continue }\n // Don't bother processing disabled labels\n if (data[val] === false) { continue }\n\n // Match properties: label, label-id, external-label-id\n var match = val.match(/^(external-)?label-(.+)|^label$/)\n\n if(match) {\n // Some labels may include commas, allow semicolons as an alternate separator\n //\n var delimiter = data[val].match(/;/) ? ';' : ','\n var labels = data[val].split(delimiter).map(self.trim)\n var external = match[1]\n var name = match[2]\n\n if(external){\n data.externalLabels[name] = labels\n } else if (val == 'label') {\n data.labels.default = labels\n delete data.label\n } else {\n data.labels[name] = labels\n }\n\n delete data[val]\n }\n\n var labelCount = self.objectSize(data.labels)\n\n // If there are no labels, use values for a label\n if (labelCount == 0)\n data.labels.default = data.values\n\n if (labelCount > 1)\n delete data.labels.default\n }\n\n return data\n },\n\n getLineLabels: function(data){\n var lineLabels = {}\n\n // Line labels may be in the following formats:\n // - 1:start,11:end - index specified, comma separated\n // - first,second,third,11:last - default to index for some labels\n // - 10,000;20,000;30,000 - semicolon separated\n //\n if(data.lineLabels) {\n var delimiter = data.lineLabels.match(/;/) ? ';' : ','\n data.lineLabels.split(delimiter).map(function(labels, index){\n var l = labels.split(':')\n label = (!l[1] ? l[0] : l[1])\n index = (!l[1] ? index + 1 : l[0])\n lineLabels[index] = label\n })\n data.lineLabels = lineLabels\n }\n\n return data\n },\n\n // \n template: function(slider){\n var data = self.getData(slider)\n\n slider.setAttribute('min', data.min)\n slider.setAttribute('max', data.max)\n\n slider.classList.add('slider-input')\n\n if(slider.classList.contains('left-label'))\n slider.classList.remove('left-label')\n\n var containerHTML = self.templateHTML(data)\n\n var classes = ['slider-container']\n\n if (containerHTML.match('slider-line-label'))\n classes.push('line-labels')\n\n if (containerHTML.match('slider-label'))\n classes.push(\"with-label\")\n else\n classes.push(\"without-label\")\n\n containerHTML = '<div class=\"'+classes.join(' ')+'\" id=\"slider'+data.id+'\">'\n + containerHTML\n +'</div>'\n\n slider.insertAdjacentHTML('beforebegin', containerHTML)\n var container = slider.previousSibling\n container.querySelector('.slider-input-container').insertAdjacentHTML('afterbegin', slider.outerHTML)\n slider.parentNode.removeChild(slider)\n\n slider = container.querySelector('.slider-input')\n \n // Update attributes from processed data\n //\n if(!slider.getAttribute('value'))\n slider.value = data.value || data.min\n return slider\n },\n \n templateHTML: function(data){\n var html = \"\"\n var fills = \"\"\n \n if (data.mark || data.lineLabels) {\n for(var i = 1; i <= data.segments; i++) {\n \n html += \"<div class='slider-segment'><span class='slider-segment-content'>\"\n\n if (data.mark && data.mark.indexOf(i) != -1)\n html += \"<span class='slider-segment-mark' data-index='\"+i+\"'></span>\"\n\n if (data.lineLabels && data.lineLabels[i]) \n html += \"<span class='slider-line-label'>\"+data.lineLabels[i]+\"</span>\"\n\n html += \"</span></div>\"\n }\n }\n\n // one less\n for(var i = 1; i < data.segments; i++) {\n fills += \"<span class='slider-fill' data-index='\"+i+\"'></span>\"\n }\n\n html = \"<div class='slider-input-container'>\"\n + \"<div class='slider-track'>\" + html + \"</div>\"\n + \"<div class='slider-fills'>\" + fills + \"</div>\"\n + \"</div>\"\n + self.labelTemplate(data)\n\n if (!data.inputExists && data.inputClass) {\n html += \"<input class='\"+data.inputClass+\"' type='hidden' name='\"+data.input+\"' value=''>\"\n }\n\n return html\n \n },\n\n labelTemplate: function(data){\n var html = \"\"\n\n if (data.label == false) { return html }\n\n for(var key in data.labels){\n html += '<span class=\"slider-label-'+key+' internal-label\" data-slider-label=\"'+key+'\">'\n html += self.labelHTML(data, key, '')\n html += '</span></span> '\n }\n\n if (html.length > 0) {\n html = \"<div class='slider-label align-\"+(data.positionLabel || 'right')+\"'>\" + html + \"</div>\"\n }\n\n return html\n },\n\n labelHTML: function(data, key, label) {\n return self.labelMeta(data, key, 'before')\n + \"<span class='label-content'>\" + label + \"</span>\"\n + self.labelMeta(data, key, 'after')\n },\n\n // Grab all prefixes or suffixes, for example:\n // - data-before-label='$'\n // - data-after-label='/mo'\n // - data-after-label-size='GB'\n //\n labelMeta: function(data, key, position) {\n var altKey = self.camelCase('-label-'+key)\n var meta = data[position+altKey] || data[position+'Label']\n if (meta)\n return \"<span class='\"+position+\"-label'>\"+meta+\"</span>\"\n else\n return ''\n },\n\n // Is there already an input matching this name?\n inputExists: function(slider, data) {\n if (data.inputClass) {\n var input = self.scope(slider).querySelector('input[name=\"'+data.input+'\"]')\n\n if(input) {\n input.classList.add(data.inputClass)\n return true\n }\n }\n },\n\n extractData: function(el) {\n var pattern = 'data-'\n var data = {}\n\n for (var i = 0; i < el.attributes.length; i++){\n var name = el.attributes[i].nodeName\n\n if(new RegExp(\"^\"+pattern).test(name)) {\n name = name.replace(pattern, '')\n data[name] = el.attributes[i].nodeValue\n }\n }\n return data\n },\n\n getChange: function( slider ) {\n var initial = Number(slider.dataset.initialValue)\n\n if ( initial < slider.value ) {\n return \"increased\"\n } else if ( slider.value < initial ) {\n return \"decreased\"\n } else {\n return \"initial\"\n }\n },\n\n labelElements: function(id, key, external) {\n var selector = '[data-slider-label='+key+']'\n var internalSelector = \"#slider\"+id + ' ' + selector\n var externalSelector = selector += ':not(.internal-label)' \n if (external) { \n selector = externalSelector\n } else {\n selector = internalSelector + ', ' + externalSelector\n }\n\n return document.querySelectorAll(selector)\n },\n\n setState: function( slider ) {\n var data = self.getData( slider ),\n stateElements = document.querySelectorAll( '[data-track-slider-state=\"#'+slider.id+'\"]' ),\n change = self.getChange( slider )\n\n document.querySelector('#slider'+data.id).dataset.sliderState = change\n\n Array.prototype.forEach.call( stateElements, function(el) {\n el.dataset.sliderState = change\n })\n },\n\n setFill: function(slider) {\n var data = self.getData(slider)\n var segments = document.querySelectorAll('#slider'+data.id+' .slider-segment')\n var fills = document.querySelectorAll('#slider'+data.id+' .slider-fill')\n var sliderIndex = self.sliderIndex(slider)\n \n Array.prototype.forEach.call(fills, function(fill, index){\n if (fill.dataset.index <= sliderIndex) {\n fill.classList.add('filled')\n if(segments[index]) {\n segments[index].classList.add('filled')\n }\n } else {\n fill.classList.remove('filled')\n if(segments[index]) {\n segments[index].classList.remove('filled')\n }\n }\n })\n \n },\n\n setInput: function(slider) {\n var data = self.getData(slider)\n\n // Don't update hidden sliders\n if (slider.offsetParent === null) { return }\n\n if (data.input && data.values) {\n var value = data.values[self.sliderIndex(slider)]\n var selector = \".\"+data.input.replace(/\\W/g,'-')\n var inputs = self.scope(slider).querySelectorAll(selector)\n\n Array.prototype.forEach.call(inputs, function(input){\n input.value = value\n })\n }\n },\n\n setLabels: function(slider) {\n var data = self.getData(slider)\n var index = self.sliderIndex(slider)\n\n if (slider.offsetParent === null) { return }\n\n Array.prototype.forEach.call(['labels', 'externalLabels'], function(type) {\n var external = (type == 'externalLabels')\n\n for (var key in data[type]) {\n var labelEls = self.labelElements(data.id, key, external)\n var labels = self.labelAtIndex(data[type], index)\n\n Array.prototype.forEach.call(labelEls, function(el) {\n var container = el.querySelector('.label-content')\n\n if ( container ) { container.innerHTML = labels[key] }\n else { el.innerHTML = self.labelHTML(data, key, labels[key]) }\n\n el.classList.toggle('empty-label', labels[key] === '')\n })\n }\n })\n },\n\n // Get all labels for the current slider position\n labelAtIndex: function(labels, index){\n var set = {}\n for (var key in labels) {\n set[key] = labels[key][index]\n }\n return set\n }, \n\n // Normalize the slider value by the minimum value\n sliderIndex: function(slider){\n return Number(slider.value) - Number(slider.getAttribute('min'))\n },\n\n // If slider is in a form, return that form.\n // This alows us to be sure that sliders in one\n // form do not update labels with the same name\n // in another form.\n //\n scope: function(slider) {\n var el = slider\n\n while (el && el.tagName != \"FORM\") {\n el = el.parentNode\n }\n\n return el || document\n },\n\n // Function for easy maping, as in: someArray.map(self.trim)\n trim: function(name){ \n return name.trim()\n },\n\n objectSize: function(object) {\n var length = 0; for(var i in object) { length++ }\n return length\n },\n\n camelCase: function(input) {\n return input.toLowerCase().replace(/-(.)/g, function(match, group) {\n return group.toUpperCase();\n });\n }\n}\n\nvar self = Slider\n\nEvent.change(Slider.setup)\n\nmodule.exports = Slider\n","if (typeof Object.assign != 'function') {\n (function () {\n Object.assign = function (target) {\n 'use strict';\n if (target === undefined || target === null) {\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n var output = Object(target);\n for (var index = 1; index < arguments.length; index++) {\n var source = arguments[index];\n if (source !== undefined && source !== null) {\n for (var nextKey in source) {\n if (Object.prototype.hasOwnProperty.call(source, nextKey)) {\n output[nextKey] = source[nextKey];\n }\n }\n }\n }\n return output;\n };\n })();\n}\n","var TimeToggle = require('./lib/toggle.js')\nvar Event = require('compose-event')\n\nTimeToggle.timeago = require('./lib/timeago.js')\nTimeToggle.dateToHTML = require('./lib/date-to-html.js')\n\nEvent.ready(TimeToggle.listen)\nEvent.change(TimeToggle.setup)\n\nmodule.exports = TimeToggle\n","// Converts a simple date string into Date + Time + Timezone wrapped in HTML\n//\n// Input:\n// - String, compatible with JS date parsing e.g. \"2014-10-20\" or \"2014-05-21 10:63\"\n// - String, timezone: \"UTC\", \"CST\", etc.\n//\n// Returns: HTML which is \"2014-01-28 18:00:00 CST\", separated and wrapped with spans\n// with classnames: date, time and timezone\n//\nvar DateToHTML = {\n supported: function(){\n return !isNaN(new Date(\"2014-01-29T18:14:29+00:00\").getDate())\n },\n\n local: function(dateString) {\n return DateToHTML.parse(dateString, false)\n },\n\n utc: function(dateString) {\n return DateToHTML.parse(dateString, true)\n },\n\n parse: function dateToHtml(dateString, utc) {\n if(!DateToHTML.supported()){ return false }\n\n var date = new Date(dateString)\n\n // If date is invalid, bail\n if(isNaN(date.getDate())){ return false }\n\n if(utc) {\n var y = date.getUTCFullYear()\n var mo = pad(date.getUTCMonth() + 1)\n var d = pad(date.getUTCDate())\n var h = pad(date.getUTCHours())\n var m = pad(date.getUTCMinutes())\n var s = pad(date.getUTCSeconds())\n var zone = 'UTC'\n } else {\n var y = date.getFullYear()\n var mo = pad(date.getMonth() + 1)\n var d = pad(date.getDate())\n var h = pad(date.getHours())\n var m = pad(date.getMinutes())\n var s = pad(date.getSeconds())\n var zone = DateToHTML.timezone(date)\n }\n\n var str = '<span class=\"date\">'+y+'-'+mo+'-'+d+'</span>'\n str += ' <span class=\"time\">'+h+':'+m+':'+s+'</span>'\n str += ' <span class=\"timezone\">'+zone+'</span>'\n return str\n },\n\n // Extract timezone label\n timezone: function(date){\n var zone = (date.getTimezoneOffset()/-60)\n var tz = String(date).match(/\\((.+)\\)$/)\n\n if(tz) {\n // Browser has friendly timezone label like 'EST'\n var zone = tz[1]\n \n } else {\n // Browser uses a GMT offset +/-\n var zone = \"GMT \" \n zone += ((zone > 0) ? '+' : '')\n zone += \" \"+ pad(zone*100, 4)\n }\n\n return zone\n }\n}\n\nvar pad = function datePad(num, pad){\n pad = pad || 2\n while(String(num).length < pad) {\n num = '0' + num\n }\n return num\n}\n\nmodule.exports = DateToHTML\n","// Timeago by Brandon Mathis, based on JavaScript Pretty Date Copyright (c) 2011 John Resig\n// Returns relative time\n\nvar Timeago = {\n // setup HTML templates\n setup: function timeagoSetup() {\n\n var timeEls = document.querySelectorAll('.timeago[datetime]')\n\n Array.prototype.forEach.call(timeEls, function(el) {\n var datetime = el.attributes.datetime.value\n var style = el.dataset.timeagoStyle\n el.innerHTML = Timeago.parse(datetime, style)\n })\n },\n\n // If a browser can't handle dates, bail.\n browserSupport: function timeagoBrowserSupport() {\n return !isNaN(new Date(\"2014-01-29T18:14:29+00:00\").getDate())\n },\n\n parse: function timeagoParse(time, style) {\n\n if (typeof(time) == 'string') {\n time = new Date(time)\n }\n\n if (style === 'short')\n var say = {\n just_now: \"now\",\n minute_ago: \"1m\",\n minutes_ago: \"m\",\n hour_ago: \"1h\",\n hours_ago: \"h\",\n yesterday: \"1d\",\n days_ago: \"d\",\n last_week: \"1w\",\n weeks_ago: \"w\"\n }\n\n else if (style === 'long')\n var say = {\n just_now: \"just now\",\n minute_ago: \"1 minute ago\",\n minutes_ago: \" minutes ago\",\n hour_ago: \"1 hour ago\",\n hours_ago: \" hours ago\",\n yesterday: \"1 day ago\",\n days_ago: \" days ago\",\n last_week: \"1 week ago\",\n weeks_ago: \" weeks ago\"\n }\n\n else\n var say = {\n just_now: \"just now\",\n minute_ago: \"1 minute\",\n minutes_ago: \" minutes\",\n hour_ago: \"1 hour\",\n hours_ago: \" hours\",\n yesterday: \"1 day\",\n days_ago: \" days\",\n last_week: \"1 week\",\n weeks_ago: \" weeks\"\n }\n\n var secs = ((new Date().getTime() - new Date(time).getTime()) / 1000)\n var mins = Math.floor(secs / 60)\n var hours = Math.floor(secs / 3600)\n var days = Math.floor(secs / 86400)\n var weeks = Math.floor(days / 7)\n var months = Math.floor(days / 30)\n\n if(isNaN(secs) || days < 0) {\n return false\n }\n\n if(days === 0) {\n if (secs < 60) return say.just_now\n else if(secs < 120) return say.minute_ago \n else if(secs < 3600) return mins + say.minutes_ago \n else if(secs < 7200) return say.hour_ago\n else return hours + say.hours_ago\n } else {\n if(days === 1) return say.yesterday\n else if(days < 7) return days + say.days_ago\n else if(weeks === 1) return say.last_week\n else return weeks + say.weeks_ago\n }\n }\n}\n\nmodule.exports = Timeago\n","var Timeago = require('./timeago')\nvar DateToHTML = require('./date-to-html')\nvar Event = require('compose-event')\n\nvar Toggle = {\n timeEls: function(){\n return document.querySelectorAll('.time-toggle[datetime]')\n },\n\n // The key is the current time, the value is the next time type to be displayed\n nextTime: {\n 'timeago': 'local',\n 'local': 'utc',\n 'utc': 'timeago'\n },\n\n // Attach listeners, setup HTML templates\n setup: function() {\n if(!Timeago.browserSupport()) return false\n\n Array.prototype.forEach.call(Toggle.timeEls(), Toggle.init)\n },\n\n // Attach listeners to toggle time zones whine clicked\n listen: function() {\n if(!Timeago.browserSupport()) return false\n\n Event.on(document, \"click\", \".time-toggle\", Toggle.toggle)\n },\n\n // Toggle all times on page\n toggle: function( event ){\n Array.prototype.forEach.call(Toggle.timeEls(), function(el) {\n Toggle.toggleEl(el)\n })\n\n if ( event && event.target ) { event.stopPropagation() }\n },\n\n // Switch between time ago, UTC, and local time\n toggleEl: function(el) {\n var date = el.getAttribute('datetime')\n var next = Toggle.nextTime[el.dataset.mode || 'timeago' ]\n\n Toggle.setContent(el, Toggle.dateHTML(date, next, el), next)\n\n return el\n },\n\n // Supply HTML for UTC and local datetime\n //\n init: function(el) {\n var datetime = el.getAttribute('datetime')\n var mode = el.dataset.mode || 'timeago'\n var html = Toggle.dateHTML(datetime, mode, el)\n\n if (html){ \n el.setAttribute('title', 'toggle time')\n Toggle.setContent(el, html, mode)\n } else {\n el.classList.remove('time-toggle')\n }\n\n return el\n },\n\n setContent: function( el, html, mode ) {\n var dateTextNode = el.querySelector( '.date-text' )\n\n if ( dateTextNode ) {\n dateTextNode.innerHTML = html\n } else {\n el.innerHTML = '<span class=\"date-text\">'+html+'</span'\n }\n\n el.dataset.mode = mode\n },\n\n dateHTML: function(date, type, el) {\n if (type == 'timeago')\n var t = Timeago.parse(date, el.dataset.timeago)\n else if (DateToHTML[type])\n var t = DateToHTML[type](date)\n\n if (t) {\n return \"<span class='time-toggle-date \"+type+\"'>\" + t + \"</span>\"\n }\n }\n}\n\nmodule.exports = Toggle\n","var Event = require('compose-event')\n\nvar Toggler = {\n checkboxSelector: \"[type=checkbox][data-toggle], [type=checkbox][data-show], [type=checkbox][data-hide]\",\n radioSelector: \"input[type=radio][data-show], input[type=radio][data-hide], input[type=radio][data-add-class], input[type=radio][data-remove-class]\",\n selectSelector: \"option[data-hide], option[data-show]\",\n\n listen: function(){\n Event.on(document, \"click change\", \"[data-toggle], [data-show], [data-hide], [data-toggle-class], [data-add-class], [data-remove-class]\", Toggler.trigger)\n Event.on(document, \"change\", \".select-toggler\", Toggler.trigger)\n Event.on(window, 'hashchange', Toggler.hashChange)\n },\n\n hashChange: function() {\n if ( window.location.hash ) {\n\n var anchor = '[data-anchor=\"'+window.location.hash+'\"]'\n var target = document.querySelector( 'input'+anchor+ ', option'+anchor )\n\n if ( target ) {\n if ( target.type == 'radio' ) {\n target.checked = true\n } else {\n var select = Toggler.getSelectFromOption(target)\n select.selectedIndex = target.index\n target = select\n }\n Toggler.triggerToggling( target )\n }\n }\n },\n\n refresh: function(){\n Toggler.toggleCheckboxes()\n Toggler.setupSelects()\n Toggler.setupRadios()\n },\n\n trigger: function(event) {\n // Stop event and bubbling if link is only being used as a toggler\n if (event.currentTarget.getAttribute('href') == \"#\") {\n event.preventDefault()\n event.stop()\n } \n\n Toggler.triggerToggling(event.currentTarget, event)\n },\n\n triggerToggling: function(target, event) {\n var actions = ['hide', 'toggle', 'show', 'removeClass', 'toggleClass', 'addClass']\n var select\n\n // Store the select, and set the target to the current option\n // Events fire on the select, but the options have toggling attributes\n if (target.tagName.match(/select/i)) {\n select = target\n target = select.selectedOptions[0]\n }\n\n // Radio inputs and selects do not support toggling, so remove them\n actions = actions.filter(function(action) {\n if (select || target.type == 'radio') {\n return !action.match(/toggle/)\n }\n return target.dataset[action] != null\n })\n \n // Dispatch all actions\n actions.forEach( function( action ) {\n Toggler.dispatch( target, action )\n })\n },\n\n dispatch: function(el, type) {\n var action = type\n var data = el.dataset[type]\n\n // Abort if element doesn't have data for the action\n if (!data || typeof data == 'undefined' || data == '') return\n\n // Toggle and show are treated the same for checkboxes\n if (el.type == 'checkbox')\n action = (type.match(/hide|remove/i) ? !el.checked : el.checked)\n\n if (data){\n if (type.match(/class/i)){\n Toggler.setClass(data, action, el)\n } else {\n Toggler.setState(data, action)\n }\n }\n },\n\n // Add, remove, or toggle classnames, triggered by elements with:\n // data-hide-class, data-show-class, and data-toggle-class values\n //\n // Data value examples:\n // - \"classname\" - add/remove/toggle classname on current element\n // - \"foo bar\" - multiple classnames, separated by spaces (like html class property)\n // - \"foo bar; selector\" - change classnames on elements matched by selector\n // - \"foo bar; selector, selector\" - match multiple selectors\n //\n // You can perform multiple add/remove classes by joining values with an `&`\n // For example: \"classname & foo bar; selector\"\n // This would toggle classname on current element and toggle `foo bar` classnames\n // on an element matching the selector\n //\n\n setClass: function (selectors, action, el){\n if(typeof selectors == 'undefined' || selectors == '') return\n\n if (typeof(action) == 'boolean') {\n action = (action ? 'add' : 'remove')\n }\n\n if (selectors.match(/&/)) {\n selectors.split('&').forEach(function(sel){\n Toggler.setClass(sel.trim(), action, el) \n })\n return\n }\n\n // Get selector and classnames, format: \"classname classname; selector,selector\"\n var settings = selectors.split(';')\n var classnames = settings[0].trim()\n var matches = []\n selectors = settings[1]\n\n if (selectors) {\n matches = document.querySelectorAll(selectors)\n\n // If no slectors are present, and el is an OPTION, use its SELECT as the matched element\n } else if (el && el.tagName.match(/option/i)) {\n matches = [Toggler.getSelectFromOption(el)]\n \n // If no slectors are present, use the current el for classnames\n } else if (el) {\n matches = [el]\n }\n\n Array.prototype.forEach.call(matches, function(match){\n Array.prototype.forEach.call(classnames.split(' '), function(classname) {\n var method = action.replace(/Class/,'')\n match.classList[method](classname)\n })\n\n Toggler.triggerTogglerEventsOnChildren(match, 'class')\n })\n },\n\n setState: function(selectors, state) {\n var matches = document.querySelectorAll(selectors)\n\n Array.prototype.forEach.call(matches, function(match){\n var action = Toggler.toggleAction(match, state)\n\n Toggler[action](match)\n Toggler.triggerTogglerEventsOnChildren(match, action)\n })\n },\n\n toggleAction: function( el, action ) {\n\n if ( typeof action == 'boolean' ) {\n action = ( action ? 'show' : 'hide' )\n }\n\n if (action == 'toggle') {\n if ( el.classList.contains('hidden') || el.classList.contains('hiding') ) {\n action = 'show'\n } else {\n action = 'hide'\n }\n }\n\n return action\n },\n\n show: function(el) {\n if ( el.classList.contains( 'visible' ) || \n el.classList.contains( 'showing' ) ||\n el.offsetParent != null ) {\n return\n }\n el.classList.remove( 'hidden', 'hiding' )\n\n var fullyShow = function() {\n // Remove hidden because it might be added before this fires\n el.classList.remove( 'showing', 'hidden' )\n el.classList.add( 'visible' )\n\n // Enable inputs, fieldsets or forms when shown\n if ( typeof el.disabled != 'undefined' ){\n el.disabled = false\n }\n\n // Focus on key element if an element expects focus\n var focusEl = el.querySelector('[data-focus]')\n if (focusEl) { focusEl.focus() }\n\n // Trigger input event on ranges that have been hidden\n var ranges = el.querySelectorAll('[type=range]')\n }\n\n if ( el.dataset.animate ) {\n Event.afterAnimation( el, fullyShow, true)\n el.classList.add( 'showing' )\n } else {\n fullyShow()\n }\n },\n\n hide: function(el) {\n if ( el.classList.contains( 'hidden' ) || \n el.classList.contains( 'hiding' ) ) {\n return\n }\n\n // Remove showing because it might be added before this fires\n el.classList.remove( 'visible', 'showing' )\n\n var fullyHide = function() {\n el.classList.remove( 'hiding', 'visible' )\n el.classList.add( 'hidden' )\n\n // Disable inputs, fieldsets or forms when hidden\n if ( typeof el.disabled != 'undefined' ){\n el.disabled = true\n }\n }\n\n if ( el.dataset.animate ) {\n Event.afterAnimation( el, fullyHide, true)\n el.classList.add( 'hiding' )\n } else {\n fullyHide()\n }\n },\n\n getLeafNodes: function (parent) {\n // is the parent itself a leaf node?\n if (!parent.hasChildNodes()) return [parent]\n\n var nodes = Array.prototype.slice.call(parent.getElementsByTagName(\"*\"), 0)\n\n return nodes.filter(function(elem) {\n return elem.children && elem.children.length === 0\n })\n },\n\n triggerTogglerEventsOnChildren: function(el, eventName){\n // we care about leaf nodes since the event will bubble to\n // non-leaf nodes from the leaf nodes\n var leafChildNodes = Toggler.getLeafNodes(el)\n\n Array.prototype.forEach.call(leafChildNodes, function(node) {\n // 'toggler:show', 'toggler:hide', etc\n Event.fire(node, \"toggler:\" + eventName)\n })\n },\n\n toggleCheckboxes: function(checkboxes) {\n checkboxes = checkboxes || document.querySelectorAll(Toggler.checkboxSelector)\n\n Array.prototype.forEach.call(checkboxes, Toggler.triggerToggling)\n },\n\n setupRadios: function() {\n Array.prototype.forEach.call(document.querySelectorAll(Toggler.radioSelector), function(radio, index){\n if (!radio.dataset.togglerActive) {\n\n var radioName = radio.getAttribute('name'),\n siblings = Toggler.parentForm(radio).querySelectorAll('[type=radio][name=\"'+radioName+'\"]'),\n showSelectors = Toggler.dataAttributes(siblings, 'show'),\n addClassSelectors = Toggler.dataAttributes(siblings, 'addClass'),\n checked\n\n Array.prototype.forEach.call(siblings, function(r){\n\n if (r.dataset.anchor && window.location.hash == ('#'+r.dataset.anchor.replace('#',''))) {\n r.checked = true\n }\n\n // Ensure that all radio buttons in a group have a default data-show value of ''\n // This means that unset data-show values will toggle off everything\n //\n r.dataset.show = r.dataset.show || ''\n r.dataset.addClass = r.dataset.addClass || ''\n\n // Append element's data-hide to showSelectors\n if ( r.dataset.hide && r.dataset.hide.length > 0 )\n showSelectors = showSelectors.concat( r.dataset.hide.split( ',' ) )\n\n r.dataset.hide = showSelectors.filter(function(selector){\n return r.dataset.show.indexOf( selector )\n }).join(',')\n\n // Ensure that all radio buttons in a group have a default data-add-class value of ''\n // This means that unset data-add-class values are toggle off all classes\n //\n r.dataset.addClass = r.dataset.addClass || ''\n\n // Ensure that selected radio buttons remove classes according\n // to the deselected radio buttons\n r.dataset.removeClass = addClassSelectors.filter(function(selector){\n return r.dataset.addClass.indexOf( selector )\n }).join('&')\n\n\n r.dataset.togglerActive = true\n\n\n if( r.checked ) checked = r\n\n })\n\n if ( checked ) {\n Toggler.triggerToggling( checked )\n } else {\n Toggler.setState( showSelectors.join(','), 'hide' )\n Toggler.setClass( addClassSelectors.join(' & '), 'removeClass' )\n }\n }\n\n })\n },\n\n // Add data-hide to each <option> containing the selectors from other\n // option's data-show. This makes the toggling of elements exclusive.\n //\n setupSelects: function(){\n Array.prototype.forEach.call(document.querySelectorAll(Toggler.selectSelector), function(option){\n // Prevent an option from being considered twice\n if (!option.dataset.togglerActive) {\n\n option.dataset.show = option.dataset.show || ''\n\n var select = Toggler.getSelectFromOption(option)\n select.classList.add('select-toggler')\n var options = select.querySelectorAll('option')\n\n var showSelectors = Toggler.dataAttributes(options, 'show')\n var addClassSelectors = Toggler.dataAttributes(options, 'addClass')\n\n Array.prototype.forEach.call(options, function(o, index) {\n\n if (o.dataset.anchor && window.location.hash == ('#'+o.dataset.anchor.replace('#',''))) {\n select.selectedIndex = index\n }\n\n o.dataset.show = o.dataset.show || ''\n o.dataset.addClass = o.dataset.addClass || ''\n\n // Append element's data-hide to showSelectors\n if ( o.dataset.hide && o.dataset.hide.length > 0 )\n showSelectors = showSelectors.concat( o.dataset.hide.split( ',' ) )\n\n // If show selectors are not present in element's data-show\n // Add them to the list of selectors to be hidden\n o.dataset.hide = showSelectors.filter(function(selector){\n return o.dataset.show.indexOf( selector )\n }).join(',')\n\n o.dataset.removeClass = addClassSelectors.filter(function(selector){\n return o.dataset.addClass.indexOf( selector )\n }).join(' & ')\n\n o.dataset.togglerActive = true\n })\n\n // Ensure that currently selected option is toggled properly\n //\n Toggler.triggerToggling(select)\n }\n })\n },\n\n // Find parent <select> for an option (accounts for option groups)\n //\n getSelectFromOption: function(el) {\n var p = el.parentElement\n\n if (p.tagName == 'SELECT') {\n return p\n } else {\n return Toggler.getSelectFromOption(p)\n }\n },\n\n\n // Find parent <form> or document if there is no form\n //\n parentForm: function(element) {\n var el = element\n\n while (el && el.tagName != \"FORM\") {\n el = el.parentNode\n }\n\n return el || document\n },\n\n // Return a unique array of all data attribute values from elements\n //\n dataAttributes: function(elements, attr) {\n return Array.prototype.map.call(elements, function(el) { \n return el.dataset[attr]\n }).filter(function(selectors, index, self) {\n return selectors != \"\" && typeof selectors != 'undefined' && self.indexOf(selectors) === index\n })\n }\n}\n\nEvent.ready(Toggler.listen)\nEvent.change(Toggler.refresh)\n\nmodule.exports = Toggler\n","// Shims\nrequire( './lib/shims/_classlist' )\nvar merge = require( './lib/shims/_object.assign' )\n\nvar event = require( 'compose-event' )\nvar scrollTo = require( './lib/scrollto' )\nvar fromTop = require( './lib/fromtop' )\nvar ease = require( './lib/ease' )\n\nvar toolbox = {\n\n event: event,\n scrollTo: scrollTo,\n fromTop: fromTop,\n merge: merge,\n ease: ease,\n\n // Get closest DOM element up the tree that matches a given selector\n getClosest: function ( el, selector ) {\n for ( ; el && el !== document; el = el.parentNode ) {\n if ( toolbox.matches( el, selector ) ) return el\n }\n return false\n },\n\n childOf: function ( el, parent ) {\n for ( ; el && el !== document; el = el.parentNode ) {\n if ( el == parent ) return true;\n }\n return false\n },\n\n // Get next DOM element that matches a given selector\n getNext: function( el, selector ) {\n for ( ; el && el !== document; el = el.parentNode ) {\n if ( el.querySelector( selector ) ) return el.querySelector( selector );\n }\n return false;\n },\n\n // Matches selector function\n // @reference https://developer.mozilla.org/en-US/docs/Web/API/Element/matches\n matches: function ( el, selector ) {\n return ( el.matches || el.matchesSelector || el.msMatchesSelector || el.mozMatchesSelector || el.webkitMatchesSelector || el.oMatchesSelector ).call( el, selector );\n },\n\n wordCount: function( str ) {\n var matches = str.match( /\\S+/g );\n return matches ? matches.length : 0;\n },\n\n // Easy access to slice for converting objects into arrays of values.\n slice: function( obj, count ) {\n return Array.prototype.slice.call( obj, count )\n },\n\n each: function( collection, callback ) {\n return Array.prototype.forEach.call( collection, callback )\n },\n\n formData: function( rootEl ) {\n var formData = new FormData(),\n fields = rootEl.querySelectorAll( 'input[name]' )\n\n // Loop over fields\n toolbox.each( fields, function( field ) {\n // Append current field’s name/value to new formData object\n formData.append( field.name, field.value );\n })\n\n // Then return said formData object\n return formData;\n }\n\n}\n\n\nmodule.exports = toolbox\n","// keymaster.js\n// (c) 2011-2013 Thomas Fuchs\n// keymaster.js may be freely distributed under the MIT license.\n\n;(function(global){\n var k,\n _handlers = {},\n _mods = { 16: false, 18: false, 17: false, 91: false },\n _scope = 'all',\n // modifier keys\n _MODIFIERS = {\n '⇧': 16, shift: 16,\n '⌥': 18, alt: 18, option: 18,\n '⌃': 17, ctrl: 17, control: 17,\n '⌘': 91, command: 91\n },\n // special keys\n _MAP = {\n backspace: 8, tab: 9, clear: 12,\n enter: 13, 'return': 13,\n esc: 27, escape: 27, space: 32,\n left: 37, up: 38,\n right: 39, down: 40,\n del: 46, 'delete': 46,\n home: 36, end: 35,\n pageup: 33, pagedown: 34,\n ',': 188, '.': 190, '/': 191,\n '`': 192, '-': 189, '=': 187,\n ';': 186, '\\'': 222,\n '[': 219, ']': 221, '\\\\': 220\n },\n code = function(x){\n return _MAP[x] || x.toUpperCase().charCodeAt(0);\n },\n _downKeys = [];\n\n for(k=1;k<20;k++) _MAP['f'+k] = 111+k;\n\n // IE doesn't support Array#indexOf, so have a simple replacement\n function index(array, item){\n var i = array.length;\n while(i--) if(array[i]===item) return i;\n return -1;\n }\n\n // for comparing mods before unassignment\n function compareArray(a1, a2) {\n if (a1.length != a2.length) return false;\n for (var i = 0; i < a1.length; i++) {\n if (a1[i] !== a2[i]) return false;\n }\n return true;\n }\n\n var modifierMap = {\n 16:'shiftKey',\n 18:'altKey',\n 17:'ctrlKey',\n 91:'metaKey'\n };\n function updateModifierKey(event) {\n for(k in _mods) _mods[k] = event[modifierMap[k]];\n };\n\n // handle keydown event\n function dispatch(event) {\n var key, handler, k, i, modifiersMatch, scope;\n key = event.keyCode;\n\n if (index(_downKeys, key) == -1) {\n _downKeys.push(key);\n }\n\n // if a modifier key, set the key.<modifierkeyname> property to true and return\n if(key == 93 || key == 224) key = 91; // right command on webkit, command on Gecko\n if(key in _mods) {\n _mods[key] = true;\n // 'assignKey' from inside this closure is exported to window.key\n for(k in _MODIFIERS) if(_MODIFIERS[k] == key) assignKey[k] = true;\n return;\n }\n updateModifierKey(event);\n\n // see if we need to ignore the keypress (filter() can can be overridden)\n // by default ignore key presses if a select, textarea, or input is focused\n if(!assignKey.filter.call(this, event)) return;\n\n // abort if no potentially matching shortcuts found\n if (!(key in _handlers)) return;\n\n scope = getScope();\n\n // for each potential shortcut\n for (i = 0; i < _handlers[key].length; i++) {\n handler = _handlers[key][i];\n\n // see if it's in the current scope\n if(handler.scope == scope || handler.scope == 'all'){\n // check if modifiers match if any\n modifiersMatch = handler.mods.length > 0;\n for(k in _mods)\n if((!_mods[k] && index(handler.mods, +k) > -1) ||\n (_mods[k] && index(handler.mods, +k) == -1)) modifiersMatch = false;\n // call the handler and stop the event if neccessary\n if((handler.mods.length == 0 && !_mods[16] && !_mods[18] && !_mods[17] && !_mods[91]) || modifiersMatch){\n if(handler.method(event, handler)===false){\n if(event.preventDefault) event.preventDefault();\n else event.returnValue = false;\n if(event.stopPropagation) event.stopPropagation();\n if(event.cancelBubble) event.cancelBubble = true;\n }\n }\n }\n }\n };\n\n // unset modifier keys on keyup\n function clearModifier(event){\n var key = event.keyCode, k,\n i = index(_downKeys, key);\n\n // remove key from _downKeys\n if (i >= 0) {\n _downKeys.splice(i, 1);\n }\n\n if(key == 93 || key == 224) key = 91;\n if(key in _mods) {\n _mods[key] = false;\n for(k in _MODIFIERS) if(_MODIFIERS[k] == key) assignKey[k] = false;\n }\n };\n\n function resetModifiers() {\n for(k in _mods) _mods[k] = false;\n for(k in _MODIFIERS) assignKey[k] = false;\n };\n\n // parse and assign shortcut\n function assignKey(key, scope, method){\n var keys, mods;\n keys = getKeys(key);\n if (method === undefined) {\n method = scope;\n scope = 'all';\n }\n\n // for each shortcut\n for (var i = 0; i < keys.length; i++) {\n // set modifier keys if any\n mods = [];\n key = keys[i].split('+');\n if (key.length > 1){\n mods = getMods(key);\n key = [key[key.length-1]];\n }\n // convert to keycode and...\n key = key[0]\n key = code(key);\n // ...store handler\n if (!(key in _handlers)) _handlers[key] = [];\n _handlers[key].push({ shortcut: keys[i], scope: scope, method: method, key: keys[i], mods: mods });\n }\n };\n\n // unbind all handlers for given key in current scope\n function unbindKey(key, scope) {\n var multipleKeys, keys,\n mods = [],\n i, j, obj;\n\n multipleKeys = getKeys(key);\n\n for (j = 0; j < multipleKeys.length; j++) {\n keys = multipleKeys[j].split('+');\n\n if (keys.length > 1) {\n mods = getMods(keys);\n key = keys[keys.length - 1];\n }\n\n key = code(key);\n\n if (scope === undefined) {\n scope = getScope();\n }\n if (!_handlers[key]) {\n return;\n }\n for (i = 0; i < _handlers[key].length; i++) {\n obj = _handlers[key][i];\n // only clear handlers if correct scope and mods match\n if (obj.scope === scope && compareArray(obj.mods, mods)) {\n _handlers[key][i] = {};\n }\n }\n }\n };\n\n // Returns true if the key with code 'keyCode' is currently down\n // Converts strings into key codes.\n function isPressed(keyCode) {\n if (typeof(keyCode)=='string') {\n keyCode = code(keyCode);\n }\n return index(_downKeys, keyCode) != -1;\n }\n\n function getPressedKeyCodes() {\n return _downKeys.slice(0);\n }\n\n function filter(event){\n var tagName = (event.target || event.srcElement).tagName;\n // ignore keypressed in any elements that support keyboard data input\n return !(tagName == 'INPUT' || tagName == 'SELECT' || tagName == 'TEXTAREA');\n }\n\n // initialize key.<modifier> to false\n for(k in _MODIFIERS) assignKey[k] = false;\n\n // set current scope (default 'all')\n function setScope(scope){ _scope = scope || 'all' };\n function getScope(){ return _scope || 'all' };\n\n // delete all handlers for a given scope\n function deleteScope(scope){\n var key, handlers, i;\n\n for (key in _handlers) {\n handlers = _handlers[key];\n for (i = 0; i < handlers.length; ) {\n if (handlers[i].scope === scope) handlers.splice(i, 1);\n else i++;\n }\n }\n };\n\n // abstract key logic for assign and unassign\n function getKeys(key) {\n var keys;\n key = key.replace(/\\s/g, '');\n keys = key.split(',');\n if ((keys[keys.length - 1]) == '') {\n keys[keys.length - 2] += ',';\n }\n return keys;\n }\n\n // abstract mods logic for assign and unassign\n function getMods(key) {\n var mods = key.slice(0, key.length - 1);\n for (var mi = 0; mi < mods.length; mi++)\n mods[mi] = _MODIFIERS[mods[mi]];\n return mods;\n }\n\n // cross-browser events\n function addEvent(object, event, method) {\n if (object.addEventListener)\n object.addEventListener(event, method, false);\n else if(object.attachEvent)\n object.attachEvent('on'+event, function(){ method(window.event) });\n };\n\n // set the handlers globally on document\n addEvent(document, 'keydown', function(event) { dispatch(event) }); // Passing _scope to a callback to ensure it remains the same by execution. Fixes #48\n addEvent(document, 'keyup', clearModifier);\n\n // reset modifiers to false whenever the window is (re)focused.\n addEvent(window, 'focus', resetModifiers);\n\n // store previously defined key\n var previousKey = global.key;\n\n // restore previously defined key and return reference to our key object\n function noConflict() {\n var k = global.key;\n global.key = previousKey;\n return k;\n }\n\n // set window.key and window.key.set/get/deleteScope, and the default filter\n global.key = assignKey;\n global.key.setScope = setScope;\n global.key.getScope = getScope;\n global.key.deleteScope = deleteScope;\n global.key.filter = filter;\n global.key.isPressed = isPressed;\n global.key.getPressedKeyCodes = getPressedKeyCodes;\n global.key.noConflict = noConflict;\n global.key.unbind = unbindKey;\n\n if(typeof module !== 'undefined') module.exports = assignKey;\n\n})(this);\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n/*\n This is just a junk drawer, containing anything used across multiple classes.\n Because Luxon is small(ish), this should stay small and we won't worry about splitting\n it up into, say, parsingUtil.js and basicUtil.js and so on. But they are divided up by feature area.\n*/\n\n/**\n * @private\n */\n\n// TYPES\n\nfunction isUndefined(o) {\n return typeof o === 'undefined';\n}\n\nfunction isNumber(o) {\n return typeof o === 'number';\n}\n\nfunction isString(o) {\n return typeof o === 'string';\n}\n\nfunction isDate(o) {\n return Object.prototype.toString.call(o) === '[object Date]';\n}\n\n// CAPABILITIES\n\nfunction hasIntl() {\n return typeof Intl !== 'undefined' && Intl.DateTimeFormat;\n}\n\nfunction hasFormatToParts() {\n return !isUndefined(Intl.DateTimeFormat.prototype.formatToParts);\n}\n\n// OBJECTS AND ARRAYS\n\nfunction maybeArray(thing) {\n return Array.isArray(thing) ? thing : [thing];\n}\n\nfunction bestBy(arr, by, compare) {\n if (arr.length === 0) {\n return undefined;\n }\n return arr.reduce(function (best, next) {\n var pair = [by(next), next];\n if (!best) {\n return pair;\n } else if (compare.apply(null, [best[0], pair[0]]) === best[0]) {\n return best;\n } else {\n return pair;\n }\n }, null)[1];\n}\n\nfunction pick(obj, keys) {\n return keys.reduce(function (a, k) {\n a[k] = obj[k];\n return a;\n }, {});\n}\n\n// NUMBERS AND STRINGS\n\nfunction numberBetween(thing, bottom, top) {\n return isNumber(thing) && thing >= bottom && thing <= top;\n}\n\n// x % n but takes the sign of n instead of x\nfunction floorMod(x, n) {\n return x - n * Math.floor(x / n);\n}\n\nfunction padStart(input) {\n var n = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2;\n\n if (input.toString().length < n) {\n return ('0'.repeat(n) + input).slice(-n);\n } else {\n return input.toString();\n }\n}\n\nfunction parseMillis(fraction) {\n if (isUndefined(fraction)) {\n return NaN;\n } else {\n var f = parseFloat('0.' + fraction) * 1000;\n return Math.floor(f);\n }\n}\n\nfunction roundTo(number, digits) {\n var factor = Math.pow(10, digits);\n return Math.round(number * factor) / factor;\n}\n\n// DATE BASICS\n\nfunction isLeapYear(year) {\n return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n}\n\nfunction daysInYear(year) {\n return isLeapYear(year) ? 366 : 365;\n}\n\nfunction daysInMonth(year, month) {\n var modMonth = floorMod(month - 1, 12) + 1,\n modYear = year + (month - modMonth) / 12;\n\n if (modMonth === 2) {\n return isLeapYear(modYear) ? 29 : 28;\n } else {\n return [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][modMonth - 1];\n }\n}\n\nfunction weeksInWeekYear(weekYear) {\n var p1 = (weekYear + Math.floor(weekYear / 4) - Math.floor(weekYear / 100) + Math.floor(weekYear / 400)) % 7,\n last = weekYear - 1,\n p2 = (last + Math.floor(last / 4) - Math.floor(last / 100) + Math.floor(last / 400)) % 7;\n return p1 === 4 || p2 === 3 ? 53 : 52;\n}\n\nfunction untruncateYear(year) {\n if (year > 99) {\n return year;\n } else return year > 60 ? 1900 + year : 2000 + year;\n}\n\n// PARSING\n\nfunction parseZoneInfo(ts, offsetFormat, locale) {\n var timeZone = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n var date = new Date(ts),\n intlOpts = {\n hour12: false,\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n hour: '2-digit',\n minute: '2-digit'\n };\n\n if (timeZone) {\n intlOpts.timeZone = timeZone;\n }\n\n var modified = Object.assign({ timeZoneName: offsetFormat }, intlOpts),\n intl = hasIntl();\n\n if (intl && hasFormatToParts()) {\n var parsed = new Intl.DateTimeFormat(locale, modified).formatToParts(date).find(function (m) {\n return m.type.toLowerCase() === 'timezonename';\n });\n return parsed ? parsed.value : null;\n } else if (intl) {\n // this probably doesn't work for all locales\n var without = new Intl.DateTimeFormat(locale, intlOpts).format(date),\n included = new Intl.DateTimeFormat(locale, modified).format(date),\n diffed = included.substring(without.length),\n trimmed = diffed.replace(/^[, ]+/, '');\n return trimmed;\n } else {\n return null;\n }\n}\n\n// signedOffset('-5', '30') -> -330\nfunction signedOffset(offHourStr, offMinuteStr) {\n var offHour = parseInt(offHourStr, 10) || 0,\n offMin = parseInt(offMinuteStr, 10) || 0,\n offMinSigned = offHour < 0 ? -offMin : offMin;\n return offHour * 60 + offMinSigned;\n}\n\n// COERCION\n\nfunction normalizeObject(obj, normalizer) {\n var ignoreUnknown = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var normalized = {};\n for (var u in obj) {\n if (obj.hasOwnProperty(u)) {\n var v = obj[u];\n if (v !== null && !isUndefined(v) && !Number.isNaN(v)) {\n var mapped = normalizer(u, ignoreUnknown);\n if (mapped) {\n normalized[mapped] = v;\n }\n }\n }\n }\n return normalized;\n}\n\nfunction timeObject(obj) {\n return pick(obj, ['hour', 'minute', 'second', 'millisecond']);\n}\n\n/**\n * @private\n */\n\nvar n = 'numeric',\n s = 'short',\n l = 'long',\n d2 = '2-digit';\n\nvar DATE_SHORT = {\n year: n,\n month: n,\n day: n\n};\n\nvar DATE_MED = {\n year: n,\n month: s,\n day: n\n};\n\nvar DATE_FULL = {\n year: n,\n month: l,\n day: n\n};\n\nvar DATE_HUGE = {\n year: n,\n month: l,\n day: n,\n weekday: l\n};\n\nvar TIME_SIMPLE = {\n hour: n,\n minute: d2\n};\n\nvar TIME_WITH_SECONDS = {\n hour: n,\n minute: d2,\n second: d2\n};\n\nvar TIME_WITH_SHORT_OFFSET = {\n hour: n,\n minute: d2,\n second: d2,\n timeZoneName: s\n};\n\nvar TIME_WITH_LONG_OFFSET = {\n hour: n,\n minute: d2,\n second: d2,\n timeZoneName: l\n};\n\nvar TIME_24_SIMPLE = {\n hour: n,\n minute: d2,\n hour12: false\n};\n\n/**\n * {@link toLocaleString}; format like '09:30:23', always 24-hour.\n */\nvar TIME_24_WITH_SECONDS = {\n hour: n,\n minute: d2,\n second: d2,\n hour12: false\n};\n\n/**\n * {@link toLocaleString}; format like '09:30:23 EDT', always 24-hour.\n */\nvar TIME_24_WITH_SHORT_OFFSET = {\n hour: n,\n minute: d2,\n second: d2,\n hour12: false,\n timeZoneName: s\n};\n\n/**\n * {@link toLocaleString}; format like '09:30:23 Eastern Daylight Time', always 24-hour.\n */\nvar TIME_24_WITH_LONG_OFFSET = {\n hour: n,\n minute: d2,\n second: d2,\n hour12: false,\n timeZoneName: l\n};\n\n/**\n * {@link toLocaleString}; format like '10/14/1983, 9:30 AM'. Only 12-hour if the locale is.\n */\nvar DATETIME_SHORT = {\n year: n,\n month: n,\n day: n,\n hour: n,\n minute: d2\n};\n\n/**\n * {@link toLocaleString}; format like '10/14/1983, 9:30:33 AM'. Only 12-hour if the locale is.\n */\nvar DATETIME_SHORT_WITH_SECONDS = {\n year: n,\n month: n,\n day: n,\n hour: n,\n minute: d2,\n second: d2\n};\n\nvar DATETIME_MED = {\n year: n,\n month: s,\n day: n,\n hour: n,\n minute: d2\n};\n\nvar DATETIME_MED_WITH_SECONDS = {\n year: n,\n month: s,\n day: n,\n hour: n,\n minute: d2,\n second: d2\n};\n\nvar DATETIME_FULL = {\n year: n,\n month: l,\n day: n,\n hour: n,\n minute: d2,\n timeZoneName: s\n};\n\nvar DATETIME_FULL_WITH_SECONDS = {\n year: n,\n month: l,\n day: n,\n hour: n,\n minute: d2,\n second: d2,\n timeZoneName: s\n};\n\nvar DATETIME_HUGE = {\n year: n,\n month: l,\n day: n,\n weekday: l,\n hour: n,\n minute: d2,\n timeZoneName: l\n};\n\nvar DATETIME_HUGE_WITH_SECONDS = {\n year: n,\n month: l,\n day: n,\n weekday: l,\n hour: n,\n minute: d2,\n second: d2,\n timeZoneName: l\n};\n\nfunction stringify(obj) {\n return JSON.stringify(obj, Object.keys(obj).sort());\n}\n\n/**\n * @private\n */\n\nvar monthsLong = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];\n\nvar monthsShort = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n\nvar monthsNarrow = ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'];\n\nfunction months(length) {\n switch (length) {\n case 'narrow':\n return monthsNarrow;\n case 'short':\n return monthsShort;\n case 'long':\n return monthsLong;\n case 'numeric':\n return ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'];\n case '2-digit':\n return ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12'];\n default:\n return null;\n }\n}\n\nvar weekdaysLong = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];\n\nvar weekdaysShort = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'];\n\nvar weekdaysNarrow = ['M', 'T', 'W', 'T', 'F', 'S', 'S'];\n\nfunction weekdays(length) {\n switch (length) {\n case 'narrow':\n return weekdaysNarrow;\n case 'short':\n return weekdaysShort;\n case 'long':\n return weekdaysLong;\n case 'numeric':\n return ['1', '2', '3', '4', '5', '6', '7'];\n default:\n return null;\n }\n}\n\nvar meridiems = ['AM', 'PM'];\n\nvar erasLong = ['Before Christ', 'Anno Domini'];\n\nvar erasShort = ['BC', 'AD'];\n\nvar erasNarrow = ['B', 'A'];\n\nfunction eras(length) {\n switch (length) {\n case 'narrow':\n return erasNarrow;\n case 'short':\n return erasShort;\n case 'long':\n return erasLong;\n default:\n return null;\n }\n}\n\nfunction meridiemForDateTime(dt) {\n return meridiems[dt.hour < 12 ? 0 : 1];\n}\n\nfunction weekdayForDateTime(dt, length) {\n return weekdays(length)[dt.weekday - 1];\n}\n\nfunction monthForDateTime(dt, length) {\n return months(length)[dt.month - 1];\n}\n\nfunction eraForDateTime(dt, length) {\n return eras(length)[dt.year < 0 ? 0 : 1];\n}\n\nfunction formatString(knownFormat) {\n // these all have the offsets removed because we don't have access to them\n // without all the intl stuff this is backfilling\n var filtered = pick(knownFormat, ['weekday', 'era', 'year', 'month', 'day', 'hour', 'minute', 'second', 'timeZoneName', 'hour12']),\n key = stringify(filtered),\n dateTimeHuge = 'EEEE, LLLL d, yyyy, h:mm a';\n switch (key) {\n case stringify(DATE_SHORT):\n return 'M/d/yyyy';\n case stringify(DATE_MED):\n return 'LLL d, yyyy';\n case stringify(DATE_FULL):\n return 'LLLL d, yyyy';\n case stringify(DATE_HUGE):\n return 'EEEE, LLLL d, yyyy';\n case stringify(TIME_SIMPLE):\n return 'h:mm a';\n case stringify(TIME_WITH_SECONDS):\n return 'h:mm:ss a';\n case stringify(TIME_WITH_SHORT_OFFSET):\n return 'h:mm a';\n case stringify(TIME_WITH_LONG_OFFSET):\n return 'h:mm a';\n case stringify(TIME_24_SIMPLE):\n return 'HH:mm';\n case stringify(TIME_24_WITH_SECONDS):\n return 'HH:mm:ss';\n case stringify(TIME_24_WITH_SHORT_OFFSET):\n return 'HH:mm';\n case stringify(TIME_24_WITH_LONG_OFFSET):\n return 'HH:mm';\n case stringify(DATETIME_SHORT):\n return 'M/d/yyyy, h:mm a';\n case stringify(DATETIME_MED):\n return 'LLL d, yyyy, h:mm a';\n case stringify(DATETIME_FULL):\n return 'LLLL d, yyyy, h:mm a';\n case stringify(DATETIME_HUGE):\n return dateTimeHuge;\n case stringify(DATETIME_SHORT_WITH_SECONDS):\n return 'M/d/yyyy, h:mm:ss a';\n case stringify(DATETIME_MED_WITH_SECONDS):\n return 'LLL d, yyyy, h:mm:ss a';\n case stringify(DATETIME_FULL_WITH_SECONDS):\n return 'LLLL d, yyyy, h:mm:ss a';\n case stringify(DATETIME_HUGE_WITH_SECONDS):\n return 'EEEE, LLLL d, yyyy, h:mm:ss a';\n default:\n return dateTimeHuge;\n }\n}\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\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 }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\nvar inherits = function (subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\nvar possibleConstructorReturn = function (self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n};\n\n// these aren't really private, but nor are they really useful to document\n\n/**\n * @private\n */\nvar LuxonError = function (_Error) {\n inherits(LuxonError, _Error);\n\n function LuxonError() {\n classCallCheck(this, LuxonError);\n return possibleConstructorReturn(this, _Error.apply(this, arguments));\n }\n\n return LuxonError;\n}(Error);\n\n/**\n * @private\n */\n\n\nvar InvalidDateTimeError = function (_LuxonError) {\n inherits(InvalidDateTimeError, _LuxonError);\n\n function InvalidDateTimeError(reason) {\n classCallCheck(this, InvalidDateTimeError);\n return possibleConstructorReturn(this, _LuxonError.call(this, 'Invalid DateTime: ' + reason));\n }\n\n return InvalidDateTimeError;\n}(LuxonError);\n\n/**\n * @private\n */\nvar InvalidIntervalError = function (_LuxonError2) {\n inherits(InvalidIntervalError, _LuxonError2);\n\n function InvalidIntervalError(reason) {\n classCallCheck(this, InvalidIntervalError);\n return possibleConstructorReturn(this, _LuxonError2.call(this, 'Invalid Interval: ' + reason));\n }\n\n return InvalidIntervalError;\n}(LuxonError);\n\n/**\n * @private\n */\nvar InvalidDurationError = function (_LuxonError3) {\n inherits(InvalidDurationError, _LuxonError3);\n\n function InvalidDurationError(reason) {\n classCallCheck(this, InvalidDurationError);\n return possibleConstructorReturn(this, _LuxonError3.call(this, 'Invalid Duration: ' + reason));\n }\n\n return InvalidDurationError;\n}(LuxonError);\n\n/**\n * @private\n */\nvar ConflictingSpecificationError = function (_LuxonError4) {\n inherits(ConflictingSpecificationError, _LuxonError4);\n\n function ConflictingSpecificationError() {\n classCallCheck(this, ConflictingSpecificationError);\n return possibleConstructorReturn(this, _LuxonError4.apply(this, arguments));\n }\n\n return ConflictingSpecificationError;\n}(LuxonError);\n\n/**\n * @private\n */\nvar InvalidUnitError = function (_LuxonError5) {\n inherits(InvalidUnitError, _LuxonError5);\n\n function InvalidUnitError(unit) {\n classCallCheck(this, InvalidUnitError);\n return possibleConstructorReturn(this, _LuxonError5.call(this, 'Invalid unit ' + unit));\n }\n\n return InvalidUnitError;\n}(LuxonError);\n\n/**\n * @private\n */\nvar InvalidArgumentError = function (_LuxonError6) {\n inherits(InvalidArgumentError, _LuxonError6);\n\n function InvalidArgumentError() {\n classCallCheck(this, InvalidArgumentError);\n return possibleConstructorReturn(this, _LuxonError6.apply(this, arguments));\n }\n\n return InvalidArgumentError;\n}(LuxonError);\n\n/**\n * @private\n */\nvar ZoneIsAbstractError = function (_LuxonError7) {\n inherits(ZoneIsAbstractError, _LuxonError7);\n\n function ZoneIsAbstractError() {\n classCallCheck(this, ZoneIsAbstractError);\n return possibleConstructorReturn(this, _LuxonError7.call(this, 'Zone is an abstract class'));\n }\n\n return ZoneIsAbstractError;\n}(LuxonError);\n\n/* eslint no-unused-vars: \"off\" */\n\n/**\n * @interface\n*/\n\nvar Zone = function () {\n function Zone() {\n classCallCheck(this, Zone);\n }\n\n /**\n * Returns the offset's common name (such as EST) at the specified timestamp\n * @abstract\n * @param {number} ts - Epoch milliseconds for which to get the name\n * @param {Object} opts - Options to affect the format\n * @param {string} opts.format - What style of offset to return. Accepts 'long' or 'short'.\n * @param {string} opts.locale - What locale to return the offset name in.\n * @return {string}\n */\n Zone.prototype.offsetName = function offsetName(ts, opts) {\n throw new ZoneIsAbstractError();\n };\n\n /**\n * Return the offset in minutes for this zone at the specified timestamp.\n * @abstract\n * @param {number} ts - Epoch milliseconds for which to compute the offset\n * @return {number}\n */\n\n\n Zone.prototype.offset = function offset(ts) {\n throw new ZoneIsAbstractError();\n };\n\n /**\n * Return whether this Zone is equal to another zoner\n * @abstract\n * @param {Zone} otherZone - the zone to compare\n * @return {boolean}\n */\n\n\n Zone.prototype.equals = function equals(otherZone) {\n throw new ZoneIsAbstractError();\n };\n\n /**\n * Return whether this Zone is valid.\n * @abstract\n * @type {boolean}\n */\n\n\n createClass(Zone, [{\n key: 'type',\n\n /**\n * The type of zone\n * @abstract\n * @type {string}\n */\n get: function get$$1() {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * The name of this zone.\n * @abstract\n * @type {string}\n */\n\n }, {\n key: 'name',\n get: function get$$1() {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Returns whether the offset is known to be fixed for the whole year.\n * @abstract\n * @type {boolean}\n */\n\n }, {\n key: 'universal',\n get: function get$$1() {\n throw new ZoneIsAbstractError();\n }\n }, {\n key: 'isValid',\n get: function get$$1() {\n throw new ZoneIsAbstractError();\n }\n }]);\n return Zone;\n}();\n\nvar singleton = null;\n\nvar LocalZone = function (_Zone) {\n inherits(LocalZone, _Zone);\n\n function LocalZone() {\n classCallCheck(this, LocalZone);\n return possibleConstructorReturn(this, _Zone.apply(this, arguments));\n }\n\n LocalZone.prototype.offsetName = function offsetName(ts, _ref) {\n var format = _ref.format,\n locale = _ref.locale;\n\n return parseZoneInfo(ts, format, locale);\n };\n\n LocalZone.prototype.offset = function offset(ts) {\n return -new Date(ts).getTimezoneOffset();\n };\n\n LocalZone.prototype.equals = function equals(otherZone) {\n return otherZone.type === 'local';\n };\n\n createClass(LocalZone, [{\n key: 'type',\n get: function get$$1() {\n return 'local';\n }\n }, {\n key: 'name',\n get: function get$$1() {\n if (hasIntl()) {\n return new Intl.DateTimeFormat().resolvedOptions().timeZone;\n } else return 'local';\n }\n }, {\n key: 'universal',\n get: function get$$1() {\n return false;\n }\n }, {\n key: 'isValid',\n get: function get$$1() {\n return true;\n }\n }], [{\n key: 'instance',\n get: function get$$1() {\n if (singleton === null) {\n singleton = new LocalZone();\n }\n return singleton;\n }\n }]);\n return LocalZone;\n}(Zone);\n\nvar dtfCache = {};\nfunction makeDTF(zone) {\n if (!dtfCache[zone]) {\n dtfCache[zone] = new Intl.DateTimeFormat('en-US', {\n hour12: false,\n timeZone: zone,\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit'\n });\n }\n return dtfCache[zone];\n}\n\nvar typeToPos = {\n year: 0,\n month: 1,\n day: 2,\n hour: 3,\n minute: 4,\n second: 5\n};\n\nfunction hackyOffset(dtf, date) {\n var formatted = dtf.format(date).replace(/\\u200E/g, ''),\n parsed = /(\\d+)\\/(\\d+)\\/(\\d+),? (\\d+):(\\d+):(\\d+)/.exec(formatted),\n fMonth = parsed[1],\n fDay = parsed[2],\n fYear = parsed[3],\n fHour = parsed[4],\n fMinute = parsed[5],\n fSecond = parsed[6];\n\n return [fYear, fMonth, fDay, fHour, fMinute, fSecond];\n}\n\nfunction partsOffset(dtf, date) {\n var formatted = dtf.formatToParts(date),\n filled = [];\n for (var i = 0; i < formatted.length; i++) {\n var _formatted$i = formatted[i],\n type = _formatted$i.type,\n value = _formatted$i.value,\n pos = typeToPos[type];\n\n\n if (!isUndefined(pos)) {\n filled[pos] = parseInt(value, 10);\n }\n }\n return filled;\n}\n\nvar IANAZone = function (_Zone) {\n inherits(IANAZone, _Zone);\n\n IANAZone.isValidSpecifier = function isValidSpecifier(s) {\n return s && s.match(/^[a-z_+-]{1,256}\\/[a-z_+-]{1,256}(\\/[a-z_+-]{1,256})?$/i);\n };\n\n IANAZone.isValidZone = function isValidZone(zone) {\n try {\n new Intl.DateTimeFormat('en-US', { timeZone: zone }).format();\n return true;\n } catch (e) {\n return false;\n }\n };\n\n // Etc/GMT+8 -> 480\n\n\n IANAZone.parseGMTOffset = function parseGMTOffset(specifier) {\n if (specifier) {\n var match = specifier.match(/^Etc\\/GMT([+-]\\d{1,2})$/i);\n if (match) {\n return 60 * parseInt(match[1]);\n }\n }\n return null;\n };\n\n function IANAZone(name) {\n classCallCheck(this, IANAZone);\n\n var _this = possibleConstructorReturn(this, _Zone.call(this));\n\n _this.zoneName = name;\n _this.valid = IANAZone.isValidZone(name);\n return _this;\n }\n\n IANAZone.prototype.offsetName = function offsetName(ts, _ref) {\n var format = _ref.format,\n locale = _ref.locale;\n\n return parseZoneInfo(ts, format, locale, this.zoneName);\n };\n\n IANAZone.prototype.offset = function offset(ts) {\n var date = new Date(ts),\n dtf = makeDTF(this.zoneName),\n _ref2 = dtf.formatToParts ? partsOffset(dtf, date) : hackyOffset(dtf, date),\n fYear = _ref2[0],\n fMonth = _ref2[1],\n fDay = _ref2[2],\n fHour = _ref2[3],\n fMinute = _ref2[4],\n fSecond = _ref2[5],\n asUTC = Date.UTC(fYear, fMonth - 1, fDay, fHour, fMinute, fSecond);\n\n var asTS = date.valueOf();\n asTS -= asTS % 1000;\n return (asUTC - asTS) / (60 * 1000);\n };\n\n IANAZone.prototype.equals = function equals(otherZone) {\n return otherZone.type === 'iana' && otherZone.zoneName === this.zoneName;\n };\n\n createClass(IANAZone, [{\n key: 'type',\n get: function get$$1() {\n return 'iana';\n }\n }, {\n key: 'name',\n get: function get$$1() {\n return this.zoneName;\n }\n }, {\n key: 'universal',\n get: function get$$1() {\n return false;\n }\n }, {\n key: 'isValid',\n get: function get$$1() {\n return this.valid;\n }\n }]);\n return IANAZone;\n}(Zone);\n\nvar singleton$1 = null;\n\nfunction hoursMinutesOffset(z) {\n var hours = Math.trunc(z.fixed / 60),\n minutes = Math.abs(z.fixed % 60),\n sign = hours > 0 ? '+' : '-',\n base = sign + Math.abs(hours);\n return minutes > 0 ? base + ':' + padStart(minutes, 2) : base;\n}\n\nvar FixedOffsetZone = function (_Zone) {\n inherits(FixedOffsetZone, _Zone);\n\n FixedOffsetZone.instance = function instance(offset) {\n return offset === 0 ? FixedOffsetZone.utcInstance : new FixedOffsetZone(offset);\n };\n\n FixedOffsetZone.parseSpecifier = function parseSpecifier(s) {\n if (s) {\n var r = s.match(/^utc(?:([+-]\\d{1,2})(?::(\\d{2}))?)?$/i);\n if (r) {\n return new FixedOffsetZone(signedOffset(r[1], r[2]));\n }\n }\n return null;\n };\n\n createClass(FixedOffsetZone, null, [{\n key: 'utcInstance',\n get: function get$$1() {\n if (singleton$1 === null) {\n singleton$1 = new FixedOffsetZone(0);\n }\n return singleton$1;\n }\n }]);\n\n function FixedOffsetZone(offset) {\n classCallCheck(this, FixedOffsetZone);\n\n var _this = possibleConstructorReturn(this, _Zone.call(this));\n\n _this.fixed = offset;\n return _this;\n }\n\n FixedOffsetZone.prototype.offsetName = function offsetName() {\n return this.name;\n };\n\n FixedOffsetZone.prototype.offset = function offset() {\n return this.fixed;\n };\n\n FixedOffsetZone.prototype.equals = function equals(otherZone) {\n return otherZone.type === 'fixed' && otherZone.fixed === this.fixed;\n };\n\n createClass(FixedOffsetZone, [{\n key: 'type',\n get: function get$$1() {\n return 'fixed';\n }\n }, {\n key: 'name',\n get: function get$$1() {\n return this.fixed === 0 ? 'UTC' : 'UTC' + hoursMinutesOffset(this);\n }\n }, {\n key: 'universal',\n get: function get$$1() {\n return true;\n }\n }, {\n key: 'isValid',\n get: function get$$1() {\n return true;\n }\n }]);\n return FixedOffsetZone;\n}(Zone);\n\nvar singleton$2 = null;\n\nvar InvalidZone = function (_Zone) {\n inherits(InvalidZone, _Zone);\n\n function InvalidZone() {\n classCallCheck(this, InvalidZone);\n return possibleConstructorReturn(this, _Zone.apply(this, arguments));\n }\n\n InvalidZone.prototype.offsetName = function offsetName() {\n return null;\n };\n\n InvalidZone.prototype.offset = function offset() {\n return NaN;\n };\n\n InvalidZone.prototype.equals = function equals() {\n return false;\n };\n\n createClass(InvalidZone, [{\n key: 'type',\n get: function get$$1() {\n return 'invalid';\n }\n }, {\n key: 'name',\n get: function get$$1() {\n return null;\n }\n }, {\n key: 'universal',\n get: function get$$1() {\n return false;\n }\n }, {\n key: 'isValid',\n get: function get$$1() {\n return false;\n }\n }], [{\n key: 'instance',\n get: function get$$1() {\n if (singleton$2 === null) {\n singleton$2 = new InvalidZone();\n }\n return singleton$2;\n }\n }]);\n return InvalidZone;\n}(Zone);\n\n/**\n * @private\n */\n\nfunction normalizeZone(input, defaultZone) {\n var offset = void 0;\n if (isUndefined(input) || input === null) {\n return defaultZone;\n } else if (input instanceof Zone) {\n return input;\n } else if (isString(input)) {\n var lowered = input.toLowerCase();\n if (lowered === 'local') return LocalZone.instance;else if (lowered === 'utc' || lowered === 'gmt') return FixedOffsetZone.utcInstance;else if ((offset = IANAZone.parseGMTOffset(input)) != null) {\n // handle Etc/GMT-4, which V8 chokes on\n return FixedOffsetZone.instance(offset);\n } else if (IANAZone.isValidSpecifier(lowered)) return new IANAZone(input);else return FixedOffsetZone.parseSpecifier(lowered) || InvalidZone.instance;\n } else if (isNumber(input)) {\n return FixedOffsetZone.instance(input);\n } else if ((typeof input === 'undefined' ? 'undefined' : _typeof(input)) === 'object' && input.offset) {\n // This is dumb, but the instanceof check above doesn't seem to really work\n // so we're duck checking it\n return input;\n } else {\n return InvalidZone.instance;\n }\n}\n\nvar now = function now() {\n return new Date().valueOf();\n},\n defaultZone = null,\n // not setting this directly to LocalZone.instance bc loading order issues\ndefaultLocale = null,\n defaultNumberingSystem = null,\n defaultOutputCalendar = null,\n throwOnInvalid = false;\n\n/**\n * Settings contains static getters and setters that control Luxon's overall behavior. Luxon is a simple library with few options, but the ones it does have live here.\n */\n\nvar Settings = function () {\n function Settings() {\n classCallCheck(this, Settings);\n }\n\n /**\n * Reset Luxon's global caches. Should only be necessary in testing scenarios.\n * @return {void}\n */\n Settings.resetCaches = function resetCaches() {\n Locale.resetCache();\n };\n\n createClass(Settings, null, [{\n key: 'now',\n\n /**\n * Get the callback for returning the current timestamp.\n * @type {function}\n */\n get: function get$$1() {\n return now;\n }\n\n /**\n * Set the callback for returning the current timestamp.\n * @type {function}\n */\n ,\n set: function set$$1(n) {\n now = n;\n }\n\n /**\n * Get the default time zone to create DateTimes in.\n * @type {string}\n */\n\n }, {\n key: 'defaultZoneName',\n get: function get$$1() {\n return (defaultZone || LocalZone.instance).name;\n }\n\n /**\n * Set the default time zone to create DateTimes in. Does not affect existing instances.\n * @type {string}\n */\n ,\n set: function set$$1(z) {\n if (!z) {\n defaultZone = null;\n } else {\n defaultZone = normalizeZone(z);\n }\n }\n\n /**\n * Get the default time zone object to create DateTimes in. Does not affect existing instances.\n * @type {Zone}\n */\n\n }, {\n key: 'defaultZone',\n get: function get$$1() {\n return defaultZone || LocalZone.instance;\n }\n\n /**\n * Get the default locale to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n\n }, {\n key: 'defaultLocale',\n get: function get$$1() {\n return defaultLocale;\n }\n\n /**\n * Set the default locale to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n ,\n set: function set$$1(locale) {\n defaultLocale = locale;\n }\n\n /**\n * Get the default numbering system to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n\n }, {\n key: 'defaultNumberingSystem',\n get: function get$$1() {\n return defaultNumberingSystem;\n }\n\n /**\n * Set the default numbering system to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n ,\n set: function set$$1(numberingSystem) {\n defaultNumberingSystem = numberingSystem;\n }\n\n /**\n * Get the default output calendar to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n\n }, {\n key: 'defaultOutputCalendar',\n get: function get$$1() {\n return defaultOutputCalendar;\n }\n\n /**\n * Set the default output calendar to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n ,\n set: function set$$1(outputCalendar) {\n defaultOutputCalendar = outputCalendar;\n }\n\n /**\n * Get whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals\n * @type {boolean}\n */\n\n }, {\n key: 'throwOnInvalid',\n get: function get$$1() {\n return throwOnInvalid;\n }\n\n /**\n * Set whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals\n * @type {boolean}\n */\n ,\n set: function set$$1(t) {\n throwOnInvalid = t;\n }\n }]);\n return Settings;\n}();\n\nfunction stringifyTokens(splits, tokenToString) {\n var s = '';\n for (var _iterator = splits, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n var _ref;\n\n if (_isArray) {\n if (_i >= _iterator.length) break;\n _ref = _iterator[_i++];\n } else {\n _i = _iterator.next();\n if (_i.done) break;\n _ref = _i.value;\n }\n\n var token = _ref;\n\n if (token.literal) {\n s += token.val;\n } else {\n s += tokenToString(token.val);\n }\n }\n return s;\n}\n\nvar tokenToObject = {\n D: DATE_SHORT,\n DD: DATE_MED,\n DDD: DATE_FULL,\n DDDD: DATE_HUGE,\n t: TIME_SIMPLE,\n tt: TIME_WITH_SECONDS,\n ttt: TIME_WITH_SHORT_OFFSET,\n tttt: TIME_WITH_LONG_OFFSET,\n T: TIME_24_SIMPLE,\n TT: TIME_24_WITH_SECONDS,\n TTT: TIME_24_WITH_SHORT_OFFSET,\n TTTT: TIME_24_WITH_LONG_OFFSET,\n f: DATETIME_SHORT,\n ff: DATETIME_MED,\n fff: DATETIME_FULL,\n ffff: DATETIME_HUGE,\n F: DATETIME_SHORT_WITH_SECONDS,\n FF: DATETIME_MED_WITH_SECONDS,\n FFF: DATETIME_FULL_WITH_SECONDS,\n FFFF: DATETIME_HUGE_WITH_SECONDS\n};\n\n/**\n * @private\n */\n\nvar Formatter = function () {\n Formatter.create = function create(locale) {\n var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n var formatOpts = Object.assign({}, { round: true }, opts);\n return new Formatter(locale, formatOpts);\n };\n\n Formatter.parseFormat = function parseFormat(fmt) {\n var current = null,\n currentFull = '',\n bracketed = false;\n var splits = [];\n for (var i = 0; i < fmt.length; i++) {\n var c = fmt.charAt(i);\n if (c === \"'\") {\n if (currentFull.length > 0) {\n splits.push({ literal: bracketed, val: currentFull });\n }\n current = null;\n currentFull = '';\n bracketed = !bracketed;\n } else if (bracketed) {\n currentFull += c;\n } else if (c === current) {\n currentFull += c;\n } else {\n if (currentFull.length > 0) {\n splits.push({ literal: false, val: currentFull });\n }\n currentFull = c;\n current = c;\n }\n }\n\n if (currentFull.length > 0) {\n splits.push({ literal: bracketed, val: currentFull });\n }\n\n return splits;\n };\n\n function Formatter(locale, formatOpts) {\n classCallCheck(this, Formatter);\n\n this.opts = formatOpts;\n this.loc = locale;\n this.systemLoc = null;\n }\n\n Formatter.prototype.formatWithSystemDefault = function formatWithSystemDefault(dt, opts) {\n if (this.systemLoc === null) {\n this.systemLoc = this.loc.redefaultToSystem();\n }\n var df = this.systemLoc.dtFormatter(dt, Object.assign({}, this.opts, opts));\n return df.format();\n };\n\n Formatter.prototype.formatDateTime = function formatDateTime(dt) {\n var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n var df = this.loc.dtFormatter(dt, Object.assign({}, this.opts, opts));\n return df.format();\n };\n\n Formatter.prototype.formatDateTimeParts = function formatDateTimeParts(dt) {\n var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n var df = this.loc.dtFormatter(dt, Object.assign({}, this.opts, opts));\n return df.formatToParts();\n };\n\n Formatter.prototype.resolvedOptions = function resolvedOptions(dt) {\n var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n var df = this.loc.dtFormatter(dt, Object.assign({}, this.opts, opts));\n return df.resolvedOptions();\n };\n\n Formatter.prototype.num = function num(n) {\n var p = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n // we get some perf out of doing this here, annoyingly\n if (this.opts.forceSimple) {\n return padStart(n, p);\n }\n\n var opts = Object.assign({}, this.opts);\n\n if (p > 0) {\n opts.padTo = p;\n }\n\n return this.loc.numberFormatter(opts).format(n);\n };\n\n Formatter.prototype.formatDateTimeFromString = function formatDateTimeFromString(dt, fmt) {\n var _this = this;\n\n var knownEnglish = this.loc.listingMode() === 'en';\n var string = function string(opts, extract) {\n return _this.loc.extract(dt, opts, extract);\n },\n formatOffset = function formatOffset(opts) {\n if (dt.isOffsetFixed && dt.offset === 0 && opts.allowZ) {\n return 'Z';\n }\n\n var hours = Math.trunc(dt.offset / 60),\n minutes = Math.abs(dt.offset % 60),\n sign = hours >= 0 ? '+' : '-',\n base = '' + sign + Math.abs(hours);\n\n switch (opts.format) {\n case 'short':\n return '' + sign + _this.num(Math.abs(hours), 2) + ':' + _this.num(minutes, 2);\n case 'narrow':\n return minutes > 0 ? base + ':' + minutes : base;\n case 'techie':\n return '' + sign + _this.num(Math.abs(hours), 2) + _this.num(minutes, 2);\n default:\n throw new RangeError('Value format ' + opts.format + ' is out of range for property format');\n }\n },\n meridiem = function meridiem() {\n return knownEnglish ? meridiemForDateTime(dt) : string({ hour: 'numeric', hour12: true }, 'dayperiod');\n },\n month = function month(length, standalone) {\n return knownEnglish ? monthForDateTime(dt, length) : string(standalone ? { month: length } : { month: length, day: 'numeric' }, 'month');\n },\n weekday = function weekday(length, standalone) {\n return knownEnglish ? weekdayForDateTime(dt, length) : string(standalone ? { weekday: length } : { weekday: length, month: 'long', day: 'numeric' }, 'weekday');\n },\n maybeMacro = function maybeMacro(token) {\n var macro = tokenToObject[token];\n if (macro) {\n return _this.formatWithSystemDefault(dt, macro);\n } else {\n return token;\n }\n },\n era = function era(length) {\n return knownEnglish ? eraForDateTime(dt, length) : string({ era: length }, 'era');\n },\n tokenToString = function tokenToString(token) {\n var outputCal = _this.loc.outputCalendar;\n\n // Where possible: http://cldr.unicode.org/translation/date-time#TOC-Stand-Alone-vs.-Format-Styles\n switch (token) {\n // ms\n case 'S':\n return _this.num(dt.millisecond);\n case 'u':\n // falls through\n case 'SSS':\n return _this.num(dt.millisecond, 3);\n // seconds\n case 's':\n return _this.num(dt.second);\n case 'ss':\n return _this.num(dt.second, 2);\n // minutes\n case 'm':\n return _this.num(dt.minute);\n case 'mm':\n return _this.num(dt.minute, 2);\n // hours\n case 'h':\n return _this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12);\n case 'hh':\n return _this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12, 2);\n case 'H':\n return _this.num(dt.hour);\n case 'HH':\n return _this.num(dt.hour, 2);\n // offset\n case 'Z':\n // like +6\n return formatOffset({ format: 'narrow', allowZ: _this.opts.allowZ });\n case 'ZZ':\n // like +06:00\n return formatOffset({ format: 'short', allowZ: _this.opts.allowZ });\n case 'ZZZ':\n // like +0600\n return formatOffset({ format: 'techie', allowZ: false });\n case 'ZZZZ':\n // like EST\n return dt.offsetNameShort;\n case 'ZZZZZ':\n // like Eastern Standard Time\n return dt.offsetNameLong;\n // zone\n case 'z':\n // like America/New_York\n return dt.zoneName;\n // meridiems\n case 'a':\n return meridiem();\n // dates\n case 'd':\n return outputCal ? string({ day: 'numeric' }, 'day') : _this.num(dt.day);\n case 'dd':\n return outputCal ? string({ day: '2-digit' }, 'day') : _this.num(dt.day, 2);\n // weekdays - standalone\n case 'c':\n // like 1\n return _this.num(dt.weekday);\n case 'ccc':\n // like 'Tues'\n return weekday('short', true);\n case 'cccc':\n // like 'Tuesday'\n return weekday('long', true);\n case 'ccccc':\n // like 'T'\n return weekday('narrow', true);\n // weekdays - format\n case 'E':\n // like 1\n return _this.num(dt.weekday);\n case 'EEE':\n // like 'Tues'\n return weekday('short', false);\n case 'EEEE':\n // like 'Tuesday'\n return weekday('long', false);\n case 'EEEEE':\n // like 'T'\n return weekday('narrow', false);\n // months - standalone\n case 'L':\n // like 1\n return outputCal ? string({ month: 'numeric', day: 'numeric' }, 'month') : _this.num(dt.month);\n case 'LL':\n // like 01, doesn't seem to work\n return outputCal ? string({ month: '2-digit', day: 'numeric' }, 'month') : _this.num(dt.month, 2);\n case 'LLL':\n // like Jan\n return month('short', true);\n case 'LLLL':\n // like January\n return month('long', true);\n case 'LLLLL':\n // like J\n return month('narrow', true);\n // months - format\n case 'M':\n // like 1\n return outputCal ? string({ month: 'numeric' }, 'month') : _this.num(dt.month);\n case 'MM':\n // like 01\n return outputCal ? string({ month: '2-digit' }, 'month') : _this.num(dt.month, 2);\n case 'MMM':\n // like Jan\n return month('short', false);\n case 'MMMM':\n // like January\n return month('long', false);\n case 'MMMMM':\n // like J\n return month('narrow', false);\n // years\n case 'y':\n // like 2014\n return outputCal ? string({ year: 'numeric' }, 'year') : _this.num(dt.year);\n case 'yy':\n // like 14\n return outputCal ? string({ year: '2-digit' }, 'year') : _this.num(dt.year.toString().slice(-2), 2);\n case 'yyyy':\n // like 0012\n return outputCal ? string({ year: 'numeric' }, 'year') : _this.num(dt.year, 4);\n case 'yyyyyy':\n // like 000012\n return outputCal ? string({ year: 'numeric' }, 'year') : _this.num(dt.year, 6);\n // eras\n case 'G':\n // like AD\n return era('short');\n case 'GG':\n // like Anno Domini\n return era('long');\n case 'GGGGG':\n return era('narrow');\n case 'kk':\n return _this.num(dt.weekYear.toString().slice(-2), 2);\n case 'kkkk':\n return _this.num(dt.weekYear, 4);\n case 'W':\n return _this.num(dt.weekNumber);\n case 'WW':\n return _this.num(dt.weekNumber, 2);\n case 'o':\n return _this.num(dt.ordinal);\n case 'ooo':\n return _this.num(dt.ordinal, 3);\n case 'q':\n // like 1\n return _this.num(dt.quarter);\n case 'qq':\n // like 01\n return _this.num(dt.quarter, 2);\n default:\n return maybeMacro(token);\n }\n };\n\n return stringifyTokens(Formatter.parseFormat(fmt), tokenToString);\n };\n\n Formatter.prototype.formatDurationFromString = function formatDurationFromString(dur, fmt) {\n var _this2 = this;\n\n var tokenToField = function tokenToField(token) {\n switch (token[0]) {\n case 'S':\n return 'millisecond';\n case 's':\n return 'second';\n case 'm':\n return 'minute';\n case 'h':\n return 'hour';\n case 'd':\n return 'day';\n case 'M':\n return 'month';\n case 'y':\n return 'year';\n default:\n return null;\n }\n },\n tokenToString = function tokenToString(lildur) {\n return function (token) {\n var mapped = tokenToField(token);\n if (mapped) {\n return _this2.num(lildur.get(mapped), token.length);\n } else {\n return token;\n }\n };\n },\n tokens = Formatter.parseFormat(fmt),\n realTokens = tokens.reduce(function (found, _ref2) {\n var literal = _ref2.literal,\n val = _ref2.val;\n return literal ? found : found.concat(val);\n }, []),\n collapsed = dur.shiftTo.apply(dur, realTokens.map(tokenToField).filter(function (t) {\n return t;\n }));\n return stringifyTokens(tokens, tokenToString(collapsed));\n };\n\n return Formatter;\n}();\n\nvar sysLocaleCache = null;\nfunction systemLocale() {\n if (sysLocaleCache) {\n return sysLocaleCache;\n } else if (hasIntl()) {\n var computedSys = new Intl.DateTimeFormat().resolvedOptions().locale;\n // node sometimes defaults to \"und\". Override that because that is dumb\n sysLocaleCache = computedSys === 'und' ? 'en-US' : computedSys;\n return sysLocaleCache;\n } else {\n sysLocaleCache = 'en-US';\n return sysLocaleCache;\n }\n}\n\nfunction intlConfigString(locale, numberingSystem, outputCalendar) {\n if (hasIntl()) {\n locale = Array.isArray(locale) ? locale : [locale];\n\n if (outputCalendar || numberingSystem) {\n locale = locale.map(function (l) {\n l += '-u';\n\n if (outputCalendar) {\n l += '-ca-' + outputCalendar;\n }\n\n if (numberingSystem) {\n l += '-nu-' + numberingSystem;\n }\n return l;\n });\n }\n return locale;\n } else {\n return [];\n }\n}\n\nfunction mapMonths(f) {\n var ms = [];\n for (var i = 1; i <= 12; i++) {\n var dt = DateTime.utc(2016, i, 1);\n ms.push(f(dt));\n }\n return ms;\n}\n\nfunction mapWeekdays(f) {\n var ms = [];\n for (var i = 1; i <= 7; i++) {\n var dt = DateTime.utc(2016, 11, 13 + i);\n ms.push(f(dt));\n }\n return ms;\n}\n\nfunction listStuff(loc, length, defaultOK, englishFn, intlFn) {\n var mode = loc.listingMode(defaultOK);\n\n if (mode === 'error') {\n return null;\n } else if (mode === 'en') {\n return englishFn(length);\n } else {\n return intlFn(length);\n }\n}\n\nfunction supportsFastNumbers(loc) {\n if (loc.numberingSystem && loc.numberingSystem !== 'latn') {\n return false;\n } else {\n return loc.numberingSystem === 'latn' || !loc.locale || loc.locale.startsWith('en') || hasIntl() && Intl.DateTimeFormat(loc.intl).resolvedOptions().numberingSystem === 'latn';\n }\n}\n\n/**\n * @private\n */\n\nvar SimpleNumberFormatter = function () {\n function SimpleNumberFormatter(opts) {\n classCallCheck(this, SimpleNumberFormatter);\n\n this.padTo = opts.padTo || 0;\n this.round = opts.round || false;\n }\n\n SimpleNumberFormatter.prototype.format = function format(i) {\n // to match the browser's numberformatter defaults\n var digits = this.round ? 0 : 3,\n rounded = roundTo(i, digits);\n return padStart(rounded, this.padTo);\n };\n\n return SimpleNumberFormatter;\n}();\n\n/**\n * @private\n */\n\nvar PolyDateFormatter = function () {\n function PolyDateFormatter(dt, intl, opts) {\n classCallCheck(this, PolyDateFormatter);\n\n this.opts = opts;\n this.hasIntl = hasIntl();\n\n var z = void 0;\n if (dt.zone.universal && this.hasIntl) {\n // Chromium doesn't support fixed-offset zones like Etc/GMT+8 in its formatter,\n // See https://bugs.chromium.org/p/chromium/issues/detail?id=364374.\n // So we have to make do. Two cases:\n // 1. The format options tell us to show the zone. We can't do that, so the best\n // we can do is format the date in UTC.\n // 2. The format options don't tell us to show the zone. Then we can adjust them\n // the time and tell the formatter to show it to us in UTC, so that the time is right\n // and the bad zone doesn't show up.\n // We can clean all this up when Chrome fixes this.\n z = 'UTC';\n if (opts.timeZoneName) {\n this.dt = dt;\n } else {\n this.dt = dt.offset === 0 ? dt : DateTime.fromMillis(dt.ts + dt.offset * 60 * 1000);\n }\n } else if (dt.zone.type === 'local') {\n this.dt = dt;\n } else {\n this.dt = dt;\n z = dt.zone.name;\n }\n\n if (this.hasIntl) {\n var realIntlOpts = Object.assign({}, this.opts);\n if (z) {\n realIntlOpts.timeZone = z;\n }\n this.dtf = new Intl.DateTimeFormat(intl, realIntlOpts);\n }\n }\n\n PolyDateFormatter.prototype.format = function format() {\n if (this.hasIntl) {\n return this.dtf.format(this.dt.toJSDate());\n } else {\n var tokenFormat = formatString(this.opts),\n loc = Locale.create('en-US');\n return Formatter.create(loc).formatDateTimeFromString(this.dt, tokenFormat);\n }\n };\n\n PolyDateFormatter.prototype.formatToParts = function formatToParts() {\n if (this.hasIntl && hasFormatToParts()) {\n return this.dtf.formatToParts(this.dt.toJSDate());\n } else {\n // This is kind of a cop out. We actually could do this for English. However, we couldn't do it for intl strings\n // and IMO it's too weird to have an uncanny valley like that\n return [];\n }\n };\n\n PolyDateFormatter.prototype.resolvedOptions = function resolvedOptions() {\n if (this.hasIntl) {\n return this.dtf.resolvedOptions();\n } else {\n return {\n locale: 'en-US',\n numberingSystem: 'latn',\n outputCalendar: 'gregory'\n };\n }\n };\n\n return PolyDateFormatter;\n}();\n\n/**\n * @private\n */\n\nvar Locale = function () {\n Locale.fromOpts = function fromOpts(opts) {\n return Locale.create(opts.locale, opts.numberingSystem, opts.outputCalendar, opts.defaultToEN);\n };\n\n Locale.create = function create(locale, numberingSystem, outputCalendar) {\n var defaultToEN = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n var specifiedLocale = locale || Settings.defaultLocale,\n\n // the system locale is useful for human readable strings but annoying for parsing/formatting known formats\n localeR = specifiedLocale || (defaultToEN ? 'en-US' : systemLocale()),\n numberingSystemR = numberingSystem || Settings.defaultNumberingSystem,\n outputCalendarR = outputCalendar || Settings.defaultOutputCalendar;\n return new Locale(localeR, numberingSystemR, outputCalendarR, specifiedLocale);\n };\n\n Locale.resetCache = function resetCache() {\n sysLocaleCache = null;\n };\n\n Locale.fromObject = function fromObject() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n locale = _ref.locale,\n numberingSystem = _ref.numberingSystem,\n outputCalendar = _ref.outputCalendar;\n\n return Locale.create(locale, numberingSystem, outputCalendar);\n };\n\n function Locale(locale, numbering, outputCalendar, specifiedLocale) {\n classCallCheck(this, Locale);\n\n this.locale = locale;\n this.numberingSystem = numbering;\n this.outputCalendar = outputCalendar;\n this.intl = intlConfigString(this.locale, this.numberingSystem, this.outputCalendar);\n\n this.weekdaysCache = { format: {}, standalone: {} };\n this.monthsCache = { format: {}, standalone: {} };\n this.meridiemCache = null;\n this.eraCache = {};\n\n this.specifiedLocale = specifiedLocale;\n this.fastNumbersCached = null;\n }\n\n // todo: cache me\n Locale.prototype.listingMode = function listingMode() {\n var defaultOK = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n var intl = hasIntl(),\n hasFTP = intl && hasFormatToParts(),\n isActuallyEn = this.locale === 'en' || this.locale.toLowerCase() === 'en-us' || intl && Intl.DateTimeFormat(this.intl).resolvedOptions().locale.startsWith('en-us'),\n hasNoWeirdness = (this.numberingSystem === null || this.numberingSystem === 'latn') && (this.outputCalendar === null || this.outputCalendar === 'gregory');\n\n if (!hasFTP && !(isActuallyEn && hasNoWeirdness) && !defaultOK) {\n return 'error';\n } else if (!hasFTP || isActuallyEn && hasNoWeirdness) {\n return 'en';\n } else {\n return 'intl';\n }\n };\n\n Locale.prototype.clone = function clone(alts) {\n if (!alts || Object.getOwnPropertyNames(alts).length === 0) {\n return this;\n } else {\n return Locale.create(alts.locale || this.specifiedLocale, alts.numberingSystem || this.numberingSystem, alts.outputCalendar || this.outputCalendar, alts.defaultToEN || false);\n }\n };\n\n Locale.prototype.redefaultToEN = function redefaultToEN() {\n var alts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n return this.clone(Object.assign({}, alts, { defaultToEN: true }));\n };\n\n Locale.prototype.redefaultToSystem = function redefaultToSystem() {\n var alts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n return this.clone(Object.assign({}, alts, { defaultToEN: false }));\n };\n\n Locale.prototype.months = function months$$1(length) {\n var _this = this;\n\n var format = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var defaultOK = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n\n return listStuff(this, length, defaultOK, months, function () {\n var intl = format ? { month: length, day: 'numeric' } : { month: length },\n formatStr = format ? 'format' : 'standalone';\n if (!_this.monthsCache[formatStr][length]) {\n _this.monthsCache[formatStr][length] = mapMonths(function (dt) {\n return _this.extract(dt, intl, 'month');\n });\n }\n return _this.monthsCache[formatStr][length];\n });\n };\n\n Locale.prototype.weekdays = function weekdays$$1(length) {\n var _this2 = this;\n\n var format = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var defaultOK = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n\n return listStuff(this, length, defaultOK, weekdays, function () {\n var intl = format ? { weekday: length, year: 'numeric', month: 'long', day: 'numeric' } : { weekday: length },\n formatStr = format ? 'format' : 'standalone';\n if (!_this2.weekdaysCache[formatStr][length]) {\n _this2.weekdaysCache[formatStr][length] = mapWeekdays(function (dt) {\n return _this2.extract(dt, intl, 'weekday');\n });\n }\n return _this2.weekdaysCache[formatStr][length];\n });\n };\n\n Locale.prototype.meridiems = function meridiems$$1() {\n var _this3 = this;\n\n var defaultOK = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n return listStuff(this, undefined, defaultOK, function () {\n return meridiems;\n }, function () {\n // In theory there could be aribitrary day periods. We're gonna assume there are exactly two\n // for AM and PM. This is probably wrong, but it's makes parsing way easier.\n if (!_this3.meridiemCache) {\n var intl = { hour: 'numeric', hour12: true };\n _this3.meridiemCache = [DateTime.utc(2016, 11, 13, 9), DateTime.utc(2016, 11, 13, 19)].map(function (dt) {\n return _this3.extract(dt, intl, 'dayperiod');\n });\n }\n\n return _this3.meridiemCache;\n });\n };\n\n Locale.prototype.eras = function eras$$1(length) {\n var _this4 = this;\n\n var defaultOK = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n return listStuff(this, length, defaultOK, eras, function () {\n var intl = { era: length };\n\n // This is utter bullshit. Different calendars are going to define eras totally differently. What I need is the minimum set of dates\n // to definitely enumerate them.\n if (!_this4.eraCache[length]) {\n _this4.eraCache[length] = [DateTime.utc(-40, 1, 1), DateTime.utc(2017, 1, 1)].map(function (dt) {\n return _this4.extract(dt, intl, 'era');\n });\n }\n\n return _this4.eraCache[length];\n });\n };\n\n Locale.prototype.extract = function extract(dt, intlOpts, field) {\n var df = this.dtFormatter(dt, intlOpts),\n results = df.formatToParts(),\n matching = results.find(function (m) {\n return m.type.toLowerCase() === field;\n });\n\n return matching ? matching.value : null;\n };\n\n Locale.prototype.numberFormatter = function numberFormatter() {\n var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n // this option is never used (the only caller short-circuits on it, but it seems safer to leave)\n // (in contrast, the || is used heavily)\n if (opts.forceSimple || this.fastNumbers) {\n return new SimpleNumberFormatter(opts);\n } else if (hasIntl()) {\n var intlOpts = { useGrouping: false };\n\n if (opts.padTo > 0) {\n intlOpts.minimumIntegerDigits = opts.padTo;\n }\n\n if (opts.round) {\n intlOpts.maximumFractionDigits = 0;\n }\n\n return new Intl.NumberFormat(this.intl, intlOpts);\n } else {\n return new SimpleNumberFormatter(opts);\n }\n };\n\n Locale.prototype.dtFormatter = function dtFormatter(dt) {\n var intlOpts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n return new PolyDateFormatter(dt, this.intl, intlOpts);\n };\n\n Locale.prototype.equals = function equals(other) {\n return this.locale === other.locale && this.numberingSystem === other.numberingSystem && this.outputCalendar === other.outputCalendar;\n };\n\n createClass(Locale, [{\n key: 'fastNumbers',\n get: function get$$1() {\n if (this.fastNumbersCached !== null) {\n this.fastNumbersCached = supportsFastNumbers(this);\n }\n\n return this.fastNumbersCached;\n }\n }]);\n return Locale;\n}();\n\n/*\n * This file handles parsing for well-specified formats. Here's how it works:\n * Two things go into parsing: a regex to match with and an extractor to take apart the groups in the match.\n * An extractor is just a function that takes a regex match array and returns a { year: ..., month: ... } object\n * parse() does the work of executing the regex and applying the extractor. It takes multiple regex/extractor pairs to try in sequence.\n * Extractors can take a \"cursor\" representing the offset in the match to look at. This makes it easy to combine extractors.\n * combineExtractors() does the work of combining them, keeping track of the cursor through multiple extractions.\n * Some extractions are super dumb and simpleParse and fromStrings help DRY them.\n */\n\nfunction combineRegexes() {\n for (var _len = arguments.length, regexes = Array(_len), _key = 0; _key < _len; _key++) {\n regexes[_key] = arguments[_key];\n }\n\n var full = regexes.reduce(function (f, r) {\n return f + r.source;\n }, '');\n return RegExp('^' + full + '$');\n}\n\nfunction combineExtractors() {\n for (var _len2 = arguments.length, extractors = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n extractors[_key2] = arguments[_key2];\n }\n\n return function (m) {\n return extractors.reduce(function (_ref, ex) {\n var mergedVals = _ref[0],\n mergedZone = _ref[1],\n cursor = _ref[2];\n\n var _ex = ex(m, cursor),\n val = _ex[0],\n zone = _ex[1],\n next = _ex[2];\n\n return [Object.assign(mergedVals, val), mergedZone || zone, next];\n }, [{}, null, 1]).slice(0, 2);\n };\n}\n\nfunction parse(s) {\n if (s == null) {\n return [null, null];\n }\n\n for (var _len3 = arguments.length, patterns = Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n patterns[_key3 - 1] = arguments[_key3];\n }\n\n for (var _iterator = patterns, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n var _ref3;\n\n if (_isArray) {\n if (_i >= _iterator.length) break;\n _ref3 = _iterator[_i++];\n } else {\n _i = _iterator.next();\n if (_i.done) break;\n _ref3 = _i.value;\n }\n\n var _ref2 = _ref3;\n var regex = _ref2[0];\n var extractor = _ref2[1];\n\n var m = regex.exec(s);\n if (m) {\n return extractor(m);\n }\n }\n return [null, null];\n}\n\nfunction simpleParse() {\n for (var _len4 = arguments.length, keys = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n keys[_key4] = arguments[_key4];\n }\n\n return function (match, cursor) {\n var ret = {};\n var i = void 0;\n\n for (i = 0; i < keys.length; i++) {\n ret[keys[i]] = parseInt(match[cursor + i]);\n }\n return [ret, null, cursor + i];\n };\n}\n\n// ISO and SQL parsing\nvar offsetRegex = /(?:(Z)|([+-]\\d\\d)(?::?(\\d\\d))?)/,\n isoTimeBaseRegex = /(\\d\\d)(?::?(\\d\\d)(?::?(\\d\\d)(?:[.,](\\d{1,9}))?)?)?/,\n isoTimeRegex = RegExp('' + isoTimeBaseRegex.source + offsetRegex.source + '?'),\n isoTimeExtensionRegex = RegExp('(?:T' + isoTimeRegex.source + ')?'),\n isoYmdRegex = /([+-]\\d{6}|\\d{4})(?:-?(\\d\\d)(?:-?(\\d\\d))?)?/,\n isoWeekRegex = /(\\d{4})-?W(\\d\\d)-?(\\d)/,\n isoOrdinalRegex = /(\\d{4})-?(\\d{3})/,\n extractISOWeekData = simpleParse('weekYear', 'weekNumber', 'weekDay'),\n extractISOOrdinalData = simpleParse('year', 'ordinal'),\n sqlYmdRegex = /(\\d{4})-(\\d\\d)-(\\d\\d)/,\n // dumbed-down version of the ISO one\nsqlTimeRegex = RegExp(isoTimeBaseRegex.source + ' ?(?:' + offsetRegex.source + '|([a-zA-Z_]{1,256}/[a-zA-Z_]{1,256}))?'),\n sqlTimeExtensionRegex = RegExp('(?: ' + sqlTimeRegex.source + ')?');\n\nfunction extractISOYmd(match, cursor) {\n var item = {\n year: parseInt(match[cursor]),\n month: parseInt(match[cursor + 1]) || 1,\n day: parseInt(match[cursor + 2]) || 1\n };\n\n return [item, null, cursor + 3];\n}\n\nfunction extractISOTime(match, cursor) {\n var item = {\n hour: parseInt(match[cursor]) || 0,\n minute: parseInt(match[cursor + 1]) || 0,\n second: parseInt(match[cursor + 2]) || 0,\n millisecond: parseMillis(match[cursor + 3])\n };\n\n return [item, null, cursor + 4];\n}\n\nfunction extractISOOffset(match, cursor) {\n var local = !match[cursor] && !match[cursor + 1],\n fullOffset = signedOffset(match[cursor + 1], match[cursor + 2]),\n zone = local ? null : FixedOffsetZone.instance(fullOffset);\n return [{}, zone, cursor + 3];\n}\n\nfunction extractIANAZone(match, cursor) {\n var zone = match[cursor] ? new IANAZone(match[cursor]) : null;\n return [{}, zone, cursor + 1];\n}\n\n// ISO duration parsing\n\nvar isoDuration = /^P(?:(?:(\\d{1,9})Y)?(?:(\\d{1,9})M)?(?:(\\d{1,9})D)?(?:T(?:(\\d{1,9})H)?(?:(\\d{1,9})M)?(?:(\\d{1,9})(?:[.,](\\d{1,9}))?S)?)?|(\\d{1,9})W)$/;\n\nfunction extractISODuration(match) {\n var yearStr = match[1],\n monthStr = match[2],\n dayStr = match[3],\n hourStr = match[4],\n minuteStr = match[5],\n secondStr = match[6],\n millisecondsStr = match[7],\n weekStr = match[8];\n\n\n return [{\n years: parseInt(yearStr),\n months: parseInt(monthStr),\n weeks: parseInt(weekStr),\n days: parseInt(dayStr),\n hours: parseInt(hourStr),\n minutes: parseInt(minuteStr),\n seconds: parseInt(secondStr),\n milliseconds: parseMillis(millisecondsStr)\n }];\n}\n\n// These are a little braindead. EDT *should* tell us that we're in, say, America/New_York\n// and not just that we're in -240 *right now*. But since I don't think these are used that often\n// I'm just going to ignore that\nvar obsOffsets = {\n GMT: 0,\n EDT: -4 * 60,\n EST: -5 * 60,\n CDT: -5 * 60,\n CST: -6 * 60,\n MDT: -6 * 60,\n MST: -7 * 60,\n PDT: -7 * 60,\n PST: -8 * 60\n};\n\nfunction fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {\n var result = {\n year: yearStr.length === 2 ? untruncateYear(parseInt(yearStr)) : parseInt(yearStr),\n month: monthStr.length === 2 ? parseInt(monthStr, 10) : monthsShort.indexOf(monthStr) + 1,\n day: parseInt(dayStr),\n hour: parseInt(hourStr),\n minute: parseInt(minuteStr)\n };\n\n if (secondStr) result.second = parseInt(secondStr);\n if (weekdayStr) {\n result.weekday = weekdayStr.length > 3 ? weekdaysLong.indexOf(weekdayStr) + 1 : weekdaysShort.indexOf(weekdayStr) + 1;\n }\n\n return result;\n}\n\n// RFC 2822/5322\nvar rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\\d\\d)(\\d\\d)))$/;\n\nfunction extractRFC2822(match) {\n var weekdayStr = match[1],\n dayStr = match[2],\n monthStr = match[3],\n yearStr = match[4],\n hourStr = match[5],\n minuteStr = match[6],\n secondStr = match[7],\n obsOffset = match[8],\n milOffset = match[9],\n offHourStr = match[10],\n offMinuteStr = match[11],\n result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n\n\n var offset = void 0;\n if (obsOffset) {\n offset = obsOffsets[obsOffset];\n } else if (milOffset) {\n offset = 0;\n } else {\n offset = signedOffset(offHourStr, offMinuteStr);\n }\n\n return [result, new FixedOffsetZone(offset)];\n}\n\nfunction preprocessRFC2822(s) {\n // Remove comments and folding whitespace and replace multiple-spaces with a single space\n return s.replace(/\\([^)]*\\)|[\\n\\t]/g, ' ').replace(/(\\s\\s+)/g, ' ').trim();\n}\n\n// http date\n\nvar rfc1123 = /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\\d\\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\\d{4}) (\\d\\d):(\\d\\d):(\\d\\d) GMT$/,\n rfc850 = /^(Monday|Tuesday|Wedsday|Thursday|Friday|Saturday|Sunday), (\\d\\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\\d\\d) (\\d\\d):(\\d\\d):(\\d\\d) GMT$/,\n ascii = /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \\d|\\d\\d) (\\d\\d):(\\d\\d):(\\d\\d) (\\d{4})$/;\n\nfunction extractRFC1123Or850(match) {\n var weekdayStr = match[1],\n dayStr = match[2],\n monthStr = match[3],\n yearStr = match[4],\n hourStr = match[5],\n minuteStr = match[6],\n secondStr = match[7],\n result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n\n return [result, FixedOffsetZone.utcInstance];\n}\n\nfunction extractASCII(match) {\n var weekdayStr = match[1],\n monthStr = match[2],\n dayStr = match[3],\n hourStr = match[4],\n minuteStr = match[5],\n secondStr = match[6],\n yearStr = match[7],\n result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n\n return [result, FixedOffsetZone.utcInstance];\n}\n\n/**\n * @private\n */\n\nfunction parseISODate(s) {\n return parse(s, [combineRegexes(isoYmdRegex, isoTimeExtensionRegex), combineExtractors(extractISOYmd, extractISOTime, extractISOOffset)], [combineRegexes(isoWeekRegex, isoTimeExtensionRegex), combineExtractors(extractISOWeekData, extractISOTime, extractISOOffset)], [combineRegexes(isoOrdinalRegex, isoTimeExtensionRegex), combineExtractors(extractISOOrdinalData, extractISOTime)], [combineRegexes(isoTimeRegex), combineExtractors(extractISOTime, extractISOOffset)]);\n}\n\nfunction parseRFC2822Date(s) {\n return parse(preprocessRFC2822(s), [rfc2822, extractRFC2822]);\n}\n\nfunction parseHTTPDate(s) {\n return parse(s, [rfc1123, extractRFC1123Or850], [rfc850, extractRFC1123Or850], [ascii, extractASCII]);\n}\n\nfunction parseISODuration(s) {\n return parse(s, [isoDuration, extractISODuration]);\n}\n\nfunction parseSQL(s) {\n return parse(s, [combineRegexes(sqlYmdRegex, sqlTimeExtensionRegex), combineExtractors(extractISOYmd, extractISOTime, extractISOOffset, extractIANAZone)], [combineRegexes(sqlTimeRegex), combineExtractors(extractISOTime, extractISOOffset, extractIANAZone)]);\n}\n\nvar INVALID = 'Invalid Duration',\n UNPARSABLE = 'unparsable';\n\n// unit conversion constants\nvar lowOrderMatrix = {\n weeks: {\n days: 7,\n hours: 7 * 24,\n minutes: 7 * 24 * 60,\n seconds: 7 * 24 * 60 * 60,\n milliseconds: 7 * 24 * 60 * 60 * 1000\n },\n days: {\n hours: 24,\n minutes: 24 * 60,\n seconds: 24 * 60 * 60,\n milliseconds: 24 * 60 * 60 * 1000\n },\n hours: { minutes: 60, seconds: 60 * 60, milliseconds: 60 * 60 * 1000 },\n minutes: { seconds: 60, milliseconds: 60 * 1000 },\n seconds: { milliseconds: 1000 }\n},\n casualMatrix = Object.assign({\n years: {\n months: 12,\n weeks: 52,\n days: 365,\n hours: 365 * 24,\n minutes: 365 * 24 * 60,\n seconds: 365 * 24 * 60 * 60,\n milliseconds: 365 * 24 * 60 * 60 * 1000\n },\n quarters: {\n months: 3,\n weeks: 13,\n days: 91,\n hours: 91 * 24,\n minutes: 91 * 24 * 60,\n milliseconds: 91 * 24 * 60 * 60 * 1000\n },\n months: {\n weeks: 4,\n days: 30,\n hours: 30 * 24,\n minutes: 30 * 24 * 60,\n seconds: 30 * 24 * 60 * 60,\n milliseconds: 30 * 24 * 60 * 60 * 1000\n }\n}, lowOrderMatrix),\n daysInYearAccurate = 146097.0 / 400,\n daysInMonthAccurate = 146097.0 / 4800,\n accurateMatrix = Object.assign({\n years: {\n months: 12,\n weeks: daysInYearAccurate / 7,\n days: daysInYearAccurate,\n hours: daysInYearAccurate * 24,\n minutes: daysInYearAccurate * 24 * 60,\n seconds: daysInYearAccurate * 24 * 60 * 60,\n milliseconds: daysInYearAccurate * 24 * 60 * 60 * 1000\n },\n quarters: {\n months: 3,\n weeks: daysInYearAccurate / 28,\n days: daysInYearAccurate / 4,\n hours: daysInYearAccurate * 24 / 4,\n minutes: daysInYearAccurate * 24 * 60 / 4,\n seconds: daysInYearAccurate * 24 * 60 * 60 / 4,\n milliseconds: daysInYearAccurate * 24 * 60 * 60 * 1000 / 4\n },\n months: {\n weeks: daysInMonthAccurate / 7,\n days: daysInMonthAccurate,\n hours: daysInMonthAccurate * 24,\n minutes: daysInMonthAccurate * 24 * 60,\n seconds: daysInMonthAccurate * 24 * 60 * 60,\n milliseconds: daysInMonthAccurate * 24 * 60 * 60 * 1000\n }\n}, lowOrderMatrix);\n\n// units ordered by size\nvar orderedUnits = ['years', 'quarters', 'months', 'weeks', 'days', 'hours', 'minutes', 'seconds', 'milliseconds'];\n\nvar reverseUnits = orderedUnits.slice(0).reverse();\n\n// clone really means \"create another instance just like this one, but with these changes\"\nfunction clone(dur, alts) {\n var clear = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n // deep merge for vals\n var conf = {\n values: clear ? alts.values : Object.assign({}, dur.values, alts.values || {}),\n loc: dur.loc.clone(alts.loc),\n conversionAccuracy: alts.conversionAccuracy || dur.conversionAccuracy\n };\n return new Duration(conf);\n}\n\n// some functions really care about the absolute value of a duration, so combined with\n// normalize() this tells us whether this duration is positive or negative\nfunction isHighOrderNegative(obj) {\n // only rule is that the highest-order part must be non-negative\n for (var _iterator = orderedUnits, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n var _ref;\n\n if (_isArray) {\n if (_i >= _iterator.length) break;\n _ref = _iterator[_i++];\n } else {\n _i = _iterator.next();\n if (_i.done) break;\n _ref = _i.value;\n }\n\n var k = _ref;\n\n if (obj[k]) return obj[k] < 0;\n }\n return false;\n}\n\n// NB: mutates parameters\nfunction convert(matrix, fromMap, fromUnit, toMap, toUnit) {\n var conv = matrix[toUnit][fromUnit],\n added = Math.floor(fromMap[fromUnit] / conv);\n toMap[toUnit] += added;\n fromMap[fromUnit] -= added * conv;\n}\n\n// NB: mutates parameters\nfunction normalizeValues(matrix, vals) {\n reverseUnits.reduce(function (previous, current) {\n if (!isUndefined(vals[current])) {\n if (previous) {\n convert(matrix, vals, previous, vals, current);\n }\n return current;\n } else {\n return previous;\n }\n }, null);\n}\n\n/**\n * @private\n */\nfunction friendlyDuration(duration) {\n if (isNumber(duration)) {\n return Duration.fromMillis(duration);\n } else if (duration instanceof Duration) {\n return duration;\n } else if (duration instanceof Object) {\n return Duration.fromObject(duration);\n } else {\n throw new InvalidArgumentError('Unknown duration argument');\n }\n}\n\n/**\n * A Duration object represents a period of time, like \"2 months\" or \"1 day, 1 hour\". Conceptually, it's just a map of units to their quantities, accompanied by some additional configuration and methods for creating, parsing, interrogating, transforming, and formatting them. They can be used on their own or in conjunction with other Luxon types; for example, you can use {@link DateTime.plus} to add a Duration object to a DateTime, producing another DateTime.\n *\n * Here is a brief overview of commonly used methods and getters in Duration:\n *\n * * **Creation** To create a Duration, use {@link Duration.fromMillis}, {@link Duration.fromObject}, or {@link Duration.fromISO}.\n * * **Unit values** See the {@link years}, {@link months}, {@link weeks}, {@link days}, {@link hours}, {@link minutes}, {@link seconds}, {@link milliseconds} accessors.\n * * **Configuration** See {@link locale} and {@link numberingSystem} accessors.\n * * **Transformation** To create new Durations out of old ones use {@link plus}, {@link minus}, {@link normalize}, {@link set}, {@link reconfigure}, {@link shiftTo}, and {@link negate}.\n * * **Output** To convert the Duration into other representations, see {@link as}, {@link toISO}, {@link toFormat}, and {@link toJSON}\n *\n * There's are more methods documented below. In addition, for more information on subtler topics like internationalization and validity, see the external documentation.\n */\n\nvar Duration = function () {\n /**\n * @private\n */\n function Duration(config) {\n classCallCheck(this, Duration);\n\n var accurate = config.conversionAccuracy === 'longterm' || false;\n /**\n * @access private\n */\n this.values = config.values;\n /**\n * @access private\n */\n this.loc = config.loc || Locale.create();\n /**\n * @access private\n */\n this.conversionAccuracy = accurate ? 'longterm' : 'casual';\n /**\n * @access private\n */\n this.invalid = config.invalidReason || null;\n /**\n * @access private\n */\n this.matrix = accurate ? accurateMatrix : casualMatrix;\n }\n\n /**\n * Create Duration from a number of milliseconds.\n * @param {number} count of milliseconds\n * @param {Object} opts - options for parsing\n * @param {string} [opts.locale='en-US'] - the locale to use\n * @param {string} opts.numberingSystem - the numbering system to use\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @return {Duration}\n */\n\n\n Duration.fromMillis = function fromMillis(count, opts) {\n return Duration.fromObject(Object.assign({ milliseconds: count }, opts));\n };\n\n /**\n * Create an Duration from a Javascript object with keys like 'years' and 'hours'.\n * @param {Object} obj - the object to create the DateTime from\n * @param {number} obj.years\n * @param {number} obj.quarters\n * @param {number} obj.months\n * @param {number} obj.weeks\n * @param {number} obj.days\n * @param {number} obj.hours\n * @param {number} obj.minutes\n * @param {number} obj.seconds\n * @param {number} obj.milliseconds\n * @param {string} [obj.locale='en-US'] - the locale to use\n * @param {string} obj.numberingSystem - the numbering system to use\n * @param {string} [obj.conversionAccuracy='casual'] - the conversion system to use\n * @return {Duration}\n */\n\n\n Duration.fromObject = function fromObject(obj) {\n return new Duration({\n values: normalizeObject(obj, Duration.normalizeUnit, true),\n loc: Locale.fromObject(obj),\n conversionAccuracy: obj.conversionAccuracy\n });\n };\n\n /**\n * Create a Duration from an ISO 8601 duration string.\n * @param {string} text - text to parse\n * @param {Object} opts - options for parsing\n * @param {string} [opts.locale='en-US'] - the locale to use\n * @param {string} opts.numberingSystem - the numbering system to use\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @see https://en.wikipedia.org/wiki/ISO_8601#Durations\n * @example Duration.fromISO('P3Y6M4DT12H30M5S').toObject() //=> { years: 3, months: 6, day: 4, hours: 12, minutes: 30, seconds: 5 }\n * @example Duration.fromISO('PT23H').toObject() //=> { hours: 23 }\n * @example Duration.fromISO('P5Y3M').toObject() //=> { years: 5, months: 3 }\n * @return {Duration}\n */\n\n\n Duration.fromISO = function fromISO(text, opts) {\n var _parseISODuration = parseISODuration(text),\n parsed = _parseISODuration[0];\n\n if (parsed) {\n var obj = Object.assign(parsed, opts);\n return Duration.fromObject(obj);\n } else {\n return Duration.invalid(UNPARSABLE);\n }\n };\n\n /**\n * Create an invalid Duration.\n * @param {string} reason - reason this is invalid\n * @return {Duration}\n */\n\n\n Duration.invalid = function invalid(reason) {\n if (!reason) {\n throw new InvalidArgumentError('need to specify a reason the Duration is invalid');\n }\n if (Settings.throwOnInvalid) {\n throw new InvalidDurationError(reason);\n } else {\n return new Duration({ invalidReason: reason });\n }\n };\n\n /**\n * @private\n */\n\n\n Duration.normalizeUnit = function normalizeUnit(unit) {\n var ignoreUnknown = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var normalized = {\n year: 'years',\n years: 'years',\n quarter: 'quarters',\n quarters: 'quarters',\n month: 'months',\n months: 'months',\n week: 'weeks',\n weeks: 'weeks',\n day: 'days',\n days: 'days',\n hour: 'hours',\n hours: 'hours',\n minute: 'minutes',\n minutes: 'minutes',\n second: 'seconds',\n seconds: 'seconds',\n millisecond: 'milliseconds',\n milliseconds: 'milliseconds'\n }[unit ? unit.toLowerCase() : unit];\n\n if (!ignoreUnknown && !normalized) throw new InvalidUnitError(unit);\n\n return normalized;\n };\n\n /**\n * Get the locale of a Duration, such 'en-GB'\n * @type {string}\n */\n\n\n /**\n * Returns a string representation of this Duration formatted according to the specified format string.\n * @param {string} fmt - the format string\n * @param {Object} opts - options\n * @param {boolean} opts.round - round numerical values\n * @return {string}\n */\n Duration.prototype.toFormat = function toFormat(fmt) {\n var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n return this.isValid ? Formatter.create(this.loc, opts).formatDurationFromString(this, fmt) : INVALID;\n };\n\n /**\n * Returns a Javascript object with this Duration's values.\n * @param opts - options for generating the object\n * @param {boolean} [opts.includeConfig=false] - include configuration attributes in the output\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toObject() //=> { years: 1, days: 6, seconds: 2 }\n * @return {Object}\n */\n\n\n Duration.prototype.toObject = function toObject() {\n var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (!this.isValid) return {};\n\n var base = Object.assign({}, this.values);\n\n if (opts.includeConfig) {\n base.conversionAccuracy = this.conversionAccuracy;\n base.numberingSystem = this.loc.numberingSystem;\n base.locale = this.loc.locale;\n }\n return base;\n };\n\n /**\n * Returns an ISO 8601-compliant string representation of this Duration.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Durations\n * @example Duration.fromObject({ years: 3, seconds: 45 }).toISO() //=> 'P3YT45S'\n * @example Duration.fromObject({ months: 4, seconds: 45 }).toISO() //=> 'P4MT45S'\n * @example Duration.fromObject({ months: 5 }).toISO() //=> 'P5M'\n * @example Duration.fromObject({ minutes: 5 }).toISO() //=> 'PT5M'\n * @return {string}\n */\n\n\n Duration.prototype.toISO = function toISO() {\n // we could use the formatter, but this is an easier way to get the minimum string\n if (!this.isValid) return null;\n\n var s = 'P',\n norm = this.normalize();\n\n // ISO durations are always positive, so take the absolute value\n norm = isHighOrderNegative(norm.values) ? norm.negate() : norm;\n\n if (norm.years > 0) s += norm.years + 'Y';\n if (norm.months > 0 || norm.quarters > 0) s += norm.months + norm.quarters * 3 + 'M';\n if (norm.days > 0 || norm.weeks > 0) s += norm.days + norm.weeks * 7 + 'D';\n if (norm.hours > 0 || norm.minutes > 0 || norm.seconds > 0 || norm.milliseconds > 0) s += 'T';\n if (norm.hours > 0) s += norm.hours + 'H';\n if (norm.minutes > 0) s += norm.minutes + 'M';\n if (norm.seconds > 0) s += norm.seconds + 'S';\n return s;\n };\n\n /**\n * Returns an ISO 8601 representation of this Duration appropriate for use in JSON.\n * @return {string}\n */\n\n\n Duration.prototype.toJSON = function toJSON() {\n return this.toISO();\n };\n\n /**\n * Returns an ISO 8601 representation of this Duration appropriate for use in debugging.\n * @return {string}\n */\n\n\n Duration.prototype.toString = function toString() {\n return this.toISO();\n };\n\n /**\n * Returns a string representation of this Duration appropriate for the REPL.\n * @return {string}\n */\n\n\n Duration.prototype.inspect = function inspect() {\n if (this.isValid) {\n var valsInspect = JSON.stringify(this.toObject());\n return 'Duration {\\n values: ' + valsInspect + ',\\n locale: ' + this.locale + ',\\n conversionAccuracy: ' + this.conversionAccuracy + ' }';\n } else {\n return 'Duration { Invalid, reason: ' + this.invalidReason + ' }';\n }\n };\n\n /**\n * Make this Duration longer by the specified amount. Return a newly-constructed Duration.\n * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n * @return {Duration}\n */\n\n\n Duration.prototype.plus = function plus(duration) {\n if (!this.isValid) return this;\n\n var dur = friendlyDuration(duration),\n result = {};\n\n for (var _iterator2 = orderedUnits, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {\n var _ref2;\n\n if (_isArray2) {\n if (_i2 >= _iterator2.length) break;\n _ref2 = _iterator2[_i2++];\n } else {\n _i2 = _iterator2.next();\n if (_i2.done) break;\n _ref2 = _i2.value;\n }\n\n var k = _ref2;\n\n var val = dur.get(k) + this.get(k);\n if (val !== 0) {\n result[k] = val;\n }\n }\n\n return clone(this, { values: result }, true);\n };\n\n /**\n * Make this Duration shorter by the specified amount. Return a newly-constructed Duration.\n * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n * @return {Duration}\n */\n\n\n Duration.prototype.minus = function minus(duration) {\n if (!this.isValid) return this;\n\n var dur = friendlyDuration(duration);\n return this.plus(dur.negate());\n };\n\n /**\n * Get the value of unit.\n * @param {string} unit - a unit such as 'minute' or 'day'\n * @example Duration.fromObject({years: 2, days: 3}).years //=> 2\n * @example Duration.fromObject({years: 2, days: 3}).months //=> 0\n * @example Duration.fromObject({years: 2, days: 3}).days //=> 3\n * @return {number}\n */\n\n\n Duration.prototype.get = function get$$1(unit) {\n return this[Duration.normalizeUnit(unit)];\n };\n\n /**\n * \"Set\" the values of specified units. Return a newly-constructed Duration.\n * @param {Object} values - a mapping of units to numbers\n * @example dur.set({ years: 2017 })\n * @example dur.set({ hours: 8, minutes: 30 })\n * @return {Duration}\n */\n\n\n Duration.prototype.set = function set$$1(values) {\n var mixed = Object.assign(this.values, normalizeObject(values, Duration.normalizeUnit));\n return clone(this, { values: mixed });\n };\n\n /**\n * \"Set\" the locale and/or numberingSystem. Returns a newly-constructed Duration.\n * @example dur.reconfigure({ locale: 'en-GB' })\n * @return {Duration}\n */\n\n\n Duration.prototype.reconfigure = function reconfigure() {\n var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n locale = _ref3.locale,\n numberingSystem = _ref3.numberingSystem,\n conversionAccuracy = _ref3.conversionAccuracy;\n\n var loc = this.loc.clone({ locale: locale, numberingSystem: numberingSystem }),\n opts = { loc: loc };\n\n if (conversionAccuracy) {\n opts.conversionAccuracy = conversionAccuracy;\n }\n\n return clone(this, opts);\n };\n\n /**\n * Return the length of the duration in the specified unit.\n * @param {string} unit - a unit such as 'minutes' or 'days'\n * @example Duration.fromObject({years: 1}).as('days') //=> 365\n * @example Duration.fromObject({years: 1}).as('months') //=> 12\n * @example Duration.fromObject({hours: 60}).as('days') //=> 2.5\n * @return {number}\n */\n\n\n Duration.prototype.as = function as(unit) {\n return this.isValid ? this.shiftTo(unit).get(unit) : NaN;\n };\n\n /**\n * Reduce this Duration to its canonical representation in its current units.\n * @example Duration.fromObject({ years: 2, days: 5000 }).normalize().toObject() //=> { years: 15, days: 255 }\n * @example Duration.fromObject({ hours: 12, minutes: -45 }).normalize().toObject() //=> { hours: 11, minutes: 15 }\n * @return {Duration}\n */\n\n\n Duration.prototype.normalize = function normalize() {\n if (!this.isValid) return this;\n\n var neg = isHighOrderNegative(this.values),\n vals = (neg ? this.negate() : this).toObject();\n normalizeValues(this.matrix, vals);\n var dur = Duration.fromObject(vals);\n return neg ? dur.negate() : dur;\n };\n\n /**\n * Convert this Duration into its representation in a different set of units.\n * @example Duration.fromObject({ hours: 1, seconds: 30 }).shiftTo('minutes', 'milliseconds').toObject() //=> { minutes: 60, milliseconds: 30000 }\n * @return {Duration}\n */\n\n\n Duration.prototype.shiftTo = function shiftTo() {\n for (var _len = arguments.length, units = Array(_len), _key = 0; _key < _len; _key++) {\n units[_key] = arguments[_key];\n }\n\n if (!this.isValid) return this;\n\n if (units.length === 0) {\n return this;\n }\n\n units = units.map(function (u) {\n return Duration.normalizeUnit(u);\n });\n\n var built = {},\n accumulated = {},\n vals = this.toObject();\n var lastUnit = void 0;\n\n normalizeValues(this.matrix, vals);\n\n for (var _iterator3 = orderedUnits, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {\n var _ref4;\n\n if (_isArray3) {\n if (_i3 >= _iterator3.length) break;\n _ref4 = _iterator3[_i3++];\n } else {\n _i3 = _iterator3.next();\n if (_i3.done) break;\n _ref4 = _i3.value;\n }\n\n var k = _ref4;\n\n if (units.indexOf(k) >= 0) {\n lastUnit = k;\n\n var own = 0;\n\n // anything we haven't boiled down yet should get boiled to this unit\n for (var ak in accumulated) {\n if (accumulated.hasOwnProperty(ak)) {\n own += this.matrix[ak][k] * accumulated[ak];\n accumulated[ak] = 0;\n }\n }\n\n // plus anything that's already in this unit\n if (isNumber(vals[k])) {\n own += vals[k];\n }\n\n var i = Math.trunc(own);\n built[k] = i;\n accumulated[k] = own - i;\n\n // plus anything further down the chain that should be rolled up in to this\n for (var down in vals) {\n if (orderedUnits.indexOf(down) > orderedUnits.indexOf(k)) {\n convert(this.matrix, vals, down, built, k);\n }\n }\n // otherwise, keep it in the wings to boil it later\n } else if (isNumber(vals[k])) {\n accumulated[k] = vals[k];\n }\n }\n\n // anything leftover becomes the decimal for the last unit\n if (lastUnit) {\n for (var key in accumulated) {\n if (accumulated.hasOwnProperty(key)) {\n if (accumulated[key] > 0) {\n built[lastUnit] += key === lastUnit ? accumulated[key] : accumulated[key] / this.matrix[lastUnit][key];\n }\n }\n }\n }\n return clone(this, { values: built }, true);\n };\n\n /**\n * Return the negative of this Duration.\n * @example Duration.fromObject({ hours: 1, seconds: 30 }).negate().toObject() //=> { hours: -1, seconds: -30 }\n * @return {Duration}\n */\n\n\n Duration.prototype.negate = function negate() {\n if (!this.isValid) return this;\n var negated = {};\n for (var _iterator4 = Object.keys(this.values), _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : _iterator4[Symbol.iterator]();;) {\n var _ref5;\n\n if (_isArray4) {\n if (_i4 >= _iterator4.length) break;\n _ref5 = _iterator4[_i4++];\n } else {\n _i4 = _iterator4.next();\n if (_i4.done) break;\n _ref5 = _i4.value;\n }\n\n var k = _ref5;\n\n negated[k] = -this.values[k];\n }\n return clone(this, { values: negated }, true);\n };\n\n /**\n * Get the years.\n * @type {number}\n */\n\n\n /**\n * Equality check\n * Two Durations are equal iff they have the same units and the same values for each unit.\n * @param {Duration} other\n * @return {boolean}\n */\n Duration.prototype.equals = function equals(other) {\n if (!this.isValid || !other.isValid) {\n return false;\n }\n\n if (!this.loc.equals(other.loc)) {\n return false;\n }\n\n for (var _iterator5 = orderedUnits, _isArray5 = Array.isArray(_iterator5), _i5 = 0, _iterator5 = _isArray5 ? _iterator5 : _iterator5[Symbol.iterator]();;) {\n var _ref6;\n\n if (_isArray5) {\n if (_i5 >= _iterator5.length) break;\n _ref6 = _iterator5[_i5++];\n } else {\n _i5 = _iterator5.next();\n if (_i5.done) break;\n _ref6 = _i5.value;\n }\n\n var u = _ref6;\n\n if (this.values[u] !== other.values[u]) {\n return false;\n }\n }\n return true;\n };\n\n createClass(Duration, [{\n key: 'locale',\n get: function get$$1() {\n return this.isValid ? this.loc.locale : null;\n }\n\n /**\n * Get the numbering system of a Duration, such 'beng'. The numbering system is used when formatting the Duration\n *\n * @type {string}\n */\n\n }, {\n key: 'numberingSystem',\n get: function get$$1() {\n return this.isValid ? this.loc.numberingSystem : null;\n }\n }, {\n key: 'years',\n get: function get$$1() {\n return this.isValid ? this.values.years || 0 : NaN;\n }\n\n /**\n * Get the quarters.\n * @type {number}\n */\n\n }, {\n key: 'quarters',\n get: function get$$1() {\n return this.isValid ? this.values.quarters || 0 : NaN;\n }\n\n /**\n * Get the months.\n * @type {number}\n */\n\n }, {\n key: 'months',\n get: function get$$1() {\n return this.isValid ? this.values.months || 0 : NaN;\n }\n\n /**\n * Get the weeks\n * @type {number}\n */\n\n }, {\n key: 'weeks',\n get: function get$$1() {\n return this.isValid ? this.values.weeks || 0 : NaN;\n }\n\n /**\n * Get the days.\n * @type {number}\n */\n\n }, {\n key: 'days',\n get: function get$$1() {\n return this.isValid ? this.values.days || 0 : NaN;\n }\n\n /**\n * Get the hours.\n * @type {number}\n */\n\n }, {\n key: 'hours',\n get: function get$$1() {\n return this.isValid ? this.values.hours || 0 : NaN;\n }\n\n /**\n * Get the minutes.\n * @type {number}\n */\n\n }, {\n key: 'minutes',\n get: function get$$1() {\n return this.isValid ? this.values.minutes || 0 : NaN;\n }\n\n /**\n * Get the seconds.\n * @return {number}\n */\n\n }, {\n key: 'seconds',\n get: function get$$1() {\n return this.isValid ? this.values.seconds || 0 : NaN;\n }\n\n /**\n * Get the milliseconds.\n * @return {number}\n */\n\n }, {\n key: 'milliseconds',\n get: function get$$1() {\n return this.isValid ? this.values.milliseconds || 0 : NaN;\n }\n\n /**\n * Returns whether the Duration is invalid. Invalid durations are returned by diff operations\n * on invalid DateTimes or Intervals.\n * @return {boolean}\n */\n\n }, {\n key: 'isValid',\n get: function get$$1() {\n return this.invalidReason === null;\n }\n\n /**\n * Returns an explanation of why this Duration became invalid, or null if the Duration is valid\n * @return {string}\n */\n\n }, {\n key: 'invalidReason',\n get: function get$$1() {\n return this.invalid;\n }\n }]);\n return Duration;\n}();\n\nvar INVALID$1 = 'Invalid Interval';\n\n// checks if the start is equal to or before the end\nfunction validateStartEnd(start, end) {\n return !!start && !!end && start.isValid && end.isValid && start <= end;\n}\n\n/**\n * An Interval object represents a half-open interval of time, where each endpoint is a {@link DateTime}. Conceptually, it's a container for those two endpoints, accompanied by methods for creating, parsing, interrogating, comparing, transforming, and formatting them.\n *\n * Here is a brief overview of the most commonly used methods and getters in Interval:\n *\n * * **Creation** To create an Interval, use {@link fromDateTimes}, {@link after}, {@link before}, or {@link fromISO}.\n * * **Accessors** Use {@link start} and {@link end} to get the start and end.\n * * **Interrogation** To analyze the Interval, use {@link count}, {@link length}, {@link hasSame}, {@link contains}, {@link isAfter}, or {@link isBefore}.\n * * **Transformation** To create other Intervals out of this one, use {@link set}, {@link splitAt}, {@link splitBy}, {@link divideEqually}, {@link merge}, {@link xor}, {@link union}, {@link intersection}, or {@link difference}.\n * * **Comparison** To compare this Interval to another one, use {@link equals}, {@link overlaps}, {@link abutsStart}, {@link abutsEnd}, {@link engulfs}\n * * **Output*** To convert the Interval into other representations, see {@link toString}, {@link toISO}, {@link toFormat}, and {@link toDuration}.\n */\n\nvar Interval = function () {\n /**\n * @private\n */\n function Interval(config) {\n classCallCheck(this, Interval);\n\n /**\n * @access private\n */\n this.s = config.start;\n /**\n * @access private\n */\n this.e = config.end;\n /**\n * @access private\n */\n this.invalid = config.invalidReason || null;\n }\n\n /**\n * Create an invalid Interval.\n * @return {Interval}\n */\n\n\n Interval.invalid = function invalid(reason) {\n if (!reason) {\n throw new InvalidArgumentError('need to specify a reason the DateTime is invalid');\n }\n if (Settings.throwOnInvalid) {\n throw new InvalidIntervalError(reason);\n } else {\n return new Interval({ invalidReason: reason });\n }\n };\n\n /**\n * Create an Interval from a start DateTime and an end DateTime. Inclusive of the start but not the end.\n * @param {DateTime|Date|Object} start\n * @param {DateTime|Date|Object} end\n * @return {Interval}\n */\n\n\n Interval.fromDateTimes = function fromDateTimes(start, end) {\n var builtStart = friendlyDateTime(start),\n builtEnd = friendlyDateTime(end);\n\n return new Interval({\n start: builtStart,\n end: builtEnd,\n invalidReason: validateStartEnd(builtStart, builtEnd) ? null : 'invalid endpoints'\n });\n };\n\n /**\n * Create an Interval from a start DateTime and a Duration to extend to.\n * @param {DateTime|Date|Object} start\n * @param {Duration|Object|number} duration - the length of the Interval.\n * @return {Interval}\n */\n\n\n Interval.after = function after(start, duration) {\n var dur = friendlyDuration(duration),\n dt = friendlyDateTime(start);\n return Interval.fromDateTimes(dt, dt.plus(dur));\n };\n\n /**\n * Create an Interval from an end DateTime and a Duration to extend backwards to.\n * @param {DateTime|Date|Object} end\n * @param {Duration|Object|number} duration - the length of the Interval.\n * @return {Interval}\n */\n\n\n Interval.before = function before(end, duration) {\n var dur = friendlyDuration(duration),\n dt = friendlyDateTime(end);\n return Interval.fromDateTimes(dt.minus(dur), dt);\n };\n\n /**\n * Create an Interval from an ISO 8601 string\n * @param {string} string - the ISO string to parse\n * @param {Object} opts - options to pass {@see DateTime.fromISO}\n * @return {Interval}\n */\n\n\n Interval.fromISO = function fromISO(string, opts) {\n if (string) {\n var _string$split = string.split(/\\//),\n s = _string$split[0],\n e = _string$split[1];\n\n if (s && e) {\n return Interval.fromDateTimes(DateTime.fromISO(s, opts), DateTime.fromISO(e, opts));\n }\n }\n return Interval.invalid('invalid ISO format');\n };\n\n /**\n * Returns the start of the Interval\n * @type {DateTime}\n */\n\n\n /**\n * Returns the length of the Interval in the specified unit.\n * @param {string} unit - the unit (such as 'hours' or 'days') to return the length in.\n * @return {number}\n */\n Interval.prototype.length = function length() {\n var unit = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'milliseconds';\n\n return this.isValid ? this.toDuration.apply(this, [unit]).get(unit) : NaN;\n };\n\n /**\n * Returns the count of minutes, hours, days, months, or years included in the Interval, even in part.\n * Unlike {@link length} this counts sections of the calendar, not periods of time, e.g. specifying 'day'\n * asks 'what dates are included in this interval?', not 'how many days long is this interval?'\n * @param {string} [unit='milliseconds'] - the unit of time to count.\n * @return {number}\n */\n\n\n Interval.prototype.count = function count() {\n var unit = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'milliseconds';\n\n if (!this.isValid) return NaN;\n var start = this.start.startOf(unit),\n end = this.end.startOf(unit);\n return Math.floor(end.diff(start, unit).get(unit)) + 1;\n };\n\n /**\n * Returns whether this Interval's start and end are both in the same unit of time\n * @param {string} unit - the unit of time to check sameness on\n * @return {boolean}\n */\n\n\n Interval.prototype.hasSame = function hasSame(unit) {\n return this.isValid ? this.e.minus(1).hasSame(this.s, unit) : false;\n };\n\n /**\n * Return whether this Interval has the same start and end DateTimes.\n * @return {boolean}\n */\n\n\n Interval.prototype.isEmpty = function isEmpty() {\n return this.s.valueOf() === this.e.valueOf();\n };\n\n /**\n * Return whether this Interval's start is after the specified DateTime.\n * @param {DateTime} dateTime\n * @return {boolean}\n */\n\n\n Interval.prototype.isAfter = function isAfter(dateTime) {\n if (!this.isValid) return false;\n return this.s > dateTime;\n };\n\n /**\n * Return whether this Interval's end is before the specified DateTime.\n * @param {DateTime} dateTime\n * @return {boolean}\n */\n\n\n Interval.prototype.isBefore = function isBefore(dateTime) {\n if (!this.isValid) return false;\n return this.e <= dateTime;\n };\n\n /**\n * Return whether this Interval contains the specified DateTime.\n * @param {DateTime} dateTime\n * @return {boolean}\n */\n\n\n Interval.prototype.contains = function contains(dateTime) {\n if (!this.isValid) return false;\n return this.s <= dateTime && this.e > dateTime;\n };\n\n /**\n * \"Sets\" the start and/or end dates. Returns a newly-constructed Interval.\n * @param {Object} values - the values to set\n * @param {DateTime} values.start - the starting DateTime\n * @param {DateTime} values.end - the ending DateTime\n * @return {Interval}\n */\n\n\n Interval.prototype.set = function set$$1() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n start = _ref.start,\n end = _ref.end;\n\n if (!this.isValid) return this;\n return Interval.fromDateTimes(start || this.s, end || this.e);\n };\n\n /**\n * Split this Interval at each of the specified DateTimes\n * @param {...[DateTime]} dateTimes - the unit of time to count.\n * @return {[Interval]}\n */\n\n\n Interval.prototype.splitAt = function splitAt() {\n if (!this.isValid) return [];\n\n for (var _len = arguments.length, dateTimes = Array(_len), _key = 0; _key < _len; _key++) {\n dateTimes[_key] = arguments[_key];\n }\n\n var sorted = dateTimes.map(friendlyDateTime).sort(),\n results = [];\n var s = this.s,\n i = 0;\n\n\n while (s < this.e) {\n var added = sorted[i] || this.e,\n next = +added > +this.e ? this.e : added;\n results.push(Interval.fromDateTimes(s, next));\n s = next;\n i += 1;\n }\n\n return results;\n };\n\n /**\n * Split this Interval into smaller Intervals, each of the specified length.\n * Left over time is grouped into a smaller interval\n * @param {Duration|Object|number} duration - The length of each resulting interval.\n * @return {[Interval]}\n */\n\n\n Interval.prototype.splitBy = function splitBy(duration) {\n if (!this.isValid) return [];\n var dur = friendlyDuration(duration),\n results = [];\n var s = this.s,\n added = void 0,\n next = void 0;\n\n\n while (s < this.e) {\n added = s.plus(dur);\n next = +added > +this.e ? this.e : added;\n results.push(Interval.fromDateTimes(s, next));\n s = next;\n }\n\n return results;\n };\n\n /**\n * Split this Interval into the specified number of smaller intervals.\n * @param {number} numberOfParts - The number of Intervals to divide the Interval into.\n * @return {[Interval]}\n */\n\n\n Interval.prototype.divideEqually = function divideEqually(numberOfParts) {\n if (!this.isValid) return [];\n return this.splitBy(this.length() / numberOfParts).slice(0, numberOfParts);\n };\n\n /**\n * Return whether this Interval overlaps with the specified Interval\n * @param {Interval} other\n * @return {boolean}\n */\n\n\n Interval.prototype.overlaps = function overlaps(other) {\n return this.e > other.s && this.s < other.e;\n };\n\n /**\n * Return whether this Interval's end is adjacent to the specified Interval's start.\n * @param {Interval} other\n * @return {boolean}\n */\n\n\n Interval.prototype.abutsStart = function abutsStart(other) {\n if (!this.isValid) return false;\n return +this.e === +other.s;\n };\n\n /**\n * Return whether this Interval's start is adjacent to the specified Interval's end.\n * @param {Interval} other\n * @return {boolean}\n */\n\n\n Interval.prototype.abutsEnd = function abutsEnd(other) {\n if (!this.isValid) return false;\n return +other.e === +this.s;\n };\n\n /**\n * Return whether this Interval engulfs the start and end of the specified Interval.\n * @param {Interval} other\n * @return {boolean}\n */\n\n\n Interval.prototype.engulfs = function engulfs(other) {\n if (!this.isValid) return false;\n return this.s <= other.s && this.e >= other.e;\n };\n\n /**\n * Return whether this Interval has the same start and end as the specified Interval.\n * @param {Interval} other\n * @return {boolean}\n */\n\n\n Interval.prototype.equals = function equals(other) {\n return this.s.equals(other.s) && this.e.equals(other.e);\n };\n\n /**\n * Return an Interval representing the intersection of this Interval and the specified Interval.\n * Specifically, the resulting Interval has the maximum start time and the minimum end time of the two Intervals.\n * Returns null if the intersection is empty, i.e., the intervals don't intersect.\n * @param {Interval} other\n * @return {Interval}\n */\n\n\n Interval.prototype.intersection = function intersection(other) {\n if (!this.isValid) return this;\n var s = this.s > other.s ? this.s : other.s,\n e = this.e < other.e ? this.e : other.e;\n\n if (s > e) {\n return null;\n } else {\n return Interval.fromDateTimes(s, e);\n }\n };\n\n /**\n * Return an Interval representing the union of this Interval and the specified Interval.\n * Specifically, the resulting Interval has the minimum start time and the maximum end time of the two Intervals.\n * @param {Interval} other\n * @return {Interval}\n */\n\n\n Interval.prototype.union = function union(other) {\n if (!this.isValid) return this;\n var s = this.s < other.s ? this.s : other.s,\n e = this.e > other.e ? this.e : other.e;\n return Interval.fromDateTimes(s, e);\n };\n\n /**\n * Merge an array of Intervals into a equivalent minimal set of Intervals.\n * Combines overlapping and adjacent Intervals.\n * @param {[Interval]} intervals\n * @return {[Interval]}\n */\n\n\n Interval.merge = function merge(intervals) {\n var _intervals$sort$reduc = intervals.sort(function (a, b) {\n return a.s - b.s;\n }).reduce(function (_ref2, item) {\n var sofar = _ref2[0],\n current = _ref2[1];\n\n if (!current) {\n return [sofar, item];\n } else if (current.overlaps(item) || current.abutsStart(item)) {\n return [sofar, current.union(item)];\n } else {\n return [sofar.concat([current]), item];\n }\n }, [[], null]),\n found = _intervals$sort$reduc[0],\n final = _intervals$sort$reduc[1];\n\n if (final) {\n found.push(final);\n }\n return found;\n };\n\n /**\n * Return an array of Intervals representing the spans of time that only appear in one of the specified Intervals.\n * @param {[Interval]} intervals\n * @return {[Interval]}\n */\n\n\n Interval.xor = function xor(intervals) {\n var _Array$prototype;\n\n var start = null,\n currentCount = 0;\n var results = [],\n ends = intervals.map(function (i) {\n return [{ time: i.s, type: 's' }, { time: i.e, type: 'e' }];\n }),\n flattened = (_Array$prototype = Array.prototype).concat.apply(_Array$prototype, ends),\n arr = flattened.sort(function (a, b) {\n return a.time - b.time;\n });\n\n for (var _iterator = arr, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n var _ref3;\n\n if (_isArray) {\n if (_i >= _iterator.length) break;\n _ref3 = _iterator[_i++];\n } else {\n _i = _iterator.next();\n if (_i.done) break;\n _ref3 = _i.value;\n }\n\n var i = _ref3;\n\n currentCount += i.type === 's' ? 1 : -1;\n\n if (currentCount === 1) {\n start = i.time;\n } else {\n if (start && +start !== +i.time) {\n results.push(Interval.fromDateTimes(start, i.time));\n }\n\n start = null;\n }\n }\n\n return Interval.merge(results);\n };\n\n /**\n * Return an Interval representing the span of time in this Interval that doesn't overlap with any of the specified Intervals.\n * @param {...Interval} intervals\n * @return {[Interval]}\n */\n\n\n Interval.prototype.difference = function difference() {\n var _this = this;\n\n for (var _len2 = arguments.length, intervals = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n intervals[_key2] = arguments[_key2];\n }\n\n return Interval.xor([this].concat(intervals)).map(function (i) {\n return _this.intersection(i);\n }).filter(function (i) {\n return i && !i.isEmpty();\n });\n };\n\n /**\n * Returns a string representation of this Interval appropriate for debugging.\n * @return {string}\n */\n\n\n Interval.prototype.toString = function toString() {\n if (!this.isValid) return INVALID$1;\n return '[' + this.s.toISO() + ' \\u2013 ' + this.e.toISO() + ')';\n };\n\n /**\n * Returns a string representation of this Interval appropriate for the REPL.\n * @return {string}\n */\n\n\n Interval.prototype.inspect = function inspect() {\n if (this.isValid) {\n return 'Interval {\\n start: ' + this.start.toISO() + ',\\n end: ' + this.end.toISO() + ',\\n zone: ' + this.start.zone.name + ',\\n locale: ' + this.start.locale + ' }';\n } else {\n return 'Interval { Invalid, reason: ' + this.invalidReason + ' }';\n }\n };\n\n /**\n * Returns an ISO 8601-compliant string representation of this Interval.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n * @param {Object} opts - The same options as {@link DateTime.toISO}\n * @return {string}\n */\n\n\n Interval.prototype.toISO = function toISO(opts) {\n if (!this.isValid) return INVALID$1;\n return this.s.toISO(opts) + '/' + this.e.toISO(opts);\n };\n\n /**\n * Returns a string representation of this Interval formatted according to the specified format string.\n * @param {string} dateFormat - the format string. This string formats the start and end time. See {@link DateTime.toFormat} for details.\n * @param {Object} opts - options\n * @param {string} [opts.separator = ' – '] - a separator to place between the start and end representations\n * @return {string}\n */\n\n\n Interval.prototype.toFormat = function toFormat(dateFormat) {\n var _ref4 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref4$separator = _ref4.separator,\n separator = _ref4$separator === undefined ? ' – ' : _ref4$separator;\n\n if (!this.isValid) return INVALID$1;\n return '' + this.s.toFormat(dateFormat) + separator + this.e.toFormat(dateFormat);\n };\n\n /**\n * Return a Duration representing the time spanned by this interval.\n * @param {string|string[]} [unit=['milliseconds']] - the unit or units (such as 'hours' or 'days') to include in the duration.\n * @param {Object} opts - options that affect the creation of the Duration\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @example Interval.fromDateTimes(dt1, dt2).toDuration().toObject() //=> { milliseconds: 88489257 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration('days').toObject() //=> { days: 1.0241812152777778 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes']).toObject() //=> { hours: 24, minutes: 34.82095 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes', 'seconds']).toObject() //=> { hours: 24, minutes: 34, seconds: 49.257 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration('seconds').toObject() //=> { seconds: 88489.257 }\n * @return {Duration}\n */\n\n\n Interval.prototype.toDuration = function toDuration(unit, opts) {\n if (!this.isValid) {\n return Duration.invalid(this.invalidReason);\n }\n return this.e.diff(this.s, unit, opts);\n };\n\n createClass(Interval, [{\n key: 'start',\n get: function get$$1() {\n return this.isValid ? this.s : null;\n }\n\n /**\n * Returns the end of the Interval\n * @type {DateTime}\n */\n\n }, {\n key: 'end',\n get: function get$$1() {\n return this.isValid ? this.e : null;\n }\n\n /**\n * Returns whether this Interval's end is at least its start, i.e. that the Interval isn't 'backwards'.\n * @type {boolean}\n */\n\n }, {\n key: 'isValid',\n get: function get$$1() {\n return this.invalidReason === null;\n }\n\n /**\n * Returns an explanation of why this Interval became invalid, or null if the Interval is valid\n * @type {string}\n */\n\n }, {\n key: 'invalidReason',\n get: function get$$1() {\n return this.invalid;\n }\n }]);\n return Interval;\n}();\n\n/**\n * The Info class contains static methods for retrieving general time and date related data. For example, it has methods for finding out if a time zone has a DST, for listing the months in any supported locale, and for discovering which of Luxon features are available in the current environment.\n */\n\nvar Info = function () {\n function Info() {\n classCallCheck(this, Info);\n }\n\n /**\n * Return whether the specified zone contains a DST.\n * @param {string|Zone} [zone='local'] - Zone to check. Defaults to the environment's local zone.\n * @return {boolean}\n */\n Info.hasDST = function hasDST() {\n var zone = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Settings.defaultZone;\n\n var proto = DateTime.local().setZone(zone).set({ month: 12 });\n\n return !zone.universal && proto.offset !== proto.set({ month: 6 }).offset;\n };\n\n /**\n * Return whether the specified zone is a valid IANA specifier.\n * @param {string} zone - Zone to check\n * @return {boolean}\n */\n\n\n Info.isValidIANAZone = function isValidIANAZone(zone) {\n return !!IANAZone.isValidSpecifier(zone) && IANAZone.isValidZone(zone);\n };\n\n /**\n * Return an array of standalone month names.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n * @param {string} [length='long'] - the length of the month representation, such as \"numeric\", \"2-digit\", \"narrow\", \"short\", \"long\"\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @param {string} [opts.outputCalendar='gregory'] - the calendar\n * @example Info.months()[0] //=> 'January'\n * @example Info.months('short')[0] //=> 'Jan'\n * @example Info.months('numeric')[0] //=> '1'\n * @example Info.months('short', { locale: 'fr-CA' } )[0] //=> 'janv.'\n * @example Info.months('numeric', { locale: 'ar' })[0] //=> '١'\n * @example Info.months('long', { outputCalendar: 'islamic' })[0] //=> 'Rabiʻ I'\n * @return {[string]}\n */\n\n\n Info.months = function months() {\n var length = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'long';\n\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref$locale = _ref.locale,\n locale = _ref$locale === undefined ? null : _ref$locale,\n _ref$numberingSystem = _ref.numberingSystem,\n numberingSystem = _ref$numberingSystem === undefined ? null : _ref$numberingSystem,\n _ref$outputCalendar = _ref.outputCalendar,\n outputCalendar = _ref$outputCalendar === undefined ? 'gregory' : _ref$outputCalendar;\n\n return Locale.create(locale, numberingSystem, outputCalendar).months(length);\n };\n\n /**\n * Return an array of format month names.\n * Format months differ from standalone months in that they're meant to appear next to the day of the month. In some languages, that\n * changes the string.\n * See {@link months}\n * @param {string} [length='long'] - the length of the month representation, such as \"numeric\", \"2-digit\", \"narrow\", \"short\", \"long\"\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @param {string} [opts.outputCalendar='gregory'] - the calendar\n * @return {[string]}\n */\n\n\n Info.monthsFormat = function monthsFormat() {\n var length = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'long';\n\n var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref2$locale = _ref2.locale,\n locale = _ref2$locale === undefined ? null : _ref2$locale,\n _ref2$numberingSystem = _ref2.numberingSystem,\n numberingSystem = _ref2$numberingSystem === undefined ? null : _ref2$numberingSystem,\n _ref2$outputCalendar = _ref2.outputCalendar,\n outputCalendar = _ref2$outputCalendar === undefined ? 'gregory' : _ref2$outputCalendar;\n\n return Locale.create(locale, numberingSystem, outputCalendar).months(length, true);\n };\n\n /**\n * Return an array of standalone week names.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n * @param {string} [length='long'] - the length of the month representation, such as \"narrow\", \"short\", \"long\".\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @example Info.weekdays()[0] //=> 'Monday'\n * @example Info.weekdays('short')[0] //=> 'Mon'\n * @example Info.weekdays('short', { locale: 'fr-CA' })[0] //=> 'lun.'\n * @example Info.weekdays('short', { locale: 'ar' })[0] //=> 'الاثنين'\n * @return {[string]}\n */\n\n\n Info.weekdays = function weekdays() {\n var length = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'long';\n\n var _ref3 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref3$locale = _ref3.locale,\n locale = _ref3$locale === undefined ? null : _ref3$locale,\n _ref3$numberingSystem = _ref3.numberingSystem,\n numberingSystem = _ref3$numberingSystem === undefined ? null : _ref3$numberingSystem;\n\n return Locale.create(locale, numberingSystem, null).weekdays(length);\n };\n\n /**\n * Return an array of format week names.\n * Format weekdays differ from standalone weekdays in that they're meant to appear next to more date information. In some languages, that\n * changes the string.\n * See {@link weekdays}\n * @param {string} [length='long'] - the length of the month representation, such as \"narrow\", \"short\", \"long\".\n * @param {Object} opts - options\n * @param {string} [opts.locale=null] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @return {[string]}\n */\n\n\n Info.weekdaysFormat = function weekdaysFormat() {\n var length = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'long';\n\n var _ref4 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref4$locale = _ref4.locale,\n locale = _ref4$locale === undefined ? null : _ref4$locale,\n _ref4$numberingSystem = _ref4.numberingSystem,\n numberingSystem = _ref4$numberingSystem === undefined ? null : _ref4$numberingSystem;\n\n return Locale.create(locale, numberingSystem, null).weekdays(length, true);\n };\n\n /**\n * Return an array of meridiems.\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @example Info.meridiems() //=> [ 'AM', 'PM' ]\n * @example Info.meridiems({ locale: 'de' }) //=> [ 'vorm.', 'nachm.' ]\n * @return {[string]}\n */\n\n\n Info.meridiems = function meridiems() {\n var _ref5 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref5$locale = _ref5.locale,\n locale = _ref5$locale === undefined ? null : _ref5$locale;\n\n return Locale.create(locale).meridiems();\n };\n\n /**\n * Return an array of eras, such as ['BC', 'AD']. The locale can be specified, but the calendar system is always Gregorian.\n * @param {string} [length='short'] - the length of the era representation, such as \"short\" or \"long\".\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @example Info.eras() //=> [ 'BC', 'AD' ]\n * @example Info.eras('long') //=> [ 'Before Christ', 'Anno Domini' ]\n * @example Info.eras('long', { locale: 'fr' }) //=> [ 'avant Jésus-Christ', 'après Jésus-Christ' ]\n * @return {[string]}\n */\n\n\n Info.eras = function eras() {\n var length = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'short';\n\n var _ref6 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref6$locale = _ref6.locale,\n locale = _ref6$locale === undefined ? null : _ref6$locale;\n\n return Locale.create(locale, null, 'gregory').eras(length);\n };\n\n /**\n * Return the set of available features in this environment.\n * Some features of Luxon are not available in all environments. For example, on older browsers, timezone support is not available. Use this function to figure out if that's the case.\n * Keys:\n * * `zones`: whether this environment supports IANA timezones\n * * `intlTokens`: whether this environment supports internationalized token-based formatting/parsing\n * * `intl`: whether this environment supports general internationalization\n * @example Info.features() //=> { intl: true, intlTokens: false, zones: true }\n * @return {Object}\n */\n\n\n Info.features = function features() {\n var intl = false,\n intlTokens = false,\n zones = false;\n\n if (hasIntl()) {\n intl = true;\n intlTokens = hasFormatToParts();\n\n try {\n zones = new Intl.DateTimeFormat('en', { timeZone: 'America/New_York' }).resolvedOptions().timeZone === 'America/New_York';\n } catch (e) {\n zones = false;\n }\n }\n\n return { intl: intl, intlTokens: intlTokens, zones: zones };\n };\n\n return Info;\n}();\n\nfunction dayDiff(earlier, later) {\n var utcDayStart = function utcDayStart(dt) {\n return dt.toUTC(0, { keepLocalTime: true }).startOf('day').valueOf();\n },\n ms = utcDayStart(later) - utcDayStart(earlier);\n return Math.floor(Duration.fromMillis(ms).as('days'));\n}\n\nfunction highOrderDiffs(cursor, later, units) {\n var differs = [['years', function (a, b) {\n return b.year - a.year;\n }], ['months', function (a, b) {\n return b.month - a.month + (b.year - a.year) * 12;\n }], ['weeks', function (a, b) {\n var days = dayDiff(a, b);\n return (days - days % 7) / 7;\n }], ['days', dayDiff]];\n\n var results = {};\n var lowestOrder = void 0,\n highWater = void 0;\n\n for (var _iterator = differs, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n var _ref2;\n\n if (_isArray) {\n if (_i >= _iterator.length) break;\n _ref2 = _iterator[_i++];\n } else {\n _i = _iterator.next();\n if (_i.done) break;\n _ref2 = _i.value;\n }\n\n var _ref = _ref2;\n var unit = _ref[0];\n var differ = _ref[1];\n\n if (units.indexOf(unit) >= 0) {\n var _cursor$plus;\n\n lowestOrder = unit;\n\n var delta = differ(cursor, later);\n\n highWater = cursor.plus((_cursor$plus = {}, _cursor$plus[unit] = delta, _cursor$plus));\n\n if (highWater > later) {\n var _highWater$minus;\n\n cursor = highWater.minus((_highWater$minus = {}, _highWater$minus[unit] = 1, _highWater$minus));\n delta -= 1;\n } else {\n cursor = highWater;\n }\n\n if (delta > 0) {\n results[unit] = delta;\n }\n }\n }\n\n return [cursor, results, highWater, lowestOrder];\n}\n\nfunction _diff (earlier, later, units, opts) {\n var _highOrderDiffs = highOrderDiffs(earlier, later, units),\n cursor = _highOrderDiffs[0],\n results = _highOrderDiffs[1],\n highWater = _highOrderDiffs[2],\n lowestOrder = _highOrderDiffs[3];\n\n var remainingMillis = later - cursor;\n\n var lowerOrderUnits = units.filter(function (u) {\n return ['hours', 'minutes', 'seconds', 'milliseconds'].indexOf(u) >= 0;\n });\n\n if (lowerOrderUnits.length === 0) {\n if (highWater < later) {\n var _cursor$plus2;\n\n highWater = cursor.plus((_cursor$plus2 = {}, _cursor$plus2[lowestOrder] = 1, _cursor$plus2));\n }\n\n if (highWater !== cursor) {\n results[lowestOrder] = (results[lowestOrder] || 0) + remainingMillis / (highWater - cursor);\n }\n }\n\n var duration = Duration.fromObject(Object.assign(results, opts));\n\n if (lowerOrderUnits.length > 0) {\n var _Duration$fromMillis;\n\n return (_Duration$fromMillis = Duration.fromMillis(remainingMillis, opts)).shiftTo.apply(_Duration$fromMillis, lowerOrderUnits).plus(duration);\n } else {\n return duration;\n }\n}\n\nvar MISSING_FTP = 'missing Intl.DateTimeFormat.formatToParts support';\n\nfunction intUnit(regex) {\n var post = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function (i) {\n return i;\n };\n\n return { regex: regex, deser: function deser(_ref) {\n var s = _ref[0];\n return post(parseInt(s));\n } };\n}\n\nfunction fixListRegex(s) {\n // make dots optional and also make them literal\n return s.replace(/\\./, '\\\\.?');\n}\n\nfunction stripInsensitivities(s) {\n return s.replace(/\\./, '').toLowerCase();\n}\n\nfunction oneOf(strings, startIndex) {\n if (strings === null) {\n return null;\n } else {\n return {\n regex: RegExp(strings.map(fixListRegex).join('|')),\n deser: function deser(_ref2) {\n var s = _ref2[0];\n return strings.findIndex(function (i) {\n return stripInsensitivities(s) === stripInsensitivities(i);\n }) + startIndex;\n }\n };\n }\n}\n\nfunction offset(regex, groups) {\n return { regex: regex, deser: function deser(_ref3) {\n var h = _ref3[1],\n m = _ref3[2];\n return signedOffset(h, m);\n }, groups: groups };\n}\n\nfunction simple(regex) {\n return { regex: regex, deser: function deser(_ref4) {\n var s = _ref4[0];\n return s;\n } };\n}\n\nfunction unitForToken(token, loc) {\n var one = /\\d/,\n two = /\\d{2}/,\n three = /\\d{3}/,\n four = /\\d{4}/,\n oneOrTwo = /\\d{1,2}/,\n oneToThree = /\\d{1,3}/,\n twoToFour = /\\d{2,4}/,\n literal = function literal(t) {\n return { regex: RegExp(t.val), deser: function deser(_ref5) {\n var s = _ref5[0];\n return s;\n }, literal: true };\n },\n unitate = function unitate(t) {\n if (token.literal) {\n return literal(t);\n }\n switch (t.val) {\n // era\n case 'G':\n return oneOf(loc.eras('short', false), 0);\n case 'GG':\n return oneOf(loc.eras('long', false), 0);\n // years\n case 'y':\n return intUnit(/\\d{1,6}/);\n case 'yy':\n return intUnit(twoToFour, untruncateYear);\n case 'yyyy':\n return intUnit(four);\n case 'yyyyy':\n return intUnit(/\\d{4,6}/);\n case 'yyyyyy':\n return intUnit(/\\d{6}/);\n // months\n case 'M':\n return intUnit(oneOrTwo);\n case 'MM':\n return intUnit(two);\n case 'MMM':\n return oneOf(loc.months('short', false, false), 1);\n case 'MMMM':\n return oneOf(loc.months('long', false, false), 1);\n case 'L':\n return intUnit(oneOrTwo);\n case 'LL':\n return intUnit(two);\n case 'LLL':\n return oneOf(loc.months('short', true, false), 1);\n case 'LLLL':\n return oneOf(loc.months('long', true, false), 1);\n // dates\n case 'd':\n return intUnit(oneOrTwo);\n case 'dd':\n return intUnit(two);\n // ordinals\n case 'o':\n return intUnit(oneToThree);\n case 'ooo':\n return intUnit(three);\n // time\n case 'HH':\n return intUnit(two);\n case 'H':\n return intUnit(oneOrTwo);\n case 'hh':\n return intUnit(two);\n case 'h':\n return intUnit(oneOrTwo);\n case 'mm':\n return intUnit(two);\n case 'm':\n return intUnit(oneOrTwo);\n case 's':\n return intUnit(oneOrTwo);\n case 'ss':\n return intUnit(two);\n case 'S':\n return intUnit(oneToThree);\n case 'SSS':\n return intUnit(three);\n case 'u':\n return simple(/\\d{1,9}/);\n // meridiem\n case 'a':\n return oneOf(loc.meridiems(), 0);\n // weekYear (k)\n case 'kkkk':\n return intUnit(four);\n case 'kk':\n return intUnit(twoToFour, untruncateYear);\n // weekNumber (W)\n case 'W':\n return intUnit(oneOrTwo);\n case 'WW':\n return intUnit(two);\n // weekdays\n case 'E':\n case 'c':\n return intUnit(one);\n case 'EEE':\n return oneOf(loc.weekdays('short', false, false), 1);\n case 'EEEE':\n return oneOf(loc.weekdays('long', false, false), 1);\n case 'ccc':\n return oneOf(loc.weekdays('short', true, false), 1);\n case 'cccc':\n return oneOf(loc.weekdays('long', true, false), 1);\n // offset/zone\n case 'Z':\n case 'ZZ':\n return offset(/([+-]\\d{1,2})(?::(\\d{2}))?/, 2);\n case 'ZZZ':\n return offset(/([+-]\\d{1,2})(\\d{2})?/, 2);\n // we don't support ZZZZ (PST) or ZZZZZ (Pacific Standard Time) in parsing\n // because we don't have any way to figure out what they are\n case 'z':\n return simple(/[A-Za-z_]{1,256}\\/[A-Za-z_]{1,256}/);\n default:\n return literal(t);\n }\n };\n\n var unit = unitate(token) || {\n invalidReason: MISSING_FTP\n };\n\n unit.token = token;\n\n return unit;\n}\n\nfunction buildRegex(units) {\n var re = units.map(function (u) {\n return u.regex;\n }).reduce(function (f, r) {\n return f + '(' + r.source + ')';\n }, '');\n return ['^' + re + '$', units];\n}\n\nfunction match(input, regex, handlers) {\n var matches = input.match(regex);\n\n if (matches) {\n var all = {};\n var matchIndex = 1;\n for (var i in handlers) {\n if (handlers.hasOwnProperty(i)) {\n var h = handlers[i],\n groups = h.groups ? h.groups + 1 : 1;\n if (!h.literal && h.token) {\n all[h.token.val[0]] = h.deser(matches.slice(matchIndex, matchIndex + groups));\n }\n matchIndex += groups;\n }\n }\n return [matches, all];\n } else {\n return [matches, {}];\n }\n}\n\nfunction dateTimeFromMatches(matches) {\n var toField = function toField(token) {\n switch (token) {\n case 'S':\n return 'millisecond';\n case 's':\n return 'second';\n case 'm':\n return 'minute';\n case 'h':\n case 'H':\n return 'hour';\n case 'd':\n return 'day';\n case 'o':\n return 'ordinal';\n case 'L':\n case 'M':\n return 'month';\n case 'y':\n return 'year';\n case 'E':\n case 'c':\n return 'weekday';\n case 'W':\n return 'weekNumber';\n case 'k':\n return 'weekYear';\n default:\n return null;\n }\n };\n\n var zone = void 0;\n if (!isUndefined(matches.Z)) {\n zone = new FixedOffsetZone(matches.Z);\n } else if (!isUndefined(matches.z)) {\n zone = new IANAZone(matches.z);\n } else {\n zone = null;\n }\n\n if (!isUndefined(matches.h)) {\n if (matches.h < 12 && matches.a === 1) {\n matches.h += 12;\n } else if (matches.h === 12 && matches.a === 0) {\n matches.h = 0;\n }\n }\n\n if (matches.G === 0 && matches.y) {\n matches.y = -matches.y;\n }\n\n if (!isUndefined(matches.u)) {\n matches.S = parseMillis(matches.u);\n }\n\n var vals = Object.keys(matches).reduce(function (r, k) {\n var f = toField(k);\n if (f) {\n r[f] = matches[k];\n }\n\n return r;\n }, {});\n\n return [vals, zone];\n}\n\n/**\n * @private\n */\n\nfunction explainFromTokens(locale, input, format) {\n var tokens = Formatter.parseFormat(format),\n units = tokens.map(function (t) {\n return unitForToken(t, locale);\n }),\n disqualifyingUnit = units.find(function (t) {\n return t.invalidReason;\n });\n\n if (disqualifyingUnit) {\n return { input: input, tokens: tokens, invalidReason: disqualifyingUnit.invalidReason };\n } else {\n var _buildRegex = buildRegex(units),\n regexString = _buildRegex[0],\n handlers = _buildRegex[1],\n regex = RegExp(regexString, 'i'),\n _match = match(input, regex, handlers),\n rawMatches = _match[0],\n matches = _match[1],\n _ref6 = matches ? dateTimeFromMatches(matches) : [null, null],\n result = _ref6[0],\n zone = _ref6[1];\n\n return { input: input, tokens: tokens, regex: regex, rawMatches: rawMatches, matches: matches, result: result, zone: zone };\n }\n}\n\nfunction parseFromTokens(locale, input, format) {\n var _explainFromTokens = explainFromTokens(locale, input, format),\n result = _explainFromTokens.result,\n zone = _explainFromTokens.zone,\n invalidReason = _explainFromTokens.invalidReason;\n\n return [result, zone, invalidReason];\n}\n\nvar nonLeapLadder = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334],\n leapLadder = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335];\n\nfunction dayOfWeek(year, month, day) {\n var js = new Date(Date.UTC(year, month - 1, day)).getUTCDay();\n return js === 0 ? 7 : js;\n}\n\nfunction computeOrdinal(year, month, day) {\n return day + (isLeapYear(year) ? leapLadder : nonLeapLadder)[month - 1];\n}\n\nfunction uncomputeOrdinal(year, ordinal) {\n var table = isLeapYear(year) ? leapLadder : nonLeapLadder,\n month0 = table.findIndex(function (i) {\n return i < ordinal;\n }),\n day = ordinal - table[month0];\n return { month: month0 + 1, day: day };\n}\n\n/**\n * @private\n */\n\nfunction gregorianToWeek(gregObj) {\n var year = gregObj.year,\n month = gregObj.month,\n day = gregObj.day,\n ordinal = computeOrdinal(year, month, day),\n weekday = dayOfWeek(year, month, day);\n\n\n var weekNumber = Math.floor((ordinal - weekday + 10) / 7),\n weekYear = void 0;\n\n if (weekNumber < 1) {\n weekYear = year - 1;\n weekNumber = weeksInWeekYear(weekYear);\n } else if (weekNumber > weeksInWeekYear(year)) {\n weekYear = year + 1;\n weekNumber = 1;\n } else {\n weekYear = year;\n }\n\n return Object.assign({ weekYear: weekYear, weekNumber: weekNumber, weekday: weekday }, timeObject(gregObj));\n}\n\nfunction weekToGregorian(weekData) {\n var weekYear = weekData.weekYear,\n weekNumber = weekData.weekNumber,\n weekday = weekData.weekday,\n weekdayOfJan4 = dayOfWeek(weekYear, 1, 4),\n yearInDays = daysInYear(weekYear);\n\n var ordinal = weekNumber * 7 + weekday - weekdayOfJan4 - 3,\n year = void 0;\n\n if (ordinal < 1) {\n year = weekYear - 1;\n ordinal += daysInYear(year);\n } else if (ordinal > yearInDays) {\n year = weekYear + 1;\n ordinal -= daysInYear(year);\n } else {\n year = weekYear;\n }\n\n var _uncomputeOrdinal = uncomputeOrdinal(year, ordinal),\n month = _uncomputeOrdinal.month,\n day = _uncomputeOrdinal.day;\n\n return Object.assign({ year: year, month: month, day: day }, timeObject(weekData));\n}\n\nfunction gregorianToOrdinal(gregData) {\n var year = gregData.year,\n month = gregData.month,\n day = gregData.day,\n ordinal = computeOrdinal(year, month, day);\n\n\n return Object.assign({ year: year, ordinal: ordinal }, timeObject(gregData));\n}\n\nfunction ordinalToGregorian(ordinalData) {\n var year = ordinalData.year,\n ordinal = ordinalData.ordinal,\n _uncomputeOrdinal2 = uncomputeOrdinal(year, ordinal),\n month = _uncomputeOrdinal2.month,\n day = _uncomputeOrdinal2.day;\n\n return Object.assign({ year: year, month: month, day: day }, timeObject(ordinalData));\n}\n\nfunction hasInvalidWeekData(obj) {\n var validYear = isNumber(obj.weekYear),\n validWeek = numberBetween(obj.weekNumber, 1, weeksInWeekYear(obj.weekYear)),\n validWeekday = numberBetween(obj.weekday, 1, 7);\n\n if (!validYear) {\n return 'weekYear out of range';\n } else if (!validWeek) {\n return 'week out of range';\n } else if (!validWeekday) {\n return 'weekday out of range';\n } else return false;\n}\n\nfunction hasInvalidOrdinalData(obj) {\n var validYear = isNumber(obj.year),\n validOrdinal = numberBetween(obj.ordinal, 1, daysInYear(obj.year));\n\n if (!validYear) {\n return 'year out of range';\n } else if (!validOrdinal) {\n return 'ordinal out of range';\n } else return false;\n}\n\nfunction hasInvalidGregorianData(obj) {\n var validYear = isNumber(obj.year),\n validMonth = numberBetween(obj.month, 1, 12),\n validDay = numberBetween(obj.day, 1, daysInMonth(obj.year, obj.month));\n\n if (!validYear) {\n return 'year out of range';\n } else if (!validMonth) {\n return 'month out of range';\n } else if (!validDay) {\n return 'day out of range';\n } else return false;\n}\n\nfunction hasInvalidTimeData(obj) {\n var validHour = numberBetween(obj.hour, 0, 23),\n validMinute = numberBetween(obj.minute, 0, 59),\n validSecond = numberBetween(obj.second, 0, 59),\n validMillisecond = numberBetween(obj.millisecond, 0, 999);\n\n if (!validHour) {\n return 'hour out of range';\n } else if (!validMinute) {\n return 'minute out of range';\n } else if (!validSecond) {\n return 'second out of range';\n } else if (!validMillisecond) {\n return 'millisecond out of range';\n } else return false;\n}\n\nvar INVALID$2 = 'Invalid DateTime',\n INVALID_INPUT = 'invalid input',\n UNSUPPORTED_ZONE = 'unsupported zone',\n UNPARSABLE$1 = 'unparsable';\n\n// we cache week data on the DT object and this intermediates the cache\nfunction possiblyCachedWeekData(dt) {\n if (dt.weekData === null) {\n dt.weekData = gregorianToWeek(dt.c);\n }\n return dt.weekData;\n}\n\n// clone really means, \"make a new object with these modifications\". all \"setters\" really use this\n// to create a new object while only changing some of the properties\nfunction clone$1(inst, alts) {\n var current = {\n ts: inst.ts,\n zone: inst.zone,\n c: inst.c,\n o: inst.o,\n loc: inst.loc,\n invalidReason: inst.invalidReason\n };\n return new DateTime(Object.assign({}, current, alts, { old: current }));\n}\n\n// find the right offset a given local time. The o input is our guess, which determines which\n// offset we'll pick in ambiguous cases (e.g. there are two 3 AMs b/c Fallback DST)\nfunction fixOffset(localTS, o, tz) {\n // Our UTC time is just a guess because our offset is just a guess\n var utcGuess = localTS - o * 60 * 1000;\n\n // Test whether the zone matches the offset for this ts\n var o2 = tz.offset(utcGuess);\n\n // If so, offset didn't change and we're done\n if (o === o2) {\n return [utcGuess, o];\n }\n\n // If not, change the ts by the difference in the offset\n utcGuess -= (o2 - o) * 60 * 1000;\n\n // If that gives us the local time we want, we're done\n var o3 = tz.offset(utcGuess);\n if (o2 === o3) {\n return [utcGuess, o2];\n }\n\n // If it's different, we're in a hole time. The offset has changed, but the we don't adjust the time\n return [localTS - Math.min(o2, o3) * 60 * 1000, Math.max(o2, o3)];\n}\n\n// convert an epoch timestamp into a calendar object with the given offset\nfunction tsToObj(ts, offset) {\n ts += offset * 60 * 1000;\n\n var d = new Date(ts);\n\n return {\n year: d.getUTCFullYear(),\n month: d.getUTCMonth() + 1,\n day: d.getUTCDate(),\n hour: d.getUTCHours(),\n minute: d.getUTCMinutes(),\n second: d.getUTCSeconds(),\n millisecond: d.getUTCMilliseconds()\n };\n}\n\n// covert a calendar object to a local timestamp (epoch, but with the offset baked in)\nfunction objToLocalTS(obj) {\n var d = Date.UTC(obj.year, obj.month - 1, obj.day, obj.hour, obj.minute, obj.second, obj.millisecond);\n\n // javascript is stupid and i hate it\n if (obj.year < 100 && obj.year >= 0) {\n d = new Date(d);\n d.setUTCFullYear(obj.year);\n }\n return +d;\n}\n\n// convert a calendar object to a epoch timestamp\nfunction objToTS(obj, offset, zone) {\n return fixOffset(objToLocalTS(obj), offset, zone);\n}\n\n// create a new DT instance by adding a duration, adjusting for DSTs\nfunction adjustTime(inst, dur) {\n var oPre = inst.o,\n year = inst.c.year + dur.years,\n month = inst.c.month + dur.months + dur.quarters * 3,\n c = Object.assign({}, inst.c, {\n year: year,\n month: month,\n day: Math.min(inst.c.day, daysInMonth(year, month)) + dur.days + dur.weeks * 7\n }),\n millisToAdd = Duration.fromObject({\n hours: dur.hours,\n minutes: dur.minutes,\n seconds: dur.seconds,\n milliseconds: dur.milliseconds\n }).as('milliseconds'),\n localTS = objToLocalTS(c);\n\n var _fixOffset = fixOffset(localTS, oPre, inst.zone),\n ts = _fixOffset[0],\n o = _fixOffset[1];\n\n if (millisToAdd !== 0) {\n ts += millisToAdd;\n // that could have changed the offset by going over a DST, but we want to keep the ts the same\n o = inst.zone.offset(ts);\n }\n\n return { ts: ts, o: o };\n}\n\n// helper useful in turning the results of parsing into real dates\n// by handling the zone options\nfunction parseDataToDateTime(parsed, parsedZone, opts) {\n var setZone = opts.setZone,\n zone = opts.zone;\n\n if (parsed && Object.keys(parsed).length !== 0) {\n var interpretationZone = parsedZone || zone,\n inst = DateTime.fromObject(Object.assign(parsed, opts, {\n zone: interpretationZone\n }));\n return setZone ? inst : inst.setZone(zone);\n } else {\n return DateTime.invalid(UNPARSABLE$1);\n }\n}\n\n// if you want to output a technical format (e.g. RFC 2822), this helper\n// helps handle the details\nfunction toTechFormat(dt, format) {\n return dt.isValid ? Formatter.create(Locale.create('en-US'), {\n allowZ: true,\n forceSimple: true\n }).formatDateTimeFromString(dt, format) : null;\n}\n\n// technical time formats (e.g. the time part of ISO 8601), take some options\n// and this commonizes their handling\nfunction toTechTimeFormat(dt, _ref) {\n var _ref$suppressSeconds = _ref.suppressSeconds,\n suppressSeconds = _ref$suppressSeconds === undefined ? false : _ref$suppressSeconds,\n _ref$suppressMillisec = _ref.suppressMilliseconds,\n suppressMilliseconds = _ref$suppressMillisec === undefined ? false : _ref$suppressMillisec,\n _ref$includeOffset = _ref.includeOffset,\n includeOffset = _ref$includeOffset === undefined ? true : _ref$includeOffset,\n _ref$includeZone = _ref.includeZone,\n includeZone = _ref$includeZone === undefined ? false : _ref$includeZone,\n _ref$spaceZone = _ref.spaceZone,\n spaceZone = _ref$spaceZone === undefined ? false : _ref$spaceZone;\n\n var fmt = 'HH:mm';\n\n if (!suppressSeconds || dt.second !== 0 || dt.millisecond !== 0) {\n fmt += ':ss';\n if (!suppressMilliseconds || dt.millisecond !== 0) {\n fmt += '.SSS';\n }\n }\n\n if ((includeZone || includeOffset) && spaceZone) {\n fmt += ' ';\n }\n\n if (includeZone) {\n fmt += 'z';\n } else if (includeOffset) {\n fmt += 'ZZ';\n }\n\n return toTechFormat(dt, fmt);\n}\n\n// defaults for unspecified units in the supported calendars\nvar defaultUnitValues = {\n month: 1,\n day: 1,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0\n},\n defaultWeekUnitValues = {\n weekNumber: 1,\n weekday: 1,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0\n},\n defaultOrdinalUnitValues = {\n ordinal: 1,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0\n};\n\n// Units in the supported calendars, sorted by bigness\nvar orderedUnits$1 = ['year', 'month', 'day', 'hour', 'minute', 'second', 'millisecond'],\n orderedWeekUnits = ['weekYear', 'weekNumber', 'weekday', 'hour', 'minute', 'second', 'millisecond'],\n orderedOrdinalUnits = ['year', 'ordinal', 'hour', 'minute', 'second', 'millisecond'];\n\n// standardize case and plurality in units\nfunction normalizeUnit(unit) {\n var ignoreUnknown = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var normalized = {\n year: 'year',\n years: 'year',\n month: 'month',\n months: 'month',\n day: 'day',\n days: 'day',\n hour: 'hour',\n hours: 'hour',\n minute: 'minute',\n minutes: 'minute',\n second: 'second',\n seconds: 'second',\n millisecond: 'millisecond',\n milliseconds: 'millisecond',\n weekday: 'weekday',\n weekdays: 'weekday',\n weeknumber: 'weekNumber',\n weeksnumber: 'weekNumber',\n weeknumbers: 'weekNumber',\n weekyear: 'weekYear',\n weekyears: 'weekYear',\n ordinal: 'ordinal'\n }[unit ? unit.toLowerCase() : unit];\n\n if (!ignoreUnknown && !normalized) throw new InvalidUnitError(unit);\n\n return normalized;\n}\n\n// this is a dumbed down version of fromObject() that runs about 60% faster\n// but doesn't do any validation, makes a bunch of assumptions about what units\n// are present, and so on.\nfunction quickDT(obj, zone) {\n // assume we have the higher-order units\n for (var _iterator = orderedUnits$1, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n var _ref2;\n\n if (_isArray) {\n if (_i >= _iterator.length) break;\n _ref2 = _iterator[_i++];\n } else {\n _i = _iterator.next();\n if (_i.done) break;\n _ref2 = _i.value;\n }\n\n var u = _ref2;\n\n if (isUndefined(obj[u])) {\n obj[u] = defaultUnitValues[u];\n }\n }\n\n var invalidReason = hasInvalidGregorianData(obj) || hasInvalidTimeData(obj);\n if (invalidReason) {\n return DateTime.invalid(invalidReason);\n }\n\n var tsNow = Settings.now(),\n offsetProvis = zone.offset(tsNow),\n _objToTS = objToTS(obj, offsetProvis, zone),\n ts = _objToTS[0],\n o = _objToTS[1];\n\n\n return new DateTime({\n ts: ts,\n zone: zone,\n o: o\n });\n}\n\n/**\n * A DateTime is an immutable data structure representing a specific date and time and accompanying methods. It contains class and instance methods for creating, parsing, interrogating, transforming, and formatting them.\n *\n * A DateTime comprises of:\n * * A timestamp. Each DateTime instance refers to a specific millisecond of the Unix epoch.\n * * A time zone. Each instance is considered in the context of a specific zone (by default the local system's zone).\n * * Configuration properties that effect how output strings are formatted, such as `locale`, `numberingSystem`, and `outputCalendar`.\n *\n * Here is a brief overview of the most commonly used functionality it provides:\n *\n * * **Creation**: To create a DateTime from its components, use one of its factory class methods: {@link local}, {@link utc}, and (most flexibly) {@link fromObject}. To create one from a standard string format, use {@link fromISO}, {@link fromHTTP}, and {@link fromRFC2822}. To create one from a custom string format, use {@link fromFormat}. To create one from a native JS date, use {@link fromJSDate}.\n * * **Gregorian calendar and time**: To examine the Gregorian properties of a DateTime individually (i.e as opposed to collectively through {@link toObject}), use the {@link year}, {@link month},\n * {@link day}, {@link hour}, {@link minute}, {@link second}, {@link millisecond} accessors.\n * * **Week calendar**: For ISO week calendar attributes, see the {@link weekYear}, {@link weekNumber}, and {@link weekday} accessors.\n * * **Configuration** See the {@link locale} and {@link numberingSystem} accessors.\n * * **Transformation**: To transform the DateTime into other DateTimes, use {@link set}, {@link reconfigure}, {@link setZone}, {@link setLocale}, {@link plus}, {@link minus}, {@link endOf}, {@link startOf}, {@link toUTC}, and {@link toLocal}.\n * * **Output**: To convert the DateTime to other representations, use the {@link toJSON}, {@link toISO}, {@link toHTTP}, {@link toObject}, {@link toRFC2822}, {@link toString}, {@link toLocaleString}, {@link toFormat}, {@link valueOf} and {@link toJSDate}.\n *\n * There's plenty others documented below. In addition, for more information on subtler topics like internationalization, time zones, alternative calendars, validity, and so on, see the external documentation.\n */\n\nvar DateTime = function () {\n /**\n * @access private\n */\n function DateTime(config) {\n classCallCheck(this, DateTime);\n\n var zone = config.zone || Settings.defaultZone,\n invalidReason = config.invalidReason || (Number.isNaN(config.ts) ? INVALID_INPUT : null) || (!zone.isValid ? UNSUPPORTED_ZONE : null);\n /**\n * @access private\n */\n this.ts = isUndefined(config.ts) ? Settings.now() : config.ts;\n\n var c = null,\n o = null;\n if (!invalidReason) {\n var unchanged = config.old && config.old.ts === this.ts && config.old.zone.equals(zone);\n c = unchanged ? config.old.c : tsToObj(this.ts, zone.offset(this.ts));\n o = unchanged ? config.old.o : zone.offset(this.ts);\n }\n\n /**\n * @access private\n */\n this.zone = zone;\n /**\n * @access private\n */\n this.loc = config.loc || Locale.create();\n /**\n * @access private\n */\n this.invalid = invalidReason;\n /**\n * @access private\n */\n this.weekData = null;\n /**\n * @access private\n */\n this.c = c;\n /**\n * @access private\n */\n this.o = o;\n }\n\n // CONSTRUCT\n\n /**\n * Create a local DateTime\n * @param {number} year - The calendar year. If omitted (as in, call `local()` with no arguments), the current time will be used\n * @param {number} [month=1] - The month, 1-indexed\n * @param {number} [day=1] - The day of the month\n * @param {number} [hour=0] - The hour of the day, in 24-hour time\n * @param {number} [minute=0] - The minute of the hour, i.e. a number between 0 and 59\n * @param {number} [second=0] - The second of the minute, i.e. a number between 0 and 59\n * @param {number} [millisecond=0] - The millisecond of the second, i.e. a number between 0 and 999\n * @example DateTime.local() //~> now\n * @example DateTime.local(2017) //~> 2017-01-01T00:00:00\n * @example DateTime.local(2017, 3) //~> 2017-03-01T00:00:00\n * @example DateTime.local(2017, 3, 12) //~> 2017-03-12T00:00:00\n * @example DateTime.local(2017, 3, 12, 5) //~> 2017-03-12T05:00:00\n * @example DateTime.local(2017, 3, 12, 5, 45) //~> 2017-03-12T05:45:00\n * @example DateTime.local(2017, 3, 12, 5, 45, 10) //~> 2017-03-12T05:45:10\n * @example DateTime.local(2017, 3, 12, 5, 45, 10, 765) //~> 2017-03-12T05:45:10.765\n * @return {DateTime}\n */\n\n\n DateTime.local = function local(year, month, day, hour, minute, second, millisecond) {\n if (isUndefined(year)) {\n return new DateTime({ ts: Settings.now() });\n } else {\n return quickDT({\n year: year,\n month: month,\n day: day,\n hour: hour,\n minute: minute,\n second: second,\n millisecond: millisecond\n }, Settings.defaultZone);\n }\n };\n\n /**\n * Create a DateTime in UTC\n * @param {number} year - The calendar year. If omitted (as in, call `utc()` with no arguments), the current time will be used\n * @param {number} [month=1] - The month, 1-indexed\n * @param {number} [day=1] - The day of the month\n * @param {number} [hour=0] - The hour of the day, in 24-hour time\n * @param {number} [minute=0] - The minute of the hour, i.e. a number between 0 and 59\n * @param {number} [second=0] - The second of the minute, i.e. a number between 0 and 59\n * @param {number} [millisecond=0] - The millisecond of the second, i.e. a number between 0 and 999\n * @example DateTime.utc() //~> now\n * @example DateTime.utc(2017) //~> 2017-01-01T00:00:00Z\n * @example DateTime.utc(2017, 3) //~> 2017-03-01T00:00:00Z\n * @example DateTime.utc(2017, 3, 12) //~> 2017-03-12T00:00:00Z\n * @example DateTime.utc(2017, 3, 12, 5) //~> 2017-03-12T05:00:00Z\n * @example DateTime.utc(2017, 3, 12, 5, 45) //~> 2017-03-12T05:45:00Z\n * @example DateTime.utc(2017, 3, 12, 5, 45, 10) //~> 2017-03-12T05:45:10Z\n * @example DateTime.utc(2017, 3, 12, 5, 45, 10, 765) //~> 2017-03-12T05:45:10.765Z\n * @return {DateTime}\n */\n\n\n DateTime.utc = function utc(year, month, day, hour, minute, second, millisecond) {\n if (isUndefined(year)) {\n return new DateTime({\n ts: Settings.now(),\n zone: FixedOffsetZone.utcInstance\n });\n } else {\n return quickDT({\n year: year,\n month: month,\n day: day,\n hour: hour,\n minute: minute,\n second: second,\n millisecond: millisecond\n }, FixedOffsetZone.utcInstance);\n }\n };\n\n /**\n * Create an DateTime from a Javascript Date object. Uses the default zone.\n * @param {Date} date - a Javascript Date object\n * @param {Object} options - configuration options for the DateTime\n * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n * @return {DateTime}\n */\n\n\n DateTime.fromJSDate = function fromJSDate(date) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n return new DateTime({\n ts: isDate(date) ? date.valueOf() : NaN,\n zone: normalizeZone(options.zone, Settings.defaultZone),\n loc: Locale.fromObject(options)\n });\n };\n\n /**\n * Create an DateTime from a count of epoch milliseconds. Uses the default zone.\n * @param {number} milliseconds - a number of milliseconds since 1970 UTC\n * @param {Object} options - configuration options for the DateTime\n * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @return {DateTime}\n */\n\n\n DateTime.fromMillis = function fromMillis(milliseconds) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n return new DateTime({\n ts: milliseconds,\n zone: normalizeZone(options.zone, Settings.defaultZone),\n loc: Locale.fromObject(options)\n });\n };\n\n /**\n * Create an DateTime from a Javascript object with keys like 'year' and 'hour' with reasonable defaults.\n * @param {Object} obj - the object to create the DateTime from\n * @param {number} obj.year - a year, such as 1987\n * @param {number} obj.month - a month, 1-12\n * @param {number} obj.day - a day of the month, 1-31, depending on the month\n * @param {number} obj.ordinal - day of the year, 1-365 or 366\n * @param {number} obj.weekYear - an ISO week year\n * @param {number} obj.weekNumber - an ISO week number, between 1 and 52 or 53, depending on the year\n * @param {number} obj.weekday - an ISO weekday, 1-7, where 1 is Monday and 7 is Sunday\n * @param {number} obj.hour - hour of the day, 0-23\n * @param {number} obj.minute - minute of the hour, 0-59\n * @param {number} obj.second - second of the minute, 0-59\n * @param {number} obj.millisecond - millisecond of the second, 0-999\n * @param {string|Zone} [obj.zone='local'] - interpret the numbers in the context of a particular zone. Can take any value taken as the first argument to setZone()\n * @param {string} [obj.locale='en-US'] - a locale to set on the resulting DateTime instance\n * @param {string} obj.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} obj.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @example DateTime.fromObject({ year: 1982, month: 5, day: 25}).toISODate() //=> '1982-05-25'\n * @example DateTime.fromObject({ year: 1982 }).toISODate() //=> '1982-01-01T00'\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }) //~> today at 10:26:06\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6, zone: 'utc' }),\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6, zone: 'local' })\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6, zone: 'America/New_York' })\n * @example DateTime.fromObject({ weekYear: 2016, weekNumber: 2, weekday: 3 }).toISODate() //=> '2016-01-13'\n * @return {DateTime}\n */\n\n\n DateTime.fromObject = function fromObject(obj) {\n var zoneToUse = normalizeZone(obj.zone, Settings.defaultZone);\n if (!zoneToUse.isValid) {\n return DateTime.invalid(UNSUPPORTED_ZONE);\n }\n\n var tsNow = Settings.now(),\n offsetProvis = zoneToUse.offset(tsNow),\n normalized = normalizeObject(obj, normalizeUnit, true),\n containsOrdinal = !isUndefined(normalized.ordinal),\n containsGregorYear = !isUndefined(normalized.year),\n containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day),\n containsGregor = containsGregorYear || containsGregorMD,\n definiteWeekDef = normalized.weekYear || normalized.weekNumber,\n loc = Locale.fromObject(obj);\n\n // cases:\n // just a weekday -> this week's instance of that weekday, no worries\n // (gregorian data or ordinal) + (weekYear or weekNumber) -> error\n // (gregorian month or day) + ordinal -> error\n // otherwise just use weeks or ordinals or gregorian, depending on what's specified\n\n if ((containsGregor || containsOrdinal) && definiteWeekDef) {\n throw new ConflictingSpecificationError(\"Can't mix weekYear/weekNumber units with year/month/day or ordinals\");\n }\n\n if (containsGregorMD && containsOrdinal) {\n throw new ConflictingSpecificationError(\"Can't mix ordinal dates with month/day\");\n }\n\n var useWeekData = definiteWeekDef || normalized.weekday && !containsGregor;\n\n // configure ourselves to deal with gregorian dates or week stuff\n var units = void 0,\n defaultValues = void 0,\n objNow = tsToObj(tsNow, offsetProvis);\n if (useWeekData) {\n units = orderedWeekUnits;\n defaultValues = defaultWeekUnitValues;\n objNow = gregorianToWeek(objNow);\n } else if (containsOrdinal) {\n units = orderedOrdinalUnits;\n defaultValues = defaultOrdinalUnitValues;\n objNow = gregorianToOrdinal(objNow);\n } else {\n units = orderedUnits$1;\n defaultValues = defaultUnitValues;\n }\n\n // set default values for missing stuff\n var foundFirst = false;\n for (var _iterator2 = units, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {\n var _ref3;\n\n if (_isArray2) {\n if (_i2 >= _iterator2.length) break;\n _ref3 = _iterator2[_i2++];\n } else {\n _i2 = _iterator2.next();\n if (_i2.done) break;\n _ref3 = _i2.value;\n }\n\n var u = _ref3;\n\n var v = normalized[u];\n if (!isUndefined(v)) {\n foundFirst = true;\n } else if (foundFirst) {\n normalized[u] = defaultValues[u];\n } else {\n normalized[u] = objNow[u];\n }\n }\n\n // make sure the values we have are in range\n var higherOrderInvalid = useWeekData ? hasInvalidWeekData(normalized) : containsOrdinal ? hasInvalidOrdinalData(normalized) : hasInvalidGregorianData(normalized),\n invalidReason = higherOrderInvalid || hasInvalidTimeData(normalized);\n\n if (invalidReason) {\n return DateTime.invalid(invalidReason);\n }\n\n // compute the actual time\n var gregorian = useWeekData ? weekToGregorian(normalized) : containsOrdinal ? ordinalToGregorian(normalized) : normalized,\n _objToTS2 = objToTS(gregorian, offsetProvis, zoneToUse),\n tsFinal = _objToTS2[0],\n offsetFinal = _objToTS2[1],\n inst = new DateTime({\n ts: tsFinal,\n zone: zoneToUse,\n o: offsetFinal,\n loc: loc\n });\n\n // gregorian data + weekday serves only to validate\n if (normalized.weekday && containsGregor && obj.weekday !== inst.weekday) {\n return DateTime.invalid('mismatched weekday');\n }\n\n return inst;\n };\n\n /**\n * Create a DateTime from an ISO 8601 string\n * @param {string} text - the ISO string\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the time to this zone\n * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='en-US'] - a locale to set on the resulting DateTime instance\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @example DateTime.fromISO('2016-05-25T09:08:34.123')\n * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00')\n * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00', {setZone: true})\n * @example DateTime.fromISO('2016-05-25T09:08:34.123', {zone: 'utc'})\n * @example DateTime.fromISO('2016-W05-4')\n * @return {DateTime}\n */\n\n\n DateTime.fromISO = function fromISO(text) {\n var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n var _parseISODate = parseISODate(text),\n vals = _parseISODate[0],\n parsedZone = _parseISODate[1];\n\n return parseDataToDateTime(vals, parsedZone, opts);\n };\n\n /**\n * Create a DateTime from an RFC 2822 string\n * @param {string} text - the RFC 2822 string\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since the offset is always specified in the string itself, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in.\n * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='en-US'] - a locale to set on the resulting DateTime instance\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @example DateTime.fromRFC2822('25 Nov 2016 13:23:12 GMT')\n * @example DateTime.fromRFC2822('Tue, 25 Nov 2016 13:23:12 +0600')\n * @example DateTime.fromRFC2822('25 Nov 2016 13:23 Z')\n * @return {DateTime}\n */\n\n\n DateTime.fromRFC2822 = function fromRFC2822(text) {\n var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n var _parseRFC2822Date = parseRFC2822Date(text),\n vals = _parseRFC2822Date[0],\n parsedZone = _parseRFC2822Date[1];\n\n return parseDataToDateTime(vals, parsedZone, opts);\n };\n\n /**\n * Create a DateTime from an HTTP header date\n * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1\n * @param {string} text - the HTTP header date\n * @param {Object} options - options to affect the creation\n * @param {string|Zone} [options.zone='local'] - convert the time to this zone. Since HTTP dates are always in UTC, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in.\n * @param {boolean} [options.setZone=false] - override the zone with the fixed-offset zone specified in the string. For HTTP dates, this is always UTC, so this option is equivalent to setting the `zone` option to 'utc', but this option is included for consistency with similar methods.\n * @param {string} [options.locale='en-US'] - a locale to set on the resulting DateTime instance\n * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @example DateTime.fromHTTP('Sun, 06 Nov 1994 08:49:37 GMT')\n * @example DateTime.fromHTTP('Sunday, 06-Nov-94 08:49:37 GMT')\n * @example DateTime.fromHTTP('Sun Nov 6 08:49:37 1994')\n * @return {DateTime}\n */\n\n\n DateTime.fromHTTP = function fromHTTP(text) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n var _parseHTTPDate = parseHTTPDate(text),\n vals = _parseHTTPDate[0],\n parsedZone = _parseHTTPDate[1];\n\n return parseDataToDateTime(vals, parsedZone, options);\n };\n\n /**\n * Create a DateTime from an input string and format string\n * Defaults to en-US if no locale has been specified, regardless of the system's locale\n * @param {string} text - the string to parse\n * @param {string} fmt - the format the string is expected to be in (see description)\n * @param {Object} options - options to affect the creation\n * @param {string|Zone} [options.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone\n * @param {boolean} [options.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one\n * @param {string} [options.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale\n * @param {string} options.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system\n * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @return {DateTime}\n */\n\n\n DateTime.fromFormat = function fromFormat(text, fmt) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (isUndefined(text) || isUndefined(fmt)) {\n throw new InvalidArgumentError('fromFormat requires an input string and a format');\n }\n\n var _options$locale = options.locale,\n locale = _options$locale === undefined ? null : _options$locale,\n _options$numberingSys = options.numberingSystem,\n numberingSystem = _options$numberingSys === undefined ? null : _options$numberingSys,\n localeToUse = Locale.fromOpts({ locale: locale, numberingSystem: numberingSystem, defaultToEN: true }),\n _parseFromTokens = parseFromTokens(localeToUse, text, fmt),\n vals = _parseFromTokens[0],\n parsedZone = _parseFromTokens[1],\n invalidReason = _parseFromTokens[2];\n\n if (invalidReason) {\n return DateTime.invalid(invalidReason);\n } else {\n return parseDataToDateTime(vals, parsedZone, options);\n }\n };\n\n /**\n * @deprecated use fromFormat instead\n */\n\n\n DateTime.fromString = function fromString(text, fmt) {\n var opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n return DateTime.fromFormat(text, fmt, opts);\n };\n\n /**\n * Create a DateTime from a SQL date, time, or datetime\n * Defaults to en-US if no locale has been specified, regardless of the system's locale\n * @param {string} text - the string to parse\n * @param {Object} options - options to affect the creation\n * @param {string|Zone} [options.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone\n * @param {boolean} [options.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one\n * @param {string} [options.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale\n * @param {string} options.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system\n * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @example DateTime.fromSQL('2017-05-15')\n * @example DateTime.fromSQL('2017-05-15 09:12:34')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342+06:00')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles', { setZone: true })\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342', { zone: 'America/Los_Angeles' })\n * @example DateTime.fromSQL('09:12:34.342')\n * @return {DateTime}\n */\n\n\n DateTime.fromSQL = function fromSQL(text) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n var _parseSQL = parseSQL(text),\n vals = _parseSQL[0],\n parsedZone = _parseSQL[1];\n\n return parseDataToDateTime(vals, parsedZone, options);\n };\n\n /**\n * Create an invalid DateTime.\n * @return {DateTime}\n */\n\n\n DateTime.invalid = function invalid(reason) {\n if (!reason) {\n throw new InvalidArgumentError('need to specify a reason the DateTime is invalid');\n }\n if (Settings.throwOnInvalid) {\n throw new InvalidDateTimeError(reason);\n } else {\n return new DateTime({ invalidReason: reason });\n }\n };\n\n // INFO\n\n /**\n * Get the value of unit.\n * @param {string} unit - a unit such as 'minute' or 'day'\n * @example DateTime.local(2017, 7, 4).get('month'); //=> 7\n * @example DateTime.local(2017, 7, 4).get('day'); //=> 4\n * @return {number}\n */\n\n\n DateTime.prototype.get = function get$$1(unit) {\n return this[unit];\n };\n\n /**\n * Returns whether the DateTime is valid. Invalid DateTimes occur when:\n * * The DateTime was created from invalid calendar information, such as the 13th month or February 30\n * * The DateTime was created by an operation on another invalid date\n * @type {boolean}\n */\n\n\n /**\n * Returns the resolved Intl options for this DateTime.\n * This is useful in understanding the behavior of formatting methods\n * @param {Object} opts - the same options as toLocaleString\n * @return {Object}\n */\n DateTime.prototype.resolvedLocaleOpts = function resolvedLocaleOpts() {\n var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n var _Formatter$create$res = Formatter.create(this.loc.clone(opts), opts).resolvedOptions(this),\n locale = _Formatter$create$res.locale,\n numberingSystem = _Formatter$create$res.numberingSystem,\n calendar = _Formatter$create$res.calendar;\n\n return { locale: locale, numberingSystem: numberingSystem, outputCalendar: calendar };\n };\n\n // TRANSFORM\n\n /**\n * \"Set\" the DateTime's zone to UTC. Returns a newly-constructed DateTime.\n *\n * Equivalent to {@link setZone}('utc')\n * @param {number} [offset=0] - optionally, an offset from UTC in minutes\n * @param {Object} [opts={}] - options to pass to `setZone()`\n * @return {DateTime}\n */\n\n\n DateTime.prototype.toUTC = function toUTC() {\n var offset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n return this.setZone(FixedOffsetZone.instance(offset), opts);\n };\n\n /**\n * \"Set\" the DateTime's zone to the host's local zone. Returns a newly-constructed DateTime.\n *\n * Equivalent to `setZone('local')`\n * @return {DateTime}\n */\n\n\n DateTime.prototype.toLocal = function toLocal() {\n return this.setZone(new LocalZone());\n };\n\n /**\n * \"Set\" the DateTime's zone to specified zone. Returns a newly-constructed DateTime.\n *\n * By default, the setter keeps the underlying time the same (as in, the same UTC timestamp), but the new instance will report different local times and consider DSTs when making computations, as with {@link plus}. You may wish to use {@link toLocal} and {@link toUTC} which provide simple convenience wrappers for commonly used zones.\n * @param {string|Zone} [zone='local'] - a zone identifier. As a string, that can be any IANA zone supported by the host environment, or a fixed-offset name of the form 'utc+3', or the strings 'local' or 'utc'. You may also supply an instance of a {@link Zone} class.\n * @param {Object} opts - options\n * @param {boolean} [opts.keepLocalTime=false] - If true, adjust the underlying time so that the local time stays the same, but in the target zone. You should rarely need this.\n * @return {DateTime}\n */\n\n\n DateTime.prototype.setZone = function setZone(zone) {\n var _ref4 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref4$keepLocalTime = _ref4.keepLocalTime,\n keepLocalTime = _ref4$keepLocalTime === undefined ? false : _ref4$keepLocalTime,\n _ref4$keepCalendarTim = _ref4.keepCalendarTime,\n keepCalendarTime = _ref4$keepCalendarTim === undefined ? false : _ref4$keepCalendarTim;\n\n zone = normalizeZone(zone, Settings.defaultZone);\n if (zone.equals(this.zone)) {\n return this;\n } else if (!zone.isValid) {\n return DateTime.invalid(UNSUPPORTED_ZONE);\n } else {\n var newTS = keepLocalTime || keepCalendarTime // keepCalendarTime is the deprecated name for keepLocalTime\n ? this.ts + (this.o - zone.offset(this.ts)) * 60 * 1000 : this.ts;\n return clone$1(this, { ts: newTS, zone: zone });\n }\n };\n\n /**\n * \"Set\" the locale, numberingSystem, or outputCalendar. Returns a newly-constructed DateTime.\n * @param {Object} properties - the properties to set\n * @example DateTime.local(2017, 5, 25).reconfigure({ locale: 'en-GB' })\n * @return {DateTime}\n */\n\n\n DateTime.prototype.reconfigure = function reconfigure() {\n var _ref5 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n locale = _ref5.locale,\n numberingSystem = _ref5.numberingSystem,\n outputCalendar = _ref5.outputCalendar;\n\n var loc = this.loc.clone({ locale: locale, numberingSystem: numberingSystem, outputCalendar: outputCalendar });\n return clone$1(this, { loc: loc });\n };\n\n /**\n * \"Set\" the locale. Returns a newly-constructed DateTime.\n * Just a convenient alias for reconfigure({ locale })\n * @example DateTime.local(2017, 5, 25).setLocale('en-GB')\n * @return {DateTime}\n */\n\n\n DateTime.prototype.setLocale = function setLocale(locale) {\n return this.reconfigure({ locale: locale });\n };\n\n /**\n * \"Set\" the values of specified units. Returns a newly-constructed DateTime.\n * You can only set units with this method; for \"setting\" metadata, see {@link reconfigure} and {@link setZone}.\n * @param {Object} values - a mapping of units to numbers\n * @example dt.set({ year: 2017 })\n * @example dt.set({ hour: 8, minute: 30 })\n * @example dt.set({ weekday: 5 })\n * @example dt.set({ year: 2005, ordinal: 234 })\n * @return {DateTime}\n */\n\n\n DateTime.prototype.set = function set$$1(values) {\n if (!this.isValid) return this;\n\n var normalized = normalizeObject(values, normalizeUnit),\n settingWeekStuff = !isUndefined(normalized.weekYear) || !isUndefined(normalized.weekNumber) || !isUndefined(normalized.weekday);\n\n var mixed = void 0;\n if (settingWeekStuff) {\n mixed = weekToGregorian(Object.assign(gregorianToWeek(this.c), normalized));\n } else if (!isUndefined(normalized.ordinal)) {\n mixed = ordinalToGregorian(Object.assign(gregorianToOrdinal(this.c), normalized));\n } else {\n mixed = Object.assign(this.toObject(), normalized);\n\n // if we didn't set the day but we ended up on an overflow date,\n // use the last day of the right month\n if (isUndefined(normalized.day)) {\n mixed.day = Math.min(daysInMonth(mixed.year, mixed.month), mixed.day);\n }\n }\n\n var _objToTS3 = objToTS(mixed, this.o, this.zone),\n ts = _objToTS3[0],\n o = _objToTS3[1];\n\n return clone$1(this, { ts: ts, o: o });\n };\n\n /**\n * Add a period of time to this DateTime and return the resulting DateTime\n *\n * Adding hours, minutes, seconds, or milliseconds increases the timestamp by the right number of milliseconds. Adding days, months, or years shifts the calendar, accounting for DSTs and leap years along the way. Thus, `dt.plus({ hours: 24 })` may result in a different time than `dt.plus({ days: 1 })` if there's a DST shift in between.\n * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n * @example DateTime.local().plus(123) //~> in 123 milliseconds\n * @example DateTime.local().plus({ minutes: 15 }) //~> in 15 minutes\n * @example DateTime.local().plus({ days: 1 }) //~> this time tomorrow\n * @example DateTime.local().plus({ days: -1 }) //~> this time yesterday\n * @example DateTime.local().plus({ hours: 3, minutes: 13 }) //~> in 1 hr, 13 min\n * @example DateTime.local().plus(Duration.fromObject({ hours: 3, minutes: 13 })) //~> in 1 hr, 13 min\n * @return {DateTime}\n */\n\n\n DateTime.prototype.plus = function plus(duration) {\n if (!this.isValid) return this;\n var dur = friendlyDuration(duration);\n return clone$1(this, adjustTime(this, dur));\n };\n\n /**\n * Subtract a period of time to this DateTime and return the resulting DateTime\n * See {@link plus}\n * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n @return {DateTime}\n */\n\n\n DateTime.prototype.minus = function minus(duration) {\n if (!this.isValid) return this;\n var dur = friendlyDuration(duration).negate();\n return clone$1(this, adjustTime(this, dur));\n };\n\n /**\n * \"Set\" this DateTime to the beginning of a unit of time.\n * @param {string} unit - The unit to go to the beginning of. Can be 'year', 'month', 'day', 'hour', 'minute', 'second', or 'millisecond'.\n * @example DateTime.local(2014, 3, 3).startOf('month').toISODate(); //=> '2014-03-01'\n * @example DateTime.local(2014, 3, 3).startOf('year').toISODate(); //=> '2014-01-01'\n * @example DateTime.local(2014, 3, 3, 5, 30).startOf('day').toISOTime(); //=> '00:00.000-05:00'\n * @example DateTime.local(2014, 3, 3, 5, 30).startOf('hour').toISOTime(); //=> '05:00:00.000-05:00'\n * @return {DateTime}\n */\n\n\n DateTime.prototype.startOf = function startOf(unit) {\n if (!this.isValid) return this;\n var o = {},\n normalizedUnit = Duration.normalizeUnit(unit);\n switch (normalizedUnit) {\n case 'years':\n o.month = 1;\n // falls through\n case 'quarters':\n case 'months':\n o.day = 1;\n // falls through\n case 'weeks':\n case 'days':\n o.hour = 0;\n // falls through\n case 'hours':\n o.minute = 0;\n // falls through\n case 'minutes':\n o.second = 0;\n // falls through\n case 'seconds':\n o.millisecond = 0;\n break;\n case 'milliseconds':\n break;\n default:\n throw new InvalidUnitError(unit);\n }\n\n if (normalizedUnit === 'weeks') {\n o.weekday = 1;\n }\n\n if (normalizedUnit === 'quarters') {\n var q = Math.ceil(this.month / 3);\n o.month = (q - 1) * 3 + 1;\n }\n\n return this.set(o);\n };\n\n /**\n * \"Set\" this DateTime to the end (i.e. the last millisecond) of a unit of time\n * @param {string} unit - The unit to go to the end of. Can be 'year', 'month', 'day', 'hour', 'minute', 'second', or 'millisecond'.\n * @example DateTime.local(2014, 3, 3).endOf('month').toISO(); //=> '2014-03-31T23:59:59.999-05:00'\n * @example DateTime.local(2014, 3, 3).endOf('year').toISO(); //=> '2014-12-31T23:59:59.999-05:00'\n * @example DateTime.local(2014, 3, 3, 5, 30).endOf('day').toISO(); //=> '2014-03-03T23:59:59.999-05:00'\n * @example DateTime.local(2014, 3, 3, 5, 30).endOf('hour').toISO(); //=> '2014-03-03T05:59:59.999-05:00'\n * @return {DateTime}\n */\n\n\n DateTime.prototype.endOf = function endOf(unit) {\n var _startOf$plus;\n\n return this.isValid ? this.startOf(unit).plus((_startOf$plus = {}, _startOf$plus[unit] = 1, _startOf$plus)).minus(1) : this;\n };\n\n // OUTPUT\n\n /**\n * Returns a string representation of this DateTime formatted according to the specified format string.\n * **You may not want this.** See {@link toLocaleString} for a more flexible formatting tool. See the documentation for the specific format tokens supported.\n * Defaults to en-US if no locale has been specified, regardless of the system's locale\n * @param {string} fmt - the format string\n * @param {Object} opts - options\n * @param {boolean} opts.round - round numerical values\n * @example DateTime.local().toFormat('yyyy LLL dd') //=> '2017 Apr 22'\n * @example DateTime.local().setLocale('fr').toFormat('yyyy LLL dd') //=> '2017 avr. 22'\n * @example DateTime.local().toFormat(\"HH 'hours and' mm 'minutes'\") //=> '20 hours and 55 minutes'\n * @return {string}\n */\n\n\n DateTime.prototype.toFormat = function toFormat(fmt) {\n var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n return this.isValid ? Formatter.create(this.loc.redefaultToEN(), opts).formatDateTimeFromString(this, fmt) : INVALID$2;\n };\n\n /**\n * Returns a localized string representing this date. Accepts the same options as the Intl.DateTimeFormat constructor and any presets defined by Luxon, such as `DateTime.DATE_FULL` or `DateTime.TIME_SIMPLE`.\n * The exact behavior of this method is browser-specific, but in general it will return an appropriate representation.\n * of the DateTime in the assigned locale.\n * Defaults to the system's locale if no locale has been specified\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n * @param opts {Object} - Intl.DateTimeFormat constructor options\n * @example DateTime.local().toLocaleString(); //=> 4/20/2017\n * @example DateTime.local().setLocale('en-gb').toLocaleString(); //=> '20/04/2017'\n * @example DateTime.local().toLocaleString(DateTime.DATE_FULL); //=> 'April 20, 2017'\n * @example DateTime.local().toLocaleString(DateTime.TIME_SIMPLE); //=> '11:32 AM'\n * @example DateTime.local().toLocaleString(DateTime.DATETIME_SHORT); //=> '4/20/2017, 11:32 AM'\n * @example DateTime.local().toLocaleString({weekday: 'long', month: 'long', day: '2-digit'}); //=> 'Thu, Apr 20'\n * @example DateTime.local().toLocaleString({weekday: 'long', month: 'long', day: '2-digit', hour: '2-digit', minute: '2-digit'}); //=> 'Thu, Apr 20, 11:27'\n * @example DateTime.local().toLocaleString({hour: '2-digit', minute: '2-digit'}); //=> '11:32'\n * @return {string}\n */\n\n\n DateTime.prototype.toLocaleString = function toLocaleString() {\n var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DATE_SHORT;\n\n return this.isValid ? Formatter.create(this.loc.clone(opts), opts).formatDateTime(this) : INVALID$2;\n };\n\n /**\n * Returns an array of format \"parts\", i.e. individual tokens along with metadata. This is allows callers to post-process individual sections of the formatted output.\n * Defaults to the system's locale if no locale has been specified\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat/formatToParts\n * @param opts {Object} - Intl.DateTimeFormat constructor options, same as `toLocaleString`.\n * @example DateTime.local().toLocaleString(); //=> [\n * //=> { type: 'day', value: '25' },\n * //=> { type: 'literal', value: '/' },\n * //=> { type: 'month', value: '05' },\n * //=> { type: 'literal', value: '/' },\n * //=> { type: 'year', value: '1982' }\n * //=> ]\n */\n\n\n DateTime.prototype.toLocaleParts = function toLocaleParts() {\n var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n return this.isValid ? Formatter.create(this.loc.clone(opts), opts).formatDateTimeParts(this) : [];\n };\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime\n * @param {Object} opts - options\n * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @example DateTime.utc(1982, 5, 25).toISO() //=> '1982-05-25T00:00:00.000Z'\n * @example DateTime.local().toISO() //=> '2017-04-22T20:47:05.335-04:00'\n * @example DateTime.local().toISO({ includeOffset: false }) //=> '2017-04-22T20:47:05.335'\n * @return {string}\n */\n\n\n DateTime.prototype.toISO = function toISO() {\n var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (!this.isValid) {\n return null;\n }\n\n return this.toISODate() + 'T' + this.toISOTime(opts);\n };\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime's date component\n * @example DateTime.utc(1982, 5, 25).toISODate() //=> '1982-05-25'\n * @return {string}\n */\n\n\n DateTime.prototype.toISODate = function toISODate() {\n return toTechFormat(this, 'yyyy-MM-dd');\n };\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime's week date\n * @example DateTime.utc(1982, 5, 25).toISOWeekDate() //=> '1982-W21-2'\n * @return {string}\n */\n\n\n DateTime.prototype.toISOWeekDate = function toISOWeekDate() {\n return toTechFormat(this, \"kkkk-'W'WW-c\");\n };\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime's time component\n * @param {Object} opts - options\n * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @example DateTime.utc().hour(7).minute(34).toISOTime() //=> '07:34:19.361Z'\n * @example DateTime.utc().hour(7).minute(34).toISOTime({ suppressSeconds: true }) //=> '07:34Z'\n * @return {string}\n */\n\n\n DateTime.prototype.toISOTime = function toISOTime() {\n var _ref6 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref6$suppressMillise = _ref6.suppressMilliseconds,\n suppressMilliseconds = _ref6$suppressMillise === undefined ? false : _ref6$suppressMillise,\n _ref6$suppressSeconds = _ref6.suppressSeconds,\n suppressSeconds = _ref6$suppressSeconds === undefined ? false : _ref6$suppressSeconds,\n _ref6$includeOffset = _ref6.includeOffset,\n includeOffset = _ref6$includeOffset === undefined ? true : _ref6$includeOffset;\n\n return toTechTimeFormat(this, { suppressSeconds: suppressSeconds, suppressMilliseconds: suppressMilliseconds, includeOffset: includeOffset });\n };\n\n /**\n * Returns an RFC 2822-compatible string representation of this DateTime, always in UTC\n * @example DateTime.utc(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 +0000'\n * @example DateTime.local(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 -0400'\n * @return {string}\n */\n\n\n DateTime.prototype.toRFC2822 = function toRFC2822() {\n return toTechFormat(this, 'EEE, dd LLL yyyy hh:mm:ss ZZZ');\n };\n\n /**\n * Returns a string representation of this DateTime appropriate for use in HTTP headers.\n * Specifically, the string conforms to RFC 1123.\n * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1\n * @example DateTime.utc(2014, 7, 13).toHTTP() //=> 'Sun, 13 Jul 2014 00:00:00 GMT'\n * @example DateTime.utc(2014, 7, 13, 19).toHTTP() //=> 'Sun, 13 Jul 2014 19:00:00 GMT'\n * @return {string}\n */\n\n\n DateTime.prototype.toHTTP = function toHTTP() {\n return toTechFormat(this.toUTC(), \"EEE, dd LLL yyyy HH:mm:ss 'GMT'\");\n };\n\n /**\n * Returns a string representation of this DateTime appropriate for use in SQL Date\n * @example DateTime.utc(2014, 7, 13).toSQLDate() //=> '2014-07-13'\n * @return {string}\n */\n\n\n DateTime.prototype.toSQLDate = function toSQLDate() {\n return toTechFormat(this, 'yyyy-MM-dd');\n };\n\n /**\n * Returns a string representation of this DateTime appropriate for use in SQL Time\n * @param {Object} opts - options\n * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overides includeOffset.\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @example DateTime.utc().toSQL() //=> '05:15:16.345'\n * @example DateTime.local().toSQL() //=> '05:15:16.345 -04:00'\n * @example DateTime.local().toSQL({ includeOffset: false }) //=> '05:15:16.345'\n * @example DateTime.local().toSQL({ includeZone: false }) //=> '05:15:16.345 America/New_York'\n * @return {string}\n */\n\n\n DateTime.prototype.toSQLTime = function toSQLTime() {\n var _ref7 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref7$includeOffset = _ref7.includeOffset,\n includeOffset = _ref7$includeOffset === undefined ? true : _ref7$includeOffset,\n _ref7$includeZone = _ref7.includeZone,\n includeZone = _ref7$includeZone === undefined ? false : _ref7$includeZone;\n\n return toTechTimeFormat(this, { includeOffset: includeOffset, includeZone: includeZone, spaceZone: true });\n };\n\n /**\n * Returns a string representation of this DateTime appropriate for use in SQL DateTime\n * @param {Object} opts - options\n * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset.\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @example DateTime.utc(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 Z'\n * @example DateTime.local(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 -04:00'\n * @example DateTime.local(2014, 7, 13).toSQL({ includeOffset: false }) //=> '2014-07-13 00:00:00.000'\n * @example DateTime.local(2014, 7, 13).toSQL({ includeZone: false }) //=> '2014-07-13 00:00:00.000 America/New_York'\n * @return {string}\n */\n\n\n DateTime.prototype.toSQL = function toSQL() {\n var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (!this.isValid) {\n return null;\n }\n\n return this.toSQLDate() + ' ' + this.toSQLTime(opts);\n };\n\n /**\n * Returns a string representation of this DateTime appropriate for debugging\n * @return {string}\n */\n\n\n DateTime.prototype.toString = function toString() {\n return this.isValid ? this.toISO() : INVALID$2;\n };\n\n /**\n * Returns a string representation of this DateTime appropriate for the REPL.\n * @return {string}\n */\n\n\n DateTime.prototype.inspect = function inspect() {\n if (this.isValid) {\n return 'DateTime {\\n ts: ' + this.toISO() + ',\\n zone: ' + this.zone.name + ',\\n locale: ' + this.locale + ' }';\n } else {\n return 'DateTime { Invalid, reason: ' + this.invalidReason + ' }';\n }\n };\n\n /**\n * Returns the epoch milliseconds of this DateTime\n * @return {number}\n */\n\n\n DateTime.prototype.valueOf = function valueOf() {\n return this.isValid ? this.ts : NaN;\n };\n\n /**\n * Returns the epoch milliseconds of this DateTime. Alias of {@link valueOf}\n * @return {number}\n */\n\n\n DateTime.prototype.toMillis = function toMillis() {\n return this.valueOf();\n };\n\n /**\n * Returns an ISO 8601 representation of this DateTime appropriate for use in JSON.\n * @return {string}\n */\n\n\n DateTime.prototype.toJSON = function toJSON() {\n return this.toISO();\n };\n\n /**\n * Returns a Javascript object with this DateTime's year, month, day, and so on.\n * @param opts - options for generating the object\n * @param {boolean} [opts.includeConfig=false] - include configuration attributes in the output\n * @example DateTime.local().toObject() //=> { year: 2017, month: 4, day: 22, hour: 20, minute: 49, second: 42, millisecond: 268 }\n * @return {Object}\n */\n\n\n DateTime.prototype.toObject = function toObject() {\n var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (!this.isValid) return {};\n\n var base = Object.assign({}, this.c);\n\n if (opts.includeConfig) {\n base.outputCalendar = this.outputCalendar;\n base.numberingSystem = this.loc.numberingSystem;\n base.locale = this.loc.locale;\n }\n return base;\n };\n\n /**\n * Returns a Javascript Date equivalent to this DateTime.\n * @return {Date}\n */\n\n\n DateTime.prototype.toJSDate = function toJSDate() {\n return new Date(this.isValid ? this.ts : NaN);\n };\n\n // COMPARE\n\n /**\n * Return the difference between two DateTimes as a Duration.\n * @param {DateTime} otherDateTime - the DateTime to compare this one to\n * @param {string|string[]} [unit=['milliseconds']] - the unit or array of units (such as 'hours' or 'days') to include in the duration.\n * @param {Object} opts - options that affect the creation of the Duration\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @example\n * var i1 = DateTime.fromISO('1982-05-25T09:45'),\n * i2 = DateTime.fromISO('1983-10-14T10:30');\n * i2.diff(i1).toObject() //=> { milliseconds: 43807500000 }\n * i2.diff(i1, 'hours').toObject() //=> { hours: 12168.75 }\n * i2.diff(i1, ['months', 'days']).toObject() //=> { months: 16, days: 19.03125 }\n * i2.diff(i1, ['months', 'days', 'hours']).toObject() //=> { months: 16, days: 19, hours: 0.75 }\n * @return {Duration}\n */\n\n\n DateTime.prototype.diff = function diff(otherDateTime) {\n var unit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'milliseconds';\n var opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (!this.isValid || !otherDateTime.isValid) return Duration.invalid(this.invalidReason || otherDateTime.invalidReason);\n\n var units = maybeArray(unit).map(Duration.normalizeUnit),\n otherIsLater = otherDateTime.valueOf() > this.valueOf(),\n earlier = otherIsLater ? this : otherDateTime,\n later = otherIsLater ? otherDateTime : this,\n diffed = _diff(earlier, later, units, opts);\n\n return otherIsLater ? diffed.negate() : diffed;\n };\n\n /**\n * Return the difference between this DateTime and right now.\n * See {@link diff}\n * @param {string|string[]} [unit=['milliseconds']] - the unit or units units (such as 'hours' or 'days') to include in the duration\n * @param {Object} opts - options that affect the creation of the Duration\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @return {Duration}\n */\n\n\n DateTime.prototype.diffNow = function diffNow() {\n var unit = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'milliseconds';\n var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n return this.diff(DateTime.local(), unit, opts);\n };\n\n /**\n * Return an Interval spanning between this DateTime and another DateTime\n * @param {DateTime} otherDateTime - the other end point of the Interval\n * @return {Interval}\n */\n\n\n DateTime.prototype.until = function until(otherDateTime) {\n return this.isValid ? Interval.fromDateTimes(this, otherDateTime) : this;\n };\n\n /**\n * Return whether this DateTime is in the same unit of time as another DateTime\n * @param {DateTime} otherDateTime - the other DateTime\n * @param {string} unit - the unit of time to check sameness on\n * @example DateTime.local().hasSame(otherDT, 'day'); //~> true if both the same calendar day\n * @return {boolean}\n */\n\n\n DateTime.prototype.hasSame = function hasSame(otherDateTime, unit) {\n if (!this.isValid) return false;\n if (unit === 'millisecond') {\n return this.valueOf() === otherDateTime.valueOf();\n } else {\n var inputMs = otherDateTime.valueOf();\n return this.startOf(unit) <= inputMs && inputMs <= this.endOf(unit);\n }\n };\n\n /**\n * Equality check\n * Two DateTimes are equal iff they represent the same millisecond\n * @param {DateTime} other - the other DateTime\n * @return {boolean}\n */\n\n\n DateTime.prototype.equals = function equals(other) {\n return this.isValid && other.isValid ? this.valueOf() === other.valueOf() && this.zone.equals(other.zone) && this.loc.equals(other.loc) : false;\n };\n\n /**\n * Return the min of several date times\n * @param {...DateTime} dateTimes - the DateTimes from which to choose the minimum\n * @return {DateTime} the min DateTime, or undefined if called with no argument\n */\n\n\n DateTime.min = function min() {\n for (var _len = arguments.length, dateTimes = Array(_len), _key = 0; _key < _len; _key++) {\n dateTimes[_key] = arguments[_key];\n }\n\n return bestBy(dateTimes, function (i) {\n return i.valueOf();\n }, Math.min);\n };\n\n /**\n * Return the max of several date times\n * @param {...DateTime} dateTimes - the DateTimes from which to choose the maximum\n * @return {DateTime} the max DateTime, or undefined if called with no argument\n */\n\n\n DateTime.max = function max() {\n for (var _len2 = arguments.length, dateTimes = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n dateTimes[_key2] = arguments[_key2];\n }\n\n return bestBy(dateTimes, function (i) {\n return i.valueOf();\n }, Math.max);\n };\n\n // MISC\n\n /**\n * Explain how a string would be parsed by fromFormat()\n * @param {string} text - the string to parse\n * @param {string} fmt - the format the string is expected to be in (see description)\n * @param {Object} options - options taken by fromFormat()\n * @return {Object}\n */\n\n\n DateTime.fromFormatExplain = function fromFormatExplain(text, fmt) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var _options$locale2 = options.locale,\n locale = _options$locale2 === undefined ? null : _options$locale2,\n _options$numberingSys2 = options.numberingSystem,\n numberingSystem = _options$numberingSys2 === undefined ? null : _options$numberingSys2,\n localeToUse = Locale.fromOpts({ locale: locale, numberingSystem: numberingSystem, defaultToEN: true });\n\n return explainFromTokens(localeToUse, text, fmt);\n };\n\n /**\n * @deprecated use fromFormatExplain instead\n */\n\n\n DateTime.fromStringExplain = function fromStringExplain(text, fmt) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n return DateTime.fromFormatExplain(text, fmt, options);\n };\n\n // FORMAT PRESETS\n\n /**\n * {@link toLocaleString} format like 10/14/1983\n * @type {Object}\n */\n\n\n createClass(DateTime, [{\n key: 'isValid',\n get: function get$$1() {\n return this.invalidReason === null;\n }\n\n /**\n * Returns an explanation of why this DateTime became invalid, or null if the DateTime is valid\n * @type {string}\n */\n\n }, {\n key: 'invalidReason',\n get: function get$$1() {\n return this.invalid;\n }\n\n /**\n * Get the locale of a DateTime, such 'en-GB'. The locale is used when formatting the DateTime\n *\n * @type {string}\n */\n\n }, {\n key: 'locale',\n get: function get$$1() {\n return this.isValid ? this.loc.locale : null;\n }\n\n /**\n * Get the numbering system of a DateTime, such 'beng'. The numbering system is used when formatting the DateTime\n *\n * @type {string}\n */\n\n }, {\n key: 'numberingSystem',\n get: function get$$1() {\n return this.isValid ? this.loc.numberingSystem : null;\n }\n\n /**\n * Get the output calendar of a DateTime, such 'islamic'. The output calendar is used when formatting the DateTime\n *\n * @type {string}\n */\n\n }, {\n key: 'outputCalendar',\n get: function get$$1() {\n return this.isValid ? this.loc.outputCalendar : null;\n }\n\n /**\n * Get the name of the time zone.\n * @type {string}\n */\n\n }, {\n key: 'zoneName',\n get: function get$$1() {\n return this.isValid ? this.zone.name : null;\n }\n\n /**\n * Get the year\n * @example DateTime.local(2017, 5, 25).year //=> 2017\n * @type {number}\n */\n\n }, {\n key: 'year',\n get: function get$$1() {\n return this.isValid ? this.c.year : NaN;\n }\n\n /**\n * Get the quarter\n * @example DateTime.local(2017, 5, 25).quarter //=> 2\n * @type {number}\n */\n\n }, {\n key: 'quarter',\n get: function get$$1() {\n return this.isValid ? Math.ceil(this.c.month / 3) : NaN;\n }\n /**\n * Get the month (1-12).\n * @example DateTime.local(2017, 5, 25).month //=> 5\n * @type {number}\n */\n\n }, {\n key: 'month',\n get: function get$$1() {\n return this.isValid ? this.c.month : NaN;\n }\n\n /**\n * Get the day of the month (1-30ish).\n * @example DateTime.local(2017, 5, 25).day //=> 25\n * @type {number}\n */\n\n }, {\n key: 'day',\n get: function get$$1() {\n return this.isValid ? this.c.day : NaN;\n }\n\n /**\n * Get the hour of the day (0-23).\n * @example DateTime.local(2017, 5, 25, 9).hour //=> 9\n * @type {number}\n */\n\n }, {\n key: 'hour',\n get: function get$$1() {\n return this.isValid ? this.c.hour : NaN;\n }\n\n /**\n * Get the minute of the hour (0-59).\n * @example DateTime.local(2017, 5, 25, 9, 30).minute //=> 30\n * @type {number}\n */\n\n }, {\n key: 'minute',\n get: function get$$1() {\n return this.isValid ? this.c.minute : NaN;\n }\n\n /**\n * Get the second of the minute (0-59).\n * @example DateTime.local(2017, 5, 25, 9, 30, 52).second //=> 52\n * @type {number}\n */\n\n }, {\n key: 'second',\n get: function get$$1() {\n return this.isValid ? this.c.second : NaN;\n }\n\n /**\n * Get the millisecond of the second (0-999).\n * @example DateTime.local(2017, 5, 25, 9, 30, 52, 654).millisecond //=> 654\n * @type {number}\n */\n\n }, {\n key: 'millisecond',\n get: function get$$1() {\n return this.isValid ? this.c.millisecond : NaN;\n }\n\n /**\n * Get the week year\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2014, 11, 31).weekYear //=> 2015\n * @type {number}\n */\n\n }, {\n key: 'weekYear',\n get: function get$$1() {\n return this.isValid ? possiblyCachedWeekData(this).weekYear : NaN;\n }\n\n /**\n * Get the week number of the week year (1-52ish).\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2017, 5, 25).weekNumber //=> 21\n * @type {number}\n */\n\n }, {\n key: 'weekNumber',\n get: function get$$1() {\n return this.isValid ? possiblyCachedWeekData(this).weekNumber : NaN;\n }\n\n /**\n * Get the day of the week.\n * 1 is Monday and 7 is Sunday\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2014, 11, 31).weekday //=> 4\n * @type {number}\n */\n\n }, {\n key: 'weekday',\n get: function get$$1() {\n return this.isValid ? possiblyCachedWeekData(this).weekday : NaN;\n }\n\n /**\n * Get the ordinal (i.e. the day of the year)\n * @example DateTime.local(2017, 5, 25).ordinal //=> 145\n * @type {number|DateTime}\n */\n\n }, {\n key: 'ordinal',\n get: function get$$1() {\n return this.isValid ? gregorianToOrdinal(this.c).ordinal : NaN;\n }\n\n /**\n * Get the human readable short month name, such as 'Oct'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).monthShort //=> Oct\n * @type {string}\n */\n\n }, {\n key: 'monthShort',\n get: function get$$1() {\n return this.isValid ? Info.months('short', { locale: this.locale })[this.month - 1] : null;\n }\n\n /**\n * Get the human readable long month name, such as 'October'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).monthLong //=> October\n * @type {string}\n */\n\n }, {\n key: 'monthLong',\n get: function get$$1() {\n return this.isValid ? Info.months('long', { locale: this.locale })[this.month - 1] : null;\n }\n\n /**\n * Get the human readable short weekday, such as 'Mon'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).weekdayShort //=> Mon\n * @type {string}\n */\n\n }, {\n key: 'weekdayShort',\n get: function get$$1() {\n return this.isValid ? Info.weekdays('short', { locale: this.locale })[this.weekday - 1] : null;\n }\n\n /**\n * Get the human readable long weekday, such as 'Monday'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).weekdayLong //=> Monday\n * @type {string}\n */\n\n }, {\n key: 'weekdayLong',\n get: function get$$1() {\n return this.isValid ? Info.weekdays('long', { locale: this.locale })[this.weekday - 1] : null;\n }\n\n /**\n * Get the UTC offset of this DateTime in minutes\n * @example DateTime.local().offset //=> -240\n * @example DateTime.utc().offset //=> 0\n * @type {number}\n */\n\n }, {\n key: 'offset',\n get: function get$$1() {\n return this.isValid ? this.zone.offset(this.ts) : NaN;\n }\n\n /**\n * Get the short human name for the zone's current offset, for example \"EST\" or \"EDT\".\n * Defaults to the system's locale if no locale has been specified\n * @type {string}\n */\n\n }, {\n key: 'offsetNameShort',\n get: function get$$1() {\n if (this.isValid) {\n return this.zone.offsetName(this.ts, {\n format: 'short',\n locale: this.locale\n });\n } else {\n return null;\n }\n }\n\n /**\n * Get the long human name for the zone's current offset, for example \"Eastern Standard Time\" or \"Eastern Daylight Time\".\n * Defaults to the system's locale if no locale has been specified\n * @type {string}\n */\n\n }, {\n key: 'offsetNameLong',\n get: function get$$1() {\n if (this.isValid) {\n return this.zone.offsetName(this.ts, {\n format: 'long',\n locale: this.locale\n });\n } else {\n return null;\n }\n }\n\n /**\n * Get whether this zone's offset ever changes, as in a DST.\n * @type {boolean}\n */\n\n }, {\n key: 'isOffsetFixed',\n get: function get$$1() {\n return this.isValid ? this.zone.universal : null;\n }\n\n /**\n * Get whether the DateTime is in a DST.\n * @type {boolean}\n */\n\n }, {\n key: 'isInDST',\n get: function get$$1() {\n if (this.isOffsetFixed) {\n return false;\n } else {\n return this.offset > this.set({ month: 1 }).offset || this.offset > this.set({ month: 5 }).offset;\n }\n }\n\n /**\n * Returns true if this DateTime is in a leap year, false otherwise\n * @example DateTime.local(2016).isInLeapYear //=> true\n * @example DateTime.local(2013).isInLeapYear //=> false\n * @type {boolean}\n */\n\n }, {\n key: 'isInLeapYear',\n get: function get$$1() {\n return isLeapYear(this.year);\n }\n\n /**\n * Returns the number of days in this DateTime's month\n * @example DateTime.local(2016, 2).daysInMonth //=> 29\n * @example DateTime.local(2016, 3).daysInMonth //=> 31\n * @type {number}\n */\n\n }, {\n key: 'daysInMonth',\n get: function get$$1() {\n return daysInMonth(this.year, this.month);\n }\n\n /**\n * Returns the number of days in this DateTime's year\n * @example DateTime.local(2016).daysInYear //=> 366\n * @example DateTime.local(2013).daysInYear //=> 365\n * @type {number}\n */\n\n }, {\n key: 'daysInYear',\n get: function get$$1() {\n return this.isValid ? daysInYear(this.year) : NaN;\n }\n\n /**\n * Returns the number of weeks in this DateTime's year\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2004).weeksInWeekYear //=> 53\n * @example DateTime.local(2013).weeksInWeekYear //=> 52\n * @type {number}\n */\n\n }, {\n key: 'weeksInWeekYear',\n get: function get$$1() {\n return this.isValid ? weeksInWeekYear(this.weekYear) : NaN;\n }\n }], [{\n key: 'DATE_SHORT',\n get: function get$$1() {\n return DATE_SHORT;\n }\n\n /**\n * {@link toLocaleString} format like 'Oct 14, 1983'\n * @type {Object}\n */\n\n }, {\n key: 'DATE_MED',\n get: function get$$1() {\n return DATE_MED;\n }\n\n /**\n * {@link toLocaleString} format like 'October 14, 1983'\n * @type {Object}\n */\n\n }, {\n key: 'DATE_FULL',\n get: function get$$1() {\n return DATE_FULL;\n }\n\n /**\n * {@link toLocaleString} format like 'Tuesday, October 14, 1983'\n * @type {Object}\n */\n\n }, {\n key: 'DATE_HUGE',\n get: function get$$1() {\n return DATE_HUGE;\n }\n\n /**\n * {@link toLocaleString} format like '09:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n\n }, {\n key: 'TIME_SIMPLE',\n get: function get$$1() {\n return TIME_SIMPLE;\n }\n\n /**\n * {@link toLocaleString} format like '09:30:23 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n\n }, {\n key: 'TIME_WITH_SECONDS',\n get: function get$$1() {\n return TIME_WITH_SECONDS;\n }\n\n /**\n * {@link toLocaleString} format like '09:30:23 AM EDT'. Only 12-hour if the locale is.\n * @type {Object}\n */\n\n }, {\n key: 'TIME_WITH_SHORT_OFFSET',\n get: function get$$1() {\n return TIME_WITH_SHORT_OFFSET;\n }\n\n /**\n * {@link toLocaleString} format like '09:30:23 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n * @type {Object}\n */\n\n }, {\n key: 'TIME_WITH_LONG_OFFSET',\n get: function get$$1() {\n return TIME_WITH_LONG_OFFSET;\n }\n\n /**\n * {@link toLocaleString} format like '09:30', always 24-hour.\n * @type {Object}\n */\n\n }, {\n key: 'TIME_24_SIMPLE',\n get: function get$$1() {\n return TIME_24_SIMPLE;\n }\n\n /**\n * {@link toLocaleString} format like '09:30:23', always 24-hour.\n * @type {Object}\n */\n\n }, {\n key: 'TIME_24_WITH_SECONDS',\n get: function get$$1() {\n return TIME_24_WITH_SECONDS;\n }\n\n /**\n * {@link toLocaleString} format like '09:30:23 EDT', always 24-hour.\n * @type {Object}\n */\n\n }, {\n key: 'TIME_24_WITH_SHORT_OFFSET',\n get: function get$$1() {\n return TIME_24_WITH_SHORT_OFFSET;\n }\n\n /**\n * {@link toLocaleString} format like '09:30:23 Eastern Daylight Time', always 24-hour.\n * @type {Object}\n */\n\n }, {\n key: 'TIME_24_WITH_LONG_OFFSET',\n get: function get$$1() {\n return TIME_24_WITH_LONG_OFFSET;\n }\n\n /**\n * {@link toLocaleString} format like '10/14/1983, 9:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n\n }, {\n key: 'DATETIME_SHORT',\n get: function get$$1() {\n return DATETIME_SHORT;\n }\n\n /**\n * {@link toLocaleString} format like '10/14/1983, 9:30:33 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n\n }, {\n key: 'DATETIME_SHORT_WITH_SECONDS',\n get: function get$$1() {\n return DATETIME_SHORT_WITH_SECONDS;\n }\n\n /**\n * {@link toLocaleString} format like 'Oct 14, 1983, 9:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n\n }, {\n key: 'DATETIME_MED',\n get: function get$$1() {\n return DATETIME_MED;\n }\n\n /**\n * {@link toLocaleString} format like 'Oct 14, 1983, 9:30:33 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n\n }, {\n key: 'DATETIME_MED_WITH_SECONDS',\n get: function get$$1() {\n return DATETIME_MED_WITH_SECONDS;\n }\n\n /**\n * {@link toLocaleString} format like 'October 14, 1983, 9:30 AM EDT'. Only 12-hour if the locale is.\n * @type {Object}\n */\n\n }, {\n key: 'DATETIME_FULL',\n get: function get$$1() {\n return DATETIME_FULL;\n }\n\n /**\n * {@link toLocaleString} format like 'October 14, 1983, 9:303 AM EDT'. Only 12-hour if the locale is.\n * @type {Object}\n */\n\n }, {\n key: 'DATETIME_FULL_WITH_SECONDS',\n get: function get$$1() {\n return DATETIME_FULL_WITH_SECONDS;\n }\n\n /**\n * {@link toLocaleString} format like 'Friday, October 14, 1983, 9:30 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n * @type {Object}\n */\n\n }, {\n key: 'DATETIME_HUGE',\n get: function get$$1() {\n return DATETIME_HUGE;\n }\n\n /**\n * {@link toLocaleString} format like 'Friday, October 14, 1983, 9:30:33 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n * @type {Object}\n */\n\n }, {\n key: 'DATETIME_HUGE_WITH_SECONDS',\n get: function get$$1() {\n return DATETIME_HUGE_WITH_SECONDS;\n }\n }]);\n return DateTime;\n}();\nfunction friendlyDateTime(dateTimeish) {\n if (dateTimeish instanceof DateTime) {\n return dateTimeish;\n } else if (dateTimeish.valueOf && isNumber(dateTimeish.valueOf())) {\n return DateTime.fromJSDate(dateTimeish);\n } else if (dateTimeish instanceof Object) {\n return DateTime.fromObject(dateTimeish);\n } else {\n throw new InvalidArgumentError('Unknown datetime argument');\n }\n}\n\nexports.DateTime = DateTime;\nexports.Duration = Duration;\nexports.Interval = Interval;\nexports.Info = Info;\nexports.Zone = Zone;\nexports.FixedOffsetZone = FixedOffsetZone;\nexports.IANAZone = IANAZone;\nexports.LocalZone = LocalZone;\nexports.Settings = Settings;\n//# sourceMappingURL=luxon.js.map\n","/**\n * Root reference for iframes.\n */\n\nvar root;\nif (typeof window !== 'undefined') { // Browser window\n root = window;\n} else if (typeof self !== 'undefined') { // Web Worker\n root = self;\n} else { // Other environments\n console.warn(\"Using browser-only version of superagent in non-browser environment\");\n root = this;\n}\n\nvar Emitter = require('emitter');\nvar requestBase = require('./request-base');\nvar isObject = require('./is-object');\n\n/**\n * Noop.\n */\n\nfunction noop(){};\n\n/**\n * Expose `request`.\n */\n\nvar request = module.exports = require('./request').bind(null, Request);\n\n/**\n * Determine XHR.\n */\n\nrequest.getXHR = function () {\n if (root.XMLHttpRequest\n && (!root.location || 'file:' != root.location.protocol\n || !root.ActiveXObject)) {\n return new XMLHttpRequest;\n } else {\n try { return new ActiveXObject('Microsoft.XMLHTTP'); } catch(e) {}\n try { return new ActiveXObject('Msxml2.XMLHTTP.6.0'); } catch(e) {}\n try { return new ActiveXObject('Msxml2.XMLHTTP.3.0'); } catch(e) {}\n try { return new ActiveXObject('Msxml2.XMLHTTP'); } catch(e) {}\n }\n throw Error(\"Browser-only verison of superagent could not find XHR\");\n};\n\n/**\n * Removes leading and trailing whitespace, added to support IE.\n *\n * @param {String} s\n * @return {String}\n * @api private\n */\n\nvar trim = ''.trim\n ? function(s) { return s.trim(); }\n : function(s) { return s.replace(/(^\\s*|\\s*$)/g, ''); };\n\n/**\n * Serialize the given `obj`.\n *\n * @param {Object} obj\n * @return {String}\n * @api private\n */\n\nfunction serialize(obj) {\n if (!isObject(obj)) return obj;\n var pairs = [];\n for (var key in obj) {\n pushEncodedKeyValuePair(pairs, key, obj[key]);\n }\n return pairs.join('&');\n}\n\n/**\n * Helps 'serialize' with serializing arrays.\n * Mutates the pairs array.\n *\n * @param {Array} pairs\n * @param {String} key\n * @param {Mixed} val\n */\n\nfunction pushEncodedKeyValuePair(pairs, key, val) {\n if (val != null) {\n if (Array.isArray(val)) {\n val.forEach(function(v) {\n pushEncodedKeyValuePair(pairs, key, v);\n });\n } else if (isObject(val)) {\n for(var subkey in val) {\n pushEncodedKeyValuePair(pairs, key + '[' + subkey + ']', val[subkey]);\n }\n } else {\n pairs.push(encodeURIComponent(key)\n + '=' + encodeURIComponent(val));\n }\n } else if (val === null) {\n pairs.push(encodeURIComponent(key));\n }\n}\n\n/**\n * Expose serialization method.\n */\n\n request.serializeObject = serialize;\n\n /**\n * Parse the given x-www-form-urlencoded `str`.\n *\n * @param {String} str\n * @return {Object}\n * @api private\n */\n\nfunction parseString(str) {\n var obj = {};\n var pairs = str.split('&');\n var pair;\n var pos;\n\n for (var i = 0, len = pairs.length; i < len; ++i) {\n pair = pairs[i];\n pos = pair.indexOf('=');\n if (pos == -1) {\n obj[decodeURIComponent(pair)] = '';\n } else {\n obj[decodeURIComponent(pair.slice(0, pos))] =\n decodeURIComponent(pair.slice(pos + 1));\n }\n }\n\n return obj;\n}\n\n/**\n * Expose parser.\n */\n\nrequest.parseString = parseString;\n\n/**\n * Default MIME type map.\n *\n * superagent.types.xml = 'application/xml';\n *\n */\n\nrequest.types = {\n html: 'text/html',\n json: 'application/json',\n xml: 'application/xml',\n urlencoded: 'application/x-www-form-urlencoded',\n 'form': 'application/x-www-form-urlencoded',\n 'form-data': 'application/x-www-form-urlencoded'\n};\n\n/**\n * Default serialization map.\n *\n * superagent.serialize['application/xml'] = function(obj){\n * return 'generated xml here';\n * };\n *\n */\n\n request.serialize = {\n 'application/x-www-form-urlencoded': serialize,\n 'application/json': JSON.stringify\n };\n\n /**\n * Default parsers.\n *\n * superagent.parse['application/xml'] = function(str){\n * return { object parsed from str };\n * };\n *\n */\n\nrequest.parse = {\n 'application/x-www-form-urlencoded': parseString,\n 'application/json': JSON.parse\n};\n\n/**\n * Parse the given header `str` into\n * an object containing the mapped fields.\n *\n * @param {String} str\n * @return {Object}\n * @api private\n */\n\nfunction parseHeader(str) {\n var lines = str.split(/\\r?\\n/);\n var fields = {};\n var index;\n var line;\n var field;\n var val;\n\n lines.pop(); // trailing CRLF\n\n for (var i = 0, len = lines.length; i < len; ++i) {\n line = lines[i];\n index = line.indexOf(':');\n field = line.slice(0, index).toLowerCase();\n val = trim(line.slice(index + 1));\n fields[field] = val;\n }\n\n return fields;\n}\n\n/**\n * Check if `mime` is json or has +json structured syntax suffix.\n *\n * @param {String} mime\n * @return {Boolean}\n * @api private\n */\n\nfunction isJSON(mime) {\n return /[\\/+]json\\b/.test(mime);\n}\n\n/**\n * Return the mime type for the given `str`.\n *\n * @param {String} str\n * @return {String}\n * @api private\n */\n\nfunction type(str){\n return str.split(/ *; */).shift();\n};\n\n/**\n * Return header field parameters.\n *\n * @param {String} str\n * @return {Object}\n * @api private\n */\n\nfunction params(str){\n return str.split(/ *; */).reduce(function(obj, str){\n var parts = str.split(/ *= */),\n key = parts.shift(),\n val = parts.shift();\n\n if (key && val) obj[key] = val;\n return obj;\n }, {});\n};\n\n/**\n * Initialize a new `Response` with the given `xhr`.\n *\n * - set flags (.ok, .error, etc)\n * - parse header\n *\n * Examples:\n *\n * Aliasing `superagent` as `request` is nice:\n *\n * request = superagent;\n *\n * We can use the promise-like API, or pass callbacks:\n *\n * request.get('/').end(function(res){});\n * request.get('/', function(res){});\n *\n * Sending data can be chained:\n *\n * request\n * .post('/user')\n * .send({ name: 'tj' })\n * .end(function(res){});\n *\n * Or passed to `.send()`:\n *\n * request\n * .post('/user')\n * .send({ name: 'tj' }, function(res){});\n *\n * Or passed to `.post()`:\n *\n * request\n * .post('/user', { name: 'tj' })\n * .end(function(res){});\n *\n * Or further reduced to a single call for simple cases:\n *\n * request\n * .post('/user', { name: 'tj' }, function(res){});\n *\n * @param {XMLHTTPRequest} xhr\n * @param {Object} options\n * @api private\n */\n\nfunction Response(req, options) {\n options = options || {};\n this.req = req;\n this.xhr = this.req.xhr;\n // responseText is accessible only if responseType is '' or 'text' and on older browsers\n this.text = ((this.req.method !='HEAD' && (this.xhr.responseType === '' || this.xhr.responseType === 'text')) || typeof this.xhr.responseType === 'undefined')\n ? this.xhr.responseText\n : null;\n this.statusText = this.req.xhr.statusText;\n this._setStatusProperties(this.xhr.status);\n this.header = this.headers = parseHeader(this.xhr.getAllResponseHeaders());\n // getAllResponseHeaders sometimes falsely returns \"\" for CORS requests, but\n // getResponseHeader still works. so we get content-type even if getting\n // other headers fails.\n this.header['content-type'] = this.xhr.getResponseHeader('content-type');\n this._setHeaderProperties(this.header);\n this.body = this.req.method != 'HEAD'\n ? this._parseBody(this.text ? this.text : this.xhr.response)\n : null;\n}\n\n/**\n * Get case-insensitive `field` value.\n *\n * @param {String} field\n * @return {String}\n * @api public\n */\n\nResponse.prototype.get = function(field){\n return this.header[field.toLowerCase()];\n};\n\n/**\n * Set header related properties:\n *\n * - `.type` the content type without params\n *\n * A response of \"Content-Type: text/plain; charset=utf-8\"\n * will provide you with a `.type` of \"text/plain\".\n *\n * @param {Object} header\n * @api private\n */\n\nResponse.prototype._setHeaderProperties = function(header){\n // content-type\n var ct = this.header['content-type'] || '';\n this.type = type(ct);\n\n // params\n var obj = params(ct);\n for (var key in obj) this[key] = obj[key];\n};\n\n/**\n * Parse the given body `str`.\n *\n * Used for auto-parsing of bodies. Parsers\n * are defined on the `superagent.parse` object.\n *\n * @param {String} str\n * @return {Mixed}\n * @api private\n */\n\nResponse.prototype._parseBody = function(str){\n var parse = request.parse[this.type];\n if (!parse && isJSON(this.type)) {\n parse = request.parse['application/json'];\n }\n return parse && str && (str.length || str instanceof Object)\n ? parse(str)\n : null;\n};\n\n/**\n * Set flags such as `.ok` based on `status`.\n *\n * For example a 2xx response will give you a `.ok` of __true__\n * whereas 5xx will be __false__ and `.error` will be __true__. The\n * `.clientError` and `.serverError` are also available to be more\n * specific, and `.statusType` is the class of error ranging from 1..5\n * sometimes useful for mapping respond colors etc.\n *\n * \"sugar\" properties are also defined for common cases. Currently providing:\n *\n * - .noContent\n * - .badRequest\n * - .unauthorized\n * - .notAcceptable\n * - .notFound\n *\n * @param {Number} status\n * @api private\n */\n\nResponse.prototype._setStatusProperties = function(status){\n // handle IE9 bug: http://stackoverflow.com/questions/10046972/msie-returns-status-code-of-1223-for-ajax-request\n if (status === 1223) {\n status = 204;\n }\n\n var type = status / 100 | 0;\n\n // status / class\n this.status = this.statusCode = status;\n this.statusType = type;\n\n // basics\n this.info = 1 == type;\n this.ok = 2 == type;\n this.clientError = 4 == type;\n this.serverError = 5 == type;\n this.error = (4 == type || 5 == type)\n ? this.toError()\n : false;\n\n // sugar\n this.accepted = 202 == status;\n this.noContent = 204 == status;\n this.badRequest = 400 == status;\n this.unauthorized = 401 == status;\n this.notAcceptable = 406 == status;\n this.notFound = 404 == status;\n this.forbidden = 403 == status;\n};\n\n/**\n * Return an `Error` representative of this response.\n *\n * @return {Error}\n * @api public\n */\n\nResponse.prototype.toError = function(){\n var req = this.req;\n var method = req.method;\n var url = req.url;\n\n var msg = 'cannot ' + method + ' ' + url + ' (' + this.status + ')';\n var err = new Error(msg);\n err.status = this.status;\n err.method = method;\n err.url = url;\n\n return err;\n};\n\n/**\n * Expose `Response`.\n */\n\nrequest.Response = Response;\n\n/**\n * Initialize a new `Request` with the given `method` and `url`.\n *\n * @param {String} method\n * @param {String} url\n * @api public\n */\n\nfunction Request(method, url) {\n var self = this;\n this._query = this._query || [];\n this.method = method;\n this.url = url;\n this.header = {}; // preserves header name case\n this._header = {}; // coerces header names to lowercase\n this.on('end', function(){\n var err = null;\n var res = null;\n\n try {\n res = new Response(self);\n } catch(e) {\n err = new Error('Parser is unable to parse the response');\n err.parse = true;\n err.original = e;\n // issue #675: return the raw response if the response parsing fails\n err.rawResponse = self.xhr && self.xhr.responseText ? self.xhr.responseText : null;\n // issue #876: return the http status code if the response parsing fails\n err.statusCode = self.xhr && self.xhr.status ? self.xhr.status : null;\n return self.callback(err);\n }\n\n self.emit('response', res);\n\n var new_err;\n try {\n if (res.status < 200 || res.status >= 300) {\n new_err = new Error(res.statusText || 'Unsuccessful HTTP response');\n new_err.original = err;\n new_err.response = res;\n new_err.status = res.status;\n }\n } catch(e) {\n new_err = e; // #985 touching res may cause INVALID_STATE_ERR on old Android\n }\n\n // #1000 don't catch errors from the callback to avoid double calling it\n if (new_err) {\n self.callback(new_err, res);\n } else {\n self.callback(null, res);\n }\n });\n}\n\n/**\n * Mixin `Emitter` and `requestBase`.\n */\n\nEmitter(Request.prototype);\nfor (var key in requestBase) {\n Request.prototype[key] = requestBase[key];\n}\n\n/**\n * Set Content-Type to `type`, mapping values from `request.types`.\n *\n * Examples:\n *\n * superagent.types.xml = 'application/xml';\n *\n * request.post('/')\n * .type('xml')\n * .send(xmlstring)\n * .end(callback);\n *\n * request.post('/')\n * .type('application/xml')\n * .send(xmlstring)\n * .end(callback);\n *\n * @param {String} type\n * @return {Request} for chaining\n * @api public\n */\n\nRequest.prototype.type = function(type){\n this.set('Content-Type', request.types[type] || type);\n return this;\n};\n\n/**\n * Set responseType to `val`. Presently valid responseTypes are 'blob' and\n * 'arraybuffer'.\n *\n * Examples:\n *\n * req.get('/')\n * .responseType('blob')\n * .end(callback);\n *\n * @param {String} val\n * @return {Request} for chaining\n * @api public\n */\n\nRequest.prototype.responseType = function(val){\n this._responseType = val;\n return this;\n};\n\n/**\n * Set Accept to `type`, mapping values from `request.types`.\n *\n * Examples:\n *\n * superagent.types.json = 'application/json';\n *\n * request.get('/agent')\n * .accept('json')\n * .end(callback);\n *\n * request.get('/agent')\n * .accept('application/json')\n * .end(callback);\n *\n * @param {String} accept\n * @return {Request} for chaining\n * @api public\n */\n\nRequest.prototype.accept = function(type){\n this.set('Accept', request.types[type] || type);\n return this;\n};\n\n/**\n * Set Authorization field value with `user` and `pass`.\n *\n * @param {String} user\n * @param {String} pass\n * @param {Object} options with 'type' property 'auto' or 'basic' (default 'basic')\n * @return {Request} for chaining\n * @api public\n */\n\nRequest.prototype.auth = function(user, pass, options){\n if (!options) {\n options = {\n type: 'basic'\n }\n }\n\n switch (options.type) {\n case 'basic':\n var str = btoa(user + ':' + pass);\n this.set('Authorization', 'Basic ' + str);\n break;\n\n case 'auto':\n this.username = user;\n this.password = pass;\n break;\n }\n return this;\n};\n\n/**\n* Add query-string `val`.\n*\n* Examples:\n*\n* request.get('/shoes')\n* .query('size=10')\n* .query({ color: 'blue' })\n*\n* @param {Object|String} val\n* @return {Request} for chaining\n* @api public\n*/\n\nRequest.prototype.query = function(val){\n if ('string' != typeof val) val = serialize(val);\n if (val) this._query.push(val);\n return this;\n};\n\n/**\n * Queue the given `file` as an attachment to the specified `field`,\n * with optional `filename`.\n *\n * ``` js\n * request.post('/upload')\n * .attach('content', new Blob(['<a id=\"a\"><b id=\"b\">hey!</b></a>'], { type: \"text/html\"}))\n * .end(callback);\n * ```\n *\n * @param {String} field\n * @param {Blob|File} file\n * @param {String} filename\n * @return {Request} for chaining\n * @api public\n */\n\nRequest.prototype.attach = function(field, file, filename){\n this._getFormData().append(field, file, filename || file.name);\n return this;\n};\n\nRequest.prototype._getFormData = function(){\n if (!this._formData) {\n this._formData = new root.FormData();\n }\n return this._formData;\n};\n\n/**\n * Invoke the callback with `err` and `res`\n * and handle arity check.\n *\n * @param {Error} err\n * @param {Response} res\n * @api private\n */\n\nRequest.prototype.callback = function(err, res){\n var fn = this._callback;\n this.clearTimeout();\n fn(err, res);\n};\n\n/**\n * Invoke callback with x-domain error.\n *\n * @api private\n */\n\nRequest.prototype.crossDomainError = function(){\n var err = new Error('Request has been terminated\\nPossible causes: the network is offline, Origin is not allowed by Access-Control-Allow-Origin, the page is being unloaded, etc.');\n err.crossDomain = true;\n\n err.status = this.status;\n err.method = this.method;\n err.url = this.url;\n\n this.callback(err);\n};\n\n/**\n * Invoke callback with timeout error.\n *\n * @api private\n */\n\nRequest.prototype._timeoutError = function(){\n var timeout = this._timeout;\n var err = new Error('timeout of ' + timeout + 'ms exceeded');\n err.timeout = timeout;\n this.callback(err);\n};\n\n/**\n * Compose querystring to append to req.url\n *\n * @api private\n */\n\nRequest.prototype._appendQueryString = function(){\n var query = this._query.join('&');\n if (query) {\n this.url += ~this.url.indexOf('?')\n ? '&' + query\n : '?' + query;\n }\n};\n\n/**\n * Initiate request, invoking callback `fn(res)`\n * with an instanceof `Response`.\n *\n * @param {Function} fn\n * @return {Request} for chaining\n * @api public\n */\n\nRequest.prototype.end = function(fn){\n var self = this;\n var xhr = this.xhr = request.getXHR();\n var timeout = this._timeout;\n var data = this._formData || this._data;\n\n // store callback\n this._callback = fn || noop;\n\n // state change\n xhr.onreadystatechange = function(){\n if (4 != xhr.readyState) return;\n\n // In IE9, reads to any property (e.g. status) off of an aborted XHR will\n // result in the error \"Could not complete the operation due to error c00c023f\"\n var status;\n try { status = xhr.status } catch(e) { status = 0; }\n\n if (0 == status) {\n if (self.timedout) return self._timeoutError();\n if (self._aborted) return;\n return self.crossDomainError();\n }\n self.emit('end');\n };\n\n // progress\n var handleProgress = function(direction, e) {\n if (e.total > 0) {\n e.percent = e.loaded / e.total * 100;\n }\n e.direction = direction;\n self.emit('progress', e);\n }\n if (this.hasListeners('progress')) {\n try {\n xhr.onprogress = handleProgress.bind(null, 'download');\n if (xhr.upload) {\n xhr.upload.onprogress = handleProgress.bind(null, 'upload');\n }\n } catch(e) {\n // Accessing xhr.upload fails in IE from a web worker, so just pretend it doesn't exist.\n // Reported here:\n // https://connect.microsoft.com/IE/feedback/details/837245/xmlhttprequest-upload-throws-invalid-argument-when-used-from-web-worker-context\n }\n }\n\n // timeout\n if (timeout && !this._timer) {\n this._timer = setTimeout(function(){\n self.timedout = true;\n self.abort();\n }, timeout);\n }\n\n // querystring\n this._appendQueryString();\n\n // initiate request\n if (this.username && this.password) {\n xhr.open(this.method, this.url, true, this.username, this.password);\n } else {\n xhr.open(this.method, this.url, true);\n }\n\n // CORS\n if (this._withCredentials) xhr.withCredentials = true;\n\n // body\n if ('GET' != this.method && 'HEAD' != this.method && 'string' != typeof data && !this._isHost(data)) {\n // serialize stuff\n var contentType = this._header['content-type'];\n var serialize = this._serializer || request.serialize[contentType ? contentType.split(';')[0] : ''];\n if (!serialize && isJSON(contentType)) serialize = request.serialize['application/json'];\n if (serialize) data = serialize(data);\n }\n\n // set header fields\n for (var field in this.header) {\n if (null == this.header[field]) continue;\n xhr.setRequestHeader(field, this.header[field]);\n }\n\n if (this._responseType) {\n xhr.responseType = this._responseType;\n }\n\n // send stuff\n this.emit('request', this);\n\n // IE11 xhr.send(undefined) sends 'undefined' string as POST payload (instead of nothing)\n // We need null here if data is undefined\n xhr.send(typeof data !== 'undefined' ? data : null);\n return this;\n};\n\n\n/**\n * Expose `Request`.\n */\n\nrequest.Request = Request;\n\n/**\n * GET `url` with optional callback `fn(res)`.\n *\n * @param {String} url\n * @param {Mixed|Function} [data] or fn\n * @param {Function} [fn]\n * @return {Request}\n * @api public\n */\n\nrequest.get = function(url, data, fn){\n var req = request('GET', url);\n if ('function' == typeof data) fn = data, data = null;\n if (data) req.query(data);\n if (fn) req.end(fn);\n return req;\n};\n\n/**\n * HEAD `url` with optional callback `fn(res)`.\n *\n * @param {String} url\n * @param {Mixed|Function} [data] or fn\n * @param {Function} [fn]\n * @return {Request}\n * @api public\n */\n\nrequest.head = function(url, data, fn){\n var req = request('HEAD', url);\n if ('function' == typeof data) fn = data, data = null;\n if (data) req.send(data);\n if (fn) req.end(fn);\n return req;\n};\n\n/**\n * OPTIONS query to `url` with optional callback `fn(res)`.\n *\n * @param {String} url\n * @param {Mixed|Function} [data] or fn\n * @param {Function} [fn]\n * @return {Request}\n * @api public\n */\n\nrequest.options = function(url, data, fn){\n var req = request('OPTIONS', url);\n if ('function' == typeof data) fn = data, data = null;\n if (data) req.send(data);\n if (fn) req.end(fn);\n return req;\n};\n\n/**\n * DELETE `url` with optional callback `fn(res)`.\n *\n * @param {String} url\n * @param {Function} [fn]\n * @return {Request}\n * @api public\n */\n\nfunction del(url, fn){\n var req = request('DELETE', url);\n if (fn) req.end(fn);\n return req;\n};\n\nrequest['del'] = del;\nrequest['delete'] = del;\n\n/**\n * PATCH `url` with optional `data` and callback `fn(res)`.\n *\n * @param {String} url\n * @param {Mixed} [data]\n * @param {Function} [fn]\n * @return {Request}\n * @api public\n */\n\nrequest.patch = function(url, data, fn){\n var req = request('PATCH', url);\n if ('function' == typeof data) fn = data, data = null;\n if (data) req.send(data);\n if (fn) req.end(fn);\n return req;\n};\n\n/**\n * POST `url` with optional `data` and callback `fn(res)`.\n *\n * @param {String} url\n * @param {Mixed} [data]\n * @param {Function} [fn]\n * @return {Request}\n * @api public\n */\n\nrequest.post = function(url, data, fn){\n var req = request('POST', url);\n if ('function' == typeof data) fn = data, data = null;\n if (data) req.send(data);\n if (fn) req.end(fn);\n return req;\n};\n\n/**\n * PUT `url` with optional `data` and callback `fn(res)`.\n *\n * @param {String} url\n * @param {Mixed|Function} [data] or fn\n * @param {Function} [fn]\n * @return {Request}\n * @api public\n */\n\nrequest.put = function(url, data, fn){\n var req = request('PUT', url);\n if ('function' == typeof data) fn = data, data = null;\n if (data) req.send(data);\n if (fn) req.end(fn);\n return req;\n};\n","/**\n * Check if `obj` is an object.\n *\n * @param {Object} obj\n * @return {Boolean}\n * @api private\n */\n\nfunction isObject(obj) {\n return null !== obj && 'object' === typeof obj;\n}\n\nmodule.exports = isObject;\n","/**\n * Module of mixed-in functions shared between node and client code\n */\nvar isObject = require('./is-object');\n\n/**\n * Clear previous timeout.\n *\n * @return {Request} for chaining\n * @api public\n */\n\nexports.clearTimeout = function _clearTimeout(){\n this._timeout = 0;\n clearTimeout(this._timer);\n return this;\n};\n\n/**\n * Override default response body parser\n *\n * This function will be called to convert incoming data into request.body\n *\n * @param {Function}\n * @api public\n */\n\nexports.parse = function parse(fn){\n this._parser = fn;\n return this;\n};\n\n/**\n * Override default request body serializer\n *\n * This function will be called to convert data set via .send or .attach into payload to send\n *\n * @param {Function}\n * @api public\n */\n\nexports.serialize = function serialize(fn){\n this._serializer = fn;\n return this;\n};\n\n/**\n * Set timeout to `ms`.\n *\n * @param {Number} ms\n * @return {Request} for chaining\n * @api public\n */\n\nexports.timeout = function timeout(ms){\n this._timeout = ms;\n return this;\n};\n\n/**\n * Promise support\n *\n * @param {Function} resolve\n * @param {Function} reject\n * @return {Request}\n */\n\nexports.then = function then(resolve, reject) {\n if (!this._fullfilledPromise) {\n var self = this;\n this._fullfilledPromise = new Promise(function(innerResolve, innerReject){\n self.end(function(err, res){\n if (err) innerReject(err); else innerResolve(res);\n });\n });\n }\n return this._fullfilledPromise.then(resolve, reject);\n}\n\nexports.catch = function(cb) {\n return this.then(undefined, cb);\n};\n\n/**\n * Allow for extension\n */\n\nexports.use = function use(fn) {\n fn(this);\n return this;\n}\n\n\n/**\n * Get request header `field`.\n * Case-insensitive.\n *\n * @param {String} field\n * @return {String}\n * @api public\n */\n\nexports.get = function(field){\n return this._header[field.toLowerCase()];\n};\n\n/**\n * Get case-insensitive header `field` value.\n * This is a deprecated internal API. Use `.get(field)` instead.\n *\n * (getHeader is no longer used internally by the superagent code base)\n *\n * @param {String} field\n * @return {String}\n * @api private\n * @deprecated\n */\n\nexports.getHeader = exports.get;\n\n/**\n * Set header `field` to `val`, or multiple fields with one object.\n * Case-insensitive.\n *\n * Examples:\n *\n * req.get('/')\n * .set('Accept', 'application/json')\n * .set('X-API-Key', 'foobar')\n * .end(callback);\n *\n * req.get('/')\n * .set({ Accept: 'application/json', 'X-API-Key': 'foobar' })\n * .end(callback);\n *\n * @param {String|Object} field\n * @param {String} val\n * @return {Request} for chaining\n * @api public\n */\n\nexports.set = function(field, val){\n if (isObject(field)) {\n for (var key in field) {\n this.set(key, field[key]);\n }\n return this;\n }\n this._header[field.toLowerCase()] = val;\n this.header[field] = val;\n return this;\n};\n\n/**\n * Remove header `field`.\n * Case-insensitive.\n *\n * Example:\n *\n * req.get('/')\n * .unset('User-Agent')\n * .end(callback);\n *\n * @param {String} field\n */\nexports.unset = function(field){\n delete this._header[field.toLowerCase()];\n delete this.header[field];\n return this;\n};\n\n/**\n * Write the field `name` and `val`, or multiple fields with one object\n * for \"multipart/form-data\" request bodies.\n *\n * ``` js\n * request.post('/upload')\n * .field('foo', 'bar')\n * .end(callback);\n *\n * request.post('/upload')\n * .field({ foo: 'bar', baz: 'qux' })\n * .end(callback);\n * ```\n *\n * @param {String|Object} name\n * @param {String|Blob|File|Buffer|fs.ReadStream} val\n * @return {Request} for chaining\n * @api public\n */\nexports.field = function(name, val) {\n\n // name should be either a string or an object.\n if (null === name || undefined === name) {\n throw new Error('.field(name, val) name can not be empty');\n }\n\n if (isObject(name)) {\n for (var key in name) {\n this.field(key, name[key]);\n }\n return this;\n }\n\n // val should be defined now\n if (null === val || undefined === val) {\n throw new Error('.field(name, val) val can not be empty');\n }\n this._getFormData().append(name, val);\n return this;\n};\n\n/**\n * Abort the request, and clear potential timeout.\n *\n * @return {Request}\n * @api public\n */\nexports.abort = function(){\n if (this._aborted) {\n return this;\n }\n this._aborted = true;\n this.xhr && this.xhr.abort(); // browser\n this.req && this.req.abort(); // node\n this.clearTimeout();\n this.emit('abort');\n return this;\n};\n\n/**\n * Enable transmission of cookies with x-domain requests.\n *\n * Note that for this to work the origin must not be\n * using \"Access-Control-Allow-Origin\" with a wildcard,\n * and also must set \"Access-Control-Allow-Credentials\"\n * to \"true\".\n *\n * @api public\n */\n\nexports.withCredentials = function(){\n // This is browser-only functionality. Node side is no-op.\n this._withCredentials = true;\n return this;\n};\n\n/**\n * Set the max redirects to `n`. Does noting in browser XHR implementation.\n *\n * @param {Number} n\n * @return {Request} for chaining\n * @api public\n */\n\nexports.redirects = function(n){\n this._maxRedirects = n;\n return this;\n};\n\n/**\n * Convert to a plain javascript object (not JSON string) of scalar properties.\n * Note as this method is designed to return a useful non-this value,\n * it cannot be chained.\n *\n * @return {Object} describing method, url, and data of this request\n * @api public\n */\n\nexports.toJSON = function(){\n return {\n method: this.method,\n url: this.url,\n data: this._data,\n headers: this._header\n };\n};\n\n/**\n * Check if `obj` is a host object,\n * we don't want to serialize these :)\n *\n * TODO: future proof, move to compoent land\n *\n * @param {Object} obj\n * @return {Boolean}\n * @api private\n */\n\nexports._isHost = function _isHost(obj) {\n var str = {}.toString.call(obj);\n\n switch (str) {\n case '[object File]':\n case '[object Blob]':\n case '[object FormData]':\n return true;\n default:\n return false;\n }\n}\n\n/**\n * Send `data` as the request body, defaulting the `.type()` to \"json\" when\n * an object is given.\n *\n * Examples:\n *\n * // manual json\n * request.post('/user')\n * .type('json')\n * .send('{\"name\":\"tj\"}')\n * .end(callback)\n *\n * // auto json\n * request.post('/user')\n * .send({ name: 'tj' })\n * .end(callback)\n *\n * // manual x-www-form-urlencoded\n * request.post('/user')\n * .type('form')\n * .send('name=tj')\n * .end(callback)\n *\n * // auto x-www-form-urlencoded\n * request.post('/user')\n * .type('form')\n * .send({ name: 'tj' })\n * .end(callback)\n *\n * // defaults to x-www-form-urlencoded\n * request.post('/user')\n * .send('name=tobi')\n * .send('species=ferret')\n * .end(callback)\n *\n * @param {String|Object} data\n * @return {Request} for chaining\n * @api public\n */\n\nexports.send = function(data){\n var obj = isObject(data);\n var type = this._header['content-type'];\n\n // merge\n if (obj && isObject(this._data)) {\n for (var key in data) {\n this._data[key] = data[key];\n }\n } else if ('string' == typeof data) {\n // default to x-www-form-urlencoded\n if (!type) this.type('form');\n type = this._header['content-type'];\n if ('application/x-www-form-urlencoded' == type) {\n this._data = this._data\n ? this._data + '&' + data\n : data;\n } else {\n this._data = (this._data || '') + data;\n }\n } else {\n this._data = data;\n }\n\n if (!obj || this._isHost(data)) return this;\n\n // default to json\n if (!type) this.type('json');\n return this;\n};\n","// The node and browser modules expose versions of this with the\n// appropriate constructor function bound as first argument\n/**\n * Issue a request:\n *\n * Examples:\n *\n * request('GET', '/users').end(callback)\n * request('/users').end(callback)\n * request('/users', callback)\n *\n * @param {String} method\n * @param {String|Function} url or callback\n * @return {Request}\n * @api public\n */\n\nfunction request(RequestConstructor, method, url) {\n // callback\n if ('function' == typeof url) {\n return new RequestConstructor('GET', method).end(url);\n }\n\n // url first\n if (2 == arguments.length) {\n return new RequestConstructor('GET', method);\n }\n\n return new RequestConstructor(method, url);\n}\n\nmodule.exports = request;\n"]}
|